From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 13:59:10 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91Bwb0g021713;
	Mon, 1 Oct 2012 13:59:02 +0200
Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com
 [209.85.160.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91BwYkT021643
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 13:58:35 +0200
Received: by pbbrp8 with SMTP id rp8so7434150pbb.41
 for <libssh2-devel@cool.haxx.se>; Mon, 01 Oct 2012 04:58:28 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:date:message-id:subject:from:to:content-type;
 bh=upJuud/RF+zNimvLgD/0w/haJcZhaPEf0Pv5X8r7ECg=;
 b=NoEMjWg7eYmVoojHst+AztqOYFtNN/JwrLski6cox+CyTmSKMAC0kcfcxIJHCU8s9s
 B8U9b2JlokLt0txapLs1lXPMUhd9oEsjquPnnrKq6H+CmugjqAMfNrpnRT8prHYwsPOw
 kdqMx4D9FsbV9qLY8aaUgEuw7lPySgTTYxPC/nlAXeHXymXIImSCr8m7EhtkYv548ud7
 dIccm8zC/HxBq2YfaemtqPqwR00WchT25pac55waCBK0/RN3IGpNNJW1314h9sePdJ+f
 ZdFCYFwsNZQu2SSP7L0tNbKmFhuVnuOp1TwvHSZ2emXxMq9biTlBntP/rH0bNksqSW6E
 eemg==
MIME-Version: 1.0
Received: by 10.66.84.6 with SMTP id u6mr35886979pay.75.1349092708763; Mon, 01
 Oct 2012 04:58:28 -0700 (PDT)
Received: by 10.66.190.131 with HTTP; Mon, 1 Oct 2012 04:58:28 -0700 (PDT)
Date: Mon, 1 Oct 2012 13:58:28 +0200
Message-ID: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
Subject: ProFTPD SFTP connection problem
From: Michael Krietemeyer <michael.krietemeyer@gmail.com>
To: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============0139330806=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============0139330806==
Content-Type: multipart/alternative; boundary=f46d042f955cacc87f04cafe1ffa

--f46d042f955cacc87f04cafe1ffa
Content-Type: text/plain; charset=UTF-8

Hello,

I am using a libssh2 based client to connect to a ProFTPD with mod_sftp
(0.9.7). I have teseted it with different versions of the library (1.3.0
and 1.4.2). I alwasy got the following errors (at the end of this post).

If I use a very old libssh2 implementation (0.11) the connection works
well.

Can someone help me?

Thanks in advance
Michael


Log messages:
Aug 20 09:09:35 [23657] <ssh2:3>: unable to use 'none' cipher: Must be
explicitly requested via SFTPCiphers
Aug 20 09:09:35 [23657] <ssh2:3>: unable to use 'none' digest: Must be
explicitly requested via SFTPDigests
Aug 20 09:09:35 [23657] <ssh2:9>: sending KEXINIT message to client
Aug 20 09:09:35 [23657] <ssh2:3>: sent SSH_MSG_KEXINIT (20) packet
Aug 20 09:09:35 [23657] <ssh2:5>: handling connection from SSH2 client
'libssh2_1.4.2 PHP'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex
'^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex
'^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex
'^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex
'^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^OpenSSH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^OpenSSH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '.*MindTerm.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '.*MindTerm.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^Sun_SSH_1\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^Sun_SSH_1\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^2\.1\.0.*|^2\.1 .*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^2\.1\.0.*|^2\.1 .*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex
'^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex
'^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^2\.0\.11.*|^2\.0\.12.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^2\.0\.11.*|^2\.0\.12.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^2\.0\..*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^2\.0\..*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^2\.2\.0.*|^2\.3\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^2\.2\.0.*|^2\.3\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex
'^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex
'^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '.*SSH_Version_Mapper.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '.*SSH_Version_Mapper.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against regex '^Probe-.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match regex '^Probe-.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against SFTPClientMatch regex '.*'
Aug 20 09:09:35 [23657] <ssh2:16>: setting max server channel window size
to 536870912 bytes, as per SFTPClientMatch
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against SFTPClientMatch regex '.*WS_FTP.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match SFTPClientMatch regex '.*WS_FTP.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against SFTPClientMatch regex '.*WeOnlyDo.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match SFTPClientMatch regex '.*WeOnlyDo.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against SFTPClientMatch regex '.*JSCH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match SFTPClientMatch regex '.*JSCH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libssh2_1.4.2
PHP' against SFTPClientMatch regex '.*EldoS.SSHBlackbox.*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did
not match SFTPClientMatch regex '.*EldoS.SSHBlackbox.*'
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 804 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len = 167 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len = 636 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len = 0 bytes
Aug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_KEXINIT (20) packet
Aug 20 09:09:36 [23657] <ssh2:9>: reading KEXINIT message from client
Aug 20 09:09:36 [23657] <ssh2:3>: first kex packet follows = false
Aug 20 09:09:36 [23657] <ssh2:9>: determining shared algorithms for SSH
session
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent key exchange algorithms:
diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
Aug 20 09:09:36 [23657] <ssh2:9>: attempt #1 to create a good DH key
Aug 20 09:09:36 [23657] <ssh2:12>: generating DH key
Aug 20 09:09:36 [23657] <ssh2:10>: good DH public key: 1075 bits set
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent host key algorithms:
ssh-rsa,ssh-dss
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client encryption algorithms:
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se
,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server encryption algorithms:
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se
,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client MAC algorithms:
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,
hmac-ripemd160@openssh.com
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server MAC algorithms:
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,
hmac-ripemd160@openssh.com
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client compression
algorithms: none
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server compression
algorithms: none
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client languages:
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server languages:
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 508 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len = 246 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len = 261 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len = 0 bytes
Aug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_KEX_DH_INIT (30) packet
Aug 20 09:09:36 [23657] <ssh2:9>: reading DH_INIT message from client
Aug 20 09:09:36 [23657] <ssh2:9>: writing DH_INIT message to client
Aug 20 09:09:36 [23657] <ssh2:12>: computing DH key
Aug 20 09:09:36 [23657] <ssh2:3>: sent SSH_MSG_KEX_DH_REPLY (31) packet
Aug 20 09:09:36 [23657] <ssh2:9>: reading NEWKEYS message from client
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 180 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len = 178 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len = 1 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len = 0 bytes
Aug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_NEWKEYS (21) packet
Aug 20 09:09:36 [23657] <ssh2:9>: sending NEWKEYS message to client
Aug 20 09:09:36 [23657] <ssh2:3>: sent SSH_MSG_NEWKEYS (21) packet
Aug 20 09:09:36 [23657] <ssh2:9>: setting session keys
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 2751686127 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len = 209 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len = 2751685917
bytes
Aug 20 09:09:36 [23657] <ssh2:20>: payload len (2751685917 bytes) exceeds
max payload len (262144), ignoring payload
Aug 20 09:09:36 [23657] <ssh2:3>: reading 10448 bytes of data for discarding
Aug 20 09:09:36 [23657] <ssh2:20>: read 116 bytes, expected 10448 bytes;
pessimistically returning
Aug 20 09:09:36 [23657] <ssh2:9>: disconnecting (Application error) [at
packet.c:1247]
Aug 20 09:09:36 [23657] <ssh2:3>: sent SSH_MSG_DISCONNECT (1) packet

--f46d042f955cacc87f04cafe1ffa
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<span style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12p=
x;line-height:17.46666717529297px;background-color:rgb(231,234,239)">Hello,=
</span><br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-siz=
e:12px;line-height:17.46666717529297px;background-color:rgb(231,234,239)">
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)"><span st=
yle=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-h=
eight:17.46666717529297px;background-color:rgb(231,234,239)">I am using a l=
ibssh2 based client to connect to a ProFTPD with mod_sftp (0.9.7). I have t=
eseted it with different versions of the library (1.3.0 and 1.4.2). I alwas=
y got the following errors (at the end of this post).</span><br style=3D"fo=
nt-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-height:17.=
46666717529297px;background-color:rgb(231,234,239)">
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)"><span st=
yle=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-h=
eight:17.46666717529297px;background-color:rgb(231,234,239)">If I use a ver=
y old libssh2 implementation (0.11) the connection works well.=C2=A0</span>=
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)">
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)"><span st=
yle=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-h=
eight:17.46666717529297px;background-color:rgb(231,234,239)">Can someone he=
lp me?</span><br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;fo=
nt-size:12px;line-height:17.46666717529297px;background-color:rgb(231,234,2=
39)">
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)"><span st=
yle=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-h=
eight:17.46666717529297px;background-color:rgb(231,234,239)">Thanks in adva=
nce</span><br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-=
size:12px;line-height:17.46666717529297px;background-color:rgb(231,234,239)=
">
<span style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12p=
x;line-height:17.46666717529297px;background-color:rgb(231,234,239)">Michae=
l</span><br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-si=
ze:12px;line-height:17.46666717529297px;background-color:rgb(231,234,239)">
<br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;=
line-height:17.46666717529297px;background-color:rgb(231,234,239)"><br styl=
e=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-hei=
ght:17.46666717529297px;background-color:rgb(231,234,239)">
<span style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12p=
x;line-height:17.46666717529297px;background-color:rgb(231,234,239)">Log me=
ssages:</span><br style=3D"font-family:Verdana,Arial,Helvetica,sans-serif;f=
ont-size:12px;line-height:17.46666717529297px;background-color:rgb(231,234,=
239)">
<span class=3D"bbc_font" style=3D"font-size:12px;line-height:17.46666717529=
297px;background-color:rgb(231,234,239);font-family:courier">Aug 20 09:09:3=
5 [23657] &lt;ssh2:3&gt;: unable to use &#39;none&#39; cipher: Must be expl=
icitly requested via SFTPCiphers<br>
Aug 20 09:09:35 [23657] &lt;ssh2:3&gt;: unable to use &#39;none&#39; digest=
: Must be explicitly requested via SFTPDigests<br>Aug 20 09:09:35 [23657] &=
lt;ssh2:9&gt;: sending KEXINIT message to client<br>Aug 20 09:09:35 [23657]=
 &lt;ssh2:3&gt;: sent SSH_MSG_KEXINIT (20) packet<br>
Aug 20 09:09:35 [23657] &lt;ssh2:5&gt;: handling connection from SSH2 clien=
t &#39;libssh2_1.4.2 PHP&#39;<br>Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: c=
hecking client version &#39;libssh2_1.4.2 PHP&#39; against regex &#39;^Open=
SSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0=
.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 =
PHP&#39; did not match regex &#39;^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_=
2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*&#39;<br>Aug 20 09:09:35 [23657] &=
lt;ssh2:18&gt;: checking client version &#39;libssh2_1.4.2 PHP&#39; against=
 regex &#39;^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^Op=
enSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*&#3=
9;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 =
PHP&#39; did not match regex &#39;^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^O=
penSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*=
|^OpenSSH_2\.5\.3.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^OpenSSH.*&#39;<br>Aug 20 09:09:35 [23=
657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not ma=
tch regex &#39;^OpenSSH.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;.*MindTerm.*&#39;<br>Aug 20 09:09:35 [=
23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not =
match regex &#39;.*MindTerm.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^Sun_SSH_1\.0.*&#39;<br>Aug 20 09:09:3=
5 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did n=
ot match regex &#39;^Sun_SSH_1\.0.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^2\.1\.0.*|^2\.1 .*&#39;<br>Aug 20 09:=
09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; d=
id not match regex &#39;^2\.1\.0.*|^2\.1 .*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2=
\.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*&#39;<br>Aug 20 09:09:35 [2365=
7] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not matc=
h regex &#39;^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2=
\.0\.18.*|^2\.0\.19.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^2\.0\.11.*|^2\.0\.12.*&#39;<br>Aug 20=
 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#3=
9; did not match regex &#39;^2\.0\.11.*|^2\.0\.12.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^2\.0\..*&#39;<br>Aug 20 09:09:35 [236=
57] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not mat=
ch regex &#39;^2\.0\..*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^2\.2\.0.*|^2\.3\.0.*&#39;<br>Aug 20 0=
9:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39;=
 did not match regex &#39;^2\.2\.0.*|^2\.3\.0.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1=
\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*&#39;<br>Aug 20 09:09:35 [23657] &lt;ssh2:1=
8&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not match regex &#39;=
^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*&#39;=
<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;.*SSH_Version_Mapper.*&#39;<br>Aug 20 =
09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39=
; did not match regex &#39;.*SSH_Version_Mapper.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against regex &#39;^Probe-.*&#39;<br>Aug 20 09:09:35 [236=
57] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#39; did not mat=
ch regex &#39;^Probe-.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against SFTPClientMatch regex &#39;.*&#39;<br>Aug 20 09:0=
9:35 [23657] &lt;ssh2:16&gt;: setting max server channel window size to 536=
870912 bytes, as per SFTPClientMatch<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against SFTPClientMatch regex &#39;.*WS_FTP.*&#39;<br>Aug=
 20 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP=
&#39; did not match SFTPClientMatch regex &#39;.*WS_FTP.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against SFTPClientMatch regex &#39;.*WeOnlyDo.*&#39;<br>A=
ug 20 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 P=
HP&#39; did not match SFTPClientMatch regex &#39;.*WeOnlyDo.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against SFTPClientMatch regex &#39;.*JSCH.*&#39;<br>Aug 2=
0 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh2_1.4.2 PHP&#=
39; did not match SFTPClientMatch regex &#39;.*JSCH.*&#39;<br>
Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: checking client version &#39;libss=
h2_1.4.2 PHP&#39; against SFTPClientMatch regex &#39;.*EldoS.SSHBlackbox.*&=
#39;<br>Aug 20 09:09:35 [23657] &lt;ssh2:18&gt;: client version &#39;libssh=
2_1.4.2 PHP&#39; did not match SFTPClientMatch regex &#39;.*EldoS.SSHBlackb=
ox.*&#39;<br>
Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet len =3D 804 bytes<br>A=
ug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet padding len =3D 167 byt=
es<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet payload len =3D =
636 bytes<br>
Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet MAC len =3D 0 bytes<br=
>Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: received SSH_MSG_KEXINIT (20) pack=
et<br>Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: reading KEXINIT message from =
client<br>
Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: first kex packet follows =3D false<=
br>Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: determining shared algorithms fo=
r SSH session<br>Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent key ex=
change algorithms: diffie-hellman-group14-sha1,diffie-hellman-group-exchang=
e-sha1,diffie-hellman-group1-sha1<br>
Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: attempt #1 to create a good DH key<=
br>Aug 20 09:09:36 [23657] &lt;ssh2:12&gt;: generating DH key<br>Aug 20 09:=
09:36 [23657] &lt;ssh2:10&gt;: good DH public key: 1075 bits set<br>Aug 20 =
09:09:36 [23657] &lt;ssh2:8&gt;: client-sent host key algorithms: ssh-rsa,s=
sh-dss<br>
Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent client encryption algor=
ithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,<a href=3D"mailto:rijnda=
el-cbc@lysator.liu.se">rijndael-cbc@lysator.liu.se</a>,aes192-cbc,aes128-cb=
c,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc<br>
Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent server encryption algor=
ithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,<a href=3D"mailto:rijnda=
el-cbc@lysator.liu.se">rijndael-cbc@lysator.liu.se</a>,aes192-cbc,aes128-cb=
c,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc<br>
Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent client MAC algorithms: =
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,<a href=3D"mailt=
o:hmac-ripemd160@openssh.com">hmac-ripemd160@openssh.com</a><br>Aug 20 09:0=
9:36 [23657] &lt;ssh2:8&gt;: client-sent server MAC algorithms: hmac-sha1,h=
mac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,<a href=3D"mailto:hmac-ripe=
md160@openssh.com">hmac-ripemd160@openssh.com</a><br>
Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent client compression algo=
rithms: none<br>Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent server =
compression algorithms: none<br>Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: cli=
ent-sent client languages:=C2=A0<br>
Aug 20 09:09:36 [23657] &lt;ssh2:8&gt;: client-sent server languages:=C2=A0=
<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet len =3D 508 bytes<=
br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet padding len =3D 246=
 bytes<br>
Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet payload len =3D 261 by=
tes<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet MAC len =3D 0 b=
ytes<br>Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: received SSH_MSG_KEX_DH_INI=
T (30) packet<br>
Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: reading DH_INIT message from client=
<br>Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: writing DH_INIT message to clie=
nt<br>Aug 20 09:09:36 [23657] &lt;ssh2:12&gt;: computing DH key<br>Aug 20 0=
9:09:36 [23657] &lt;ssh2:3&gt;: sent SSH_MSG_KEX_DH_REPLY (31) packet<br>
Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: reading NEWKEYS message from client=
<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet len =3D 180 bytes<=
br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet padding len =3D 178=
 bytes<br>
Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet payload len =3D 1 byte=
s<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet MAC len =3D 0 byt=
es<br>Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: received SSH_MSG_NEWKEYS (21)=
 packet<br>
Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: sending NEWKEYS message to client<b=
r>Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: sent SSH_MSG_NEWKEYS (21) packet<=
br>Aug 20 09:09:36 [23657] &lt;ssh2:9&gt;: setting session keys<br>Aug 20 0=
9:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet len =3D 2751686127 bytes<br>
Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet padding len =3D 209 by=
tes<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: SSH2 packet payload len =3D=
 2751685917 bytes<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: payload len (=
2751685917 bytes) exceeds max payload len (262144), ignoring payload<br>
Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: reading 10448 bytes of data for dis=
carding<br>Aug 20 09:09:36 [23657] &lt;ssh2:20&gt;: read 116 bytes, expecte=
d 10448 bytes; pessimistically returning<br>Aug 20 09:09:36 [23657] &lt;ssh=
2:9&gt;: disconnecting (Application error) [at packet.c:1247]<br>
Aug 20 09:09:36 [23657] &lt;ssh2:3&gt;: sent SSH_MSG_DISCONNECT (1) packet<=
/span>

--f46d042f955cacc87f04cafe1ffa--

--===============0139330806==
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

--===============0139330806==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 14:35:56 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91CZmDL020549;
	Mon, 1 Oct 2012 14:35:54 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91CZkV9020535
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 14:35:47 +0200
Received: (qmail 11171 invoked by uid 501); 1 Oct 2012 12:35:47 -0000
Message-ID: <20121001123547.11170.qmail@stuge.se>
Date: Mon, 1 Oct 2012 14:35:47 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: ProFTPD SFTP connection problem
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Hi,

Michael Krietemeyer wrote:
> I am using a libssh2 based client to connect to a ProFTPD with mod_sftp
> (0.9.7). I have teseted it with different versions of the library (1.3.0
> and 1.4.2). I alwasy got the following errors (at the end of this post).

Interesting. Please build a libssh2 library with debugging enabled:

./configure --enable-debug

And ideally use one of the included examples instead of PHP bindings:

example/sftp

But please modify the source code sftp.c to call

libssh2_trace(session,~0);

..right before the call to libssh2_session_handshake() on line 161.

Please send the output.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 14:52:59 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91Cqrvp032763;
	Mon, 1 Oct 2012 14:52:58 +0200
Received: from na3sys009aog102.obsmtp.com (na3sys009aog102.obsmtp.com
 [74.125.149.69])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91CqnI7032739
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 14:52:49 +0200
Received: from mail-pa0-f54.google.com ([209.85.220.54]) (using TLSv1) by
 na3sys009aob102.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUGmSIZ4N9WPstyrs4azMpwwkNJOWPVV0@postini.com;
 Mon, 01 Oct 2012 05:52:51 PDT
Received: by padbi1 with SMTP id bi1so4066964pad.41
 for <libssh2-devel@cool.haxx.se>; Mon, 01 Oct 2012 05:52:49 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=L8y4Xzb0WJZDC/fMRMQZaK44rk4vo+KOgiwyTexMLM0=;
 b=mbnZBHeNfIHSFFESALdpNGgQGdK7dgKF9XiF+0adArHPxScCq0lcU1gVZazHbkSGGL
 YhLUCcWc8nkPs4iRLQxzI6JRz/ljIkm/VcRkXB6fT/Jwmdxy8miTj/qFLUtwoRwD4/qu
 CX9f+z/iAypa/EFMtj8DgLM/S9jGV9mIHS5Y1AEb4MXwK4tirblCpwzJ4nh7cgXbz7kM
 8+1te9LAR6YU33KFtX7P4x5PTVGITK9j/Fr7vzi1/hbXYVr5sBMzXY43skE7XYepP9ht
 dDThPyH0drPSxUsARmtKUSU9AZEPesd+4oRhgqEGzbtk7N00P16PhMIwE/0tSqHgYUZf
 Hj6Q==
MIME-Version: 1.0
Received: by 10.68.129.98 with SMTP id nv2mr40907628pbb.85.1349095969187; Mon,
 01 Oct 2012 05:52:49 -0700 (PDT)
Received: by 10.66.253.103 with HTTP; Mon, 1 Oct 2012 05:52:49 -0700 (PDT)
In-Reply-To: <CAJ5mg=8J6-fRAt17ZWyw1fehEAqWSRwMu9AfAgPxuSGTw2YWAg@mail.gmail.com>
References: <CAJ5mg=_o7vskjkpD1Hvw5BsXKcO-HhAyRC7SGPg3Qtux0OCLJw@mail.gmail.com>
 <505A5B66.30207@yahoo.ca>
 <alpine.DEB.2.00.1209201016440.18801@tvnag.unkk.fr>
 <CAJ5mg=8J6-fRAt17ZWyw1fehEAqWSRwMu9AfAgPxuSGTw2YWAg@mail.gmail.com>
Date: Mon, 1 Oct 2012 08:52:49 -0400
Message-ID: <CAJ5mg=9bp-3PN1_jQOevkeuA-WrnEMk_-xY8bZzE0LY99XuLGA@mail.gmail.com>
Subject: Re: libssh2_channel_wait_closed(...) issue
From: Chris Harris <chris.harris@kitware.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Gm-Message-State: ALoCoQnRwHaKkuD4FkzXBTFrIDM7tvJP3CJN8rTRu2iAm81hAEealTvt9anwXR1i8NgohD/isNr/
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1335321426=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1335321426==
Content-Type: multipart/alternative; boundary=047d7b10ce7702e8e504cafee2fe

--047d7b10ce7702e8e504cafee2fe
Content-Type: text/plain; charset=ISO-8859-1

I have a little more information on this. I enable debug trace on the sshd
side.

This is the snippet of trace where I get a -21 error code from libssh2:

Sep 20 10:08:21 salix sshd[14975]: debug1: session_input_channel_req:
session 0 req exec
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 3 setting TCP_NODELAY
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 10 setting O_NONBLOCK
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 9 setting O_NONBLOCK
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 12 setting O_NONBLOCK
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read<=0 rfd 10 len 0
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read failed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_read
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input open -> drain
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read 0 from efd 12
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: closing read-efd 12
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: ibuf empty
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eof
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input drain -> closed
Sep 20 10:08:21 salix sshd[14975]: debug2: notify_done: reading
Sep 20 10:08:21 salix sshd[14975]: debug1: Received SIGCHLD.
Sep 20 10:08:21 salix sshd[14975]: debug1: session_by_pid: pid 14976
Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: session 0
channel 0 pid 14976
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: request exit-status
confirm 0
Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: release
channel 0
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: write failed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_write
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eow
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: output open -> closed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send close
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd eof
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd close
Sep 20 10:08:21 salix sshd[14975]: debug1: server_input_channel_open: ctype
session rchan 1 win 262144 max 32768
Sep 20 10:08:21 salix sshd[14975]: debug1: input_session_request
Sep 20 10:08:21 salix sshd[14975]: debug1: channel 1: new [server-session]
Sep 20 10:08:21 salix sshd[14975]: debug1: session_open: channel 1
Sep 20 10:08:21 salix sshd[14975]: error: no more sessions

And this is the snippet with the delay add:

Sep 20 10:11:26 salix sshd[16409]: debug1: session_input_channel_req:
session 0 req exec
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 3 setting TCP_NODELAY
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 10 setting O_NONBLOCK
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 9 setting O_NONBLOCK
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 12 setting O_NONBLOCK
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read<=0 rfd 10 len 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read failed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_read
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input open -> drain
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read 0 from efd 12
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: closing read-efd 12
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: ibuf empty
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eof
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input drain -> closed
Sep 20 10:11:26 salix sshd[16409]: debug2: notify_done: reading
Sep 20 10:11:26 salix sshd[16409]: debug1: Received SIGCHLD.
Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_pid: pid 16410
Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: session 0
channel 0 pid 16410
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: request exit-status
confirm 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: release
channel 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: write failed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_write
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eow
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: output open -> closed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send close
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd eof
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd close
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: notify user
Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_channel: session 0
channel 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_close_by_channel:
channel 0 child 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_close: session 0 pid 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: user detached
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: garbage collecting
Sep 20 10:11:26 salix sshd[16409]: debug1: channel 0: free: server-session,
nchannels 1
Sep 20 10:11:27 salix sshd[16409]: debug1: server_input_channel_open: ctype
session rchan 1 win 262144 max 32768
Sep 20 10:11:27 salix sshd[16409]: debug1: input_session_request
Sep 20 10:11:27 salix sshd[16409]: debug1: channel 0: new [server-session]

It looks to me like the GC step needs to complete before another channel
can be requested. I am not familiar with the ssh protocol but should
libssh2 be waiting for this step to complete before
libssh2_channel_wait_closed()
returns?

Many Thanks,

Chris


On Thu, Sep 20, 2012 at 10:06 AM, Chris Harris <chris.harris@kitware.com>wrote:

> Maxime & Daniel,
>
> Thanks very much for the quick response. I tried the patch, but sadly it
> has no effect in this situation. Let me know if there is more information I
> can provide to help. If I get some time today I will start taking a look at
> the code myself as well.
>
> Regards,
>
> Chris
>
>
> On Thu, Sep 20, 2012 at 4:20 AM, Daniel Stenberg <daniel@haxx.se> wrote:
>
>> On Wed, 19 Sep 2012, Maxime Larocque wrote:
>>
>>  I had a similar trouble with libssh2 1.4.2, and I submitted a patch to
>>> correct this:
>>>
>>> http://trac.libssh2.org/**ticket/245<http://trac.libssh2.org/ticket/245>
>>>
>>> Under some conditions, libssh2 did not close the channel correctly. I am
>>> not sure if it applies to your case...
>>>
>>
>> Thanks for pointing out this potential fix! Chris, let us know if it
>> changes anything for you. I gave libssh2_channel_wait_closed() a quick
>> glance yesterday and I couldn't spot anything really wrong standing out so
>> it will take some proper digging to debug this more.
>>
>> I figure it goes without saying, but I'll state it anyway:
>>
>> We are only a few people actually involved in this project. Those of us
>> who have push rights to git will HUGELY appreciate your feedback, comments
>> and additional tests of patches and bug reports as provided. That helps us
>> merge things into git and future releases with more confidence and speed.
>>
>> --
>>
>>  / daniel.haxx.se
>> ______________________________**_________________
>> libssh2-devel http://cool.haxx.se/cgi-bin/**
>> mailman/listinfo/libssh2-devel<http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>
>>
>
>

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

I have a little more information on this. I enable debug trace on the sshd =
side.=A0<div><br></div><div>This is the snippet of trace where I get a -21 =
error code from libssh2:</div><div><br></div><div><div>Sep 20 10:08:21 sali=
x sshd[14975]: debug1: session_input_channel_req: session 0 req exec</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: fd 3 setting TCP_NODELAY</d=
iv><div>Sep 20 10:08:21 salix sshd[14975]: debug2: fd 10 setting O_NONBLOCK=
</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: fd 9 setting O_NONBLO=
CK</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: fd 12 setting O_NONBLOCK</d=
iv><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read&lt;=3D0 =
rfd 10 len 0</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0=
: read failed</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_read</div>=
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input open -&gt;=
 drain</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read=
 0 from efd 12</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: closing read-efd=
 12</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: ibuf em=
pty</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eo=
f</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input drain -&gt=
; closed</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: notify_done: =
reading</div><div>Sep 20 10:08:21 salix sshd[14975]: debug1: Received SIGCH=
LD.</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug1: session_by_pid: pid 14976</=
div><div>Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: s=
ession 0 channel 0 pid 14976</div><div>Sep 20 10:08:21 salix sshd[14975]: d=
ebug2: channel 0: request exit-status confirm 0</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: relea=
se channel 0</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0=
: write failed</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel=
 0: close_write</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eow</div><d=
iv>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: output open -&gt; =
closed</div><div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send=
 close</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd eof</div><d=
iv>Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd close</div><d=
iv>Sep 20 10:08:21 salix sshd[14975]: debug1: server_input_channel_open: ct=
ype session rchan 1 win 262144 max 32768</div>
<div>Sep 20 10:08:21 salix sshd[14975]: debug1: input_session_request</div>=
<div>Sep 20 10:08:21 salix sshd[14975]: debug1: channel 1: new [server-sess=
ion]</div><div>Sep 20 10:08:21 salix sshd[14975]: debug1: session_open: cha=
nnel 1</div>
<div>Sep 20 10:08:21 salix sshd[14975]: error: no more sessions</div></div>=
<div><br></div><div>And this is the snippet with the delay add:</div><div><=
br></div><div><div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_input=
_channel_req: session 0 req exec</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: fd 3 setting TCP_NODELAY</d=
iv><div>Sep 20 10:11:26 salix sshd[16409]: debug2: fd 10 setting O_NONBLOCK=
</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: fd 9 setting O_NONBLO=
CK</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: fd 12 setting O_NONBLOCK</d=
iv><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read&lt;=3D0 =
rfd 10 len 0</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0=
: read failed</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_read</div>=
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input open -&gt;=
 drain</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read=
 0 from efd 12</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: closing read-efd=
 12</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: ibuf em=
pty</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eo=
f</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input drain -&gt=
; closed</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: notify_done: =
reading</div><div>Sep 20 10:11:26 salix sshd[16409]: debug1: Received SIGCH=
LD.</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_pid: pid 16410</=
div><div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: s=
ession 0 channel 0 pid 16410</div><div>Sep 20 10:11:26 salix sshd[16409]: d=
ebug2: channel 0: request exit-status confirm 0</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: relea=
se channel 0</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0=
: write failed</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel=
 0: close_write</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eow</div><d=
iv>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: output open -&gt; =
closed</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send=
 close</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd eof</div><d=
iv>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd close</div><d=
iv>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead</div><div>
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: notify user</div>=
<div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_channel: session=
 0 channel 0</div><div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_c=
lose_by_channel: channel 0 child 0</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug1: session_close: session 0 pi=
d 0</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: use=
r detached</div><div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: =
is dead</div>
<div>Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: garbage collecti=
ng</div><div>Sep 20 10:11:26 salix sshd[16409]: debug1: channel 0: free: se=
rver-session, nchannels 1</div><div>Sep 20 10:11:27 salix sshd[16409]: debu=
g1: server_input_channel_open: ctype session rchan 1 win 262144 max 32768</=
div>
<div>Sep 20 10:11:27 salix sshd[16409]: debug1: input_session_request</div>=
<div>Sep 20 10:11:27 salix sshd[16409]: debug1: channel 0: new [server-sess=
ion]</div></div><div><br></div><div>It looks to me like the GC step needs t=
o complete before another channel can be requested. I am not=A0familiar=A0w=
ith the ssh protocol but should libssh2 be waiting for this step to complet=
e before=A0<span style=3D"background-color:rgb(255,255,255);color:rgb(34,34=
,34);font-family:arial,sans-serif;font-size:13px">libssh2_channel_wait_clos=
ed() returns?</span></div>
<div><span style=3D"background-color:rgb(255,255,255);color:rgb(34,34,34);f=
ont-family:arial,sans-serif;font-size:13px"><br></span></div><div><span sty=
le=3D"background-color:rgb(255,255,255);color:rgb(34,34,34);font-family:ari=
al,sans-serif;font-size:13px">Many Thanks,=A0</span></div>
<div><span style=3D"background-color:rgb(255,255,255);color:rgb(34,34,34);f=
ont-family:arial,sans-serif;font-size:13px"><br></span></div><div><span sty=
le=3D"background-color:rgb(255,255,255);color:rgb(34,34,34);font-family:ari=
al,sans-serif;font-size:13px">Chris</span></div>
<div><br></div><div><br><div class=3D"gmail_quote">On Thu, Sep 20, 2012 at =
10:06 AM, Chris Harris <span dir=3D"ltr">&lt;<a href=3D"mailto:chris.harris=
@kitware.com" target=3D"_blank">chris.harris@kitware.com</a>&gt;</span> wro=
te:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><span style=3D"color:rgb(34,34,34);font-size=
:13px;font-family:arial,sans-serif">Maxime &amp;=A0</span>Daniel,<div><br><=
/div>
<div>Thanks very much for the quick response. I tried the patch, but sadly =
it has no effect in this situation. Let me know if there is more informatio=
n I can provide to help. If I get some time today I will start taking a loo=
k at the code myself as well.</div>

<div><br></div><div>Regards,=A0</div><span class=3D"HOEnZb"><font color=3D"=
#888888"><div><br></div></font></span><div><span class=3D"HOEnZb"><font col=
or=3D"#888888">Chris</font></span><div><div class=3D"h5"><br><br><div class=
=3D"gmail_quote">
On Thu, Sep 20, 2012 at 4:20 AM, Daniel Stenberg <span dir=3D"ltr">&lt;<a h=
ref=3D"mailto:daniel@haxx.se" target=3D"_blank">daniel@haxx.se</a>&gt;</spa=
n> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div>On Wed, 19 Sep 2012, Maxime Larocque wr=
ote:<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
I had a similar trouble with libssh2 1.4.2, and I submitted a patch to corr=
ect this:<br>
<br>
<a href=3D"http://trac.libssh2.org/ticket/245" target=3D"_blank">http://tra=
c.libssh2.org/<u></u>ticket/245</a><br>
<br>
Under some conditions, libssh2 did not close the channel correctly. I am no=
t sure if it applies to your case...<br>
</blockquote>
<br></div>
Thanks for pointing out this potential fix! Chris, let us know if it change=
s anything for you. I gave libssh2_channel_wait_closed() a quick glance yes=
terday and I couldn&#39;t spot anything really wrong standing out so it wil=
l take some proper digging to debug this more.<br>


<br>
I figure it goes without saying, but I&#39;ll state it anyway:<br>
<br>
We are only a few people actually involved in this project. Those of us who=
 have push rights to git will HUGELY appreciate your feedback, comments and=
 additional tests of patches and bug reports as provided. That helps us mer=
ge things into git and future releases with more confidence and speed.<span=
><font color=3D"#888888"><br>


<br>
-- <br>
<br>
=A0/ <a href=3D"http://daniel.haxx.se" target=3D"_blank">daniel.haxx.se</a>=
<br>
______________________________<u></u>_________________<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/<u></u>mailman/list=
info/libssh2-devel</a><br>
</font></span></blockquote></div><br></div></div></div>
</blockquote></div><br></div>

--047d7b10ce7702e8e504cafee2fe--

--===============1335321426==
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

--===============1335321426==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 15:33:48 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91DXUCc030089;
	Mon, 1 Oct 2012 15:33:44 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91DXSEg030079
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 15:33:29 +0200
Received: (qmail 15968 invoked by uid 501); 1 Oct 2012 13:33:29 -0000
Message-ID: <20121001133329.15967.qmail@stuge.se>
Date: Mon, 1 Oct 2012 15:33:29 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_channel_wait_closed(...) issue
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <CAJ5mg=_o7vskjkpD1Hvw5BsXKcO-HhAyRC7SGPg3Qtux0OCLJw@mail.gmail.com>
 <505A5B66.30207@yahoo.ca> <alpine.DEB.2.00.1209201016440.18801@tvnag.unkk.fr>
 <CAJ5mg=8J6-fRAt17ZWyw1fehEAqWSRwMu9AfAgPxuSGTw2YWAg@mail.gmail.com>
 <CAJ5mg=9bp-3PN1_jQOevkeuA-WrnEMk_-xY8bZzE0LY99XuLGA@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <CAJ5mg=9bp-3PN1_jQOevkeuA-WrnEMk_-xY8bZzE0LY99XuLGA@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Chris Harris wrote:
> This is the snippet of trace where I get a -21 error code from libssh2:

It would be good to also see libssh2 trace output with and without sleep.


> It looks to me like the GC step needs to complete before another
> channel can be requested.

Yes.


> I am not familiar with the ssh protocol but should libssh2 be
> waiting for this step to complete before
> libssh2_channel_wait_closed() returns?

The garbage collection is an implementation detail of OpenSSH, it
has nothing to do with the protocol.

libssh2 trace output will show the actual protocol exchange details,
which will help say if OpenSSH is misbehaving or not.

I suspect MaxSessions 1 has not been tested a great deal and I do
think that it is OpenSSH at fault here, but let's look at the trace
to make sure before you post there.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 16:08:10 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91E7vpO023354;
	Mon, 1 Oct 2012 16:08:08 +0200
Received: from na3sys009aog119.obsmtp.com (na3sys009aog119.obsmtp.com
 [74.125.149.246])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91E7s5b023280
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 16:07:54 +0200
Received: from mail-pa0-f54.google.com ([209.85.220.54]) (using TLSv1) by
 na3sys009aob119.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUGmjup4MKQdfTcxQvx3B4VNzHuDJ4Hc0@postini.com;
 Mon, 01 Oct 2012 07:07:56 PDT
Received: by padbi1 with SMTP id bi1so4129450pad.41
 for <libssh2-devel@cool.haxx.se>; Mon, 01 Oct 2012 07:07:54 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=UqYsr4y5jj2gH1p85NXTRIHxnmWWFDaUgbj712fQbok=;
 b=WQadwyL248E1L6fSV1f/odUidt+CHkvQvqNV7An3YoVgyIRPEl5KReUzI8V1NPCBWb
 0owodejvi7KudMz/fc0Uw99t8dUuplSQG4+ech8RE51JNuNal0hVLx/n+ccV4zy+GWXo
 fyiFCpsAQ6kEcqXHJov1HUzp9MHTDDgwZSFqVI1nzqgVls3AW+2THDQVaNLS+32MbaoH
 blzAs3wqJtGWjkqDBEO8yNDOw28hP4+yPUxAlHSviDTtsCwIryfv7fLYupJ2cLcHmyc1
 H4I508asISu5ALmBJXMCH6xZM3l9uFfjWSRidrhYZGoC0LygI6dAgWO6Y8MmY/NQrIqI
 UQXg==
MIME-Version: 1.0
Received: by 10.68.138.229 with SMTP id qt5mr39833491pbb.122.1349100474107;
 Mon, 01 Oct 2012 07:07:54 -0700 (PDT)
Received: by 10.66.253.103 with HTTP; Mon, 1 Oct 2012 07:07:54 -0700 (PDT)
In-Reply-To: <20121001133329.15967.qmail@stuge.se>
References: <CAJ5mg=_o7vskjkpD1Hvw5BsXKcO-HhAyRC7SGPg3Qtux0OCLJw@mail.gmail.com>
 <505A5B66.30207@yahoo.ca>
 <alpine.DEB.2.00.1209201016440.18801@tvnag.unkk.fr>
 <CAJ5mg=8J6-fRAt17ZWyw1fehEAqWSRwMu9AfAgPxuSGTw2YWAg@mail.gmail.com>
 <CAJ5mg=9bp-3PN1_jQOevkeuA-WrnEMk_-xY8bZzE0LY99XuLGA@mail.gmail.com>
 <20121001133329.15967.qmail@stuge.se>
Date: Mon, 1 Oct 2012 10:07:54 -0400
Message-ID: <CAJ5mg=9O1Hf_dVONncebgMjsRGk1S=W5TTm6bYr6Ru6K1g=SmQ@mail.gmail.com>
Subject: Re: libssh2_channel_wait_closed(...) issue
From: Chris Harris <chris.harris@kitware.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Gm-Message-State: ALoCoQmmWEUIphN0yRgzdOYp7hGroomMiWVCuqg9u4oLRBmIT46jCDiUkIWDxcMsTjHaVMV8g4Ri
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============0599684736=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============0599684736==
Content-Type: multipart/alternative; boundary=047d7b15aa5b8686ac04caffee4e

--047d7b15aa5b8686ac04caffee4e
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Oct 1, 2012 at 9:33 AM, Peter Stuge <peter@stuge.se> wrote:

> Chris Harris wrote:
> > This is the snippet of trace where I get a -21 error code from libssh2:
>
> It would be good to also see libssh2 trace output with and without sleep.
>
>
Here are the traces. I added the following options:  LIBSSH2_TRACE_CONN |
LIBSSH2_TRACE_TRANS | LIBSSH2_TRACE_ERROR

First without the sleep:

[libssh2] 8.271158 Conn: Channel 0 received request type exit-status (wr 0)
[libssh2] 8.271165 Conn: Exit status 0 received for channel 0/0
=> libssh2_transport_read() plain (80 bytes)
0000: 5E 00 00 00 00 00 00 00  47 20 31 30 3A 30 31 3A : ^.......G 10:01:
0010: 31 32 20 75 70 20 35 34  20 64 61 79 73 2C 20 31 : 12 up 54 days, 1
0020: 38 3A 33 38 2C 20 20 30  20 75 73 65 72 73 2C 20 : 8:38,  0 users,
0030: 20 6C 6F 61 64 20 61 76  65 72 61 67 65 3A 20 32 :  load average: 2
0040: 2E 31 31 2C 20 32 2E 30  30 2C 20 31 2E 39 36 0A : .11, 2.00, 1.96.
[libssh2] 8.271180 Transport: Packet type 94 received, length=80
[libssh2] 8.271183 Conn: 71 bytes packet_add() for 0/0/0
=> libssh2_transport_read() plain (5 bytes)
0000: 60 00 00 00 00                                   : `....
[libssh2] 8.271190 Transport: Packet type 96 received, length=5
[libssh2] 8.271192 Conn: EOF received for channel 0/0
=> libssh2_transport_read() plain (5 bytes)
0000: 61 00 00 00 00                                   : a....
[libssh2] 8.271199 Transport: Packet type 97 received, length=5
[libssh2] 8.271201 Conn: Close received for channel 0/0
[libssh2] 8.271204 Conn: channel_read() got 71 of data from 0/0/0 [ul]
We read:
 10:01:12 up 54 days, 18:38,  0 users,  load average: 2.11, 2.00, 1.96

libssh2_channel_read returned 0
[libssh2] 8.271258 Conn: Sending EOF on channel 0/0
=> libssh2_transport_write plain (5 bytes)
0000: 60 00 00 00 00                                   : `....
=> libssh2_transport_write send() (36 bytes)
0000: C3 75 1C 44 54 E3 30 2C  65 CF 4C 35 88 E7 FC 57 : .u.DT.0,e.L5...W
0010: 17 24 9E 66 EB 5B 06 04  26 D4 5F 6D F4 E8 13 38 : .$.f.[..&._m...8
0020: 79 23 7D 70                                      : y#}p
[libssh2] 8.271281 Conn: Closing channel 0/0
=> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00                                   : a....
=> libssh2_transport_write send() (36 bytes)
0000: 88 48 C9 1B CD DB 13 40  4A C9 5B D3 8B 9A B7 1F : .H.....@J.[.....
0010: 97 7C E3 5E F7 BE 39 FE  B1 5A BB 84 8E A6 05 B7 : .|.^..9..Z......
0020: C4 AD 4C B0                                      : ..L.
[libssh2] 8.271298 Conn: Awaiting close of channel 0/0

EXIT: 0 bytecount: 71
[libssh2] 8.271312 Conn: Freeing channel 0/0 resources
[libssh2] 8.271314 Transport: Looking for packet of type: 94
[libssh2] 8.271316 Transport: Looking for packet of type: 95
[libssh2] 8.271318 Conn: Allocated new channel ID#1
[libssh2] 8.271320 Conn: Opening Channel - win 262144 pack 32768
=> libssh2_transport_write plain (24 bytes)
0000: 5A 00 00 00 07 73 65 73  73 69 6F 6E 00 00 00 01 : Z....session....
0010: 00 04 00 00 00 00 80 00                          : ........
=> libssh2_transport_write send() (68 bytes)
0000: A7 47 26 76 FE 0B FD D3  2D 91 50 86 D4 12 57 1F : .G&v....-.P...W.
0010: E4 3E 63 71 27 35 22 AD  D8 25 22 CF 41 9A 21 EB : .>cq'5"..%".A.!.
0020: E6 4A 45 52 9E DF 3E 42  55 68 2A 37 15 FF 9C F2 : .JER..>BUh*7....
0030: 0B 3C D7 8C 1B 85 8F 4B  47 92 33 58 BC 83 FA 88 : .<.....KG.3X....
0040: E1 95 8D 34                                      : ...4
[libssh2] 8.271343 Transport: Looking for packet of type: 91
[libssh2] 8.271344 Transport: Looking for packet of type: 92
[libssh2] 8.310148 Transport: Looking for packet of type: 91
[libssh2] 8.310163 Transport: Looking for packet of type: 92
=> libssh2_transport_read() raw (68 bytes)
0000: BD 33 F3 EE C2 7C C0 A1  E4 31 93 00 9C 87 6E 47 : .3...|...1....nG
0010: AB FA 1E 8A 62 30 7D D5  2F AB 69 76 13 5B 01 9D : ....b0}./.iv.[..
0020: 5E 6B 28 1B FC 12 09 85  91 02 7E 7B 45 BE 94 80 : ^k(.......~{E...
0030: 8E 72 B8 E1 29 36 5D F7  2C A6 EC 14 B3 CE 31 20 : .r..)6].,.....1
0040: 92 E7 63 31                                      : ..c1
=> libssh2_transport_read() plain (28 bytes)
0000: 5C 00 00 00 01 00 00 00  01 00 00 00 0B 6F 70 65 : \............ope
0010: 6E 20 66 61 69 6C 65 64  00 00 00 00             : n failed....
[libssh2] 8.310215 Transport: Packet type 92 received, length=28
[libssh2] 8.310220 Transport: Looking for packet of type: 91
[libssh2] 8.310224 Transport: Looking for packet of type: 92
[libssh2] 8.310228 Failure Event: -21 - Channel open failure
[libssh2] 8.310232 Transport: Looking for packet of type: 94
[libssh2] 8.310235 Transport: Looking for packet of type: 95
Error: -21

With the sleep:

[libssh2] 0.376790 Conn: Channel 0 received request type exit-status (wr 0)
[libssh2] 0.376797 Conn: Exit status 0 received for channel 0/0
=> libssh2_transport_read() plain (80 bytes)
0000: 5E 00 00 00 00 00 00 00  47 20 31 30 3A 30 34 3A : ^.......G 10:04:
0010: 30 37 20 75 70 20 35 34  20 64 61 79 73 2C 20 31 : 07 up 54 days, 1
0020: 38 3A 34 31 2C 20 20 30  20 75 73 65 72 73 2C 20 : 8:41,  0 users,
0030: 20 6C 6F 61 64 20 61 76  65 72 61 67 65 3A 20 31 :  load average: 1
0040: 2E 38 32 2C 20 31 2E 39  31 2C 20 31 2E 39 34 0A : .82, 1.91, 1.94.
[libssh2] 0.376836 Transport: Packet type 94 received, length=80
[libssh2] 0.376842 Conn: 71 bytes packet_add() for 0/0/0
=> libssh2_transport_read() raw (72 bytes)
0000: 49 78 5B 5E F6 CB 0F 59  3D 7E E8 A1 90 62 92 56 : Ix[^...Y=~...b.V
0010: ED 08 1F B7 34 E0 B4 0B  6E 24 01 D2 2D 9F 23 A6 : ....4...n$..-.#.
0020: A9 FE 82 83 60 35 D3 C9  0B F3 3C 5E E3 39 0E 2B : ....`5....<^.9.+
0030: AD 33 70 2D 0F 5C B5 54  1E 80 FA ED 9F 7B 3D AC : .3p-.\.T.....{=.
0040: B4 64 E3 41 24 93 CD 08                          : .d.A$...
=> libssh2_transport_read() plain (5 bytes)
0000: 60 00 00 00 00                                   : `....
[libssh2] 0.376892 Transport: Packet type 96 received, length=5
[libssh2] 0.376897 Conn: EOF received for channel 0/0
=> libssh2_transport_read() plain (5 bytes)
0000: 61 00 00 00 00                                   : a....
[libssh2] 0.376915 Transport: Packet type 97 received, length=5
[libssh2] 0.376921 Conn: Close received for channel 0/0
[libssh2] 0.376927 Conn: channel_read() got 71 of data from 0/0/0 [ul]
We read:
 10:04:07 up 54 days, 18:41,  0 users,  load average: 1.82, 1.91, 1.94

libssh2_channel_read returned 0
[libssh2] 0.377097 Conn: Sending EOF on channel 0/0
=> libssh2_transport_write plain (5 bytes)
0000: 60 00 00 00 00                                   : `....
=> libssh2_transport_write send() (36 bytes)
0000: 7F 42 AE 48 B5 17 0B D0  75 4C A2 FE A7 72 71 28 : .B.H....uL...rq(
0010: 8F 4C C3 05 60 DF 45 5B  30 D6 FA 86 9F 3B 03 03 : .L..`.E[0....;..
0020: D9 42 DE B9                                      : .B..
[libssh2] 0.377144 Conn: Closing channel 0/0
=> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00                                   : a....
=> libssh2_transport_write send() (36 bytes)
0000: EA 38 19 81 92 9C 86 9C  D1 BE 87 4F D9 04 F1 56 : .8.........O...V
0010: 7B 1E E5 2F A7 67 73 B0  79 17 BB F7 B7 31 78 04 : {../.gs.y....1x.
0020: 8D 0D 04 30                                      : ...0
[libssh2] 0.377186 Conn: Awaiting close of channel 0/0

EXIT: 0 bytecount: 71
[libssh2] 0.377212 Conn: Freeing channel 0/0 resources
[libssh2] 0.377218 Transport: Looking for packet of type: 94
[libssh2] 0.377223 Transport: Looking for packet of type: 95
[libssh2] 1.377328 Conn: Allocated new channel ID#1
[libssh2] 1.377396 Conn: Opening Channel - win 262144 pack 32768
=> libssh2_transport_write plain (24 bytes)
0000: 5A 00 00 00 07 73 65 73  73 69 6F 6E 00 00 00 01 : Z....session....
0010: 00 04 00 00 00 00 80 00                          : ........
=> libssh2_transport_write send() (68 bytes)
0000: 3E 7D D9 40 FB A9 71 C9  C8 60 3B B4 AA 0F 36 25 : >}.@..q..`;...6%
0010: A0 51 4F 01 26 AD 60 65  BD D0 0C 16 29 C6 49 C1 : .QO.&.`e....).I.
0020: 62 4E 23 E5 71 30 29 D5  01 64 9F 9C EE 69 E8 24 : bN#.q0)..d...i.$
0030: 7E 42 35 5A 34 64 4A 1A  BC D5 75 69 62 D6 BA 60 : ~B5Z4dJ...uib..`
0040: 4A E9 2F FA                                      : J./.
[libssh2] 1.377558 Transport: Looking for packet of type: 91
[libssh2] 1.377565 Transport: Looking for packet of type: 92
[libssh2] 1.377927 Transport: Looking for packet of type: 91
[libssh2] 1.377996 Transport: Looking for packet of type: 92
=> libssh2_transport_read() raw (52 bytes)
0000: 36 3F CD C5 F1 08 A7 4E  FA C7 11 31 79 E3 DA F2 : 6?.....N...1y...
0010: F2 1A 1B 72 7B 4B 49 13  50 78 94 F5 CA F9 95 51 : ...r{KI.Px.....Q
0020: D7 AB 9C 13 E2 3A 20 22  C5 3B 78 DC 79 1E D8 7E : .....: ".;x.y..~
0030: 9E 31 86 60                                      : .1.`
=> libssh2_transport_read() plain (17 bytes)
0000: 5B 00 00 00 01 00 00 00  00 00 00 00 00 00 00 80 : [...............
0010: 00                                               : .
[libssh2] 1.378103 Transport: Packet type 91 received, length=17
[libssh2] 1.378111 Transport: Looking for packet of type: 91
[libssh2] 1.378118 Conn: Connection Established - ID: 1/0 win: 0/262144
pack: 32768/140733193420800
[libssh2] 1.378125 Conn: starting request(exec) on channel 1/0,
message=uptime
=> libssh2_transport_write plain (18 bytes)
0000: 62 00 00 00 00 00 00 00  04 65 78 65 63 01 00 00 : b........exec...
0010: 00 06                                            : ..
=> libssh2_transport_write plain2 (6 bytes)
0000: 75 70 74 69 6D 65                                : uptime
=> libssh2_transport_write send() (68 bytes)
0000: DA 18 E5 0F 7A 5D 07 E2  22 5C 09 84 CE 97 BD C7 : ....z].."\......
0010: E3 4A 4C 44 5D 01 12 83  22 EC 48 8D AD E8 83 45 : .JLD]...".H....E
0020: 7C EB BE 00 36 46 A3 3A  39 E1 4D 26 5E 42 9B 82 : |...6F.:9.M&^B..
0030: 56 75 1A AB 5C ED 51 32  46 A6 37 7C 4D F5 D0 D2 : Vu..\.Q2F.7|M...
0040: 1A 3C CB 3C                                      : .<.<
[libssh2] 1.378213 Transport: Looking for packet of type: 99
[libssh2] 1.378220 Transport: Looking for packet of type: 100
[libssh2] 1.378918 Transport: Looking for packet of type: 99
[libssh2] 1.378948 Transport: Looking for packet of type: 100
=> libssh2_transport_read() raw (88 bytes)
0000: 4C 67 83 ED B5 AE AD A7  7F 02 6E CF 15 BE EE 7E : Lg........n....~
0010: 65 51 D0 1D 2E C4 5E 0B  1C F5 60 C2 06 9F F3 60 : eQ....^...`....`
0020: 60 0B 02 D9 79 77 77 69  46 3C F7 AA 43 61 1E 35 : `...ywwiF<..Ca.5
0030: D6 46 1A 79 30 D5 00 79  E8 68 BA 87 63 7F 55 2C : .F.y0..y.h..c.U,
0040: CE 38 D1 7D C1 83 7F EB  9A 65 C0 79 76 D8 9E 4A : .8.}.....e.yv..J
0050: 56 EE C8 06 64 F8 2B BC                          : V...d.+.
=> libssh2_transport_read() plain (9 bytes)
0000: 5D 00 00 00 01 00 20 00  00                      : ]..... ..
[libssh2] 1.379028 Transport: Packet type 93 received, length=9
[libssh2] 1.379035 Conn: Window adjust for channel 1/0, adding 2097152
bytes, new window_size=2097152
=> libssh2_transport_read() plain (5 bytes)
0000: 63 00 00 00 01                                   : c....
[libssh2] 1.379059 Transport: Packet type 99 received, length=5
[libssh2] 1.379066 Transport: Looking for packet of type: 99
[libssh2] 1.379073 Conn: channel_read() wants 16384 bytes from channel 1/0
stream #0
[libssh2] 1.381917 Conn: channel_read() wants 16384 bytes from channel 1/0
stream #0
=> libssh2_transport_read() raw (116 bytes)
0000: 5A 92 15 0F 1E 2A FA FF  6C 80 52 19 A4 55 CC 73 : Z....*..l.R..U.s
0010: A2 8C 6D 70 EC BB 30 99  F1 EB 1E A8 C4 B3 78 ED : ..mp..0.......x.
0020: F0 D8 38 F5 FD CB 1B 70  BC DD BB 32 21 59 E0 10 : ..8....p...2!Y..
0030: 7A B2 7B 1D 38 7D 4F 09  F5 72 96 3A 90 42 DF EE : z.{.8}O..r.:.B..
0040: 5C 37 84 7C A2 EE 75 4C  83 C9 9F 3B 97 99 2E FE : \7.|..uL...;....
0050: B6 54 D8 D7 17 6A 33 DA  BD B7 F4 19 18 A6 B2 17 : .T...j3.........
0060: 2E B1 9C B1 05 13 51 D2  FC 4D AB 97 DF 81 24 CB : ......Q..M....$.
0070: F6 10 81 60                                      : ...`
=> libssh2_transport_read() plain (80 bytes)
0000: 5E 00 00 00 01 00 00 00  47 20 31 30 3A 30 34 3A : ^.......G 10:04:
0010: 30 38 20 75 70 20 35 34  20 64 61 79 73 2C 20 31 : 08 up 54 days, 1
0020: 38 3A 34 31 2C 20 20 30  20 75 73 65 72 73 2C 20 : 8:41,  0 users,
0030: 20 6C 6F 61 64 20 61 76  65 72 61 67 65 3A 20 31 :  load average: 1
0040: 2E 38 32 2C 20 31 2E 39  31 2C 20 31 2E 39 34 0A : .82, 1.91, 1.94.
[libssh2] 1.382138 Transport: Packet type 94 received, length=80
[libssh2] 1.382144 Conn: 71 bytes packet_add() for 1/0/0
[libssh2] 1.382151 Conn: channel_read() got 71 of data from 1/0/0 [ul]
We read:
 10:04:08 up 54 days, 18:41,  0 users,  load average: 1.82, 1.91, 1.94

[libssh2] 1.382546 Conn: channel_read() wants 16384 bytes from channel 1/0
stream #0
=> libssh2_transport_read() raw (140 bytes)
0000: EB EA AB E9 C1 47 F4 61  DB 88 F0 07 38 25 99 E9 : .....G.a....8%..
0010: B3 1E C0 4C C3 BB 07 72  19 8D 3B DA D4 62 E9 11 : ...L...r..;..b..
0020: D1 50 6B 8B 07 3B B6 F2  7F 4C A3 D1 76 48 0C 5C : .Pk..;...L..vH.\
0030: A9 1F CC 78 0E BB C3 24  64 C3 84 C4 8B 83 66 DA : ...x...$d.....f.
0040: 1E EE 9B 53 3A 12 BB 58  DF AB E0 D6 C3 02 F1 8A : ...S:..X........
0050: CE 99 90 EA 13 7C DB E6  A8 28 9C EE CF 35 F0 C1 : .....|...(...5..
0060: 11 CA 2A 73 04 21 C0 F6  FE E8 6A 5D D4 71 80 0C : ..*s.!....j].q..
0070: B2 32 C9 40 05 01 6C 4B  B6 92 EE 39 DE 85 45 DB : .2.@..lK...9..E.
0080: B0 A9 CE F2 43 70 0E 7E  84 D1 F3 B9             : ....Cp.~....
=> libssh2_transport_read() plain (5 bytes)
0000: 60 00 00 00 01                                   : `....
[libssh2] 1.382695 Transport: Packet type 96 received, length=5
[libssh2] 1.382701 Conn: EOF received for channel 1/0
=> libssh2_transport_read() plain (25 bytes)
0000: 62 00 00 00 01 00 00 00  0B 65 78 69 74 2D 73 74 : b........exit-st
0010: 61 74 75 73 00 00 00 00  00                      : atus.....
[libssh2] 1.382725 Transport: Packet type 98 received, length=25
[libssh2] 1.382730 Conn: Channel 1 received request type exit-status (wr 0)
[libssh2] 1.382736 Conn: Exit status 0 received for channel 1/0
=> libssh2_transport_read() plain (5 bytes)
0000: 61 00 00 00 01                                   : a....
[libssh2] 1.382754 Transport: Packet type 97 received, length=5
[libssh2] 1.382760 Conn: Close received for channel 1/0
libssh2_channel_read returned 0
[libssh2] 1.382771 Conn: Sending EOF on channel 1/0
=> libssh2_transport_write plain (5 bytes)
0000: 60 00 00 00 00                                   : `....
=> libssh2_transport_write send() (36 bytes)
0000: 76 AF 27 D5 14 82 32 02  B4 EB F4 91 9F A6 0E C9 : v.'...2.........
0010: 37 53 CE A4 BE 53 65 05  9A 0D B9 2C 6F BC 15 5F : 7S...Se....,o.._
0020: C4 00 CB D6                                      : ....
[libssh2] 1.382818 Conn: Closing channel 1/0
=> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00                                   : a....
=> libssh2_transport_write send() (36 bytes)
0000: 5D AA 85 0F 1D 0D 57 53  E3 0E 50 82 A0 7E 77 AA : ].....WS..P..~w.
0010: 1B 55 A4 5C 93 DC 1B 85  08 F8 7F 1E 0D 52 FD F6 : .U.\.........R..
0020: 17 00 81 33                                      : ...3
[libssh2] 1.382859 Conn: Awaiting close of channel 1/0

EXIT: 0 bytecount: 71
[libssh2] 1.382873 Conn: Freeing channel 1/0 resources
[libssh2] 1.382879 Transport: Looking for packet of type: 94
[libssh2] 1.382887 Transport: Looking for packet of type: 95
[libssh2] 1.382894 Transport: Disconnecting: reason=11, desc=Normal
Shutdown, Thank you for playing, lang=
=> libssh2_transport_write plain (51 bytes)
0000: 01 00 00 00 0B 00 00 00  26 4E 6F 72 6D 61 6C 20 : ........&Normal
0010: 53 68 75 74 64 6F 77 6E  2C 20 54 68 61 6E 6B 20 : Shutdown, Thank
0020: 79 6F 75 20 66 6F 72 20  70 6C 61 79 69 6E 67 00 : you for playing.
0030: 00 00 00                                         : ...
=> libssh2_transport_write plain2 (0 bytes)
=> libssh2_transport_write send() (84 bytes)
0000: C4 24 06 84 46 70 3C E8  05 77 8D EA 05 D9 6B 77 : .$..Fp<..w....kw
0010: A1 71 E2 34 8A F1 E3 46  CB 92 55 9D CC C9 F5 4E : .q.4...F..U....N
0020: F4 25 61 35 72 C6 0A B7  E5 A6 B5 1D CE 3C 24 0F : .%a5r........<$.
0030: 9F B2 54 01 3C 43 32 F0  16 60 E3 0B A9 94 31 15 : ..T.<C2..`....1.
0040: E8 DE 49 9C 88 F4 BF 5D  50 4A 39 85 36 A8 5B 83 : ..I....]PJ9.6.[.
0050: E7 B6 46 41                                      : ..FA
[libssh2] 1.382969 Transport: Freeing session resource
[libssh2] 1.382981 Transport: Extra packets left 0
all done




>
> > It looks to me like the GC step needs to complete before another
> > channel can be requested.
>
> Yes.
>
>
> > I am not familiar with the ssh protocol but should libssh2 be
> > waiting for this step to complete before
> > libssh2_channel_wait_closed() returns?
>
> The garbage collection is an implementation detail of OpenSSH, it
> has nothing to do with the protocol.
>

I assumed that this was the case but wasn't sure


>
> libssh2 trace output will show the actual protocol exchange details,
> which will help say if OpenSSH is misbehaving or not.
>
> I suspect MaxSessions 1 has not been tested a great deal and I do
> think that it is OpenSSH at fault here, but let's look at the trace
> to make sure before you post there.
>


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

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

<div class=3D"gmail_quote">On Mon, Oct 1, 2012 at 9:33 AM, Peter Stuge <spa=
n dir=3D"ltr">&lt;<a href=3D"mailto:peter@stuge.se" target=3D"_blank">peter=
@stuge.se</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class=3D"im">Chris Harris wrote:<br>
&gt; This is the snippet of trace where I get a -21 error code from libssh2=
:<br>
<br>
</div>It would be good to also see libssh2 trace output with and without sl=
eep.<br>
<div class=3D"im"><br></div></blockquote><div><br></div><div>Here are the t=
races. I added the following options:=A0=A0LIBSSH2_TRACE_CONN | LIBSSH2_TRA=
CE_TRANS | LIBSSH2_TRACE_ERROR</div><div><br></div><div>First without the s=
leep:</div>
<div><br></div><div><div>[libssh2] 8.271158 Conn: Channel 0 received reques=
t type exit-status (wr 0)</div><div>[libssh2] 8.271165 Conn: Exit status 0 =
received for channel 0/0</div><div>=3D&gt; libssh2_transport_read() plain (=
80 bytes)</div>
<div>0000: 5E 00 00 00 00 00 00 00 =A047 20 31 30 3A 30 31 3A : ^.......G 1=
0:01:</div><div>0010: 31 32 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : =
12 up 54 days, 1</div><div>0020: 38 3A 33 38 2C 20 20 30 =A020 75 73 65 72 =
73 2C 20 : 8:38, =A00 users,=A0</div>
<div>0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67 65 3A 20 32 : =A0load ave=
rage: 2</div><div>0040: 2E 31 31 2C 20 32 2E 30 =A030 2C 20 31 2E 39 36 0A =
: .11, 2.00, 1.96.</div><div>[libssh2] 8.271180 Transport: Packet type 94 r=
eceived, length=3D80</div>
<div>[libssh2] 8.271183 Conn: 71 bytes packet_add() for 0/0/0</div><div>=3D=
&gt; libssh2_transport_read() plain (5 bytes)</div><div>0000: 60 00 00 00 0=
0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `..=
..</div><div>[libssh2] 8.271190 Transport: Packet type 96 received, length=
=3D5</div>
<div>[libssh2] 8.271192 Conn: EOF received for channel 0/0</div><div>=3D&gt=
; libssh2_transport_read() plain (5 bytes)</div><div>0000: 61 00 00 00 00 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : a....=
</div><div>[libssh2] 8.271199 Transport: Packet type 97 received, length=3D=
5</div>
<div>[libssh2] 8.271201 Conn: Close received for channel 0/0</div><div>[lib=
ssh2] 8.271204 Conn: channel_read() got 71 of data from 0/0/0 [ul]</div><di=
v>We read:</div><div>=A010:01:12 up 54 days, 18:38, =A00 users, =A0load ave=
rage: 2.11, 2.00, 1.96</div>
<div><br></div><div>libssh2_channel_read returned 0</div><div>[libssh2] 8.2=
71258 Conn: Sending EOF on channel 0/0</div><div>=3D&gt; libssh2_transport_=
write plain (5 bytes)</div><div>0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: C3 7=
5 1C 44 54 E3 30 2C =A065 CF 4C 35 88 E7 FC 57 : .u.DT.0,e.L5...W</div><div=
>0010: 17 24 9E 66 EB 5B 06 04 =A026 D4 5F 6D F4 E8 13 38 : .$.f.[..&amp;._=
m...8</div>
<div>0020: 79 23 7D 70 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: y#}p</div><div>[libssh2] 8.271281 Conn: Closing ch=
annel 0/0</div><div>=3D&gt; libssh2_transport_write plain (5 bytes)</div><d=
iv>0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 : a....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: 88 4=
8 C9 1B CD DB 13 40 =A04A C9 5B D3 8B 9A B7 1F : .H.....@J.[.....</div><div=
>0010: 97 7C E3 5E F7 BE 39 FE =A0B1 5A BB 84 8E A6 05 B7 : .|.^..9..Z.....=
.</div>
<div>0020: C4 AD 4C B0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: ..L.</div><div>[libssh2] 8.271298 Conn: Awaiting c=
lose of channel 0/0</div><div><br></div><div>EXIT: 0 bytecount: 71</div><di=
v>[libssh2] 8.271312 Conn: Freeing channel 0/0 resources</div>
<div>[libssh2] 8.271314 Transport: Looking for packet of type: 94</div><div=
>[libssh2] 8.271316 Transport: Looking for packet of type: 95</div><div>[li=
bssh2] 8.271318 Conn: Allocated new channel ID#1</div><div>[libssh2] 8.2713=
20 Conn: Opening Channel - win 262144 pack 32768</div>
<div>=3D&gt; libssh2_transport_write plain (24 bytes)</div><div>0000: 5A 00=
 00 00 07 73 65 73 =A073 69 6F 6E 00 00 00 01 : Z....session....</div><div>=
0010: 00 04 00 00 00 00 80 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0: ........</div><div>
=3D&gt; libssh2_transport_write send() (68 bytes)</div><div>0000: A7 47 26 =
76 FE 0B FD D3 =A02D 91 50 86 D4 12 57 1F : .G&amp;v....-.P...W.</div><div>=
0010: E4 3E 63 71 27 35 22 AD =A0D8 25 22 CF 41 9A 21 EB : .&gt;cq&#39;5&qu=
ot;..%&quot;.A.!.</div>
<div>0020: E6 4A 45 52 9E DF 3E 42 =A055 68 2A 37 15 FF 9C F2 : .JER..&gt;B=
Uh*7....</div><div>0030: 0B 3C D7 8C 1B 85 8F 4B =A047 92 33 58 BC 83 FA 88=
 : .&lt;.....KG.3X....</div><div>0040: E1 95 8D 34 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ...4</div>
<div>[libssh2] 8.271343 Transport: Looking for packet of type: 91</div><div=
>[libssh2] 8.271344 Transport: Looking for packet of type: 92</div><div>[li=
bssh2] 8.310148 Transport: Looking for packet of type: 91</div><div>[libssh=
2] 8.310163 Transport: Looking for packet of type: 92</div>
<div>=3D&gt; libssh2_transport_read() raw (68 bytes)</div><div>0000: BD 33 =
F3 EE C2 7C C0 A1 =A0E4 31 93 00 9C 87 6E 47 : .3...|...1....nG</div><div>0=
010: AB FA 1E 8A 62 30 7D D5 =A02F AB 69 76 13 5B 01 9D : ....b0}./.iv.[..<=
/div>
<div>0020: 5E 6B 28 1B FC 12 09 85 =A091 02 7E 7B 45 BE 94 80 : ^k(.......~=
{E...</div><div>0030: 8E 72 B8 E1 29 36 5D F7 =A02C A6 EC 14 B3 CE 31 20 : =
.r..)6].,.....1=A0</div><div>0040: 92 E7 63 31 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ..c1</div>
<div>=3D&gt; libssh2_transport_read() plain (28 bytes)</div><div>0000: 5C 0=
0 00 00 01 00 00 00 =A001 00 00 00 0B 6F 70 65 : \............ope</div><div=
>0010: 6E 20 66 61 69 6C 65 64 =A000 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 : n f=
ailed....</div>
<div>[libssh2] 8.310215 Transport: Packet type 92 received, length=3D28</di=
v><div>[libssh2] 8.310220 Transport: Looking for packet of type: 91</div><d=
iv>[libssh2] 8.310224 Transport: Looking for packet of type: 92</div><div>
[libssh2] 8.310228 Failure Event: -21 - Channel open failure</div><div>[lib=
ssh2] 8.310232 Transport: Looking for packet of type: 94</div><div>[libssh2=
] 8.310235 Transport: Looking for packet of type: 95</div><div>Error: -21</=
div>
</div><div><br></div><div>With the sleep:</div><div><br></div><div><div>[li=
bssh2] 0.376790 Conn: Channel 0 received request type exit-status (wr 0)</d=
iv><div>[libssh2] 0.376797 Conn: Exit status 0 received for channel 0/0</di=
v>
<div>=3D&gt; libssh2_transport_read() plain (80 bytes)</div><div>0000: 5E 0=
0 00 00 00 00 00 00 =A047 20 31 30 3A 30 34 3A : ^.......G 10:04:</div><div=
>0010: 30 37 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : 07 up 54 days, =
1</div>
<div>0020: 38 3A 34 31 2C 20 20 30 =A020 75 73 65 72 73 2C 20 : 8:41, =A00 =
users,=A0</div><div>0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67 65 3A 20 3=
1 : =A0load average: 1</div><div>0040: 2E 38 32 2C 20 31 2E 39 =A031 2C 20 =
31 2E 39 34 0A : .82, 1.91, 1.94.</div>
<div>[libssh2] 0.376836 Transport: Packet type 94 received, length=3D80</di=
v><div>[libssh2] 0.376842 Conn: 71 bytes packet_add() for 0/0/0</div><div>=
=3D&gt; libssh2_transport_read() raw (72 bytes)</div><div>0000: 49 78 5B 5E=
 F6 CB 0F 59 =A03D 7E E8 A1 90 62 92 56 : Ix[^...Y=3D~...b.V</div>
<div>0010: ED 08 1F B7 34 E0 B4 0B =A06E 24 01 D2 2D 9F 23 A6 : ....4...n$.=
.-.#.</div><div>0020: A9 FE 82 83 60 35 D3 C9 =A00B F3 3C 5E E3 39 0E 2B : =
....`5....&lt;^.9.+</div><div>0030: AD 33 70 2D 0F 5C B5 54 =A01E 80 FA ED =
9F 7B 3D AC : .3p-.\.T.....{=3D.</div>
<div>0040: B4 64 E3 41 24 93 CD 08 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0: .d.A$...</div><div>=3D&gt; libssh2_transport_read() plain (5 b=
ytes)</div><div>0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....</div><div>[libssh2] 0.376892 Transp=
ort: Packet type 96 received, length=3D5</div>
<div>[libssh2] 0.376897 Conn: EOF received for channel 0/0</div><div>=3D&gt=
; libssh2_transport_read() plain (5 bytes)</div><div>0000: 61 00 00 00 00 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : a....=
</div><div>[libssh2] 0.376915 Transport: Packet type 97 received, length=3D=
5</div>
<div>[libssh2] 0.376921 Conn: Close received for channel 0/0</div><div>[lib=
ssh2] 0.376927 Conn: channel_read() got 71 of data from 0/0/0 [ul]</div><di=
v>We read:</div><div>=A010:04:07 up 54 days, 18:41, =A00 users, =A0load ave=
rage: 1.82, 1.91, 1.94</div>
<div><br></div><div>libssh2_channel_read returned 0</div><div>[libssh2] 0.3=
77097 Conn: Sending EOF on channel 0/0</div><div>=3D&gt; libssh2_transport_=
write plain (5 bytes)</div><div>0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: 7F 4=
2 AE 48 B5 17 0B D0 =A075 4C A2 FE A7 72 71 28 : .B.H....uL...rq(</div><div=
>0010: 8F 4C C3 05 60 DF 45 5B =A030 D6 FA 86 9F 3B 03 03 : .L..`.E[0....;.=
.</div>
<div>0020: D9 42 DE B9 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: .B..</div><div>[libssh2] 0.377144 Conn: Closing ch=
annel 0/0</div><div>=3D&gt; libssh2_transport_write plain (5 bytes)</div><d=
iv>0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 : a....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: EA 3=
8 19 81 92 9C 86 9C =A0D1 BE 87 4F D9 04 F1 56 : .8.........O...V</div><div=
>0010: 7B 1E E5 2F A7 67 73 B0 =A079 17 BB F7 B7 31 78 04 : {../.gs.y....1x=
.</div>
<div>0020: 8D 0D 04 30 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: ...0</div><div>[libssh2] 0.377186 Conn: Awaiting c=
lose of channel 0/0</div><div><br></div><div>EXIT: 0 bytecount: 71</div><di=
v>[libssh2] 0.377212 Conn: Freeing channel 0/0 resources</div>
<div>[libssh2] 0.377218 Transport: Looking for packet of type: 94</div><div=
>[libssh2] 0.377223 Transport: Looking for packet of type: 95</div><div>[li=
bssh2] 1.377328 Conn: Allocated new channel ID#1</div><div>[libssh2] 1.3773=
96 Conn: Opening Channel - win 262144 pack 32768</div>
<div>=3D&gt; libssh2_transport_write plain (24 bytes)</div><div>0000: 5A 00=
 00 00 07 73 65 73 =A073 69 6F 6E 00 00 00 01 : Z....session....</div><div>=
0010: 00 04 00 00 00 00 80 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0: ........</div><div>
=3D&gt; libssh2_transport_write send() (68 bytes)</div><div>0000: 3E 7D D9 =
40 FB A9 71 C9 =A0C8 60 3B B4 AA 0F 36 25 : &gt;}.@..q..`;...6%</div><div>0=
010: A0 51 4F 01 26 AD 60 65 =A0BD D0 0C 16 29 C6 49 C1 : .QO.&amp;.`e....)=
.I.</div>
<div>0020: 62 4E 23 E5 71 30 29 D5 =A001 64 9F 9C EE 69 E8 24 : bN#.q0)..d.=
..i.$</div><div>0030: 7E 42 35 5A 34 64 4A 1A =A0BC D5 75 69 62 D6 BA 60 : =
~B5Z4dJ...uib..`</div><div>0040: 4A E9 2F FA =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: J./.</div>
<div>[libssh2] 1.377558 Transport: Looking for packet of type: 91</div><div=
>[libssh2] 1.377565 Transport: Looking for packet of type: 92</div><div>[li=
bssh2] 1.377927 Transport: Looking for packet of type: 91</div><div>[libssh=
2] 1.377996 Transport: Looking for packet of type: 92</div>
<div>=3D&gt; libssh2_transport_read() raw (52 bytes)</div><div>0000: 36 3F =
CD C5 F1 08 A7 4E =A0FA C7 11 31 79 E3 DA F2 : 6?.....N...1y...</div><div>0=
010: F2 1A 1B 72 7B 4B 49 13 =A050 78 94 F5 CA F9 95 51 : ...r{KI.Px.....Q<=
/div>
<div>0020: D7 AB 9C 13 E2 3A 20 22 =A0C5 3B 78 DC 79 1E D8 7E : .....: &quo=
t;.;x.y..~</div><div>0030: 9E 31 86 60 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: .1.`</div><div>=3D&gt; libssh2_tra=
nsport_read() plain (17 bytes)</div><div>
0000: 5B 00 00 00 01 00 00 00 =A000 00 00 00 00 00 00 80 : [...............=
</div><div>0010: 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : .</div><div>[libssh2] 1.378103 Trans=
port: Packet type 91 received, length=3D17</div>
<div>[libssh2] 1.378111 Transport: Looking for packet of type: 91</div><div=
>[libssh2] 1.378118 Conn: Connection Established - ID: 1/0 win: 0/262144 pa=
ck: 32768/140733193420800</div><div>[libssh2] 1.378125 Conn: starting reque=
st(exec) on channel 1/0, message=3Duptime</div>
<div>=3D&gt; libssh2_transport_write plain (18 bytes)</div><div>0000: 62 00=
 00 00 00 00 00 00 =A004 65 78 65 63 01 00 00 : b........exec...</div><div>=
0010: 00 06 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0: ..</div><div>=3D&gt; libssh2_transport_write plai=
n2 (6 bytes)</div>
<div>0000: 75 70 74 69 6D 65 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0: uptime</div><div>=3D&gt; libssh2_transport_write send(=
) (68 bytes)</div><div>0000: DA 18 E5 0F 7A 5D 07 E2 =A022 5C 09 84 CE 97 B=
D C7 : ....z]..&quot;\......</div>
<div>0010: E3 4A 4C 44 5D 01 12 83 =A022 EC 48 8D AD E8 83 45 : .JLD]...&qu=
ot;.H....E</div><div>0020: 7C EB BE 00 36 46 A3 3A =A039 E1 4D 26 5E 42 9B =
82 : |...6F.:9.M&amp;^B..</div><div>0030: 56 75 1A AB 5C ED 51 32 =A046 A6 =
37 7C 4D F5 D0 D2 : Vu..\.Q2F.7|M...</div>
<div>0040: 1A 3C CB 3C =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: .&lt;.&lt;</div><div>[libssh2] 1.378213 Transport:=
 Looking for packet of type: 99</div><div>[libssh2] 1.378220 Transport: Loo=
king for packet of type: 100</div>
<div>[libssh2] 1.378918 Transport: Looking for packet of type: 99</div><div=
>[libssh2] 1.378948 Transport: Looking for packet of type: 100</div><div>=
=3D&gt; libssh2_transport_read() raw (88 bytes)</div><div>0000: 4C 67 83 ED=
 B5 AE AD A7 =A07F 02 6E CF 15 BE EE 7E : Lg........n....~</div>
<div>0010: 65 51 D0 1D 2E C4 5E 0B =A01C F5 60 C2 06 9F F3 60 : eQ....^...`=
....`</div><div>0020: 60 0B 02 D9 79 77 77 69 =A046 3C F7 AA 43 61 1E 35 : =
`...ywwiF&lt;..Ca.5</div><div>0030: D6 46 1A 79 30 D5 00 79 =A0E8 68 BA 87 =
63 7F 55 2C : .F.y0..y.h..c.U,</div>
<div>0040: CE 38 D1 7D C1 83 7F EB =A09A 65 C0 79 76 D8 9E 4A : .8.}.....e.=
yv..J</div><div>0050: 56 EE C8 06 64 F8 2B BC =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: V...d.+.</div><div>=3D&gt; libssh2_transport_read(=
) plain (9 bytes)</div><div>
0000: 5D 00 00 00 01 00 20 00 =A000 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0: ]..... ..</div><div>[libssh2] 1.379028 Transport: Packet type 93 rece=
ived, length=3D9</div><div>[libssh2] 1.379035 Conn: Window adjust for chann=
el 1/0, adding 2097152 bytes, new window_size=3D2097152</div>
<div>=3D&gt; libssh2_transport_read() plain (5 bytes)</div><div>0000: 63 00=
 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 : c....</div><div>[libssh2] 1.379059 Transport: Packet type 99 received=
, length=3D5</div><div>[libssh2] 1.379066 Transport: Looking for packet of =
type: 99</div>
<div>[libssh2] 1.379073 Conn: channel_read() wants 16384 bytes from channel=
 1/0 stream #0</div><div>[libssh2] 1.381917 Conn: channel_read() wants 1638=
4 bytes from channel 1/0 stream #0</div><div>=3D&gt; libssh2_transport_read=
() raw (116 bytes)</div>
<div>0000: 5A 92 15 0F 1E 2A FA FF =A06C 80 52 19 A4 55 CC 73 : Z....*..l.R=
..U.s</div><div>0010: A2 8C 6D 70 EC BB 30 99 =A0F1 EB 1E A8 C4 B3 78 ED : =
..mp..0.......x.</div><div>0020: F0 D8 38 F5 FD CB 1B 70 =A0BC DD BB 32 21 =
59 E0 10 : ..8....p...2!Y..</div>
<div>0030: 7A B2 7B 1D 38 7D 4F 09 =A0F5 72 96 3A 90 42 DF EE : z.{.8}O..r.=
:.B..</div><div>0040: 5C 37 84 7C A2 EE 75 4C =A083 C9 9F 3B 97 99 2E FE : =
\7.|..uL...;....</div><div>0050: B6 54 D8 D7 17 6A 33 DA =A0BD B7 F4 19 18 =
A6 B2 17 : .T...j3.........</div>
<div>0060: 2E B1 9C B1 05 13 51 D2 =A0FC 4D AB 97 DF 81 24 CB : ......Q..M.=
...$.</div><div>0070: F6 10 81 60 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ...`</div><div>=3D&gt; libssh2_transpo=
rt_read() plain (80 bytes)</div><div>0000: 5E 00 00 00 01 00 00 00 =A047 20=
 31 30 3A 30 34 3A : ^.......G 10:04:</div>
<div>0010: 30 38 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : 08 up 54 da=
ys, 1</div><div>0020: 38 3A 34 31 2C 20 20 30 =A020 75 73 65 72 73 2C 20 : =
8:41, =A00 users,=A0</div><div>0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67=
 65 3A 20 31 : =A0load average: 1</div>
<div>0040: 2E 38 32 2C 20 31 2E 39 =A031 2C 20 31 2E 39 34 0A : .82, 1.91, =
1.94.</div><div>[libssh2] 1.382138 Transport: Packet type 94 received, leng=
th=3D80</div><div>[libssh2] 1.382144 Conn: 71 bytes packet_add() for 1/0/0<=
/div>
<div>[libssh2] 1.382151 Conn: channel_read() got 71 of data from 1/0/0 [ul]=
</div><div>We read:</div><div>=A010:04:08 up 54 days, 18:41, =A00 users, =
=A0load average: 1.82, 1.91, 1.94</div><div><br></div><div>[libssh2] 1.3825=
46 Conn: channel_read() wants 16384 bytes from channel 1/0 stream #0</div>
<div>=3D&gt; libssh2_transport_read() raw (140 bytes)</div><div>0000: EB EA=
 AB E9 C1 47 F4 61 =A0DB 88 F0 07 38 25 99 E9 : .....G.a....8%..</div><div>=
0010: B3 1E C0 4C C3 BB 07 72 =A019 8D 3B DA D4 62 E9 11 : ...L...r..;..b..=
</div>
<div>0020: D1 50 6B 8B 07 3B B6 F2 =A07F 4C A3 D1 76 48 0C 5C : .Pk..;...L.=
.vH.\</div><div>0030: A9 1F CC 78 0E BB C3 24 =A064 C3 84 C4 8B 83 66 DA : =
...x...$d.....f.</div><div>0040: 1E EE 9B 53 3A 12 BB 58 =A0DF AB E0 D6 C3 =
02 F1 8A : ...S:..X........</div>
<div>0050: CE 99 90 EA 13 7C DB E6 =A0A8 28 9C EE CF 35 F0 C1 : .....|...(.=
..5..</div><div>0060: 11 CA 2A 73 04 21 C0 F6 =A0FE E8 6A 5D D4 71 80 0C : =
..*s.!....j].q..</div><div>0070: B2 32 C9 40 05 01 6C 4B =A0B6 92 EE 39 DE =
85 45 DB : .2.@..lK...9..E.</div>
<div>0080: B0 A9 CE F2 43 70 0E 7E =A084 D1 F3 B9 =A0 =A0 =A0 =A0 =A0 =A0 :=
 ....Cp.~....</div><div>=3D&gt; libssh2_transport_read() plain (5 bytes)</d=
iv><div>0000: 60 00 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 : `....</div><div>[libssh2] 1.382695 Transport: Pac=
ket type 96 received, length=3D5</div>
<div>[libssh2] 1.382701 Conn: EOF received for channel 1/0</div><div>=3D&gt=
; libssh2_transport_read() plain (25 bytes)</div><div>0000: 62 00 00 00 01 =
00 00 00 =A00B 65 78 69 74 2D 73 74 : b........exit-st</div><div>0010: 61 7=
4 75 73 00 00 00 00 =A000 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: atus=
.....</div>
<div>[libssh2] 1.382725 Transport: Packet type 98 received, length=3D25</di=
v><div>[libssh2] 1.382730 Conn: Channel 1 received request type exit-status=
 (wr 0)</div><div>[libssh2] 1.382736 Conn: Exit status 0 received for chann=
el 1/0</div>
<div>=3D&gt; libssh2_transport_read() plain (5 bytes)</div><div>0000: 61 00=
 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 : a....</div><div>[libssh2] 1.382754 Transport: Packet type 97 received=
, length=3D5</div><div>[libssh2] 1.382760 Conn: Close received for channel =
1/0</div>
<div>libssh2_channel_read returned 0</div><div>[libssh2] 1.382771 Conn: Sen=
ding EOF on channel 1/0</div><div>=3D&gt; libssh2_transport_write plain (5 =
bytes)</div><div>0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: 76 A=
F 27 D5 14 82 32 02 =A0B4 EB F4 91 9F A6 0E C9 : v.&#39;...2.........</div>=
<div>0010: 37 53 CE A4 BE 53 65 05 =A09A 0D B9 2C 6F BC 15 5F : 7S...Se....=
,o.._</div>
<div>0020: C4 00 CB D6 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: ....</div><div>[libssh2] 1.382818 Conn: Closing ch=
annel 1/0</div><div>=3D&gt; libssh2_transport_write plain (5 bytes)</div><d=
iv>0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 : a....</div>
<div>=3D&gt; libssh2_transport_write send() (36 bytes)</div><div>0000: 5D A=
A 85 0F 1D 0D 57 53 =A0E3 0E 50 82 A0 7E 77 AA : ].....WS..P..~w.</div><div=
>0010: 1B 55 A4 5C 93 DC 1B 85 =A008 F8 7F 1E 0D 52 FD F6 : .U.\.........R.=
.</div>
<div>0020: 17 00 81 33 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0: ...3</div><div>[libssh2] 1.382859 Conn: Awaiting c=
lose of channel 1/0</div><div><br></div><div>EXIT: 0 bytecount: 71</div><di=
v>[libssh2] 1.382873 Conn: Freeing channel 1/0 resources</div>
<div>[libssh2] 1.382879 Transport: Looking for packet of type: 94</div><div=
>[libssh2] 1.382887 Transport: Looking for packet of type: 95</div><div>[li=
bssh2] 1.382894 Transport: Disconnecting: reason=3D11, desc=3DNormal Shutdo=
wn, Thank you for playing, lang=3D</div>
<div>=3D&gt; libssh2_transport_write plain (51 bytes)</div><div>0000: 01 00=
 00 00 0B 00 00 00 =A026 4E 6F 72 6D 61 6C 20 : ........&amp;Normal=A0</div=
><div>0010: 53 68 75 74 64 6F 77 6E =A02C 20 54 68 61 6E 6B 20 : Shutdown, =
Thank=A0</div>
<div>0020: 79 6F 75 20 66 6F 72 20 =A070 6C 61 79 69 6E 67 00 : you for pla=
ying.</div><div>0030: 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : ...</div><div>=3D&gt; libssh2_transpo=
rt_write plain2 (0 bytes)</div><div>=3D&gt; libssh2_transport_write send() =
(84 bytes)</div>
<div>0000: C4 24 06 84 46 70 3C E8 =A005 77 8D EA 05 D9 6B 77 : .$..Fp&lt;.=
.w....kw</div><div>0010: A1 71 E2 34 8A F1 E3 46 =A0CB 92 55 9D CC C9 F5 4E=
 : .q.4...F..U....N</div><div>0020: F4 25 61 35 72 C6 0A B7 =A0E5 A6 B5 1D =
CE 3C 24 0F : .%a5r........&lt;$.</div>
<div>0030: 9F B2 54 01 3C 43 32 F0 =A016 60 E3 0B A9 94 31 15 : ..T.&lt;C2.=
.`....1.</div><div>0040: E8 DE 49 9C 88 F4 BF 5D =A050 4A 39 85 36 A8 5B 83=
 : ..I....]PJ9.6.[.</div><div>0050: E7 B6 46 41 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ..FA</div>
<div>[libssh2] 1.382969 Transport: Freeing session resource</div><div>[libs=
sh2] 1.382981 Transport: Extra packets left 0</div><div>all done</div></div=
><div><br></div><div><br></div><div>=A0</div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
>
<div class=3D"im">
<br>
&gt; It looks to me like the GC step needs to complete before another<br>
&gt; channel can be requested.<br>
<br>
</div>Yes.<br>
<div class=3D"im"><br>
<br>
&gt; I am not familiar with the ssh protocol but should libssh2 be<br>
&gt; waiting for this step to complete before<br>
&gt; libssh2_channel_wait_closed() returns?<br>
<br>
</div>The garbage collection is an implementation detail of OpenSSH, it<br>
has nothing to do with the protocol.<br></blockquote><div><br></div><div>I =
assumed that this was the case but wasn&#39;t sure</div><div>=A0</div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex">

<br>
libssh2 trace output will show the actual protocol exchange details,<br>
which will help say if OpenSSH is misbehaving or not.<br>
<br>
I suspect MaxSessions 1 has not been tested a great deal and I do<br>
think that it is OpenSSH at fault here, but let&#39;s look at the trace<br>
to make sure before you post there.<br>=A0</blockquote><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex">
<br>
//Peter<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>
</blockquote></div><br>

--047d7b15aa5b8686ac04caffee4e--

--===============0599684736==
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

--===============0599684736==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 19:17:34 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91HH4Mk010152;
	Mon, 1 Oct 2012 19:17:28 +0200
Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com
 [66.111.4.25])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91HH2ZC010124
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 19:17:03 +0200
Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42])
 by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id C99972095E
 for <libssh2-devel@cool.haxx.se>; Mon,  1 Oct 2012 13:17:01 -0400 (EDT)
Received: from frontend2.nyi.mail.srv.osa ([10.202.2.161])
 by compute2.internal (MEProxy); Mon, 01 Oct 2012 13:17:01 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=castaglia.org; h=
 date:from:to:subject:in-reply-to:message-id:references
 :mime-version:content-type; s=mesmtp; bh=jz5/70N1RhBCYXBfeWKf2k+
 rpPU=; b=f5fsWp/0zJbG5SSBNy/xfYoBTnPrqTbjQDVk8YRP73kQ0l8aUP2iDJH
 YA1dnZtL732BRfm80dPu+asd+4uTpKOifqI3ldf9i4a4xImqmX1ySC4e3nbXy3sF
 zBgQvSiraNIWomyEfTiSJOQhC2OcKZAVnRkhjkWCMp7xdyNWSiCw=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
 messagingengine.com; h=date:from:to:subject:in-reply-to
 :message-id:references:mime-version:content-type; s=smtpout; bh=
 jz5/70N1RhBCYXBfeWKf2k+rpPU=; b=IPIyyKShFlsMGqTYuQ3KiPZrFuel5QJj
 nafLVx/kFVue/r6nAGLpDtcUJ2lJGUrD45OWUTF0+Zht6gYu+16mTErhHkET4ef9
 BTsD3s3bVJDt91AxZp7xi7VyTRMCJfGh3XLOrhFMpy/3J9wKVvC5rZy7tl7UFkoT
 8HSmDnRw0fA=
X-Sasl-enc: 8caKf+ARwX98XxxjWun14SEyaCFXkMKfa30k9fOxerQB 1349111821
Received: from familiar.local (unknown [64.71.23.251])
 by mail.messagingengine.com (Postfix) with ESMTPA id 64FB0482525
 for <libssh2-devel@cool.haxx.se>; Mon,  1 Oct 2012 13:17:01 -0400 (EDT)
Date: Mon, 1 Oct 2012 10:17:00 -0700 (PDT)
From: TJ Saunders <tj@castaglia.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ProFTPD SFTP connection problem
In-Reply-To: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1210011001460.3940@familiar.castaglia.org>
References: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>


> I am using a libssh2 based client to connect to a ProFTPD with mod_sftp
> (0.9.7). I have teseted it with different versions of the library (1.3.0
> and 1.4.2). I alwasy got the following errors (at the end of this post).

When I run libssh2-1.4.2's test clients against proftpd+mod_sftp, it works 
properly.  These tests were done on a Linux 2.6.28 i686 machine.

What OS/platform are you using to compile/run the libssh2 code?

> Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 2751686127 bytes

This packet length, as generated by libssh2, appears to be the issue.  We 
will need to determine how/why libssh2 would ever generate an SSH2 packet 
with such a length.

TJ

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

   Desire does not necessitate obligation.

     -TJ Saunders

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  1 20:01:49 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91I1iNE010051;
	Mon, 1 Oct 2012 20:01:47 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91I1gfT010037
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 20:01:42 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q91I1gPe010032
 for <libssh2-devel@cool.haxx.se>; Mon, 1 Oct 2012 20:01:42 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Mon, 1 Oct 2012 20:01:42 +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: ProFTPD SFTP connection problem
In-Reply-To: <alpine.DEB.2.00.1210011001460.3940@familiar.castaglia.org>
Message-ID: <alpine.DEB.2.00.1210012000102.29585@tvnag.unkk.fr>
References: <CA+EgX29g0seQb87C8vxwy0GTFMvEFWgYbzOK5fbhGwQxK-=iew@mail.gmail.com>
 <alpine.DEB.2.00.1210011001460.3940@familiar.castaglia.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Mon, 1 Oct 2012, TJ Saunders wrote:

>> Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len = 2751686127 bytes
>
> This packet length, as generated by libssh2, appears to be the issue.  We 
> will need to determine how/why libssh2 would ever generate an SSH2 packet 
> with such a length.

Quite possibly the packet isn't that big but the length field is "just" 
wrongly saying so... But yes, that seems to be at least "a" problem if not 
"the" problem.

-- 

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

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  3 17:43:16 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93FglXZ026457;
	Wed, 3 Oct 2012 17:43:10 +0200
Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com
 [209.85.223.182])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93FgiNo026264
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Wed, 3 Oct 2012 17:42:45 +0200
Received: by ieak10 with SMTP id k10so17954009iea.41
 for <libssh2-devel@cool.haxx.se>; Wed, 03 Oct 2012 08:42:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:date:message-id:subject:from:to:content-type;
 bh=ylF4a1De4ZfIqCj4x0ALFI+QxkbmE57vT4tIsfM+cwk=;
 b=m8F6e6lCQJHuf5jvqHHdI1RDYLp3JIU884VocAlc5zI2BPJps1ouMkn1sJagr+DdVa
 5mXBCXlJbVTkG4Jbk1c1AfVWWd0QJJeqEcai6KdGSWljbVUgbv7TYV2ttIr2n/i2HfjE
 Mf3C6t1G2TRvv3d65ke76QCVHtLm2lJa41Q69NcsVm557Kns6laKrSaSvMyCibmrsY54
 idn0QQYbV3VkWrPKyfKyvh3+e8QisEzycq5eZzKl0nEQDVwenhbbTSSvW4ZpbyU5vlhY
 Rg+IIQc9LSMVztfyosIMYNgNsvZFezYoNrV5zDv6njjA5rVbVkUPJP0OQqBl5bw+xcfj
 C+7g==
MIME-Version: 1.0
Received: by 10.43.97.8 with SMTP id ci8mr1891748icc.28.1349278959538; Wed, 03
 Oct 2012 08:42:39 -0700 (PDT)
Received: by 10.43.48.8 with HTTP; Wed, 3 Oct 2012 08:42:39 -0700 (PDT)
Date: Wed, 3 Oct 2012 08:42:39 -0700
Message-ID: <CAENoCNPnGb3Xhk4iRUY+4QjT4-wfByupdhPNEWRTWS8qChUyyg@mail.gmail.com>
Subject: Issue in reading message sent from remote process
From: Narayani <drop2nanni@gmail.com>
To: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============0839923941=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============0839923941==
Content-Type: multipart/alternative; boundary=bcaec517ce7616113304cb297d12

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

Hi

I am facing an issue while using libssh2. I used libssh2 channel write
to write data to a remote node. But I am not sure how to access this data
in the remote node. I tried using 'read' (not libssh2 read) from stdout
but it does not work.

Please refer source code below. main.cpp is running in master node and it
sends data to MProcess.cpp which runs in remote node. I am trying to read
this data in MProcess.cpp using 'read' from stdout, but it doesnt work.

Please take a look, and let me know


/*********main.cpp**********/

#include<iostream>
#include "MNode.h"

using namespace std;


int sock;
LIBSSH2_SESSION *session;

const char *keyfile1="~/.ssh/id_rsa.pub";
const char *keyfile2="~/.ssh/id_rsa";
const char *username="username";
const char *password="password";


static void kbd_callback(const char *name, int name_len,
                         const char *instruction, int instruction_len,
                         int num_prompts,
                         const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts,
                         LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses,
                         void **abstract)
{
    (void)name;
    (void)name_len;
    (void)instruction;
    (void)instruction_len;
    if (num_prompts == 1) {
        responses[0].text = strdup(password);
        responses[0].length = strlen(password);
    }
    (void)prompts;
    (void)abstract;
} /* kbd_callback */

static int waitsocket(int socket_fd, LIBSSH2_SESSION *session)
{
    struct timeval timeout;
    int rc;
    fd_set fd;
    fd_set *writefd = NULL;
    fd_set *readfd = NULL;
    int dir;

    timeout.tv_sec = 10;
    timeout.tv_usec = 0;

    FD_ZERO(&fd);

    FD_SET(socket_fd, &fd);

    /* now make sure we wait in the correct direction */
    dir = libssh2_session_block_directions(session);

    if(dir & LIBSSH2_SESSION_BLOCK_INBOUND)
        readfd = &fd;

    if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND)
        writefd = &fd;

    rc = select(socket_fd + 1, readfd, writefd, NULL, &timeout);

    return rc;
}


LIBSSH2_CHANNEL * LaunchRemoteProcess(char *cmd){
   const char *hostname = "127.0.0.1";
   const char *commandline = "uptime";
   const char *username    = "user";
   const char *password    = "password";

     /**************************/
    unsigned long hostaddr;
    int rc, i, auth_pw = 0;
    struct sockaddr_in sin;
    const char *fingerprint;
    char *userauthlist;
    //LIBSSH2_SESSION *session;
    LIBSSH2_CHANNEL *channel;
#ifdef WIN32
    WSADATA wsadata;

    WSAStartup(MAKEWORD(2,0), &wsadata);
#endif

    /*if (argc > 1) {
        hostaddr = inet_addr(argv[1]);
    } else {
        hostaddr = htonl(0x7F000001);
    }*/
    hostaddr = inet_addr("69.91.198.171");

    //if(argc > 2) {
        username = "user";
    //}
    //if(argc > 3) {
        password = "password";
    //}

    rc = libssh2_init (0);

    if (rc != 0) {
        fprintf (stderr, "libssh2 initialization failed (%d)\n", rc);
        //return 1;
    }

    /* Ultra basic "connect to port 22 on localhost".  Your code is
     * responsible for creating the socket 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;
    }

    /* Create a session instance and start it up. This will trade welcome
     * banners, exchange keys, and setup crypto, compression, and MAC layers
     */
    session = libssh2_session_init();

    if (libssh2_session_handshake(session, sock)) {

        fprintf(stderr, "Failure establishing SSH session\n");
       // return -1;
    }

    /* At this point we havn't authenticated. The first thing to do is check
     * the hostkey's fingerprint against our known hosts Your app may have
it
     * hard coded, may go to a file, may present it to the user, that's your
     * call
     */
    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");

    /* check what authentication methods are available */
    userauthlist = libssh2_userauth_list(session, username,
strlen(username));

    printf("Authentication methods: %s\n", userauthlist);
    if (strstr(userauthlist, "password") != NULL) {
        auth_pw |= 1;
    }
    if (strstr(userauthlist, "keyboard-interactive") != NULL) {
        auth_pw |= 2;
    }
    if (strstr(userauthlist, "publickey") != NULL) {
        auth_pw |= 4;
    }

    /* if we got an 4. argument we set this option if supported */
  /*  if(argc > 4) {
        if ((auth_pw & 1) && !strcasecmp(argv[4], "-p")) {
            auth_pw = 1;
        }
        if ((auth_pw & 2) && !strcasecmp(argv[4], "-i")) {
            auth_pw = 2;
        }
        if ((auth_pw & 4) && !strcasecmp(argv[4], "-k")) {
            auth_pw = 4;
        }
    }*/

    if (auth_pw & 1) {
        /* We could authenticate via password */
        if (libssh2_userauth_password(session, username, password)) {

            printf("\tAuthentication by password failed!\n");
            //goto shutdown;
        } else {
            printf("\tAuthentication by password succeeded.\n");
        }
    } else if (auth_pw & 2) {
        /* Or via keyboard-interactive */
        if (libssh2_userauth_keyboard_interactive(session, username,

                                                  &kbd_callback) ) {
            printf("\tAuthentication by keyboard-interactive failed!\n");
            //goto shutdown;
        } else {
            printf("\tAuthentication by keyboard-interactive succeeded.\n");
        }
    } else if (auth_pw & 4) {
        /* Or by public key */
        if (libssh2_userauth_publickey_fromfile(session, username, keyfile1,

                                                keyfile2, password)) {
            printf("\tAuthentication by public key failed!\n");
            //goto shutdown;
        } else {
            printf("\tAuthentication by public key succeeded.\n");
        }
    } else {
        printf("No supported authentication methods found!\n");
        //goto shutdown;
    }

    /* Request a shell */
    if (!(channel = libssh2_channel_open_session(session))) {

        fprintf(stderr, "Unable to open a session\n");
        //goto shutdown;
    }

    /* Some environment variables may be set,
     * It's up to the server which ones it'll allow though
     */
    libssh2_channel_setenv(channel, "FOO", "bar");


    /* Request a terminal with 'vanilla' terminal emulation
     * See /etc/termcap for more options
     */
    if (libssh2_channel_request_pty(channel, "vanilla")) {

        fprintf(stderr, "Failed requesting pty\n");
        //goto skip_shell;
    }

    /* Open a SHELL on that pty */
    if (libssh2_channel_shell(channel)) {

        fprintf(stderr, "Unable to request shell on allocated pty\n");
        //goto shutdown;
    }
        /***********/
   return channel;
}


int main(){

 MNode *m = new MNode;
 LIBSSH2_CHANNEL *channel;
 int bytecount = 0;
 int rc;
 printf("main");
 //channel = E
 char  *cmd= "Mprocess";
 //cout<<"Into remote proc exec"<endl;
 channel = LaunchRemoteProcess(cmd);
 if (channel == NULL) {

         fprintf(stderr, "No channel");
         //goto shutdown;
    }
 //cout<<"exec done"<<endl;
 printf("exec done\n");

 m->channel = channel;

 if (m->channel == NULL) {

          fprintf(stderr, "No channel");
          //goto shutdown;
    }

    printf("starting exec\n");
    while( (channel = libssh2_channel_open_session(session)) == NULL &&
            libssh2_session_last_error(session,NULL,NULL,0) ==
            LIBSSH2_ERROR_EAGAIN )
     {
         waitsocket(sock, session);
     }
     if( channel == NULL )
     {
         fprintf(stderr,"Error\n");
         exit( 1 );
     }
     while( (rc = libssh2_channel_exec(channel, cmd)) ==
            LIBSSH2_ERROR_EAGAIN )
     {
         waitsocket(sock, session);
     }
     if( rc != 0 )
     {
         fprintf(stderr,"Error\n");
         exit( 1 );
    }
     printf( "Mprocess launched and now will send a message\n" );

 m->sendMessage();

    //channel = LaunchRemoteProcess(cmd);
    /**************/
        for( ;; )
     {
         /* loop until we block */
         int rc;
         do
         {
             char buffer[0x4000];
             rc = libssh2_channel_read( channel, buffer, sizeof(buffer) );
             if( rc > 0 )
             {
                 int i;
                 bytecount += rc;
                 fprintf(stderr, "We read:\n");
                 for( i=0; i < rc; ++i )
                     fputc( buffer[i], stderr);
                 fprintf(stderr, "\n");
             }
             else {
                 if( rc != LIBSSH2_ERROR_EAGAIN )
                     /* no need to output this for the EAGAIN case */
                     fprintf(stderr, "libssh2_channel_read returned %d\n",
rc);
             }
         }
         while( rc > 0 );

         /* this is due to blocking that would occur otherwise so we loop on
            this condition */
         if( rc == LIBSSH2_ERROR_EAGAIN )
         {
                printf("Waiting for message \n");
             waitsocket(sock, session);
         }
         else
             break;
    }

 return 0;

}


/*****************************************************************************************************************************************/



/***************MNode.h*******************/

#include "libssh2_config.h"
#include <libssh2.h>

#ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
# ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif

#include <sys/time.h>
#include <sys/types.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <ctype.h>

//#define BUFSIZE 32000
#define BUFSIZE 320

class MNode
{
 //private:
 //string hostName;
 //int pid;

 //LIBSSH2_CHANNEL *channel;
 public :
 LIBSSH2_CHANNEL *channel;
 void sendMessage(){
   // int bufsize = BUFSIZE;
  int i;
        char buffer[BUFSIZE];
        for (i = 0; i < BUFSIZE; i++)
            buffer[i] = 'A';
        printf("Into lib write \n");
        if (channel == NULL) {

           fprintf(stderr, "No mNode channel");
           //goto shutdown;
    }
        int n = libssh2_channel_write_ex(channel, 0, buffer,
sizeof(buffer));
 libssh2_channel_flush_ex( channel, 0 );
        printf("%d \n",n);

 }
 void receiveMessage(){
 }

};
/**********************************************************************************************************************************/


/**********MProcess.cpp**************/

/*#include<iostream>
#include<string.h>
using namespace std;
int main(){
  std::string s;
printf("Into remote proc exec");

 while(true) {
  getline( cin, s );

     fprintf(stderr,"%s",s.c_str());
     break;
    // flag=false;
  }
  //write(1,buffer,sizeof(buffer));
   // printf("test Nani");
 return 0;
}
*/

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{
  char s[320];
  printf("Into remote proc exec\n");
  bzero(s,320);
    printf("message\n");
    fflush( stdout );
    read( 0, s, 20 );
    printf( "read 20 bytes\n" );
    fflush( stdout );
    return 0;
}

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

<p>Hi</p><p>I am facing an issue while using libssh2. I used libssh2 channe=
l write<br>to write data to a remote node. But I am not sure how to access =
this data<br>in the remote node. I tried using &#39;read&#39; (not libssh2 =
read) from stdout<br>
but it does not work.</p><p>Please refer source code below. main.cpp is run=
ning in master node and it <br>sends data to MProcess.cpp which runs in rem=
ote node. I am trying to read <br>this data in MProcess.cpp using &#39;read=
&#39; from stdout, but it doesnt work.</p>
<p>Please take a look, and let me know</p><p><br>/*********main.cpp********=
**/</p><p>#include&lt;iostream&gt;<br>#include &quot;MNode.h&quot;</p><p>us=
ing namespace std;</p><p><br>int sock;<br>LIBSSH2_SESSION *session;</p>
<p>const char *keyfile1=3D&quot;~/.ssh/id_rsa.pub&quot;;<br>const char *key=
file2=3D&quot;~/.ssh/id_rsa&quot;;<br>const char *username=3D&quot;username=
&quot;;<br>const char *password=3D&quot;password&quot;;</p><p><br>static vo=
id kbd_callback(const char *name, int name_len,<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 co=
nst char *instruction, int instruction_len,<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 int num_prompts,<br>=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 const LIBSS=
H2_USERAUTH_KBDINT_PROMPT *prompts,<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_USERAUTH_KBDINT_RESPONSE *resp=
onses,<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 vo=
id **abstract)<br>{<br>=A0=A0=A0 (void)name;<br>=A0=A0=A0 (void)name_len;<b=
r>=A0=A0=A0 (void)instruction;<br>=A0=A0=A0 (void)instruction_len;<br>=A0=
=A0=A0 if (num_prompts =3D=3D 1) {<br>=A0=A0=A0=A0=A0=A0=A0 responses[0].te=
xt =3D strdup(password);<br>
=A0=A0=A0=A0=A0=A0=A0 responses[0].length =3D strlen(password);<br>=A0=A0=
=A0 }<br>=A0=A0=A0 (void)prompts;<br>=A0=A0=A0 (void)abstract;<br>} /* kbd_=
callback */</p><p>static int waitsocket(int socket_fd, LIBSSH2_SESSION *ses=
sion)<br>{<br>=A0=A0=A0 struct timeval timeout;<br>
=A0=A0=A0 int rc;<br>=A0=A0=A0 fd_set fd;<br>=A0=A0=A0 fd_set *writefd =3D =
NULL;<br>=A0=A0=A0 fd_set *readfd =3D NULL;<br>=A0=A0=A0 int dir;</p><p>=A0=
=A0=A0 timeout.tv_sec =3D 10;<br>=A0=A0=A0 timeout.tv_usec =3D 0;</p><p>=A0=
=A0=A0 FD_ZERO(&amp;fd);</p><p>=A0=A0=A0 FD_SET(socket_fd, &amp;fd);</p>
<p>=A0=A0=A0 /* now make sure we wait in the correct direction */<br>=A0=A0=
=A0 dir =3D libssh2_session_block_directions(session);</p><p>=A0=A0=A0 if(d=
ir &amp; LIBSSH2_SESSION_BLOCK_INBOUND)<br>=A0=A0=A0=A0=A0=A0=A0 readfd =3D=
 &amp;fd;</p><p>=A0=A0=A0 if(dir &amp; LIBSSH2_SESSION_BLOCK_OUTBOUND)<br>
=A0=A0=A0=A0=A0=A0=A0 writefd =3D &amp;fd;</p><p>=A0=A0=A0 rc =3D select(so=
cket_fd + 1, readfd, writefd, NULL, &amp;timeout);</p><p>=A0=A0=A0 return r=
c;<br>}</p><p><br>LIBSSH2_CHANNEL * LaunchRemoteProcess(char *cmd){<br>=A0=
=A0 const char *hostname =3D &quot;127.0.0.1&quot;;<br>
=A0=A0 const char *commandline =3D &quot;uptime&quot;;<br>=A0=A0 const char=
 *username=A0=A0=A0 =3D &quot;user&quot;;<br>=A0=A0 const char *password=A0=
=A0=A0 =3D &quot;password&quot;;</p><p>=A0=A0=A0=A0 /**********************=
****/<br>=A0=A0=A0 unsigned long hostaddr;<br>
=A0=A0=A0 int rc, i, auth_pw =3D 0;<br>=A0=A0=A0 struct sockaddr_in sin;<br=
>=A0=A0=A0 const char *fingerprint;<br>=A0=A0=A0 char *userauthlist;<br>=A0=
=A0=A0 //LIBSSH2_SESSION *session;<br>=A0=A0=A0 LIBSSH2_CHANNEL *channel;<b=
r>#ifdef WIN32<br>=A0=A0=A0 WSADATA wsadata;</p>
<p>=A0=A0=A0 WSAStartup(MAKEWORD(2,0), &amp;wsadata);<br>#endif</p><p>=A0=
=A0=A0 /*if (argc &gt; 1) {<br>=A0=A0=A0=A0=A0=A0=A0 hostaddr =3D inet_addr=
(argv[1]);<br>=A0=A0=A0 } else {<br>=A0=A0=A0=A0=A0=A0=A0 hostaddr =3D hton=
l(0x7F000001);<br>=A0=A0=A0 }*/<br>=A0=A0=A0 hostaddr =3D inet_addr(&quot;6=
9.91.198.171&quot;);</p>
<p>=A0=A0=A0 //if(argc &gt; 2) {<br>=A0=A0=A0=A0=A0=A0=A0 username =3D &quo=
t;user&quot;;<br>=A0=A0=A0 //}<br>=A0=A0=A0 //if(argc &gt; 3) {<br>=A0=A0=
=A0=A0=A0=A0=A0 password =3D &quot;password&quot;;<br>=A0=A0=A0 //}</p><p>=
=A0=A0=A0 rc =3D libssh2_init (0);</p><p>=A0=A0=A0 if (rc !=3D 0) {<br>
=A0=A0=A0=A0=A0=A0=A0 fprintf (stderr, &quot;libssh2 initialization failed =
(%d)\n&quot;, rc);<br>=A0=A0=A0=A0=A0=A0=A0 //return 1;<br>=A0=A0=A0 }</p><=
p>=A0=A0=A0 /* Ultra basic &quot;connect to port 22 on localhost&quot;.=A0 =
Your code is<br>=A0=A0=A0=A0 * responsible for creating the socket establis=
hing the connection<br>
=A0=A0=A0=A0 */<br>=A0=A0=A0 sock =3D socket(AF_INET, SOCK_STREAM, 0);</p><=
p>=A0=A0=A0 sin.sin_family =3D AF_INET;<br>=A0=A0=A0 sin.sin_port =3D htons=
(22);<br>=A0=A0=A0 sin.sin_addr.s_addr =3D hostaddr;<br>=A0=A0=A0 if (conne=
ct(sock, (struct sockaddr*)(&amp;sin),<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sizeof(struct sockaddr_in)) !=
=3D 0) {<br>=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;failed to connect!\=
n&quot;);<br>=A0=A0=A0=A0=A0=A0 // return -1;<br>=A0=A0=A0 }</p><p>=A0=A0=
=A0 /* Create a session instance and start it up. This will trade welcome<b=
r>
=A0=A0=A0=A0 * banners, exchange keys, and setup crypto, compression, and M=
AC layers<br>=A0=A0=A0=A0 */<br>=A0=A0=A0 session =3D libssh2_session_init(=
);</p><p>=A0=A0=A0 if (libssh2_session_handshake(session, sock)) {</p><p>=
=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;Failure establishing SSH sessio=
n\n&quot;);<br>
=A0=A0=A0=A0=A0=A0 // return -1;<br>=A0=A0=A0 }</p><p>=A0=A0=A0 /* At this =
point we havn&#39;t authenticated. The first thing to do is check<br>=A0=A0=
=A0=A0 * the hostkey&#39;s fingerprint against our known hosts Your app may=
 have it<br>=A0=A0=A0=A0 * hard coded, may go to a file, may present it to =
the user, that&#39;s your<br>
=A0=A0=A0=A0 * call<br>=A0=A0=A0=A0 */<br>=A0=A0=A0 fingerprint =3D libssh2=
_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);</p><p>=A0=A0=A0 printf(&=
quot;Fingerprint: &quot;);<br>=A0=A0=A0 for(i =3D 0; i &lt; 20; i++) {<br>=
=A0=A0=A0=A0=A0=A0=A0 printf(&quot;%02X &quot;, (unsigned char)fingerprint[=
i]);<br>
=A0=A0=A0 }<br>=A0=A0=A0 printf(&quot;\n&quot;);</p><p>=A0=A0=A0 /* check w=
hat authentication methods are available */<br>=A0=A0=A0 userauthlist =3D l=
ibssh2_userauth_list(session, username, strlen(username));</p><p>=A0=A0=A0 =
printf(&quot;Authentication methods: %s\n&quot;, userauthlist);<br>
=A0=A0=A0 if (strstr(userauthlist, &quot;password&quot;) !=3D NULL) {<br>=
=A0=A0=A0=A0=A0=A0=A0 auth_pw |=3D 1;<br>=A0=A0=A0 }<br>=A0=A0=A0 if (strst=
r(userauthlist, &quot;keyboard-interactive&quot;) !=3D NULL) {<br>=A0=A0=A0=
=A0=A0=A0=A0 auth_pw |=3D 2;<br>=A0=A0=A0 }<br>=A0=A0=A0 if (strstr(useraut=
hlist, &quot;publickey&quot;) !=3D NULL) {<br>
=A0=A0=A0=A0=A0=A0=A0 auth_pw |=3D 4;<br>=A0=A0=A0 }</p><p>=A0=A0=A0 /* if =
we got an 4. argument we set this option if supported */<br>=A0 /*=A0 if(ar=
gc &gt; 4) {<br>=A0=A0=A0=A0=A0=A0=A0 if ((auth_pw &amp; 1) &amp;&amp; !str=
casecmp(argv[4], &quot;-p&quot;)) {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 au=
th_pw =3D 1;<br>
=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=A0=A0=A0=A0=A0=A0 if ((auth_pw &amp; 2) &amp=
;&amp; !strcasecmp(argv[4], &quot;-i&quot;)) {<br>=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0 auth_pw =3D 2;<br>=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=A0=A0=A0=A0=A0=
=A0 if ((auth_pw &amp; 4) &amp;&amp; !strcasecmp(argv[4], &quot;-k&quot;)) =
{<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 auth_pw =3D 4;<br>=A0=A0=A0=A0=A0=A0=A0 }=
<br>=A0=A0=A0 }*/</p><p>=A0=A0=A0 if (auth_pw &amp; 1) {<br>=A0=A0=A0=A0=A0=
=A0=A0 /* We could authenticate via password */<br>=A0=A0=A0=A0=A0=A0=A0 if=
 (libssh2_userauth_password(session, username, password)) {</p><p>=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 printf(&quot;\tAuthentication by password failed!\=
n&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0=A0=A0=A0=A0=
 } else {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf(&quot;\tAuthenticatio=
n by password succeeded.\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=A0=A0 =
} else if (auth_pw &amp; 2) {<br>=A0=A0=A0=A0=A0=A0=A0 /* Or via keyboard-i=
nteractive */<br>
=A0=A0=A0=A0=A0=A0=A0 if (libssh2_userauth_keyboard_interactive(session, us=
ername,</p><p>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0 &amp;kbd_callback) ) {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 pr=
intf(&quot;\tAuthentication by keyboard-interactive failed!\n&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0=A0=A0=A0=A0=
 } else {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf(&quot;\tAuthenticatio=
n by keyboard-interactive succeeded.\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0 }<b=
r>=A0=A0=A0 } else if (auth_pw &amp; 4) {<br>=A0=A0=A0=A0=A0=A0=A0 /* Or by=
 public key */<br>
=A0=A0=A0=A0=A0=A0=A0 if (libssh2_userauth_publickey_fromfile(session, user=
name, keyfile1,</p><p>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 keyfile2, password)) {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
 printf(&quot;\tAuthentication by public key failed!\n&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0=A0=A0=A0=A0=
 } else {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf(&quot;\tAuthenticatio=
n by public key succeeded.\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=A0=
=A0 } else {<br>=A0=A0=A0=A0=A0=A0=A0 printf(&quot;No supported authenticat=
ion methods found!\n&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0 }</p><p>=A0=A0=A0 /* Re=
quest a shell */<br>=A0=A0=A0 if (!(channel =3D libssh2_channel_open_sessio=
n(session))) {</p><p>=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;Unable to =
open a session\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>
=A0=A0=A0 }</p><p>=A0=A0=A0 /* Some environment variables may be set,<br>=
=A0=A0=A0=A0 * It&#39;s up to the server which ones it&#39;ll allow though<=
br>=A0=A0=A0=A0 */<br>=A0=A0=A0 libssh2_channel_setenv(channel, &quot;FOO&q=
uot;, &quot;bar&quot;);</p><p><br>
=A0=A0=A0 /* Request a terminal with &#39;vanilla&#39; terminal emulation<b=
r>=A0=A0=A0=A0 * See /etc/termcap for more options<br>=A0=A0=A0=A0 */<br>=
=A0=A0=A0 if (libssh2_channel_request_pty(channel, &quot;vanilla&quot;)) {<=
/p><p>=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;Failed requesting pty\n&q=
uot;);<br>
=A0=A0=A0=A0=A0=A0=A0 //goto skip_shell;<br>=A0=A0=A0 }</p><p>=A0=A0=A0 /* =
Open a SHELL on that pty */<br>=A0=A0=A0 if (libssh2_channel_shell(channel)=
) {</p><p>=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;Unable to request she=
ll on allocated pty\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>
=A0=A0=A0 }<br>=A0=A0=A0=A0=A0=A0=A0 /***********/<br>=A0=A0 return channel=
;<br>}</p><p><br>int main(){</p><p>=A0MNode *m =3D new MNode;<br>=A0LIBSSH2=
_CHANNEL *channel;<br>=A0int bytecount =3D 0;<br>=A0int rc;<br>=A0printf(&q=
uot;main&quot;);<br>=A0//channel =3D E<br>
=A0char=A0 *cmd=3D &quot;Mprocess&quot;;<br>=A0//cout&lt;&lt;&quot;Into rem=
ote proc exec&quot;&lt;endl;<br>=A0channel =3D LaunchRemoteProcess(cmd);<br=
>=A0if (channel =3D=3D NULL) {</p><p>=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stder=
r, &quot;No channel&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0 }<br>=A0//cout&lt;&l=
t;&quot;exec done&quot;&lt;&lt;endl;<br>=A0printf(&quot;exec done\n&quot;);=
<br>=A0<br>=A0m-&gt;channel =3D channel;<br>=A0<br>=A0if (m-&gt;channel =3D=
=3D NULL) {</p><p>=A0=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;No chan=
nel&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0 }</p><p>=A0=A0=A0=
 printf(&quot;starting exec\n&quot;);<br>=A0=A0=A0 while( (channel =3D libs=
sh2_channel_open_session(session)) =3D=3D NULL &amp;&amp;<br>=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0 libssh2_session_last_error(session,NULL,NULL,0) =3D=
=3D<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_ERROR_EAGAIN )<br>=A0=A0=A0=A0 {<=
br>=A0=A0=A0=A0=A0=A0=A0=A0 waitsocket(sock, session);<br>=A0=A0=A0=A0 }<br=
>=A0=A0=A0=A0 if( channel =3D=3D NULL )<br>=A0=A0=A0=A0 {<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 fprintf(stderr,&quot;Error\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0=
=A0 exit( 1 );<br>=A0=A0=A0=A0 }<br>=A0=A0=A0=A0 while( (rc =3D libssh2_cha=
nnel_exec(channel, cmd)) =3D=3D<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_ERROR_EAGAIN )<br>=A0=A0=A0=A0 {<=
br>=A0=A0=A0=A0=A0=A0=A0=A0 waitsocket(sock, session);<br>=A0=A0=A0=A0 }<br=
>=A0=A0=A0=A0 if( rc !=3D 0 )<br>=A0=A0=A0=A0 {<br>=A0=A0=A0=A0=A0=A0=A0=A0=
 fprintf(stderr,&quot;Error\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0=A0 exit( 1 )=
;<br>=A0=A0=A0 }<br>=A0=A0=A0=A0 printf( &quot;Mprocess launched and now wi=
ll send a message\n&quot; );<br>
=A0=A0=A0=A0 <br>=A0m-&gt;sendMessage();<br>=A0<br>=A0=A0=A0 //channel =3D =
LaunchRemoteProcess(cmd);<br>=A0=A0=A0 /**************/<br>=A0=A0=A0=A0=A0=
=A0=A0 for( ;; )<br>=A0=A0=A0=A0 {<br>=A0=A0=A0=A0=A0=A0=A0=A0 /* loop unti=
l we block */<br>=A0=A0=A0=A0=A0=A0=A0=A0 int rc;<br>=A0=A0=A0=A0=A0=A0=A0=
=A0 do<br>=A0=A0=A0=A0=A0=A0=A0=A0 {<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 char buffer[0x4000];<br>=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 rc =3D libssh2_channel_read( channel, buffer, size=
of(buffer) );<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if( rc &gt; 0 )<br>=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 int i;<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =
bytecount +=3D rc;<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;We r=
ead:\n&quot;);<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 for( i=
=3D0; i &lt; rc; ++i )<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0 fputc( buffer[i], stderr);<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 fprintf(stderr, &quot;\n&quot;);<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 }<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else {<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0 if( rc !=3D LIBSSH2_ERROR_EAGAIN )<br>=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* no need to output this for=
 the EAGAIN case */<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0 fprintf(stderr, &quot;libssh2_channel_read returned %d\n&quot;, r=
c);<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=A0=A0=A0=A0=A0=A0=A0 }<br>=A0=
=A0=A0=A0=A0=A0=A0=A0 while( rc &gt; 0 );</p><p>=A0=A0=A0=A0=A0=A0=A0=A0 /*=
 this is due to blocking that would occur otherwise so we loop on<br>=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 this condition */<br>=A0=A0=A0=A0=A0=A0=A0=A0 i=
f( rc =3D=3D LIBSSH2_ERROR_EAGAIN )<br>
=A0=A0=A0=A0=A0=A0=A0=A0 {=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0 printf(&quot;Waiting for message \n&quot;);<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 waitsocket(sock, session);<br>=A0=A0=A0=A0=A0=A0=A0=A0 }=
<br>=A0=A0=A0=A0=A0=A0=A0=A0 else<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 b=
reak;<br>=A0=A0=A0 }</p><p>=A0return 0;</p><p>}</p><p><br>/****************=
***************************************************************************=
**********************************************/</p>
<p>=A0</p><p>/***************MNode.h*******************/</p><p>#include &qu=
ot;libssh2_config.h&quot;<br>#include &lt;libssh2.h&gt;</p><p>#ifdef HAVE_W=
INSOCK2_H<br># include &lt;winsock2.h&gt;<br>#endif<br>#ifdef HAVE_SYS_SOCK=
ET_H<br>
# include &lt;sys/socket.h&gt;<br>#endif<br>#ifdef HAVE_NETINET_IN_H<br># i=
nclude &lt;netinet/in.h&gt;<br>#endif<br>#ifdef HAVE_SYS_SELECT_H<br># incl=
ude &lt;sys/select.h&gt;<br>#endif<br># ifdef HAVE_UNISTD_H<br>#include &lt=
;unistd.h&gt;<br>
#endif<br>#ifdef HAVE_ARPA_INET_H<br># include &lt;arpa/inet.h&gt;<br>#endi=
f</p><p>#include &lt;sys/time.h&gt;<br>#include &lt;sys/types.h&gt;<br>#inc=
lude &lt;stdlib.h&gt;<br>#include &lt;fcntl.h&gt;<br>#include &lt;errno.h&g=
t;<br>
#include &lt;stdio.h&gt;<br>#include &lt;ctype.h&gt;</p><p>//#define BUFSIZ=
E 32000<br>#define BUFSIZE 320</p><p>class MNode<br>{<br>=A0//private:<br>=
=A0//string hostName;<br>=A0//int pid;</p><p>=A0//LIBSSH2_CHANNEL *channel;=
<br>=A0public :<br>
=A0LIBSSH2_CHANNEL *channel;<br>=A0void sendMessage(){<br>=A0=A0 // int buf=
size =3D BUFSIZE;<br>=A0=A0int i;<br>=A0=A0=A0=A0=A0=A0=A0 char buffer[BUFS=
IZE];<br>=A0=A0=A0=A0=A0=A0=A0 for (i =3D 0; i &lt; BUFSIZE; i++)<br>=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 buffer[i] =3D &#39;A&#39;;<br>=A0=A0=A0=A0=A0=
=A0=A0 printf(&quot;Into lib write \n&quot;);<br>
=A0=A0=A0=A0=A0=A0=A0 if (channel =3D=3D NULL) {</p><p>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0 fprintf(stderr, &quot;No mNode channel&quot;);<br>=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 //goto shutdown;<br>=A0=A0=A0 }<br>=A0=A0=A0=A0=A0=A0=A0=
 int n =3D libssh2_channel_write_ex(channel, 0, buffer, sizeof(buffer));<br=
>=A0libssh2_channel_flush_ex( channel, 0 );<br>
=A0=A0=A0=A0=A0=A0=A0 printf(&quot;%d \n&quot;,n);</p><p>=A0}<br>=A0void re=
ceiveMessage(){<br>=A0}</p><p>};<br>/**************************************=
***************************************************************************=
*****************/</p>
<p><br>/**********MProcess.cpp**************/</p><p>/*#include&lt;iostream&=
gt;<br>#include&lt;string.h&gt;<br>using namespace std;<br>int main(){<br>=
=A0 std::string s;<br>printf(&quot;Into remote proc exec&quot;);</p><p>=A0w=
hile(true) {<br>
=A0=A0getline( cin, s );</p><p>=A0=A0=A0=A0 fprintf(stderr,&quot;%s&quot;,s=
.c_str());<br>=A0=A0=A0=A0 break;<br>=A0=A0=A0 // flag=3Dfalse;<br>=A0 }<br=
>=A0 //write(1,buffer,sizeof(buffer));<br>=A0=A0 // printf(&quot;test Nani&=
quot;);<br>=A0return 0;<br>}<br>*/</p>
<p>#include &lt;stdlib.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;un=
istd.h&gt;<br>#include&lt;string&gt;<br>#include&lt;iostream&gt;<br>using n=
amespace std;<br>int main()<br>{<br>=A0 char s[320];<br>=A0 printf(&quot;In=
to remote proc exec\n&quot;);<br>
=A0 bzero(s,320);<br>=A0=A0=A0 printf(&quot;message\n&quot;);<br>=A0=A0=A0 =
fflush( stdout );=A0=A0 <br>=A0=A0=A0 read( 0, s, 20 );<br>=A0=A0=A0 printf=
( &quot;read 20 bytes\n&quot; );<br>=A0=A0=A0 fflush( stdout );<br>=A0=A0=
=A0 return 0;<br>}<br></p>

--bcaec517ce7616113304cb297d12--

--===============0839923941==
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

--===============0839923941==--

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  4 00:02:54 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93M2ODA023977;
	Thu, 4 Oct 2012 00:02:48 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q93M2KbE023913
 for <libssh2-devel@cool.haxx.se>; Thu, 4 Oct 2012 00:02:20 +0200
Received: (qmail 5622 invoked by uid 501); 3 Oct 2012 22:02:21 -0000
Message-ID: <20121003220221.5621.qmail@stuge.se>
Date: Thu, 4 Oct 2012 00:02:20 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: Issue in reading message sent from remote process
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <CAENoCNPnGb3Xhk4iRUY+4QjT4-wfByupdhPNEWRTWS8qChUyyg@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <CAENoCNPnGb3Xhk4iRUY+4QjT4-wfByupdhPNEWRTWS8qChUyyg@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Narayani wrote:
> I am facing an issue while using libssh2.

Actually I disagree. Your issue is with designing a remote process
communication protocol which runs on top of SSH. This has absolutely
nothing to do with libssh2.


> I am not sure how to access this data in the remote node.

That depends on how you design your remote process communication
protocol which runs on top of SSH. How you do that is entirely up
to you, the SSH protocol and thus libssh2 only offers you a secure
8-bit clean transport, nothing else.


> I tried using 'read' (not libssh2 read) from stdout

Yes, your remote process communication protocol will likely make use
of stdin, stdout and perhaps also stderr on the server side.

If you like you can also choose to implement using an SSH subsystem.
In my opinion they are quite under-utilized.


> but it does not work.

We can not magically know why.

You have a problem in your systems programming code in your
application protocol, so you have to debug it.

Your libssh2 source code is rather messy, I think you would find it
easier to debug your protocol if you first clean up the source.

You seem to be using a session channel with a shell in a pty, I don't
know if that is on purpose or by accident, but you should know that
it is has quite extensive consequences which you need to be familiar
with in order to use the channel successfully.

Since you didn't write anything about the desired semantics of what
you want to develop it's impossible to give any advice on what you
should or should not use.


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

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  4 06:58:29 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q944w0lm014640;
	Thu, 4 Oct 2012 06:58:22 +0200
Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com
 [209.85.223.182])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q944vunn014615
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Thu, 4 Oct 2012 06:57:57 +0200
Received: by mail-ie0-f182.google.com with SMTP id k10so208204iea.41
 for <libssh2-devel@cool.haxx.se>; Wed, 03 Oct 2012 21:57:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type; bh=5059lFy2KDMdRa6bpPyW/KwKvLSr9EAJqbA4x4TqEq0=;
 b=ex9vGEiR6uFWsxE92v66/w4Q2lKhm2EssUcILLHtK/nviaYy8JqcbKuV1dy0k+q/u+
 rbEsp94oKHrBy7dj0uwwp/9m1YvjNjwzLR+z7Rx8Ektft7OTyCUDnv+ixwcvcxK4qEwx
 Ke8NW4P5V8M72ZsfA6b8EjT13oDm/XBuj68mGYpM7mi0NHJqrkNxjmpTt+fx+qrxNKUW
 oeZWGj3Cy4B2zfwKY5CJbudIYFs35yy4a9kGwjTSYROy2xFuZA8f/uFaRX7N18JTuTV0
 M4WPhT/7/k26reBVspKhChaqu4jgyh80AeHdEj0SMl/blv8xZ3pR8XqxdCmROPc3+JHK
 XC+w==
MIME-Version: 1.0
Received: by 10.50.194.163 with SMTP id hx3mr4081402igc.37.1349326670807; Wed,
 03 Oct 2012 21:57:50 -0700 (PDT)
Received: by 10.43.48.8 with HTTP; Wed, 3 Oct 2012 21:57:50 -0700 (PDT)
In-Reply-To: <20121003220221.5621.qmail@stuge.se>
References: <CAENoCNPnGb3Xhk4iRUY+4QjT4-wfByupdhPNEWRTWS8qChUyyg@mail.gmail.com>
 <20121003220221.5621.qmail@stuge.se>
Date: Wed, 3 Oct 2012 21:57:50 -0700
Message-ID: <CAENoCNPDZknaNpLpdRxLjJKOb37FNWCSW65TMcdQ2X_oh+FUrw@mail.gmail.com>
Subject: Re: Issue in reading message sent from remote process
From: Narayani <drop2nanni@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1365017198=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1365017198==
Content-Type: multipart/alternative; boundary=14dae9340cabe641ac04cb34985d

--14dae9340cabe641ac04cb34985d
Content-Type: text/plain; charset=ISO-8859-1

Thanks Peter for your quick reply. Your inputs were
helpful, I was able to resolve the issue.

Thanks,
Narayani

On 3 October 2012 15:02, Peter Stuge <peter@stuge.se> wrote:

> Narayani wrote:
> > I am facing an issue while using libssh2.
>
> Actually I disagree. Your issue is with designing a remote process
> communication protocol which runs on top of SSH. This has absolutely
> nothing to do with libssh2.
>
>
> > I am not sure how to access this data in the remote node.
>
> That depends on how you design your remote process communication
> protocol which runs on top of SSH. How you do that is entirely up
> to you, the SSH protocol and thus libssh2 only offers you a secure
> 8-bit clean transport, nothing else.
>
>
> > I tried using 'read' (not libssh2 read) from stdout
>
> Yes, your remote process communication protocol will likely make use
> of stdin, stdout and perhaps also stderr on the server side.
>
> If you like you can also choose to implement using an SSH subsystem.
> In my opinion they are quite under-utilized.
>
>
> > but it does not work.
>
> We can not magically know why.
>
> You have a problem in your systems programming code in your
> application protocol, so you have to debug it.
>
> Your libssh2 source code is rather messy, I think you would find it
> easier to debug your protocol if you first clean up the source.
>
> You seem to be using a session channel with a shell in a pty, I don't
> know if that is on purpose or by accident, but you should know that
> it is has quite extensive consequences which you need to be familiar
> with in order to use the channel successfully.
>
> Since you didn't write anything about the desired semantics of what
> you want to develop it's impossible to give any advice on what you
> should or should not use.
>
>
> //Peter
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>

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

<div>Thanks Peter for your quick reply. Your inputs were</div><div>helpful,=
 I was able to resolve the issue.</div><div>=A0</div><div>Thanks,</div><div=
>Narayani<br><br></div><div class=3D"gmail_quote">On 3 October 2012 15:02, =
Peter Stuge <span dir=3D"ltr">&lt;<a href=3D"mailto:peter@stuge.se" target=
=3D"_blank">peter@stuge.se</a>&gt;</span> wrote:<br>
<blockquote style=3D"margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-=
color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class=
=3D"gmail_quote"><div class=3D"im">Narayani wrote:<br>
&gt; I am facing an issue while using libssh2.<br>
<br>
</div>Actually I disagree. Your issue is with designing a remote process<br=
>
communication protocol which runs on top of SSH. This has absolutely<br>
nothing to do with libssh2.<br>
<div class=3D"im"><br>
<br>
&gt; I am not sure how to access this data in the remote node.<br>
<br>
</div>That depends on how you design your remote process communication<br>
protocol which runs on top of SSH. How you do that is entirely up<br>
to you, the SSH protocol and thus libssh2 only offers you a secure<br>
8-bit clean transport, nothing else.<br>
<div class=3D"im"><br>
<br>
&gt; I tried using &#39;read&#39; (not libssh2 read) from stdout<br>
<br>
</div>Yes, your remote process communication protocol will likely make use<=
br>
of stdin, stdout and perhaps also stderr on the server side.<br>
<br>
If you like you can also choose to implement using an SSH subsystem.<br>
In my opinion they are quite under-utilized.<br>
<div class=3D"im"><br>
<br>
&gt; but it does not work.<br>
<br>
</div>We can not magically know why.<br>
<br>
You have a problem in your systems programming code in your<br>
application protocol, so you have to debug it.<br>
<br>
Your libssh2 source code is rather messy, I think you would find it<br>
easier to debug your protocol if you first clean up the source.<br>
<br>
You seem to be using a session channel with a shell in a pty, I don&#39;t<b=
r>
know if that is on purpose or by accident, but you should know that<br>
it is has quite extensive consequences which you need to be familiar<br>
with in order to use the channel successfully.<br>
<br>
Since you didn&#39;t write anything about the desired semantics of what<br>
you want to develop it&#39;s impossible to give any advice on what you<br>
should or should not use.<br>
<br>
<br>
//Peter<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>
</blockquote></div><br>

--14dae9340cabe641ac04cb34985d--

--===============1365017198==
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

--===============1365017198==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 15:31:01 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DUWA7004591;
	Mon, 8 Oct 2012 15:30:53 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q98DUTK0004582
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 15:30:30 +0200
Received: (qmail 29323 invoked by uid 501); 8 Oct 2012 13:30:31 -0000
Message-ID: <20121008133031.29322.qmail@stuge.se>
Date: Mon, 8 Oct 2012 15:30:31 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20121008125229.16552.qmail@earth.stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20121008125229.16552.qmail@earth.stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

libssh2@git.stuge.se wrote:
> +++ b/src/channel.c
> @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel,
>                                  char **langtag,
>                                  size_t *langtag_len)
>  {
> -    LIBSSH2_SESSION *session = channel->session;
>      size_t namelen = 0;
>  
>      if (channel) {
> +        LIBSSH2_SESSION *session = channel->session;
> +
>          if (channel->exit_signal) {
>              namelen = strlen(channel->exit_signal);
>              if (exitsignal) {

I think this fix is wrong. Please look at what happens after the condition.

Also, I don't think that libssh2 needs to validate programmer input.
If someone passes a NULL pointer to a function that is really an
error, and they will then have a problem sooner or later anyway.

It is much better for libssh2 to crash fast and hard in this case, to
have a higher chance that the programmer discovers the error.

Papering over the error just to please a static analyzer does not
make sense.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 15:32:27 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DWOIZ005606;
	Mon, 8 Oct 2012 15:32:26 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DWMwI005561
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 15:32:22 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q98DWMv6005558
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 15:32:22 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Mon, 8 Oct 2012 15:32: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: libssh2 master a8cfc708 channel: fix possible NULL dereference
In-Reply-To: <20121008133031.29322.qmail@stuge.se>
Message-ID: <alpine.DEB.2.00.1210081531470.18828@tvnag.unkk.fr>
References: <20121008125229.16552.qmail@earth.stuge.se>
 <20121008133031.29322.qmail@stuge.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Mon, 8 Oct 2012, Peter Stuge wrote:

> Also, I don't think that libssh2 needs to validate programmer input. If 
> someone passes a NULL pointer to a function that is really an error, and 
> they will then have a problem sooner or later anyway.

Is it possibly so that we use that function internally somewhere with a 
(possibly) NULL argument?

-- 

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 15:59:14 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98Dx6dw024254;
	Mon, 8 Oct 2012 15:59:13 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q98Dx3eU024216
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 15:59:03 +0200
Received: (qmail 32176 invoked by uid 501); 8 Oct 2012 13:59:04 -0000
Message-ID: <20121008135904.32175.qmail@stuge.se>
Date: Mon, 8 Oct 2012 15:59:04 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20121008125229.16552.qmail@earth.stuge.se>
 <20121008133031.29322.qmail@stuge.se>
 <alpine.DEB.2.00.1210081531470.18828@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <alpine.DEB.2.00.1210081531470.18828@tvnag.unkk.fr>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Daniel Stenberg wrote:
>> Also, I don't think that libssh2 needs to validate programmer input. If 
>> someone passes a NULL pointer to a function that is really an error, and 
>> they will then have a problem sooner or later anyway.
>
> Is it possibly so that we use that function internally somewhere with a 
> (possibly) NULL argument?

If yes, then that's what need to be fixed. I suspect that Coverity
just notices that it is unchecked user input though. The function is
called only in example/ssh2_echo.c and example/ssh2_exec.c.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 16:06:52 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E6mNr030412;
	Mon, 8 Oct 2012 16:06:51 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E6iEu030383
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 16:06:44 +0200
Received: from int-mx12.intmail.prod.int.phx2.redhat.com
 (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98E6gQQ031496
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
 Mon, 8 Oct 2012 10:06:42 -0400
Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67])
 by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q98E6f3Q008049; Mon, 8 Oct 2012 10:06:41 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference
Date: Mon, 8 Oct 2012 16:05:52 +0200
User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ;
 )
References: <20121008125229.16552.qmail@earth.stuge.se>
 <20121008133031.29322.qmail@stuge.se>
In-Reply-To: <20121008133031.29322.qmail@stuge.se>
MIME-Version: 1.0
Message-Id: <201210081605.52041.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Monday 08 October 2012 15:30:31 Peter Stuge wrote:
> libssh2@git.stuge.se wrote:
> > +++ b/src/channel.c
> > @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL
> > *channel, char **langtag,
> >                                  size_t *langtag_len)
> >  {
> > -    LIBSSH2_SESSION *session = channel->session;
> >      size_t namelen = 0;
> >
> >      if (channel) {
> > +        LIBSSH2_SESSION *session = channel->session;
> > +
> >          if (channel->exit_signal) {
> >              namelen = strlen(channel->exit_signal);
> >              if (exitsignal) {
> 
> I think this fix is wrong. Please look at what happens after the condition.

It does exactly what the comments above the functions suggests, doesn't it?

> Also, I don't think that libssh2 needs to validate programmer input.
> If someone passes a NULL pointer to a function that is really an
> error, and they will then have a problem sooner or later anyway.
> 
> It is much better for libssh2 to crash fast and hard in this case, to
> have a higher chance that the programmer discovers the error.

I fully agree with your attitude on this.  Then we should just the check and 
update the comment above the function, right?

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 16:09:37 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E9YSe031984;
	Mon, 8 Oct 2012 16:09:37 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E9V05031964
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 16:09:31 +0200
Received: from int-mx10.intmail.prod.int.phx2.redhat.com
 (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98E9Wng003091
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
 Mon, 8 Oct 2012 10:09:32 -0400
Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67])
 by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q98E9VmA032683; Mon, 8 Oct 2012 10:09:31 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference
Date: Mon, 8 Oct 2012 16:08:42 +0200
User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ;
 )
References: <20121008125229.16552.qmail@earth.stuge.se>
 <alpine.DEB.2.00.1210081531470.18828@tvnag.unkk.fr>
 <20121008135904.32175.qmail@stuge.se>
In-Reply-To: <20121008135904.32175.qmail@stuge.se>
MIME-Version: 1.0
Message-Id: <201210081608.42439.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23
Cc: Daniel Stenberg <daniel@haxx.se>, libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Monday 08 October 2012 15:59:04 Peter Stuge wrote:
> Daniel Stenberg wrote:
> >> Also, I don't think that libssh2 needs to validate programmer input. If
> >> someone passes a NULL pointer to a function that is really an error, and
> >> they will then have a problem sooner or later anyway.
> >
> > Is it possibly so that we use that function internally somewhere with a
> > (possibly) NULL argument?

I cannot see any internal use of the function unless you count the examples.

> If yes, then that's what need to be fixed. I suspect that Coverity
> just notices that it is unchecked user input though.

Nope.  It spotted that the pointer was dereferenced prior to the NULL check,
which is always a programming mistake:

Error: REVERSE_INULL (CWE-476):
src/channel.c:1486: deref_ptr: Directly dereferencing pointer "channel".
src/channel.c:1489: check_after_deref: Dereferencing "channel" before a null check.

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  8 16:10:50 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98EAmx2000666;
	Mon, 8 Oct 2012 16:10:50 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98EAkOX000648
 for <libssh2-devel@cool.haxx.se>; Mon, 8 Oct 2012 16:10:47 +0200
Received: from int-mx11.intmail.prod.int.phx2.redhat.com
 (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98EAl3Q007298
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
 Mon, 8 Oct 2012 10:10:47 -0400
Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67])
 by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q98EAjcl022071; Mon, 8 Oct 2012 10:10:47 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference
Date: Mon, 8 Oct 2012 16:09:56 +0200
User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ;
 )
References: <20121008125229.16552.qmail@earth.stuge.se>
 <20121008133031.29322.qmail@stuge.se> <201210081605.52041.kdudka@redhat.com>
In-Reply-To: <201210081605.52041.kdudka@redhat.com>
MIME-Version: 1.0
Message-Id: <201210081609.56498.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Monday 08 October 2012 16:05:52 Kamil Dudka wrote:
> On Monday 08 October 2012 15:30:31 Peter Stuge wrote:
> > libssh2@git.stuge.se wrote:
> > > +++ b/src/channel.c
> > > @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL
> > > *channel, char **langtag,
> > >                                  size_t *langtag_len)
> > >  {
> > > -    LIBSSH2_SESSION *session = channel->session;
> > >      size_t namelen = 0;
> > >
> > >      if (channel) {
> > > +        LIBSSH2_SESSION *session = channel->session;
> > > +
> > >          if (channel->exit_signal) {
> > >              namelen = strlen(channel->exit_signal);
> > >              if (exitsignal) {
> >
> > I think this fix is wrong. Please look at what happens after the
> > condition.
> 
> It does exactly what the comments above the functions suggests, doesn't it?
> 
> > Also, I don't think that libssh2 needs to validate programmer input.
> > If someone passes a NULL pointer to a function that is really an
> > error, and they will then have a problem sooner or later anyway.
> >
> > It is much better for libssh2 to crash fast and hard in this case, to
> > have a higher chance that the programmer discovers the error.
> 
> I fully agree with your attitude on this.  Then we should just the check
>  and update the comment above the function, right?

I meant to _remove_ the check and update the comment.

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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:22:54 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997MUWJ006012;
	Tue, 9 Oct 2012 09:22:47 +0200
Received: from smtpbg5.qq.com (SMTPBG5.QQ.COM [183.60.61.230])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q997MQ0c005985
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:22:28 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail658t1349767339t943661
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" <libssh2-devel@cool.haxx.se>
Subject: libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Date: Tue, 9 Oct 2012 15:22:19 +0800
X-Priority: 3
Message-ID: <tencent_165B2C28220CD79575078912@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============2011147892=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

--===============2011147892==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_5073D0AB_08A305C8_0DF32EE5"
Content-Transfer-Encoding: 8Bit

This is a multi-part message in MIME format.

------=_NextPart_5073D0AB_08A305C8_0DF32EE5
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGksYWxsDQogICAgSSBhbSB1c2luZyAgbGlic3NoMi0xLjQuMix0aGUgc2NwLmMgZXhhbXBs
ZSBpcyBub3Qgd29yay4NCiAgICBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgs
ICZmaWxlaW5mbyk7IHRoZSBjYWxsIGlzIHN1Y2Vzc2Z1bCxidXQgdGhlIGZpbGVpbmZvLnN0
X3NpemUgaXMgYWx3YXlzIHplcm8uDQogICAgYW55b25lIGhlbHAgbWUuDQogICAgbXkgZW5n
bGlzaCBpcyBwb29sLGZvcmdpdmUgbWUuDQogICAgdGhhbmtzLg==

------=_NextPart_5073D0AB_08A305C8_0DF32EE5
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBJ
IGFtIHVzaW5nJm5ic3A7IGxpYnNzaDItMS40LjIsdGhlIHNjcC5jIGV4YW1wbGUgaXMgbm90
IHdvcmsuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBsaWJzc2gyX3NjcF9yZWN2KHNlc3Np
b24sIHNjcHBhdGgsICZhbXA7ZmlsZWluZm8pOyB0aGUgY2FsbCBpcyBzdWNlc3NmdWwsYnV0
IHRoZSBmaWxlaW5mby5zdF9zaXplIGlzIGFsd2F5cyB6ZXJvLjwvRElWPg0KPERJVj4mbmJz
cDsmbmJzcDsgYW55b25lIGhlbHAgbWUuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBteSBl
bmdsaXNoIGlzIHBvb2wsZm9yZ2l2ZSBtZS48L0RJVj4NCjxESVY+Jm5ic3A7Jm5ic3A7IHRo
YW5rcy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyZuYnNw
OzwvRElWPjwvRk9OVD4=

------=_NextPart_5073D0AB_08A305C8_0DF32EE5--


--===============2011147892==
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

--===============2011147892==--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:23:44 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997NgKi006573;
	Tue, 9 Oct 2012 09:23:44 +0200
Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997NfuC006530
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:23:41 +0200
Received: (qmail 29972 invoked by uid 0); 9 Oct 2012 09:23:32 +0200
Date: 9 Oct 2012 09:23:32 +0200
Message-ID: <20121009072332.29970.qmail@sokrates.metanet.ch>
From: jonas.schnelli@include7.ch
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Subject: =?utf-8?Q?Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?=
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997NgKi006573

Sehr geehrte Damen und Herren

Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend.
Dieses E-Mail wird NICHT automatisch weitergeleitet.
Dieses E-Mail wird verzÃ¶gert gelesen und beantwortet.

In dringenden FÃ¤llen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe WÃ¼ger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren.

Besten Dank.

Freundliche GrÃ¼sse
Jonas Schnelli


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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:24:06 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997O4BZ006823;
	Tue, 9 Oct 2012 09:24:05 +0200
Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997O3g8006661
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:24:03 +0200
Received: (qmail 30078 invoked by uid 0); 9 Oct 2012 09:23:58 +0200
Date: 9 Oct 2012 09:23:58 +0200
Message-ID: <20121009072358.30076.qmail@sokrates.metanet.ch>
From: jonas.schnelli@include7.ch
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?=
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997O4BZ006823

Sehr geehrte Damen und Herren

Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend.
Dieses E-Mail wird NICHT automatisch weitergeleitet.
Dieses E-Mail wird verzÃ¶gert gelesen und beantwortet.

In dringenden FÃ¤llen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe WÃ¼ger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren.

Besten Dank.

Freundliche GrÃ¼sse
Jonas Schnelli


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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:24:31 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997OUTW007000;
	Tue, 9 Oct 2012 09:24:31 +0200
Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997OSTt006965
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:24:28 +0200
Received: (qmail 30282 invoked by uid 0); 9 Oct 2012 09:24:23 +0200
Date: 9 Oct 2012 09:24:23 +0200
Message-ID: <20121009072423.30280.qmail@sokrates.metanet.ch>
From: jonas.schnelli@include7.ch
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?=
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997OUTW007000

Sehr geehrte Damen und Herren

Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend.
Dieses E-Mail wird NICHT automatisch weitergeleitet.
Dieses E-Mail wird verzÃ¶gert gelesen und beantwortet.

In dringenden FÃ¤llen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe WÃ¼ger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren.

Besten Dank.

Freundliche GrÃ¼sse
Jonas Schnelli


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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:25:00 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997Ow9P007207;
	Tue, 9 Oct 2012 09:25:00 +0200
Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997Ov1F007159
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:24:58 +0200
Received: (qmail 30398 invoked by uid 0); 9 Oct 2012 09:24:53 +0200
Date: 9 Oct 2012 09:24:53 +0200
Message-ID: <20121009072453.30396.qmail@sokrates.metanet.ch>
From: jonas.schnelli@include7.ch
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?=
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997Ow9P007207

Sehr geehrte Damen und Herren

Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend.
Dieses E-Mail wird NICHT automatisch weitergeleitet.
Dieses E-Mail wird verzÃ¶gert gelesen und beantwortet.

In dringenden FÃ¤llen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe WÃ¼ger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren.

Besten Dank.

Freundliche GrÃ¼sse
Jonas Schnelli


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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  9 09:25:32 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997PUlP008183;
	Tue, 9 Oct 2012 09:25:32 +0200
Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997PT2G008161
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 9 Oct 2012 09:25:29 +0200
Received: (qmail 30811 invoked by uid 0); 9 Oct 2012 09:25:24 +0200
Date: 9 Oct 2012 09:25:24 +0200
Message-ID: <20121009072524.30809.qmail@sokrates.metanet.ch>
From: jonas.schnelli@include7.ch
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?=
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997PUlP008183

Sehr geehrte Damen und Herren

Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend.
Dieses E-Mail wird NICHT automatisch weitergeleitet.
Dieses E-Mail wird verzÃ¶gert gelesen und beantwortet.

In dringenden FÃ¤llen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe WÃ¼ger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren.

Besten Dank.

Freundliche GrÃ¼sse
Jonas Schnelli


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

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 10 12:17:15 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9AAGhN2027128;
	Wed, 10 Oct 2012 12:17:05 +0200
Received: from smtpbg297.qq.com (smtpbg297.qq.com [184.105.67.100])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9AAGeUa027042
 for <libssh2-devel@cool.haxx.se>; Wed, 10 Oct 2012 12:16:41 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail658t1349864191t112826
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" <libssh2-devel@cool.haxx.se>
Subject: Re:libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Date: Wed, 10 Oct 2012 18:16:31 +0800
X-Priority: 3
Message-ID: <tencent_2D6F38254A186E7E0441CCDC@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 1220599768
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1964314942=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

--===============1964314942==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_50754AFF_D4D03058_03ABB07F"
Content-Transfer-Encoding: 8Bit

This is a multi-part message in MIME format.

------=_NextPart_50754AFF_D4D03058_03ABB07F
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

SSBmb3VuZCB0aGF0IHRoZSBsaWJnY3J5cHQtMS41LjAgaXMgdW5zdWl0ZWQgdG8gbGlic3No
Mg0KICANCiBbbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBSZWN2ZWQgMTA0MC8xNjM4NCBi
eXRlcyB0byAweDUwMmMzOCswDQpbbGlic3NoMl0gMC4zOTA0OTYgU29ja2V0OiBTZW50IDE2
LzE2IGJ5dGVzIGF0IDB4NTA2Yzc4DQpbbGlic3NoMl0gMC4zOTA1MzkgRmFpbHVyZSBFdmVu
dDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0KW2xpYnNzaDJd
IDAuMzkwNzM2IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzAN
CiAgDQoNCiANCg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0t
LS0tLS0NCiAgRnJvbTogICKjxaP2o+Wj8i9keSI8dW5peEB2aXAucXEuY29tPjsNCiBEYXRl
OiAgVHVlLCBPY3QgOSwgMjAxMiAwMzoyMiBQTQ0KIFRvOiAgImxpYnNzaDItZGV2ZWwiPGxp
YnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlPjsgDQogDQogU3ViamVjdDogIGxpYnNzaDJfc2Nw
X3JlY3YgaXMgbm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQNCg0KIA0KDQogaGksYWxsDQog
ICAgSSBhbSB1c2luZyAgbGlic3NoMi0xLjQuMix0aGUgc2NwLmMgZXhhbXBsZSBpcyBub3Qg
d29yay4NCiAgICBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgsICZmaWxlaW5m
byk7IHRoZSBjYWxsIGlzIHN1Y2Vzc2Z1bCxidXQgdGhlIGZpbGVpbmZvLnN0X3NpemUgaXMg
YWx3YXlzIHplcm8uDQogICAgYW55b25lIGhlbHAgbWUuDQogICAgbXkgZW5nbGlzaCBpcyBw
b29sLGZvcmdpdmUgbWUuDQogICAgdGhhbmtzLg==

------=_NextPart_50754AFF_D4D03058_03ABB07F
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+SSZuYnNwO2ZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0x
LjUuMCBpcyB1bnN1aXRlZCB0byBsaWJzc2gyPC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0K
PERJVj5bbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBSZWN2ZWQgMTA0MC8xNjM4NCBieXRl
cyB0byAweDUwMmMzOCswPEJSPltsaWJzc2gyXSAwLjM5MDQ5NiBTb2NrZXQ6IFNlbnQgMTYv
MTYgYnl0ZXMgYXQgMHg1MDZjNzg8QlI+W2xpYnNzaDJdIDAuMzkwNTM5IEZhaWx1cmUgRXZl
bnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXM8QlI+W2xpYnNz
aDJdIDAuMzkwNzM2IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4
KzA8L0RJVj48L0ZPTlQ+DQo8RElWPjxpbmNsdWRldGFpbD4NCjxESVY+PEJSPjwvRElWPg0K
PERJVj48QlI+PC9ESVY+DQo8RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogMnB4OyBQQURE
SU5HLUxFRlQ6IDBweDsgUEFERElORy1SSUdIVDogMHB4OyBGT05ULUZBTUlMWTogQXJpYWwg
TmFycm93OyBGT05ULVNJWkU6IDEycHg7IFBBRERJTkctVE9QOiAycHgiPi0tLS0tLS0tLS0t
LS0tLS0tLSZuYnNwO09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPC9ESVY+DQo8
RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogOHB4OyBQQURESU5HLUxFRlQ6IDhweDsgUEFE
RElORy1SSUdIVDogOHB4OyBCQUNLR1JPVU5EOiAjZWZlZmVmOyBGT05ULVNJWkU6IDEycHg7
IFBBRERJTkctVE9QOiA4cHgiPg0KPERJVj48Qj5Gcm9tOiA8L0I+Jm5ic3A7IqPFo/aj5aPy
L2R5IiZsdDt1bml4QHZpcC5xcS5jb20mZ3Q7OzwvRElWPg0KPERJVj48Qj5EYXRlOiA8L0I+
Jm5ic3A7VHVlLCBPY3QgOSwgMjAxMiAwMzoyMiBQTTwvRElWPg0KPERJVj48Qj5UbzogPC9C
PiZuYnNwOyJsaWJzc2gyLWRldmVsIiZsdDtsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZn
dDs7IDxXQlI+PC9ESVY+DQo8RElWPjwvRElWPg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5i
c3A7bGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdDwvRElW
PjwvRElWPg0KPERJVj48QlI+PC9ESVY+PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9E
SVY+DQo8RElWPiZuYnNwOyZuYnNwOyBJIGFtIHVzaW5nJm5ic3A7IGxpYnNzaDItMS40LjIs
dGhlIHNjcC5jIGV4YW1wbGUgaXMgbm90IHdvcmsuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNw
OyBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgsICZhbXA7ZmlsZWluZm8pOyB0
aGUgY2FsbCBpcyBzdWNlc3NmdWwsYnV0IHRoZSBmaWxlaW5mby5zdF9zaXplIGlzIGFsd2F5
cyB6ZXJvLjwvRElWPg0KPERJVj4mbmJzcDsmbmJzcDsgYW55b25lIGhlbHAgbWUuPC9ESVY+
DQo8RElWPiZuYnNwOyZuYnNwOyBteSBlbmdsaXNoIGlzIHBvb2wsZm9yZ2l2ZSBtZS48L0RJ
Vj4NCjxESVY+Jm5ic3A7Jm5ic3A7IHRoYW5rcy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+
DQo8RElWPiZuYnNwOyZuYnNwOyA8L0RJVj48L0ZPTlQ+DQo8RElWPjwvRElWPjwvaW5jbHVk
ZXRhaWw+PC9ESVY+

------=_NextPart_50754AFF_D4D03058_03ABB07F--


--===============1964314942==
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

--===============1964314942==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 10 16:02:19 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9AE1otb009401;
	Wed, 10 Oct 2012 16:02:13 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9AE1m11009387
 for <libssh2-devel@cool.haxx.se>; Wed, 10 Oct 2012 16:01:48 +0200
Received: (qmail 17188 invoked by uid 501); 10 Oct 2012 14:01:48 -0000
Message-ID: <20121010140148.17187.qmail@stuge.se>
Date: Wed, 10 Oct 2012 16:01:48 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_scp_recv is not populating struct stat
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <tencent_2D6F38254A186E7E0441CCDC@qq.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <tencent_2D6F38254A186E7E0441CCDC@qq.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9AE1otb009401

ï¼¥ï½–ï½…ï½’ wrote:
> I found that the libgcrypt-1.5.0 is unsuited to libssh2

I think the issue requires further investigation.


> [libssh2] 0.386538 Socket: Recved 1040/16384 bytes to 0x502c38+0
> [libssh2] 0.390496 Socket: Sent 16/16 bytes at 0x506c78
> [libssh2] 0.390539 Failure Event: -37 - Unable to exchange encryption keys
> [libssh2] 0.390736 Socket: Recved 32/16384 bytes to 0x502c38+0

The above does not indicate an error. -37 means that some
communication has not yet completed, so the call to libssh2
should be attempted again.

~/src/libssh2 $ git grep -- -37|cat
include/libssh2.h:#define LIBSSH2_ERROR_EAGAIN                    -37


Please try to use some of the example programs included with libssh2.
They should work just fine. If they do not work then let's find the
problem.

libgcrypt has one known limitation. libssh2 can not use
passphrase-protected private SSH keys for authentication, if built
with libgcrypt. Using such keys is only possible when built with
OpenSSL. Everything else should work.


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

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 03:58:02 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B1vYLq010699;
	Thu, 11 Oct 2012 03:57:57 +0200
Received: from na3sys009aog112.obsmtp.com (na3sys009aog112.obsmtp.com
 [74.125.149.207])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B1vW9v010685
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 03:57:32 +0200
Received: from mail-ob0-f182.google.com ([209.85.214.182]) (using TLSv1) by
 na3sys009aob112.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUHYnjJPORF86mYoZB7lB+swpVpew1CN9@postini.com;
 Wed, 10 Oct 2012 18:57:35 PDT
Received: by mail-ob0-f182.google.com with SMTP id wc20so1226284obb.41
 for <libssh2-devel@cool.haxx.se>; Wed, 10 Oct 2012 18:57:32 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:date:message-id:subject:from:to:content-type
 :x-gm-message-state;
 bh=J1uqVj29t/JgIyzbDf4sEKEhdJ9vaYPn2aRCWLolQdo=;
 b=ebHJVm4r/ESgcDoM12Leqkh6NYIcBQrfa8Q634j5i7ilrKo9YkQijMs7RyQy2ymCMH
 Fj0CleK1QpUSY0S6533t782WmtswiUn8jPuVH3T0BIx5huw2xqlYj2Mpk4/38+z9mrBy
 F+WsjC4FK4JmBQIQkLc6IBvh4Rf0oclrgqXOst95kCwkAVkeFVgBvp4AwfuXTwJsopAa
 vdioxhukEfhVZVITQWE3bAwx8fJjfH5lBbR4M8V01gqHvo+3K8svCag+q4u59zm83KJR
 68edi5jPIlVWNDML232LbpqhmPQRc25FUCz6lbRRnkDZYeUPRqWFNp26lPB/Jq63fYnc
 CtXw==
MIME-Version: 1.0
Received: by 10.182.157.44 with SMTP id wj12mr7208752obb.41.1349920652138;
 Wed, 10 Oct 2012 18:57:32 -0700 (PDT)
Received: by 10.76.139.196 with HTTP; Wed, 10 Oct 2012 18:57:32 -0700 (PDT)
Date: Wed, 10 Oct 2012 18:57:32 -0700
Message-ID: <CA+dEfD3arrW5drvxfXnUe3wg4=0VyOSTLqAp4ysVSs26K3Nmfw@mail.gmail.com>
Subject: Connection loss detection with keepalive
From: Anton Obukhov <anton@ubnt.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQl11xMWUeSkhZ9PCMHCgKv0Ls1XS0S5jGHSioVxPDoGlTuTngdRVAOLjynLivSdVGeVgSMu
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============2138750457=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============2138750457==
Content-Type: multipart/alternative; boundary=f46d04428210f2195304cbbee45c

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

Hello libssh2 authors,

I'm working on an application, which needs to stream data from a remote
machine in real time. Libssh2 is just great for handling sftp and exec
sessions, but when it comes to unreliable networks conditions, it doesn't
really have any handles to control its behavior.

I scooped through this mailing list and the rest of googles, and found a
couple of patches that were attempting to implement a reliable connection
loss detection. (Namely, a patch attached to this ticket:
http://trac.libssh2.org/ticket/183). However, even that was not enough for
me.

The two things missing in that patch are:
1. It doesn't handle a situation when the outgoing queue is full, and the
libssh2_keepalive_send operation silently returns;
2. Even if want_reply set to 1, there is no checking for server responses
to heartbeat, as we don't really read anything (normally, heartbeats are
important in those scenarios, when there is a pause in data exchange and
nothing else is being sent or received).

What I had to implement for my application is a dedicated channel, which is
used just make the core of the library update incoming packets queue, and
also reset outstanding heartbeats counters. Something like this:

LIBSSH2_CHANNEL *channelKeepAlive = createChannel(session, sock);
while (1) {
    char buffer[1024];
    libssh2_keepalive_send(session, &seconds_to_next);
    libssh2_channel_read_ex(channelKeepAlive, 0, buffer, sizeof(buffer));
    ... //do other tasks
}

I'd like to understand if a patch that makes keepalive act as a connection
loss detector would be interesting for this community, as a part of the
library. If yes - what is the preferred API for dedicated channel
open/close?

Please note that all said above was tested only in non-blocking socket
conditions, I guess something might be different for a blocking scenario.

Thanks,
Anton

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

<div>Hello libssh2 authors,<br></div><div><br></div><div>I&#39;m working on=
 an application, which needs to stream data from a remote machine in real t=
ime. Libssh2 is just great for handling sftp and exec sessions, but when it=
 comes to unreliable networks conditions, it doesn&#39;t really have any ha=
ndles to control its behavior.=A0</div>
<div><br></div><div>I scooped through this mailing list and the rest of goo=
gles, and found a couple of patches that were attempting to implement a rel=
iable connection loss detection. (Namely, a patch attached to this ticket: =
<a href=3D"http://trac.libssh2.org/ticket/183">http://trac.libssh2.org/tick=
et/183</a>). However, even that was not enough for me.=A0</div>
<div><br></div><div>The two things missing in that patch are:</div><div>1. =
It doesn&#39;t handle a situation when the outgoing queue is full, and the =
libssh2_keepalive_send operation silently returns;</div><div>2. Even if wan=
t_reply set to 1, there is no checking for server responses to heartbeat, a=
s we don&#39;t really read anything (normally, heartbeats are important in =
those scenarios, when there is a pause in data exchange and nothing else is=
 being sent or received).</div>
<div><br></div><div>What I had to implement for my application is a dedicat=
ed channel, which is used just make the core of the library update incoming=
 packets queue, and also reset outstanding heartbeats counters. Something l=
ike this:</div>
<div><br></div><div>LIBSSH2_CHANNEL *channelKeepAlive =3D createChannel(ses=
sion, sock);</div><div>while (1) {</div><div>=A0=A0 =A0char buffer[1024];=
=A0</div><div>=A0 =A0 libssh2_keepalive_send(session, &amp;seconds_to_next)=
;</div><div>
=A0 =A0 libssh2_channel_read_ex(channelKeepAlive, 0, buffer, sizeof(buffer)=
);</div><div>=A0 =A0 ... //do other tasks</div><div>}</div><div><br></div><=
div>I&#39;d like to understand if a patch that makes keepalive act as a con=
nection loss detector would be interesting for this community, as a part of=
 the library. If yes - what is the preferred API for dedicated channel open=
/close?=A0</div>
<div><br></div><div>Please note that all said above was tested only in non-=
blocking socket conditions, I guess something might be different for a bloc=
king scenario.</div><div><br></div><div>Thanks,</div><div>Anton</div><div>
<br></div>

--f46d04428210f2195304cbbee45c--

--===============2138750457==
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

--===============2138750457==--

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 10:01:52 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B81SIR023880;
	Thu, 11 Oct 2012 10:01:46 +0200
Received: from smtpbg215.qq.com (smtpbg215.qq.com [112.90.139.244])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B81L0d023831
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 10:01:23 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail90t1349942447t2869908
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Date: Thu, 11 Oct 2012 16:00:47 +0800
X-Priority: 3
Message-ID: <tencent_597128DB36B7CDF75702AE05@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 2657145478
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1345375520=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

--===============1345375520==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_50767CAF_085AB040_06C103D2"
Content-Transfer-Encoding: 8Bit

This is a multi-part message in MIME format.

------=_NextPart_50767CAF_085AB040_06C103D2
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGkgcGV0ZXI6DQogVGhhbnMgZm9yIHlvdXIgcmVwbGF5aW5nLg0KIFllYWgsbWF5YmUgaXQg
YmUgbm90IHRoZSBpc3N1ZS4NCiBJIHVzaW5nIG9wZW5zc2wtMC45LjhwLEkgZ290IHRoZSBm
b2xsb3dpbmcgdGV4dDoNCiAgDQogfi9saWJzc2gyLTEuNC4yL2V4YW1wbGUjIC4vc2NwIDEw
LjEyOS4xMzkuMTQwIG1xcSBtcXEyMDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8N
CltsaWJzc2gyXSAwLjczNTY1OCBTb2NrZXQ6IFNlbnQgMjMvMjMgYnl0ZXMgYXQgMHgyYWFm
NGIzMjYzN2QrMA0KW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJyb3IgcmVjdmluZyAx
IGJ5dGVzOiAxMQ0KW2xpYnNzaDJdIDAuNzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZh
aWxlZCBnZXR0aW5nIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM2NTg5IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzY2MzAgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNjY1OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM2Njg2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyDQpbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN
CltsaWJzc2gyXSAwLjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xp
YnNzaDJdIDAuNzM2NzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3No
Ml0gMC43MzY3ODQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw
LjczNjk2NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM3
MDAxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzcwMjYg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNzA4NSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM3MTE2IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM4NzU3IFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXINCltsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cg0KW2xpYnNzaDJdIDAuNzM4ODMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpb
bGlic3NoMl0gMC43Mzg4NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz
c2gyXSAwLjczODg4MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJd
IDAuNzM4OTA0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43
Mzg5MjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczODk1
MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM4OTc1IFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkwMDYgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5MDU1IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkwNzkgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTExNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5MTM5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyDQpbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN
CltsaWJzc2gyXSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xp
YnNzaDJdIDAuNzM5MjEyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3No
Ml0gMC43MzkyMzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw
LjczOTI2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5
Mjk4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkzMjUg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTM1MCBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5Mzc0IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5NDUxIFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXINCltsaWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cg0KW2xpYnNzaDJdIDAuNzM5NTIzIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpb
bGlic3NoMl0gMC43Mzk1NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz
c2gyXSAwLjczOTU3MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJd
IDAuNzM5NTk2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43
Mzk2MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTY0
NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5ODMzIFNv
Y2tldDogU2VudCA2NDgvNjQ4IGJ5dGVzIGF0IDB4NTA5OTU4DQpbbGlic3NoMl0gMC43Mzk4
NzQgU29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJz
c2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1OA0K
W2xpYnNzaDJdIDAuNzQwMjI1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNo
YW5nZSBlbmNyeXB0aW9uIGtleXMNCltsaWJzc2gyXSAwLjgwNjU5NyBTb2NrZXQ6IFJlY3Zl
ZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gyXSAwLjgwODU0MSBT
b2NrZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5NTgNCltsaWJzc2gyXSAwLjgwODU4
MCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBr
ZXlzDQpbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMg
dG8gMHg1MDU5MTgrMA0KW2xpYnNzaDJdIDAuODA4ODU0IFNvY2tldDogU2VudCA1Mi81MiBi
eXRlcyBhdCAweDUwOTk1OA0KW2xpYnNzaDJdIDAuODA5MDk4IFNvY2tldDogUmVjdmVkIDg4
LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCkZpbmdlcnByaW50OiA4RSBGRiA5RiBBRCA1
OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4MCA1NiA3QiAzQSBERiA2NSBGRCBEMiANCltsaWJz
c2gyXSAwLjgwOTYzNiBTb2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1MDk5NTgNClts
aWJzc2gyXSAwLjgwOTY2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0
aW5nDQpbbGlic3NoMl0gMC44MTA5MTkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4NCBieXRl
cyB0byAweDUwNTkxOCswDQpbbGlic3NoMl0gMC44MTEwMTUgU0NQOiBPcGVuaW5nIGNoYW5u
ZWwgZm9yIFNDUCByZWNlaXZlDQpbbGlic3NoMl0gMC44MTEwNDQgQ29ubjogQWxsb2NhdGVk
IG5ldyBjaGFubmVsIElEIzANCltsaWJzc2gyXSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENo
YW5uZWwgLSB3aW4gMjYyMTQ0IHBhY2sgMzI3NjgNCltsaWJzc2gyXSAwLjgxMTExNiBTb2Nr
ZXQ6IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1MDk5NTgNCltsaWJzc2gyXSAwLjgxMTE0NyBG
YWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jaw0KW2xpYnNzaDJdIDAuODExMTc3IEZh
aWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNClts
aWJzc2gyXSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUw
NTkxOCswDQpbbGlic3NoMl0gMC44MTE0MDggQ29ubjogQ29ubmVjdGlvbiBFc3RhYmxpc2hl
ZCAtIElEOiAwLzAgd2luOiAxMDAwMDAvMjYyMTQ0IHBhY2s6IDMyNzY4LzMyNzY4DQpbbGli
c3NoMl0gMC44MTE0NDAgQ29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVs
IDAvMCwgbWVzc2FnZT1zY3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0K
W2xpYnNzaDJdIDAuODExNDg5IFNvY2tldDogU2VudCAxNDgvMTQ4IGJ5dGVzIGF0IDB4NTA5
OTU4DQpbbGlic3NoMl0gMC44MTE1MjEgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxv
Y2sgcmVxdWVzdGluZyBTQ1Agc3RhcnR1cA0KW2xpYnNzaDJdIDAuODEyNDYxIFNvY2tldDog
UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gyXSAwLjgxMjUx
NSBTQ1A6IFNlbmRpbmcgaW5pdGlhbCB3YWtldXANCltsaWJzc2gyXSAwLjgxMjU0OSBDb25u
OiBXcml0aW5nIDEgYnl0ZXMgb24gY2hhbm5lbCAwLzAsIHN0cmVhbSAjMA0KW2xpYnNzaDJd
IDAuODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFt
X2lkPTANCltsaWJzc2gyXSAwLjgxMjYxNiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQg
MHg1MDk5NTgNCltsaWJzc2gyXSAwLjgxMjY0NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50
cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQpbbGlic3NoMl0gMC44MTI2
NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sNCltsaWJzc2gyXSAwLjgxMjY5
NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVz
cG9uc2UNCltsaWJzc2gyXSAwLjgzMDg0MiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAx
IGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQpbbGlic3NoMl0gMC44MzA4OTEg
U29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gy
XSAwLjgzMDkzOCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEw
NzY0MzM5Mw0KW2xpYnNzaDJdIDAuODMwOTY4IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIHdvdWxk
IGJsb2NrDQpbbGlic3NoMl0gMC44MzA5OTMgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQg
YmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlDQpbbGlic3NoMl0gMC44NjczNTcgQ29u
bjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVh
bSAjMA0KW2xpYnNzaDJdIDAuODY3NDEyIFNvY2tldDogUmVjdmVkIDM2MC8xNjM4NCBieXRl
cyB0byAweDUwNTkxOCswDQpbbGlic3NoMl0gMC44Njc0NTggQ29ubjogOTIgYnl0ZXMgcGFj
a2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2NDMzOTMNCltsaWJzc2gyXSAwLjg2NzQ5OSBD
b25uOiBDaGFubmVsIDAgcmVjZWl2ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3ciAw
KQ0KW2xpYnNzaDJdIDAuODY3NTI4IENvbm46IEV4aXQgc3RhdHVzIDI1NSByZWNlaXZlZCBm
b3IgY2hhbm5lbCAwLzANCltsaWJzc2gyXSAwLjg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZl
ZCBmb3IgY2hhbm5lbCAwLzANCltsaWJzc2gyXSAwLjg2NzU5MyBDb25uOiBGcmVlaW5nIGNo
YW5uZWwgMC8wIHJlc291cmNlcw0KW2xpYnNzaDJdIDAuODY3NjE5IENvbm46IFNlbmRpbmcg
RU9GIG9uIGNoYW5uZWwgMC8wDQpbbGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2
LzM2IGJ5dGVzIGF0IDB4NTA5OTU4DQpbbGlic3NoMl0gMC44Njc2ODYgQ29ubjogQ2xvc2lu
ZyBjaGFubmVsIDAvMA0KW2xpYnNzaDJdIDAuODY3NzE5IFNvY2tldDogU2VudCAzNi8zNiBi
eXRlcyBhdCAweDUwOTk1OA0KW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84
NCBieXRlcyBhdCAweDUwOTk1OA0KYWxsIGRvbmUNCjwvOmluY2x1ZGV0YWlsPg0KIC0tLS0t
LS0tLS08LzppbmNsdWRldGFpbD4NCiBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUv
c2NwLmMgPC86aW5jbHVkZXRhaWw+DQogPC86aW5jbHVkZXRhaWw+IA0KIGxpYnNzaDJfdHJh
Y2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBMSUJTU0gyX1RSQUNFX1NPQ0tFVCB8
IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFDRV9FUlJPUiApOw0KICAgDQogbXkg
Z2NjIGlzOg0KIGdjYyAtdg0KVXNpbmcgYnVpbHQtaW4gc3BlY3MuDQpUYXJnZXQ6IHg4Nl82
NC1zdXNlLWxpbnV4DQpDb25maWd1cmVkIHdpdGg6IC4uL2NvbmZpZ3VyZSAtLWVuYWJsZS10
aHJlYWRzPXBvc2l4IC0tcHJlZml4PS91c3IgLS13aXRoLWxvY2FsLXByZWZpeD0vdXNyL2xv
Y2FsIC0taW5mb2Rpcj0vdXNyL3NoYXJlL2luZm8gLS1tYW5kaXI9L3Vzci9zaGFyZS9tYW4g
LS1saWJkaXI9L3Vzci9saWI2NCAtLWxpYmV4ZWNkaXI9L3Vzci9saWI2NCAtLWVuYWJsZS1s
YW5ndWFnZXM9YyxjKyssb2JqYyxmb3J0cmFuLG9iai1jKyssamF2YSxhZGEgLS1lbmFibGUt
Y2hlY2tpbmc9cmVsZWFzZSAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS91c3IvaW5jbHVkZS9j
KysvNC4xLjIgLS1lbmFibGUtc3NwIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdj
aiAtLXdpdGgtc2xpYmRpcj0vbGliNjQgLS13aXRoLXN5c3RlbS16bGliIC0tZW5hYmxlLXNo
YXJlZCAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgLS1lbmFibGUtbGlic3RkY3h4LWFsbG9jYXRv
cj1uZXcgLS1wcm9ncmFtLXN1ZmZpeD0gLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50
aW1lLWxpYnMgLS13aXRob3V0LXN5c3RlbS1saWJ1bndpbmQgLS13aXRoLWNwdT1nZW5lcmlj
IC0taG9zdD14ODZfNjQtc3VzZS1saW51eA0KVGhyZWFkIG1vZGVsOiBwb3NpeA0KZ2NjIHZl
cnNpb24gNC4xLjIgMjAwNzAxMTUgKHByZXJlbGVhc2UpIChTVVNFIExpbnV4KQ0KICANCiBJ
IHB1enpsZSBvdmVyIHRoaXMgbWFueSBkYXlzLg0KIHRoYW5rcyBmb3IgeW91ciBoZWxwLg0K
ICANCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0tLS0tLS0tLS0tLS0tLS0tDQog
IEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNlPjsNCiBEYXRlOiAgV2VkLCBP
Y3QgMTAsIDIwMTIgMTA6MDEgUE0NCiBUbzogICJsaWJzc2gyLWRldmVsIjxsaWJzc2gyLWRl
dmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBSZTogbGlic3NoMl9zY3BfcmVj
diBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQogDQoNCqPFo/aj5aPyIHdyb3Rl
Og0KPiBJIGZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0xLjUuMCBpcyB1bnN1aXRlZCB0byBs
aWJzc2gyDQoNCkkgdGhpbmsgdGhlIGlzc3VlIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdh
dGlvbi4NCg0KDQo+IFtsaWJzc2gyXSAwLjM4NjUzOCBTb2NrZXQ6IFJlY3ZlZCAxMDQwLzE2
Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzANCj4gW2xpYnNzaDJdIDAuMzkwNDk2IFNvY2tldDog
U2VudCAxNi8xNiBieXRlcyBhdCAweDUwNmM3OA0KPiBbbGlic3NoMl0gMC4zOTA1MzkgRmFp
bHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0K
PiBbbGlic3NoMl0gMC4zOTA3MzYgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMgdG8g
MHg1MDJjMzgrMA0KDQpUaGUgYWJvdmUgZG9lcyBub3QgaW5kaWNhdGUgYW4gZXJyb3IuIC0z
NyBtZWFucyB0aGF0IHNvbWUNCmNvbW11bmljYXRpb24gaGFzIG5vdCB5ZXQgY29tcGxldGVk
LCBzbyB0aGUgY2FsbCB0byBsaWJzc2gyDQpzaG91bGQgYmUgYXR0ZW1wdGVkIGFnYWluLg0K
DQp+L3NyYy9saWJzc2gyICQgZ2l0IGdyZXAgLS0gLTM3fGNhdA0KaW5jbHVkZS9saWJzc2gy
Lmg6I2RlZmluZSBMSUJTU0gyX0VSUk9SX0VBR0FJTiAgICAgICAgICAgICAgICAgICAgLTM3
DQoNCg0KUGxlYXNlIHRyeSB0byB1c2Ugc29tZSBvZiB0aGUgZXhhbXBsZSBwcm9ncmFtcyBp
bmNsdWRlZCB3aXRoIGxpYnNzaDIuDQpUaGV5IHNob3VsZCB3b3JrIGp1c3QgZmluZS4gSWYg
dGhleSBkbyBub3Qgd29yayB0aGVuIGxldCdzIGZpbmQgdGhlDQpwcm9ibGVtLg0KDQpsaWJn
Y3J5cHQgaGFzIG9uZSBrbm93biBsaW1pdGF0aW9uLiBsaWJzc2gyIGNhbiBub3QgdXNlDQpw
YXNzcGhyYXNlLXByb3RlY3RlZCBwcml2YXRlIFNTSCBrZXlzIGZvciBhdXRoZW50aWNhdGlv
biwgaWYgYnVpbHQNCndpdGggbGliZ2NyeXB0LiBVc2luZyBzdWNoIGtleXMgaXMgb25seSBw
b3NzaWJsZSB3aGVuIGJ1aWx0IHdpdGgNCk9wZW5TU0wuIEV2ZXJ5dGhpbmcgZWxzZSBzaG91
bGQgd29yay4NCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29vbC5oYXh4LnNlL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVsDQogDQo8LzppbmNsdWRldGFp
bD4=

------=_NextPart_50767CAF_085AB040_06C103D2
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGkgcGV0ZXI6PC9ESVY+DQo8RElWPlRoYW5zIGZvciB5
b3VyIHJlcGxheWluZy48L0RJVj4NCjxESVY+WWVhaCxtYXliZSBpdCZuYnNwO2JlIG5vdCB0
aGUgaXNzdWUuPC9ESVY+DQo8RElWPkkgdXNpbmcgb3BlbnNzbC0wLjkuOHAsSSBnb3QgdGhl
IDxTUEFOIGNsYXNzPWtleXdvcmQ+Zm9sbG93aW5nIHRleHQ8L1NQQU4+OjwvRElWPg0KPERJ
Vj48L0ZPTlQ+PGluY2x1ZGV0YWlsPjwvaW5jbHVkZXRhaWw+Jm5ic3A7PC9ESVY+DQo8RElW
Pn4vbGlic3NoMi0xLjQuMi9leGFtcGxlIyAuL3NjcCAxMC4xMjkuMTM5LjE0MCBtcXEgbXFx
MjAwNSAvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvPEJSPltsaWJzc2gyXSAwLjczNTY1
OCBTb2NrZXQ6IFNlbnQgMjMvMjMgYnl0ZXMgYXQgMHgyYWFmNGIzMjYzN2QrMDxCUj5bbGli
c3NoMl0gMC43MzU3NjAgU29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExPEJSPlts
aWJzc2gyXSAwLjczNTc5MiBGYWlsdXJlIEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBi
YW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM2NTg5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyPEJSPltsaWJzc2gyXSAwLjczNjYzMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj5bbGlic3NoMl0gMC43MzY2NTkgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8
QlI+W2xpYnNzaDJdIDAuNzM2Njg2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJS
PltsaWJzc2gyXSAwLjczNjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5b
bGlic3NoMl0gMC43MzY3MzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xp
YnNzaDJdIDAuNzM2NzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJz
c2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3No
Ml0gMC43MzY5NjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJd
IDAuNzM3MDAxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAw
LjczNzAyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43
MzcwODUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM3
MTE2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczNzE0
MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43MzczMTQg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4NzU3IFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODc4MyBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg4MDcgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4ODMyIFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODg1NiBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg4ODAgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4OTA0IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODkyNyBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg5NTEgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4OTc1IFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj5bbGlic3NoMl0gMC43MzkwMzEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5MDU1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyPEJSPltsaWJzc2gyXSAwLjczOTA3OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj5bbGlic3NoMl0gMC43MzkxMTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8
QlI+W2xpYnNzaDJdIDAuNzM5MTM5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJS
PltsaWJzc2gyXSAwLjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5b
bGlic3NoMl0gMC43MzkxODggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xp
YnNzaDJdIDAuNzM5MjEyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJz
c2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3No
Ml0gMC43MzkyNjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJd
IDAuNzM5Mjk4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAw
LjczOTMyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43
MzkzNTAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5
Mzc0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTQw
MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk0MjUg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NDUxIFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTQ3NSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk0OTkgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NTIzIFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTU0NyBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk1NzEgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NTk2IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk2NDQgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5ODMzIFNvY2tldDogU2VudCA2NDgvNjQ4
IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPltsaWJzc2gyXSAwLjczOTg3NCBTb2NrZXQ6IFJlY3Zl
ZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC43NDAxOTAg
U29ja2V0OiBTZW50IDE0NC8xNDQgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJdIDAu
NzQwMjI1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0
aW9uIGtleXM8QlI+W2xpYnNzaDJdIDAuODA2NTk3IFNvY2tldDogUmVjdmVkIDEwNDAvMTYz
ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MDg1NDEgU29ja2V0OiBT
ZW50IDE2LzE2IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPltsaWJzc2gyXSAwLjgwODU4MCBGYWls
dXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJS
PltsaWJzc2gyXSAwLjgwODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8xNjM4NCBieXRlcyB0byAw
eDUwNTkxOCswPEJSPltsaWJzc2gyXSAwLjgwODg1NCBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0
ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJdIDAuODA5MDk4IFNvY2tldDogUmVjdmVkIDg4
LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+RmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFE
IDU5IEJCIDI4IDBEIENFIEJEIDk2IDFDIDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj5b
bGlic3NoMl0gMC44MDk2MzYgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4
PEJSPltsaWJzc2gyXSAwLjgwOTY2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9j
ayB3YWl0aW5nPEJSPltsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6IFJlY3ZlZCAxMDk2LzE2
Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+W2xpYnNzaDJdIDAuODExMDE1IFNDUDogT3Bl
bmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2ZTxCUj5bbGlic3NoMl0gMC44MTEwNDQgQ29u
bjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzA8QlI+W2xpYnNzaDJdIDAuODExMDY4IENv
bm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQgcGFjayAzMjc2ODxCUj5bbGlic3No
Ml0gMC44MTExMTYgU29ja2V0OiBTZW50IDY4LzY4IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPlts
aWJzc2gyXSAwLjgxMTE0NyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jazxCUj5b
bGlic3NoMl0gMC44MTExNzcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgc3Rh
cnRpbmcgdXAgY2hhbm5lbDxCUj5bbGlic3NoMl0gMC44MTEzNTIgU29ja2V0OiBSZWN2ZWQg
ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MTE0MDggQ29u
bjogQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCAtIElEOiAwLzAgd2luOiAxMDAwMDAvMjYyMTQ0
IHBhY2s6IDMyNzY4LzMyNzY4PEJSPltsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBzdGFydGlu
ZyByZXF1ZXN0KGV4ZWMpIG9uIGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYgJy91c3Iv
bG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8nPEJSPltsaWJzc2gyXSAwLjgxMTQ4OSBTb2NrZXQ6
IFNlbnQgMTQ4LzE0OCBieXRlcyBhdCAweDUwOTk1ODxCUj5bbGlic3NoMl0gMC44MTE1MjEg
RmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgcmVxdWVzdGluZyBTQ1Agc3RhcnR1
cDxCUj5bbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBSZWN2ZWQgNzIvMTYzODQgYnl0ZXMg
dG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MTI1MTUgU0NQOiBTZW5kaW5nIGluaXRp
YWwgd2FrZXVwPEJSPltsaWJzc2gyXSAwLjgxMjU0OSBDb25uOiBXcml0aW5nIDEgYnl0ZXMg
b24gY2hhbm5lbCAwLzAsIHN0cmVhbSAjMDxCUj5bbGlic3NoMl0gMC44MTI1NzYgQ29ubjog
U2VuZGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9MDxCUj5bbGlic3No
Ml0gMC44MTI2MTYgU29ja2V0OiBTZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4PEJSPlts
aWJzc2gyXSAwLjgxMjY0NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy
b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwPEJSPltsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJl
IEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj5bbGlic3NoMl0gMC44MTI2OTUgRmFpbHVy
ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlPEJS
PltsaWJzc2gyXSAwLjgzMDg0MiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVz
IGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwPEJSPltsaWJzc2gyXSAwLjgzMDg5MSBTb2Nr
ZXQ6IFJlY3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0g
MC44MzA5MzggQ29ubjogMzEgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2
NDMzOTM8QlI+W2xpYnNzaDJdIDAuODMwOTY4IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIHdvdWxk
IGJsb2NrPEJSPltsaWJzc2gyXSAwLjgzMDk5MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3Vs
ZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+W2xpYnNzaDJdIDAuODY3MzU3
IENvbm46IGNoYW5uZWxfcmVhZCgpIHdhbnRzIDEgYnl0ZXMgZnJvbSBjaGFubmVsIDAvMCBz
dHJlYW0gIzA8QlI+W2xpYnNzaDJdIDAuODY3NDEyIFNvY2tldDogUmVjdmVkIDM2MC8xNjM4
NCBieXRlcyB0byAweDUwNTkxOCswPEJSPltsaWJzc2gyXSAwLjg2NzQ1OCBDb25uOiA5MiBi
eXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj5bbGlic3NoMl0g
MC44Njc0OTkgQ29ubjogQ2hhbm5lbCAwIHJlY2VpdmVkIHJlcXVlc3QgdHlwZSBleGl0LXN0
YXR1cyAod3IgMCk8QlI+W2xpYnNzaDJdIDAuODY3NTI4IENvbm46IEV4aXQgc3RhdHVzIDI1
NSByZWNlaXZlZCBmb3IgY2hhbm5lbCAwLzA8QlI+W2xpYnNzaDJdIDAuODY3NTYyIENvbm46
IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMDxCUj5bbGlic3NoMl0gMC44Njc1OTMg
Q29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXM8QlI+W2xpYnNzaDJdIDAuODY3
NjE5IENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wPEJSPltsaWJzc2gyXSAwLjg2
NzY1NyBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJd
IDAuODY3Njg2IENvbm46IENsb3NpbmcgY2hhbm5lbCAwLzA8QlI+W2xpYnNzaDJdIDAuODY3
NzE5IFNvY2tldDogU2VudCAzNi8zNiBieXRlcyBhdCAweDUwOTk1ODxCUj5bbGlic3NoMl0g
MC44Njc3NjEgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPmFsbCBk
b25lPEJSPjwvOmluY2x1ZGV0YWlsPjwvRElWPg0KPERJVj4tLS0tLS0tLS0tPC86aW5jbHVk
ZXRhaWw+PC9ESVY+DQo8RElWPkkganVzdCBhZGQgb25lIGNvZGUgaW4gZXhhbXBsZS9zY3Au
YyA8LzppbmNsdWRldGFpbD48L0RJVj4NCjxESVY+PC86aW5jbHVkZXRhaWw+Jm5ic3A7PC9E
SVY+DQo8RElWPmxpYnNzaDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBM
SUJTU0gyX1RSQUNFX1NPQ0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFD
RV9FUlJPUiApOzwvRElWPg0KPERJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPm15IGdj
YyBpczo8L0RJVj4NCjxESVY+Z2NjIC12PEJSPlVzaW5nIGJ1aWx0LWluIHNwZWNzLjxCUj5U
YXJnZXQ6IHg4Nl82NC1zdXNlLWxpbnV4PEJSPkNvbmZpZ3VyZWQgd2l0aDogLi4vY29uZmln
dXJlIC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1wcmVmaXg9L3VzciAtLXdpdGgtbG9jYWwt
cHJlZml4PS91c3IvbG9jYWwgLS1pbmZvZGlyPS91c3Ivc2hhcmUvaW5mbyAtLW1hbmRpcj0v
dXNyL3NoYXJlL21hbiAtLWxpYmRpcj0vdXNyL2xpYjY0IC0tbGliZXhlY2Rpcj0vdXNyL2xp
YjY0IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxvYmpjLGZvcnRyYW4sb2JqLWMrKyxqYXZh
LGFkYSAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9
L3Vzci9pbmNsdWRlL2MrKy80LjEuMiAtLWVuYWJsZS1zc3AgLS1kaXNhYmxlLWxpYnNzcCAt
LWRpc2FibGUtbGliZ2NqIC0td2l0aC1zbGliZGlyPS9saWI2NCAtLXdpdGgtc3lzdGVtLXps
aWIgLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCAtLWVuYWJsZS1saWJz
dGRjeHgtYWxsb2NhdG9yPW5ldyAtLXByb2dyYW0tc3VmZml4PSAtLWVuYWJsZS12ZXJzaW9u
LXNwZWNpZmljLXJ1bnRpbWUtbGlicyAtLXdpdGhvdXQtc3lzdGVtLWxpYnVud2luZCAtLXdp
dGgtY3B1PWdlbmVyaWMgLS1ob3N0PXg4Nl82NC1zdXNlLWxpbnV4PEJSPlRocmVhZCBtb2Rl
bDogcG9zaXg8QlI+Z2NjIHZlcnNpb24gNC4xLjIgMjAwNzAxMTUgKHByZXJlbGVhc2UpIChT
VVNFIExpbnV4KTwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxESVY+SSBwdXp6bGUgb3Zl
ciB0aGlzIG1hbnkgZGF5cy48L0RJVj4NCjxESVY+dGhhbmtzIGZvciB5b3VyIGhlbHAuPC9E
SVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDJw
eDsgUEFERElORy1MRUZUOiAwcHg7IFBBRERJTkctUklHSFQ6IDBweDsgRk9OVC1GQU1JTFk6
IEFyaWFsIE5hcnJvdzsgRk9OVC1TSVpFOiAxMnB4OyBQQURESU5HLVRPUDogMnB4Ij4tLS0t
LS0tLS0tLS0tLS0tLS0mbmJzcDtPcmlnaW5hbCZuYnNwOy0tLS0tLS0tLS0tLS0tLS0tLTwv
RElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDhweDsgUEFERElORy1MRUZUOiA4
cHg7IFBBRERJTkctUklHSFQ6IDhweDsgQkFDS0dST1VORDogI2VmZWZlZjsgRk9OVC1TSVpF
OiAxMnB4OyBQQURESU5HLVRPUDogOHB4Ij4NCjxESVY+PEI+RnJvbTogPC9CPiZuYnNwOyJQ
ZXRlciBTdHVnZSImbHQ7cGV0ZXJAc3R1Z2Uuc2UmZ3Q7OzwvRElWPg0KPERJVj48Qj5EYXRl
OiA8L0I+Jm5ic3A7V2VkLCBPY3QgMTAsIDIwMTIgMTA6MDEgUE08L0RJVj4NCjxESVY+PEI+
VG86IDwvQj4mbmJzcDsibGlic3NoMi1kZXZlbCImbHQ7bGlic3NoMi1kZXZlbEBjb29sLmhh
eHguc2UmZ3Q7OyA8V0JSPjwvRElWPg0KPERJVj48L0RJVj4NCjxESVY+PEI+U3ViamVjdDog
PC9CPiZuYnNwO1JlOiBsaWJzc2gyX3NjcF9yZWN2IGlzIG5vdCBwb3B1bGF0aW5nIHN0cnVj
dCBzdGF0PC9ESVY+PC9ESVY+DQo8RElWPjxCUj48L0RJVj6jxaP2o+Wj8iB3cm90ZTo8QlI+
Jmd0OyBJIGZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0xLjUuMCBpcyB1bnN1aXRlZCB0byBs
aWJzc2gyPEJSPjxCUj5JIHRoaW5rIHRoZSBpc3N1ZSByZXF1aXJlcyBmdXJ0aGVyIGludmVz
dGlnYXRpb24uPEJSPjxCUj48QlI+Jmd0OyBbbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBS
ZWN2ZWQgMTA0MC8xNjM4NCBieXRlcyB0byAweDUwMmMzOCswPEJSPiZndDsgW2xpYnNzaDJd
IDAuMzkwNDk2IFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwNmM3ODxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjM5MDUzOSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhj
aGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuMzkwNzM2IFNvY2tl
dDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzA8QlI+PEJSPlRoZSBhYm92
ZSBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4gLTM3IG1lYW5zIHRoYXQgc29tZTxCUj5j
b21tdW5pY2F0aW9uIGhhcyBub3QgeWV0IGNvbXBsZXRlZCwgc28gdGhlIGNhbGwgdG8gbGli
c3NoMjxCUj5zaG91bGQgYmUgYXR0ZW1wdGVkIGFnYWluLjxCUj48QlI+fi9zcmMvbGlic3No
MiAkIGdpdCBncmVwIC0tIC0zN3xjYXQ8QlI+aW5jbHVkZS9saWJzc2gyLmg6I2RlZmluZSBM
SUJTU0gyX0VSUk9SX0VBR0FJTiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAtMzc8QlI+PEJSPjxCUj5QbGVhc2UgdHJ5IHRv
IHVzZSBzb21lIG9mIHRoZSBleGFtcGxlIHByb2dyYW1zIGluY2x1ZGVkIHdpdGggbGlic3No
Mi48QlI+VGhleSBzaG91bGQgd29yayBqdXN0IGZpbmUuIElmIHRoZXkgZG8gbm90IHdvcmsg
dGhlbiBsZXQncyBmaW5kIHRoZTxCUj5wcm9ibGVtLjxCUj48QlI+bGliZ2NyeXB0IGhhcyBv
bmUga25vd24gbGltaXRhdGlvbi4gbGlic3NoMiBjYW4gbm90IHVzZTxCUj5wYXNzcGhyYXNl
LXByb3RlY3RlZCBwcml2YXRlIFNTSCBrZXlzIGZvciBhdXRoZW50aWNhdGlvbiwgaWYgYnVp
bHQ8QlI+d2l0aCBsaWJnY3J5cHQuIFVzaW5nIHN1Y2gga2V5cyBpcyBvbmx5IHBvc3NpYmxl
IHdoZW4gYnVpbHQgd2l0aDxCUj5PcGVuU1NMLiBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIHdv
cmsuPEJSPjxCUj48QlI+Ly9QZXRlcjxCUj5fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXzxCUj5saWJzc2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHgu
c2UvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2xpYnNzaDItZGV2ZWw8QlI+DQo8RElWPjwv
RElWPjwvOmluY2x1ZGV0YWlsPjwvRElWPg==

------=_NextPart_50767CAF_085AB040_06C103D2--


--===============1345375520==
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

--===============1345375520==--

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 10:27:53 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B8RkgY006975;
	Thu, 11 Oct 2012 10:27:52 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B8Rjb7006971
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 10:27:45 +0200
Received: (qmail 9604 invoked by uid 501); 11 Oct 2012 08:27:45 -0000
Message-ID: <20121011082745.9603.qmail@stuge.se>
Date: Thu, 11 Oct 2012 10:27:45 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_scp_recv is not populating struct stat
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <tencent_597128DB36B7CDF75702AE05@qq.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <tencent_597128DB36B7CDF75702AE05@qq.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9B8RkgY006975

ï¼¥ï½–ï½…ï½’ wrote:
>  I using openssl-0.9.8p,I got the following text:
>   
>  ~/libssh2-1.4.2/example# ./scp 10.129.139.140 mqq mqq2005 /usr/local/app/everpan/hello
> [libssh2] 0.735658 Socket: Sent 23/23 bytes at 0x2aaf4b32637d+0
> [libssh2] 0.735760 Socket: Error recving 1 bytes: 11
> [libssh2] 0.735792 Failure Event: -37 - Failed getting banner
> [libssh2] 0.736589 Socket: Recved 1 bytes banner
> [libssh2] 0.736630 Socket: Recved 1 bytes banner
> [libssh2] 0.736659 Socket: Recved 1 bytes banner
> [libssh2] 0.736686 Socket: Recved 1 bytes banner
> [libssh2] 0.736711 Socket: Recved 1 bytes banner
> [libssh2] 0.736736 Socket: Recved 1 bytes banner
> [libssh2] 0.736760 Socket: Recved 1 bytes banner
> [libssh2] 0.736784 Socket: Recved 1 bytes banner
> [libssh2] 0.736967 Socket: Recved 1 bytes banner
> [libssh2] 0.737001 Socket: Recved 1 bytes banner
> [libssh2] 0.737026 Socket: Recved 1 bytes banner
> [libssh2] 0.737085 Socket: Recved 1 bytes banner
> [libssh2] 0.737116 Socket: Recved 1 bytes banner
> [libssh2] 0.737141 Socket: Recved 1 bytes banner
> [libssh2] 0.737314 Socket: Recved 1 bytes banner
> [libssh2] 0.738757 Socket: Recved 1 bytes banner
> [libssh2] 0.738783 Socket: Recved 1 bytes banner
> [libssh2] 0.738807 Socket: Recved 1 bytes banner
> [libssh2] 0.738832 Socket: Recved 1 bytes banner
> [libssh2] 0.738856 Socket: Recved 1 bytes banner
> [libssh2] 0.738880 Socket: Recved 1 bytes banner
> [libssh2] 0.738904 Socket: Recved 1 bytes banner
> [libssh2] 0.738927 Socket: Recved 1 bytes banner
> [libssh2] 0.738951 Socket: Recved 1 bytes banner
> [libssh2] 0.738975 Socket: Recved 1 bytes banner
> [libssh2] 0.739006 Socket: Recved 1 bytes banner
> [libssh2] 0.739031 Socket: Recved 1 bytes banner
> [libssh2] 0.739055 Socket: Recved 1 bytes banner
> [libssh2] 0.739079 Socket: Recved 1 bytes banner
> [libssh2] 0.739115 Socket: Recved 1 bytes banner
> [libssh2] 0.739139 Socket: Recved 1 bytes banner
> [libssh2] 0.739164 Socket: Recved 1 bytes banner
> [libssh2] 0.739188 Socket: Recved 1 bytes banner
> [libssh2] 0.739212 Socket: Recved 1 bytes banner
> [libssh2] 0.739236 Socket: Recved 1 bytes banner
> [libssh2] 0.739260 Socket: Recved 1 bytes banner
> [libssh2] 0.739298 Socket: Recved 1 bytes banner
> [libssh2] 0.739325 Socket: Recved 1 bytes banner
> [libssh2] 0.739350 Socket: Recved 1 bytes banner
> [libssh2] 0.739374 Socket: Recved 1 bytes banner
> [libssh2] 0.739401 Socket: Recved 1 bytes banner
> [libssh2] 0.739425 Socket: Recved 1 bytes banner
> [libssh2] 0.739451 Socket: Recved 1 bytes banner
> [libssh2] 0.739475 Socket: Recved 1 bytes banner
> [libssh2] 0.739499 Socket: Recved 1 bytes banner
> [libssh2] 0.739523 Socket: Recved 1 bytes banner
> [libssh2] 0.739547 Socket: Recved 1 bytes banner
> [libssh2] 0.739571 Socket: Recved 1 bytes banner
> [libssh2] 0.739596 Socket: Recved 1 bytes banner
> [libssh2] 0.739620 Socket: Recved 1 bytes banner
> [libssh2] 0.739644 Socket: Recved 1 bytes banner
> [libssh2] 0.739833 Socket: Sent 648/648 bytes at 0x509958
> [libssh2] 0.739874 Socket: Recved 488/16384 bytes to 0x505918+0
> [libssh2] 0.740190 Socket: Sent 144/144 bytes at 0x509958
> [libssh2] 0.740225 Failure Event: -37 - Unable to exchange encryption keys
> [libssh2] 0.806597 Socket: Recved 1040/16384 bytes to 0x505918+0
> [libssh2] 0.808541 Socket: Sent 16/16 bytes at 0x509958
> [libssh2] 0.808580 Failure Event: -37 - Unable to exchange encryption keys
> [libssh2] 0.808745 Socket: Recved 32/16384 bytes to 0x505918+0
> [libssh2] 0.808854 Socket: Sent 52/52 bytes at 0x509958
> [libssh2] 0.809098 Socket: Recved 88/16384 bytes to 0x505918+0
> Fingerprint: 8E FF 9F AD 59 BB 28 0D CE BD 96 1C 80 56 7B 3A DF 65 FD D2 
> [libssh2] 0.809636 Socket: Sent 84/84 bytes at 0x509958
> [libssh2] 0.809668 Failure Event: -37 - Would block waiting
> [libssh2] 0.810919 Socket: Recved 1096/16384 bytes to 0x505918+0
> [libssh2] 0.811015 SCP: Opening channel for SCP receive
> [libssh2] 0.811044 Conn: Allocated new channel ID#0
> [libssh2] 0.811068 Conn: Opening Channel - win 262144 pack 32768
> [libssh2] 0.811116 Socket: Sent 68/68 bytes at 0x509958
> [libssh2] 0.811147 Failure Event: -37 - Would block
> [libssh2] 0.811177 Failure Event: -37 - Would block starting up channel
> [libssh2] 0.811352 Socket: Recved 88/16384 bytes to 0x505918+0
> [libssh2] 0.811408 Conn: Connection Established - ID: 0/0 win: 100000/262144 pack: 32768/32768
> [libssh2] 0.811440 Conn: starting request(exec) on channel 0/0, message=scp -pf '/usr/local/app/everpan/hello'
> [libssh2] 0.811489 Socket: Sent 148/148 bytes at 0x509958
> [libssh2] 0.811521 Failure Event: -37 - Would block requesting SCP startup
> [libssh2] 0.812461 Socket: Recved 72/16384 bytes to 0x505918+0
> [libssh2] 0.812515 SCP: Sending initial wakeup
> [libssh2] 0.812549 Conn: Writing 1 bytes on channel 0/0, stream #0
> [libssh2] 0.812576 Conn: Sending 1 bytes on channel 0/0, stream_id=0
> [libssh2] 0.812616 Socket: Sent 52/52 bytes at 0x509958
> [libssh2] 0.812644 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0
> [libssh2] 0.812671 Failure Event: -37 - would block
> [libssh2] 0.812695 Failure Event: -37 - Would block waiting for SCP response
> [libssh2] 0.830842 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0
> [libssh2] 0.830891 Socket: Recved 120/16384 bytes to 0x505918+0
> [libssh2] 0.830938 Conn: 31 bytes packet_add() for 0/0/46931107643393
> [libssh2] 0.830968 Failure Event: -37 - would block
> [libssh2] 0.830993 Failure Event: -37 - Would block waiting for SCP response
> [libssh2] 0.867357 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0
> [libssh2] 0.867412 Socket: Recved 360/16384 bytes to 0x505918+0
> [libssh2] 0.867458 Conn: 92 bytes packet_add() for 0/0/46931107643393
> [libssh2] 0.867499 Conn: Channel 0 received request type exit-status (wr 0)
> [libssh2] 0.867528 Conn: Exit status 255 received for channel 0/0
> [libssh2] 0.867562 Conn: Close received for channel 0/0
> [libssh2] 0.867593 Conn: Freeing channel 0/0 resources
> [libssh2] 0.867619 Conn: Sending EOF on channel 0/0
> [libssh2] 0.867657 Socket: Sent 36/36 bytes at 0x509958
> [libssh2] 0.867686 Conn: Closing channel 0/0
> [libssh2] 0.867719 Socket: Sent 36/36 bytes at 0x509958
> [libssh2] 0.867761 Socket: Sent 84/84 bytes at 0x509958
> all done

The above output looks all right.


>  I just add one code in example/scp.c
>  libssh2_trace(session,LIBSSH2_TRACE_CONN | LIBSSH2_TRACE_SOCKET | LIBSSH2_TRACE_SCP | LIBSSH2_TRACE_ERROR );

Please change to:

libssh2_trace(session, ~0);

and then send complete output for when the example uses libgcrypt.

Thanks!


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

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 12:10:26 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAA7fA005434;
	Thu, 11 Oct 2012 12:10:23 +0200
Received: from smtpbg22.qq.com (SMTPBG22.QQ.COM [183.60.61.208])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAA1ju004742
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 12:10:02 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail90t1349950195t1296511
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----=_NextPart_50769AF3_094D7588_7C17F916"
Content-Transfer-Encoding: 8Bit
Date: Thu, 11 Oct 2012 18:09:55 +0800
X-Priority: 3
Message-ID: <tencent_536AF7D66B40BAE06148EFD8@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 1464751587
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

------=_NextPart_50769AF3_094D7588_7C17F916
Content-Type: multipart/alternative;
	boundary="----=_NextPart_50769AF3_094D7588_3F841146";

------=_NextPart_50769AF3_094D7588_3F841146
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGksUGV0ZXIsDQogICAgIFBsZWFzZSBjaGVjayB0aGUgYXR0YWNobWVudHMuDQogIA0KIFRo
YW5rcy4NCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0tLS0tLS0tLS0tLS0tLS0t
DQogIEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNlPjsNCiBEYXRlOiAgVGh1
LCBPY3QgMTEsIDIwMTIgMDQ6MjcgUE0NCiBUbzogICJsaWJzc2gyLWRldmVsIjxsaWJzc2gy
LWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBSZTogbGlic3NoMl9zY3Bf
cmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQogDQoNCqPFo/aj5aPyIHdy
b3RlOg0KPiAgSSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0aGUgZm9sbG93aW5nIHRl
eHQ6DQo+ICAgDQo+ICB+L2xpYnNzaDItMS40LjIvZXhhbXBsZSMgLi9zY3AgMTAuMTI5LjEz
OS4xNDAgbXFxIG1xcTIwMDUgL3Vzci9sb2NhbC9hcHAvZXZlcnBhbi9oZWxsbw0KPiBbbGli
c3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVzIGF0IDB4MmFhZjRiMzI2
MzdkKzANCj4gW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJyb3IgcmVjdmluZyAxIGJ5
dGVzOiAxMQ0KPiBbbGlic3NoMl0gMC43MzU3OTIgRmFpbHVyZSBFdmVudDogLTM3IC0gRmFp
bGVkIGdldHRpbmcgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY2MzAgU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NjU5IFNvY2tldDogUmVjdmVkIDEg
Ynl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjY4NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NzM2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcg0KPiBbbGlic3NoMl0gMC43MzY3ODQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u
ZXINCj4gW2xpYnNzaDJdIDAuNzM2OTY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
DQo+IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0K
PiBbbGlic3NoMl0gMC43MzcwMjYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4g
W2xpYnNzaDJdIDAuNzM3MDg1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFts
aWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGli
c3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNz
aDJdIDAuNzM3MzE0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gy
XSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0g
MC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAu
NzM4ODA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjcz
ODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzg4
NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM4ODgw
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczODkwNCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzg5MjcgU29j
a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM4OTUxIFNvY2tl
dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczODk3NSBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwMDYgU29ja2V0OiBS
ZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MDMxIFNvY2tldDogUmVj
dmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTA1NSBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwNzkgU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTE1IFNvY2tldDogUmVjdmVkIDEg
Ynl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTg4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcg0KPiBbbGlic3NoMl0gMC43MzkyMzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u
ZXINCj4gW2xpYnNzaDJdIDAuNzM5MjYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
DQo+IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0K
PiBbbGlic3NoMl0gMC43MzkzMjUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4g
W2xpYnNzaDJdIDAuNzM5MzUwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFts
aWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGli
c3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNz
aDJdIDAuNzM5NDI1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gy
XSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0g
MC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAu
NzM5NDk5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjcz
OTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk1
NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NTcx
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTU5NiBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk2MjAgU29j
a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NjQ0IFNvY2tl
dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTgzMyBTb2NrZXQ6
IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC43Mzk4NzQg
U29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNz
aDJdIDAuNzQwMTkwIFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA5OTU4DQo+
IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhj
aGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQo+IFtsaWJzc2gyXSAwLjgwNjU5NyBTb2NrZXQ6IFJl
Y3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODA4
NTQxIFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0g
MC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5
cHRpb24ga2V5cw0KPiBbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0OiBSZWN2ZWQgMzIvMTYz
ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44MDg4NTQgU29ja2V0OiBT
ZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjgwOTA5OCBTb2Nr
ZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+IEZpbmdlcnByaW50
OiA4RSBGRiA5RiBBRCA1OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4MCA1NiA3QiAzQSBERiA2
NSBGRCBEMiANCj4gW2xpYnNzaDJdIDAuODA5NjM2IFNvY2tldDogU2VudCA4NC84NCBieXRl
cyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3
IC0gV291bGQgYmxvY2sgd2FpdGluZw0KPiBbbGlic3NoMl0gMC44MTA5MTkgU29ja2V0OiBS
ZWN2ZWQgMTA5Ni8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+IFtsaWJzc2gyXSAwLjgx
MTAxNSBTQ1A6IE9wZW5pbmcgY2hhbm5lbCBmb3IgU0NQIHJlY2VpdmUNCj4gW2xpYnNzaDJd
IDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMwDQo+IFtsaWJzc2gy
XSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENoYW5uZWwgLSB3aW4gMjYyMTQ0IHBhY2sgMzI3
NjgNCj4gW2xpYnNzaDJdIDAuODExMTE2IFNvY2tldDogU2VudCA2OC82OCBieXRlcyBhdCAw
eDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291
bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAuODExMTc3IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdv
dWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNCj4gW2xpYnNzaDJdIDAuODExMzUyIFNv
Y2tldDogUmVjdmVkIDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJd
IDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgLSBJRDogMC8wIHdpbjog
MTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2OA0KPiBbbGlic3NoMl0gMC44MTE0NDAg
Q29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVsIDAvMCwgbWVzc2FnZT1z
Y3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0KPiBbbGlic3NoMl0gMC44
MTE0ODkgU29ja2V0OiBTZW50IDE0OC8xNDggYnl0ZXMgYXQgMHg1MDk5NTgNCj4gW2xpYnNz
aDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rp
bmcgU0NQIHN0YXJ0dXANCj4gW2xpYnNzaDJdIDAuODEyNDYxIFNvY2tldDogUmVjdmVkIDcy
LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODEyNTE1IFNDUDog
U2VuZGluZyBpbml0aWFsIHdha2V1cA0KPiBbbGlic3NoMl0gMC44MTI1NDkgQ29ubjogV3Jp
dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzANCj4gW2xpYnNzaDJdIDAu
ODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lk
PTANCj4gW2xpYnNzaDJdIDAuODEyNjE2IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAw
eDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2Fu
dHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0KPiBbbGlic3NoMl0gMC44
MTI2NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAu
ODEyNjk1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHdhaXRpbmcgZm9yIFND
UCByZXNwb25zZQ0KPiBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkg
d2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0KPiBbbGlic3NoMl0g
MC44MzA4OTEgU29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAN
Cj4gW2xpYnNzaDJdIDAuODMwOTM4IENvbm46IDMxIGJ5dGVzIHBhY2tldF9hZGQoKSBmb3Ig
MC8wLzQ2OTMxMTA3NjQzMzkzDQo+IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWlsdXJlIEV2ZW50
OiAtMzcgLSB3b3VsZCBibG9jaw0KPiBbbGlic3NoMl0gMC44MzA5OTMgRmFpbHVyZSBFdmVu
dDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlDQo+IFtsaWJz
c2gyXSAwLjg2NzM1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZyb20g
Y2hhbm5lbCAwLzAgc3RyZWFtICMwDQo+IFtsaWJzc2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJl
Y3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44Njc0
NTggQ29ubjogOTIgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2NDMzOTMN
Cj4gW2xpYnNzaDJdIDAuODY3NDk5IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0
IHR5cGUgZXhpdC1zdGF0dXMgKHdyIDApDQo+IFtsaWJzc2gyXSAwLjg2NzUyOCBDb25uOiBF
eGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wDQo+IFtsaWJzc2gyXSAw
Ljg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZlZCBmb3IgY2hhbm5lbCAwLzANCj4gW2xpYnNz
aDJdIDAuODY3NTkzIENvbm46IEZyZWVpbmcgY2hhbm5lbCAwLzAgcmVzb3VyY2VzDQo+IFts
aWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMA0KPiBb
bGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA5OTU4
DQo+IFtsaWJzc2gyXSAwLjg2NzY4NiBDb25uOiBDbG9zaW5nIGNoYW5uZWwgMC8wDQo+IFts
aWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTgN
Cj4gW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84NCBieXRlcyBhdCAweDUw
OTk1OA0KPiBhbGwgZG9uZQ0KDQpUaGUgYWJvdmUgb3V0cHV0IGxvb2tzIGFsbCByaWdodC4N
Cg0KDQo+ICBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUvc2NwLmMNCj4gIGxpYnNz
aDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBMSUJTU0gyX1RSQUNFX1NP
Q0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFDRV9FUlJPUiApOw0KDQpQ
bGVhc2UgY2hhbmdlIHRvOg0KDQpsaWJzc2gyX3RyYWNlKHNlc3Npb24sIH4wKTsNCg0KYW5k
IHRoZW4gc2VuZCBjb21wbGV0ZSBvdXRwdXQgZm9yIHdoZW4gdGhlIGV4YW1wbGUgdXNlcyBs
aWJnY3J5cHQuDQoNClRoYW5rcyENCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29v
bC5oYXh4LnNlL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVs

------=_NextPart_50769AF3_094D7588_3F841146
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PERJVj48aW5jbHVkZXRhaWw+DQo8RElWPmhpLFBldGVyLDwvRElWPg0KPERJVj4mbmJzcDsm
bmJzcDsmbmJzcDsgUGxlYXNlIGNoZWNrIHRoZSBhdHRhY2htZW50cy48L0RJVj4NCjxESVY+
Jm5ic3A7PC9ESVY+DQo8RElWPlRoYW5rcy48L0RJVj4NCjxESVY+LS0tLS0tLS0tLS0tLS0t
LS0tJm5ic3A7T3JpZ2luYWwmbmJzcDstLS0tLS0tLS0tLS0tLS0tLS08L0RJVj4NCjxESVYg
c3R5bGU9IlBBRERJTkctQk9UVE9NOiA4cHg7IFBBRERJTkctTEVGVDogOHB4OyBQQURESU5H
LVJJR0hUOiA4cHg7IEJBQ0tHUk9VTkQ6ICNlZmVmZWY7IEZPTlQtU0laRTogMTJweDsgUEFE
RElORy1UT1A6IDhweCI+DQo8RElWPjxCPkZyb206IDwvQj4mbmJzcDsiUGV0ZXIgU3R1Z2Ui
Jmx0O3BldGVyQHN0dWdlLnNlJmd0Ozs8L0RJVj4NCjxESVY+PEI+RGF0ZTogPC9CPiZuYnNw
O1RodSwgT2N0IDExLCAyMDEyIDA0OjI3IFBNPC9ESVY+DQo8RElWPjxCPlRvOiA8L0I+Jm5i
c3A7ImxpYnNzaDItZGV2ZWwiJmx0O2xpYnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlJmd0Ozsg
PFdCUj48L0RJVj4NCjxESVY+PC9ESVY+DQo8RElWPjxCPlN1YmplY3Q6IDwvQj4mbmJzcDtS
ZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdDwvRElW
PjwvRElWPg0KPERJVj48QlI+PC9ESVY+o8Wj9qPlo/Igd3JvdGU6PEJSPiZndDsmbmJzcDsg
SSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0aGUgZm9sbG93aW5nIHRleHQ6PEJSPiZn
dDsmbmJzcDsmbmJzcDsgPEJSPiZndDsmbmJzcDsgfi9saWJzc2gyLTEuNC4yL2V4YW1wbGUj
IC4vc2NwIDEwLjEyOS4xMzkuMTQwIG1xcSBtcXEyMDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJw
YW4vaGVsbG88QlI+Jmd0OyBbbGlic3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIz
IGJ5dGVzIGF0IDB4MmFhZjRiMzI2MzdkKzA8QlI+Jmd0OyBbbGlic3NoMl0gMC43MzU3NjAg
U29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExPEJSPiZndDsgW2xpYnNzaDJdIDAu
NzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZhaWxlZCBnZXR0aW5nIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjYzMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY1OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY4NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjk2NyBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzAwMSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzAyNiBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzA4
NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
NzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczNzE0MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjczODc4MyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg1NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg4MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkwNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkyNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODk1MSBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODk3NSBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTA1NSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTA3OSBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTEx
NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
OTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjczOTI2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTMyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM1MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ3NSBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTUyMyBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU0NyBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU3
MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
OTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczOTY0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1ODxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTg3NCBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0
ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNl
bnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDIy
NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBr
ZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuODA2NTk3IFNvY2tldDogUmVjdmVkIDEwNDAvMTYz
ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwODU0MSBTb2Nr
ZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44
MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRp
b24ga2V5czxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8x
NjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgW2xpYnNzaDJdIDAuODA4ODU0IFNv
Y2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJS
PiZndDsgRmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFEIDU5IEJCIDI4IDBEIENFIEJEIDk2IDFD
IDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwOTYzNiBT
b2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g
MC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZzxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6IFJlY3ZlZCAxMDk2LzE2Mzg0IGJ5dGVz
IHRvIDB4NTA1OTE4KzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTEwMTUgU0NQOiBPcGVuaW5n
IGNoYW5uZWwgZm9yIFNDUCByZWNlaXZlPEJSPiZndDsgW2xpYnNzaDJdIDAuODExMDQ0IENv
bm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMwPEJSPiZndDsgW2xpYnNzaDJdIDAuODEx
MDY4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQgcGFjayAzMjc2ODxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjgxMTExNiBTb2NrZXQ6IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1
MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBFdmVudDogLTM3IC0g
V291bGQgYmxvY2s8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTExNzcgRmFpbHVyZSBFdmVudDog
LTM3IC0gV291bGQgYmxvY2sgc3RhcnRpbmcgdXAgY2hhbm5lbDxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCsw
PEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNo
ZWQgLSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2ODxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBzdGFydGluZyByZXF1ZXN0KGV4ZWMpIG9u
IGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYgJy91c3IvbG9jYWwvYXBwL2V2ZXJwYW4v
aGVsbG8nPEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDg5IFNvY2tldDogU2VudCAxNDgvMTQ4
IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgW2xpYnNzaDJdIDAuODExNTIxIEZhaWx1cmUg
RXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3RpbmcgU0NQIHN0YXJ0dXA8QlI+Jmd0
OyBbbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBSZWN2ZWQgNzIvMTYzODQgYnl0ZXMgdG8g
MHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjUxNSBTQ1A6IFNlbmRpbmcgaW5p
dGlhbCB3YWtldXA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI1NDkgQ29ubjogV3JpdGluZyAx
IGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44
MTI1NzYgQ29ubjogU2VuZGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9
MDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjYxNiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMg
YXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hhbm5lbF9y
ZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY5NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBi
bG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0gMC44MzA4
NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8w
IHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDg5MSBTb2NrZXQ6IFJlY3ZlZCAx
MjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDkz
OCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBi
bG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk5MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBX
b3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0g
MC44NjczNTcgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5u
ZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJl
Y3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw
Ljg2NzQ1OCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0
MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ5OSBDb25uOiBDaGFubmVsIDAgcmVjZWl2
ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3ciAwKTxCUj4mZ3Q7IFtsaWJzc2gyXSAw
Ljg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8w
PEJSPiZndDsgW2xpYnNzaDJdIDAuODY3NTYyIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBj
aGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzU5MyBDb25uOiBGcmVlaW5nIGNo
YW5uZWwgMC8wIHJlc291cmNlczxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzYxOSBDb25uOiBT
ZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzY1NyBT
b2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g
MC44Njc2ODYgQ29ubjogQ2xvc2luZyBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw
Ljg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBb
bGlic3NoMl0gMC44Njc3NjEgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4
PEJSPiZndDsgYWxsIGRvbmU8QlI+PEJSPlRoZSBhYm92ZSBvdXRwdXQgbG9va3MgYWxsIHJp
Z2h0LjxCUj48QlI+PEJSPiZndDsmbmJzcDsgSSBqdXN0IGFkZCBvbmUgY29kZSBpbiBleGFt
cGxlL3NjcC5jPEJSPiZndDsmbmJzcDsgbGlic3NoMl90cmFjZShzZXNzaW9uLExJQlNTSDJf
VFJBQ0VfQ09OTiB8IExJQlNTSDJfVFJBQ0VfU09DS0VUIHwgTElCU1NIMl9UUkFDRV9TQ1Ag
fCBMSUJTU0gyX1RSQUNFX0VSUk9SICk7PEJSPjxCUj5QbGVhc2UgY2hhbmdlIHRvOjxCUj48
QlI+bGlic3NoMl90cmFjZShzZXNzaW9uLCB+MCk7PEJSPjxCUj5hbmQgdGhlbiBzZW5kIGNv
bXBsZXRlIG91dHB1dCBmb3Igd2hlbiB0aGUgZXhhbXBsZSB1c2VzIGxpYmdjcnlwdC48QlI+
PEJSPlRoYW5rcyE8QlI+PEJSPjxCUj4vL1BldGVyPEJSPl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fPEJSPmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nv
b2wuaGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vbGlic3NoMi1kZXZlbDxCUj4N
CjxESVY+PC9ESVY+PC9pbmNsdWRldGFpbD48L0RJVj4=

------=_NextPart_50769AF3_094D7588_3F841146--

------=_NextPart_50769AF3_094D7588_7C17F916
Content-Type: application/octet-stream;
	charset="gb18030";
	name="scp_libgcrypt.log"
Content-Disposition: attachment; filename="scp_libgcrypt.log"
Content-Transfer-Encoding: base64

W2xpYnNzaDJdIDAuOTgyMDU1IFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr
ZXQgNQpbbGlic3NoMl0gMC45ODIxMTUgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI
LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjk4MjEyNyBTb2NrZXQ6IFNlbnQgMjMv
MjMgYnl0ZXMgYXQgMHgyYWQ0NGEzZGVlNWQrMApbbGlic3NoMl0gMC45ODIxMzUgU29ja2V0
OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjk4MjEzOCBGYWlsdXJl
IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgyOTY3
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4Mjk3NyBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODI5ODIgU29ja2V0OiBS
ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgyOTg2IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4Mjk5MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODI5OTMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXIKW2xpYnNzaDJdIDAuOTgyOTk3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
CltsaWJzc2gyXSAwLjk4MzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli
c3NoMl0gMC45ODMwMDUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd
IDAuOTgzMDA5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4
MzAxMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwMTcg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDIxIFNvY2tl
dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzAyNCBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwMjggU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDMyIFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzAzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcgpbbGlic3NoMl0gMC45ODMwNDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK
W2xpYnNzaDJdIDAuOTgzMDQ1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz
c2gyXSAwLjk4MzA0OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g
MC45ODMwNTIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgz
MDU1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA1OCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwNjEgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDY0IFNvY2tldDogUmVj
dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA2NyBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwNzAgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDczIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyCltsaWJzc2gyXSAwLjk4MzA3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb
bGlic3NoMl0gMC45ODMwNzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz
aDJdIDAuOTgzMDgxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw
Ljk4MzA4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMw
ODcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDkwIFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA5MiBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwOTUgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDk4IFNvY2tldDogUmVjdmVkIDEg
Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMDQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u
ZXIKW2xpYnNzaDJdIDAuOTgzMTA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts
aWJzc2gyXSAwLjk4MzEwOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No
Ml0gMC45ODMxMTIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu
OTgzMTE1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEx
OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMjEgU29j
a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMTI0IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEyNyBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMjkgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMTMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyCltsaWJzc2gyXSAwLjk4MzEzNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cgpbbGlic3NoMl0gMC45ODMxMzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp
YnNzaDJdIDAuOTgzMTQxIFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu
Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjk4
MzM5NiBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm
ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt
c2hhMQpbbGlic3NoMl0gMC45ODM0MDIgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es
c3NoLWRzcwpbbGlic3NoMl0gMC45ODM0MDUgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx
MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs
eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv
dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC45ODM0MDgg
S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0
cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl
czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz
ZGVzLWNiYwpbbGlic3NoMl0gMC45ODM0MTEgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z
aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo
bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC45ODM0MTMgS2V5IEV4OiBT
ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05
NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g
MC45ODM0MTYgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuOTgzNDE4
IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjk4MzQyMSBLZXkgRXg6
IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjk4MzQyMyBLZXkgRXg6IFNlbnQgTEFOR19T
QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6
IDE0IDY2IDRBIDYwIEY1IDQ3IDlGIDExICAwNSA3OSA2MyA0OCA5QSBCRiA5QSA5RiA6IC5m
SmAuRy4uLnljSC4uLi4KMDAxMDogNUQgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1
IDJEIDY4IDY1IDZDIDZDIDogXS4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2
NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx
CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy
RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz
IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz
MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll
LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz
MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg
NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3
MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u
LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow
MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg
OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy
RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg
MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx
MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg
NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx
ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg
NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz
dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg
NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD
IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz
MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog
LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg
NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw
IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp
dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx
IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg
MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE
IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy
Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0
IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2
NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6
IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo
bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2
MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h
CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2
MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2
IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy
RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V
aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy
RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg
NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2
NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05
NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2
OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg
NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow
MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg
OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw
MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC45ODM1Nzcg
U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDY3ZDgKPT4gbGlic3NoMl90cmFu
c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0
IDY2IDRBICA2MCBGNSA0NyA5RiAxMSAwNSA3OSA2MyA6IC4uLi4uLmZKYC5HLi4ueWMKMDAx
MDogNDggOUEgQkYgOUEgOUYgNUQgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog
SC4uLi5dLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg
NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx
IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o
ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4
IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg
MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1
IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t
Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz
IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw
MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6
IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j
dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD
IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2
MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j
CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3
MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE
IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz
OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs
b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz
MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg
MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2
MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs
M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow
MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg
OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2
QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg
NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx
OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg
NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz
ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg
NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs
YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg
NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1
IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj
MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog
aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg
MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE
IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx
NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw
IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg
NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx
IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx
LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0
IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz
NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6
IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp
cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw
IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw
MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u
CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw
MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgQkEgNjAgNUIgMjQgM0MgNUQgMDYgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLi5gWyQ8XS4KW2xpYnNzaDJdIDAuOTgzNjgzIFRy
YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjk4
MzY4OSBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDI3OTgrMAo9PiBs
aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw
IDBDIDA2IDAyIDAwIDAwICAwMCAwMCAyNCBEMSAzRCAwQSBCNSBBMyA6IC4uLi4uLi4uLi4k
Lj0uLi4KMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgOUIgMUEgIDE3IEMwIDk4IDkxIDlEIEFD
IDUyIEJBIDogLi4uLi4uLi4uLi4uLi5SLgowMDIwOiBDQiA3NiBBNCBDNCAxNSAxQSAwMCAw
MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiAudi4uLi4uLi4uZGlmZmllCjAwMzA6IDJE
IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs
bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE
IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3
MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw
NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6
IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0
IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3
NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj
LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz
MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg
IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3
NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz
aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2
MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg
MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw
OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt
Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg
MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz
aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg
NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy
RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg
MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0
d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg
NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx
IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog
MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht
YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg
NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz
IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK
MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz
IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg
NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2
Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG
IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw
MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw
IDAwIDExIEI1IERDIDk1IDMxIDc5ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u
LjF5Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog
MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u
Li4KW2xpYnNzaDJdIDAuOTgzNzc2IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl
ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0
ZXMpCjAwMDA6IDE0IDlCIDFBIDE3IEMwIDk4IDkxIDlEICBBQyA1MiBCQSBDQiA3NiBBNCBD
NCAxNSA6IC4uLi4uLi4uLlIuLnYuLi4KMDAxMDogMUEgMDAgMDAgMDAgMUEgNjQgNjkgNjYg
IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogLi4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2
MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv
dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw
MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg
NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw
OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj
LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg
MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp
cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg
NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2
MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg
NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi
Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg
NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1
IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog
MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl
cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg
NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0
IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK
MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz
IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg
NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD
IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx
OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz
IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3
MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE
IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx
LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD
IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz
OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx
ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6
IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1
IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy
RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u
ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2
OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg
IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC45
ODM4NDggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb
bGlic3NoMl0gMC45ODM4NTIgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw
ZTogMjAKW2xpYnNzaDJdIDAuOTgzODYzIEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6
IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjk4Mzg2NiBLZXkgRXg6
IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC45ODM4Njkg
S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy
XSAwLjk4Mzg3MSBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j
YmMKW2xpYnNzaDJdIDAuOTgzODc0IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6
IGhtYWMtc2hhMQpbbGlic3NoMl0gMC45ODM4NzYgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND
IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjk4Mzg3OSBLZXkgRXg6IEFncmVlZCBv
biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC45ODM4ODEgS2V5IEV4OiBBZ3Jl
ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuOTgzODk1IEtleSBFeDog
SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy
XSAwLjk4NDU4MiBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry
YW5zcG9ydF93cml0ZSBwbGFpbiAoMTMzIGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MCAx
MyA3QSA5OCAgM0MgMTIgNUQgM0MgMkIgQUUgNjkgNzcgOiAuLi4uLi56LjwuXTwrLml3CjAw
MTA6IEE1IERCIEUyIDMxIEFBIDdEIDY4IEZDICA3MyBEQiA4NCAxOSAzMSAzRiBCMSA5MyA6
IC4uLjEufWgucy4uLjE/Li4KMDAyMDogN0YgMjYgODUgMjEgMDEgQTQgOTIgQUEgIDM4IEE5
IDVDIDZEIDMyIEZCIEREIEU1IDogLiYuIS4uLi44LlxtMi4uLgowMDMwOiAwMyA0NCAwOCBG
OCBCRCAzNiA3RiA3OSAgMkMgQzMgRTkgNjggOUQgMTggMjUgQjEgOiAuRC4uLjYueSwuLmgu
LiUuCjAwNDA6IEFFIEIzIDBFIEVBIDE1IEQxIDU0IDZBICBFMSBGOCAzMCBCNiBBRSBGOCBE
RCBBNiA6IC4uLi4uLlRqLi4wLi4uLi4KMDA1MDogM0MgMDAgMjAgNTEgNDIgQTMgMTggRkMg
IEVDIDI3IENEIDVEIEE4IDdBIDNEIDU0IDogPC4gUUIuLi4uJy5dLno9VAowMDYwOiAyMyA0
QSA4RiBENCA3NiBEMCAwMSAxQyAgODggOTQgQ0EgOTkgM0MgQTIgQjYgQ0UgOiAjSi4udi4u
Li4uLi48Li4uCjAwNzA6IDBGIDQ0IEFBIDgwIDQ3IEJGIEI3IDMzICBFMSAzOCA4QSAxNSBC
MiBGMyA4RCAyMyA6IC5ELi5HLi4zLjguLi4uLiMKMDA4MDogMDcgNjUgNTcgRkUgMzYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLmVXLjYKW2xpYnNzaDJdIDAuOTg0
Njg1IFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA2N2Q4Cj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTQ0IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCA4QyAw
NiAxRSAwMCAwMCAgMDAgODAgMTMgN0EgOTggM0MgMTIgNUQgOiAuLi4uLi4uLi4uLnouPC5d
CjAwMTA6IDNDIDJCIEFFIDY5IDc3IEE1IERCIEUyICAzMSBBQSA3RCA2OCBGQyA3MyBEQiA4
NCA6IDwrLml3Li4uMS59aC5zLi4KMDAyMDogMTkgMzEgM0YgQjEgOTMgN0YgMjYgODUgIDIx
IDAxIEE0IDkyIEFBIDM4IEE5IDVDIDogLjE/Li4uJi4hLi4uLjguXAowMDMwOiA2RCAzMiBG
QiBERCBFNSAwMyA0NCAwOCAgRjggQkQgMzYgN0YgNzkgMkMgQzMgRTkgOiBtMi4uLi5ELi4u
Ni55LC4uCjAwNDA6IDY4IDlEIDE4IDI1IEIxIEFFIEIzIDBFICBFQSAxNSBEMSA1NCA2QSBF
MSBGOCAzMCA6IGguLiUuLi4uLi4uVGouLjAKMDA1MDogQjYgQUUgRjggREQgQTYgM0MgMDAg
MjAgIDUxIDQyIEEzIDE4IEZDIEVDIDI3IENEIDogLi4uLi48LiBRQi4uLi4nLgowMDYwOiA1
RCBBOCA3QSAzRCA1NCAyMyA0QSA4RiAgRDQgNzYgRDAgMDEgMUMgODggOTQgQ0EgOiBdLno9
VCNKLi52Li4uLi4uCjAwNzA6IDk5IDNDIEEyIEI2IENFIDBGIDQ0IEFBICA4MCA0NyBCRiBC
NyAzMyBFMSAzOCA4QSA6IC48Li4uLkQuLkcuLjMuOC4KMDA4MDogMTUgQjIgRjMgOEQgMjMg
MDcgNjUgNTcgIEZFIDM2IEQ4IEYxIEExIEE3IEIwIDNFIDogLi4uLiMuZVcuNi4uLi4uPgpb
bGlic3NoMl0gMC45ODQ3MTcgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw
ZTogMzEKW2xpYnNzaDJdIDAuOTg0NzI0IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0
byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMKW2xpYnNzaDJdIDEuMDQ3OTc1IFNvY2tldDog
UmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDI3OTgrMAo9PiBsaWJzc2gyX3RyYW5z
cG9ydF9yZWFkKCkgcmF3ICgxMDQwIGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwNiAwMiAw
MCAwMCAgMDAgMDAgM0MgQTIgMjMgOTggQUUgOUUgOiAuLi4uLi4uLi4uPC4jLi4uCjAwMTA6
IDAwIDAwIDAzIEZDIDA1IDFGIDAwIDAwICAwMyAzMiAwMCAwMCAwMCAwNyA3MyA3MyA6IC4u
Li4uLi4uLjIuLi4uc3MKMDAyMDogNjggMkQgNjQgNzMgNzMgMDAgMDAgMDEgIDAxIDAwIERB
IDU2IDZEIDQ1IEUzIDM2IDogaC1kc3MuLi4uLi5WbUUuNgowMDMwOiAzOSBGNCBGNiBBMSA4
OSBGOSBEQiAxNyAgM0IgNzAgODMgRTEgRTQgMTggOEYgNTcgOiA5Li4uLi4uLjtwLi4uLi5X
CjAwNDA6IEE3IDNGIDhGIEJBIEU3IEE0IDcyIERCICBGQiAwNiBGRSA1NSA0MiBCNiBCNCA0
NiA6IC4/Li4uLnIuLi4uVUIuLkYKMDA1MDogMzcgN0UgQzggMkEgNjMgNzIgMDkgQzcgIEYy
IDJEIDg1IDgxIDZBIEVCIDFFIDhDIDogN34uKmNyLi4uLS4uai4uLgowMDYwOiBDOSA0RCA2
NCAyMCBGNiAzOCA1NyA5QyAgRDUgNDkgNEYgNzcgNzkgNjYgNkIgNjIgOiAuTWQgLjhXLi5J
T3d5ZmtiCjAwNzA6IDg1IDFCIDQxIDI1IEU4IDYxIEI2IEQ5ICBDRiAxNCAwRCBGQiBERCBG
QSA2MiAwNyA6IC4uQSUuYS4uLi4uLi4uYi4KMDA4MDogRkYgRUQgMkIgMkQgQjMgNzEgQUEg
MUEgIDBCIDE2IDdDIEY1IDY4IDE1IDM3IEMyIDogLi4rLS5xLi4uLnwuaC43LgowMDkwOiBD
QyA1MSBFNyA0RSA1OSA5MiA4MCBFRCAgODUgQjcgMjkgREQgQTIgNjQgNUYgQjcgOiAuUS5O
WS4uLi4uKS4uZF8uCjAwYTA6IDg5IDNCIDk2IDIyIDA1IDUzIDU3IDBGICA1NyBBQyA2NCA1
NCBERiAxMSA5NSA1OCA6IC47LiIuU1cuVy5kVC4uLlgKMDBiMDogNkIgNzUgNkIgQkUgRjUg
Q0IgMEUgQzAgIDk0IDAwIEE5IDNDIERCIDYzIEVGIEE2IDoga3VrLi4uLi4uLi48LmMuLgow
MGMwOiBDMSBEMyBDMSAyQyBFNyAyMCBFNCBFMCAgOEEgN0MgNDIgMzAgM0UgNEEgQTYgNzkg
OiAuLi4sLiAuLi58QjA+Si55CjAwZDA6IDFDIDQzIEE4IDk3IEQ2IDJBIDQxIDJEICAxRiBE
RSA1QSBGOSAxRCA2QyBBOCAwQiA6IC5DLi4uKkEtLi5aLi5sLi4KMDBlMDogNTYgNUIgQUIg
QkQgMUYgNTAgQ0UgNzQgIDQwIEFDIDlDIDk3IEE5IEM5IEIyIDUyIDogVlsuLi5QLnRALi4u
Li4uUgowMGYwOiA2QSAzOSAwRCBCOCA4MyAxNyA0OSA1OSAgQ0EgRUQgRkEgMUIgRTAgQjEg
QTAgNkEgOiBqOS4uLi5JWS4uLi4uLi5qCjAxMDA6IEU2IEJEIDMzIDhFIDlDIEM2IEMyIEQw
ICA4MCBBNSA2MiBEOCA1RCA0NiA3QSAxMyA6IC4uMy4uLi4uLi5iLl1Gei4KMDExMDogRDEg
M0YgNDggNzcgMjkgMTIgODEgNzcgIEM3IDAxIDdCIDZDIEUxIEI3IEFGIDU2IDogLj9Idyku
LncuLntsLi4uVgowMTIwOiBFQyA2RCBDMSBFMSBDRSA3NSBFQyBCMCAgN0YgNzcgMDAgMDAg
MDAgMTUgMDAgRjEgOiAubS4uLnUuLi53Li4uLi4uCjAxMzA6IDdDIDJCIDU1IDk3IEJDIDA2
IDVGIDYyICBEMCA5QSA2QiBGRCA0RCBBQSBGMyA1QSA6IHwrVS4uLl9iLi5rLk0uLloKMDE0
MDogRTMgQjUgMTcgMDAgMDAgMDEgMDAgM0UgIEY5IDg2IEJCIDMxIDVCIDJBIDk5IDQ4IDog
Li4uLi4uLj4uLi4xWyouSAowMTUwOiAwMSBBMCAxNSA1MSAwQyBBRiA0NSBEMyAgN0YgMTEg
MjkgMzggNDggNzAgMEQgMkUgOiAuLi5RLi5FLi4uKThIcC4uCjAxNjA6IENGIDBGIDc4IEQ3
IDJGIEYxIDhEIDcwICAzRiA1NyBCMiAzOSA5MiA3MCA0RCAzMyA6IC4ueC4vLi5wP1cuOS5w
TTMKMDE3MDogQTQgMkYgRDYgMTYgQTIgMDcgNzIgOTUgIDk3IDE5IEZBIDU0IDU2IDc1IDFF
IDlFIDogLi8uLi4uci4uLi5UVnUuLgowMTgwOiA1QyBDQSBDOCBENCA2QiA2OSA1OSAyQSAg
MzkgMzcgRjkgQUQgRTYgMjUgRDEgMjggOiBcLi4ua2lZKjk3Li4uJS4oCjAxOTA6IDk2IEU3
IEQwIEZBIDUxIDc4IEUwIDUzICBDRSBFMCAyMCBGMyA3NCAzNCA3MyA2MiA6IC4uLi5ReC5T
Li4gLnQ0c2IKMDFhMDogMTggRTggMkUgNUYgMzkgOUUgMDIgQUIgIEJEIDVBIDY4IEU5IDlG
IEU5IDdEIEFEIDogLi4uXzkuLi4uWmguLi59LgowMWIwOiA3MSBCMCA0NiAzNSBCQSA2MyBB
QiBBRSAgQUMgMDIgRDYgODggNzMgNjcgNDUgNDYgOiBxLkY1LmMuLi4uLi5zZ0VGCjAxYzA6
IEFCIDBGIDNBIEM5IDU2IEIyIDcyIDlDICAwRSA4QyBCQiBERCAyMyAyMCA5MCBFMyA6IC4u
Oi5WLnIuLi4uLiMgLi4KMDFkMDogODAgRTMgNEYgNjUgRUMgRjQgRTYgODUgIEJBIDA4IEVG
IDkwIDVFIEYyIDA1IEJFIDogLi5PZS4uLi4uLi4uXi4uLgowMWUwOiAwMSA4NSA0QyA1RiBB
MCAwNCA1MCA1NSAgNzkgMUEgQ0YgRjggNTEgOTkgRjMgMTQgOiAuLkxfLi5QVXkuLi5RLi4u
CjAxZjA6IDg1IEZFIERCIDM0IDQ1IDEzIDg4IDVFICBGRiA5NSBGOSBBRiAxNiBFRCAyQSAy
QyA6IC4uLjRFLi5eLi4uLi4uKiwKMDIwMDogRTggQTQgRTEgRTQgNTIgNTcgMDcgMzYgIDc0
IEUyIDQ0IEZFIEE3IDlDIDE0IDg1IDogLi4uLlJXLjZ0LkQuLi4uLgowMjEwOiAwQyBCMCBF
NSAzMiA0NSA1OCA4MSBDQyAgQjggMTMgNjMgMkQgNzkgQzEgODkgQzQgOiAuLi4yRVguLi4u
Yy15Li4uCjAyMjA6IDVCIEMxIDc4IEY1IDA2IDQ3IEI4IDA1ICBFNSA2RiA5OCAwRSBDQSAy
NiA3MCAxNSA6IFsueC4uRy4uLm8uLi4mcC4KMDIzMDogNEUgODYgNEQgMEIgRUEgMEUgRUEg
M0YgIDdBIDE4IDhEIDEzIDE5IDQ4IDNEIDhEIDogTi5NLi4uLj96Li4uLkg9LgowMjQwOiA0
RSBFRSA0NSAyMiA2NyA2RiBCOSAwMCAgMDAgMDEgMDEgMDAgQTYgMDQgOTggOTAgOiBOLkUi
Z28uLi4uLi4uLi4uCjAyNTA6IDFDIDcyIEVGIDc5IENBIEU2IDhCIDUxICA2QiA5MSBGNSAx
OCAxRSBDQSBDRiBEQiA6IC5yLnkuLi5Ray4uLi4uLi4KMDI2MDogQUMgNjUgOTcgMDQgNjQg
OEEgQ0UgRkYgIDU2IDhDIDNBIDZGIDA4IDM1IEQ2IDRCIDogLmUuLmQuLi5WLjpvLjUuSwow
MjcwOiAzQSBGMyBEQSA5NyBFMCBFNyBGMSBGOCAgMUIgRjggNDcgMTEgRkMgMDEgMEUgOEYg
OiA6Li4uLi4uLi4uRy4uLi4uCjAyODA6IDk1IDg0IDRDIDA4IDgzIDgwIDQyIENEICAzMiA3
QiA4NCAwRSAzMCAzNCA4NiA4RCA6IC4uTC4uLkIuMnsuLjA0Li4KMDI5MDogMTkgQTQgNEMg
RUYgQjcgQTcgRDIgQ0MgIDM4IDE0IDNDIEJDIDFBIDI0IEZFIDcwIDogLi5MLi4uLi44Ljwu
LiQucAowMmEwOiBGRiBCRiBDNCA4NyBBOCBGMyAzNSA5MCAgNjIgNzkgNTkgRjUgRUEgNjIg
NDUgRTQgOiAuLi4uLi41LmJ5WS4uYkUuCjAyYjA6IDE3IDU0IDBBIDkwIDQyIDM0IDQyIEUz
ICAxMCAyOCBCRSBFQiA1NSA5RCAyNyBFMSA6IC5ULi5CNEIuLiguLlUuJy4KMDJjMDogNkYg
QzcgMTYgNTggRDggNzEgOEYgRkIgIDJEIERGIEYwIEM1IEQ2IDY1IDFCIDEzIDogby4uWC5x
Li4tLi4uLmUuLgowMmQwOiAwQiA4MCBFQSA0MiA0NCAxNCBBRiAyOCAgNjUgRDUgRkQgQ0Yg
QTggMjEgNkUgNzIgOiAuLi5CRC4uKGUuLi4uIW5yCjAyZTA6IDc1IEI1IDhCIDkxIDNBIDc5
IEFEIDhCICBFQSA3MiBDNiAzOSBGOCBCMSA3QSA3OCA6IHUuLi46eS4uLnIuOS4uengKMDJm
MDogRjYgQ0EgODMgRkMgNDEgOTUgNjIgNEIgIEU4IDUyIDQxIDhCIDBCIDRCIERGIDFDIDog
Li4uLkEuYksuUkEuLksuLgowMzAwOiBDNyA1QyBBMCBGRSBCRCA2QiBCNyAzQSAgMTkgQUYg
NDQgMjggNjggREMgN0EgMkIgOiAuXC4uLmsuOi4uRChoLnorCjAzMTA6IDE5IEM5IDBEIEM4
IDU4IDEyIDIyIDE3ICA4QSA3QyBDMiAwMyAyRSA1QyBFOCBBMyA6IC4uLi5YLiIuLnwuLi5c
Li4KMDMyMDogQzEgNjEgM0MgNkIgOEQgODcgRDggOEIgIEI4IDU3IDI4IDUwIDZGIDFEIDQ2
IDRGIDogLmE8ay4uLi4uVyhQby5GTwowMzMwOiBGNiBFMSA4NSBBQyBCQiA4NyA5QiBFMSAg
MEEgQUQgOTUgNkYgODAgNEQgN0EgRjQgOiAuLi4uLi4uLi4uLm8uTXouCjAzNDA6IDcyIEEw
IEZEIDZBIDUzIDc5IDc5IDhBICAxMiA3QiA0RSBGQiAwMCAwMCAwMCA4MCA6IHIuLmpTeXku
LntOLi4uLi4KMDM1MDogNUEgODggNkEgMEMgMkMgRDQgMDYgREQgIDZFIEQ1IDQzIDRFIDAz
IERDIDQ5IEUzIDogWi5qLiwuLi5uLkNOLi5JLgowMzYwOiA5NSA3RiBGRiBEQSAxRCA5MCBC
QyBERSAgNzcgNTEgOTIgNEQgMEMgMzkgRjEgRTEgOiAuLi4uLi4uLndRLk0uOS4uCjAzNzA6
IEFDIEY1IDRBIDg1IDRBIEU5IDkwIDU0ICBGNyA0QSAxRCBBMyBFQyBFNiBFMyBGMSA6IC4u
Si5KLi5ULkouLi4uLi4KMDM4MDogRjQgRTQgMjIgRUIgQjAgMjAgRjcgNkMgIEJFIDQ4IDgz
IEQ2IEU2IDBFIEEwIDI4IDogLi4iLi4gLmwuSC4uLi4uKAowMzkwOiA1RSA5OSBCNCBBOSBB
MiA4RCA5OSBBRiAgQTcgNjYgQ0MgNDcgRkQgODIgOTAgRkMgOiBeLi4uLi4uLi5mLkcuLi4u
CjAzYTA6IEY2IDUxIEYwIEExIDNEIDQxIEY1IDlDICBDOCA0NiAzQSBBMiBENiBCRiA0MiAx
NiA6IC5RLi49QS4uLkY6Li4uQi4KMDNiMDogNkIgNzQgREEgRTQgMDMgRkQgRDAgNEYgIDIx
IEY1IDM1IEExIEExIDI4IERGIEYxIDoga3QuLi4uLk8hLjUuLiguLgowM2MwOiA2NyA1QSBF
NCAxNSBCRCA2QyAwNiA1MyAgQTMgRjYgNjggQTkgOEIgNjYgQjggQzkgOiBnWi4uLmwuUy4u
aC4uZi4uCjAzZDA6IDAwIDAwIDAwIDM3IDAwIDAwIDAwIDA3ICA3MyA3MyA2OCAyRCA2NCA3
MyA3MyAwMCA6IC4uLjcuLi4uc3NoLWRzcy4KMDNlMDogMDAgMDAgMjggNTcgMzIgM0QgQTEg
OUMgIDY1IDdBIDEzIDgyIEJEIEY4IDI3IDA5IDogLi4oVzI9Li5lei4uLi4nLgowM2YwOiBG
QiBDMiBFMCA4NSA2OSBCOSBGQyBDQiAgRTggMkYgNUEgRkUgRjUgN0MgRkYgQTUgOiAuLi4u
aS4uLi4vWi4ufC4uCjA0MDA6IDBGIENFIDU2IEFCIDJFIDY5IDg0IDBDICBEMCBDRSA5QyBF
QiA0NCBBMSAxMyBGQyA6IC4uVi4uaS4uLi4uLkQuLi4KPT4gbGlic3NoMl90cmFuc3BvcnRf
cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMS4wNDgxNjMgVHJh
bnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3Ry
YW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwMTQgYnl0ZXMpCjAwMDA6IDFGIDAwIDAwIDAzIDMy
IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2NCA3MyA3MyA6IC4uLi4yLi4uLnNzaC1kc3MK
MDAxMDogMDAgMDAgMDEgMDEgMDAgREEgNTYgNkQgIDQ1IEUzIDM2IDM5IEY0IEY2IEExIDg5
IDogLi4uLi4uVm1FLjY5Li4uLgowMDIwOiBGOSBEQiAxNyAzQiA3MCA4MyBFMSBFNCAgMTgg
OEYgNTcgQTcgM0YgOEYgQkEgRTcgOiAuLi47cC4uLi4uVy4/Li4uCjAwMzA6IEE0IDcyIERC
IEZCIDA2IEZFIDU1IDQyICBCNiBCNCA0NiAzNyA3RSBDOCAyQSA2MyA6IC5yLi4uLlVCLi5G
N34uKmMKMDA0MDogNzIgMDkgQzcgRjIgMkQgODUgODEgNkEgIEVCIDFFIDhDIEM5IDREIDY0
IDIwIEY2IDogci4uLi0uLmouLi4uTWQgLgowMDUwOiAzOCA1NyA5QyBENSA0OSA0RiA3NyA3
OSAgNjYgNkIgNjIgODUgMUIgNDEgMjUgRTggOiA4Vy4uSU93eWZrYi4uQSUuCjAwNjA6IDYx
IEI2IEQ5IENGIDE0IDBEIEZCIEREICBGQSA2MiAwNyBGRiBFRCAyQiAyRCBCMyA6IGEuLi4u
Li4uLmIuLi4rLS4KMDA3MDogNzEgQUEgMUEgMEIgMTYgN0MgRjUgNjggIDE1IDM3IEMyIEND
IDUxIEU3IDRFIDU5IDogcS4uLi58LmguNy4uUS5OWQowMDgwOiA5MiA4MCBFRCA4NSBCNyAy
OSBERCBBMiAgNjQgNUYgQjcgODkgM0IgOTYgMjIgMDUgOiAuLi4uLikuLmRfLi47LiIuCjAw
OTA6IDUzIDU3IDBGIDU3IEFDIDY0IDU0IERGICAxMSA5NSA1OCA2QiA3NSA2QiBCRSBGNSA6
IFNXLlcuZFQuLi5Ya3VrLi4KMDBhMDogQ0IgMEUgQzAgOTQgMDAgQTkgM0MgREIgIDYzIEVG
IEE2IEMxIEQzIEMxIDJDIEU3IDogLi4uLi4uPC5jLi4uLi4sLgowMGIwOiAyMCBFNCBFMCA4
QSA3QyA0MiAzMCAzRSAgNEEgQTYgNzkgMUMgNDMgQTggOTcgRDYgOiAgLi4ufEIwPkoueS5D
Li4uCjAwYzA6IDJBIDQxIDJEIDFGIERFIDVBIEY5IDFEICA2QyBBOCAwQiA1NiA1QiBBQiBC
RCAxRiA6ICpBLS4uWi4ubC4uVlsuLi4KMDBkMDogNTAgQ0UgNzQgNDAgQUMgOUMgOTcgQTkg
IEM5IEIyIDUyIDZBIDM5IDBEIEI4IDgzIDogUC50QC4uLi4uLlJqOS4uLgowMGUwOiAxNyA0
OSA1OSBDQSBFRCBGQSAxQiBFMCAgQjEgQTAgNkEgRTYgQkQgMzMgOEUgOUMgOiAuSVkuLi4u
Li4uai4uMy4uCjAwZjA6IEM2IEMyIEQwIDgwIEE1IDYyIEQ4IDVEICA0NiA3QSAxMyBEMSAz
RiA0OCA3NyAyOSA6IC4uLi4uYi5dRnouLj9IdykKMDEwMDogMTIgODEgNzcgQzcgMDEgN0Ig
NkMgRTEgIEI3IEFGIDU2IEVDIDZEIEMxIEUxIENFIDogLi53Li57bC4uLlYubS4uLgowMTEw
OiA3NSBFQyBCMCA3RiA3NyAwMCAwMCAwMCAgMTUgMDAgRjEgN0MgMkIgNTUgOTcgQkMgOiB1
Li4udy4uLi4uLnwrVS4uCjAxMjA6IDA2IDVGIDYyIEQwIDlBIDZCIEZEIDREICBBQSBGMyA1
QSBFMyBCNSAxNyAwMCAwMCA6IC5fYi4uay5NLi5aLi4uLi4KMDEzMDogMDEgMDAgM0UgRjkg
ODYgQkIgMzEgNUIgIDJBIDk5IDQ4IDAxIEEwIDE1IDUxIDBDIDogLi4+Li4uMVsqLkguLi5R
LgowMTQwOiBBRiA0NSBEMyA3RiAxMSAyOSAzOCA0OCAgNzAgMEQgMkUgQ0YgMEYgNzggRDcg
MkYgOiAuRS4uLik4SHAuLi4ueC4vCjAxNTA6IEYxIDhEIDcwIDNGIDU3IEIyIDM5IDkyICA3
MCA0RCAzMyBBNCAyRiBENiAxNiBBMiA6IC4ucD9XLjkucE0zLi8uLi4KMDE2MDogMDcgNzIg
OTUgOTcgMTkgRkEgNTQgNTYgIDc1IDFFIDlFIDVDIENBIEM4IEQ0IDZCIDogLnIuLi4uVFZ1
Li5cLi4uawowMTcwOiA2OSA1OSAyQSAzOSAzNyBGOSBBRCBFNiAgMjUgRDEgMjggOTYgRTcg
RDAgRkEgNTEgOiBpWSo5Ny4uLiUuKC4uLi5RCjAxODA6IDc4IEUwIDUzIENFIEUwIDIwIEYz
IDc0ICAzNCA3MyA2MiAxOCBFOCAyRSA1RiAzOSA6IHguUy4uIC50NHNiLi4uXzkKMDE5MDog
OUUgMDIgQUIgQkQgNUEgNjggRTkgOUYgIEU5IDdEIEFEIDcxIEIwIDQ2IDM1IEJBIDogLi4u
LlpoLi4ufS5xLkY1LgowMWEwOiA2MyBBQiBBRSBBQyAwMiBENiA4OCA3MyAgNjcgNDUgNDYg
QUIgMEYgM0EgQzkgNTYgOiBjLi4uLi4uc2dFRi4uOi5WCjAxYjA6IEIyIDcyIDlDIDBFIDhD
IEJCIEREIDIzICAyMCA5MCBFMyA4MCBFMyA0RiA2NSBFQyA6IC5yLi4uLi4jIC4uLi5PZS4K
MDFjMDogRjQgRTYgODUgQkEgMDggRUYgOTAgNUUgIEYyIDA1IEJFIDAxIDg1IDRDIDVGIEEw
IDogLi4uLi4uLl4uLi4uLkxfLgowMWQwOiAwNCA1MCA1NSA3OSAxQSBDRiBGOCA1MSAgOTkg
RjMgMTQgODUgRkUgREIgMzQgNDUgOiAuUFV5Li4uUS4uLi4uLjRFCjAxZTA6IDEzIDg4IDVF
IEZGIDk1IEY5IEFGIDE2ICBFRCAyQSAyQyBFOCBBNCBFMSBFNCA1MiA6IC4uXi4uLi4uLios
Li4uLlIKMDFmMDogNTcgMDcgMzYgNzQgRTIgNDQgRkUgQTcgIDlDIDE0IDg1IDBDIEIwIEU1
IDMyIDQ1IDogVy42dC5ELi4uLi4uLi4yRQowMjAwOiA1OCA4MSBDQyBCOCAxMyA2MyAyRCA3
OSAgQzEgODkgQzQgNUIgQzEgNzggRjUgMDYgOiBYLi4uLmMteS4uLlsueC4uCjAyMTA6IDQ3
IEI4IDA1IEU1IDZGIDk4IDBFIENBICAyNiA3MCAxNSA0RSA4NiA0RCAwQiBFQSA6IEcuLi5v
Li4uJnAuTi5NLi4KMDIyMDogMEUgRUEgM0YgN0EgMTggOEQgMTMgMTkgIDQ4IDNEIDhEIDRF
IEVFIDQ1IDIyIDY3IDogLi4/ei4uLi5IPS5OLkUiZwowMjMwOiA2RiBCOSAwMCAwMCAwMSAw
MSAwMCBBNiAgMDQgOTggOTAgMUMgNzIgRUYgNzkgQ0EgOiBvLi4uLi4uLi4uLi5yLnkuCjAy
NDA6IEU2IDhCIDUxIDZCIDkxIEY1IDE4IDFFICBDQSBDRiBEQiBBQyA2NSA5NyAwNCA2NCA6
IC4uUWsuLi4uLi4uLmUuLmQKMDI1MDogOEEgQ0UgRkYgNTYgOEMgM0EgNkYgMDggIDM1IEQ2
IDRCIDNBIEYzIERBIDk3IEUwIDogLi4uVi46by41Lks6Li4uLgowMjYwOiBFNyBGMSBGOCAx
QiBGOCA0NyAxMSBGQyAgMDEgMEUgOEYgOTUgODQgNEMgMDggODMgOiAuLi4uLkcuLi4uLi4u
TC4uCjAyNzA6IDgwIDQyIENEIDMyIDdCIDg0IDBFIDMwICAzNCA4NiA4RCAxOSBBNCA0QyBF
RiBCNyA6IC5CLjJ7Li4wNC4uLi5MLi4KMDI4MDogQTcgRDIgQ0MgMzggMTQgM0MgQkMgMUEg
IDI0IEZFIDcwIEZGIEJGIEM0IDg3IEE4IDogLi4uOC48Li4kLnAuLi4uLgowMjkwOiBGMyAz
NSA5MCA2MiA3OSA1OSBGNSBFQSAgNjIgNDUgRTQgMTcgNTQgMEEgOTAgNDIgOiAuNS5ieVku
LmJFLi5ULi5CCjAyYTA6IDM0IDQyIEUzIDEwIDI4IEJFIEVCIDU1ICA5RCAyNyBFMSA2RiBD
NyAxNiA1OCBEOCA6IDRCLi4oLi5VLicuby4uWC4KMDJiMDogNzEgOEYgRkIgMkQgREYgRjAg
QzUgRDYgIDY1IDFCIDEzIDBCIDgwIEVBIDQyIDQ0IDogcS4uLS4uLi5lLi4uLi5CRAowMmMw
OiAxNCBBRiAyOCA2NSBENSBGRCBDRiBBOCAgMjEgNkUgNzIgNzUgQjUgOEIgOTEgM0EgOiAu
LihlLi4uLiFucnUuLi46CjAyZDA6IDc5IEFEIDhCIEVBIDcyIEM2IDM5IEY4ICBCMSA3QSA3
OCBGNiBDQSA4MyBGQyA0MSA6IHkuLi5yLjkuLnp4Li4uLkEKMDJlMDogOTUgNjIgNEIgRTgg
NTIgNDEgOEIgMEIgIDRCIERGIDFDIEM3IDVDIEEwIEZFIEJEIDogLmJLLlJBLi5LLi4uXC4u
LgowMmYwOiA2QiBCNyAzQSAxOSBBRiA0NCAyOCA2OCAgREMgN0EgMkIgMTkgQzkgMEQgQzgg
NTggOiBrLjouLkQoaC56Ky4uLi5YCjAzMDA6IDEyIDIyIDE3IDhBIDdDIEMyIDAzIDJFICA1
QyBFOCBBMyBDMSA2MSAzQyA2QiA4RCA6IC4iLi58Li4uXC4uLmE8ay4KMDMxMDogODcgRDgg
OEIgQjggNTcgMjggNTAgNkYgIDFEIDQ2IDRGIEY2IEUxIDg1IEFDIEJCIDogLi4uLlcoUG8u
Rk8uLi4uLgowMzIwOiA4NyA5QiBFMSAwQSBBRCA5NSA2RiA4MCAgNEQgN0EgRjQgNzIgQTAg
RkQgNkEgNTMgOiAuLi4uLi5vLk16LnIuLmpTCjAzMzA6IDc5IDc5IDhBIDEyIDdCIDRFIEZC
IDAwICAwMCAwMCA4MCA1QSA4OCA2QSAwQyAyQyA6IHl5Li57Ti4uLi4uWi5qLiwKMDM0MDog
RDQgMDYgREQgNkUgRDUgNDMgNEUgMDMgIERDIDQ5IEUzIDk1IDdGIEZGIERBIDFEIDogLi4u
bi5DTi4uSS4uLi4uLgowMzUwOiA5MCBCQyBERSA3NyA1MSA5MiA0RCAwQyAgMzkgRjEgRTEg
QUMgRjUgNEEgODUgNEEgOiAuLi53US5NLjkuLi4uSi5KCjAzNjA6IEU5IDkwIDU0IEY3IDRB
IDFEIEEzIEVDICBFNiBFMyBGMSBGNCBFNCAyMiBFQiBCMCA6IC4uVC5KLi4uLi4uLi4iLi4K
MDM3MDogMjAgRjcgNkMgQkUgNDggODMgRDYgRTYgIDBFIEEwIDI4IDVFIDk5IEI0IEE5IEEy
IDogIC5sLkguLi4uLiheLi4uLgowMzgwOiA4RCA5OSBBRiBBNyA2NiBDQyA0NyBGRCAgODIg
OTAgRkMgRjYgNTEgRjAgQTEgM0QgOiAuLi4uZi5HLi4uLi5RLi49CjAzOTA6IDQxIEY1IDlD
IEM4IDQ2IDNBIEEyIEQ2ICBCRiA0MiAxNiA2QiA3NCBEQSBFNCAwMyA6IEEuLi5GOi4uLkIu
a3QuLi4KMDNhMDogRkQgRDAgNEYgMjEgRjUgMzUgQTEgQTEgIDI4IERGIEYxIDY3IDVBIEU0
IDE1IEJEIDogLi5PIS41Li4oLi5nWi4uLgowM2IwOiA2QyAwNiA1MyBBMyBGNiA2OCBBOSA4
QiAgNjYgQjggQzkgMDAgMDAgMDAgMzcgMDAgOiBsLlMuLmguLmYuLi4uLjcuCjAzYzA6IDAw
IDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAwMCAyOCA1NyAzMiA6IC4uLnNz
aC1kc3MuLi4oVzIKMDNkMDogM0QgQTEgOUMgNjUgN0EgMTMgODIgQkQgIEY4IDI3IDA5IEZC
IEMyIEUwIDg1IDY5IDogPS4uZXouLi4uJy4uLi4uaQowM2UwOiBCOSBGQyBDQiBFOCAyRiA1
QSBGRSBGNSAgN0MgRkYgQTUgMEYgQ0UgNTYgQUIgMkUgOiAuLi4uL1ouLnwuLi4uVi4uCjAz
ZjA6IDY5IDg0IDBDIEQwIENFIDlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IGkuLi4uLgpbbGlic3NoMl0gMS4wNDgzMjIgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAzMSBy
ZWNlaXZlZCwgbGVuZ3RoPTEwMTQKW2xpYnNzaDJdIDEuMDQ4MzI1IFRyYW5zcG9ydDogTG9v
a2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDMxCltsaWJzc2gyXSAxLjA0ODM1NyBLZXkgRXg6
IFNlcnZlcidzIE1ENSBGaW5nZXJwcmludDogZTc6MDQ6OGI6ZmY6ZGQ6NjM6NDQ6YTM6YWM6
YjA6Yjc6Mzk6ZjE6MDE6NWQ6YTUKW2xpYnNzaDJdIDEuMDQ4MzcyIEtleSBFeDogU2VydmVy
J3MgU0hBMSBGaW5nZXJwcmludDogOGU6ZmY6OWY6YWQ6NTk6YmI6Mjg6MGQ6Y2U6YmQ6OTY6
MWM6ODA6NTY6N2I6M2E6ZGY6NjU6ZmQ6ZDIKW2xpYnNzaDJdIDEuMDU0MzMwIEtleSBFeDog
U2VuZGluZyBORVdLRVlTIG1lc3NhZ2UKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxh
aW4gKDEgYnl0ZXMpCjAwMDA6IDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IC4KW2xpYnNzaDJdIDEuMDU0NDA0IFNvY2tldDogU2VudCAxNi8x
NiBieXRlcyBhdCAweDUwNjdkOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkg
KDE2IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwQSAxNSA0NyBDMyAgNTEgQ0YgRDMgQzkg
QTMgMEUgOUEgNjAgOiAuLi4uLi5HLlEuLi4uLi5gCltsaWJzc2gyXSAxLjA1NDQxMyBUcmFu
c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAyMQpbbGlic3NoMl0gMS4wNTQ0
MTggRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24g
a2V5cwpbbGlic3NoMl0gMS4wNTQ1OTIgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMg
dG8gMHg1MDI3OTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzMiBieXRl
cykKMDAwMDogMDAgMDAgMDAgMEMgMDYgMDIgMDAgMDAgIDAwIDAwIEI5IEVGIEVFIDRCIDMz
IDg5IDogLi4uLi4uLi4uLi4uLkszLgowMDEwOiAwMCAwMCAwMCAwQyAwQSAxNSBBNiA4MiAg
MDcgNTQgNzYgRTYgNDIgMzYgNzkgNDUgOiAuLi4uLi4uLi5Udi5CNnlFCj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDEu
MDU0NjE0IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4g
bGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gy
XSAxLjA1NDYyNSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIxIHJlY2VpdmVkLCBsZW5ndGg9
MQpbbGlic3NoMl0gMS4wNTQ2MzAgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2Yg
dHlwZTogMjEKW2xpYnNzaDJdIDEuMDU0NjMzIEtleSBFeDogUmVjZWl2ZWQgTkVXS0VZUyBt
ZXNzYWdlCltsaWJzc2gyXSAxLjA1NDYzNyBLZXkgRXg6IHNlc3Npb25faWQgY2FsY3VsYXRl
ZAovdXNyL2xvY2FsL2FwcC9ldmVycGFuL2xpYnNzaDItMS40LjIvZXhhbXBsZS8ubGlicy9z
Y3A6IHJlbG9jYXRpb24gZXJyb3I6IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vbGlic3NoMi0x
LjQuMi9zcmMvLmxpYnMvbGlic3NoMi5zby4xOiBzeW1ib2wgZ2NyeV9jaXBoZXJfc2V0a2V5
LCB2ZXJzaW9uIEdDUllQVF8xLjIgbm90IGRlZmluZWQgaW4gZmlsZSBsaWJnY3J5cHQuc28u
MTEgd2l0aCBsaW5rIHRpbWUgcmVmZXJlbmNlCg==

------=_NextPart_50769AF3_094D7588_7C17F916
Content-Type: application/octet-stream;
	charset="gb18030";
	name="scp_openssl.log"
Content-Disposition: attachment; filename="scp_openssl.log"
Content-Transfer-Encoding: base64

W2xpYnNzaDJdIDAuNTc1NDIzIFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr
ZXQgNQpbbGlic3NoMl0gMC41NzU0NzIgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI
LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjU3NTQ4NiBTb2NrZXQ6IFNlbnQgMjMv
MjMgYnl0ZXMgYXQgMHgyYjhkOTI4YTkzN2QrMApbbGlic3NoMl0gMC41NzU0OTQgU29ja2V0
OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjU3NTQ5NyBGYWlsdXJl
IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2MzMx
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjMzOSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzNDMgU29ja2V0OiBS
ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2MzQ3IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzNTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXIKW2xpYnNzaDJdIDAuNTc2MzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
CltsaWJzc2gyXSAwLjU3NjM2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli
c3NoMl0gMC41NzYzNjggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd
IDAuNTc2MzcyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3
NjM3NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzODAg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2Mzg3IFNvY2tl
dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM5MCBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzOTMgU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2Mzk2IFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcgpbbGlic3NoMl0gMC41NzY0MDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK
W2xpYnNzaDJdIDAuNTc2NDA0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz
c2gyXSAwLjU3NjQwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g
MC41NzY0MTAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2
NDE1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQxOCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0MjEgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDI0IFNvY2tldDogUmVj
dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQyNiBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0MjkgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyCltsaWJzc2gyXSAwLjU3NjQzNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb
bGlic3NoMl0gMC41NzY0MzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz
aDJdIDAuNTc2NDQxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw
LjU3NjQ0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0
NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDUwIFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ1MyBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0NTYgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDU5IFNvY2tldDogUmVjdmVkIDEg
Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ2MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcgpbbGlic3NoMl0gMC41NzY0NjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u
ZXIKW2xpYnNzaDJdIDAuNTc2NDY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts
aWJzc2gyXSAwLjU3NjQ3MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No
Ml0gMC41NzY0NzMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu
NTc2NDc2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ3
OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0ODIgU29j
a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDg1IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ4OCBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0OTEgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDk0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyCltsaWJzc2gyXSAwLjU3NjQ5NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cgpbbGlic3NoMl0gMC41NzY1MDAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp
YnNzaDJdIDAuNTc2NTAzIFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu
Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjU3
NjY1NSBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm
ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt
c2hhMQpbbGlic3NoMl0gMC41NzY2NjEgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es
c3NoLWRzcwpbbGlic3NoMl0gMC41NzY2NjQgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx
MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs
eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv
dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC41NzY2Njcg
S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0
cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl
czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz
ZGVzLWNiYwpbbGlic3NoMl0gMC41NzY2NzAgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z
aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo
bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC41NzY2NzMgS2V5IEV4OiBT
ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05
NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g
MC41NzY2NzUgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuNTc2Njc4
IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjU3NjY4MCBLZXkgRXg6
IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjU3NjY4MyBLZXkgRXg6IFNlbnQgTEFOR19T
QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6
IDE0IDU4IDA0IEQ2IEMxIDEyIENGIDlBICBCOSBGRSAwMiBGRiBENiAwNyA5NCBERiA6IC5Y
Li4uLi4uLi4uLi4uLi4KMDAxMDogRUUgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1
IDJEIDY4IDY1IDZDIDZDIDogLi4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2
NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx
CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy
RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz
IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz
MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll
LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz
MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg
NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3
MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u
LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow
MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg
OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy
RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg
MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx
MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg
NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx
ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg
NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz
dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg
NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD
IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz
MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog
LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg
NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw
IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp
dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx
IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg
MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE
IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy
Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0
IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2
NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6
IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo
bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2
MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h
CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2
MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2
IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy
RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V
aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy
RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg
NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2
NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05
NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2
OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg
NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow
MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg
OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw
MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41NzY4MDMg
U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFu
c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0
IDU4IDA0ICBENiBDMSAxMiBDRiA5QSBCOSBGRSAwMiA6IC4uLi4uLlguLi4uLi4uLi4KMDAx
MDogRkYgRDYgMDcgOTQgREYgRUUgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog
Li4uLi4uLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg
NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx
IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o
ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4
IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg
MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1
IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t
Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz
IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw
MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6
IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j
dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD
IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2
MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j
CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3
MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE
IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz
OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs
b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz
MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg
MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2
MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs
M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow
MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg
OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2
QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg
NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx
OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg
NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz
ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg
NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs
YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg
NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1
IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj
MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog
aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg
MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE
IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx
NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw
IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg
NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx
IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx
LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0
IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz
NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6
IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp
cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw
IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw
MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u
CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw
MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgREEgNUIgM0QgQzggNTggNDMgRjQgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLi5bPS5YQy4KW2xpYnNzaDJdIDAuNTc2OTA3IFRy
YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjU3
NjkxNCBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBs
aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw
IDBDIDA2IDAyIDAwIDAwICAwMCAwMCA2NiBFRCAyNCAyMSBBQyAxQSA6IC4uLi4uLi4uLi5m
LiQhLi4KMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgRDEgNjUgIDBCIENBIEE4IDZEIDgzIEI0
IDc5IEJDIDogLi4uLi4uLmUuLi5tLi55LgowMDIwOiA3MSBDNSA1MiBBMiBCMSA1OCAwMCAw
MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiBxLlIuLlguLi4uZGlmZmllCjAwMzA6IDJE
IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs
bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE
IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3
MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw
NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6
IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0
IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3
NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj
LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz
MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg
IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3
NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz
aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2
MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg
MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw
OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt
Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg
MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz
aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg
NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy
RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg
MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0
d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg
NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx
IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog
MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht
YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg
NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz
IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK
MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz
IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg
NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2
Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG
IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw
MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw
IDAwIEYxIEU1IDg1IEJEIDQwIDJFICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u
LkAuCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog
MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u
Li4KW2xpYnNzaDJdIDAuNTc2OTk3IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl
ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0
ZXMpCjAwMDA6IDE0IEQxIDY1IDBCIENBIEE4IDZEIDgzICBCNCA3OSBCQyA3MSBDNSA1MiBB
MiBCMSA6IC4uZS4uLm0uLnkucS5SLi4KMDAxMDogNTggMDAgMDAgMDAgMUEgNjQgNjkgNjYg
IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogWC4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2
MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv
dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw
MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg
NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw
OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj
LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg
MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp
cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg
NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2
MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg
NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi
Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg
NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1
IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog
MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl
cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg
NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0
IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK
MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz
IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg
NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD
IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx
OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz
IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3
MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE
IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx
LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD
IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz
OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx
ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6
IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1
IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy
RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u
ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2
OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg
IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41
NzcwNzAgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb
bGlic3NoMl0gMC41NzcwNzMgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw
ZTogMjAKW2xpYnNzaDJdIDAuNTc3MDg0IEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6
IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjU3NzA4NyBLZXkgRXg6
IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC41NzcwOTAg
S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy
XSAwLjU3NzA5MiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j
YmMKW2xpYnNzaDJdIDAuNTc3MDk1IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6
IGhtYWMtc2hhMQpbbGlic3NoMl0gMC41NzcwOTcgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND
IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjU3NzEwMCBLZXkgRXg6IEFncmVlZCBv
biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC41NzcxMDIgS2V5IEV4OiBBZ3Jl
ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuNTc3MTExIEtleSBFeDog
SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy
XSAwLjU3NzM3MCBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry
YW5zcG9ydF93cml0ZSBwbGFpbiAoMTM0IGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MSAw
MCBGMCBFRiAgMUIgMzkgQTQgMEMgRjQgOUEgNzkgQTAgOiAuLi4uLi4uLi45Li4uLnkuCjAw
MTA6IEJEIDc3IDM3IDdBIDhCIDY0IEU4IENDICAwOCA5MCBGOSA5RiBDMyA1NSBFNCA0RSA6
IC53N3ouZC4uLi4uLi5VLk4KMDAyMDogMjkgMDIgRjMgNzYgMzAgMEQgRDEgM0YgIDg4IEVD
IEZCIEJDIEQ5IDk1IEM4IEM1IDogKS4udjAuLj8uLi4uLi4uLgowMDMwOiA0RiAwMiA0NSA2
MCAxNiBDQiAxOCBEOCAgMDEgQ0MgNTIgQTEgN0EgNEUgMUMgRkUgOiBPLkVgLi4uLi4uUi56
Ti4uCjAwNDA6IDlEIEU0IDU5IEY1IEU2IDE1IDhEIDI0ICAyNSA3MCBFNiA2MCA1MSA1MCAw
RSAzMCA6IC4uWS4uLi4kJXAuYFFQLjAKMDA1MDogOTggQTYgNTMgNDkgRjggNEEgOUEgREMg
IDU3IDVDIDI3IDRBIDA5IEZCIDhDIDRBIDogLi5TSS5KLi5XXCdKLi4uSgowMDYwOiA2NiBD
OCA0MyBDRCAzNiBFMSAwOCA3NyAgOTggQjIgMzkgNkUgNTkgMEEgMjggQ0EgOiBmLkMuNi4u
dy4uOW5ZLiguCjAwNzA6IEUyIEQ5IDREIDhBIDg3IEM1IDM4IEFDICBGMiAxNSAwNSA1OSA1
MyBBNiBEMyA1RCA6IC4uTS4uLjguLi4uWVMuLl0KMDA4MDogQkUgMjYgM0EgNzQgRjggMkYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLiY6dC4vCltsaWJzc2gyXSAwLjU3
NzQwMSBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gy
X3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDE0NCBieXRlcykKMDAwMDogMDAgMDAgMDAgOEMg
MDUgMUUgMDAgMDAgIDAwIDgxIDAwIEYwIEVGIDFCIDM5IEE0IDogLi4uLi4uLi4uLi4uLi45
LgowMDEwOiAwQyBGNCA5QSA3OSBBMCBCRCA3NyAzNyAgN0EgOEIgNjQgRTggQ0MgMDggOTAg
RjkgOiAuLi55Li53N3ouZC4uLi4uCjAwMjA6IDlGIEMzIDU1IEU0IDRFIDI5IDAyIEYzICA3
NiAzMCAwRCBEMSAzRiA4OCBFQyBGQiA6IC4uVS5OKS4udjAuLj8uLi4KMDAzMDogQkMgRDkg
OTUgQzggQzUgNEYgMDIgNDUgIDYwIDE2IENCIDE4IEQ4IDAxIENDIDUyIDogLi4uLi5PLkVg
Li4uLi4uUgowMDQwOiBBMSA3QSA0RSAxQyBGRSA5RCBFNCA1OSAgRjUgRTYgMTUgOEQgMjQg
MjUgNzAgRTYgOiAuek4uLi4uWS4uLi4kJXAuCjAwNTA6IDYwIDUxIDUwIDBFIDMwIDk4IEE2
IDUzICA0OSBGOCA0QSA5QSBEQyA1NyA1QyAyNyA6IGBRUC4wLi5TSS5KLi5XXCcKMDA2MDog
NEEgMDkgRkIgOEMgNEEgNjYgQzggNDMgIENEIDM2IEUxIDA4IDc3IDk4IEIyIDM5IDogSi4u
LkpmLkMuNi4udy4uOQowMDcwOiA2RSA1OSAwQSAyOCBDQSBFMiBEOSA0RCAgOEEgODcgQzUg
MzggQUMgRjIgMTUgMDUgOiBuWS4oLi4uTS4uLjguLi4uCjAwODA6IDU5IDUzIEE2IEQzIDVE
IEJFIDI2IDNBICA3NCBGOCAyRiBDQyBCQiAyOCBFQiAxMCA6IFlTLi5dLiY6dC4vLi4oLi4K
W2xpYnNzaDJdIDAuNTc3NDM0IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5
cGU6IDMxCltsaWJzc2gyXSAwLjU3NzQzOCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUg
dG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzCltsaWJzc2gyXSAwLjY0MTQ5MSBTb2NrZXQ6
IFJlY3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFu
c3BvcnRfcmVhZCgpIHJhdyAoMTA0MCBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMDYgMDIg
MDAgMDAgIDAwIDAwIDU4IDY5IDc3IEZBIEYyIEMwIDogLi4uLi4uLi4uLlhpdy4uLgowMDEw
OiAwMCAwMCAwMyBGQyAwNSAxRiAwMCAwMCAgMDMgMzIgMDAgMDAgMDAgMDcgNzMgNzMgOiAu
Li4uLi4uLi4yLi4uLnNzCjAwMjA6IDY4IDJEIDY0IDczIDczIDAwIDAwIDAxICAwMSAwMCBE
QSA1NiA2RCA0NSBFMyAzNiA6IGgtZHNzLi4uLi4uVm1FLjYKMDAzMDogMzkgRjQgRjYgQTEg
ODkgRjkgREIgMTcgIDNCIDcwIDgzIEUxIEU0IDE4IDhGIDU3IDogOS4uLi4uLi47cC4uLi4u
VwowMDQwOiBBNyAzRiA4RiBCQSBFNyBBNCA3MiBEQiAgRkIgMDYgRkUgNTUgNDIgQjYgQjQg
NDYgOiAuPy4uLi5yLi4uLlVCLi5GCjAwNTA6IDM3IDdFIEM4IDJBIDYzIDcyIDA5IEM3ICBG
MiAyRCA4NSA4MSA2QSBFQiAxRSA4QyA6IDd+Lipjci4uLi0uLmouLi4KMDA2MDogQzkgNEQg
NjQgMjAgRjYgMzggNTcgOUMgIEQ1IDQ5IDRGIDc3IDc5IDY2IDZCIDYyIDogLk1kIC44Vy4u
SU93eWZrYgowMDcwOiA4NSAxQiA0MSAyNSBFOCA2MSBCNiBEOSAgQ0YgMTQgMEQgRkIgREQg
RkEgNjIgMDcgOiAuLkElLmEuLi4uLi4uLmIuCjAwODA6IEZGIEVEIDJCIDJEIEIzIDcxIEFB
IDFBICAwQiAxNiA3QyBGNSA2OCAxNSAzNyBDMiA6IC4uKy0ucS4uLi58LmguNy4KMDA5MDog
Q0MgNTEgRTcgNEUgNTkgOTIgODAgRUQgIDg1IEI3IDI5IEREIEEyIDY0IDVGIEI3IDogLlEu
TlkuLi4uLikuLmRfLgowMGEwOiA4OSAzQiA5NiAyMiAwNSA1MyA1NyAwRiAgNTcgQUMgNjQg
NTQgREYgMTEgOTUgNTggOiAuOy4iLlNXLlcuZFQuLi5YCjAwYjA6IDZCIDc1IDZCIEJFIEY1
IENCIDBFIEMwICA5NCAwMCBBOSAzQyBEQiA2MyBFRiBBNiA6IGt1ay4uLi4uLi4uPC5jLi4K
MDBjMDogQzEgRDMgQzEgMkMgRTcgMjAgRTQgRTAgIDhBIDdDIDQyIDMwIDNFIDRBIEE2IDc5
IDogLi4uLC4gLi4ufEIwPkoueQowMGQwOiAxQyA0MyBBOCA5NyBENiAyQSA0MSAyRCAgMUYg
REUgNUEgRjkgMUQgNkMgQTggMEIgOiAuQy4uLipBLS4uWi4ubC4uCjAwZTA6IDU2IDVCIEFC
IEJEIDFGIDUwIENFIDc0ICA0MCBBQyA5QyA5NyBBOSBDOSBCMiA1MiA6IFZbLi4uUC50QC4u
Li4uLlIKMDBmMDogNkEgMzkgMEQgQjggODMgMTcgNDkgNTkgIENBIEVEIEZBIDFCIEUwIEIx
IEEwIDZBIDogajkuLi4uSVkuLi4uLi4uagowMTAwOiBFNiBCRCAzMyA4RSA5QyBDNiBDMiBE
MCAgODAgQTUgNjIgRDggNUQgNDYgN0EgMTMgOiAuLjMuLi4uLi4uYi5dRnouCjAxMTA6IEQx
IDNGIDQ4IDc3IDI5IDEyIDgxIDc3ICBDNyAwMSA3QiA2QyBFMSBCNyBBRiA1NiA6IC4/SHcp
Li53Li57bC4uLlYKMDEyMDogRUMgNkQgQzEgRTEgQ0UgNzUgRUMgQjAgIDdGIDc3IDAwIDAw
IDAwIDE1IDAwIEYxIDogLm0uLi51Li4udy4uLi4uLgowMTMwOiA3QyAyQiA1NSA5NyBCQyAw
NiA1RiA2MiAgRDAgOUEgNkIgRkQgNEQgQUEgRjMgNUEgOiB8K1UuLi5fYi4uay5NLi5aCjAx
NDA6IEUzIEI1IDE3IDAwIDAwIDAxIDAwIDNFICBGOSA4NiBCQiAzMSA1QiAyQSA5OSA0OCA6
IC4uLi4uLi4+Li4uMVsqLkgKMDE1MDogMDEgQTAgMTUgNTEgMEMgQUYgNDUgRDMgIDdGIDEx
IDI5IDM4IDQ4IDcwIDBEIDJFIDogLi4uUS4uRS4uLik4SHAuLgowMTYwOiBDRiAwRiA3OCBE
NyAyRiBGMSA4RCA3MCAgM0YgNTcgQjIgMzkgOTIgNzAgNEQgMzMgOiAuLnguLy4ucD9XLjku
cE0zCjAxNzA6IEE0IDJGIEQ2IDE2IEEyIDA3IDcyIDk1ICA5NyAxOSBGQSA1NCA1NiA3NSAx
RSA5RSA6IC4vLi4uLnIuLi4uVFZ1Li4KMDE4MDogNUMgQ0EgQzggRDQgNkIgNjkgNTkgMkEg
IDM5IDM3IEY5IEFEIEU2IDI1IEQxIDI4IDogXC4uLmtpWSo5Ny4uLiUuKAowMTkwOiA5NiBF
NyBEMCBGQSA1MSA3OCBFMCA1MyAgQ0UgRTAgMjAgRjMgNzQgMzQgNzMgNjIgOiAuLi4uUXgu
Uy4uIC50NHNiCjAxYTA6IDE4IEU4IDJFIDVGIDM5IDlFIDAyIEFCICBCRCA1QSA2OCBFOSA5
RiBFOSA3RCBBRCA6IC4uLl85Li4uLlpoLi4ufS4KMDFiMDogNzEgQjAgNDYgMzUgQkEgNjMg
QUIgQUUgIEFDIDAyIEQ2IDg4IDczIDY3IDQ1IDQ2IDogcS5GNS5jLi4uLi4uc2dFRgowMWMw
OiBBQiAwRiAzQSBDOSA1NiBCMiA3MiA5QyAgMEUgOEMgQkIgREQgMjMgMjAgOTAgRTMgOiAu
LjouVi5yLi4uLi4jIC4uCjAxZDA6IDgwIEUzIDRGIDY1IEVDIEY0IEU2IDg1ICBCQSAwOCBF
RiA5MCA1RSBGMiAwNSBCRSA6IC4uT2UuLi4uLi4uLl4uLi4KMDFlMDogMDEgODUgNEMgNUYg
QTAgMDQgNTAgNTUgIDc5IDFBIENGIEY4IDUxIDk5IEYzIDE0IDogLi5MXy4uUFV5Li4uUS4u
LgowMWYwOiA4NSBGRSBEQiAzNCA0NSAxMyA4OCA1RSAgRkYgOTUgRjkgQUYgMTYgRUQgMkEg
MkMgOiAuLi40RS4uXi4uLi4uLiosCjAyMDA6IEU4IEE0IEUxIEU0IDUyIDU3IDA3IDM2ICA3
NCBFMiA0NCBGRSBBNyA5QyAxNCA4NSA6IC4uLi5SVy42dC5ELi4uLi4KMDIxMDogMEMgQjAg
RTUgMzIgNDUgNTggODEgQ0MgIEI4IDEzIDYzIDJEIDc5IEMxIDg5IEM0IDogLi4uMkVYLi4u
LmMteS4uLgowMjIwOiA1QiBDMSA3OCBGNSAwNiA0NyBCOCAwNSAgRTUgNkYgOTggMEUgQ0Eg
MjYgNzAgMTUgOiBbLnguLkcuLi5vLi4uJnAuCjAyMzA6IDRFIDg2IDREIDBCIEVBIDBFIEVB
IDNGICA3QSAxOCA4RCAxMyAxOSA0OCAzRCA4RCA6IE4uTS4uLi4/ei4uLi5IPS4KMDI0MDog
NEUgRUUgNDUgMjIgNjcgNkYgQjkgMDAgIDAwIDAxIDAxIDAwIEE2IDA0IDk4IDkwIDogTi5F
ImdvLi4uLi4uLi4uLgowMjUwOiAxQyA3MiBFRiA3OSBDQSBFNiA4QiA1MSAgNkIgOTEgRjUg
MTggMUUgQ0EgQ0YgREIgOiAuci55Li4uUWsuLi4uLi4uCjAyNjA6IEFDIDY1IDk3IDA0IDY0
IDhBIENFIEZGICA1NiA4QyAzQSA2RiAwOCAzNSBENiA0QiA6IC5lLi5kLi4uVi46by41LksK
MDI3MDogM0EgRjMgREEgOTcgRTAgRTcgRjEgRjggIDFCIEY4IDQ3IDExIEZDIDAxIDBFIDhG
IDogOi4uLi4uLi4uLkcuLi4uLgowMjgwOiA5NSA4NCA0QyAwOCA4MyA4MCA0MiBDRCAgMzIg
N0IgODQgMEUgMzAgMzQgODYgOEQgOiAuLkwuLi5CLjJ7Li4wNC4uCjAyOTA6IDE5IEE0IDRD
IEVGIEI3IEE3IEQyIENDICAzOCAxNCAzQyBCQyAxQSAyNCBGRSA3MCA6IC4uTC4uLi4uOC48
Li4kLnAKMDJhMDogRkYgQkYgQzQgODcgQTggRjMgMzUgOTAgIDYyIDc5IDU5IEY1IEVBIDYy
IDQ1IEU0IDogLi4uLi4uNS5ieVkuLmJFLgowMmIwOiAxNyA1NCAwQSA5MCA0MiAzNCA0MiBF
MyAgMTAgMjggQkUgRUIgNTUgOUQgMjcgRTEgOiAuVC4uQjRCLi4oLi5VLicuCjAyYzA6IDZG
IEM3IDE2IDU4IEQ4IDcxIDhGIEZCICAyRCBERiBGMCBDNSBENiA2NSAxQiAxMyA6IG8uLlgu
cS4uLS4uLi5lLi4KMDJkMDogMEIgODAgRUEgNDIgNDQgMTQgQUYgMjggIDY1IEQ1IEZEIENG
IEE4IDIxIDZFIDcyIDogLi4uQkQuLihlLi4uLiFucgowMmUwOiA3NSBCNSA4QiA5MSAzQSA3
OSBBRCA4QiAgRUEgNzIgQzYgMzkgRjggQjEgN0EgNzggOiB1Li4uOnkuLi5yLjkuLnp4CjAy
ZjA6IEY2IENBIDgzIEZDIDQxIDk1IDYyIDRCICBFOCA1MiA0MSA4QiAwQiA0QiBERiAxQyA6
IC4uLi5BLmJLLlJBLi5LLi4KMDMwMDogQzcgNUMgQTAgRkUgQkQgNkIgQjcgM0EgIDE5IEFG
IDQ0IDI4IDY4IERDIDdBIDJCIDogLlwuLi5rLjouLkQoaC56KwowMzEwOiAxOSBDOSAwRCBD
OCA1OCAxMiAyMiAxNyAgOEEgN0MgQzIgMDMgMkUgNUMgRTggQTMgOiAuLi4uWC4iLi58Li4u
XC4uCjAzMjA6IEMxIDYxIDNDIDZCIDhEIDg3IEQ4IDhCICBCOCA1NyAyOCA1MCA2RiAxRCA0
NiA0RiA6IC5hPGsuLi4uLlcoUG8uRk8KMDMzMDogRjYgRTEgODUgQUMgQkIgODcgOUIgRTEg
IDBBIEFEIDk1IDZGIDgwIDREIDdBIEY0IDogLi4uLi4uLi4uLi5vLk16LgowMzQwOiA3MiBB
MCBGRCA2QSA1MyA3OSA3OSA4QSAgMTIgN0IgNEUgRkIgMDAgMDAgMDAgODAgOiByLi5qU3l5
Li57Ti4uLi4uCjAzNTA6IDJGIEY2IDU2IDg2IDFFIEVDIDgwIDE5ICAwRCA3QyAzNyA4RCBD
MiA3QiA4NiAyMyA6IC8uVi4uLi4uLnw3Li57LiMKMDM2MDogQjUgMkYgQzIgQ0YgNUYgNkQg
QTcgRDQgIDk5IDMxIEY1IDU2IDVEIDc0IEI1IDRDIDogLi8uLl9tLi4uMS5WXXQuTAowMzcw
OiA4NyA2NiBGMSBDNiBGOCAxMSBGMiAwQiAgRjMgREIgQ0QgREYgNUIgMUUgQzggQzkgOiAu
Zi4uLi4uLi4uLi5bLi4uCjAzODA6IDJBIDI1IDgwIEJCIDU3IDdCIDEzIDUwICA5MSAwOCBE
QiA2MCBCNiAwQyA4OCA4NiA6IColLi5Xey5QLi4uYC4uLi4KMDM5MDogNUYgOUYgMjYgNzgg
NTMgQkYgMEIgQzMgIDFGIDg5IDg2IDZDIDZFIDg5IEZBIEEwIDogXy4meFMuLi4uLi5sbi4u
LgowM2EwOiA5NSA3MSBCRiA4QSAyRiBGNSBCNCBGOSAgRTQgNjYgNjEgRUMgOEIgQzYgMEEg
RkIgOiAucS4uLy4uLi5mYS4uLi4uCjAzYjA6IDg3IDY2IDBBIEY2IDQxIDlEIDdEIDM3ICBE
RCA3NCAxQSAxMyA1RSAzNiBBOSA0OSA6IC5mLi5BLn03LnQuLl42LkkKMDNjMDogNDggQjcg
OUIgQjggQ0UgNDIgRTcgRTAgIDM5IDc0IDQ3IEVEIDE2IDQzIDI4IEE2IDogSC4uLi5CLi45
dEcuLkMoLgowM2QwOiAwMCAwMCAwMCAzNyAwMCAwMCAwMCAwNyAgNzMgNzMgNjggMkQgNjQg
NzMgNzMgMDAgOiAuLi43Li4uLnNzaC1kc3MuCjAzZTA6IDAwIDAwIDI4IEJEIEIwIDI3IDY5
IDc0ICA5OSBDRCAyMyBBNSBDMCA5NSA2MSAwMCA6IC4uKC4uJ2l0Li4jLi4uYS4KMDNmMDog
QzMgREMgQjQgNzYgRkEgNUQgNEYgNjggIDRFIEI1IDc3IDY2IDAxIDQ1IDQ1IDZGIDogLi4u
di5dT2hOLndmLkVFbwowNDAwOiBERiBBRSA2NyBDNSA3NSBCRCBBMyAxOCAgQkYgMjkgNEEg
OUUgRkUgQUUgQjggQjAgOiAuLmcudS4uLi4pSi4uLi4uCj0+IGxpYnNzaDJfdHJhbnNwb3J0
X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjQxNjgxIFRy
YW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90
cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxMDE0IGJ5dGVzKQowMDAwOiAxRiAwMCAwMCAwMyAz
MiAwMCAwMCAwMCAgMDcgNzMgNzMgNjggMkQgNjQgNzMgNzMgOiAuLi4uMi4uLi5zc2gtZHNz
CjAwMTA6IDAwIDAwIDAxIDAxIDAwIERBIDU2IDZEICA0NSBFMyAzNiAzOSBGNCBGNiBBMSA4
OSA6IC4uLi4uLlZtRS42OS4uLi4KMDAyMDogRjkgREIgMTcgM0IgNzAgODMgRTEgRTQgIDE4
IDhGIDU3IEE3IDNGIDhGIEJBIEU3IDogLi4uO3AuLi4uLlcuPy4uLgowMDMwOiBBNCA3MiBE
QiBGQiAwNiBGRSA1NSA0MiAgQjYgQjQgNDYgMzcgN0UgQzggMkEgNjMgOiAuci4uLi5VQi4u
Rjd+LipjCjAwNDA6IDcyIDA5IEM3IEYyIDJEIDg1IDgxIDZBICBFQiAxRSA4QyBDOSA0RCA2
NCAyMCBGNiA6IHIuLi4tLi5qLi4uLk1kIC4KMDA1MDogMzggNTcgOUMgRDUgNDkgNEYgNzcg
NzkgIDY2IDZCIDYyIDg1IDFCIDQxIDI1IEU4IDogOFcuLklPd3lma2IuLkElLgowMDYwOiA2
MSBCNiBEOSBDRiAxNCAwRCBGQiBERCAgRkEgNjIgMDcgRkYgRUQgMkIgMkQgQjMgOiBhLi4u
Li4uLi5iLi4uKy0uCjAwNzA6IDcxIEFBIDFBIDBCIDE2IDdDIEY1IDY4ICAxNSAzNyBDMiBD
QyA1MSBFNyA0RSA1OSA6IHEuLi4ufC5oLjcuLlEuTlkKMDA4MDogOTIgODAgRUQgODUgQjcg
MjkgREQgQTIgIDY0IDVGIEI3IDg5IDNCIDk2IDIyIDA1IDogLi4uLi4pLi5kXy4uOy4iLgow
MDkwOiA1MyA1NyAwRiA1NyBBQyA2NCA1NCBERiAgMTEgOTUgNTggNkIgNzUgNkIgQkUgRjUg
OiBTVy5XLmRULi4uWGt1ay4uCjAwYTA6IENCIDBFIEMwIDk0IDAwIEE5IDNDIERCICA2MyBF
RiBBNiBDMSBEMyBDMSAyQyBFNyA6IC4uLi4uLjwuYy4uLi4uLC4KMDBiMDogMjAgRTQgRTAg
OEEgN0MgNDIgMzAgM0UgIDRBIEE2IDc5IDFDIDQzIEE4IDk3IEQ2IDogIC4uLnxCMD5KLnku
Qy4uLgowMGMwOiAyQSA0MSAyRCAxRiBERSA1QSBGOSAxRCAgNkMgQTggMEIgNTYgNUIgQUIg
QkQgMUYgOiAqQS0uLlouLmwuLlZbLi4uCjAwZDA6IDUwIENFIDc0IDQwIEFDIDlDIDk3IEE5
ICBDOSBCMiA1MiA2QSAzOSAwRCBCOCA4MyA6IFAudEAuLi4uLi5SajkuLi4KMDBlMDogMTcg
NDkgNTkgQ0EgRUQgRkEgMUIgRTAgIEIxIEEwIDZBIEU2IEJEIDMzIDhFIDlDIDogLklZLi4u
Li4uLmouLjMuLgowMGYwOiBDNiBDMiBEMCA4MCBBNSA2MiBEOCA1RCAgNDYgN0EgMTMgRDEg
M0YgNDggNzcgMjkgOiAuLi4uLmIuXUZ6Li4/SHcpCjAxMDA6IDEyIDgxIDc3IEM3IDAxIDdC
IDZDIEUxICBCNyBBRiA1NiBFQyA2RCBDMSBFMSBDRSA6IC4udy4ue2wuLi5WLm0uLi4KMDEx
MDogNzUgRUMgQjAgN0YgNzcgMDAgMDAgMDAgIDE1IDAwIEYxIDdDIDJCIDU1IDk3IEJDIDog
dS4uLncuLi4uLi58K1UuLgowMTIwOiAwNiA1RiA2MiBEMCA5QSA2QiBGRCA0RCAgQUEgRjMg
NUEgRTMgQjUgMTcgMDAgMDAgOiAuX2IuLmsuTS4uWi4uLi4uCjAxMzA6IDAxIDAwIDNFIEY5
IDg2IEJCIDMxIDVCICAyQSA5OSA0OCAwMSBBMCAxNSA1MSAwQyA6IC4uPi4uLjFbKi5ILi4u
US4KMDE0MDogQUYgNDUgRDMgN0YgMTEgMjkgMzggNDggIDcwIDBEIDJFIENGIDBGIDc4IEQ3
IDJGIDogLkUuLi4pOEhwLi4uLnguLwowMTUwOiBGMSA4RCA3MCAzRiA1NyBCMiAzOSA5MiAg
NzAgNEQgMzMgQTQgMkYgRDYgMTYgQTIgOiAuLnA/Vy45LnBNMy4vLi4uCjAxNjA6IDA3IDcy
IDk1IDk3IDE5IEZBIDU0IDU2ICA3NSAxRSA5RSA1QyBDQSBDOCBENCA2QiA6IC5yLi4uLlRW
dS4uXC4uLmsKMDE3MDogNjkgNTkgMkEgMzkgMzcgRjkgQUQgRTYgIDI1IEQxIDI4IDk2IEU3
IEQwIEZBIDUxIDogaVkqOTcuLi4lLiguLi4uUQowMTgwOiA3OCBFMCA1MyBDRSBFMCAyMCBG
MyA3NCAgMzQgNzMgNjIgMTggRTggMkUgNUYgMzkgOiB4LlMuLiAudDRzYi4uLl85CjAxOTA6
IDlFIDAyIEFCIEJEIDVBIDY4IEU5IDlGICBFOSA3RCBBRCA3MSBCMCA0NiAzNSBCQSA6IC4u
Li5aaC4uLn0ucS5GNS4KMDFhMDogNjMgQUIgQUUgQUMgMDIgRDYgODggNzMgIDY3IDQ1IDQ2
IEFCIDBGIDNBIEM5IDU2IDogYy4uLi4uLnNnRUYuLjouVgowMWIwOiBCMiA3MiA5QyAwRSA4
QyBCQiBERCAyMyAgMjAgOTAgRTMgODAgRTMgNEYgNjUgRUMgOiAuci4uLi4uIyAuLi4uT2Uu
CjAxYzA6IEY0IEU2IDg1IEJBIDA4IEVGIDkwIDVFICBGMiAwNSBCRSAwMSA4NSA0QyA1RiBB
MCA6IC4uLi4uLi5eLi4uLi5MXy4KMDFkMDogMDQgNTAgNTUgNzkgMUEgQ0YgRjggNTEgIDk5
IEYzIDE0IDg1IEZFIERCIDM0IDQ1IDogLlBVeS4uLlEuLi4uLi40RQowMWUwOiAxMyA4OCA1
RSBGRiA5NSBGOSBBRiAxNiAgRUQgMkEgMkMgRTggQTQgRTEgRTQgNTIgOiAuLl4uLi4uLi4q
LC4uLi5SCjAxZjA6IDU3IDA3IDM2IDc0IEUyIDQ0IEZFIEE3ICA5QyAxNCA4NSAwQyBCMCBF
NSAzMiA0NSA6IFcuNnQuRC4uLi4uLi4uMkUKMDIwMDogNTggODEgQ0MgQjggMTMgNjMgMkQg
NzkgIEMxIDg5IEM0IDVCIEMxIDc4IEY1IDA2IDogWC4uLi5jLXkuLi5bLnguLgowMjEwOiA0
NyBCOCAwNSBFNSA2RiA5OCAwRSBDQSAgMjYgNzAgMTUgNEUgODYgNEQgMEIgRUEgOiBHLi4u
by4uLiZwLk4uTS4uCjAyMjA6IDBFIEVBIDNGIDdBIDE4IDhEIDEzIDE5ICA0OCAzRCA4RCA0
RSBFRSA0NSAyMiA2NyA6IC4uP3ouLi4uSD0uTi5FImcKMDIzMDogNkYgQjkgMDAgMDAgMDEg
MDEgMDAgQTYgIDA0IDk4IDkwIDFDIDcyIEVGIDc5IENBIDogby4uLi4uLi4uLi4uci55Lgow
MjQwOiBFNiA4QiA1MSA2QiA5MSBGNSAxOCAxRSAgQ0EgQ0YgREIgQUMgNjUgOTcgMDQgNjQg
OiAuLlFrLi4uLi4uLi5lLi5kCjAyNTA6IDhBIENFIEZGIDU2IDhDIDNBIDZGIDA4ICAzNSBE
NiA0QiAzQSBGMyBEQSA5NyBFMCA6IC4uLlYuOm8uNS5LOi4uLi4KMDI2MDogRTcgRjEgRjgg
MUIgRjggNDcgMTEgRkMgIDAxIDBFIDhGIDk1IDg0IDRDIDA4IDgzIDogLi4uLi5HLi4uLi4u
LkwuLgowMjcwOiA4MCA0MiBDRCAzMiA3QiA4NCAwRSAzMCAgMzQgODYgOEQgMTkgQTQgNEMg
RUYgQjcgOiAuQi4yey4uMDQuLi4uTC4uCjAyODA6IEE3IEQyIENDIDM4IDE0IDNDIEJDIDFB
ICAyNCBGRSA3MCBGRiBCRiBDNCA4NyBBOCA6IC4uLjguPC4uJC5wLi4uLi4KMDI5MDogRjMg
MzUgOTAgNjIgNzkgNTkgRjUgRUEgIDYyIDQ1IEU0IDE3IDU0IDBBIDkwIDQyIDogLjUuYnlZ
Li5iRS4uVC4uQgowMmEwOiAzNCA0MiBFMyAxMCAyOCBCRSBFQiA1NSAgOUQgMjcgRTEgNkYg
QzcgMTYgNTggRDggOiA0Qi4uKC4uVS4nLm8uLlguCjAyYjA6IDcxIDhGIEZCIDJEIERGIEYw
IEM1IEQ2ICA2NSAxQiAxMyAwQiA4MCBFQSA0MiA0NCA6IHEuLi0uLi4uZS4uLi4uQkQKMDJj
MDogMTQgQUYgMjggNjUgRDUgRkQgQ0YgQTggIDIxIDZFIDcyIDc1IEI1IDhCIDkxIDNBIDog
Li4oZS4uLi4hbnJ1Li4uOgowMmQwOiA3OSBBRCA4QiBFQSA3MiBDNiAzOSBGOCAgQjEgN0Eg
NzggRjYgQ0EgODMgRkMgNDEgOiB5Li4uci45Li56eC4uLi5BCjAyZTA6IDk1IDYyIDRCIEU4
IDUyIDQxIDhCIDBCICA0QiBERiAxQyBDNyA1QyBBMCBGRSBCRCA6IC5iSy5SQS4uSy4uLlwu
Li4KMDJmMDogNkIgQjcgM0EgMTkgQUYgNDQgMjggNjggIERDIDdBIDJCIDE5IEM5IDBEIEM4
IDU4IDogay46Li5EKGgueisuLi4uWAowMzAwOiAxMiAyMiAxNyA4QSA3QyBDMiAwMyAyRSAg
NUMgRTggQTMgQzEgNjEgM0MgNkIgOEQgOiAuIi4ufC4uLlwuLi5hPGsuCjAzMTA6IDg3IEQ4
IDhCIEI4IDU3IDI4IDUwIDZGICAxRCA0NiA0RiBGNiBFMSA4NSBBQyBCQiA6IC4uLi5XKFBv
LkZPLi4uLi4KMDMyMDogODcgOUIgRTEgMEEgQUQgOTUgNkYgODAgIDREIDdBIEY0IDcyIEEw
IEZEIDZBIDUzIDogLi4uLi4uby5Nei5yLi5qUwowMzMwOiA3OSA3OSA4QSAxMiA3QiA0RSBG
QiAwMCAgMDAgMDAgODAgMkYgRjYgNTYgODYgMUUgOiB5eS4ue04uLi4uLi8uVi4uCjAzNDA6
IEVDIDgwIDE5IDBEIDdDIDM3IDhEIEMyICA3QiA4NiAyMyBCNSAyRiBDMiBDRiA1RiA6IC4u
Li58Ny4uey4jLi8uLl8KMDM1MDogNkQgQTcgRDQgOTkgMzEgRjUgNTYgNUQgIDc0IEI1IDRD
IDg3IDY2IEYxIEM2IEY4IDogbS4uLjEuVl10LkwuZi4uLgowMzYwOiAxMSBGMiAwQiBGMyBE
QiBDRCBERiA1QiAgMUUgQzggQzkgMkEgMjUgODAgQkIgNTcgOiAuLi4uLi4uWy4uLiolLi5X
CjAzNzA6IDdCIDEzIDUwIDkxIDA4IERCIDYwIEI2ICAwQyA4OCA4NiA1RiA5RiAyNiA3OCA1
MyA6IHsuUC4uLmAuLi4uXy4meFMKMDM4MDogQkYgMEIgQzMgMUYgODkgODYgNkMgNkUgIDg5
IEZBIEEwIDk1IDcxIEJGIDhBIDJGIDogLi4uLi4ubG4uLi4ucS4uLwowMzkwOiBGNSBCNCBG
OSBFNCA2NiA2MSBFQyA4QiAgQzYgMEEgRkIgODcgNjYgMEEgRjYgNDEgOiAuLi4uZmEuLi4u
Li5mLi5BCjAzYTA6IDlEIDdEIDM3IEREIDc0IDFBIDEzIDVFICAzNiBBOSA0OSA0OCBCNyA5
QiBCOCBDRSA6IC59Ny50Li5eNi5JSC4uLi4KMDNiMDogNDIgRTcgRTAgMzkgNzQgNDcgRUQg
MTYgIDQzIDI4IEE2IDAwIDAwIDAwIDM3IDAwIDogQi4uOXRHLi5DKC4uLi43LgowM2MwOiAw
MCAwMCAwNyA3MyA3MyA2OCAyRCA2NCAgNzMgNzMgMDAgMDAgMDAgMjggQkQgQjAgOiAuLi5z
c2gtZHNzLi4uKC4uCjAzZDA6IDI3IDY5IDc0IDk5IENEIDIzIEE1IEMwICA5NSA2MSAwMCBD
MyBEQyBCNCA3NiBGQSA6ICdpdC4uIy4uLmEuLi4udi4KMDNlMDogNUQgNEYgNjggNEUgQjUg
NzcgNjYgMDEgIDQ1IDQ1IDZGIERGIEFFIDY3IEM1IDc1IDogXU9oTi53Zi5FRW8uLmcudQow
M2YwOiBCRCBBMyAxOCBCRiAyOSA0QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAuLi4uKUoKW2xpYnNzaDJdIDAuNjQxODQ3IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMzEg
cmVjZWl2ZWQsIGxlbmd0aD0xMDE0CltsaWJzc2gyXSAwLjY0MTg1MCBUcmFuc3BvcnQ6IExv
b2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAzMQpbbGlic3NoMl0gMC42NDE4NzMgS2V5IEV4
OiBTZXJ2ZXIncyBNRDUgRmluZ2VycHJpbnQ6IGU3OjA0OjhiOmZmOmRkOjYzOjQ0OmEzOmFj
OmIwOmI3OjM5OmYxOjAxOjVkOmE1CltsaWJzc2gyXSAwLjY0MTg4NCBLZXkgRXg6IFNlcnZl
cidzIFNIQTEgRmluZ2VycHJpbnQ6IDhlOmZmOjlmOmFkOjU5OmJiOjI4OjBkOmNlOmJkOjk2
OjFjOjgwOjU2OjdiOjNhOmRmOjY1OmZkOmQyCltsaWJzc2gyXSAwLjY0MzY5OCBLZXkgRXg6
IFNlbmRpbmcgTkVXS0VZUyBtZXNzYWdlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs
YWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjY0MzcxOCBTb2NrZXQ6IFNlbnQgMTYv
MTYgYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgp
ICgxNiBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMEEgMTUgOTggMzIgIENEIDY4IEY3IDhB
IDJDIDY1IDZEIDdCIDogLi4uLi4uLjIuaC4uLGVtewpbbGlic3NoMl0gMC42NDM3MjcgVHJh
bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMjEKW2xpYnNzaDJdIDAuNjQz
NzMxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9u
IGtleXMKW2xpYnNzaDJdIDAuNjQzOTE5IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVz
IHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHJhdyAoMzIgYnl0
ZXMpCjAwMDA6IDAwIDAwIDAwIDBDIDA2IDAyIDAwIDAwICAwMCAwMCBDQyA2NiA0OSBBMSBF
OSA3RCA6IC4uLi4uLi4uLi4uZkkuLn0KMDAxMDogMDAgMDAgMDAgMEMgMEEgMTUgMzIgOTEg
IENEIDA5IDA1IDJBIEM0IDEyIDFFIEE3IDogLi4uLi4uMi4uLi4qLi4uLgo9PiBsaWJzc2gy
X3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAwIDAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4uCltsaWJzc2gyXSAw
LjY0Mzk0MSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQsIGxlbmd0aD01Cj0+
IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykKMDAwMDogMTUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLgpbbGlic3No
Ml0gMC42NDM5NTEgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMSByZWNlaXZlZCwgbGVuZ3Ro
PTEKW2xpYnNzaDJdIDAuNjQzOTU1IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m
IHR5cGU6IDIxCltsaWJzc2gyXSAwLjY0Mzk1OSBLZXkgRXg6IFJlY2VpdmVkIE5FV0tFWVMg
bWVzc2FnZQpbbGlic3NoMl0gMC42NDM5NjUgS2V5IEV4OiBzZXNzaW9uX2lkIGNhbGN1bGF0
ZWQKW2xpYnNzaDJdIDAuNjQzOTg0IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQg
S2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNjQ0MDAwIEtleSBFeDogU2VydmVyIHRvIENs
aWVudCBJViBhbmQgS2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNjQ0MDA2IEtleSBFeDog
Q2xpZW50IHRvIFNlcnZlciBITUFDIEtleSBjYWxjdWxhdGVkCltsaWJzc2gyXSAwLjY0NDAx
MSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZApbbGlic3No
Ml0gMC42NDQwMTMgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVyIGNvbXByZXNzaW9uIGluaXRp
YWxpemVkCltsaWJzc2gyXSAwLjY0NDAxNiBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgY29t
cHJlc3Npb24gaW5pdGlhbGl6ZWQKW2xpYnNzaDJdIDAuNjQ0MDI5IFRyYW5zcG9ydDogUmVx
dWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs
YWluICgxNyBieXRlcykKMDAwMDogMDUgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDcz
IDY1IDcyIDYxIDc1IDc0IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjY0
NDA2MiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90
cmFuc3BvcnRfd3JpdGUgc2VuZCgpICg1MiBieXRlcykKMDAwMDogREQgREMgODIgRTUgNkIg
NkMgRDUgRDIgIEFEIDNCIDNCIERGIEVGIEIxIDAzIDdEIDogLi4uLmtsLi4uOzsuLi4ufQow
MDEwOiA0OCBDNyBBOSAzRCAzQiA1NCA4MCAxRiAgMDQgQzIgMDYgMjkgOEUgMzkgQTkgRUYg
OiBILi49O1QuLi4uLikuOS4uCjAwMjA6IDc3IEEzIDJDIEQ4IDc1IDQ0IEIwIENEICAwOSA1
QyA4QiA2RiA2MyAwRiBCMyBDNCA6IHcuLC51RC4uLlwub2MuLi4KMDAzMDogQjQgNDIgODMg
MEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLkIuLgpbbGlic3No
Ml0gMC42NDQwNzggVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpb
bGlic3NoMl0gMC42NDQyOTQgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1
MDU5MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAw
MDogRjMgREQgRDUgOTAgM0UgRkYgMjUgN0EgIDAxIDlGIDNCIDE2IERGIDc2IDlFIDJEIDog
Li4uLj4uJXouLjsuLnYuLQowMDEwOiBCMSBGMCA5NSBBRSBFRCAwQiA0QSAxNCAgMDMgNTEg
NzAgODEgQTYgRTQgRjUgOTggOiAuLi4uLi5KLi5RcC4uLi4uCjAwMjA6IDJCIDZEIDcxIDkw
IDk2IDk3IDE3IDk4ICBDNyA0NiA5NiA0NyA2NiAzQSAyQiBGOSA6ICttcS4uLi4uLkYuR2Y6
Ky4KMDAzMDogNDAgNTMgNUMgQzMgQTIgQzEgMDcgREQgIEVGIDFFIEVCIDJDIDdEIDYyIDQz
IEU3IDogQFNcLi4uLi4uLi4sfWJDLgowMDQwOiA0NyBFOSA5MCBDNiBBNSBDMyBFOCBCMSAg
RDkgMTEgRTMgMEQgRjQgM0YgOTMgODIgOiBHLi4uLi4uLi4uLi4uPy4uCjAwNTA6IEZBIDIw
IDQ1IDg1IDUwIEU3IDVFIDI4ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4gRS5QLl4o
Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIg
MDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4K
W2xpYnNzaDJdIDAuNjQ0MzM1IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwg
bGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykK
MDAwMDogMDYgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDczIDY1IDcyIDYxIDc1IDc0
IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjY0NDM1NCBUcmFuc3BvcnQ6
IFBhY2tldCB0eXBlIDYgcmVjZWl2ZWQsIGxlbmd0aD0xNwpbbGlic3NoMl0gMC42NDQzNTcg
VHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpGaW5nZXJwcmludDog
OEUgRkYgOUYgQUQgNTkgQkIgMjggMEQgQ0UgQkQgOTYgMUMgODAgNTYgN0IgM0EgREYgNjUg
RkQgRDIgCltsaWJzc2gyXSAwLjY0NDQwOCBVc2VyYXV0aDogQXR0ZW1wdGluZyB0byBsb2dp
biB1c2luZyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93
cml0ZSBwbGFpbiAoNDMgYnl0ZXMpCjAwMDA6IDMyIDAwIDAwIDAwIDAzIDZEIDcxIDcxICAw
MCAwMCAwMCAwRSA3MyA3MyA2OCAyRCA6IDIuLi4ubXFxLi4uLnNzaC0KMDAxMDogNjMgNkYg
NkUgNkUgNjUgNjMgNzQgNjkgIDZGIDZFIDAwIDAwIDAwIDA4IDcwIDYxIDogY29ubmVjdGlv
bi4uLi5wYQowMDIwOiA3MyA3MyA3NyA2RiA3MiA2NCAwMCAwMCAgMDAgMDAgMDcgICAgICAg
ICAgICAgICAgOiBzc3dvcmQuLi4uLgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFp
bjIgKDcgYnl0ZXMpCjAwMDA6IDZEIDcxIDcxIDMyIDMwIDMwIDM1ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IG1xcTIwMDUKW2xpYnNzaDJdIDAuNjQ0NDM4IFNvY2tldDogU2Vu
dCA4NC84NCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBz
ZW5kKCkgKDg0IGJ5dGVzKQowMDAwOiBGQiBBNyBCNSBEMSA3MyA4OCBDNiA2QyAgNUYgNDQg
MkQgODMgMDYgMEMgODEgOTIgOiAuLi4ucy4ubF9ELS4uLi4uCjAwMTA6IDA4IDI0IDcwIDY1
IDAwIDIwIEYyIDMzICA5QyA3NSAzNyBGQiAzMSA0RCBCMyBCNiA6IC4kcGUuIC4zLnU3LjFN
Li4KMDAyMDogRDcgMTYgQkQgQ0EgNjQgNDYgNEUgOEEgIDI0IDg3IDc5IDNFIEY3IEIzIDZF
IDA3IDogLi4uLmRGTi4kLnk+Li5uLgowMDMwOiA5MSBBMyBERSA4MSBCNiAxNCBGNSA3NCAg
RUUgQzggNUQgQzAgREIgRDMgRTMgODQgOiAuLi4uLi4udC4uXS4uLi4uCjAwNDA6IEMwIEE0
IEM4IEQyIDQyIEM5IEIyIEI5ICA0NSBDMCAyRSBCRSAzRSBDNSA3QiA3OCA6IC4uLi5CLi4u
RS4uLj4ue3gKMDA1MDogQUYgQ0YgQ0EgQTUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogLi4uLgpbbGlic3NoMl0gMC42NDQ0NTkgVHJhbnNwb3J0OiBMb29raW5n
IGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xpYnNzaDJdIDAuNjQ0NDYxIFRyYW5zcG9ydDog
TG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDUxCltsaWJzc2gyXSAwLjY0NDQ2NCBUcmFu
c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA2MApbbGlic3NoMl0gMC42NDQ0
NjggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZwpbbGlic3NoMl0g
MC42NDU2MTQgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xp
YnNzaDJdIDAuNjQ1NjIwIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6
IDUxCltsaWJzc2gyXSAwLjY0NTYyNCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv
ZiB0eXBlOiA2MApbbGlic3NoMl0gMC42NDU2MjkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4
NCBieXRlcyB0byAweDUwNTkxOCswCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcg
KDEwOTYgYnl0ZXMpCjAwMDA6IDIyIDY0IEFDIEI4IDQ0IEFCIEFCIEM1ICA1MCBBOCAwQyBD
MSAxRCBENSA3RiAzNiA6ICJkLi5ELi4uUC4uLi4uLjYKMDAxMDogOUEgRDEgRjQgRUYgNDgg
OEUgNkIgNEMgIDVDIENCIDQzIDE1IEU1IDFBIENEIDVEIDogLi4uLkgua0xcLkMuLi4uXQow
MDIwOiAxNCAxMyBFMCA3NSA4MCA0NCA1MCA3MiAgQ0UgNkUgREIgNEQgMTMgQTYgNTkgNDQg
OiAuLi51LkRQci5uLk0uLllECjAwMzA6IDJFIDkwIEUyIDY0IDM1IDVEIEI5IDA2ICBCQyAx
QiBBQiA4NiBCRCA4MSAwRiBFRCA6IC4uLmQ1XS4uLi4uLi4uLi4KMDA0MDogNTAgMEQgOUQg
RTggNUUgMEIgQjMgNTcgIDAxIDBBIDk2IDk4IEY3IEI3IEJBIDdCIDogUC4uLl4uLlcuLi4u
Li4uewowMDUwOiBFRiAyMSA0MiBCQyAzMyBCRCA2MCA0QyAgQjggRkUgNTUgMzIgOTUgNzAg
OUMgNDMgOiAuIUIuMy5gTC4uVTIucC5DCjAwNjA6IDQ2IDk4IEM4IDA2IENBIEY4IDA2IDk1
ICAxMCA3OCBBRCBCMiA1QiBBNSA4QyA0RCA6IEYuLi4uLi4uLnguLlsuLk0KMDA3MDogNDkg
MjEgQ0UgMTEgQ0EgODYgNEUgNTAgIEJBIEJCIEM2IDk3IDg4IDAyIDE0IDhGIDogSSEuLi4u
TlAuLi4uLi4uLgowMDgwOiBGNyA1MCA1MSA0QSAzNCBGMiA4MyBENyAgMjUgQ0YgQ0QgMjcg
MUUgQkIgMjQgRUQgOiAuUFFKNC4uLiUuLicuLiQuCjAwOTA6IDM5IEU3IDI1IDZEIEM0IDE0
IDIzIDkyICBFNSBBNSA3MiAxNyA3RSAxRiBFRiBFMiA6IDkuJW0uLiMuLi5yLn4uLi4KMDBh
MDogNTkgNTQgN0UgODEgNzIgMkIgNjkgRUEgIERDIERCIDA3IENDIDdEIDU3IDYzIDY2IDog
WVR+LnIraS4uLi4ufVdjZgowMGIwOiA1RiA2RSA2NSAxNyA0RCAyMCA5RCBGMyAgMUMgMTYg
OTMgMjEgREQgMDUgQjcgRTIgOiBfbmUuTSAuLi4uLiEuLi4uCjAwYzA6IEVEIDU3IDlBIEI2
IDhBIDk1IDY1IEE3ICAwRSBENCAwMyBFRiBBNCBBMyAyMCAzQiA6IC5XLi4uLmUuLi4uLi4u
IDsKMDBkMDogMDMgRjEgN0QgOEMgQUQgQ0IgMzAgNEMgIDhCIEY0IDNGIEZFIDREIDQ3IDVG
IDQ2IDogLi59Li4uMEwuLj8uTUdfRgowMGUwOiBERSA2QSA4RSAyQyA1OSBDQiBBMCBFMiAg
M0QgRkQgRDggODUgN0IgQTYgQjkgQUUgOiAuai4sWS4uLj0uLi57Li4uCjAwZjA6IDA0IDdB
IDE2IDM1IDAwIEI3IDE3IDQ2ICA1NiAxMCBCMCBFQSBBQiBDMyAwOCBCMiA6IC56LjUuLi5G
Vi4uLi4uLi4KMDEwMDogRjYgMEEgNzYgQzYgRjcgQUYgNUYgOEUgIDcyIEZEIDA2IDYzIDBB
IDM4IEFCIEU0IDogLi52Li4uXy5yLi5jLjguLgowMTEwOiBBQSBBNyA0MCA5NCA5RSA1RiBB
NCA3QyAgQUQgQ0IgNjIgMzggMjUgMTkgNDUgOUQgOiAuLkAuLl8ufC4uYjglLkUuCjAxMjA6
IDZDIEQyIEM3IEJDIERDIDREIDZFIDEwICBERSA3MSBCOCBGOSBCMiA1NSAzMiBGOCA6IGwu
Li4uTW4uLnEuLi5VMi4KMDEzMDogOEQgODAgREEgREYgNjEgNTQgQjcgNzEgIERBIDJBIDAz
IEZFIEY5IDA3IEI1IDY0IDogLi4uLmFULnEuKi4uLi4uZAowMTQwOiBDQiA3NyBCMSBEQiBE
QiAzOSAwOCBGMiAgQTggNjMgNDkgQkUgOTYgMUQgMEEgRDQgOiAudy4uLjkuLi5jSS4uLi4u
CjAxNTA6IDAyIEZGIEM1IDMxIDFCIDcwIEFGIDgxICAzMiAwMyAzNSAwQSBDRCAwMCBFMCA4
MCA6IC4uLjEucC4uMi41Li4uLi4KMDE2MDogQUQgN0YgOEEgOUMgREIgOTAgMkIgRTMgIEMx
IDUyIDQ1IDE4IDlGIDc0IDM3IDkxIDogLi4uLi4uKy4uUkUuLnQ3LgowMTcwOiBGNCA2OCBC
RSA2QiAwQiBGRSA3MSBCMCAgNDMgQkMgMzkgMDYgMkUgODYgNzYgRUUgOiAuaC5rLi5xLkMu
OS4uLnYuCjAxODA6IDRBIDVDIEMxIEUwIDg0IEE3IDgyIEJGICA1MSA2QSA0RCA1OCBGNCAw
MSAzMCBDQiA6IEpcLi4uLi4uUWpNWC4uMC4KMDE5MDogNEQgQUYgOEMgRTIgRDcgM0UgNzIg
MDMgIDM0IDg3IDhEIDhDIDQzIEIyIEZDIDg5IDogTS4uLi4+ci40Li4uQy4uLgowMWEwOiAy
NiAwNCA5NCA4OSBEMSAzRiBEOCBGOCAgQUEgQUQgNTUgODAgMzggMDkgQUQgQ0IgOiAmLi4u
Lj8uLi4uVS44Li4uCjAxYjA6IDc2IDY2IDI4IDhGIDVDIDE3IDkzIDMyICA5QyA4RSBCQSBD
NiAzNiAyRSAxMSBGOSA6IHZmKC5cLi4yLi4uLjYuLi4KMDFjMDogODQgNTggODMgMzggMEQg
OEUgQjIgMUEgIEYyIDhGIEIyIEQwIDg0IDA4IDFFIEY2IDogLlguOC4uLi4uLi4uLi4uLgow
MWQwOiBGMCBCQiA0MyBBRiBFQiAxMiBENiA5MCAgN0MgMUQgQTggNzUgNjQgREEgNEYgNkQg
OiAuLkMuLi4uLnwuLnVkLk9tCjAxZTA6IDJFIEQwIEY0IDRGIDk2IEQ3IDBEIDc2ICBBQSA3
MyBEOCA3QyA0MSBGNyAxNSA4NCA6IC4uLk8uLi52LnMufEEuLi4KMDFmMDogQkYgMDkgNjMg
NjQgQTggODggQUIgNUUgIDlDIDY2IEM5IEMzIDAyIDUxIDA1IEE1IDogLi5jZC4uLl4uZi4u
LlEuLgowMjAwOiBDMSAxRSBGNiA0NiAxRCA1NSBENiA5OCAgNEYgMEUgRkEgRTcgRDUgQTkg
MEMgNkUgOiAuLi5GLlUuLk8uLi4uLi5uCjAyMTA6IDA3IEYzIDkwIDgwIEE5IEZDIDgwIDEz
ICBBQSA3QSBGMCA4QiAyOSA3OCA5NCA1QiA6IC4uLi4uLi4uLnouLil4LlsKMDIyMDogMjMg
Q0IgNEEgOTQgNjAgMEEgQjcgNjEgIDgyIDFCIEE2IEFGIDM2IDU4IEJGIDExIDogIy5KLmAu
LmEuLi4uNlguLgowMjMwOiAzMiAyMiAzQyBCOSA4NCA1MSAzRCA4NCAgQ0YgNzkgNTggREYg
M0YgOTggNzcgNDQgOiAyIjwuLlE9Li55WC4/LndECjAyNDA6IDkzIEYyIEVFIDAzIEI5IDFE
IDNBIDhCICAxNSBCQiA5QyAyQSA2NiAyMyBDOCA1MSA6IC4uLi4uLjouLi4uKmYjLlEKMDI1
MDogQTggQkYgMEEgMTUgNDUgREQgNUMgQzYgIDlBIEVDIENEIEU0IDczIEI2IEMyIEM4IDog
Li4uLkUuXC4uLi4ucy4uLgowMjYwOiBENiBEMyBCNiA0QSAxNiA5OSBBQyAwMiAgQTAgMkEg
QzQgOTAgRkEgRDcgNjEgODMgOiAuLi5KLi4uLi4qLi4uLmEuCjAyNzA6IEY2IDE3IDQ1IDJF
IDMwIDg2IEI4IDU1ICA2OCA4RiBEOCBFNCA5NiA1MyA2MCBERCA6IC4uRS4wLi5VaC4uLi5T
YC4KMDI4MDogMUMgM0QgQzIgQjUgQUMgRUMgOTcgNUYgIDNDIEZEIDU1IDczIDE0IDRDIDY5
IDRGIDogLj0uLi4uLl88LlVzLkxpTwowMjkwOiA0QyBGQyAzMiBDQSBGNSA5NyA1NCBCOCAg
RDQgNzEgRkEgMTggREIgRjYgM0IgOUIgOiBMLjIuLi5ULi5xLi4uLjsuCjAyYTA6IEM0IDRD
IDJFIEQ1IEY3IDNDIEU2IDJEICA5OSBEQiBFRCA2MiA5MyAyNyA1MSA1QSA6IC5MLi4uPC4t
Li4uYi4nUVoKMDJiMDogN0YgRDIgNDQgNTEgOUYgMTAgNTIgMTcgIDhEIDYxIDUyIDREIEVD
IEI4IEU0IDE1IDogLi5EUS4uUi4uYVJNLi4uLgowMmMwOiA1OSBBNSA5MSAyMiBEQSAwQSAw
MCBEOCAgRTYgMzIgRUMgQ0UgOTEgNjcgOTcgMzUgOiBZLi4iLi4uLi4yLi4uZy41CjAyZDA6
IDJGIDQxIDY3IEMwIDdBIDc1IDc5IDQ4ICBCNSBGMiA2OCBDRiA3QiBENCBGMyA3OSA6IC9B
Zy56dXlILi5oLnsuLnkKMDJlMDogOUEgQkUgQkUgNTcgMkQgNkIgMzEgQTEgIDVFIDkzIDdE
IDk1IDgxIDc5IDg5IDcyIDogLi4uVy1rMS5eLn0uLnkucgowMmYwOiAzMyBBNCA3OSA0NSAz
NSAyMCBCOCA0RSAgQjIgNTEgM0IgQkIgMzcgNkIgNDMgMzggOiAzLnlFNSAuTi5ROy43a0M4
CjAzMDA6IDVGIDREIDc2IEYzIDlDIDdCIDMxIDU0ICAwQSBFRSA2QyBGNCBBQyA2RSAwMiA5
MCA6IF9Ndi4uezFULi5sLi5uLi4KMDMxMDogOTggQjggRjcgNTAgOUEgMzAgN0UgNzYgIDI2
IDFDIDQyIENEIENFIERCIEM2IEFBIDogLi4uUC4wfnYmLkIuLi4uLgowMzIwOiA4OSA0NiBB
MCAyNyBCMyBBNyA5NCA5NyAgQzcgRkMgNTcgQjUgM0IgRUEgRkEgODEgOiAuRi4nLi4uLi4u
Vy47Li4uCjAzMzA6IDk5IEU1IDBDIERGIDJCIEMyIDk0IDFBICAzRiAzRSBDQiBDMyA3OSBE
OCBBQSAzNCA6IC4uLi4rLi4uPz4uLnkuLjQKMDM0MDogODIgRkUgM0QgQzcgN0UgQzcgOTYg
REUgIDgzIEJFIDcyIEM4IDgxIEUyIEY3IEQ5IDogLi49Ln4uLi4uLnIuLi4uLgowMzUwOiBF
QSBERCBFOSAxRSA0OCBCQSA3QyA0NiAgOUIgODkgQTQgMzMgNjIgRjUgQzAgNUUgOiAuLi4u
SC58Ri4uLjNiLi5eCjAzNjA6IEE3IDdGIDEyIDZGIEU1IEI1IEE1IEJBICA5MyBDMyAzNSAy
NSBDMyBERCBDMCBERiA6IC4uLm8uLi4uLi41JS4uLi4KMDM3MDogMkQgNzcgMjAgQTAgODkg
NUQgMDkgOUMgIEFCIEZCIDcxIDgyIDJEIDYwIDcwIDg2IDogLXcgLi5dLi4uLnEuLWBwLgow
MzgwOiBCMCA3RSBBMiAzRSAzMyBBQSAxRSA2QSAgMDkgNzQgREYgNDAgNzAgNEMgNUQgMjUg
OiAufi4+My4uai50LkBwTF0lCjAzOTA6IEIwIDRDIDBCIEIzIENDIDkwIEU4IEYzICBENCAx
RiAzNCA0OCA5OSBDOSAwMyAwRiA6IC5MLi4uLi4uLi40SC4uLi4KMDNhMDogQUQgRkMgQzQg
QjcgNTkgMDEgQzUgOUMgIDU0IEMwIEQ4IDU5IDhCIDdDIDNGIDg1IDogLi4uLlkuLi5ULi5Z
Lnw/LgowM2IwOiA2QiA2NSBBNSAxMyBCNiBFOSBCMSA2NSAgREYgMDcgMDMgRUIgQjcgQzkg
RDcgOUUgOiBrZS4uLi4uZS4uLi4uLi4uCjAzYzA6IDg5IEFBIDQ4IEIxIDAwIEI2IDkzIDU5
ICA4NyAzQyBCRiA4MCBCMiBGMiBFMiA1NSA6IC4uSC4uLi5ZLjwuLi4uLlUKMDNkMDogNkIg
MjAgOUQgNzIgNTQgMjcgMzIgNUEgIDAxIDREIDkyIDFDIDJBIDRDIEEzIEEyIDogayAuclQn
MlouTS4uKkwuLgowM2UwOiA4OSA2OSBFOSAzNiA1QiA4QyA3QyA1NiAgNzIgQjUgOTQgRDIg
NkYgNUMgRjEgMEQgOiAuaS42Wy58VnIuLi5vXC4uCjAzZjA6IEJGIDAzIDdDIEUwIDk5IDlF
IDUwIDVFICA4MyBBRCAxMiAwRiBDNCBBQSA1MiAxQiA6IC4ufC4uLlBeLi4uLi4uUi4KMDQw
MDogQTQgNzIgNDMgMEEgREIgMzEgMEQgQzcgIDI5IEVBIDRBIEJBIDk0IDZGIDA3IEMwIDog
LnJDLi4xLi4pLkouLm8uLgowNDEwOiAyNyA5QSBGQyAyMCA5OSBGMiA2NyA1QiAgMjkgMTgg
NkEgQjcgMEEgQzQgM0IgOTUgOiAnLi4gLi5nWykuai4uLjsuCjA0MjA6IDFBIDg4IEQ3IDI0
IDY4IDFBIDFGIDY4ICAxOCA1MiBBMiA4RiBDNyA0NSBBOSA4MCA6IC4uLiRoLi5oLlIuLi5F
Li4KMDQzMDogMUUgQzYgREEgRDkgMDUgOEEgMTUgNDUgIEY0IEJFIEZDIDc3IDVGIDAyIDQ1
IDk1IDogLi4uLi4uLkUuLi53Xy5FLgowNDQwOiBDNSA0NyBBMSA5RCA5OSAxOCBGMSAyRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAuRy4uLi4uLQo9PiBsaWJzc2gyX3RyYW5zcG9y
dF9yZWFkKCkgcGxhaW4gKDEwMjggYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAzIEZGIEU3IDIx
IDUzICAyNCAzOSBBQyBFRiAzRCA1NiA5RSBFNyA6IC4uLi4uLiFTJDkuLj1WLi4KMDAxMDog
RTkgMzkgMTIgMzIgN0QgQjYgMkMgRDMgIDcyIEJEIEJGIDFGIDlBIDQ1IDA4IDVGIDogLjku
Mn0uLC5yLi4uLkUuXwowMDIwOiAxNiBBMSA2RiBDMCBFMiBBNyAxNiAwRSAgQ0EgRjcgNDcg
QjkgQzMgMDMgRjcgMjggOiAuLm8uLi4uLi4uRy4uLi4oCjAwMzA6IEY3IEE4IDU3IDRCIEU5
IDdCIDYyIDIwICAxMCA2QSAwMyAxMCA1OCBBQiA1QiBBQSA6IC4uV0sue2IgLmouLlguWy4K
MDA0MDogMDcgQjUgOTggRTEgNjcgRDUgODAgQ0YgIEEwIEMyIDdEIEYyIDk3IEQ4IEY0IEY2
IDogLi4uLmcuLi4uLn0uLi4uLgowMDUwOiA4NSA5MiAxMSBGMCA2RSBEOCBBQSA0MCAgOTEg
NTkgNTYgM0MgQkMgMDMgMkUgOTEgOiAuLi4ubi4uQC5ZVjwuLi4uCjAwNjA6IEE4IDI1IEE3
IEREIDE1IERBIEY1IDk1ICA5QSBFOCAyOCBDQiAzRSBCQiBENyA4MCA6IC4lLi4uLi4uLi4o
Lj4uLi4KMDA3MDogRTAgMDkgRjEgNDggODAgMzEgODAgNUMgIEQzIEMzIDBDIEI2IEU2IDcz
IENBIEVBIDogLi4uSC4xLlwuLi4uLnMuLgowMDgwOiBENiA3QyBBMyA4QiA3MCA3RCA1NiA1
OSAgQTUgRjQgQkQgNkIgMUMgMzQgRjkgMkEgOiAufC4ucH1WWS4uLmsuNC4qCjAwOTA6IEQ4
IEM0IDk1IDVEIEI3IDk1IEMwIDgzICA0RSBFNiA0RCA5RiBBMSAyQSA0OSA0QSA6IC4uLl0u
Li4uTi5NLi4qSUoKMDBhMDogMkYgOTAgNjMgOEQgREUgNkUgRjMgRkIgIDU1IDUzIDRCIEVE
IDNEIDdFIEZDIEIwIDogLy5jLi5uLi5VU0suPX4uLgowMGIwOiBGMiA1MiBFMCAwNCBDOCA3
NiA5NiBENCAgQTUgNUEgNjUgNjcgQTAgMEIgMEQgQzggOiAuUi4uLnYuLi5aZWcuLi4uCjAw
YzA6IDk3IEY4IDQ1IDY1IDg1IDcwIEI4IDNEICBGMSA3QyA3QiA5QiAxNCA0MSBGOCBBOSA6
IC4uRWUucC49Lnx7Li5BLi4KMDBkMDogNkIgM0MgRDYgM0MgQTUgNkQgMUEgQjUgIEY1IDBE
IEEwIDY1IDFCIDAzIDJDIEEyIDogazwuPC5tLi4uLi5lLi4sLgowMGUwOiAxMiAxNiA0NiBF
RiBEMiBEQSBFMCBFOCAgRTggNTAgMzQgMUUgOUIgNTYgMjYgQTIgOiAuLkYuLi4uLi5QNC4u
ViYuCjAwZjA6IDcyIDZFIENGIEY5IDUwIEQ2IEJEIDJFICBDOSAwMyAyQSBFNSA3QiAwRiA5
NyBEQiA6IHJuLi5QLi4uLi4qLnsuLi4KMDEwMDogMUEgRTEgRUUgREUgQkUgNDggNzcgMTcg
IDc2IENBIDc1IDIzIDk4IDlFIDRFIDVDIDogLi4uLi5Idy52LnUjLi5OXAowMTEwOiBDMCA0
QSAwMiAwQiAyNCBBOSAzNCA3OCAgMTcgM0IgQjUgODYgNTMgNDYgQjEgN0EgOiAuSi4uJC40
eC47Li5TRi56CjAxMjA6IDJGIDJBIDJBIDNGIDRGIDRGIDhGIEIyICA5NCA1NyBEOCBDQiBD
MyA0QSA4NSBBQyA6IC8qKj9PTy4uLlcuLi5KLi4KMDEzMDogODggNDcgNjYgNDUgNkEgMjIg
MjcgQTMgIDc3IEJFIDVEIDZCIDNBIDE3IDNGIEEwIDogLkdmRWoiJy53Ll1rOi4/LgowMTQw
OiAxRSBDRiA4QyA2NSA3RCBCRSAyQSBBMyAgQTMgQTYgNzEgRjQgNkEgNDggMkYgNzUgOiAu
Li5lfS4qLi4ucS5qSC91CjAxNTA6IEQ2IERCIDM5IDUwIDkzIEI3IEM0IDA2ICA2QyAzMCBC
MSBDOCAwQyAwRiAxRCAxNCA6IC4uOVAuLi4ubDAuLi4uLi4KMDE2MDogNEYgNzYgNUYgN0Qg
NkYgQ0YgOTQgREUgIDI2IDY5IEE5IEVGIDI5IENEIERFIDhGIDogT3ZffW8uLi4maS4uKS4u
LgowMTcwOiA2MiBFMCA4OCBFNyAwRiA5NCA0NyAxMCAgNDIgQTcgRDIgNUQgQzIgQTQgOEIg
NTQgOiBiLi4uLi5HLkIuLl0uLi5UCjAxODA6IENEIDA5IENEIEZEIEMzIDAwIEM4IDE5ICBB
QiBBRiAyMiBEQSBGMSA5NSA2RSBGMiA6IC4uLi4uLi4uLi4iLi4ubi4KMDE5MDogMkEgOTcg
NjQgMEMgQzYgRjQgQUIgRjAgIEU5IEEwIDU5IDhFIDRDIEMyIEMxIERBIDogKi5kLi4uLi4u
LlkuTC4uLgowMWEwOiAxQSBBMyBFOSA0NiA2OCBFMCAzRCBFOCAgOEIgQTAgRTAgQ0EgNzAg
MDYgRTggQjYgOiAuLi5GaC49Li4uLi5wLi4uCjAxYjA6IDQzIDE3IDZDIDdBIEEzIERGIEND
IDY0ICBGRCAyMiAwMCAxNiAxQiA5RiAxRiBDOSA6IEMubHouLi5kLiIuLi4uLi4KMDFjMDog
NTIgMEUgRDEgRjEgMkIgOTggNTggNkYgIDI2IDJBIEU2IDNEIDc5IDM1IDg5IDdGIDogUi4u
LisuWG8mKi49eTUuLgowMWQwOiA1MyA5QyBDQSAxNSAxNSA2NCBEQiAzNCAgMTUgQUUgMDUg
MzEgNDIgMzggQUEgOTkgOiBTLi4uLmQuNC4uLjFCOC4uCjAxZTA6IEE5IEUyIEZBIEZFIDMy
IDREIDBEIEI3ICAwRSBBRSBDMSA5OCBFOCBDNCAwMiBENCA6IC4uLi4yTS4uLi4uLi4uLi4K
MDFmMDogQ0EgNjkgNEEgNjAgODEgRTYgREMgQUQgIEZCIDA3IDZEIDVCIENEIDE1IERBIDRE
IDogLmlKYC4uLi4uLm1bLi4uTQowMjAwOiAwNiAyNSA5OSA2OSBENyAyOCBEMiA4NCAgNjkg
Q0YgQTAgQzQgOUIgMkEgMUIgQjcgOiAuJS5pLiguLmkuLi4uKi4uCjAyMTA6IDJGIDYxIDc2
IDkzIDk4IDkzIEZCIDlGICA5MyA1MCBFRSAwMCAzRCA5NCBCMSBFOSA6IC9hdi4uLi4uLlAu
Lj0uLi4KMDIyMDogNUUgMjEgMjAgQUUgMUQgNTEgMjEgQjQgIEI1IDAzIEM3IDdDIEZBIDZB
IEQwIDJGIDogXiEgLi5RIS4uLi58LmouLwowMjMwOiAxMCBDNCAzMyAwRSAzNCAwNCBGQyA0
NiAgNTAgQjAgOEMgNUMgN0YgMzIgQzkgRDcgOiAuLjMuNC4uRlAuLlwuMi4uCjAyNDA6IDc0
IDY2IDJBIEFDIDA4IEY3IDExIDM5ICA2RiBDOCAwNiAxNCAzMyBCRCAyOSBERiA6IHRmKi4u
Li45by4uLjMuKS4KMDI1MDogMzYgREQgNDkgMTggNDAgQjcgNjkgQkMgIDAxIEY4IDE2IDk0
IDM4IDJFIDVGIEMxIDogNi5JLkAuaS4uLi4uOC5fLgowMjYwOiAzMiAwQSBEOCBGRiBENCA2
QSAwOSA3MyAgNTYgOTkgNjkgRDYgRTUgNjkgQjEgNDIgOiAyLi4uLmouc1YuaS4uaS5CCjAy
NzA6IEM1IDA1IDAwIDZFIDE5IDY2IDQ5IDQ0ICA0RCBDNSA0RSAwNyBBNiBGQyAwNCAwNCA6
IC4uLm4uZklETS5OLi4uLi4KMDI4MDogNkEgMDUgNjQgNDAgQTUgQ0IgQTEgNjEgIEE0IDc5
IEVFIDFBIDc5IDdDIEExIDgzIDogai5kQC4uLmEueS4ueXwuLgowMjkwOiBCQSA5RiBDNyA2
QiAwNSBFNiAzOSBENCAgMTggOEUgQUIgMDIgQTggMTkgQUYgOEMgOiAuLi5rLi45Li4uLi4u
Li4uCjAyYTA6IDg4IEY0IDQ3IEY3IDQzIEYyIDNEIDFFICA5MSAxRiAwMSA5MSAzOCA1MiBB
QiA4NCA6IC4uRy5DLj0uLi4uLjhSLi4KMDJiMDogNTEgMzIgMzYgRjIgMzUgQzAgQUEgRDQg
IDgzIDdEIEQzIDk1IDk3IDNCIDI4IDY0IDogUTI2LjUuLi4ufS4uLjsoZAowMmMwOiA2MiA1
RCA2NiA5RSA0RCBEMSA4MyBFMyAgQzkgRkEgREMgMUMgRTggRTEgMEEgNjQgOiBiXWYuTS4u
Li4uLi4uLi5kCjAyZDA6IDcxIDBFIDUxIENDIDgyIEQzIEY2IDdBICA5RCBFMCAzQSA5MSAw
MCBENyBFNyA2QiA6IHEuUS4uLi56Li46Li4uLmsKMDJlMDogMEQgN0MgQkYgQTQgQzEgOTEg
OUYgOTkgIDU4IEM3IDQzIDEzIDA2IDZCIDI5IDA2IDogLnwuLi4uLi5YLkMuLmspLgowMmYw
OiBGRiAxMiBGOSBFNyBCOSA3NyBDMCBGMiAgMzkgMDQgMEUgMjIgM0UgNDIgMTIgMTkgOiAu
Li4uLncuLjkuLiI+Qi4uCjAzMDA6IDUwIDBDIDE5IEY5IDZEIDc2IDZBIDRCICA0RCAzNyBD
OCBGRSA0QyA3NiA5RCAwNSA6IFAuLi5tdmpLTTcuLkx2Li4KMDMxMDogQjggOTAgOUYgMEIg
NEQgOTcgMzYgQkIgIDcwIDYyIDg5IDkyIDhEIEMwIEUzIDdGIDogLi4uLk0uNi5wYi4uLi4u
LgowMzIwOiA4NCBFMiBBNyA1MiBFNyA5QiAxQyBFRiAgNTcgQjYgMzEgREEgREMgQTAgQTgg
NjUgOiAuLi5SLi4uLlcuMS4uLi5lCjAzMzA6IDE3IDVDIDMzIEREIEQ4IEUwIDA5IDVDICBE
QiBCQiBDMiA4QSAyNiA5RiA4NiA0NCA6IC5cMy4uLi5cLi4uLiYuLkQKMDM0MDogOTIgNUYg
MzQgODMgMDUgNTcgOTYgRkUgIDUwIDkzIEZCIDBCIDZBIDA0IDNGIEU4IDogLl80Li5XLi5Q
Li4uai4/LgowMzUwOiBGNyBGRSA0RSAzNSAyQiBFMSAzQiA1MCAgMkIgQzIgREEgNjUgRjgg
MjkgRTQgMkYgOiAuLk41Ky47UCsuLmUuKS4vCjAzNjA6IDBEIDk3IEVGIDI1IDlDIDM3IERD
IDNCICAwNiBEMyA1RCBGRCBBMSA1MiA2MyBEQSA6IC4uLiUuNy47Li5dLi5SYy4KMDM3MDog
QTggQjYgMDIgM0MgQjcgQTEgMjIgNkYgIENDIEMxIDQzIDQ1IEFCIDk2IDZBIDVDIDogLi4u
PC4uIm8uLkNFLi5qXAowMzgwOiA5OSA4NCBERCBERSA4RiBGRSBBNCBFNyAgNjQgNzkgMzEg
REUgN0YgQzYgMjIgQjIgOiAuLi4uLi4uLmR5MS4uLiIuCjAzOTA6IDgwIEE0IDJBIDk4IEM2
IDYwIDI1IEI4ICAzNiBDQiA2RCBDMSBCMyBGMCBDRCAwOSA6IC4uKi4uYCUuNi5tLi4uLi4K
MDNhMDogMDkgOTcgMUUgQTMgM0YgREQgMjkgQUIgIDRDIDNEIEM3IDkzIDZBIDM0IERDIDU2
IDogLi4uLj8uKS5MPS4uajQuVgowM2IwOiBFRiAxOSA2MyA1OCAzRCA3NiA3MyBGMCAgNDYg
NDIgNUEgM0EgRjEgQTMgMTMgOEQgOiAuLmNYPXZzLkZCWjouLi4uCjAzYzA6IENCIDE1IENE
IDgyIEYyIEM2IDIxIDBEICA2RSA5QSBEOCAyQyBFRCAxMCA0RCBDOSA6IC4uLi4uLiEubi4u
LC4uTS4KMDNkMDogMzUgQzUgN0YgMTMgQzQgRDIgODQgRjMgIEZFIDFEIDdDIEE3IEI4IDRB
IDc5IEVEIDogNS4uLi4uLi4uLnwuLkp5LgowM2UwOiBENCBFNyBFMCA3NSAzMCAwMCAwRCAz
QyAgQjkgOUQgMDQgMkYgN0QgNUEgN0EgMkEgOiAuLi51MC4uPC4uLi99WnoqCjAzZjA6IEFB
IDIzIEJCIEM4IEVBIDIyIEVCIDc1ICBCQSA2RiA0NyAwQyAzQiBBOSBEQyA1NiA6IC4jLi4u
Ii51Lm9HLjsuLlYKMDQwMDogNjAgRUIgNEEgMjEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogYC5KIQpbbGlic3NoMl0gMC42NDYwMDcgVHJhbnNwb3J0OiBQYWNr
ZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9MTAyOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9y
ZWFkKCkgcGxhaW4gKDEgYnl0ZXMpCjAwMDA6IDM0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IDQKW2xpYnNzaDJdIDAuNjQ2MDIwIFRyYW5zcG9y
dDogUGFja2V0IHR5cGUgNTIgcmVjZWl2ZWQsIGxlbmd0aD0xCltsaWJzc2gyXSAwLjY0NjAy
MyBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA1MgpbbGlic3NoMl0g
MC42NDYwMjYgVXNlcmF1dGg6IFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwK
W2xpYnNzaDJdIDAuNjQ2MDM1IFNDUDogT3BlbmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2
ZQpbbGlic3NoMl0gMC42NDYwMzggQ29ubjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzAK
W2xpYnNzaDJdIDAuNjQ2MDQwIENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQg
cGFjayAzMjc2OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMjQgYnl0ZXMp
CjAwMDA6IDVBIDAwIDAwIDAwIDA3IDczIDY1IDczICA3MyA2OSA2RiA2RSAwMCAwMCAwMCAw
MCA6IFouLi4uc2Vzc2lvbi4uLi4KMDAxMDogMDAgMDQgMDAgMDAgMDAgMDAgODAgMDAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4uLi4KW2xpYnNzaDJdIDAuNjQ2MDY0IFNv
Y2tldDogU2VudCA2OC82OCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gyX3RyYW5zcG9y
dF93cml0ZSBzZW5kKCkgKDY4IGJ5dGVzKQowMDAwOiBBMyBCMSBEQyA2NCA3NCBFRSA1RiAx
NSAgOTIgMTYgNUQgRkMgQkYgMEUgOUUgNjUgOiAuLi5kdC5fLi4uXS4uLi5lCjAwMTA6IDk3
IDgxIDg3IDk5IERBIDlCIDY4IEE5ICBFRiA3QiBFNCAwRCBDRCA2MyA2MiA1MSA6IC4uLi4u
LmguLnsuLi5jYlEKMDAyMDogRjkgNjQgMzkgRkQgQzAgNDAgQjIgMTYgIDM5IDFFIDUzIDAz
IDkyIDIyIDYxIDk2IDogLmQ5Li5ALi45LlMuLiJhLgowMDMwOiA2MCA0MCAzRSAxMCA0NSBD
RSAxMSAxQyAgRTIgRDkgODUgQkIgQUEgMjMgQkIgRUYgOiBgQD4uRS4uLi4uLi4uIy4uCjAw
NDA6IDU2IDAwIDUxIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IFYuUTEKW2xpYnNzaDJdIDAuNjQ2MDgyIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0
IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjY0NjA4NSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9y
IHBhY2tldCBvZiB0eXBlOiA5MgpbbGlic3NoMl0gMC42NDYwODggRmFpbHVyZSBFdmVudDog
LTM3IC0gV291bGQgYmxvY2sKW2xpYnNzaDJdIDAuNjQ2MDk1IEZhaWx1cmUgRXZlbnQ6IC0z
NyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwKW2xpYnNzaDJdIDAuNjQ2MzAy
IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAw
LjY0NjMwOCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5MgpbbGli
c3NoMl0gMC42NDYzMTMgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5
MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAwMDog
QjYgQTYgNzQgNzEgRTkgM0MgMkIgOEEgIDA4IDg5IDJEIDY3IDJCIDJDIDBGIDE2IDogLi50
cS48Ky4uLi1nKywuLgowMDEwOiA1QyBGMyA5OCAwOSA0OCBDMCAzRCAxMiAgMkEgMjEgRDQg
MUEgMjEgMjQgMDMgRkEgOiBcLi4uSC49LiohLi4hJC4uCjAwMjA6IDVCIERCIDA5IEMzIDI3
IDk4IEVCIDVGICAyRSBGMSAwRSA2RSBEMiBFMCAxMCAzNiA6IFsuLi4nLi5fLi4ubi4uLjYK
MDAzMDogMTcgODggMjcgNEMgNEEgMUEgMEUgNDcgIEUxIDIwIEZBIEMwIDcwIDQyIDRBIDdE
IDogLi4nTEouLkcuIC4ucEJKfQowMDQwOiBERCAzMCAzNSAzRiAzOCBGMiBBOCA2MCAgNUUg
MDAgN0QgNEIgNjMgMTUgN0YgOUYgOiAuMDU/OC4uYF4ufUtjLi4uCjAwNTA6IEU3IDJFIDVF
IDRFIEFEIDU4IEVDIEM5ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uXk4uWC4uCj0+
IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAg
MDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xp
YnNzaDJdIDAuNjQ2MzU0IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVu
Z3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykKMDAw
MDogNUIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAxIDg2IEEwIDAwIDAwIDgwIDog
Wy4uLi4uLi4uLi4uLi4uLgowMDEwOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjY0NjM2OSBUcmFuc3BvcnQ6IFBh
Y2tldCB0eXBlIDkxIHJlY2VpdmVkLCBsZW5ndGg9MTcKW2xpYnNzaDJdIDAuNjQ2MzcyIFRy
YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjY0
NjM3NSBDb25uOiBDb25uZWN0aW9uIEVzdGFibGlzaGVkIC0gSUQ6IDAvMCB3aW46IDEwMDAw
MC8yNjIxNDQgcGFjazogMzI3NjgvMzI3NjgKW2xpYnNzaDJdIDAuNjQ2MzgwIENvbm46IHN0
YXJ0aW5nIHJlcXVlc3QoZXhlYykgb24gY2hhbm5lbCAwLzAsIG1lc3NhZ2U9c2NwIC1wZiAn
L3RtcC9URVNUJwo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTggYnl0ZXMp
CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwNCA2NSA3OCA2NSA2MyAwMSAwMCAw
MCA6IGIuLi4uLi4uLmV4ZWMuLi4KMDAxMDogMDAgMjYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLiYKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUg
cGxhaW4yICgzOCBieXRlcykKMDAwMDogNzMgNjMgNzAgMjAgMkQgNzAgNjYgMjAgIDI3IDJG
IDc0IDZEIDcwIDJGIDU0IDQ1IDogc2NwIC1wZiAnL3RtcC9URQowMDEwOiA1MyA1NCAyNyAw
MCAwMiA0NSA5NSBDNSAgNDcgQTEgOUQgOTkgMTggRjEgMkQgMDAgOiBTVCcuLkUuLkcuLi4u
Li0uCjAwMjA6IDkwIDM3IDUxIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IC43US4uLgpbbGlic3NoMl0gMC42NDY0MjEgU29ja2V0OiBTZW50IDEwMC8xMDAg
Ynl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgpICgx
MDAgYnl0ZXMpCjAwMDA6IEZBIDE2IDAxIDFEIDcyIERBIDA0IEE2ICBCOSBBMCBBRiA2MSAy
OSA0NiAyOCAyRSA6IC4uLi5yLi4uLi4uYSlGKC4KMDAxMDogNDUgQUUgRjQgN0IgMUEgRTYg
ODEgQ0EgIDE0IDlEIDdDIDIwIEEzIDNCIDdBIDA3IDogRS4uey4uLi4uLnwgLjt6LgowMDIw
OiAxOCBERSA1NSBCRSA4NiBDMCBGOSBGOSAgRDEgNjAgM0EgNUQgQzcgOEEgOEUgNUIgOiAu
LlUuLi4uLi5gOl0uLi5bCjAwMzA6IDM3IDIxIDY5IEEzIEIyIDBDIDRBIDA4ICA0OCAyMCA0
QSAxMiBDNiAzRiAyMSA2RSA6IDchaS4uLkouSCBKLi4/IW4KMDA0MDogMDkgNzAgMzQgMkQg
MzQgNDUgMEIgMEMgIDE0IEY2IDhFIDgxIDAyIDdGIDc0IEEzIDogLnA0LTRFLi4uLi4uLi50
LgowMDUwOiBFQyBFMSBDQyA3MCBCNSAxMyBEQSA3NCAgQjMgMUIgM0QgMkUgRDYgNTYgREEg
MzMgOiAuLi5wLi4udC4uPS4uVi4zCjAwNjA6IDVFIDlDIEFDIDBCICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4KW2xpYnNzaDJdIDAuNjQ2NDQ0IFRyYW5z
cG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjY0NjQ0
NyBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJd
IDAuNjQ2NDUxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rpbmcg
U0NQIHN0YXJ0dXAKW2xpYnNzaDJdIDAuNjQ3MzM1IFRyYW5zcG9ydDogTG9va2luZyBmb3Ig
cGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjY0NzM0MCBUcmFuc3BvcnQ6IExvb2tp
bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJdIDAuNjQ3MzQ1IFNvY2tldDog
UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFuc3Bv
cnRfcmVhZCgpIHJhdyAoNzIgYnl0ZXMpCjAwMDA6IDdDIDZCIDNFIDE0IDhEIEI3IEQ1IDg1
ICA1MCAwRCA3OCBDOCA4MiBFNCAxMyA1NCA6IHxrPi4uLi4uUC54Li4uLlQKMDAxMDogOEEg
NjEgNTQgQ0MgNkUgQzEgRDMgNUQgIDFGIDdGIDhCIDlEIDUwIEU3IDREIEU1IDogLmFULm4u
Ll0uLi4uUC5NLgowMDIwOiBERiA2RSA2OSBBMCAyNCBBOCAzNiAyNyAgODAgMTMgOUYgMDIg
MEUgQTEgNEEgRDcgOiAubmkuJC42Jy4uLi4uLkouCjAwMzA6IEZBIEM2IDVCIEQxIDg4IDQ1
IEY0IEY4ICA3RCA1QSAyMSAwNyA5MyA5NCA2NCBDRCA6IC4uWy4uRS4ufVohLi4uZC4KMDA0
MDogMjYgN0MgQjcgOUYgMzEgNTggODAgRkQgICAgICAgICAgICAgICAgICAgICAgICAgIDog
JnwuLjFYLi4KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQow
MDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAuLi4uLgpbbGlic3NoMl0gMC42NDczODEgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJl
Y2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUg
Ynl0ZXMpCjAwMDA6IDYzIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IGMuLi4uCltsaWJzc2gyXSAwLjY0NzM5NyBUcmFuc3BvcnQ6IFBhY2tldCB0
eXBlIDk5IHJlY2VpdmVkLCBsZW5ndGg9NQpbbGlic3NoMl0gMC42NDc0MDIgVHJhbnNwb3J0
OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTkKW2xpYnNzaDJdIDAuNjQ3NDA4IFND
UDogU2VuZGluZyBpbml0aWFsIHdha2V1cApbbGlic3NoMl0gMC42NDc0MTMgQ29ubjogV3Jp
dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAKW2xpYnNzaDJdIDAuNjQ3
NDE3IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lkPTAK
PT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDkgYnl0ZXMpCjAwMDA6IDVFIDAw
IDAwIDAwIDAwIDAwIDAwIDAwICAwMSAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4uLi4u
Lgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbjIgKDEgYnl0ZXMpCjAwMDA6IDAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4KW2xp
YnNzaDJdIDAuNjQ3NDQxIFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwOTk1OAo9
PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDUyIGJ5dGVzKQowMDAwOiA0MSBC
QyBEQSBERSBGMiA3QiAyOSA4NSAgMUIgRTYgNkYgMzQgRUEgNzEgQzMgRkIgOiBBLi4uLnsp
Li4ubzQucS4uCjAwMTA6IDc2IEQwIEI4IDM4IDhGIDQyIEZFIEY2ICA2RiAyQyBENCA1MyAz
RCA4OCA4RSA3MiA6IHYuLjguQi4ubywuUz0uLnIKMDAyMDogRUYgMUEgQTQgRDUgNDIgOTcg
RTYgN0UgIDcxIERFIDRBIENCIDExIDFEIDcwIEREIDogLi4uLkIuLn5xLkouLi5wLgowMDMw
OiBFRiAxQiBFMSBBNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu
Li4uCltsaWJzc2gyXSAwLjY0NzQ1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5
dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY0NzQ2MSBGYWls
dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC42NDc0NjQgRmFpbHVy
ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlClts
aWJzc2gyXSAwLjY1NTg1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy
b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY1NTg3MCBTb2NrZXQ6IFJl
Y3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9y
dF9yZWFkKCkgcmF3ICgxMjAgYnl0ZXMpCjAwMDA6IDI4IENFIDI2IEVCIEE5IEY2IDEwIEU3
ICBBNCBEOCA0NCA5RiA1RCBDNSA4MSA4QSA6ICguJi4uLi4uLi5ELl0uLi4KMDAxMDogNkEg
NjEgMzAgRjYgNUIgQTcgRDUgQkQgIDUxIEQ1IEFCIERCIDdCIDlCIDc4IDY1IDogamEwLlsu
Li5RLi4uey54ZQowMDIwOiBEQiBDRSBEQyBFNCA2RCA3QSBDRCA5NyAgMEYgNjIgRjggQzYg
QTEgMjcgRDEgMEIgOiAuLi4ubXouLi5iLi4uJy4uCjAwMzA6IDMyIDZEIDFFIEUzIEMwIDVD
IDAyIEVCICA1MCAzRSBCRiAzQSBFOCA3MCBFQiBCNSA6IDJtLi4uXC4uUD4uOi5wLi4KMDA0
MDogRTUgMjkgMkQgQkIgRjAgOEYgNDggNjIgIEEyIDFDIEY2IDZDIEUxIDIwIEJBIDZCIDog
LiktLi4uSGIuLi5sLiAuawowMDUwOiBDOCBDOSBDOCBDRiA5QyBFNCBFQiBGMSAgRkEgRTAg
QTIgRDcgNUIgQzAgN0EgOUMgOiAuLi4uLi4uLi4uLi5bLnouCjAwNjA6IEIyIEYxIEJBIDdB
IDk0IDMyIEQ0IDJEICA5MyBEQiBEQyA0MiA1MCBCMyAyMSA5NCA6IC4uLnouMi4tLi4uQlAu
IS4KMDA3MDogM0EgQUEgNkYgOTQgQjcgMjMgOUUgNUQgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogOi5vLi4jLl0KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5
dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC42NTU5MTkgVHJhbnNwb3J0OiBQYWNrZXQgdHlw
ZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxh
aW4gKDQ0IGJ5dGVzKQowMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAgMDAg
MDAgMUYgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi4uc2NwCjAwMTA6IDNBIDIwIDc3IDYxIDcy
IDZFIDY5IDZFICA2NyAzQSAyMCA0NSA3OCA2NSA2MyA3NSA6IDogd2FybmluZzogRXhlY3UK
MDAyMDogNzQgNjkgNkUgNjcgMjAgNzMgNjMgNzAgIDMxIDJFIDBEIDBBICAgICAgICAgICAg
IDogdGluZyBzY3AxLi4uCltsaWJzc2gyXSAwLjY1NTk1NiBUcmFuc3BvcnQ6IFBhY2tldCB0
eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9NDQKW2xpYnNzaDJdIDAuNjU1OTU5IENvbm46IDMx
IGJ5dGVzIHBhY2tldF9hZGQoKSBmb3IgMC8wLzQ3ODg0NTkwMzgzMTA1CltsaWJzc2gyXSAw
LjY1NTk2MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC42
NTU5NjcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQ
IHJlc3BvbnNlCltsaWJzc2gyXSAwLjY5NDA0MSBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50
cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY5NDA1
NSBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBsaWJz
c2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzNjAgYnl0ZXMpCjAwMDA6IDVEIDdDIDI3IDEw
IDNBIEM5IDY2IDI1ICAzMyA4RCA2NyAxMSBCNSA1MyAzMyA2QiA6IF18Jy46LmYlMy5nLi5T
M2sKMDAxMDogNEYgRDkgQkQgODMgNjYgNDkgQzMgNjEgIDk1IEJDIDVDIDYxIDMyIERBIDM2
IDE0IDogTy4uLmZJLmEuLlxhMi42LgowMDIwOiAyNCAzQiA5QSA0NyBDOSBBNSA4RCA4OSAg
MUEgQUIgQTMgRDMgNzEgNzkgMjQgRkEgOiAkOy5HLi4uLi4uLi5xeSQuCjAwMzA6IDE4IDhF
IDhCIEQzIEU5IENEIEQ5IDUzICA4NiBEQiBGRSAwRSBFRSBBNSBCNyA2MCA6IC4uLi4uLi5T
Li4uLi4uLmAKMDA0MDogREUgOTkgNzQgRUIgOTYgQ0UgMUMgMzIgIEI5IDI0IEQzIDFCIEM1
IDdGIDBGIDE4IDogLi50Li4uLjIuJC4uLi4uLgowMDUwOiAzMSAwMCA1NyBEQyBFNCA1MiA4
NyBBMCAgQjkgRjMgNUMgNkUgRUUgMUMgMjQgQjMgOiAxLlcuLlIuLi4uXG4uLiQuCjAwNjA6
IDU4IDMxIDBCIDVGIEZEIDdFIDFFIDFBICA2OCA3NyA2RCAxRCBEOCBEMSA0OCBFQyA6IFgx
Ll8ufi4uaHdtLi4uSC4KMDA3MDogM0UgRkUgOTkgNEQgRkYgOUIgMUMgMjYgIDkzIEFDIDBC
IEI1IENEIDVDIDk0IDVEIDogPi4uTS4uLiYuLi4uLlwuXQowMDgwOiBBRSBDRCA5MiA2RSBB
MSBFNSAzNSA0NSAgMTcgNUUgRTAgNTggRUEgMkEgN0YgQzEgOiAuLi5uLi41RS5eLlguKi4u
CjAwOTA6IDBGIDdEIERDIDczIDVBIDgwIDg3IDZDICAwQSA3MyAyNCA1OCA2NCA0MCAwMSBD
RiA6IC59LnNaLi5sLnMkWGRALi4KMDBhMDogMjUgQ0YgNDMgRTEgNTggMzYgMTggODUgIDE1
IEJBIDI3IEU0IDI4IDM2IDBEIDgyIDogJS5DLlg2Li4uLicuKDYuLgowMGIwOiBGMyAzQiA2
OSBBMSA4MCAxOCBCMCA4QiAgNjkgQjkgODcgMjEgNDkgOTcgODEgRkMgOiAuO2kuLi4uLmku
LiFJLi4uCjAwYzA6IEM0IDM1IDNEIEIxIDdDIEQ0IDhGIDM1ICBFMyAzNSA5RiA2MSBFRiBB
RCAxQiA3QiA6IC41PS58Li41LjUuYS4uLnsKMDBkMDogRDMgQTAgQzUgQjIgMkUgQTUgM0Eg
RUEgIDREIEZFIEU3IEFGIDg4IEZGIDFEIEI3IDogLi4uLi4uOi5NLi4uLi4uLgowMGUwOiBC
RSAyNiA2MSAwNSBBMiA3QyBCMCA5QSAgNTMgOUQgRDkgM0YgNDUgNDQgRjIgN0IgOiAuJmEu
LnwuLlMuLj9FRC57CjAwZjA6IEYyIEJDIDM1IEM1IDY2IDE1IDM0IDYwICBBQyA2QSBBNyBF
RiAyNCA3QiA1QiAzOSA6IC4uNS5mLjRgLmouLiR7WzkKMDEwMDogNUQgMDUgMzcgRDEgQkMg
QzUgNjIgMEQgIDMwIDhCIEEwIDQ5IDFFIEYzIDE3IDYyIDogXS43Li4uYi4wLi5JLi4uYgow
MTEwOiA0NiAyMSA0RiA2QiBCMCBBMyAxRiA0MCAgMTggQzggNTQgQzAgQUYgOEYgQ0EgNTUg
OiBGIU9rLi4uQC4uVC4uLi5VCjAxMjA6IEIxIEZDIDFFIDJFIDYxIEE4IDkzIDBEICA3NCAw
RCA1OSA0NyBFNiAzNiA0MyA1MSA6IC4uLi5hLi4udC5ZRy42Q1EKMDEzMDogMkEgNzEgNDMg
REYgQzggRTEgODAgRkUgIDU1IEI5IDg4IEEzIDlGIDQ5IEFFIDdDIDogKnFDLi4uLi5VLi4u
LkkufAowMTQwOiBBQyAxQSBDOCBERCAyMyA1NCAxMyBGRSAgMTMgMUUgQTEgRUQgMTYgREYg
OTUgN0IgOiAuLi4uI1QuLi4uLi4uLi57CjAxNTA6IDIyIEE0IEUwIDgzIDMwIEQ4IDJBIDZB
ICAyRiBFMyAwQSAwRSA4OCBFNiAzNSAwRiA6ICIuLi4wLipqLy4uLi4uNS4KMDE2MDogM0Mg
OUIgMDYgNTQgMUQgQjAgNUEgMDUgICAgICAgICAgICAgICAgICAgICAgICAgIDogPC4uVC4u
Wi4KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAw
MiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4u
LgpbbGlic3NoMl0gMC42OTQxNDMgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVk
LCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwNSBieXRl
cykKMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAxIDAwIDAwIDAwIDVDIDczIDYz
IDcwIDogXy4uLi4uLi4uLi4uXHNjcAowMDEwOiAzQSAyMCA0NiA0MSA1NCA0MSA0QyAzQSAg
MjAgNDUgNzggNjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpCjAwMjA6IDZFIDY3
IDIwIDczIDczIDY4IDMxIDIwICA2OSA2RSAyMCA2MyA2RiA2RCA3MCA2MSA6IG5nIHNzaDEg
aW4gY29tcGEKMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkgIDIwIDZEIDZGIDY0IDY1
IDIwIDY2IDYxIDogdGliaWxpdHkgbW9kZSBmYQowMDQwOiA2OSA2QyA2NSA2NCAyMCAyOCA0
MyA2OCAgNjUgNjMgNkIgMjAgNzQgNjggNjEgNzQgOiBpbGVkIChDaGVjayB0aGF0CjAwNTA6
IDIwIDczIDYzIDcwIDMxIDIwIDY5IDczICAyMCA2OSA2RSAyMCA3OSA2RiA3NSA3MiA6ICBz
Y3AxIGlzIGluIHlvdXIKMDA2MDogMjAgNTAgNDEgNTQgNDggMjkgMkUgMEQgIDBBICAgICAg
ICAgICAgICAgICAgICAgIDogIFBBVEgpLi4uCltsaWJzc2gyXSAwLjY5NDE3MSBUcmFuc3Bv
cnQ6IFBhY2tldCB0eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9MTA1CltsaWJzc2gyXSAwLjY5
NDE3NCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80Nzg4NDU5MDM4MzEw
NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAy
IDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u
CltsaWJzc2gyXSAwLjY5NDE4NyBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQs
IGxlbmd0aD01Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMjUgYnl0ZXMp
CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwQiA2NSA3OCA2OSA3NCAyRCA3MyA3
NCA6IGIuLi4uLi4uLmV4aXQtc3QKMDAxMDogNjEgNzQgNzUgNzMgMDAgMDAgMDAgMDAgIEZG
ICAgICAgICAgICAgICAgICAgICAgIDogYXR1cy4uLi4uCltsaWJzc2gyXSAwLjY5NDIwMSBU
cmFuc3BvcnQ6IFBhY2tldCB0eXBlIDk4IHJlY2VpdmVkLCBsZW5ndGg9MjUKW2xpYnNzaDJd
IDAuNjk0MjA0IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1z
dGF0dXMgKHdyIDApCltsaWJzc2gyXSAwLjY5NDIwOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUg
cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBw
bGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjk0MjIwIFRyYW5zcG9ydDog
UGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRf
cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42OTQyMzggVHJh
bnNwb3J0OiBQYWNrZXQgdHlwZSA5NyByZWNlaXZlZCwgbGVuZ3RoPTUKW2xpYnNzaDJdIDAu
Njk0MjQxIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMApbbGlic3NoMl0g
MC42OTQyNDggQ29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXMKW2xpYnNzaDJd
IDAuNjk0MjUyIENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MCAwMCAwMCAwMCAwMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgLi4uLgpbbGlic3NoMl0gMC42
OTQyNzEgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMzYgYnl0ZXMpCjAwMDA6IDNFIDlDIDY0IDM2IEU5
IDRDIDVEIDdDICBFNyA2RCBCRCBDQiA2RCBFQSAxMiA5RCA6ID4uZDYuTF18Lm0uLm0uLi4K
MDAxMDogMEYgNTggNUEgQjUgRUIgQUEgN0QgOEYgIDQ0IDhDIENCIDJDIEFBIDg2IDdCIDM5
IDogLlhaLi4ufS5ELi4sLi57OQowMDIwOiA0NCBDNyAxNiA2RSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBELi5uCltsaWJzc2gyXSAwLjY5NDI4NSBDb25uOiBD
bG9zaW5nIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg1
IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42OTQyOTkgU29ja2V0OiBTZW50IDM2LzM2
IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAo
MzYgYnl0ZXMpCjAwMDA6IDdBIDBFIDNBIDg5IDBCIEYyIDUwIEY1ICA5OCA0NSBGRiBEMSA1
QyBEQiBDMCBGMCA6IHouOi4uLlAuLkUuLlwuLi4KMDAxMDogOEEgNjIgMjMgNjAgQjEgMUIg
NzYgQ0MgIEI4IDZEIEEwIENFIDdEIDZGIEQwIDRCIDogLmIjYC4udi4ubS4ufW8uSwowMDIw
OiAyMSA1NiBEMiBFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAh
Vi4uCltsaWJzc2gyXSAwLjY5NDMxMSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv
ZiB0eXBlOiA5NApbbGlic3NoMl0gMC42OTQzMTQgVHJhbnNwb3J0OiBMb29raW5nIGZvciBw
YWNrZXQgb2YgdHlwZTogOTUKW2xpYnNzaDJdIDAuNjk0MzE3IFRyYW5zcG9ydDogTG9va2lu
ZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk0CltsaWJzc2gyXSAwLjY5NDMxOSBUcmFuc3BvcnQ6
IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5NQpbbGlic3NoMl0gMC42OTQzMjIgVHJh
bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTQKW2xpYnNzaDJdIDAuNjk0
MzI1IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk1CltsaWJzc2gy
XSAwLjY5NDMyOCBUcmFuc3BvcnQ6IERpc2Nvbm5lY3Rpbmc6IHJlYXNvbj0xMSwgZGVzYz1O
b3JtYWwgU2h1dGRvd24sIFRoYW5rIHlvdSBmb3IgcGxheWluZywgbGFuZz0KPT4gbGlic3No
Ml90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDUxIGJ5dGVzKQowMDAwOiAwMSAwMCAwMCAwMCAw
QiAwMCAwMCAwMCAgMjYgNEUgNkYgNzIgNkQgNjEgNkMgMjAgOiAuLi4uLi4uLiZOb3JtYWwg
CjAwMTA6IDUzIDY4IDc1IDc0IDY0IDZGIDc3IDZFICAyQyAyMCA1NCA2OCA2MSA2RSA2QiAy
MCA6IFNodXRkb3duLCBUaGFuayAKMDAyMDogNzkgNkYgNzUgMjAgNjYgNkYgNzIgMjAgIDcw
IDZDIDYxIDc5IDY5IDZFIDY3IDAwIDogeW91IGZvciBwbGF5aW5nLgowMDMwOiAwMCAwMCAw
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4KPT4gbGli
c3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4yICgwIGJ5dGVzKQpbbGlic3NoMl0gMC42OTQz
NTMgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJfdHJh
bnNwb3J0X3dyaXRlIHNlbmQoKSAoODQgYnl0ZXMpCjAwMDA6IDZFIERCIEZFIEI5IDY3IENC
IDFBIENEICA1MiBBMyAwQiA5NyAxQSAwMCA4MSBERiA6IG4uLi5nLi4uUi4uLi4uLi4KMDAx
MDogNTkgRkMgRUYgQkYgNjkgQzEgMzAgNEUgIDBBIDEyIDNCIDQwIEI4IDBDIDczIDg0IDog
WS4uLmkuME4uLjtALi5zLgowMDIwOiBGMSBGQiBCNSBGRSA4QSBBNiBERCA4MyAgRDQgOTQg
NDcgMjcgRjUgMjYgRjMgRjMgOiAuLi4uLi4uLi4uRycuJi4uCjAwMzA6IDVDIDIwIDRGIDMx
IDQyIDEwIDA0IDE0ICBERSA5MiAxMiBCRCBGOCBBQyBFMiA2NiA6IFwgTzFCLi4uLi4uLi4u
LmYKMDA0MDogRjEgNzAgMjUgQTQgQzUgRDAgNTMgNTQgIDQ3IDg5IDE5IDAwIEU4IDlDIDQ1
IDAwIDogLnAlLi4uU1RHLi4uLi5FLgowMDUwOiAxQSBEQSA2NCBGQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLmQuCltsaWJzc2gyXSAwLjY5NDM3NCBUcmFu
c3BvcnQ6IEZyZWVpbmcgc2Vzc2lvbiByZXNvdXJjZQpbbGlic3NoMl0gMC42OTQzODYgVHJh
bnNwb3J0OiBFeHRyYSBwYWNrZXRzIGxlZnQgMAphbGwgZG9uZQo=

------=_NextPart_50769AF3_094D7588_7C17F916
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_50769AF3_094D7588_7C17F916--

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 12:17:06 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAH1rE008954;
	Thu, 11 Oct 2012 12:17:05 +0200
Received: from smtpbg250.qq.com (SMTPBG250.QQ.COM [183.60.52.106])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAGub0008882
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 12:16:57 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail90t1349950610t1910281
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----=_NextPart_50769C92_0848E950_490B7C06"
Content-Transfer-Encoding: 8Bit
Date: Thu, 11 Oct 2012 18:16:50 +0800
X-Priority: 3
Message-ID: <tencent_6DB4F9D00613DC51600B888E@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 195273932
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

------=_NextPart_50769C92_0848E950_490B7C06
Content-Type: multipart/alternative;
	boundary="----=_NextPart_50769C92_0848E950_2BDABE80";

------=_NextPart_50769C92_0848E950_2BDABE80
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGksUGV0ZXI6DQogICAgIFBsZWFzZSBjaGVrIHRoZSBuZXcgc2NwX2xpYmdjcnlwdC5sb2cg
ZmlsZS4NCg0KICAgDQogVGhhbmtzLg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAt
LS0tLS0tLS0tLS0tLS0tLS0NCiAgRnJvbTogICKjxaP2o+Wj8i9keSI8dW5peEB2aXAucXEu
Y29tPjsNCiBEYXRlOiAgVGh1LCBPY3QgMTEsIDIwMTIgMDY6MDkgUE0NCiBUbzogICJsaWJz
c2gyIGRldmVsb3BtZW50IjxsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1
YmplY3Q6ICBSZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qg
c3RhdA0KDQogDQoNCiAgaGksUGV0ZXIsDQogICAgIFBsZWFzZSBjaGVjayB0aGUgYXR0YWNo
bWVudHMuDQogIA0KIFRoYW5rcy4NCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0t
LS0tLS0tLS0tLS0tLS0tDQogIEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNl
PjsNCiBEYXRlOiAgVGh1LCBPY3QgMTEsIDIwMTIgMDQ6MjcgUE0NCiBUbzogICJsaWJzc2gy
LWRldmVsIjxsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBS
ZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQog
DQoNCqPFo/aj5aPyIHdyb3RlOg0KPiAgSSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0
aGUgZm9sbG93aW5nIHRleHQ6DQo+ICAgDQo+ICB+L2xpYnNzaDItMS40LjIvZXhhbXBsZSMg
Li9zY3AgMTAuMTI5LjEzOS4xNDAgbXFxIG1xcTIwMDUgL3Vzci9sb2NhbC9hcHAvZXZlcnBh
bi9oZWxsbw0KPiBbbGlic3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVz
IGF0IDB4MmFhZjRiMzI2MzdkKzANCj4gW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJy
b3IgcmVjdmluZyAxIGJ5dGVzOiAxMQ0KPiBbbGlic3NoMl0gMC43MzU3OTIgRmFpbHVyZSBF
dmVudDogLTM3IC0gRmFpbGVkIGdldHRpbmcgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjU4
OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY2MzAg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NjU5IFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjY4NiBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NzM2IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3ODQgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2OTY3IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzcwMjYgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM3MDg1IFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXINCj4gW2xpYnNzaDJdIDAuNzM3MzE0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyDQo+IFtsaWJzc2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cg0KPiBbbGlic3NoMl0gMC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN
Cj4gW2xpYnNzaDJdIDAuNzM4ODA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+
IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBb
bGlic3NoMl0gMC43Mzg4NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xp
YnNzaDJdIDAuNzM4ODgwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJz
c2gyXSAwLjczODkwNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3No
Ml0gMC43Mzg5MjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJd
IDAuNzM4OTUxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAw
LjczODk3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43
MzkwMDYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5
MDMxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTA1
NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwNzkg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTE1IFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTEzOSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTg4IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkyMzYgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MjYwIFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkzMjUgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MzUwIFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NDI1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyDQo+IFtsaWJzc2gyXSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cg0KPiBbbGlic3NoMl0gMC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN
Cj4gW2xpYnNzaDJdIDAuNzM5NDk5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+
IFtsaWJzc2gyXSAwLjczOTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBb
bGlic3NoMl0gMC43Mzk1NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xp
YnNzaDJdIDAuNzM5NTcxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJz
c2gyXSAwLjczOTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3No
Ml0gMC43Mzk2MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJd
IDAuNzM5NjQ0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAw
LjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGli
c3NoMl0gMC43Mzk4NzQgU29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1
OTE4KzANCj4gW2xpYnNzaDJdIDAuNzQwMTkwIFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVz
IGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcg
LSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQo+IFtsaWJzc2gyXSAwLjgw
NjU5NyBTb2NrZXQ6IFJlY3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4g
W2xpYnNzaDJdIDAuODA4NTQxIFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwOTk1
OA0KPiBbbGlic3NoMl0gMC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRv
IGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0KPiBbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0
OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44
MDg4NTQgU29ja2V0OiBTZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gy
XSAwLjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCsw
DQo+IEZpbmdlcnByaW50OiA4RSBGRiA5RiBBRCA1OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4
MCA1NiA3QiAzQSBERiA2NSBGRCBEMiANCj4gW2xpYnNzaDJdIDAuODA5NjM2IFNvY2tldDog
U2VudCA4NC84NCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MDk2NjggRmFp
bHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZw0KPiBbbGlic3NoMl0gMC44
MTA5MTkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+
IFtsaWJzc2gyXSAwLjgxMTAxNSBTQ1A6IE9wZW5pbmcgY2hhbm5lbCBmb3IgU0NQIHJlY2Vp
dmUNCj4gW2xpYnNzaDJdIDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJ
RCMwDQo+IFtsaWJzc2gyXSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENoYW5uZWwgLSB3aW4g
MjYyMTQ0IHBhY2sgMzI3NjgNCj4gW2xpYnNzaDJdIDAuODExMTE2IFNvY2tldDogU2VudCA2
OC82OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBF
dmVudDogLTM3IC0gV291bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAuODExMTc3IEZhaWx1cmUg
RXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNCj4gW2xpYnNz
aDJdIDAuODExMzUyIFNvY2tldDogUmVjdmVkIDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4
KzANCj4gW2xpYnNzaDJdIDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQg
LSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2OA0KPiBbbGli
c3NoMl0gMC44MTE0NDAgQ29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVs
IDAvMCwgbWVzc2FnZT1zY3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0K
PiBbbGlic3NoMl0gMC44MTE0ODkgU29ja2V0OiBTZW50IDE0OC8xNDggYnl0ZXMgYXQgMHg1
MDk5NTgNCj4gW2xpYnNzaDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxk
IGJsb2NrIHJlcXVlc3RpbmcgU0NQIHN0YXJ0dXANCj4gW2xpYnNzaDJdIDAuODEyNDYxIFNv
Y2tldDogUmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJd
IDAuODEyNTE1IFNDUDogU2VuZGluZyBpbml0aWFsIHdha2V1cA0KPiBbbGlic3NoMl0gMC44
MTI1NDkgQ29ubjogV3JpdGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAN
Cj4gW2xpYnNzaDJdIDAuODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVs
IDAvMCwgc3RyZWFtX2lkPTANCj4gW2xpYnNzaDJdIDAuODEyNjE2IFNvY2tldDogU2VudCA1
Mi81MiBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hh
bm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0K
PiBbbGlic3NoMl0gMC44MTI2NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sN
Cj4gW2xpYnNzaDJdIDAuODEyNjk1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2Nr
IHdhaXRpbmcgZm9yIFNDUCByZXNwb25zZQ0KPiBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjog
Y2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAj
MA0KPiBbbGlic3NoMl0gMC44MzA4OTEgU29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVz
IHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODMwOTM4IENvbm46IDMxIGJ5dGVzIHBh
Y2tldF9hZGQoKSBmb3IgMC8wLzQ2OTMxMTA3NjQzMzkzDQo+IFtsaWJzc2gyXSAwLjgzMDk2
OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jaw0KPiBbbGlic3NoMl0gMC44MzA5
OTMgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJl
c3BvbnNlDQo+IFtsaWJzc2gyXSAwLjg2NzM1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50
cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQo+IFtsaWJzc2gyXSAwLjg2
NzQxMiBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBb
bGlic3NoMl0gMC44Njc0NTggQ29ubjogOTIgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAv
NDY5MzExMDc2NDMzOTMNCj4gW2xpYnNzaDJdIDAuODY3NDk5IENvbm46IENoYW5uZWwgMCBy
ZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1zdGF0dXMgKHdyIDApDQo+IFtsaWJzc2gyXSAw
Ljg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8w
DQo+IFtsaWJzc2gyXSAwLjg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZlZCBmb3IgY2hhbm5l
bCAwLzANCj4gW2xpYnNzaDJdIDAuODY3NTkzIENvbm46IEZyZWVpbmcgY2hhbm5lbCAwLzAg
cmVzb3VyY2VzDQo+IFtsaWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBj
aGFubmVsIDAvMA0KPiBbbGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2LzM2IGJ5
dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjg2NzY4NiBDb25uOiBDbG9zaW5nIGNo
YW5uZWwgMC8wDQo+IFtsaWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0
ZXMgYXQgMHg1MDk5NTgNCj4gW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84
NCBieXRlcyBhdCAweDUwOTk1OA0KPiBhbGwgZG9uZQ0KDQpUaGUgYWJvdmUgb3V0cHV0IGxv
b2tzIGFsbCByaWdodC4NCg0KDQo+ICBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUv
c2NwLmMNCj4gIGxpYnNzaDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBM
SUJTU0gyX1RSQUNFX1NPQ0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFD
RV9FUlJPUiApOw0KDQpQbGVhc2UgY2hhbmdlIHRvOg0KDQpsaWJzc2gyX3RyYWNlKHNlc3Np
b24sIH4wKTsNCg0KYW5kIHRoZW4gc2VuZCBjb21wbGV0ZSBvdXRwdXQgZm9yIHdoZW4gdGhl
IGV4YW1wbGUgdXNlcyBsaWJnY3J5cHQuDQoNClRoYW5rcyENCg0KDQovL1BldGVyDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1k
ZXZlbCBodHRwOi8vY29vbC5oYXh4LnNlL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJz
c2gyLWRldmVs

------=_NextPart_50769C92_0848E950_2BDABE80
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+DQo8RElWPmhpLFBldGVyOjwvRElWPg0KPERJVj4mbmJz
cDsmbmJzcDsmbmJzcDsgUGxlYXNlIGNoZWsgdGhlIG5ldyA8U1BBTiBpZD1TVXBsb2FkZXIx
MzQ5OTUwNTQ3NzA3MDY4MTQ1NDExMTMxMDcxODg+c2NwX2xpYmdjcnlwPFdCUj50LmxvZyBm
aWxlLjwvU1BBTj48L0RJVj48L0RJVj48L0ZPTlQ+DQo8RElWPjxpbmNsdWRldGFpbD4NCjxE
SVY+Jm5ic3A7PC9ESVY+DQo8RElWPlRoYW5rcy48L0RJVj4NCjxESVYgc3R5bGU9IlBBRERJ
TkctQk9UVE9NOiAycHg7IFBBRERJTkctTEVGVDogMHB4OyBQQURESU5HLVJJR0hUOiAwcHg7
IEZPTlQtRkFNSUxZOiBBcmlhbCBOYXJyb3c7IEZPTlQtU0laRTogMTJweDsgUEFERElORy1U
T1A6IDJweCI+LS0tLS0tLS0tLS0tLS0tLS0tJm5ic3A7T3JpZ2luYWwmbmJzcDstLS0tLS0t
LS0tLS0tLS0tLS08L0RJVj4NCjxESVYgc3R5bGU9IlBBRERJTkctQk9UVE9NOiA4cHg7IFBB
RERJTkctTEVGVDogOHB4OyBQQURESU5HLVJJR0hUOiA4cHg7IEJBQ0tHUk9VTkQ6ICNlZmVm
ZWY7IEZPTlQtU0laRTogMTJweDsgUEFERElORy1UT1A6IDhweCI+DQo8RElWPjxCPkZyb206
IDwvQj4mbmJzcDsio8Wj9qPlo/IvZHkiJmx0O3VuaXhAdmlwLnFxLmNvbSZndDs7PC9ESVY+
DQo8RElWPjxCPkRhdGU6IDwvQj4mbmJzcDtUaHUsIE9jdCAxMSwgMjAxMiAwNjowOSBQTTwv
RElWPg0KPERJVj48Qj5UbzogPC9CPiZuYnNwOyJsaWJzc2gyIGRldmVsb3BtZW50IiZsdDts
aWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZndDs7IDxXQlI+PC9ESVY+DQo8RElWPjwvRElW
Pg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5ic3A7UmU6IGxpYnNzaDJfc2NwX3JlY3YgaXMg
bm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQ8L0RJVj48L0RJVj4NCjxESVY+PEJSPjwvRElW
Pg0KPERJVj4NCjxESVY+aGksUGV0ZXIsPC9ESVY+DQo8RElWPiZuYnNwOyAmbmJzcDsgUGxl
YXNlIGNoZWNrIHRoZSBhdHRhY2htZW50cy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8
RElWPlRoYW5rcy48L0RJVj4NCjxESVY+LS0tLS0tLS0tLS0tLS0tLS0tIE9yaWdpbmFsIC0t
LS0tLS0tLS0tLS0tLS0tLTwvRElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDhw
eDsgUEFERElORy1MRUZUOiA4cHg7IFBBRERJTkctUklHSFQ6IDhweDsgQkFDS0dST1VORDog
I2VmZWZlZjsgRk9OVC1TSVpFOiAxMnB4OyBQQURESU5HLVRPUDogOHB4Ij4NCjxESVY+PEI+
RnJvbTogPC9CPiZuYnNwOyJQZXRlciBTdHVnZSImbHQ7cGV0ZXJAc3R1Z2Uuc2UmZ3Q7Ozwv
RElWPg0KPERJVj48Qj5EYXRlOiA8L0I+Jm5ic3A7VGh1LCBPY3QgMTEsIDIwMTIgMDQ6Mjcg
UE08L0RJVj4NCjxESVY+PEI+VG86IDwvQj4mbmJzcDsibGlic3NoMi1kZXZlbCImbHQ7bGli
c3NoMi1kZXZlbEBjb29sLmhheHguc2UmZ3Q7OyA8V0JSPjwvRElWPg0KPERJVj48L0RJVj4N
CjxESVY+PEI+U3ViamVjdDogPC9CPiZuYnNwO1JlOiBsaWJzc2gyX3NjcF9yZWN2IGlzIG5v
dCBwb3B1bGF0aW5nIHN0cnVjdCBzdGF0PC9ESVY+PC9ESVY+DQo8RElWPjxCUj48L0RJVj6j
xaP2o+Wj8iB3cm90ZTo8QlI+Jmd0OyZuYnNwOyBJIHVzaW5nIG9wZW5zc2wtMC45LjhwLEkg
Z290IHRoZSBmb2xsb3dpbmcgdGV4dDo8QlI+Jmd0OyAmbmJzcDsgPEJSPiZndDsmbmJzcDsg
fi9saWJzc2gyLTEuNC4yL2V4YW1wbGUjIC4vc2NwIDEwLjEyOS4xMzkuMTQwIG1xcSBtcXEy
MDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG88QlI+Jmd0OyBbbGlic3NoMl0gMC43
MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVzIGF0IDB4MmFhZjRiMzI2MzdkKzA8QlI+
Jmd0OyBbbGlic3NoMl0gMC43MzU3NjAgU29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6
IDExPEJSPiZndDsgW2xpYnNzaDJdIDAuNzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZh
aWxlZCBnZXR0aW5nIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjYzMCBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY1OSBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY4
NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
NjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczNjc2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjczNjk2NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczNzAyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzA4NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzE0MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODc4MyBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg1NiBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg4MCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkw
NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
ODkyNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczODk1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczODk3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjczOTA1NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczOTA3OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTExNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTI2MCBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTMyNSBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM1MCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM3
NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz
OTQwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy
XSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjczOTQ3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjczOTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjczOTU0NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU3MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTY0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4
LzY0OCBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTg3NCBTb2Nr
ZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1ODxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUg
dG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuODA2NTk3
IFNvY2tldDogUmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7
IFtsaWJzc2gyXSAwLjgwODU0MSBTb2NrZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5
NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5h
YmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5czxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgw
ODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZn
dDsgW2xpYnNzaDJdIDAuODA4ODU0IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUw
OTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4
NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgRmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFE
IDU5IEJCIDI4IDBEIENFIEJEIDk2IDFDIDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjgwOTYzNiBTb2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1
MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3IC0g
V291bGQgYmxvY2sgd2FpdGluZzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6
IFJlY3ZlZCAxMDk2LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+Jmd0OyBbbGlic3No
Ml0gMC44MTEwMTUgU0NQOiBPcGVuaW5nIGNoYW5uZWwgZm9yIFNDUCByZWNlaXZlPEJSPiZn
dDsgW2xpYnNzaDJdIDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMw
PEJSPiZndDsgW2xpYnNzaDJdIDAuODExMDY4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdp
biAyNjIxNDQgcGFjayAzMjc2ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTExNiBTb2NrZXQ6
IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTEx
NDcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2s8QlI+Jmd0OyBbbGlic3NoMl0g
MC44MTExNzcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgc3RhcnRpbmcgdXAg
Y2hhbm5lbDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8x
NjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDA4IENv
bm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgLSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0
NCBwYWNrOiAzMjc2OC8zMjc2ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBz
dGFydGluZyByZXF1ZXN0KGV4ZWMpIG9uIGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYg
Jy91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8nPEJSPiZndDsgW2xpYnNzaDJdIDAuODEx
NDg5IFNvY2tldDogU2VudCAxNDgvMTQ4IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgW2xp
YnNzaDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVl
c3RpbmcgU0NQIHN0YXJ0dXA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBS
ZWN2ZWQgNzIvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjgxMjUxNSBTQ1A6IFNlbmRpbmcgaW5pdGlhbCB3YWtldXA8QlI+Jmd0OyBbbGlic3NoMl0g
MC44MTI1NDkgQ29ubjogV3JpdGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0g
IzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI1NzYgQ29ubjogU2VuZGluZyAxIGJ5dGVzIG9u
IGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9MDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjYxNiBT
b2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g
MC44MTI2NDQgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5u
ZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJlIEV2
ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY5NSBGYWls
dXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8
QlI+Jmd0OyBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMg
MSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw
LjgzMDg5MSBTb2NrZXQ6IFJlY3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxC
Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDkzOCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkg
Zm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWls
dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk5
MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVz
cG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0gMC44NjczNTcgQ29ubjogY2hhbm5lbF9yZWFkKCkg
d2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJz
c2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5
MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ1OCBDb25uOiA5MiBieXRlcyBwYWNrZXRf
YWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ5
OSBDb25uOiBDaGFubmVsIDAgcmVjZWl2ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3
ciAwKTxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUg
cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wPEJSPiZndDsgW2xpYnNzaDJdIDAuODY3NTYyIENv
bm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw
Ljg2NzU5MyBDb25uOiBGcmVlaW5nIGNoYW5uZWwgMC8wIHJlc291cmNlczxCUj4mZ3Q7IFts
aWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMDxCUj4m
Z3Q7IFtsaWJzc2gyXSAwLjg2NzY1NyBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1
MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44Njc2ODYgQ29ubjogQ2xvc2luZyBjaGFubmVs
IDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0
ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44Njc3NjEgU29ja2V0OiBTZW50
IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgYWxsIGRvbmU8QlI+PEJSPlRoZSBh
Ym92ZSBvdXRwdXQgbG9va3MgYWxsIHJpZ2h0LjxCUj48QlI+PEJSPiZndDsmbmJzcDsgSSBq
dXN0IGFkZCBvbmUgY29kZSBpbiBleGFtcGxlL3NjcC5jPEJSPiZndDsmbmJzcDsgbGlic3No
Ml90cmFjZShzZXNzaW9uLExJQlNTSDJfVFJBQ0VfQ09OTiB8IExJQlNTSDJfVFJBQ0VfU09D
S0VUIHwgTElCU1NIMl9UUkFDRV9TQ1AgfCBMSUJTU0gyX1RSQUNFX0VSUk9SICk7PEJSPjxC
Uj5QbGVhc2UgY2hhbmdlIHRvOjxCUj48QlI+bGlic3NoMl90cmFjZShzZXNzaW9uLCB+MCk7
PEJSPjxCUj5hbmQgdGhlbiBzZW5kIGNvbXBsZXRlIG91dHB1dCBmb3Igd2hlbiB0aGUgZXhh
bXBsZSB1c2VzIGxpYmdjcnlwdC48QlI+PEJSPlRoYW5rcyE8QlI+PEJSPjxCUj4vL1BldGVy
PEJSPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPEJS
PmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nvb2wuaGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlz
dGluZm8vbGlic3NoMi1kZXZlbDxCUj4NCjxESVY+PC9ESVY+PC9ESVY+DQo8RElWPjwvRElW
PjwvaW5jbHVkZXRhaWw+PC9ESVY+

------=_NextPart_50769C92_0848E950_2BDABE80--

------=_NextPart_50769C92_0848E950_490B7C06
Content-Type: application/octet-stream;
	charset="gb18030";
	name="scp_libgcrypt.log"
Content-Disposition: attachment; filename="scp_libgcrypt.log"
Content-Transfer-Encoding: base64

W2xpYnNzaDJdIDAuNDk4NDAzIFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr
ZXQgNQpbbGlic3NoMl0gMC40OTg0NTMgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI
LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjQ5ODQ2NSBTb2NrZXQ6IFNlbnQgMjMv
MjMgYnl0ZXMgYXQgMHgyYjE2YzI5MjZlNWQrMApbbGlic3NoMl0gMC40OTg0NzMgU29ja2V0
OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjQ5ODQ3NiBGYWlsdXJl
IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzE5
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTMyNiBTb2Nr
ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzMzAgU29ja2V0OiBS
ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzM0IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTMzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5
dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzNDMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi
YW5uZXIKW2xpYnNzaDJdIDAuNDk5MzQ3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
CltsaWJzc2gyXSAwLjQ5OTM1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli
c3NoMl0gMC40OTkzNTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd
IDAuNDk5MzU5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5
OTM2MyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzNjcg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzcxIFNvY2tl
dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTM3NSBTb2NrZXQ6IFJl
Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzODIgU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5Mzg1IFNvY2tldDogUmVjdmVkIDEgYnl0
ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTM4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh
bm5lcgpbbGlic3NoMl0gMC40OTkzOTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK
W2xpYnNzaDJdIDAuNDk5Mzk0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz
c2gyXSAwLjQ5OTM5NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g
MC40OTk0MDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5
NDA1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQwOCBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0MTEgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDE0IFNvY2tldDogUmVj
dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQxNyBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDIzIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu
bmVyCltsaWJzc2gyXSAwLjQ5OTQyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb
bGlic3NoMl0gMC40OTk0MjkgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz
aDJdIDAuNDk5NDMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw
LjQ5OTQzNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0
MzcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDQwIFNv
Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ0MyBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NDYgU29ja2V0OiBSZWN2
ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDQ5IFNvY2tldDogUmVjdmVkIDEg
Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ1MiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u
ZXIKW2xpYnNzaDJdIDAuNDk5NDU4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts
aWJzc2gyXSAwLjQ5OTQ2MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No
Ml0gMC40OTk0NjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu
NDk5NDY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ3
MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NzMgU29j
a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDc2IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ3OSBTb2NrZXQ6IFJlY3Zl
ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0ODIgU29ja2V0OiBSZWN2ZWQgMSBi
eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDg1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cgpbbGlic3NoMl0gMC40OTk0OTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp
YnNzaDJdIDAuNDk5NDk1IFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu
Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjUw
MDIzMiBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm
ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt
c2hhMQpbbGlic3NoMl0gMC41MDAyMzkgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es
c3NoLWRzcwpbbGlic3NoMl0gMC41MDAyNDEgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx
MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs
eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv
dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC41MDAyNDQg
S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0
cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl
czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz
ZGVzLWNiYwpbbGlic3NoMl0gMC41MDAyNDcgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z
aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo
bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC41MDAyNDkgS2V5IEV4OiBT
ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05
NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g
MC41MDAyNTEgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuNTAwMjU0
IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjUwMDI1NiBLZXkgRXg6
IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjUwMDI1OSBLZXkgRXg6IFNlbnQgTEFOR19T
QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6
IDE0IDUzIDkxIDBCIDQ2IDY5IENCIDQzICBEMiBGMiAyOSA5RCBCMCBBMCAwNiA4RiA6IC5T
Li5GaS5DLi4pLi4uLi4KMDAxMDogMTUgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1
IDJEIDY4IDY1IDZDIDZDIDogLi4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2
NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx
CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy
RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz
IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz
MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll
LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz
MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg
NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3
MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u
LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow
MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg
OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy
RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg
MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx
MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg
NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx
ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg
NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz
dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg
NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD
IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz
MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog
LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg
NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw
IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp
dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx
IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg
MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE
IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy
Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0
IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2
NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6
IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo
bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2
MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h
CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2
MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2
IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy
RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V
aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy
RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg
NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2
NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05
NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2
OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg
NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow
MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg
OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw
MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41MDA0MDgg
U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFu
c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0
IDUzIDkxICAwQiA0NiA2OSBDQiA0MyBEMiBGMiAyOSA6IC4uLi4uLlMuLkZpLkMuLikKMDAx
MDogOUQgQjAgQTAgMDYgOEYgMTUgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog
Li4uLi4uLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg
NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx
IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o
ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4
IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg
MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1
IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t
Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz
IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw
MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6
IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j
dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD
IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2
MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j
CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3
MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE
IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz
OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs
b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz
MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg
MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2
MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs
M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2
MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg
MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow
MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg
OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2
QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg
NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx
OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg
NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz
ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg
NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs
YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg
NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1
IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj
MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog
aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg
MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE
IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx
NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw
IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg
NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx
IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx
LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0
IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz
NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6
IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp
cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw
IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw
MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u
CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw
MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgNzkgMDggOTkgNUUgNDAgMEQgNjggICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLnkuLl5ALmgKW2xpYnNzaDJdIDAuNTAwNTEzIFRy
YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjUw
MDUxOSBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBs
aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw
IDBDIDA2IDAyIDAwIDAwICAwMCAwMCBBRCBDOSA1NiA3OCBDRSAzQyA6IC4uLi4uLi4uLi4u
LlZ4LjwKMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgRTUgMEMgIDdFIEQ5IDE4IDRBIDIxIDAw
IDU1IDY0IDogLi4uLi4uLi5+Li5KIS5VZAowMDIwOiA3OSAwNyAyRiA5QiAyMiBGOCAwMCAw
MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiB5Li8uIi4uLi4uZGlmZmllCjAwMzA6IDJE
IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs
bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE
IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3
MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw
NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6
IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0
IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3
NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj
LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz
MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg
IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3
NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz
aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2
MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg
MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw
OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt
Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg
MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz
aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg
NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy
RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg
MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0
d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg
NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx
IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog
MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht
YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg
NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz
IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK
MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz
IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg
NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx
IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2
Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG
IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw
MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw
IDAwIDEyIDNBIDRGIEMzIEM4IEUzICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLjpP
Li4uCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog
MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u
Li4KW2xpYnNzaDJdIDAuNTAwNjAzIFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl
ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0
ZXMpCjAwMDA6IDE0IEU1IDBDIDdFIEQ5IDE4IDRBIDIxICAwMCA1NSA2NCA3OSAwNyAyRiA5
QiAyMiA6IC4uLn4uLkohLlVkeS4vLiIKMDAxMDogRjggMDAgMDAgMDAgMUEgNjQgNjkgNjYg
IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogLi4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2
MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv
dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw
MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg
NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw
OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj
LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2
MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg
MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp
cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg
NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2
MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg
NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi
Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg
NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1
IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog
MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl
cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg
NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0
IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK
MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz
IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg
NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD
IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx
OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz
IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3
MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE
IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx
LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD
IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz
OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx
ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6
IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1
IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy
RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u
ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2
OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg
IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41
MDA2NzMgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb
bGlic3NoMl0gMC41MDA2NzYgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw
ZTogMjAKW2xpYnNzaDJdIDAuNTAwNjg4IEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6
IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjUwMDY5MSBLZXkgRXg6
IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC41MDA2OTMg
S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy
XSAwLjUwMDY5NiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j
YmMKW2xpYnNzaDJdIDAuNTAwNjk4IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6
IGhtYWMtc2hhMQpbbGlic3NoMl0gMC41MDA3MDAgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND
IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjUwMDcwMyBLZXkgRXg6IEFncmVlZCBv
biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC41MDA3MDUgS2V5IEV4OiBBZ3Jl
ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuNTAwNzE4IEtleSBFeDog
SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy
XSAwLjUwMTE0NiBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry
YW5zcG9ydF93cml0ZSBwbGFpbiAoMTMzIGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MCA0
QiBFMiA5NCAgMUQgOEUgOUIgRjkgMTAgNkYgQTMgNTkgOiAuLi4uLksuLi4uLi4uby5ZCjAw
MTA6IDM2IEI5IDRFIDNFIDdDIDc5IDMzIDQ5ICA0QSA3MSA3QiBEQiBCNCAzRSBDMSA0OCA6
IDYuTj58eTNJSnF7Li4+LkgKMDAyMDogRDcgMzMgMDcgRTggNDMgNzggQTkgMkQgIDM2IDQ0
IDdCIEQ4IDA1IEM3IDNDIEQyIDogLjMuLkN4Li02RHsuLi48LgowMDMwOiAyMCA4QyA0NiBE
NCAzNyBEMiA1NiBGMSAgRjEgMDMgMkEgN0MgNDQgMEYgODcgRDQgOiAgLkYuNy5WLi4uKnxE
Li4uCjAwNDA6IDUwIDM1IDYzIEE5IDUxIEFFIDkyIDQzICA0MiBDNCA2NyA3OCAxNiAyNyA5
QiBBMyA6IFA1Yy5RLi5DQi5neC4nLi4KMDA1MDogNjMgNTggOEUgRTcgN0IgQ0QgNjkgNkMg
IEQwIDc5IEFFIDBDIEVBIDEyIEMyIDQxIDogY1guLnsuaWwueS4uLi4uQQowMDYwOiBDQyBB
RCBCOSBCRCBBMCBGRCA4RCBBQSAgMTkgMDMgN0UgOEEgNUEgQjYgRDQgRDAgOiAuLi4uLi4u
Li4ufi5aLi4uCjAwNzA6IEY4IEE0IDU4IDJGIEUxIDcwIEE2IEQ3ICAyQyA2NyAyRiA0QSA1
QSA4NSA2RSBDMCA6IC4uWC8ucC4uLGcvSloubi4KMDA4MDogMzcgMTQgOTIgNzUgMTcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNy4udS4KW2xpYnNzaDJdIDAuNTAx
MjQ5IFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTQ0IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCA4QyAw
NiAxRSAwMCAwMCAgMDAgODAgNEIgRTIgOTQgMUQgOEUgOUIgOiAuLi4uLi4uLi4uSy4uLi4u
CjAwMTA6IEY5IDEwIDZGIEEzIDU5IDM2IEI5IDRFICAzRSA3QyA3OSAzMyA0OSA0QSA3MSA3
QiA6IC4uby5ZNi5OPnx5M0lKcXsKMDAyMDogREIgQjQgM0UgQzEgNDggRDcgMzMgMDcgIEU4
IDQzIDc4IEE5IDJEIDM2IDQ0IDdCIDogLi4+LkguMy4uQ3guLTZEewowMDMwOiBEOCAwNSBD
NyAzQyBEMiAyMCA4QyA0NiAgRDQgMzcgRDIgNTYgRjEgRjEgMDMgMkEgOiAuLi48LiAuRi43
LlYuLi4qCjAwNDA6IDdDIDQ0IDBGIDg3IEQ0IDUwIDM1IDYzICBBOSA1MSBBRSA5MiA0MyA0
MiBDNCA2NyA6IHxELi4uUDVjLlEuLkNCLmcKMDA1MDogNzggMTYgMjcgOUIgQTMgNjMgNTgg
OEUgIEU3IDdCIENEIDY5IDZDIEQwIDc5IEFFIDogeC4nLi5jWC4uey5pbC55LgowMDYwOiAw
QyBFQSAxMiBDMiA0MSBDQyBBRCBCOSAgQkQgQTAgRkQgOEQgQUEgMTkgMDMgN0UgOiAuLi4u
QS4uLi4uLi4uLi5+CjAwNzA6IDhBIDVBIEI2IEQ0IEQwIEY4IEE0IDU4ICAyRiBFMSA3MCBB
NiBENyAyQyA2NyAyRiA6IC5aLi4uLi5YLy5wLi4sZy8KMDA4MDogNEEgNUEgODUgNkUgQzAg
MzcgMTQgOTIgIDc1IDE3IDJDIDk4IDNCIEUyIDE4IDAyIDogSloubi43Li51LiwuOy4uLgpb
bGlic3NoMl0gMC41MDEyODEgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw
ZTogMzEKW2xpYnNzaDJdIDAuNTAxMjg3IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0
byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMKW2xpYnNzaDJdIDAuNTYyNjQ3IFNvY2tldDog
UmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5z
cG9ydF9yZWFkKCkgcmF3ICgxMDQwIGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwNiAwMiAw
MCAwMCAgMDAgMDAgRUQgQjYgNTEgRTEgNjkgMTcgOiAuLi4uLi4uLi4uLi5RLmkuCjAwMTA6
IDAwIDAwIDAzIEZDIDA0IDFGIDAwIDAwICAwMyAzMiAwMCAwMCAwMCAwNyA3MyA3MyA6IC4u
Li4uLi4uLjIuLi4uc3MKMDAyMDogNjggMkQgNjQgNzMgNzMgMDAgMDAgMDEgIDAxIDAwIERB
IDU2IDZEIDQ1IEUzIDM2IDogaC1kc3MuLi4uLi5WbUUuNgowMDMwOiAzOSBGNCBGNiBBMSA4
OSBGOSBEQiAxNyAgM0IgNzAgODMgRTEgRTQgMTggOEYgNTcgOiA5Li4uLi4uLjtwLi4uLi5X
CjAwNDA6IEE3IDNGIDhGIEJBIEU3IEE0IDcyIERCICBGQiAwNiBGRSA1NSA0MiBCNiBCNCA0
NiA6IC4/Li4uLnIuLi4uVUIuLkYKMDA1MDogMzcgN0UgQzggMkEgNjMgNzIgMDkgQzcgIEYy
IDJEIDg1IDgxIDZBIEVCIDFFIDhDIDogN34uKmNyLi4uLS4uai4uLgowMDYwOiBDOSA0RCA2
NCAyMCBGNiAzOCA1NyA5QyAgRDUgNDkgNEYgNzcgNzkgNjYgNkIgNjIgOiAuTWQgLjhXLi5J
T3d5ZmtiCjAwNzA6IDg1IDFCIDQxIDI1IEU4IDYxIEI2IEQ5ICBDRiAxNCAwRCBGQiBERCBG
QSA2MiAwNyA6IC4uQSUuYS4uLi4uLi4uYi4KMDA4MDogRkYgRUQgMkIgMkQgQjMgNzEgQUEg
MUEgIDBCIDE2IDdDIEY1IDY4IDE1IDM3IEMyIDogLi4rLS5xLi4uLnwuaC43LgowMDkwOiBD
QyA1MSBFNyA0RSA1OSA5MiA4MCBFRCAgODUgQjcgMjkgREQgQTIgNjQgNUYgQjcgOiAuUS5O
WS4uLi4uKS4uZF8uCjAwYTA6IDg5IDNCIDk2IDIyIDA1IDUzIDU3IDBGICA1NyBBQyA2NCA1
NCBERiAxMSA5NSA1OCA6IC47LiIuU1cuVy5kVC4uLlgKMDBiMDogNkIgNzUgNkIgQkUgRjUg
Q0IgMEUgQzAgIDk0IDAwIEE5IDNDIERCIDYzIEVGIEE2IDoga3VrLi4uLi4uLi48LmMuLgow
MGMwOiBDMSBEMyBDMSAyQyBFNyAyMCBFNCBFMCAgOEEgN0MgNDIgMzAgM0UgNEEgQTYgNzkg
OiAuLi4sLiAuLi58QjA+Si55CjAwZDA6IDFDIDQzIEE4IDk3IEQ2IDJBIDQxIDJEICAxRiBE
RSA1QSBGOSAxRCA2QyBBOCAwQiA6IC5DLi4uKkEtLi5aLi5sLi4KMDBlMDogNTYgNUIgQUIg
QkQgMUYgNTAgQ0UgNzQgIDQwIEFDIDlDIDk3IEE5IEM5IEIyIDUyIDogVlsuLi5QLnRALi4u
Li4uUgowMGYwOiA2QSAzOSAwRCBCOCA4MyAxNyA0OSA1OSAgQ0EgRUQgRkEgMUIgRTAgQjEg
QTAgNkEgOiBqOS4uLi5JWS4uLi4uLi5qCjAxMDA6IEU2IEJEIDMzIDhFIDlDIEM2IEMyIEQw
ICA4MCBBNSA2MiBEOCA1RCA0NiA3QSAxMyA6IC4uMy4uLi4uLi5iLl1Gei4KMDExMDogRDEg
M0YgNDggNzcgMjkgMTIgODEgNzcgIEM3IDAxIDdCIDZDIEUxIEI3IEFGIDU2IDogLj9Idyku
LncuLntsLi4uVgowMTIwOiBFQyA2RCBDMSBFMSBDRSA3NSBFQyBCMCAgN0YgNzcgMDAgMDAg
MDAgMTUgMDAgRjEgOiAubS4uLnUuLi53Li4uLi4uCjAxMzA6IDdDIDJCIDU1IDk3IEJDIDA2
IDVGIDYyICBEMCA5QSA2QiBGRCA0RCBBQSBGMyA1QSA6IHwrVS4uLl9iLi5rLk0uLloKMDE0
MDogRTMgQjUgMTcgMDAgMDAgMDEgMDAgM0UgIEY5IDg2IEJCIDMxIDVCIDJBIDk5IDQ4IDog
Li4uLi4uLj4uLi4xWyouSAowMTUwOiAwMSBBMCAxNSA1MSAwQyBBRiA0NSBEMyAgN0YgMTEg
MjkgMzggNDggNzAgMEQgMkUgOiAuLi5RLi5FLi4uKThIcC4uCjAxNjA6IENGIDBGIDc4IEQ3
IDJGIEYxIDhEIDcwICAzRiA1NyBCMiAzOSA5MiA3MCA0RCAzMyA6IC4ueC4vLi5wP1cuOS5w
TTMKMDE3MDogQTQgMkYgRDYgMTYgQTIgMDcgNzIgOTUgIDk3IDE5IEZBIDU0IDU2IDc1IDFF
IDlFIDogLi8uLi4uci4uLi5UVnUuLgowMTgwOiA1QyBDQSBDOCBENCA2QiA2OSA1OSAyQSAg
MzkgMzcgRjkgQUQgRTYgMjUgRDEgMjggOiBcLi4ua2lZKjk3Li4uJS4oCjAxOTA6IDk2IEU3
IEQwIEZBIDUxIDc4IEUwIDUzICBDRSBFMCAyMCBGMyA3NCAzNCA3MyA2MiA6IC4uLi5ReC5T
Li4gLnQ0c2IKMDFhMDogMTggRTggMkUgNUYgMzkgOUUgMDIgQUIgIEJEIDVBIDY4IEU5IDlG
IEU5IDdEIEFEIDogLi4uXzkuLi4uWmguLi59LgowMWIwOiA3MSBCMCA0NiAzNSBCQSA2MyBB
QiBBRSAgQUMgMDIgRDYgODggNzMgNjcgNDUgNDYgOiBxLkY1LmMuLi4uLi5zZ0VGCjAxYzA6
IEFCIDBGIDNBIEM5IDU2IEIyIDcyIDlDICAwRSA4QyBCQiBERCAyMyAyMCA5MCBFMyA6IC4u
Oi5WLnIuLi4uLiMgLi4KMDFkMDogODAgRTMgNEYgNjUgRUMgRjQgRTYgODUgIEJBIDA4IEVG
IDkwIDVFIEYyIDA1IEJFIDogLi5PZS4uLi4uLi4uXi4uLgowMWUwOiAwMSA4NSA0QyA1RiBB
MCAwNCA1MCA1NSAgNzkgMUEgQ0YgRjggNTEgOTkgRjMgMTQgOiAuLkxfLi5QVXkuLi5RLi4u
CjAxZjA6IDg1IEZFIERCIDM0IDQ1IDEzIDg4IDVFICBGRiA5NSBGOSBBRiAxNiBFRCAyQSAy
QyA6IC4uLjRFLi5eLi4uLi4uKiwKMDIwMDogRTggQTQgRTEgRTQgNTIgNTcgMDcgMzYgIDc0
IEUyIDQ0IEZFIEE3IDlDIDE0IDg1IDogLi4uLlJXLjZ0LkQuLi4uLgowMjEwOiAwQyBCMCBF
NSAzMiA0NSA1OCA4MSBDQyAgQjggMTMgNjMgMkQgNzkgQzEgODkgQzQgOiAuLi4yRVguLi4u
Yy15Li4uCjAyMjA6IDVCIEMxIDc4IEY1IDA2IDQ3IEI4IDA1ICBFNSA2RiA5OCAwRSBDQSAy
NiA3MCAxNSA6IFsueC4uRy4uLm8uLi4mcC4KMDIzMDogNEUgODYgNEQgMEIgRUEgMEUgRUEg
M0YgIDdBIDE4IDhEIDEzIDE5IDQ4IDNEIDhEIDogTi5NLi4uLj96Li4uLkg9LgowMjQwOiA0
RSBFRSA0NSAyMiA2NyA2RiBCOSAwMCAgMDAgMDEgMDEgMDAgQTYgMDQgOTggOTAgOiBOLkUi
Z28uLi4uLi4uLi4uCjAyNTA6IDFDIDcyIEVGIDc5IENBIEU2IDhCIDUxICA2QiA5MSBGNSAx
OCAxRSBDQSBDRiBEQiA6IC5yLnkuLi5Ray4uLi4uLi4KMDI2MDogQUMgNjUgOTcgMDQgNjQg
OEEgQ0UgRkYgIDU2IDhDIDNBIDZGIDA4IDM1IEQ2IDRCIDogLmUuLmQuLi5WLjpvLjUuSwow
MjcwOiAzQSBGMyBEQSA5NyBFMCBFNyBGMSBGOCAgMUIgRjggNDcgMTEgRkMgMDEgMEUgOEYg
OiA6Li4uLi4uLi4uRy4uLi4uCjAyODA6IDk1IDg0IDRDIDA4IDgzIDgwIDQyIENEICAzMiA3
QiA4NCAwRSAzMCAzNCA4NiA4RCA6IC4uTC4uLkIuMnsuLjA0Li4KMDI5MDogMTkgQTQgNEMg
RUYgQjcgQTcgRDIgQ0MgIDM4IDE0IDNDIEJDIDFBIDI0IEZFIDcwIDogLi5MLi4uLi44Ljwu
LiQucAowMmEwOiBGRiBCRiBDNCA4NyBBOCBGMyAzNSA5MCAgNjIgNzkgNTkgRjUgRUEgNjIg
NDUgRTQgOiAuLi4uLi41LmJ5WS4uYkUuCjAyYjA6IDE3IDU0IDBBIDkwIDQyIDM0IDQyIEUz
ICAxMCAyOCBCRSBFQiA1NSA5RCAyNyBFMSA6IC5ULi5CNEIuLiguLlUuJy4KMDJjMDogNkYg
QzcgMTYgNTggRDggNzEgOEYgRkIgIDJEIERGIEYwIEM1IEQ2IDY1IDFCIDEzIDogby4uWC5x
Li4tLi4uLmUuLgowMmQwOiAwQiA4MCBFQSA0MiA0NCAxNCBBRiAyOCAgNjUgRDUgRkQgQ0Yg
QTggMjEgNkUgNzIgOiAuLi5CRC4uKGUuLi4uIW5yCjAyZTA6IDc1IEI1IDhCIDkxIDNBIDc5
IEFEIDhCICBFQSA3MiBDNiAzOSBGOCBCMSA3QSA3OCA6IHUuLi46eS4uLnIuOS4uengKMDJm
MDogRjYgQ0EgODMgRkMgNDEgOTUgNjIgNEIgIEU4IDUyIDQxIDhCIDBCIDRCIERGIDFDIDog
Li4uLkEuYksuUkEuLksuLgowMzAwOiBDNyA1QyBBMCBGRSBCRCA2QiBCNyAzQSAgMTkgQUYg
NDQgMjggNjggREMgN0EgMkIgOiAuXC4uLmsuOi4uRChoLnorCjAzMTA6IDE5IEM5IDBEIEM4
IDU4IDEyIDIyIDE3ICA4QSA3QyBDMiAwMyAyRSA1QyBFOCBBMyA6IC4uLi5YLiIuLnwuLi5c
Li4KMDMyMDogQzEgNjEgM0MgNkIgOEQgODcgRDggOEIgIEI4IDU3IDI4IDUwIDZGIDFEIDQ2
IDRGIDogLmE8ay4uLi4uVyhQby5GTwowMzMwOiBGNiBFMSA4NSBBQyBCQiA4NyA5QiBFMSAg
MEEgQUQgOTUgNkYgODAgNEQgN0EgRjQgOiAuLi4uLi4uLi4uLm8uTXouCjAzNDA6IDcyIEEw
IEZEIDZBIDUzIDc5IDc5IDhBICAxMiA3QiA0RSBGQiAwMCAwMCAwMCA4MSA6IHIuLmpTeXku
LntOLi4uLi4KMDM1MDogMDAgOTEgMDEgNTMgOUYgM0IgRjggQzIgIEE3IEJEIDlGIDM1IDE4
IDg4IDREIDE2IDogLi4uUy47Li4uLi41Li5NLgowMzYwOiAzNyA2NyA5QyBCOSA4MyA1RCA5
QiA4QiAgRTQgMzQgQjkgOTEgNUIgNzIgRDAgQUMgOiA3Zy4uLl0uLi40Li5bci4uCjAzNzA6
IDIwIEMyIEFBIDMzIDM3IDI0IEM1IDFGICA4MyBGQyBDQSBCMiAxNSA1NCA1MyA3MCA6ICAu
LjM3JC4uLi4uLi5UU3AKMDM4MDogQjcgM0YgQjkgQUIgNDMgMzYgNEQgOUUgIEUzIDkxIDI2
IDJFIDc3IDFCIDREIDg1IDogLj8uLkM2TS4uLiYudy5NLgowMzkwOiBFNyA5RSBBNSA2QiA4
NCA4RSA2RiA3RSAgNzggMDQgMjQgQ0QgNjQgNTggQkEgREIgOiAuLi5rLi5vfnguJC5kWC4u
CjAzYTA6IDBFIENDIENFIDE3IEQwIDQxIDQxIEM4ICBCMyA1OCBBMSA5RiBBOCBGNyA4RSBE
NyA6IC4uLi4uQUEuLlguLi4uLi4KMDNiMDogNjQgM0EgMDkgRkQgNTMgNEIgRTUgNTMgIEMx
IEIwIEQyIEExIEZBIDM5IEVEIEZGIDogZDouLlNLLlMuLi4uLjkuLgowM2MwOiA2MyBEOCAz
MCBGRSA0MSBBNyA1OSAwMCAgN0YgRkIgNkQgQ0IgOTQgRTMgRTIgRkUgOiBjLjAuQS5ZLi4u
bS4uLi4uCjAzZDA6IDIyIDAwIDAwIDAwIDM3IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2
NCA3MyA3MyA6ICIuLi43Li4uLnNzaC1kc3MKMDNlMDogMDAgMDAgMDAgMjggQTIgN0UgNEIg
MUEgIEMxIDQ5IEM1IDVDIEUxIDBFIEUzIDdEIDogLi4uKC5+Sy4uSS5cLi4ufQowM2YwOiBG
NCA4MSBENyBDRCAyQiA3NyA0OCA1MiAgNjkgNUUgNDIgMjQgOTYgRTEgREEgRjggOiAuLi4u
K3dIUmleQiQuLi4uCjA0MDA6IENGIDgxIDNFIDY5IDYyIDAxIDI1IDdFICBGMiAzNCAxOCA4
QiA3NSA2OCAzNSA5RCA6IC4uPmliLiV+LjQuLnVoNS4KPT4gbGlic3NoMl90cmFuc3BvcnRf
cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC41NjI4MzYgVHJh
bnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3Ry
YW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwMTUgYnl0ZXMpCjAwMDA6IDFGIDAwIDAwIDAzIDMy
IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2NCA3MyA3MyA6IC4uLi4yLi4uLnNzaC1kc3MK
MDAxMDogMDAgMDAgMDEgMDEgMDAgREEgNTYgNkQgIDQ1IEUzIDM2IDM5IEY0IEY2IEExIDg5
IDogLi4uLi4uVm1FLjY5Li4uLgowMDIwOiBGOSBEQiAxNyAzQiA3MCA4MyBFMSBFNCAgMTgg
OEYgNTcgQTcgM0YgOEYgQkEgRTcgOiAuLi47cC4uLi4uVy4/Li4uCjAwMzA6IEE0IDcyIERC
IEZCIDA2IEZFIDU1IDQyICBCNiBCNCA0NiAzNyA3RSBDOCAyQSA2MyA6IC5yLi4uLlVCLi5G
N34uKmMKMDA0MDogNzIgMDkgQzcgRjIgMkQgODUgODEgNkEgIEVCIDFFIDhDIEM5IDREIDY0
IDIwIEY2IDogci4uLi0uLmouLi4uTWQgLgowMDUwOiAzOCA1NyA5QyBENSA0OSA0RiA3NyA3
OSAgNjYgNkIgNjIgODUgMUIgNDEgMjUgRTggOiA4Vy4uSU93eWZrYi4uQSUuCjAwNjA6IDYx
IEI2IEQ5IENGIDE0IDBEIEZCIEREICBGQSA2MiAwNyBGRiBFRCAyQiAyRCBCMyA6IGEuLi4u
Li4uLmIuLi4rLS4KMDA3MDogNzEgQUEgMUEgMEIgMTYgN0MgRjUgNjggIDE1IDM3IEMyIEND
IDUxIEU3IDRFIDU5IDogcS4uLi58LmguNy4uUS5OWQowMDgwOiA5MiA4MCBFRCA4NSBCNyAy
OSBERCBBMiAgNjQgNUYgQjcgODkgM0IgOTYgMjIgMDUgOiAuLi4uLikuLmRfLi47LiIuCjAw
OTA6IDUzIDU3IDBGIDU3IEFDIDY0IDU0IERGICAxMSA5NSA1OCA2QiA3NSA2QiBCRSBGNSA6
IFNXLlcuZFQuLi5Ya3VrLi4KMDBhMDogQ0IgMEUgQzAgOTQgMDAgQTkgM0MgREIgIDYzIEVG
IEE2IEMxIEQzIEMxIDJDIEU3IDogLi4uLi4uPC5jLi4uLi4sLgowMGIwOiAyMCBFNCBFMCA4
QSA3QyA0MiAzMCAzRSAgNEEgQTYgNzkgMUMgNDMgQTggOTcgRDYgOiAgLi4ufEIwPkoueS5D
Li4uCjAwYzA6IDJBIDQxIDJEIDFGIERFIDVBIEY5IDFEICA2QyBBOCAwQiA1NiA1QiBBQiBC
RCAxRiA6ICpBLS4uWi4ubC4uVlsuLi4KMDBkMDogNTAgQ0UgNzQgNDAgQUMgOUMgOTcgQTkg
IEM5IEIyIDUyIDZBIDM5IDBEIEI4IDgzIDogUC50QC4uLi4uLlJqOS4uLgowMGUwOiAxNyA0
OSA1OSBDQSBFRCBGQSAxQiBFMCAgQjEgQTAgNkEgRTYgQkQgMzMgOEUgOUMgOiAuSVkuLi4u
Li4uai4uMy4uCjAwZjA6IEM2IEMyIEQwIDgwIEE1IDYyIEQ4IDVEICA0NiA3QSAxMyBEMSAz
RiA0OCA3NyAyOSA6IC4uLi4uYi5dRnouLj9IdykKMDEwMDogMTIgODEgNzcgQzcgMDEgN0Ig
NkMgRTEgIEI3IEFGIDU2IEVDIDZEIEMxIEUxIENFIDogLi53Li57bC4uLlYubS4uLgowMTEw
OiA3NSBFQyBCMCA3RiA3NyAwMCAwMCAwMCAgMTUgMDAgRjEgN0MgMkIgNTUgOTcgQkMgOiB1
Li4udy4uLi4uLnwrVS4uCjAxMjA6IDA2IDVGIDYyIEQwIDlBIDZCIEZEIDREICBBQSBGMyA1
QSBFMyBCNSAxNyAwMCAwMCA6IC5fYi4uay5NLi5aLi4uLi4KMDEzMDogMDEgMDAgM0UgRjkg
ODYgQkIgMzEgNUIgIDJBIDk5IDQ4IDAxIEEwIDE1IDUxIDBDIDogLi4+Li4uMVsqLkguLi5R
LgowMTQwOiBBRiA0NSBEMyA3RiAxMSAyOSAzOCA0OCAgNzAgMEQgMkUgQ0YgMEYgNzggRDcg
MkYgOiAuRS4uLik4SHAuLi4ueC4vCjAxNTA6IEYxIDhEIDcwIDNGIDU3IEIyIDM5IDkyICA3
MCA0RCAzMyBBNCAyRiBENiAxNiBBMiA6IC4ucD9XLjkucE0zLi8uLi4KMDE2MDogMDcgNzIg
OTUgOTcgMTkgRkEgNTQgNTYgIDc1IDFFIDlFIDVDIENBIEM4IEQ0IDZCIDogLnIuLi4uVFZ1
Li5cLi4uawowMTcwOiA2OSA1OSAyQSAzOSAzNyBGOSBBRCBFNiAgMjUgRDEgMjggOTYgRTcg
RDAgRkEgNTEgOiBpWSo5Ny4uLiUuKC4uLi5RCjAxODA6IDc4IEUwIDUzIENFIEUwIDIwIEYz
IDc0ICAzNCA3MyA2MiAxOCBFOCAyRSA1RiAzOSA6IHguUy4uIC50NHNiLi4uXzkKMDE5MDog
OUUgMDIgQUIgQkQgNUEgNjggRTkgOUYgIEU5IDdEIEFEIDcxIEIwIDQ2IDM1IEJBIDogLi4u
LlpoLi4ufS5xLkY1LgowMWEwOiA2MyBBQiBBRSBBQyAwMiBENiA4OCA3MyAgNjcgNDUgNDYg
QUIgMEYgM0EgQzkgNTYgOiBjLi4uLi4uc2dFRi4uOi5WCjAxYjA6IEIyIDcyIDlDIDBFIDhD
IEJCIEREIDIzICAyMCA5MCBFMyA4MCBFMyA0RiA2NSBFQyA6IC5yLi4uLi4jIC4uLi5PZS4K
MDFjMDogRjQgRTYgODUgQkEgMDggRUYgOTAgNUUgIEYyIDA1IEJFIDAxIDg1IDRDIDVGIEEw
IDogLi4uLi4uLl4uLi4uLkxfLgowMWQwOiAwNCA1MCA1NSA3OSAxQSBDRiBGOCA1MSAgOTkg
RjMgMTQgODUgRkUgREIgMzQgNDUgOiAuUFV5Li4uUS4uLi4uLjRFCjAxZTA6IDEzIDg4IDVF
IEZGIDk1IEY5IEFGIDE2ICBFRCAyQSAyQyBFOCBBNCBFMSBFNCA1MiA6IC4uXi4uLi4uLios
Li4uLlIKMDFmMDogNTcgMDcgMzYgNzQgRTIgNDQgRkUgQTcgIDlDIDE0IDg1IDBDIEIwIEU1
IDMyIDQ1IDogVy42dC5ELi4uLi4uLi4yRQowMjAwOiA1OCA4MSBDQyBCOCAxMyA2MyAyRCA3
OSAgQzEgODkgQzQgNUIgQzEgNzggRjUgMDYgOiBYLi4uLmMteS4uLlsueC4uCjAyMTA6IDQ3
IEI4IDA1IEU1IDZGIDk4IDBFIENBICAyNiA3MCAxNSA0RSA4NiA0RCAwQiBFQSA6IEcuLi5v
Li4uJnAuTi5NLi4KMDIyMDogMEUgRUEgM0YgN0EgMTggOEQgMTMgMTkgIDQ4IDNEIDhEIDRF
IEVFIDQ1IDIyIDY3IDogLi4/ei4uLi5IPS5OLkUiZwowMjMwOiA2RiBCOSAwMCAwMCAwMSAw
MSAwMCBBNiAgMDQgOTggOTAgMUMgNzIgRUYgNzkgQ0EgOiBvLi4uLi4uLi4uLi5yLnkuCjAy
NDA6IEU2IDhCIDUxIDZCIDkxIEY1IDE4IDFFICBDQSBDRiBEQiBBQyA2NSA5NyAwNCA2NCA6
IC4uUWsuLi4uLi4uLmUuLmQKMDI1MDogOEEgQ0UgRkYgNTYgOEMgM0EgNkYgMDggIDM1IEQ2
IDRCIDNBIEYzIERBIDk3IEUwIDogLi4uVi46by41Lks6Li4uLgowMjYwOiBFNyBGMSBGOCAx
QiBGOCA0NyAxMSBGQyAgMDEgMEUgOEYgOTUgODQgNEMgMDggODMgOiAuLi4uLkcuLi4uLi4u
TC4uCjAyNzA6IDgwIDQyIENEIDMyIDdCIDg0IDBFIDMwICAzNCA4NiA4RCAxOSBBNCA0QyBF
RiBCNyA6IC5CLjJ7Li4wNC4uLi5MLi4KMDI4MDogQTcgRDIgQ0MgMzggMTQgM0MgQkMgMUEg
IDI0IEZFIDcwIEZGIEJGIEM0IDg3IEE4IDogLi4uOC48Li4kLnAuLi4uLgowMjkwOiBGMyAz
NSA5MCA2MiA3OSA1OSBGNSBFQSAgNjIgNDUgRTQgMTcgNTQgMEEgOTAgNDIgOiAuNS5ieVku
LmJFLi5ULi5CCjAyYTA6IDM0IDQyIEUzIDEwIDI4IEJFIEVCIDU1ICA5RCAyNyBFMSA2RiBD
NyAxNiA1OCBEOCA6IDRCLi4oLi5VLicuby4uWC4KMDJiMDogNzEgOEYgRkIgMkQgREYgRjAg
QzUgRDYgIDY1IDFCIDEzIDBCIDgwIEVBIDQyIDQ0IDogcS4uLS4uLi5lLi4uLi5CRAowMmMw
OiAxNCBBRiAyOCA2NSBENSBGRCBDRiBBOCAgMjEgNkUgNzIgNzUgQjUgOEIgOTEgM0EgOiAu
LihlLi4uLiFucnUuLi46CjAyZDA6IDc5IEFEIDhCIEVBIDcyIEM2IDM5IEY4ICBCMSA3QSA3
OCBGNiBDQSA4MyBGQyA0MSA6IHkuLi5yLjkuLnp4Li4uLkEKMDJlMDogOTUgNjIgNEIgRTgg
NTIgNDEgOEIgMEIgIDRCIERGIDFDIEM3IDVDIEEwIEZFIEJEIDogLmJLLlJBLi5LLi4uXC4u
LgowMmYwOiA2QiBCNyAzQSAxOSBBRiA0NCAyOCA2OCAgREMgN0EgMkIgMTkgQzkgMEQgQzgg
NTggOiBrLjouLkQoaC56Ky4uLi5YCjAzMDA6IDEyIDIyIDE3IDhBIDdDIEMyIDAzIDJFICA1
QyBFOCBBMyBDMSA2MSAzQyA2QiA4RCA6IC4iLi58Li4uXC4uLmE8ay4KMDMxMDogODcgRDgg
OEIgQjggNTcgMjggNTAgNkYgIDFEIDQ2IDRGIEY2IEUxIDg1IEFDIEJCIDogLi4uLlcoUG8u
Rk8uLi4uLgowMzIwOiA4NyA5QiBFMSAwQSBBRCA5NSA2RiA4MCAgNEQgN0EgRjQgNzIgQTAg
RkQgNkEgNTMgOiAuLi4uLi5vLk16LnIuLmpTCjAzMzA6IDc5IDc5IDhBIDEyIDdCIDRFIEZC
IDAwICAwMCAwMCA4MSAwMCA5MSAwMSA1MyA5RiA6IHl5Li57Ti4uLi4uLi4uUy4KMDM0MDog
M0IgRjggQzIgQTcgQkQgOUYgMzUgMTggIDg4IDREIDE2IDM3IDY3IDlDIEI5IDgzIDogOy4u
Li4uNS4uTS43Zy4uLgowMzUwOiA1RCA5QiA4QiBFNCAzNCBCOSA5MSA1QiAgNzIgRDAgQUMg
MjAgQzIgQUEgMzMgMzcgOiBdLi4uNC4uW3IuLiAuLjM3CjAzNjA6IDI0IEM1IDFGIDgzIEZD
IENBIEIyIDE1ICA1NCA1MyA3MCBCNyAzRiBCOSBBQiA0MyA6ICQuLi4uLi4uVFNwLj8uLkMK
MDM3MDogMzYgNEQgOUUgRTMgOTEgMjYgMkUgNzcgIDFCIDREIDg1IEU3IDlFIEE1IDZCIDg0
IDogNk0uLi4mLncuTS4uLi5rLgowMzgwOiA4RSA2RiA3RSA3OCAwNCAyNCBDRCA2NCAgNTgg
QkEgREIgMEUgQ0MgQ0UgMTcgRDAgOiAub354LiQuZFguLi4uLi4uCjAzOTA6IDQxIDQxIEM4
IEIzIDU4IEExIDlGIEE4ICBGNyA4RSBENyA2NCAzQSAwOSBGRCA1MyA6IEFBLi5YLi4uLi4u
ZDouLlMKMDNhMDogNEIgRTUgNTMgQzEgQjAgRDIgQTEgRkEgIDM5IEVEIEZGIDYzIEQ4IDMw
IEZFIDQxIDogSy5TLi4uLi45Li5jLjAuQQowM2IwOiBBNyA1OSAwMCA3RiBGQiA2RCBDQiA5
NCAgRTMgRTIgRkUgMjIgMDAgMDAgMDAgMzcgOiAuWS4uLm0uLi4uLiIuLi43CjAzYzA6IDAw
IDAwIDAwIDA3IDczIDczIDY4IDJEICA2NCA3MyA3MyAwMCAwMCAwMCAyOCBBMiA6IC4uLi5z
c2gtZHNzLi4uKC4KMDNkMDogN0UgNEIgMUEgQzEgNDkgQzUgNUMgRTEgIDBFIEUzIDdEIEY0
IDgxIEQ3IENEIDJCIDogfksuLkkuXC4uLn0uLi4uKwowM2UwOiA3NyA0OCA1MiA2OSA1RSA0
MiAyNCA5NiAgRTEgREEgRjggQ0YgODEgM0UgNjkgNjIgOiB3SFJpXkIkLi4uLi4uPmliCjAz
ZjA6IDAxIDI1IDdFIEYyIDM0IDE4IDhCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IC4lfi40Li4KW2xpYnNzaDJdIDAuNTYyOTk5IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMzEg
cmVjZWl2ZWQsIGxlbmd0aD0xMDE1CltsaWJzc2gyXSAwLjU2MzAwMiBUcmFuc3BvcnQ6IExv
b2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAzMQpbbGlic3NoMl0gMC41NjMwMzEgS2V5IEV4
OiBTZXJ2ZXIncyBNRDUgRmluZ2VycHJpbnQ6IGU3OjA0OjhiOmZmOmRkOjYzOjQ0OmEzOmFj
OmIwOmI3OjM5OmYxOjAxOjVkOmE1CltsaWJzc2gyXSAwLjU2MzA0NiBLZXkgRXg6IFNlcnZl
cidzIFNIQTEgRmluZ2VycHJpbnQ6IDhlOmZmOjlmOmFkOjU5OmJiOjI4OjBkOmNlOmJkOjk2
OjFjOjgwOjU2OjdiOjNhOmRmOjY1OmZkOmQyCltsaWJzc2gyXSAwLjU2Njg1NSBLZXkgRXg6
IFNlbmRpbmcgTkVXS0VZUyBtZXNzYWdlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs
YWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjU2NjkzMCBTb2NrZXQ6IFNlbnQgMTYv
MTYgYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgp
ICgxNiBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMEEgMTUgMUYgMkQgIEMwIEY3IDM5IDdC
IDczIDg1IDU5IDVCIDogLi4uLi4uLi0uLjl7cy5ZWwpbbGlic3NoMl0gMC41NjY5MzkgVHJh
bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMjEKW2xpYnNzaDJdIDAuNTY2
OTQzIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9u
IGtleXMKW2xpYnNzaDJdIDAuNTY3MTM3IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVz
IHRvIDB4NTAyYzM4KzAKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHJhdyAoMzIgYnl0
ZXMpCjAwMDA6IDAwIDAwIDAwIDBDIDA2IDAyIDAwIDAwICAwMCAwMCA3RSBDRCA3MiBBNyBD
OCBENSA6IC4uLi4uLi4uLi5+LnIuLi4KMDAxMDogMDAgMDAgMDAgMEMgMEEgMTUgNzAgRUEg
IEZGIDcxIDg4IDhEIEU4IDY2IDYwIDBFIDogLi4uLi4ucC4ucS4uLmZgLgo9PiBsaWJzc2gy
X3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAwIDAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4uCltsaWJzc2gyXSAw
LjU2NzE1OSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQsIGxlbmd0aD01Cj0+
IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykKMDAwMDogMTUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLgpbbGlic3No
Ml0gMC41NjcxNjkgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMSByZWNlaXZlZCwgbGVuZ3Ro
PTEKW2xpYnNzaDJdIDAuNTY3MTc0IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m
IHR5cGU6IDIxCltsaWJzc2gyXSAwLjU2NzE3OCBLZXkgRXg6IFJlY2VpdmVkIE5FV0tFWVMg
bWVzc2FnZQpbbGlic3NoMl0gMC41NjcxODEgS2V5IEV4OiBzZXNzaW9uX2lkIGNhbGN1bGF0
ZWQKW2xpYnNzaDJdIDAuNTY3MjU3IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQg
S2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNTY3MzA1IEtleSBFeDogU2VydmVyIHRvIENs
aWVudCBJViBhbmQgS2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNTY3MzMzIEtleSBFeDog
Q2xpZW50IHRvIFNlcnZlciBITUFDIEtleSBjYWxjdWxhdGVkCltsaWJzc2gyXSAwLjU2NzM0
MSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZApbbGlic3No
Ml0gMC41NjczNDQgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVyIGNvbXByZXNzaW9uIGluaXRp
YWxpemVkCltsaWJzc2gyXSAwLjU2NzM0NyBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgY29t
cHJlc3Npb24gaW5pdGlhbGl6ZWQKW2xpYnNzaDJdIDAuNTY3MzUyIFRyYW5zcG9ydDogUmVx
dWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs
YWluICgxNyBieXRlcykKMDAwMDogMDUgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDcz
IDY1IDcyIDYxIDc1IDc0IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjU2
NzQ1OSBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90
cmFuc3BvcnRfd3JpdGUgc2VuZCgpICg1MiBieXRlcykKMDAwMDogRkMgNUQgNDEgOUUgQzkg
ODMgNjQgMDMgIEVEIEYwIDkwIDU3IEUzIEI1IDREIDk0IDogLl1BLi4uZC4uLi5XLi5NLgow
MDEwOiBCOSBCRCAyQyA5NSAzNCA2MyA4MCBEQiAgMEQgNzkgQ0MgOTcgMTggNUIgMkEgOTMg
OiAuLiwuNGMuLi55Li4uWyouCjAwMjA6IDZCIDhFIDREIDNGIEQzIEI3IEEwIDQ5ICA5MCAw
MyBBQSBDMCBDQiAwMiA5OSAxRiA6IGsuTT8uLi5JLi4uLi4uLi4KMDAzMDogODMgNTcgM0Ug
MjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLlc+JApbbGlic3No
Ml0gMC41Njc0NzYgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpb
bGlic3NoMl0gMC41Njc3MDIgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1
MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAw
MDogOTMgRTMgM0YgOEQgNUIgN0UgMjAgNjMgIDA1IDg2IDI2IERCIDhCIDdGIDQ2IDA5IDog
Li4/Llt+IGMuLiYuLi5GLgowMDEwOiA5RCAwNSA3MSA2OSBGRiBFQSBCQyBDRSAgNkMgNDUg
MjYgMkEgOTggQTIgMTEgMTAgOiAuLnFpLi4uLmxFJiouLi4uCjAwMjA6IEFEIDJCIEY3IDY1
IDE5IEI0IDM5IEQ1ICBFNSA2QSA5MCBDNCA2QiBFRSA0RiAxNCA6IC4rLmUuLjkuLmouLmsu
Ty4KMDAzMDogOEIgQ0YgMjMgNTYgQjQgNTQgRDggNUMgIEFBIEMwIDQ5IEM5IDdEIEFBIDhD
IEIyIDogLi4jVi5ULlwuLkkufS4uLgowMDQwOiA3NiBENSA3OCBENiBDRSAzNiAwNSAyRiAg
NzEgQjIgNkIgMEIgNzYgN0YgREIgNkMgOiB2LnguLjYuL3Euay52Li5sCjAwNTA6IDVBIDIw
IDFGIEZFIDNEIDMzIDg2IEM3ICAgICAgICAgICAgICAgICAgICAgICAgICA6IFogLi49My4u
Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIg
MDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4K
W2xpYnNzaDJdIDAuNTY3NzU5IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwg
bGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykK
MDAwMDogMDYgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDczIDY1IDcyIDYxIDc1IDc0
IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjU2NzgwNyBUcmFuc3BvcnQ6
IFBhY2tldCB0eXBlIDYgcmVjZWl2ZWQsIGxlbmd0aD0xNwpbbGlic3NoMl0gMC41Njc4MTAg
VHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpGaW5nZXJwcmludDog
OEUgRkYgOUYgQUQgNTkgQkIgMjggMEQgQ0UgQkQgOTYgMUMgODAgNTYgN0IgM0EgREYgNjUg
RkQgRDIgCltsaWJzc2gyXSAwLjU2Nzg1OCBVc2VyYXV0aDogQXR0ZW1wdGluZyB0byBsb2dp
biB1c2luZyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93
cml0ZSBwbGFpbiAoNDMgYnl0ZXMpCjAwMDA6IDMyIDAwIDAwIDAwIDAzIDZEIDcxIDcxICAw
MCAwMCAwMCAwRSA3MyA3MyA2OCAyRCA6IDIuLi4ubXFxLi4uLnNzaC0KMDAxMDogNjMgNkYg
NkUgNkUgNjUgNjMgNzQgNjkgIDZGIDZFIDAwIDAwIDAwIDA4IDcwIDYxIDogY29ubmVjdGlv
bi4uLi5wYQowMDIwOiA3MyA3MyA3NyA2RiA3MiA2NCAwMCAwMCAgMDAgMDAgMDcgICAgICAg
ICAgICAgICAgOiBzc3dvcmQuLi4uLgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFp
bjIgKDcgYnl0ZXMpCjAwMDA6IDZEIDcxIDcxIDMyIDMwIDMwIDM1ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IG1xcTIwMDUKW2xpYnNzaDJdIDAuNTY3OTY4IFNvY2tldDogU2Vu
dCA4NC84NCBieXRlcyBhdCAweDUwNmM3OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBz
ZW5kKCkgKDg0IGJ5dGVzKQowMDAwOiA3QSAzNSA0RSBEOCBFQSA2QyA3MSA1QiAgQ0UgREUg
QzYgRDkgRDAgQUYgMDUgREQgOiB6NU4uLmxxWy4uLi4uLi4uCjAwMTA6IEU1IDE2IDlBIEUz
IEI2IDdDIDJCIEIyICBGRiBFNiA4RCAyOSA2MyBCRCA1NSAxMSA6IC4uLi4ufCsuLi4uKWMu
VS4KMDAyMDogN0QgN0IgNTQgQTMgQUEgQUQgNjkgRTMgIEQ3IDYyIEQ5IDVFIEMyIDcyIEUy
IDczIDogfXtULi4uaS4uYi5eLnIucwowMDMwOiA3OSA1QyAyMyA2RCA5NyBFQSBBRiBENiAg
Q0YgMjIgMDggQzEgNDggNzAgQUMgRDYgOiB5XCNtLi4uLi4iLi5IcC4uCjAwNDA6IENDIDNF
IENFIEE2IDY5IEQ3IEE4IDFBICBEMSBGNSA4RiAxOCA0QSAyRCAzMiBFMCA6IC4+Li5pLi4u
Li4uLkotMi4KMDA1MDogNDkgMEEgQzEgQTkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogSS4uLgpbbGlic3NoMl0gMC41Njc5ODkgVHJhbnNwb3J0OiBMb29raW5n
IGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xpYnNzaDJdIDAuNTY3OTkyIFRyYW5zcG9ydDog
TG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDUxCltsaWJzc2gyXSAwLjU2Nzk5NCBUcmFu
c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA2MApbbGlic3NoMl0gMC41Njc5
OTggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZwpbbGlic3NoMl0g
MC41NjkxNjMgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xp
YnNzaDJdIDAuNTY5MTY5IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6
IDUxCltsaWJzc2gyXSAwLjU2OTE3MiBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv
ZiB0eXBlOiA2MApbbGlic3NoMl0gMC41NjkxNzcgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4
NCBieXRlcyB0byAweDUwMmMzOCswCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcg
KDEwOTYgYnl0ZXMpCjAwMDA6IEFEIDZEIDZEIDc3IDkwIEE5IDVDIDAwICAxQSBCQSBEQyBB
RCBENSA5NiAyNCAzQSA6IC5tbXcuLlwuLi4uLi4uJDoKMDAxMDogQzAgODYgMEEgQ0IgQ0Ug
OTggQjggQkIgIEE4IDI1IEU4IENBIDQ4IEExIDQ0IENGIDogLi4uLi4uLi4uJS4uSC5ELgow
MDIwOiBGOCA5QiAzOCAwNCA3OSBCQiA4NyA2QyAgQ0IgQzggMTAgN0YgREUgNzQgQzAgNDIg
OiAuLjgueS4ubC4uLi4udC5CCjAwMzA6IDk2IEYxIDlCIEUwIEQyIEY0IEVEIEJGICAzNiA1
QyA0NCBGMCA2MCA4QiBCRiA1RCA6IC4uLi4uLi4uNlxELmAuLl0KMDA0MDogQjQgOTQgMzQg
OUUgMEIgMTcgM0EgREQgIDcwIEJEIEMxIDNFIDI4IDBCIDE1IDdBIDogLi40Li4uOi5wLi4+
KC4uegowMDUwOiAzMyBBQiAyRCBFMCAxRCA0RCA3NSBEQiAgN0MgMEUgM0EgQjcgNzggQ0Ig
RTUgREUgOiAzLi0uLk11LnwuOi54Li4uCjAwNjA6IDNBIDIxIEQzIEM0IDQ3IDRFIEUxIDY1
ICA0QyA3RSBFNSBCRCBFMiBFOCA3QiBGQiA6IDohLi5HTi5lTH4uLi4uey4KMDA3MDogNzIg
RkUgODcgNUQgM0QgQjIgQUQgODAgIDZGIEU4IEE1IEFGIEM5IDc5IDI1IEUwIDogci4uXT0u
Li5vLi4uLnklLgowMDgwOiBFNCBGMyA5RiA4MCA5NSBFRCA4MSBCNyAgNEEgMDggRDkgNUMg
ODIgMDggNDEgQkEgOiAuLi4uLi4uLkouLlwuLkEuCjAwOTA6IEZDIDE1IDhBIDg2IEM0IEQz
IDVBIEU2ICA4OCA2OCBDRiBFMCA4QiBEMCBDRCBFNyA6IC4uLi4uLlouLmguLi4uLi4KMDBh
MDogOEYgOUQgQzggMTggNzIgNTMgMDAgOTEgIDdGIENBIDVBIDkyIDEwIDM0IDc4IEM2IDog
Li4uLnJTLi4uLlouLjR4LgowMGIwOiBBNSBCRSA1MSA2OCA0RiBBMSBGOSAyNSAgMjcgNTMg
MDMgNDggQ0IgODYgQTMgQjAgOiAuLlFoTy4uJSdTLkguLi4uCjAwYzA6IDE4IEMxIEUwIDkz
IDEzIDI5IDFBIEU1ICAyOSA1MyAyMyA1MCBBNiBFQyAyOSAwQiA6IC4uLi4uKS4uKVMjUC4u
KS4KMDBkMDogODAgOEUgNTggOUUgNTIgRjUgM0IgMDkgIDBBIDkyIDM0IEMwIEQ5IEY2IDBB
IENBIDogLi5YLlIuOy4uLjQuLi4uLgowMGUwOiBDMCA5QyBENiA4NCA2RCBEQSAzRCA0RiAg
MUUgQTcgNTQgNzkgNzAgMDIgRkEgMDUgOiAuLi4ubS49Ty4uVHlwLi4uCjAwZjA6IEM3IDc2
IENCIDMxIDQzIEYyIEREIDI2ICAyNyBGOCBDRCA4OCAwQiAyMyBBOSA1OSA6IC52LjFDLi4m
Jy4uLi4jLlkKMDEwMDogMzEgQzggNTggRDMgQkUgODUgQkUgRTcgIDVCIEJBIDBBIDhFIDE3
IENCIEM2IEU5IDogMS5YLi4uLi5bLi4uLi4uLgowMTEwOiBERiA1QiA2MiBGQSAzMiAxNyBD
MiA4MiAgQTIgMUQgQTMgNjYgQzQgQjQgMTEgNzIgOiAuW2IuMi4uLi4uLmYuLi5yCjAxMjA6
IERDIEFCIEE4IEFDIDRGIEFCIENFIDRCICA2MSBCRCBCNCAyNCA3QSBDRiBGOCBFOCA6IC4u
Li5PLi5LYS4uJHouLi4KMDEzMDogQTIgQTYgREYgNzAgRkMgMzggQkMgM0IgIDE3IDUzIDgw
IDBGIDQyIDI4IDQ4IDI5IDogLi4ucC44LjsuUy4uQihIKQowMTQwOiA0OCAxNCA5QiA0MSBC
MiA2MCAyRiBGQiAgNDcgNzUgRTcgNjggMUIgMTMgM0UgQjIgOiBILi5BLmAvLkd1LmguLj4u
CjAxNTA6IEJFIDVBIDFEIEM1IDZCIDU0IEFDIEQyICA0QyBFNSAyMSA4OCBFRSBFQyA5NyA4
RCA6IC5aLi5rVC4uTC4hLi4uLi4KMDE2MDogNzIgOTEgODcgRDQgNUYgRTIgMUEgRDMgIDE2
IDhFIDJEIENEIDhEIERFIEYxIDkzIDogci4uLl8uLi4uLi0uLi4uLgowMTcwOiAwMSA2MiBF
RCA4OCBDNiBGOSBEQiA1NCAgNEEgQkUgRDUgQkMgRDEgRDggRTYgOTAgOiAuYi4uLi4uVEou
Li4uLi4uCjAxODA6IDM5IEJCIDNDIDVCIEI3IEJGIDVDIEU0ICAzQiA0OCAxNiBDRSBDMCA5
MCBCRCBBRCA6IDkuPFsuLlwuO0guLi4uLi4KMDE5MDogOUMgRTQgOTIgRTAgRDkgOTIgODUg
MjIgIEQ4IDc4IEFBIEU0IEVBIDI2IDQ1IEZCIDogLi4uLi4uLiIueC4uLiZFLgowMWEwOiAy
QSBBOCAyMyBBNSBDRCAxMSAxQiBENCAgOUMgRDYgNUMgNjIgQzQgMzYgOTMgNUEgOiAqLiMu
Li4uLi4uXGIuNi5aCjAxYjA6IDBEIDkzIDc5IEMyIDhFIDE5IEM2IDMxICAxNCBENCBCNyBC
NyAyOSBBNyBDQyA4NyA6IC4ueS4uLi4xLi4uLikuLi4KMDFjMDogMkIgOUIgN0EgRUUgNzMg
QTMgMUQgRTIgIDM2IDRCIDgzIEVGIDAxIEVCIEYxIEZGIDogKy56LnMuLi42Sy4uLi4uLgow
MWQwOiAzNyA4MCA5OSAyQyAyMSA3NyBCRSBCMyAgQjMgODcgOTQgMjAgMEQgQzAgREQgOUIg
OiA3Li4sIXcuLi4uLiAuLi4uCjAxZTA6IDFDIEY4IEY2IERGIDBFIDlGIEIxIEYwICBBRCA5
QSA3QyAyMiAyMSAyRiBFNiA4QyA6IC4uLi4uLi4uLi58IiEvLi4KMDFmMDogMTcgMzEgRUMg
M0YgMkUgNzMgNkMgMTIgIDdCIDY1IDE3IDM5IDFCIDkyIDY2IDk5IDogLjEuPy5zbC57ZS45
Li5mLgowMjAwOiA4RiA5NyA4MiA2MiBDMCA0NyBFMCA1OSAgNTcgMTMgMjAgMUIgNjIgRjIg
NDggMTEgOiAuLi5iLkcuWVcuIC5iLkguCjAyMTA6IEJFIDI1IDZGIDhFIERCIEVDIDg2IDY4
ICBCMSBFQiBCMSA5QyA0OCA4OSAwNSBCMiA6IC4lby4uLi5oLi4uLkguLi4KMDIyMDogNkYg
QkQgNzEgOTAgNkQgODggM0YgOTIgIERDIDFDIDMzIDY4IDM5IDhCIDdGIDczIDogby5xLm0u
Py4uLjNoOS4ucwowMjMwOiBFRSBBOCAyNyAyRiAwQyAxRiA2QyA3OCAgNEMgM0IgNEQgRjEg
RjYgQjcgMEIgQUYgOiAuLicvLi5seEw7TS4uLi4uCjAyNDA6IEUzIDlBIDM5IDNBIENFIDZE
IEQ1IEEwICBGOSBGMyA3RSBENSA5RSBGMCBBNyBGNyA6IC4uOToubS4uLi5+Li4uLi4KMDI1
MDogOEEgQUYgRUMgOUEgMzMgRTAgMTkgNUEgIDc4IDNFIEVGIDFEIDYyIDU2IDc4IDg3IDog
Li4uLjMuLlp4Pi4uYlZ4LgowMjYwOiAwRSA1OCBGOCBDNSA0MiA0QyA0OCBBQiAgQTMgMDMg
RjkgRDEgRkEgQjAgQTggREUgOiAuWC4uQkxILi4uLi4uLi4uCjAyNzA6IEY3IDUyIERDIEY2
IDhBIDNFIDQzIDE1ICAzRSA1QiBFRCBFMiBFMSA2RCA4QiBFQyA6IC5SLi4uPkMuPlsuLi5t
Li4KMDI4MDogODAgRTcgQTUgMDkgMjMgMEQgNzggRjcgIEFCIENFIDhDIDAwIEUwIDY2IDQ0
IEJGIDogLi4uLiMueC4uLi4uLmZELgowMjkwOiAzNCBBNiAyMyAyRCBBNSBFNyAxOSBCRiAg
RkYgRjAgMTQgRUYgNjkgQzQgMkUgOUQgOiA0LiMtLi4uLi4uLi5pLi4uCjAyYTA6IDAzIEM5
IDY4IDAyIDhFIEJDIDgzIDE4ICA3QyBDRSA1QyA3OCA2MiAyRiBENCBBQiA6IC4uaC4uLi4u
fC5ceGIvLi4KMDJiMDogQjUgQjkgREUgNzUgNzIgRDcgMTkgNzkgIEJBIDlEIEM4IERFIDA5
IEU3IEVGIEQ1IDogLi4udXIuLnkuLi4uLi4uLgowMmMwOiBERSA0OSA0NiBGRiAzMCBFQyA1
NyBBQiAgMjQgNUUgQzEgMzMgMTUgODkgNDAgNzcgOiAuSUYuMC5XLiReLjMuLkB3CjAyZDA6
IDlDIDAwIEM2IDhFIDkwIDY5IDgwIDJGICA1OSA5MSA0QSA3NSAwQSBDQiAyQSBGQSA6IC4u
Li4uaS4vWS5KdS4uKi4KMDJlMDogM0IgOTYgN0UgOUEgOTUgQ0QgMzAgNzkgIDlFIDlBIDE0
IDY0IEY5IEM1IDE4IDNCIDogOy5+Li4uMHkuLi5kLi4uOwowMmYwOiBDQiBCMSBCNiA3MiBF
NSA2MSAzNCBEOCAgNjkgQzkgMzIgMTAgRTQgOTggQzAgMUUgOiAuLi5yLmE0LmkuMi4uLi4u
CjAzMDA6IDk4IDREIDI5IDQ5IDZEIEFDIEFFIDk4ICBGMiA1RSAwRCBBOSA2OSA4MiA2QiA1
QSA6IC5NKUltLi4uLl4uLmkua1oKMDMxMDogNEIgNTQgRDEgMkUgOUMgRTIgQzggMjggIDdB
IEJCIEM3IDFGIEE4IDIxIDY4IDVDIDogS1QuLi4uLih6Li4uLiFoXAowMzIwOiA1RiA0NCA4
QiBFMCA5NiBDMCA3OSBENiAgRDcgOEIgOEQgODAgNEYgMzIgNkEgODkgOiBfRC4uLi55Li4u
Li5PMmouCjAzMzA6IDQzIERGIDZFIDIwIDAwIDg1IDIxIDVFICBFNCA4OCBEQiBBMiBFQSA2
OSBGMSA3NyA6IEMubiAuLiFeLi4uLi5pLncKMDM0MDogMDUgRTggNzUgNzYgQTMgOUUgNjUg
RUEgIEEwIDNFIDVEIDFDIDI4IDAxIDEzIDVGIDogLi51di4uZS4uPl0uKC4uXwowMzUwOiA1
QyA5QSBDOSBGMiA1RCA3MiA4QSBDNCAgMUMgNTQgRDggQ0YgOEMgNUMgRjQgRDMgOiBcLi4u
XXIuLi5ULi4uXC4uCjAzNjA6IDIyIDNDIEJDIEQzIDc5IEQ3IEQ1IEEyICA0QiA1NCBCMyAx
NSA0NyAyMSBFNCAwMyA6ICI8Li55Li4uS1QuLkchLi4KMDM3MDogNTYgNEUgM0QgRUIgNkIg
M0QgQ0MgMjQgIDBBIDEzIEI4IDk5IDcwIDM3IDRGIEVFIDogVk49Lms9LiQuLi4ucDdPLgow
MzgwOiBBOSAyOSBEOSBGMSA4MiA1MyBDQSBCMSAgNzEgOUEgODkgNjUgRTggNDEgNjkgMDUg
OiAuKS4uLlMuLnEuLmUuQWkuCjAzOTA6IEMwIEM0IDc1IDk5IEEyIDdDIDM1IDAyICBFNCBC
RiAzQyAzMyBBNCAzMCBDQSBGMyA6IC4udS4ufDUuLi48My4wLi4KMDNhMDogOUEgQzIgMjIg
RDIgOEYgNDMgQjMgNzAgIDhGIEJDIDgyIEE0IDc1IDREIDgwIDNEIDogLi4iLi5DLnAuLi4u
dU0uPQowM2IwOiA5OSA0NiA3QSA5MSAxMiA1QyAzQyAxQyAgRjEgMDMgODQgRkUgNkUgN0Mg
OUQgNEYgOiAuRnouLlw8Li4uLi5ufC5PCjAzYzA6IDY1IDg2IDY5IDQ0IDU3IEUxIEFGIDhG
ICA1MyBCQiBDMyA1OCA0RSA1MSA4MCAxOSA6IGUuaURXLi4uUy4uWE5RLi4KMDNkMDogNjgg
OTUgQkEgNDEgMjIgNDcgMkEgNTMgIDE4IDZBIDdBIDhGIEZBIDAzIDEyIDJDIDogaC4uQSJH
KlMuanouLi4uLAowM2UwOiA3NCA3RCA2RCBFNCA4NiA0RCAwQiA0MSAgMjUgMjggQzUgOTAg
RDggMjUgMDkgN0MgOiB0fW0uLk0uQSUoLi4uJS58CjAzZjA6IDY4IEI0IEE4IDE5IEVGIEZC
IDBCIDgyICAzNCA0MiAzNyA1QiBENCA1MCAyOSBFRCA6IGguLi4uLi4uNEI3Wy5QKS4KMDQw
MDogMzMgNjMgRkUgNjggODAgOUQgOTkgNjggIDhFIEVGIEMyIDNFIEEzIEE5IDBBIERDIDog
M2MuaC4uLmguLi4+Li4uLgowNDEwOiA4NSBDMyAzNiBBNiA5NCA1RiAxNyAzQyAgNzIgODgg
MjIgOEYgNUQgQjggRjUgNTkgOiAuLjYuLl8uPHIuIi5dLi5ZCjA0MjA6IEJEIDVEIDU2IDRF
IDE3IERGIDQwIDBDICBGQyAzRSA4MCBCNiA3OCBDMyAwQSBDRiA6IC5dVk4uLkAuLj4uLngu
Li4KMDQzMDogMzMgNEEgODcgMTQgOTUgMjcgODUgQTAgIEYwIDQzIDc5IDZCIDA1IDY2IDgy
IEI0IDogM0ouLi4nLi4uQ3lrLmYuLgowNDQwOiA5MCA2MyBGMSA0MyAzRSBBQyAyNiBFMSAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAuYy5DPi4mLgo9PiBsaWJzc2gyX3RyYW5zcG9y
dF9yZWFkKCkgcGxhaW4gKDEwMjggYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAzIEZGIDE3IEFF
IDkyICBDNCBFNSAwRSAxRCBDMCBFQSBEOCA0MSA6IC4uLi4uLi4uLi4uLi4uLkEKMDAxMDog
NzEgQjIgNTQgQzYgREMgRjkgQzAgREEgIDUzIDE0IDMyIDUzIEFCIDExIEMyIDlFIDogcS5U
Li4uLi5TLjJTLi4uLgowMDIwOiBBMiA0OCBBNSBCRSBBOCBDRSBDRCA1NSAgNEYgRjggNzkg
REMgRTIgREQgRTQgQjMgOiAuSC4uLi4uVU8ueS4uLi4uCjAwMzA6IEE2IERCIDFEIDUxIEU3
IDA5IDEyIDZDICA3NyA4QiBBMyA3QiA4QiA4NyAyMiBFOCA6IC4uLlEuLi5sdy4uey4uIi4K
MDA0MDogNTQgODIgRUIgRkUgMjkgOTYgNDEgMUUgIDIyIEQxIDY2IEEzIDRCIEU1IDYzIEU2
IDogVC4uLikuQS4iLmYuSy5jLgowMDUwOiAzQSAwRCAzMCAyQSA3NiAzNyBFRSBGRCAgMjcg
RUYgNkQgQUEgOEQgQUMgRjkgOEEgOiA6LjAqdjcuLicubS4uLi4uCjAwNjA6IDBEIEM2IDM5
IDkzIEVEIEVGIEUwIEI0ICBGNCBBMiBCNSBGMSA4NSA0RiA5OSA0QiA6IC4uOS4uLi4uLi4u
Li5PLksKMDA3MDogNzMgMDIgRkEgRTMgOTQgNjAgNkUgQkEgIDlFIDBFIDU4IDJDIDYyIDAx
IDNFIDBCIDogcy4uLi5gbi4uLlgsYi4+LgowMDgwOiAxNyA1MSA2RSA0QyBEOSAzQyA1NSA4
RiAgMEIgRUUgQzMgRjEgQzEgQjUgQTEgNTcgOiAuUW5MLjxVLi4uLi4uLi5XCjAwOTA6IDQz
IDVCIDU1IDI2IEJGIDdBIDk2IDU0ICBEMiBFMSA5MiBBRiBCMCBGOSBDMyBFQSA6IENbVSYu
ei5ULi4uLi4uLi4KMDBhMDogNUIgN0MgMUYgQkMgRUMgRTIgQTQgMUMgIDY1IDcyIDNCIDY0
IEM0IEM3IDU1IDA5IDogW3wuLi4uLi5lcjtkLi5VLgowMGIwOiBFMCA4NyBCMyBCQyA4MCA3
NCA0NCAyNiAgQTcgRUMgREQgMTcgMEYgNEYgQkUgQjYgOiAuLi4uLnREJi4uLi4uTy4uCjAw
YzA6IDQ1IDAzIEQ3IEIyIEI4IEJDIDlDIDYwICBGNiBEOSA1RiAzNCAyMCBFQSBGMyBBRiA6
IEUuLi4uLi5gLi5fNCAuLi4KMDBkMDogMjcgNzggNUIgODcgODIgRDIgMzQgMDIgIDVDIDFF
IDE3IEM0IEZEIEFGIDUyIDUyIDogJ3hbLi4uNC5cLi4uLi5SUgowMGUwOiAwMiBCQiBGNyBE
QSBDQSA2MSBENyAzQiAgREUgREQgNTAgM0EgREIgRjkgQjQgNTQgOiAuLi4uLmEuOy4uUDou
Li5UCjAwZjA6IDcwIDM1IDNCIDMzIEFCIEYyIEQ0IENFICBDOSAwOSAwQSA1OCBFOCAzMiAw
QiBBMyA6IHA1OzMuLi4uLi4uWC4yLi4KMDEwMDogMEUgMUUgQ0QgNzkgQjUgN0MgOTQgRjMg
IEFBIEFBIDdCIDhCIDI3IDQ2IEExIDg2IDogLi4ueS58Li4uLnsuJ0YuLgowMTEwOiA1OSA4
NSAwRSBGMiBERiAyRCBDMyA4QiAgNzEgODUgOTUgOEMgRUUgM0UgMUQgQzAgOiBZLi4uLi0u
LnEuLi4uPi4uCjAxMjA6IDFBIEM0IDk5IDcxIEUyIDI2IDhDIEU4ICA5NiA3RiA5MiA0NiA0
OSA2OCA1QiBBMiA6IC4uLnEuJi4uLi4uRkloWy4KMDEzMDogNzkgNDMgQjAgMTEgMUIgNTMg
ODMgNEQgIDVCIEEwIEJDIDA2IDJFIEExIEY3IDQ2IDogeUMuLi5TLk1bLi4uLi4uRgowMTQw
OiA2RSA0MCA2RiAzMCAyMyA0NSBBQiA5RiAgQkYgNDIgNjUgNkMgNTggOEQgM0YgQzYgOiBu
QG8wI0UuLi5CZWxYLj8uCjAxNTA6IDcyIEIyIDI2IDA4IEJGIDgzIDg2IEVFICBGQSBENCA0
NiAwRiBEMSBBMCA2MSA4MyA6IHIuJi4uLi4uLi5GLi4uYS4KMDE2MDogRkMgRTYgRDYgMTkg
RkYgMjUgOUMgMkUgIDkyIDVFIDg5IDYzIDM5IDg1IERFIDI2IDogLi4uLi4lLi4uXi5jOS4u
JgowMTcwOiA3RiAwQSBCOSAyMiA1NCAyRSBCOSA3OSAgRDUgQzYgMjggNTQgNjEgRjkgNTgg
MzAgOiAuLi4iVC4ueS4uKFRhLlgwCjAxODA6IDBBIEQxIEM4IENBIDk2IDdDIEZDIDVCICAw
MCAxQSA4MyAyMiA0RCA0OCAzMyBGOSA6IC4uLi4ufC5bLi4uIk1IMy4KMDE5MDogODYgREEg
ODUgNDEgQzYgMjcgMDggM0UgIEY2IDE1IENGIDU2IDY4IEE3IDFGIDFGIDogLi4uQS4nLj4u
Li5WaC4uLgowMWEwOiBENiAwMiA4NCBDNCBCNyA5QiBCMCA1NiAgNjcgNzcgRkEgMjkgOUMg
QUIgOTQgRTcgOiAuLi4uLi4uVmd3LikuLi4uCjAxYjA6IDYxIDU4IDQzIDJDIEMyIDdCIEZE
IDRDICBERSBBOSA4RiA0MyA2RiBDMSA4QSA5NyA6IGFYQywuey5MLi4uQ28uLi4KMDFjMDog
NEQgOTMgRTIgMjggNUUgNzUgREIgOEEgIEI0IEI3IEJFIDFGIDA5IEIzIDYzIDhCIDogTS4u
KF51Li4uLi4uLi5jLgowMWQwOiA1MCA2QyA3MCBFQiA5QiAxMiBDMSBCNiAgM0IgNEIgQjYg
MEUgMDUgQzkgQjggM0MgOiBQbHAuLi4uLjtLLi4uLi48CjAxZTA6IEUzIDI5IDZBIDAxIEE0
IEE5IDcxIDEyICBBNiA0NyBGMyA4OSBCMSA2OCA0OCAxNiA6IC4pai4uLnEuLkcuLi5oSC4K
MDFmMDogQzggMUMgQ0EgNEEgNTkgMTAgRDQgMkEgIDE5IDk4IDM4IDc1IDY1IDgxIEI3IEFC
IDogLi4uSlkuLiouLjh1ZS4uLgowMjAwOiAyMCA4NyA2OCA4RiBFMCA1NiBGQiAyNyAgRDMg
MEEgQ0YgRkQgRDggODQgNkQgODYgOiAgLmguLlYuJy4uLi4uLm0uCjAyMTA6IEE3IDU5IDY0
IDZBIDA2IEE0IDEwIEJCICBENSA1OSA0MCAwMiAxQyAzRiA5NiA3QiA6IC5ZZGouLi4uLllA
Li4/LnsKMDIyMDogQ0UgOTIgOTggRjggNEIgRTcgMDEgQkIgIDdCIDlDIEQ3IDFGIEVBIDA5
IDI3IDVDIDogLi4uLksuLi57Li4uLi4nXAowMjMwOiA1RiBGOCA1RSBGRiAyOCBGQiA0NCAz
RSAgQzMgMTcgN0YgNUQgRDEgMkUgMEYgOEYgOiBfLl4uKC5EPi4uLl0uLi4uCjAyNDA6IEMx
IEZGIDRBIDg5IDdEIEVBIDBCIEMyICBEQyBCNiA5NiA0RiBGNSBBNyA3NSBDRSA6IC4uSi59
Li4uLi4uTy4udS4KMDI1MDogQkIgNUMgQzIgQ0EgNDggMEEgRkQgQ0YgIDRGIEU3IDJDIDY4
IEJCIEQzIDYyIDREIDogLlwuLkguLi5PLixoLi5iTQowMjYwOiA1QyAzRSBEMiBCOCBFRCA1
OSA2NyAwMyAgRjkgMjQgQjEgNDUgQjcgQzUgNjEgNUQgOiBcPi4uLllnLi4kLkUuLmFdCjAy
NzA6IDAzIERFIDMyIDE4IEJCIEY4IDg0IDg1ICA1NiA3NyBDOCBEQyA2MiAzNSBGMyA1RSA6
IC4uMi4uLi4uVncuLmI1Ll4KMDI4MDogMjAgQjQgNjYgRjUgRDggNjggMzggQ0QgIEVDIDE3
IERFIDFDIERGIEZEIEIyIEMxIDogIC5mLi5oOC4uLi4uLi4uLgowMjkwOiBCMSA0RiAzMyA4
RSBGMCBFMiBFNiBCRSAgRjAgNzkgMjkgMTggOEUgMkMgNTMgMTMgOiAuTzMuLi4uLi55KS4u
LFMuCjAyYTA6IEU5IDE3IEE2IEY2IDYxIEEwIDZFIDQ1ICBCNSBFNCAzNCBDRiA2MCAzNCA3
MiBFOCA6IC4uLi5hLm5FLi40LmA0ci4KMDJiMDogQUIgOUYgQUQgOTEgRTEgRjQgQzYgNDkg
IDVDIEQ1IEMzIERCIDREIEI0IDk0IDY2IDogLi4uLi4uLklcLi4uTS4uZgowMmMwOiA4MSAy
QSBDOCAxMyBGQiAzNCBFNyA5QyAgN0UgNjggN0IgNjkgRDggQkYgQTEgQTMgOiAuKi4uLjQu
Ln5oe2kuLi4uCjAyZDA6IDAwIDczIEU1IDAwIEJGIDMwIDg2IDE4ICA3NyA1QyA3RSAwNyBD
RiA3NCBFNSAwMCA6IC5zLi4uMC4ud1x+Li50Li4KMDJlMDogMUYgQUIgQjcgQzMgQTggNjMg
NjMgNzYgIEUwIDMwIEVFIEZEIEM5IEM1IDc0IDc4IDogLi4uLi5jY3YuMC4uLi50eAowMmYw
OiA2RSAxNCBCNCA0OCBERiAwMyAwNSA0QSAgQzAgOUIgNzAgNjIgRDUgRkEgMzkgMUYgOiBu
Li5ILi4uSi4ucGIuLjkuCjAzMDA6IEU2IEZGIDA5IEY4IDcxIDMwIEI0IDQ1ICAxOCBCQyBF
RiA5NiAxOSAyOSA2OSBDQSA6IC4uLi5xMC5FLi4uLi4paS4KMDMxMDogMkUgMTQgODAgMkIg
MEMgNTQgQTkgMDEgIDk0IDU4IDYzIDdCIDU0IDhDIDAxIDg1IDogLi4uKy5ULi4uWGN7VC4u
LgowMzIwOiA5MCA2RiBGNiA1RCBFMSA2MiA0MiA3RSAgRTcgRjEgMEYgQ0EgRDYgRTUgRjIg
QzUgOiAuby5dLmJCfi4uLi4uLi4uCjAzMzA6IDVFIEM4IDMzIDMxIEU5IEEyIDMxIEIyICA4
OCA4MyA5QiA3NCBCRiBFOSBCMyAwQiA6IF4uMzEuLjEuLi4udC4uLi4KMDM0MDogRkYgOUQg
MUIgODAgRDcgMTYgNDEgRUYgIDVEIEUxIEZCIEE3IEIyIDg3IDYzIDMwIDogLi4uLi4uQS5d
Li4uLi5jMAowMzUwOiA1MyA4MyAzMCBGQSBBMCA1RSBGOCBFQiAgNkIgMDMgQTIgNDggMTQg
MDUgMTkgRjYgOiBTLjAuLl4uLmsuLkguLi4uCjAzNjA6IENDIEU3IDFEIDAzIDQyIENFIEJD
IDQ4ICAwMCAxQyA2NCA0QSA3RiBFMiA2OCBFMCA6IC4uLi5CLi5ILi5kSi4uaC4KMDM3MDog
OTcgQkQgMzggN0EgQjQgNkYgRDYgNDUgIEU2IDE0IENFIERBIEJDIDBGIDU0IEVGIDogLi44
ei5vLkUuLi4uLi5ULgowMzgwOiAzOCAzOCA3MiA2NSA0OSBGQSA5RCBEOSAgMkYgMUEgMTAg
REIgQTEgQ0YgMDkgMTAgOiA4OHJlSS4uLi8uLi4uLi4uCjAzOTA6IEJEIEI5IDhDIDNFIDE2
IEMyIDI0IENDICA0QiA1QSAzQiAzRCBBQyAxMCAxRiA4QiA6IC4uLj4uLiQuS1o7PS4uLi4K
MDNhMDogRUIgNTEgNEIgMjcgRjUgMzYgMkIgRTEgIDE2IDhCIDVCIDZDIENBIDMwIEM3IEIz
IDogLlFLJy42Ky4uLltsLjAuLgowM2IwOiA4QiAxQSA2RCBCRCA0RiAyMyA5MiBGMCAgMUEg
ODEgOEEgRDkgMjUgOUQgRDYgQzEgOiAuLm0uTyMuLi4uLi4lLi4uCjAzYzA6IDI5IDBBIEFD
IDVGIDlCIDZDIEQ1IDAzICBCNiBDMCAxNyBGNyA4NSAwMiAyNSA5NCA6ICkuLl8ubC4uLi4u
Li4uJS4KMDNkMDogRkEgNDggNDEgQTEgRjMgMDAgMTUgNEEgIEQ5IDlCIDcwIEU0IEM3IDVD
IEVFIDQ1IDogLkhBLi4uLkouLnAuLlwuRQowM2UwOiBDRCA1NiBEOCBBRiA0MyAyMiA1NiA5
MSAgMTQgMzUgQjMgRDEgMEQgMUEgQ0UgRkUgOiAuVi4uQyJWLi41Li4uLi4uCjAzZjA6IDEx
IDM5IEQ4IEFEIENEIDdBIDZCIDY0ICBBMCBDNiA5RSBDOCA4RiA4NyA0NyAwQSA6IC45Li4u
emtkLi4uLi4uRy4KMDQwMDogRjQgQTYgNUUgRDIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogLi5eLgpbbGlic3NoMl0gMC41Njk1NzcgVHJhbnNwb3J0OiBQYWNr
ZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9MTAyOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9y
ZWFkKCkgcGxhaW4gKDEgYnl0ZXMpCjAwMDA6IDM0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IDQKW2xpYnNzaDJdIDAuNTY5NjE3IFRyYW5zcG9y
dDogUGFja2V0IHR5cGUgNTIgcmVjZWl2ZWQsIGxlbmd0aD0xCltsaWJzc2gyXSAwLjU2OTYy
MSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA1MgpbbGlic3NoMl0g
MC41Njk2MjQgVXNlcmF1dGg6IFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwK
W2xpYnNzaDJdIDAuNTY5NjMzIFNDUDogT3BlbmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2
ZQpbbGlic3NoMl0gMC41Njk2MzYgQ29ubjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzAK
W2xpYnNzaDJdIDAuNTY5NjM4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQg
cGFjayAzMjc2OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMjQgYnl0ZXMp
CjAwMDA6IDVBIDAwIDAwIDAwIDA3IDczIDY1IDczICA3MyA2OSA2RiA2RSAwMCAwMCAwMCAw
MCA6IFouLi4uc2Vzc2lvbi4uLi4KMDAxMDogMDAgMDQgMDAgMDAgMDAgMDAgODAgMDAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4uLi4KW2xpYnNzaDJdIDAuNTY5NzQxIFNv
Y2tldDogU2VudCA2OC82OCBieXRlcyBhdCAweDUwNmM3OAo9PiBsaWJzc2gyX3RyYW5zcG9y
dF93cml0ZSBzZW5kKCkgKDY4IGJ5dGVzKQowMDAwOiBERSAzMSA2QSA3OSBDQiAxQSA1RSAy
NiAgRUIgOEYgNjIgNDYgNkYgNUMgOEYgOTMgOiAuMWp5Li5eJi4uYkZvXC4uCjAwMTA6IEJB
IDhEIDVCIDkxIDY2IDMxIEMwIDlBICAyRCBCMCA2QyBGNyBCMiAzOCBENCA1MCA6IC4uWy5m
MS4uLS5sLi44LlAKMDAyMDogQjIgMzQgOEIgRTAgNUYgRDMgQTcgQTkgIDNFIDU3IDBGIDUx
IDM0IDc2IDgwIEE4IDogLjQuLl8uLi4+Vy5RNHYuLgowMDMwOiAxRiBCRCA0MCA2MCA4OSAy
NiBBRCBGNiAgOEIgRDcgRUYgNEEgMDggQTQgNDggQzggOiAuLkBgLiYuLi4uLkouLkguCjAw
NDA6IEZEIDE1IDE5IERBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IC4uLi4KW2xpYnNzaDJdIDAuNTY5NzYwIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0
IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjU2OTc2MiBUcmFuc3BvcnQ6IExvb2tpbmcgZm9y
IHBhY2tldCBvZiB0eXBlOiA5MgpbbGlic3NoMl0gMC41Njk3NjYgRmFpbHVyZSBFdmVudDog
LTM3IC0gV291bGQgYmxvY2sKW2xpYnNzaDJdIDAuNTY5NzcxIEZhaWx1cmUgRXZlbnQ6IC0z
NyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwKW2xpYnNzaDJdIDAuNTY5OTg4
IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAw
LjU2OTk5NCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5MgpbbGli
c3NoMl0gMC41Njk5OTkgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1MDJj
MzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAwMDog
OTcgMzkgQTUgOUQgMEEgQjAgRDYgRUUgIDRFIDlFIEI0IDdFIDk1IEY1IDk0IDJEIDogLjku
Li4uLi5OLi5+Li4uLQowMDEwOiA4NyAwNyBGOSA3MSA3RiBEOSA3NCA1NCAgQkQgRkQgNUEg
QzggOTkgOUMgM0QgMjAgOiAuLi5xLi50VC4uWi4uLj0gCjAwMjA6IEQzIEIwIDZBIEYxIEIy
IDI0IEY5IEY1ICA3NyA2NyBGOSBDRCAzMCAwOCA4RCA5RiA6IC4uai4uJC4ud2cuLjAuLi4K
MDAzMDogMkEgRDggQTcgQkUgQzAgQTUgRDQgMDIgIEI2IEYzIEM4IDRCIEM4IDMyIDRBIDgz
IDogKi4uLi4uLi4uLi5LLjJKLgowMDQwOiAyMCA4MCAzRCBBRiBCMCA2NSAyQiA3RiAgMzQg
RDIgRjYgMTYgQzIgQTkgRjkgMzIgOiAgLj0uLmUrLjQuLi4uLi4yCjAwNTA6IEQ0IDI2IDNB
IERDIEMwIEFDIDhCIDE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4mOi4uLi4uCj0+
IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAg
MDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xp
YnNzaDJdIDAuNTcwMDQwIFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVu
Z3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykKMDAw
MDogNUIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAxIDg2IEEwIDAwIDAwIDgwIDog
Wy4uLi4uLi4uLi4uLi4uLgowMDEwOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjU3MDA4MiBUcmFuc3BvcnQ6IFBh
Y2tldCB0eXBlIDkxIHJlY2VpdmVkLCBsZW5ndGg9MTcKW2xpYnNzaDJdIDAuNTcwMDg2IFRy
YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjU3
MDA4OCBDb25uOiBDb25uZWN0aW9uIEVzdGFibGlzaGVkIC0gSUQ6IDAvMCB3aW46IDEwMDAw
MC8yNjIxNDQgcGFjazogMzI3NjgvMzI3NjgKW2xpYnNzaDJdIDAuNTcwMDk0IENvbm46IHN0
YXJ0aW5nIHJlcXVlc3QoZXhlYykgb24gY2hhbm5lbCAwLzAsIG1lc3NhZ2U9c2NwIC1wZiAn
L3RtcC9URVNUJwo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTggYnl0ZXMp
CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwNCA2NSA3OCA2NSA2MyAwMSAwMCAw
MCA6IGIuLi4uLi4uLmV4ZWMuLi4KMDAxMDogMDAgMjYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogLiYKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUg
cGxhaW4yICgzOCBieXRlcykKMDAwMDogNzMgNjMgNzAgMjAgMkQgNzAgNjYgMjAgIDI3IDJG
IDc0IDZEIDcwIDJGIDU0IDQ1IDogc2NwIC1wZiAnL3RtcC9URQowMDEwOiA1MyA1NCAyNyAw
MCA2NiA4MiBCNCA5MCAgNjMgRjEgNDMgM0UgQUMgMjYgRTEgMDAgOiBTVCcuZi4uLmMuQz4u
Ji4uCjAwMjA6IDExIDAwIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IC4uLi4uLgpbbGlic3NoMl0gMC41NzAyMTIgU29ja2V0OiBTZW50IDEwMC8xMDAg
Ynl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgpICgx
MDAgYnl0ZXMpCjAwMDA6IEEwIDFFIDAxIENCIDZGIENDIDk4IDkzICBCMyAyQSAyOCBGQiBG
NCBFNCA1RiAyQSA6IC4uLi5vLi4uLiooLi4uXyoKMDAxMDogQkEgM0IgNUEgODggQTggOTgg
MUMgMjUgIDMxIDkzIDY4IEEzIENFIEE3IDAwIDFGIDogLjtaLi4uLiUxLmguLi4uLgowMDIw
OiAwQSA0QyBDNCA4NCA3NCA0MiAzNSA4MCAgNEIgQzIgMDUgRTkgQjkgNUEgQTMgMDcgOiAu
TC4udEI1LksuLi4uWi4uCjAwMzA6IDU3IEVBIEM3IEZGIEFBIEYwIDA0IDlGICBFQyBDQSAy
QSA0MiA0RCBBRSAxMCA4RSA6IFcuLi4uLi4uLi4qQk0uLi4KMDA0MDogRDQgRDggRjkgMjEg
QUMgNUEgMUEgM0IgIDdEIEQ4IENCIDBEIDBGIEJGIERCIDI3IDogLi4uIS5aLjt9Li4uLi4u
JwowMDUwOiBBNiBGQiBFQiAwNyAxNCBGMSA3RCBBQSAgODUgNjIgNEIgOTcgODMgRDUgOUIg
NjggOiAuLi4uLi59Li5iSy4uLi5oCjAwNjA6IEY0IEIwIDJCIDZCICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IC4uK2sKW2xpYnNzaDJdIDAuNTcwMjM2IFRyYW5z
cG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjU3MDIz
OCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJd
IDAuNTcwMjQyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rpbmcg
U0NQIHN0YXJ0dXAKW2xpYnNzaDJdIDAuNTcxMTMxIFRyYW5zcG9ydDogTG9va2luZyBmb3Ig
cGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjU3MTEzNiBUcmFuc3BvcnQ6IExvb2tp
bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJdIDAuNTcxMTQxIFNvY2tldDog
UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzAKPT4gbGlic3NoMl90cmFuc3Bv
cnRfcmVhZCgpIHJhdyAoNzIgYnl0ZXMpCjAwMDA6IEYyIDVGIEFDIERCIDY0IEEyIDI0IEEw
ICBGMCA3NSBDNSAzRiA0NCBBMyA4RCBBNSA6IC5fLi5kLiQuLnUuP0QuLi4KMDAxMDogMzIg
MjYgQTcgRUQgODUgRjQgRUEgRkQgIDY2IEZEIDJFIDU2IEM2IENCIEI3IDk3IDogMiYuLi4u
Li5mLi5WLi4uLgowMDIwOiA3NSA5QyBGMSA1OSA4OSA3MSA0RSBBNSAgMkIgRTIgRUMgNkEg
Q0UgQzEgNzMgMzUgOiB1Li5ZLnFOLisuLmouLnM1CjAwMzA6IEY3IDE2IDA3IEQxIDcxIDY5
IEQwIDdBICBDNyBGOCBEMyA2OSA0QiBEMCA5NSA5QyA6IC4uLi5xaS56Li4uaUsuLi4KMDA0
MDogRjEgRkMgQkQgMjAgNTYgQjUgRjkgNTggICAgICAgICAgICAgICAgICAgICAgICAgIDog
Li4uIFYuLlgKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQow
MDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAuLi4uLgpbbGlic3NoMl0gMC41NzExODggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJl
Y2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUg
Ynl0ZXMpCjAwMDA6IDYzIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IGMuLi4uCltsaWJzc2gyXSAwLjU3MTIzMSBUcmFuc3BvcnQ6IFBhY2tldCB0
eXBlIDk5IHJlY2VpdmVkLCBsZW5ndGg9NQpbbGlic3NoMl0gMC41NzEyMzQgVHJhbnNwb3J0
OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTkKW2xpYnNzaDJdIDAuNTcxMjM4IFND
UDogU2VuZGluZyBpbml0aWFsIHdha2V1cApbbGlic3NoMl0gMC41NzEyNDIgQ29ubjogV3Jp
dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAKW2xpYnNzaDJdIDAuNTcx
MjQ3IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lkPTAK
PT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDkgYnl0ZXMpCjAwMDA6IDVFIDAw
IDAwIDAwIDAwIDAwIDAwIDAwICAwMSAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4uLi4u
Lgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbjIgKDEgYnl0ZXMpCjAwMDA6IDAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4KW2xp
YnNzaDJdIDAuNTcxMzQ4IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwNmM3OAo9
PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDUyIGJ5dGVzKQowMDAwOiBBQyBB
RiBBRSAyOSAyRSA0NSA4QiBEQyAgM0MgMEUgMEYgQkUgQTkgMEMgRjcgNTUgOiAuLi4pLkUu
LjwuLi4uLi5VCjAwMTA6IDcyIDg5IDA4IDEyIEQ2IEY2IEI3IEUxICA1NyA0QyBGNCA0MiA3
MCBFQiBFMSAxNiA6IHIuLi4uLi4uV0wuQnAuLi4KMDAyMDogNjcgRDcgQzcgOEEgQzIgMjkg
MkUgN0QgIEVFIEZEIDZGIEY5IENGIEI1IEMwIDY4IDogZy4uLi4pLn0uLm8uLi4uaAowMDMw
OiBDQyA0OSA1MCAwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu
SVAuCltsaWJzc2gyXSAwLjU3MTM2NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5
dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjU3MTM2OCBGYWls
dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC41NzEzNzEgRmFpbHVy
ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlClts
aWJzc2gyXSAwLjU3OTYzMiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy
b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjU3OTY0MCBTb2NrZXQ6IFJl
Y3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9y
dF9yZWFkKCkgcmF3ICgxMjAgYnl0ZXMpCjAwMDA6IEQxIDc4IDFGIDNFIEYzIEUxIDc3IDRF
ICBBQiAxRCA2QyA0RCA5OSA2QiBDMiBCRSA6IC54Lj4uLndOLi5sTS5rLi4KMDAxMDogQzkg
MEQgNzIgMjkgMjcgNDcgQjQgOUQgIEZEIDg0IDQ2IERDIDFCIERCIEMzIEUzIDogLi5yKSdH
Li4uLkYuLi4uLgowMDIwOiBBMiBDNyA1MiBDMCBGNCBBOCA2NiA0NiAgMjkgRkYgOTggRjAg
RjcgMzQgREEgQUIgOiAuLlIuLi5mRikuLi4uNC4uCjAwMzA6IEUxIDE5IDYxIDFEIDZDIEEx
IEQxIEI0ICBGMiAzRSA4RSA5RCAyNyBENCA3NCBCQyA6IC4uYS5sLi4uLj4uLicudC4KMDA0
MDogM0YgMkUgMTkgRDQgNTMgOTIgMjggQUEgIEYzIDg5IDA1IEM0IEVCIDNBIDc2IDYzIDog
Py4uLlMuKC4uLi4uLjp2YwowMDUwOiBFQiA3MCA5RSBFQyA5QyA5QiBDQSA5QyAgMTIgRDcg
ODUgOUUgNDYgMkMgNDUgNzAgOiAucC4uLi4uLi4uLi5GLEVwCjAwNjA6IDFDIDhCIDQ4IDU1
IERBIDk1IDUzIDk4ICAwMCBDNiA5QyA0QiA1MCBBQSBCNSA0RSA6IC4uSFUuLlMuLi4uS1Au
Lk4KMDA3MDogRTIgRjQgRDMgOTAgMEQgNUYgNzggMkIgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogLi4uLi5feCsKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5
dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC41Nzk3MTggVHJhbnNwb3J0OiBQYWNrZXQgdHlw
ZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxh
aW4gKDQ0IGJ5dGVzKQowMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAgMDAg
MDAgMUYgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi4uc2NwCjAwMTA6IDNBIDIwIDc3IDYxIDcy
IDZFIDY5IDZFICA2NyAzQSAyMCA0NSA3OCA2NSA2MyA3NSA6IDogd2FybmluZzogRXhlY3UK
MDAyMDogNzQgNjkgNkUgNjcgMjAgNzMgNjMgNzAgIDMxIDJFIDBEIDBBICAgICAgICAgICAg
IDogdGluZyBzY3AxLi4uCltsaWJzc2gyXSAwLjU3OTc1OCBUcmFuc3BvcnQ6IFBhY2tldCB0
eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9NDQKW2xpYnNzaDJdIDAuNTc5NzYxIENvbm46IDMx
IGJ5dGVzIHBhY2tldF9hZGQoKSBmb3IgMC8wLzQ3MzczNDg5Mjc0ODgxCltsaWJzc2gyXSAw
LjU3OTc2NiBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC41
Nzk3NjkgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQ
IHJlc3BvbnNlCltsaWJzc2gyXSAwLjYxODE1NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50
cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjYxODE2
NyBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJz
c2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzNjAgYnl0ZXMpCjAwMDA6IEIzIEFFIDA4IDM0
IDZBIDhDIEMwIEREICBEMSA4QSAyNyBBMSA5MCAyMSBDQSA3NSA6IC4uLjRqLi4uLi4nLi4h
LnUKMDAxMDogNjggOTkgNkIgOUMgQTggQjUgNjYgQjcgIEEzIDFEIDJBIDkzIDJCIDFBIDE1
IERGIDogaC5rLi4uZi4uLiouKy4uLgowMDIwOiBFNCBCNyAwQSBCNyA5QyBCMyA5NCA5RCAg
NDUgNjMgQUUgOEQgMDEgNEYgNzMgNkYgOiAuLi4uLi4uLkVjLi4uT3NvCjAwMzA6IDVGIDE2
IDY2IERCIDYyIDk0IEU0IDBDICBBNCBBOCAyQSAxMyBFMSA4OCA1NyBBOCA6IF8uZi5iLi4u
Li4qLi4uVy4KMDA0MDogRjUgNzcgNzAgMkUgMEEgNzEgMDEgQTQgIDk3IDY1IEE1IDFGIDBB
IEI4IDBFIDA5IDogLndwLi5xLi4uZS4uLi4uLgowMDUwOiAzQiAyMCBEQSAyRSAzMyBFMiAy
NyA2NCAgMzkgQTUgMjIgQjIgODAgN0UgMTYgMTkgOiA7IC4uMy4nZDkuIi4ufi4uCjAwNjA6
IEY5IDQ0IDZGIDQ1IDkxIDAxIEYwIDc3ICBCNCBCRSBEMiBDRSBGOCBBQSBBRSBDNyA6IC5E
b0UuLi53Li4uLi4uLi4KMDA3MDogRTIgM0MgNEUgN0UgM0UgNDcgOTUgMzIgIDg1IDRDIDJB
IDkxIEQ1IDYxIEQ4IDc2IDogLjxOfj5HLjIuTCouLmEudgowMDgwOiA1NiBEQiA1NyA2RiAx
QSA2NSBCMSAzQSAgQjggNzEgQzYgOEYgRjkgQUEgQjAgQTUgOiBWLldvLmUuOi5xLi4uLi4u
CjAwOTA6IDYyIDk2IENDIDQwIDYxIEE1IEE0IDhFICA1MCBEOSBCRSA3MCA0NyBEQSA3RSBF
OCA6IGIuLkBhLi4uUC4ucEcufi4KMDBhMDogODAgMDkgRkUgN0QgRTEgNjAgOUEgMTQgIEJB
IDYzIDY5IDE4IEI0IDNEIDI0IEQyIDogLi4ufS5gLi4uY2kuLj0kLgowMGIwOiBCNCBCNSA3
NyBBMSBENSBBOSBFRiA0RSAgNDYgMzAgQkIgMUQgRTggMDIgRTYgRTIgOiAuLncuLi4uTkYw
Li4uLi4uCjAwYzA6IDlEIDJFIEJBIEZFIDQ3IEUzIEJBIDZEICAxQSA0NiAzRSAyMSA3QyA0
MyAxQyA3MyA6IC4uLi5HLi5tLkY+IXxDLnMKMDBkMDogREIgQTYgOTUgNzYgQTUgRjAgN0Eg
OEQgIEVEIDhGIEI5IENEIEM1IEU3IENGIDU0IDogLi4udi4uei4uLi4uLi4uVAowMGUwOiA3
NCBBQiA1RCA0NCAzMiBFRiA0RiA5RiAgMjggNzUgN0EgNDQgREEgNUEgMEIgODUgOiB0Ll1E
Mi5PLih1ekQuWi4uCjAwZjA6IDc1IDY3IDNDIEY1IEVDIEZBIEYxIDA5ICAzRSA1NyBBRiAw
RCAwMSBFNiA2NCA0NSA6IHVnPC4uLi4uPlcuLi4uZEUKMDEwMDogNzIgQjIgMzEgNjIgRkMg
MUIgMDQgOTUgIDU5IEEzIDczIDI0IEU4IEU2IDM3IEJBIDogci4xYi4uLi5ZLnMkLi43Lgow
MTEwOiA2MCA0RSBGRSA0QSAzNSA0MyA2QyBERCAgMkIgMzEgN0IgQzYgQ0EgNzUgRUQgMDkg
OiBgTi5KNUNsLisxey4udS4uCjAxMjA6IEE4IDM5IDE3IDFDIDBGIEU3IDlBIEM3ICA4RSA0
QiA2NyA0RCBFQiA2NyAzRCA0RSA6IC45Li4uLi4uLktnTS5nPU4KMDEzMDogMTggQjYgQTAg
QzMgOTkgOTAgODIgMzIgIDZFIDIyIDJEIDg2IDk1IDk5IDE2IDQ1IDogLi4uLi4uLjJuIi0u
Li4uRQowMTQwOiAxQyA0MiA1NCA3QSBBNyAyQyAyRCAzMiAgRkMgQTEgNkIgRjUgNjcgMkIg
QjQgOTIgOiAuQlR6LiwtMi4uay5nKy4uCjAxNTA6IDY0IEQ5IEQ3IEUxIEQ1IDcyIEMxIDQ2
ICBERSBGQSBFMSA4MSA5RCA1NSA2QiBEOCA6IGQuLi4uci5GLi4uLi5Vay4KMDE2MDogRDcg
MEUgNUIgNDUgNDQgNkQgMjQgNkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi5bRURt
JG0KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAw
MiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4u
LgpbbGlic3NoMl0gMC42MTgyNzggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVk
LCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwNSBieXRl
cykKMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAxIDAwIDAwIDAwIDVDIDczIDYz
IDcwIDogXy4uLi4uLi4uLi4uXHNjcAowMDEwOiAzQSAyMCA0NiA0MSA1NCA0MSA0QyAzQSAg
MjAgNDUgNzggNjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpCjAwMjA6IDZFIDY3
IDIwIDczIDczIDY4IDMxIDIwICA2OSA2RSAyMCA2MyA2RiA2RCA3MCA2MSA6IG5nIHNzaDEg
aW4gY29tcGEKMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkgIDIwIDZEIDZGIDY0IDY1
IDIwIDY2IDYxIDogdGliaWxpdHkgbW9kZSBmYQowMDQwOiA2OSA2QyA2NSA2NCAyMCAyOCA0
MyA2OCAgNjUgNjMgNkIgMjAgNzQgNjggNjEgNzQgOiBpbGVkIChDaGVjayB0aGF0CjAwNTA6
IDIwIDczIDYzIDcwIDMxIDIwIDY5IDczICAyMCA2OSA2RSAyMCA3OSA2RiA3NSA3MiA6ICBz
Y3AxIGlzIGluIHlvdXIKMDA2MDogMjAgNTAgNDEgNTQgNDggMjkgMkUgMEQgIDBBICAgICAg
ICAgICAgICAgICAgICAgIDogIFBBVEgpLi4uCltsaWJzc2gyXSAwLjYxODMxNyBUcmFuc3Bv
cnQ6IFBhY2tldCB0eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9MTA1CltsaWJzc2gyXSAwLjYx
ODMyMCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NzM3MzQ4OTI3NDg4
MQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAy
IDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u
CltsaWJzc2gyXSAwLjYxODM1OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQs
IGxlbmd0aD01Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMjUgYnl0ZXMp
CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwQiA2NSA3OCA2OSA3NCAyRCA3MyA3
NCA6IGIuLi4uLi4uLmV4aXQtc3QKMDAxMDogNjEgNzQgNzUgNzMgMDAgMDAgMDAgMDAgIEZG
ICAgICAgICAgICAgICAgICAgICAgIDogYXR1cy4uLi4uCltsaWJzc2gyXSAwLjYxODM4MSBU
cmFuc3BvcnQ6IFBhY2tldCB0eXBlIDk4IHJlY2VpdmVkLCBsZW5ndGg9MjUKW2xpYnNzaDJd
IDAuNjE4Mzg0IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1z
dGF0dXMgKHdyIDApCltsaWJzc2gyXSAwLjYxODM4NyBDb25uOiBFeGl0IHN0YXR1cyAyNTUg
cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBw
bGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjE4NDI1IFRyYW5zcG9ydDog
UGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRf
cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42MTg0NzAgVHJh
bnNwb3J0OiBQYWNrZXQgdHlwZSA5NyByZWNlaXZlZCwgbGVuZ3RoPTUKW2xpYnNzaDJdIDAu
NjE4NDczIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMApbbGlic3NoMl0g
MC42MTg0ODAgQ29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXMKW2xpYnNzaDJd
IDAuNjE4NDgzIENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MCAwMCAwMCAwMCAwMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgLi4uLgpbbGlic3NoMl0gMC42
MTg1ODEgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJf
dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMzYgYnl0ZXMpCjAwMDA6IDUxIDdEIEY5IDlDIDg3
IDU3IDg1IDg1ICA5QiAyNCA4NCBGQiAxQyAyNCBENyA2QSA6IFF9Li4uVy4uLiQuLi4kLmoK
MDAxMDogRjAgRTIgMDQgNEUgQkEgQkIgMUIgOTMgIDhGIEZEIDVBIEVGIDcxIDRCIDFCIDRC
IDogLi4uTi4uLi4uLloucUsuSwowMDIwOiA4MSA5QyA2MiA4RCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAuLmIuCltsaWJzc2gyXSAwLjYxODU5NSBDb25uOiBD
bG9zaW5nIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg1
IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42MTg2NzAgU29ja2V0OiBTZW50IDM2LzM2
IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAo
MzYgYnl0ZXMpCjAwMDA6IEVBIDgyIDNFIEI4IDNGIDg3IDlBIDg2ICBBRiBGQSAxRSA5MyA3
MSAwQiA4NSAzOSA6IC4uPi4/Li4uLi4uLnEuLjkKMDAxMDogMDggNDUgMDQgNTMgNzkgNEUg
NDggRkQgIDZFIDBFIENDIDI0IDAyIDIwIDcxIEM3IDogLkUuU3lOSC5uLi4kLiBxLgowMDIw
OiBDNSBEQiBGRCBCOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu
Li4uCltsaWJzc2gyXSAwLjYxODY4NCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv
ZiB0eXBlOiA5NApbbGlic3NoMl0gMC42MTg2ODcgVHJhbnNwb3J0OiBMb29raW5nIGZvciBw
YWNrZXQgb2YgdHlwZTogOTUKW2xpYnNzaDJdIDAuNjE4Njg5IFRyYW5zcG9ydDogTG9va2lu
ZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk0CltsaWJzc2gyXSAwLjYxODY5MiBUcmFuc3BvcnQ6
IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5NQpbbGlic3NoMl0gMC42MTg2OTQgVHJh
bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTQKW2xpYnNzaDJdIDAuNjE4
Njk3IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk1CltsaWJzc2gy
XSAwLjYxODcwMSBUcmFuc3BvcnQ6IERpc2Nvbm5lY3Rpbmc6IHJlYXNvbj0xMSwgZGVzYz1O
b3JtYWwgU2h1dGRvd24sIFRoYW5rIHlvdSBmb3IgcGxheWluZywgbGFuZz0KPT4gbGlic3No
Ml90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDUxIGJ5dGVzKQowMDAwOiAwMSAwMCAwMCAwMCAw
QiAwMCAwMCAwMCAgMjYgNEUgNkYgNzIgNkQgNjEgNkMgMjAgOiAuLi4uLi4uLiZOb3JtYWwg
CjAwMTA6IDUzIDY4IDc1IDc0IDY0IDZGIDc3IDZFICAyQyAyMCA1NCA2OCA2MSA2RSA2QiAy
MCA6IFNodXRkb3duLCBUaGFuayAKMDAyMDogNzkgNkYgNzUgMjAgNjYgNkYgNzIgMjAgIDcw
IDZDIDYxIDc5IDY5IDZFIDY3IDAwIDogeW91IGZvciBwbGF5aW5nLgowMDMwOiAwMCAwMCAw
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4KPT4gbGli
c3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4yICgwIGJ5dGVzKQpbbGlic3NoMl0gMC42MTg4
MDUgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJfdHJh
bnNwb3J0X3dyaXRlIHNlbmQoKSAoODQgYnl0ZXMpCjAwMDA6IDA5IDc3IDc4IDY0IDE4IEUy
IENDIDIwICBFNCBEOCBFMyBFQSA5MSBGNiAxMSBBQiA6IC53eGQuLi4gLi4uLi4uLi4KMDAx
MDogQjAgRDYgRkIgNEEgMkYgNkQgMzEgMzEgIDM2IEFBIDQ1IEVBIEI3IDlEIEU2IDQ2IDog
Li4uSi9tMTE2LkUuLi4uRgowMDIwOiAxNCA3NSAzQiAwOCAxQSBCNCAxQSBCMyAgN0IgQjYg
MEYgNTcgRjcgRDMgNDYgNzYgOiAudTsuLi4uLnsuLlcuLkZ2CjAwMzA6IDEyIDVEIDgxIEZF
IEZFIDgzIEQyIEJDICBERCBBNSA4NCA2NCA5RiBEOCAxNSBBMSA6IC5dLi4uLi4uLi4uZC4u
Li4KMDA0MDogMzkgQ0EgQjUgMzUgN0IgQjUgODkgRDAgIDgzIDIyIDQ1IDYxIDA0IDE1IDE0
IDJGIDogOS4uNXsuLi4uIkVhLi4uLwowMDUwOiA1MSAzNSAzRCA0RiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBRNT1PCltsaWJzc2gyXSAwLjYxODgyNiBUcmFu
c3BvcnQ6IEZyZWVpbmcgc2Vzc2lvbiByZXNvdXJjZQpbbGlic3NoMl0gMC42MTg4MzQgVHJh
bnNwb3J0OiBFeHRyYSBwYWNrZXRzIGxlZnQgMAphbGwgZG9uZQo=

------=_NextPart_50769C92_0848E950_490B7C06
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_50769C92_0848E950_490B7C06--
Oi,

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 12:58:48 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAwase000602;
	Thu, 11 Oct 2012 12:58:43 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAwYtc000586
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 12:58:34 +0200
Received: (qmail 21079 invoked by uid 501); 11 Oct 2012 10:58:35 -0000
Message-ID: <20121011105835.21078.qmail@stuge.se>
Date: Thu, 11 Oct 2012 12:58:35 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_scp_recv is not populating struct stat
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <tencent_6DB4F9D00613DC51600B888E@qq.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <tencent_6DB4F9D00613DC51600B888E@qq.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9BAwase000602

Hi!

ï¼¥ï½–ï½…ï½’ wrote:
> Please chek the new scp_libgcrypt.log file.

With the latest change it is now showing the same result as when
using OpenSSL. Note that the scp command fails. The server returns
an error message:


> [libssh2] 0.618278 Transport: Packet type 2 received, length=5
> => libssh2_transport_read() plain (105 bytes)
> 0000: 5F 00 00 00 00 00 00 00  01 00 00 00 5C 73 63 70 : _...........\scp
> 0010: 3A 20 46 41 54 41 4C 3A  20 45 78 65 63 75 74 69 : : FATAL: Executi
> 0020: 6E 67 20 73 73 68 31 20  69 6E 20 63 6F 6D 70 61 : ng ssh1 in compa
> 0030: 74 69 62 69 6C 69 74 79  20 6D 6F 64 65 20 66 61 : tibility mode fa
> 0040: 69 6C 65 64 20 28 43 68  65 63 6B 20 74 68 61 74 : iled (Check that
> 0050: 20 73 63 70 31 20 69 73  20 69 6E 20 79 6F 75 72 :  scp1 is in your
> 0060: 20 50 41 54 48 29 2E 0D  0A                      :  PATH)...

This error message is present also in your OpenSSL log.

If libssh2 does not reflect the correct exit-status after the
channel has closed then that is a bug.

Note that scp is not always the best option for file transfer. It's
only included for compatibility. If possible I recommend to use SFTP
instead. Now that libgcrypt works, take a look at the sftp example
programs.


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

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 11 13:55:07 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BBsila031846;
	Thu, 11 Oct 2012 13:55:01 +0200
Received: from smtpbg224.qq.com (SMTPBG224.QQ.COM [183.62.126.31])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BBse1j031720
 for <libssh2-devel@cool.haxx.se>; Thu, 11 Oct 2012 13:54:42 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail90t1349956472t166923
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_scp_recv is not populating struct stat
Mime-Version: 1.0
Date: Thu, 11 Oct 2012 19:54:32 +0800
X-Priority: 3
Message-ID: <tencent_3611A2BE65CA605B379B2B55@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 1357379579
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============0853627151=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

--===============0853627151==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_5076B378_D4B80DF8_5894002C"
Content-Transfer-Encoding: 8Bit

This is a multi-part message in MIME format.

------=_NextPart_5076B378_D4B80DF8_5894002C
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGkNCiAgICBJIGdvdC4gVGhhbmtzIGEgbG90Lg0KICAgIFRoZSBzZnRwIGRvIHdvcmsgd2Vs
bC4NCg0KICANCg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0t
LS0tLS0NCiAgRnJvbTogICJQZXRlciBTdHVnZSI8cGV0ZXJAc3R1Z2Uuc2U+Ow0KIERhdGU6
ICBUaHUsIE9jdCAxMSwgMjAxMiAwNjo1OCBQTQ0KIFRvOiAgImxpYnNzaDItZGV2ZWwiPGxp
YnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlPjsgDQogDQogU3ViamVjdDogIFJlOiBsaWJzc2gy
X3NjcF9yZWN2IGlzIG5vdCBwb3B1bGF0aW5nIHN0cnVjdCBzdGF0DQoNCiANCg0KSGkhDQoN
CqPFo/aj5aPyIHdyb3RlOg0KPiBQbGVhc2UgY2hlayB0aGUgbmV3IHNjcF9saWJnY3J5cHQu
bG9nIGZpbGUuDQoNCldpdGggdGhlIGxhdGVzdCBjaGFuZ2UgaXQgaXMgbm93IHNob3dpbmcg
dGhlIHNhbWUgcmVzdWx0IGFzIHdoZW4NCnVzaW5nIE9wZW5TU0wuIE5vdGUgdGhhdCB0aGUg
c2NwIGNvbW1hbmQgZmFpbHMuIFRoZSBzZXJ2ZXIgcmV0dXJucw0KYW4gZXJyb3IgbWVzc2Fn
ZToNCg0KDQo+IFtsaWJzc2gyXSAwLjYxODI3OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIg
cmVjZWl2ZWQsIGxlbmd0aD01DQo+ID0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFp
biAoMTA1IGJ5dGVzKQ0KPiAwMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAg
MDAgMDAgNUMgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi5cc2NwDQo+IDAwMTA6IDNBIDIwIDQ2
IDQxIDU0IDQxIDRDIDNBICAyMCA0NSA3OCA2NSA2MyA3NSA3NCA2OSA6IDogRkFUQUw6IEV4
ZWN1dGkNCj4gMDAyMDogNkUgNjcgMjAgNzMgNzMgNjggMzEgMjAgIDY5IDZFIDIwIDYzIDZG
IDZEIDcwIDYxIDogbmcgc3NoMSBpbiBjb21wYQ0KPiAwMDMwOiA3NCA2OSA2MiA2OSA2QyA2
OSA3NCA3OSAgMjAgNkQgNkYgNjQgNjUgMjAgNjYgNjEgOiB0aWJpbGl0eSBtb2RlIGZhDQo+
IDAwNDA6IDY5IDZDIDY1IDY0IDIwIDI4IDQzIDY4ICA2NSA2MyA2QiAyMCA3NCA2OCA2MSA3
NCA6IGlsZWQgKENoZWNrIHRoYXQNCj4gMDA1MDogMjAgNzMgNjMgNzAgMzEgMjAgNjkgNzMg
IDIwIDY5IDZFIDIwIDc5IDZGIDc1IDcyIDogIHNjcDEgaXMgaW4geW91cg0KPiAwMDYwOiAy
MCA1MCA0MSA1NCA0OCAyOSAyRSAwRCAgMEEgICAgICAgICAgICAgICAgICAgICAgOiAgUEFU
SCkuLi4NCg0KVGhpcyBlcnJvciBtZXNzYWdlIGlzIHByZXNlbnQgYWxzbyBpbiB5b3VyIE9w
ZW5TU0wgbG9nLg0KDQpJZiBsaWJzc2gyIGRvZXMgbm90IHJlZmxlY3QgdGhlIGNvcnJlY3Qg
ZXhpdC1zdGF0dXMgYWZ0ZXIgdGhlDQpjaGFubmVsIGhhcyBjbG9zZWQgdGhlbiB0aGF0IGlz
IGEgYnVnLg0KDQpOb3RlIHRoYXQgc2NwIGlzIG5vdCBhbHdheXMgdGhlIGJlc3Qgb3B0aW9u
IGZvciBmaWxlIHRyYW5zZmVyLiBJdCdzDQpvbmx5IGluY2x1ZGVkIGZvciBjb21wYXRpYmls
aXR5LiBJZiBwb3NzaWJsZSBJIHJlY29tbWVuZCB0byB1c2UgU0ZUUA0KaW5zdGVhZC4gTm93
IHRoYXQgbGliZ2NyeXB0IHdvcmtzLCB0YWtlIGEgbG9vayBhdCB0aGUgc2Z0cCBleGFtcGxl
DQpwcm9ncmFtcy4NCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29vbC5oYXh4LnNl
L2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVs

------=_NextPart_5076B378_D4B80DF8_5894002C
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGk8L0RJVj4NCjxESVY+Jm5ic3A7Jm5ic3A7IEkgZ290
LiBUaGFua3MgYSBsb3QuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBUaGUgc2Z0cCBkbyB3
b3JrIHdlbGwuPC9GT05UPjxpbmNsdWRldGFpbD48QlI+PC9ESVY+DQo8RElWPg0KPERJVj48
QlI+PC9ESVY+DQo8RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogMnB4OyBQQURESU5HLUxF
RlQ6IDBweDsgUEFERElORy1SSUdIVDogMHB4OyBGT05ULUZBTUlMWTogQXJpYWwgTmFycm93
OyBGT05ULVNJWkU6IDEycHg7IFBBRERJTkctVE9QOiAycHgiPi0tLS0tLS0tLS0tLS0tLS0t
LSZuYnNwO09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPC9ESVY+DQo8RElWIHN0
eWxlPSJQQURESU5HLUJPVFRPTTogOHB4OyBQQURESU5HLUxFRlQ6IDhweDsgUEFERElORy1S
SUdIVDogOHB4OyBCQUNLR1JPVU5EOiAjZWZlZmVmOyBGT05ULVNJWkU6IDEycHg7IFBBRERJ
TkctVE9QOiA4cHgiPg0KPERJVj48Qj5Gcm9tOiA8L0I+Jm5ic3A7IlBldGVyIFN0dWdlIiZs
dDtwZXRlckBzdHVnZS5zZSZndDs7PC9ESVY+DQo8RElWPjxCPkRhdGU6IDwvQj4mbmJzcDtU
aHUsIE9jdCAxMSwgMjAxMiAwNjo1OCBQTTwvRElWPg0KPERJVj48Qj5UbzogPC9CPiZuYnNw
OyJsaWJzc2gyLWRldmVsIiZsdDtsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZndDs7IDxX
QlI+PC9ESVY+DQo8RElWPjwvRElWPg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5ic3A7UmU6
IGxpYnNzaDJfc2NwX3JlY3YgaXMgbm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQ8L0RJVj48
L0RJVj4NCjxESVY+PEJSPjwvRElWPkhpITxCUj48QlI+o8Wj9qPlo/Igd3JvdGU6PEJSPiZn
dDsgUGxlYXNlIGNoZWsgdGhlIG5ldyBzY3BfbGliZ2NyeXB0LmxvZyBmaWxlLjxCUj48QlI+
V2l0aCB0aGUgbGF0ZXN0IGNoYW5nZSBpdCBpcyBub3cgc2hvd2luZyB0aGUgc2FtZSByZXN1
bHQgYXMgd2hlbjxCUj51c2luZyBPcGVuU1NMLiBOb3RlIHRoYXQgdGhlIHNjcCBjb21tYW5k
IGZhaWxzLiBUaGUgc2VydmVyIHJldHVybnM8QlI+YW4gZXJyb3IgbWVzc2FnZTo8QlI+PEJS
PjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjYxODI3OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIg
cmVjZWl2ZWQsIGxlbmd0aD01PEJSPiZndDsgPSZndDsgbGlic3NoMl90cmFuc3BvcnRfcmVh
ZCgpIHBsYWluICgxMDUgYnl0ZXMpPEJSPiZndDsgMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAg
MDAgMDAmbmJzcDsgMDEgMDAgMDAgMDAgNUMgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi5cc2Nw
PEJSPiZndDsgMDAxMDogM0EgMjAgNDYgNDEgNTQgNDEgNEMgM0EmbmJzcDsgMjAgNDUgNzgg
NjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpPEJSPiZndDsgMDAyMDogNkUgNjcg
MjAgNzMgNzMgNjggMzEgMjAmbmJzcDsgNjkgNkUgMjAgNjMgNkYgNkQgNzAgNjEgOiBuZyBz
c2gxIGluIGNvbXBhPEJSPiZndDsgMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkmbmJz
cDsgMjAgNkQgNkYgNjQgNjUgMjAgNjYgNjEgOiB0aWJpbGl0eSBtb2RlIGZhPEJSPiZndDsg
MDA0MDogNjkgNkMgNjUgNjQgMjAgMjggNDMgNjgmbmJzcDsgNjUgNjMgNkIgMjAgNzQgNjgg
NjEgNzQgOiBpbGVkIChDaGVjayB0aGF0PEJSPiZndDsgMDA1MDogMjAgNzMgNjMgNzAgMzEg
MjAgNjkgNzMmbmJzcDsgMjAgNjkgNkUgMjAgNzkgNkYgNzUgNzIgOiZuYnNwOyBzY3AxIGlz
IGluIHlvdXI8QlI+Jmd0OyAwMDYwOiAyMCA1MCA0MSA1NCA0OCAyOSAyRSAwRCZuYnNwOyAw
QSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyA6Jm5ic3A7IFBBVEgpLi4uPEJSPjxCUj5UaGlzIGVycm9y
IG1lc3NhZ2UgaXMgcHJlc2VudCBhbHNvIGluIHlvdXIgT3BlblNTTCBsb2cuPEJSPjxCUj5J
ZiBsaWJzc2gyIGRvZXMgbm90IHJlZmxlY3QgdGhlIGNvcnJlY3QgZXhpdC1zdGF0dXMgYWZ0
ZXIgdGhlPEJSPmNoYW5uZWwgaGFzIGNsb3NlZCB0aGVuIHRoYXQgaXMgYSBidWcuPEJSPjxC
Uj5Ob3RlIHRoYXQgc2NwIGlzIG5vdCBhbHdheXMgdGhlIGJlc3Qgb3B0aW9uIGZvciBmaWxl
IHRyYW5zZmVyLiBJdCdzPEJSPm9ubHkgaW5jbHVkZWQgZm9yIGNvbXBhdGliaWxpdHkuIElm
IHBvc3NpYmxlIEkgcmVjb21tZW5kIHRvIHVzZSBTRlRQPEJSPmluc3RlYWQuIE5vdyB0aGF0
IGxpYmdjcnlwdCB3b3JrcywgdGFrZSBhIGxvb2sgYXQgdGhlIHNmdHAgZXhhbXBsZTxCUj5w
cm9ncmFtcy48QlI+PEJSPjxCUj4vL1BldGVyPEJSPl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fPEJSPmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nvb2wu
aGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vbGlic3NoMi1kZXZlbDxCUj4NCjxE
SVY+PC9ESVY+PC9pbmNsdWRldGFpbD48L0RJVj4=

------=_NextPart_5076B378_D4B80DF8_5894002C--


--===============0853627151==
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

--===============0853627151==--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 12 13:06:27 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CB5ueN005029;
	Fri, 12 Oct 2012 13:06:19 +0200
Received: from smtpbg129.qq.com (smtpbg129.qq.com [183.60.2.225])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9CB5qZ5005010
 for <libssh2-devel@cool.haxx.se>; Fri, 12 Oct 2012 13:05:54 +0200
X-QQ-SSF: 000000000000001000000000000000Z
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 121.14.102.13
X-QQ-STYLE: 
X-QQ-mid: webmail90t1350039944t3872469
From: "=?gb18030?B?o8Wj9qPlo/I=?=" <unix@vip.qq.com>
To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" <libssh2-devel@cool.haxx.se>
Subject: How can I improve the speed of sftp?
Mime-Version: 1.0
Date: Fri, 12 Oct 2012 19:05:44 +0800
X-Priority: 3
Message-ID: <tencent_4B4175D175D63C3337DCF9B2@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============0963833351=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multi-part message in MIME format.

--===============0963833351==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_5077F988_D6927300_685CBF35"
Content-Transfer-Encoding: 8Bit

This is a multi-part message in MIME format.

------=_NextPart_5077F988_D6927300_685CBF35
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

aGksYWxsDQogV2hlbiBJIHVzZSBzeXN0ZW0ncyBzZnRwIHRvb2wgdGhlIHNwZWVkIGlzIDMx
TS9zLGJ1dCB0aGUgbGlic3NoMidzIHNmdHAganVzdCA0fjVNL3MuDQogSG93IGNhbiBJIGlt
cHJvdmUgdGhlIHNwZWVkPw0KICANCiBUaGFua3Mu

------=_NextPart_5077F988_D6927300_685CBF35
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9ESVY+DQo8RElWPldoZW4gSSB1c2Ugc3lz
dGVtJ3Mgc2Z0cCB0b29sIHRoZSBzcGVlZCBpcyAzMU0vcyxidXQgdGhlIGxpYnNzaDIncyBz
ZnRwIGp1c3QgNH41TS9zLjwvRElWPg0KPERJVj5Ib3cgY2FuIEkgaW1wcm92ZSB0aGUgc3Bl
ZWQ/PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj5UaGFua3MuPC9ESVY+PC9GT05U
Pg==

------=_NextPart_5077F988_D6927300_685CBF35--


--===============0963833351==
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

--===============0963833351==--

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 13 00:45:57 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CMjU4T020852;
	Sat, 13 Oct 2012 00:45:52 +0200
Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com
 [209.85.214.182])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CMjQWO020810
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Sat, 13 Oct 2012 00:45:27 +0200
Received: by mail-ob0-f182.google.com with SMTP id wc20so3400876obb.41
 for <libssh2-devel@cool.haxx.se>; Fri, 12 Oct 2012 15:45:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=ideadevice.com; s=google;
 h=mime-version:date:message-id:subject:from:to:content-type;
 bh=U/xt3YM9BsDK5Rbk+tJdLbT2fp5mcW/rA5iyK9tZB3Y=;
 b=MxT9JGhkhqkL+vVkjSbKa0bUHpSxP7E7LGRp5mN1RdKNHFDYCJR7XYUsDl5v2RXzfI
 /g5ZDet5EtTbKxPCxQpjgmw1eVGWoz743aEoFk9wWE7IyN9lMghMkRNm3woUofGR9tjK
 VMHY59qoHOABC9j6w10X/7+92HCdNwFlRELBE=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:date:message-id:subject:from:to:content-type
 :x-gm-message-state;
 bh=U/xt3YM9BsDK5Rbk+tJdLbT2fp5mcW/rA5iyK9tZB3Y=;
 b=ay8BcW15SuMiJa5oPPjFHTse4Q2SbafAiFDBJCYJ4PGGD1Ibf4oSyEafwDrx/7xVh4
 PQx9lvOhlATpwmMBlEThkCcn9cMhWICE9fL37tJ/1a7zlUh7vJf9wBXn40CUVkau+snJ
 tA6HaDrGrAd1sJilbrl/GK7VG4jJlGhVu2f0zXRiQvwhFX3csj5lOki2TVBupL2r5mHb
 Pn5B11ttbn20E1dnTuJ2Tjnf49WJYMaPFPVAzfRs8jZcGtwBzycRzBlUZpLFfAbvQE3X
 V+HnIOhFWyZsFCdLCzBd3LHqGYNn3ROVt1mMexM+pabKC2IuB1KjVU4WvFczkvTFuJHZ
 L7UQ==
MIME-Version: 1.0
Received: by 10.182.69.50 with SMTP id b18mr4593172obu.75.1350081921481; Fri,
 12 Oct 2012 15:45:21 -0700 (PDT)
Received: by 10.76.170.103 with HTTP; Fri, 12 Oct 2012 15:45:21 -0700 (PDT)
Date: Sat, 13 Oct 2012 04:15:21 +0530
Message-ID: <CAG+SKy7PYp7Yt2U215jf8++zAHp8ZwmdS+V_oqp_v51S-WKzYQ@mail.gmail.com>
Subject: Re: libssh2_channel_get_exit_status
From: aalok sood <aalok@ideadevice.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQmEwEoN0vrZdJhngd2+jQi4SbM38iHCUFvNntm2uKz1UW6nhKmAJgbFqzJcf5FZKaUvV0ZB
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1169770206=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1169770206==
Content-Type: multipart/alternative; boundary=14dae93b578058fb1e04cbe4717a

--14dae93b578058fb1e04cbe4717a
Content-Type: text/plain; charset=ISO-8859-1

Hi

After much ado, I finally got some space and time to work on the patch.
However, I see further issues with how libssh2_channel_get_exit_status()
works.
The exit_status field in channel structured is initialized to 0.
Now in cases where in we received a unexpected eof and hence did not
receive the exit status at all, the api libssh2_channel_get_exit_status()
still returns 0 (which is a valid ssh code).

The fix I have done on my local setup is to initialize channel->exit_status
as -1. Now when I call libssh2_channel_get_exit_status,
I know for sure that an exit code has been received or not.


I realize that we can also overcome this problem by keeping a flag
exit_code_received (which be set only if exit code is actually received),
and return that in the new api:

  LIBSSH2_API int
   libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_t
 *status)


However I feel this is a serious issue in the existing api and must be
fixed there as well. This pushes me towards the original fix, ie. to
initialize exit_status to a non valid ssh return code.


Regards
Aalok


On Tue, Jul 17, 2012 at 3:30 PM, <libssh2-devel-request@cool.haxx.se> wrote:

> Send libssh2-devel mailing list submissions to
>         libssh2-devel@cool.haxx.se
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> or, via email, send a message with subject or body 'help' to
>         libssh2-devel-request@cool.haxx.se
>
> You can reach the person managing the list at
>         libssh2-devel-owner@cool.haxx.se
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of libssh2-devel digest..."
>
>
> Today's Topics:
>
>    1. Re: libssh2_channel_get_exit_status (Daniel Stenberg) (aalok sood)
>    2. Re: libssh2_channel_get_exit_status (Daniel Stenberg)
>       (Peter Stuge)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 16 Jul 2012 15:45:17 +0530
> From: aalok sood <aalok@ideadevice.com>
> To: libssh2-devel@cool.haxx.se
> Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)
> Message-ID:
>         <
> CAG+SKy5o_0hJYHWhLSMWS2O9LWHzniHWUKYe0jYrFYpQP5mg1w@mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Yes Daniel I agree with you.
>
> It would be better than modifying libssh2_channel_get_exit_status.
> Also keeping the fetch status in a separate field from the actual shell
> exit_status  would be a better, more clear api.
>
> I will add the api and send in a patch.
>
> -(Aalok)-
>
>
>
> > Message: 2
> > Date: Sun, 15 Jul 2012 23:55:36 +0200 (CEST)
> > From: Daniel Stenberg <daniel@haxx.se>
> > To: libssh2 development <libssh2-devel@cool.haxx.se>
> > Subject: Re: libssh2_channel_get_exit_status
> > Message-ID: <alpine.DEB.2.00.1207152353050.5683@tvnag.unkk.fr>
> > Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
> >
> > On Sun, 15 Jul 2012, aalok sood wrote:
> >
> > > * libssh2_channel_get_exit_status
> > >
> > > Now this makes sense, but sending back zero seems peculiar to me. zero
> > is a
> > > valid shell exit code, so we should send back something out of valid
> > shell
> > > exit codes in case channel is None. How about -1?
> >
> > We should rather make a new function that has a prototype like:
> >
> >   LIBSSH2_API int
> >   libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_t
> > *status)
> >
> > Which then can return the proper value from the protocol in a value
> > separate
> > from the return code. Wouldn't that work fine for you?
> >
> > --
> >
> >
>
> >   / daniel.haxx.se
> >
> >
> > ------------------------------
> >
> > _______________________________________________
> > libssh2-devel mailing list
> > libssh2-devel@cool.haxx.se
> > http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> >
> >
> > End of libssh2-devel Digest, Vol 38, Issue 7
> > ********************************************
> >
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://cool.haxx.se/pipermail/libssh2-devel/attachments/20120716/a3beb8ab/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 2
> Date: Mon, 16 Jul 2012 13:04:32 +0200
> From: Peter Stuge <peter@stuge.se>
> To: libssh2-devel@cool.haxx.se
> Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)
> Message-ID: <20120716110432.8470.qmail@stuge.se>
> Content-Type: text/plain; charset=us-ascii
>
> aalok sood wrote:
> > I will add the api and send in a patch.
>
> Remember to include documentation.
>
>
> //Peter
>
>
> ------------------------------
>
> _______________________________________________
> libssh2-devel mailing list
> libssh2-devel@cool.haxx.se
> http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>
>
> End of libssh2-devel Digest, Vol 38, Issue 8
> ********************************************
>

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

<font color=3D"#222222" face=3D"arial, sans-serif">Hi</font><div><font colo=
r=3D"#222222" face=3D"arial, sans-serif"><br></font></div><div><font color=
=3D"#222222" face=3D"arial, sans-serif">After much ado, I finally got some =
space and time to work on the patch.</font></div>
<div><font color=3D"#222222" face=3D"arial, sans-serif">However, I see furt=
her issues with how=A0</font><span style=3D"font-size:12.800000190734863px;=
color:rgb(34,34,34);font-family:arial,sans-serif;background-color:rgb(255,2=
55,255)">libssh2_channel_get_exit_</span><span class=3D"il" style=3D"font-s=
ize:12.800000190734863px;background-color:rgb(255,255,204);color:rgb(34,34,=
34);font-family:arial,sans-serif">status() works.</span></div>
<div><font color=3D"#222222" face=3D"arial, sans-serif">The exit_status fie=
ld in channel structured is initialized to 0.</font></div><div><font color=
=3D"#222222" face=3D"arial, sans-serif">Now in cases where in we received a=
 unexpected eof and hence did not receive the exit status at all, the api=
=A0</font><span style=3D"font-size:12.800000190734863px;color:rgb(34,34,34)=
;font-family:arial,sans-serif;background-color:rgb(255,255,255)">libssh2_ch=
annel_get_exit_</span><span class=3D"il" style=3D"font-size:12.800000190734=
863px;background-color:rgb(255,255,204);color:rgb(34,34,34);font-family:ari=
al,sans-serif">status()</span></div>
<div><span class=3D"il" style=3D"font-size:12.800000190734863px;background-=
color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans-serif">st=
ill returns 0 (which is a valid ssh code).</span></div><div><span class=3D"=
il" style=3D"font-size:12.800000190734863px;background-color:rgb(255,255,20=
4);color:rgb(34,34,34);font-family:arial,sans-serif"><br>
</span></div><div><span class=3D"il" style=3D"font-size:12.800000190734863p=
x;background-color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,s=
ans-serif">The fix I have done on my local setup is to initialize channel-&=
gt;exit_status as -1. Now when I call libssh2_channel_get_exit_status,</spa=
n></div>
<div><span class=3D"il" style=3D"font-size:12.800000190734863px;background-=
color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans-serif">I =
know for sure that an exit code has been received or not.</span></div><div>
<span class=3D"il" style=3D"font-size:12.800000190734863px;background-color=
:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans-serif"><br></s=
pan></div><div><span class=3D"il" style=3D"font-size:12.800000190734863px;b=
ackground-color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans=
-serif"><br>
</span></div><div><font color=3D"#222222" face=3D"arial, sans-serif">I real=
ize that we can also overcome this problem by keeping a flag exit_code_rece=
ived (which be set only if exit code is actually received), and return that=
 in the new api:</font></div>
<div><font color=3D"#222222" face=3D"arial, sans-serif"><br></font></div><d=
iv>=A0 LIBSSH2_API int<br>=A0 =A0libssh2_channel_get_exit_status2(LIBSSH2_C=
HANNEL *channel, uint32_t<br>=A0*status)</div><div><span class=3D"il" style=
=3D"font-size:12.800000190734863px;background-color:rgb(255,255,204);color:=
rgb(34,34,34);font-family:arial,sans-serif">=A0</span></div>
<div><span class=3D"il" style=3D"font-size:12.800000190734863px;background-=
color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans-serif"><b=
r></span></div><div><span class=3D"il" style=3D"font-size:12.80000019073486=
3px;background-color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial=
,sans-serif">However I feel this is a serious issue in the existing api and=
 must be fixed there as well. This pushes me towards the original fix, ie. =
to initialize exit_status to a non valid ssh return code.</span></div>
<div><br></div><div><br></div><div><span class=3D"il" style=3D"font-size:12=
.800000190734863px;background-color:rgb(255,255,204);color:rgb(34,34,34);fo=
nt-family:arial,sans-serif">Regards</span></div><div><span class=3D"il" sty=
le=3D"font-size:12.800000190734863px;background-color:rgb(255,255,204);colo=
r:rgb(34,34,34);font-family:arial,sans-serif">Aalok</span></div>
<div><font color=3D"#222222" face=3D"arial, sans-serif"><br></font></div><d=
iv><font color=3D"#222222" face=3D"arial, sans-serif"><br></font><div class=
=3D"gmail_quote">On Tue, Jul 17, 2012 at 3:30 PM,  <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:libssh2-devel-request@cool.haxx.se" target=3D"_blank">libss=
h2-devel-request@cool.haxx.se</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">Send libssh2-devel mailing list submissions =
to<br>
=A0 =A0 =A0 =A0 <a href=3D"mailto:libssh2-devel@cool.haxx.se">libssh2-devel=
@cool.haxx.se</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
=A0 =A0 =A0 =A0 <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/lib=
ssh2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/=
libssh2-devel</a><br>
or, via email, send a message with subject or body &#39;help&#39; to<br>
=A0 =A0 =A0 =A0 <a href=3D"mailto:libssh2-devel-request@cool.haxx.se">libss=
h2-devel-request@cool.haxx.se</a><br>
<br>
You can reach the person managing the list at<br>
=A0 =A0 =A0 =A0 <a href=3D"mailto:libssh2-devel-owner@cool.haxx.se">libssh2=
-devel-owner@cool.haxx.se</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than &quot;Re: Contents of libssh2-devel digest...&quot;<br>
<br>
<br>
Today&#39;s Topics:<br>
<br>
=A0 =A01. Re: libssh2_channel_get_exit_status (Daniel Stenberg) (aalok sood=
)<br>
=A0 =A02. Re: libssh2_channel_get_exit_status (Daniel Stenberg)<br>
=A0 =A0 =A0 (Peter Stuge)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Mon, 16 Jul 2012 15:45:17 +0530<br>
From: aalok sood &lt;<a href=3D"mailto:aalok@ideadevice.com">aalok@ideadevi=
ce.com</a>&gt;<br>
To: <a href=3D"mailto:libssh2-devel@cool.haxx.se">libssh2-devel@cool.haxx.s=
e</a><br>
Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)<br>
Message-ID:<br>
=A0 =A0 =A0 =A0 &lt;<a href=3D"mailto:CAG%2BSKy5o_0hJYHWhLSMWS2O9LWHzniHWUK=
Ye0jYrFYpQP5mg1w@mail.gmail.com">CAG+SKy5o_0hJYHWhLSMWS2O9LWHzniHWUKYe0jYrF=
YpQP5mg1w@mail.gmail.com</a>&gt;<br>
Content-Type: text/plain; charset=3D&quot;iso-8859-1&quot;<br>
<br>
Yes Daniel I agree with you.<br>
<br>
It would be better than modifying libssh2_channel_get_exit_status.<br>
Also keeping the fetch status in a separate field from the actual shell<br>
exit_status =A0would be a better, more clear api.<br>
<br>
I will add the api and send in a patch.<br>
<br>
-(Aalok)-<br>
<br>
<br>
<br>
&gt; Message: 2<br>
&gt; Date: Sun, 15 Jul 2012 23:55:36 +0200 (CEST)<br>
&gt; From: Daniel Stenberg &lt;<a href=3D"mailto:daniel@haxx.se">daniel@hax=
x.se</a>&gt;<br>
&gt; To: libssh2 development &lt;<a href=3D"mailto:libssh2-devel@cool.haxx.=
se">libssh2-devel@cool.haxx.se</a>&gt;<br>
&gt; Subject: Re: libssh2_channel_get_exit_status<br>
&gt; Message-ID: &lt;<a href=3D"mailto:alpine.DEB.2.00.1207152353050.5683@t=
vnag.unkk.fr">alpine.DEB.2.00.1207152353050.5683@tvnag.unkk.fr</a>&gt;<br>
&gt; Content-Type: TEXT/PLAIN; charset=3DUS-ASCII; format=3Dflowed<br>
&gt;<br>
&gt; On Sun, 15 Jul 2012, aalok sood wrote:<br>
&gt;<br>
&gt; &gt; * libssh2_channel_get_exit_status<br>
&gt; &gt;<br>
&gt; &gt; Now this makes sense, but sending back zero seems peculiar to me.=
 zero<br>
&gt; is a<br>
&gt; &gt; valid shell exit code, so we should send back something out of va=
lid<br>
&gt; shell<br>
&gt; &gt; exit codes in case channel is None. How about -1?<br>
&gt;<br>
&gt; We should rather make a new function that has a prototype like:<br>
&gt;<br>
&gt; =A0 LIBSSH2_API int<br>
&gt; =A0 libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_=
t<br>
&gt; *status)<br>
&gt;<br>
&gt; Which then can return the proper value from the protocol in a value<br=
>
&gt; separate<br>
&gt; from the return code. Wouldn&#39;t that work fine for you?<br>
&gt;<br>
&gt; --<br>
&gt;<br>
&gt;<br>
<br>
&gt; =A0 / <a href=3D"http://daniel.haxx.se" target=3D"_blank">daniel.haxx.=
se</a><br>
&gt;<br>
&gt;<br>
&gt; ------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; libssh2-devel mailing list<br>
&gt; <a href=3D"mailto:libssh2-devel@cool.haxx.se">libssh2-devel@cool.haxx.=
se</a><br>
&gt; <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel"=
 target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-dev=
el</a><br>
&gt;<br>
&gt;<br>
&gt; End of libssh2-devel Digest, Vol 38, Issue 7<br>
&gt; ********************************************<br>
&gt;<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: &lt;<a href=3D"http://cool.haxx.se/pipermail/libssh2-devel/attachments=
/20120716/a3beb8ab/attachment-0001.html" target=3D"_blank">http://cool.haxx=
.se/pipermail/libssh2-devel/attachments/20120716/a3beb8ab/attachment-0001.h=
tml</a>&gt;<br>

<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Mon, 16 Jul 2012 13:04:32 +0200<br>
From: Peter Stuge &lt;<a href=3D"mailto:peter@stuge.se">peter@stuge.se</a>&=
gt;<br>
To: <a href=3D"mailto:libssh2-devel@cool.haxx.se">libssh2-devel@cool.haxx.s=
e</a><br>
Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)<br>
Message-ID: &lt;<a href=3D"mailto:20120716110432.8470.qmail@stuge.se">20120=
716110432.8470.qmail@stuge.se</a>&gt;<br>
Content-Type: text/plain; charset=3Dus-ascii<br>
<br>
aalok sood wrote:<br>
&gt; I will add the api and send in a patch.<br>
<br>
Remember to include documentation.<br>
<br>
<br>
//Peter<br>
<br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
libssh2-devel mailing list<br>
<a href=3D"mailto:libssh2-devel@cool.haxx.se">libssh2-devel@cool.haxx.se</a=
><br>
<a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel" targ=
et=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel</a=
><br>
<br>
<br>
End of libssh2-devel Digest, Vol 38, Issue 8<br>
********************************************<br>
</blockquote></div><br></div>

--14dae93b578058fb1e04cbe4717a--

--===============1169770206==
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

--===============1169770206==--

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 13 05:54:03 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9D3rf9k023393;
	Sat, 13 Oct 2012 05:53:59 +0200
Received: from na3sys009aog130.obsmtp.com (na3sys009aog130.obsmtp.com
 [74.125.149.143])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9D3raS0023357
 for <libssh2-devel@cool.haxx.se>; Sat, 13 Oct 2012 05:53:36 +0200
Received: from mail-oa0-f54.google.com ([209.85.219.54]) (using TLSv1) by
 na3sys009aob130.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUHjlvy0ZSeivLOg4g7dQpMH2viLVk0Ma@postini.com;
 Fri, 12 Oct 2012 20:53:37 PDT
Received: by mail-oa0-f54.google.com with SMTP id n9so3594397oag.41
 for <libssh2-devel@cool.haxx.se>; Fri, 12 Oct 2012 20:53:35 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=LzxHiQWIXk26yIUx6+waQyO0W3rYwxAlNZZ87k6jI18=;
 b=DtngjzSxg/nukzW7TYzuzt/gxExSWejOtAxA/5ZB8LlcG2AHWYXFlkZT9Ej6UlFg8v
 Kw+D9izzi1Ad/LhFkxSKshjR+vbk/BDM9RPBDXq0KYx0JABvQpA37nBJm87agP73+rAw
 4Ts1GccKPfZB3KDvfYUfevkG9D3Rg/IhkZn7wy8yelECIpiGLgH3LLKdFRbbf7i3jLig
 WejW5Dr49ECsjnCE6HBX5fxVKKApajhL+dKZDnKWJNsDVFIQToJCwef8bk+zE3HM/nmQ
 oMnYxnXynRXJxDe/Bbu8FoJA6jx6t/vZpSEa7kVYfXW+4pFdmwY0kfDszh6Tx4TtfPoP
 frSw==
MIME-Version: 1.0
Received: by 10.60.11.162 with SMTP id r2mr4880143oeb.114.1350100415420; Fri,
 12 Oct 2012 20:53:35 -0700 (PDT)
Received: by 10.76.139.196 with HTTP; Fri, 12 Oct 2012 20:53:35 -0700 (PDT)
In-Reply-To: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
Date: Fri, 12 Oct 2012 20:53:35 -0700
Message-ID: <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
Subject: select timeouts after libssh2_sftp_open_ex
From: Anton Obukhov <anton@ubnt.com>
To: libssh2-devel@cool.haxx.se
Content-Type: multipart/mixed; boundary=e89a8fb1f832ac17ea04cbe8bfd0
X-Gm-Message-State: ALoCoQnxS0hUoQUPzlmij4Uvhj0sbmF4c6COcXPxCqcQWg33ChnHwAyqnLBXeU3J924DTA+FX9SH
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--e89a8fb1f832ac17ea04cbe8bfd0
Content-Type: multipart/alternative; boundary=e89a8fb1f832ac17e604cbe8bfce

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

Hello,

I'm trying to implement SFTP streaming functionality, and came across this
issue. In the code attached, a random data is generated, and its portions
are uploaded to a remote machine to /tmp/test using SFTP. Then, this file
is repeatedly downloaded back to the host.

The code uses non-blocking API. For file sizes between 1000 and 20000 bytes
it works great. However, when data size is 30000 bytes, the upload happens
successfully, but the following download results in a timeout in select
after the call to libssh2_sftp_open_ex returns LIBSSH2_ERROR_EAGAIN.

Here is the relevant piece of trace (full trace is attached to this email
along with main.cpp, which can be compiled easily). I tried to strip the
code as much as possible to make it self-contained, but please let me know
if any additional information is required. Thanks in advance!

5ff0: 6D 59 0F 67 AD CD 1C 23 A8 7E 19 F4 19 30 51 A6 : mY.g...#.~...0Q.
6000: 3C 10 BC B7 : <...
>>>>> End libssh2_sftp_write res=0
>>>>> Begin libssh2_sftp_open_ex
[libssh2] 0.800717 SFTP: Sending file open request
[libssh2] 0.800717 Conn: Writing 34 bytes on channel 0/0, stream #0
[libssh2] 0.802717 Conn: Writing 34 bytes on channel 0/0, stream #0
[libssh2] 0.802717 Socket: Recved 52/16384 bytes to 02e38fd4+0
=> libssh2_transport_read() raw (52 bytes)
0000: 69 F3 B6 5E 2E 43 6F 2B 1E FC EA 36 E9 40 6D A3 : i..^.Co+...6.@m.
0010: 80 7F E3 69 90 E1 A0 60 9A 01 ED 2E 67 8D D3 97 : ...i...`....g...
0020: DD 08 AB 06 1C 24 E7 E0 2F 8B 57 B4 09 15 22 AB : .....$../.W...".
0030: 7D 8E A9 E2 : }...
=> libssh2_transport_read() plain (9 bytes)
0000: 5D 00 00 00 00 00 00 60 00 : ]......`.
[libssh2] 0.802717 Transport: Packet type 93 received, length=9
[libssh2] 0.802717 Conn: Window adjust for channel 0/0, adding 24576 bytes,
new window_size=24576
[libssh2] 0.802717 Conn: Sending 34 bytes on channel 0/0, stream_id=0
=> libssh2_transport_write plain (9 bytes)
0000: 5E 00 00 00 00 00 00 00 22 : ^......."
=> libssh2_transport_write plain2 (34 bytes)
0000: 00 00 00 1E 03 00 00 00 02 00 00 00 09 2F 74 6D : ............./tm
0010: 70 2F 74 65 73 74 00 00 00 01 00 00 00 04 00 00 : p/test..........
0020: 81 B6 : ..
[libssh2] 0.802717 Socket: Sent 84/84 bytes at 02e3cffc
=> libssh2_transport_write send() (84 bytes)
0000: 46 99 5C 82 A2 14 F9 68 9E EC C3 A3 C8 5A 8C A6 : F.\....h.....Z..
0010: 6B 98 86 79 99 74 00 CA 30 65 CC 1B 76 1C D2 5A : k..y.t..0e..v..Z
0020: DE A1 0F AC EE 8E D7 9A EA A5 75 D6 E5 81 3A 74 : ..........u...:t
0030: C2 1A 98 55 91 92 F2 68 A0 58 60 49 C6 09 1F 96 : ...U...h.X`I....
0040: B6 2F 2E 56 95 D2 A8 6E 85 26 E5 10 DF FD D1 EC : ./.V...n.&......
0050: DF 06 E7 3C : ...<
[libssh2] 0.802717 SFTP: recv packet
### Error: select timeout
file=main.cpp
line=241
>>>>> Begin libssh2_sftp_close_handle
[libssh2] 5.809003 SFTP: Closing handle

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

Hello,<br><div class=3D"gmail_quote"><div><br></div><div>I&#39;m trying to =
implement SFTP streaming functionality, and came across this issue. In the =
code attached, a random data is generated, and its portions are uploaded to=
 a remote machine to /tmp/test using SFTP. Then, this file is repeatedly do=
wnloaded back to the host.</div>

<div><br></div><div>The code uses non-blocking API. For file sizes between =
1000 and 20000 bytes it works great. However, when data size is 30000 bytes=
, the upload happens successfully, but the following download results in a =
timeout in select after the call to libssh2_sftp_open_ex returns LIBSSH2_ER=
ROR_EAGAIN.</div>

<div><br></div><div>Here is the relevant piece of trace (full trace is atta=
ched to this email along with main.cpp, which can be compiled easily). I tr=
ied to strip the code as much as possible to make it self-contained, but pl=
ease let me know if any additional information is required. Thanks in advan=
ce!</div>

<div><br></div><div>5ff0: 6D 59 0F 67 AD CD 1C 23  A8 7E 19 F4 19 30 51 A6 =
: mY.g...#.~...0Q.<br>6000: 3C 10 BC B7                                    =
  : &lt;...<br>&gt;&gt;&gt;&gt;&gt; End libssh2_sftp_write res=3D0<br>&gt;&=
gt;&gt;&gt;&gt; Begin libssh2_sftp_open_ex<br>

[libssh2] 0.800717 SFTP: Sending file open request<br>[libssh2] 0.800717 Co=
nn: Writing 34 bytes on channel 0/0, stream #0<br>[libssh2] 0.802717 Conn: =
Writing 34 bytes on channel 0/0, stream #0<br>[libssh2] 0.802717 Socket: Re=
cved 52/16384 bytes to 02e38fd4+0<br>

=3D&gt; libssh2_transport_read() raw (52 bytes)<br>0000: 69 F3 B6 5E 2E 43 =
6F 2B  1E FC EA 36 E9 40 6D A3 : i..^.Co+...6.@m.<br>0010: 80 7F E3 69 90 E=
1 A0 60  9A 01 ED 2E 67 8D D3 97 : ...i...`....g...<br>0020: DD 08 AB 06 1C=
 24 E7 E0  2F 8B 57 B4 09 15 22 AB : .....$../.W...&quot;.<br>

0030: 7D 8E A9 E2                                      : }...<br>=3D&gt; li=
bssh2_transport_read() plain (9 bytes)<br>0000: 5D 00 00 00 00 00 00 60  00=
                      : ]......`.<br>[libssh2] 0.802717 Transport: Packet t=
ype 93 received, length=3D9<br>

[libssh2] 0.802717 Conn: Window adjust for channel 0/0, adding 24576 bytes,=
 new window_size=3D24576<br>[libssh2] 0.802717 Conn: Sending 34 bytes on ch=
annel 0/0, stream_id=3D0<br>=3D&gt; libssh2_transport_write plain (9 bytes)=
<br>

0000: 5E 00 00 00 00 00 00 00  22                      : ^.......&quot;<br>=
=3D&gt; libssh2_transport_write plain2 (34 bytes)<br>0000: 00 00 00 1E 03 0=
0 00 00  02 00 00 00 09 2F 74 6D : ............./tm<br>0010: 70 2F 74 65 73=
 74 00 00  00 01 00 00 00 04 00 00 : p/test..........<br>

0020: 81 B6                                            : ..<br>[libssh2] 0.=
802717 Socket: Sent 84/84 bytes at 02e3cffc<br>=3D&gt; libssh2_transport_wr=
ite send() (84 bytes)<br>0000: 46 99 5C 82 A2 14 F9 68  9E EC C3 A3 C8 5A 8=
C A6 : F.\....h.....Z..<br>

0010: 6B 98 <a href=3D"tel:86%2079%2099%2074%2000" value=3D"+18679997400" t=
arget=3D"_blank">86 79 99 74 00</a> CA  30 65 CC 1B 76 1C D2 5A : k..y.t..0=
e..v..Z<br>0020: DE A1 0F AC EE 8E D7 9A  EA A5 75 D6 E5 81 3A 74 : .......=
...u...:t<br>
0030: C2 1A 98 55 91 92 F2 68  A0 58 60 49 C6 09 1F 96 : ...U...h.X`I....<b=
r>
0040: B6 2F 2E 56 95 D2 A8 6E  85 26 E5 10 DF FD D1 EC : ./.V...n.&amp;....=
..<br>0050: DF 06 E7 3C                                      : ...&lt;<br>[=
libssh2] 0.802717 SFTP: recv packet<br>### Error: select timeout<br>    fil=
e=3Dmain.cpp<br>

    line=3D241<br></div><div>&gt;&gt;&gt;&gt;&gt; Begin libssh2_sftp_close_=
handle<br>[libssh2] 5.809003 SFTP: Closing handle<br></div>
</div><br>

--e89a8fb1f832ac17e604cbe8bfce--
--e89a8fb1f832ac17ea04cbe8bfd0
Content-Type: text/x-c++src; charset=US-ASCII; name="main.cpp"
Content-Disposition: attachment; filename="main.cpp"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_h886iaw22

I2lmZGVmIF9XSU4zMg0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZWxzZQ0KI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8c3lzL3NlbGVj
dC5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGFycGEvaW5ldC5oPg0KI2VuZGlm
DQoNCiNpbmNsdWRlIDxzeXMvdGltZS5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1
ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp
bmNsdWRlIDxjdHlwZS5oPg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KDQojaW5jbHVkZSA8aW9tYW5p
cD4NCiNpbmNsdWRlIDxpb3N0cmVhbT4NCiNpbmNsdWRlIDxzc3RyZWFtPg0KI2luY2x1ZGUgPGZz
dHJlYW0+DQojaW5jbHVkZSA8dmVjdG9yPg0KDQojaW5jbHVkZSA8bGlic3NoMi5oPg0KI2luY2x1
ZGUgPGxpYnNzaDJfc2Z0cC5oPg0KDQoNCmNvbnN0IGludCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMg
PSA1MDAwOw0KY29uc3QgY2hhciAqaG9zdG5hbWUgPSAiMTkyLjE2OC4xLjIwIjsNCmNvbnN0IGNo
YXIgKnVzZXJuYW1lID0gInVibnQiOw0KY29uc3QgY2hhciAqcGFzc3dvcmQgPSAidWJudCI7DQoN
Cg0KYm9vbCBiRmlyc3RUaW1lID0gdHJ1ZTsNCnN0ZDo6b2ZzdHJlYW0gc3NoTG9nRmlsZTsNCnZv
aWQgbGlic3NoMl90cmFjZV9oYW5kbGVyX2NiKExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbiwgdm9p
ZCAqb3BhcXVlLCBjb25zdCBjaGFyICptc2csIHNpemVfdCBtc2dTeikNCnsNCiAgICBpZiAoYkZp
cnN0VGltZSkNCiAgICB7DQogICAgICAgIHNzaExvZ0ZpbGUub3Blbigic3NoLmxvZyIpOw0KICAg
ICAgICBiRmlyc3RUaW1lID0gZmFsc2U7DQogICAgfQ0KICAgIHNzaExvZ0ZpbGUgPDwgbXNnIDw8
IHN0ZDo6ZW5kbDsNCn0NCg0KDQp2b2lkIG5jdkRlYnVnT3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5n
ICZtc2cpDQp7DQogICAgaWYgKGJGaXJzdFRpbWUpDQogICAgew0KICAgICAgICBzc2hMb2dGaWxl
Lm9wZW4oInNzaC5sb2ciKTsNCiAgICAgICAgYkZpcnN0VGltZSA9IGZhbHNlOw0KICAgIH0NCiAg
ICBzc2hMb2dGaWxlIDw8IG1zZzsNCiAgICBzdGQ6OmNvdXQgPDwgbXNnOw0KfQ0KDQoNCiNkZWZp
bmUgbmN2UHJpbnQobXNnKSBcDQogICAgZG8gXA0KICAgIHsgXA0KICAgICAgICBzdGQ6Om9zdHJp
bmdzdHJlYW0gb3NzOyBcDQogICAgICAgIG9zcyA8PCBtc2cgPDwgc3RkOjplbmRsOyBcDQogICAg
ICAgIG5jdkRlYnVnT3V0cHV0KG9zcy5zdHIoKSk7IFwNCiAgICB9IHdoaWxlICgwKQ0KDQoNCiNk
ZWZpbmUgbmN2QXNzZXJ0UHJpbnQocHJlZCwgbXNnLCBpc1dhcm5pbmcpIFwNCiAgICBkbyBcDQog
ICAgeyBcDQogICAgICAgIGlmICghKHByZWQpKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAg
c3RkOjpvc3RyaW5nc3RyZWFtIG9zczsgXA0KICAgICAgICAgICAgb3NzIDw8ICIjIyMgIiA8PCAo
aXNXYXJuaW5nID8gIldhcm5pbmc6ICIgOiAiRXJyb3I6ICIpIDw8IG1zZyA8PCBcDQogICAgICAg
ICAgICAgICAgICAgIlxuICAgIGZpbGU9IiA8PCBfX0ZJTEVfXyA8PCBcDQogICAgICAgICAgICAg
ICAgICAgIlxuICAgIGxpbmU9IiA8PCBfX0xJTkVfXyA8PCBcDQogICAgICAgICAgICAgICAgICAg
c3RkOjplbmRsOyBcDQogICAgICAgICAgICBuY3ZEZWJ1Z091dHB1dChvc3Muc3RyKCkpOyBcDQog
ICAgICAgIH0gXA0KICAgIH0gd2hpbGUgKDApDQoNCg0KI2RlZmluZSBuY3ZBc3NlcnRSZXR1cm4o
cHJlZCwgbXNnLCByZXRDb2RlKSBcDQogICAgZG8gXA0KICAgIHsgXA0KICAgICAgICBib29sIF9w
cmVkID0gKHByZWQpOyBcDQogICAgICAgIG5jdkFzc2VydFByaW50KF9wcmVkLCBtc2csIGZhbHNl
KTsgXA0KICAgICAgICBpZiAoIV9wcmVkKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgcmV0
dXJuIHJldENvZGU7IFwNCiAgICAgICAgfSBcDQogICAgfSB3aGlsZSAoMCkNCg0KDQpjbGFzcyBB
dXRvV3NhSW5pdA0Kew0KcHVibGljOg0KICAgIEF1dG9Xc2FJbml0KGJvb2wgJmJJbml0KQ0KICAg
IHsNCiNpZmRlZiBfV0lOMzINCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAg
YkluaXQgPSBmYWxzZTsNCiAgICAgICAgV1NBREFUQSB3c2FEYXRhOw0KICAgICAgICBpbnQgcmVz
ID0gV1NBU3RhcnR1cChNQUtFV09SRCgxLCAxKSwgJndzYURhdGEpOw0KICAgICAgICBuY3ZBc3Nl
cnRSZXR1cm4ocmVzID09IDAsICJXU0FTdGFydHVwIGZhaWxlZCIsICk7DQogICAgICAgIHRoaXMt
PmJJbml0ID0gdHJ1ZTsNCiNlbmRpZg0KICAgICAgICBiSW5pdCA9IHRydWU7DQogICAgfQ0KDQog
ICAgfkF1dG9Xc2FJbml0KCkNCiAgICB7DQojaWZkZWYgX1dJTjMyDQogICAgICAgIGlmICh0aGlz
LT5iSW5pdCkNCiAgICAgICAgew0KICAgICAgICAgICAgV1NBQ2xlYW51cCgpOw0KICAgICAgICB9
DQojZW5kaWYNCiAgICB9DQoNCnByaXZhdGU6DQogICAgYm9vbCBiSW5pdDsNCn07DQoNCg0KY2xh
c3MgQXV0b0xpYnNzaDJJbml0DQp7DQpwdWJsaWM6DQogICAgQXV0b0xpYnNzaDJJbml0KGJvb2wg
JmJJbml0KQ0KICAgIHsNCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAgYklu
aXQgPSBmYWxzZTsNCg0KICAgICAgICBpbnQgcmVzID0gbGlic3NoMl9pbml0KDApOw0KICAgICAg
ICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJMaWJTU0gyIGluaXRpYWxpemF0aW9uIGZhaWx1
cmUsIHJlcz0iIDw8IHJlcywgKTsNCg0KICAgICAgICB0aGlzLT5iSW5pdCA9IHRydWU7DQogICAg
ICAgIGJJbml0ID0gdHJ1ZTsNCiAgICB9DQoNCiAgICB+QXV0b0xpYnNzaDJJbml0KCkNCiAgICB7
DQogICAgICAgIGlmICh0aGlzLT5iSW5pdCkNCiAgICAgICAgew0KICAgICAgICAgICAgbGlic3No
Ml9leGl0KCk7DQogICAgICAgIH0NCiAgICB9DQpwcml2YXRlOg0KICAgIGJvb2wgYkluaXQ7DQp9
Ow0KDQoNCmNsYXNzIEF1dG9Tb2NrZXQNCnsNCnB1YmxpYzoNCiAgICBBdXRvU29ja2V0KGNvbnN0
IHN0ZDo6c3RyaW5nICZpcEFkZHIsIHVuc2lnbmVkIGlwUG9ydCwgbGlic3NoMl9zb2NrZXRfdCAm
c29jaywgYm9vbCAmYkluaXQpDQogICAgew0KICAgICAgICBpbnQgcmVzOw0KICAgICAgICB0aGlz
LT5iSW5pdCA9IGZhbHNlOw0KICAgICAgICBiSW5pdCA9IGZhbHNlOw0KDQogICAgICAgIHRoaXMt
PnNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KICAgICAgICBuY3ZBc3Nl
cnRSZXR1cm4odGhpcy0+c29jayAhPSAwLCAiU29ja2V0IGNyZWF0ZSBmYWlsdXJlIiwgKTsNCg0K
ICAgICAgICB1bnNpZ25lZCBob3N0YWRkciA9IGluZXRfYWRkcihpcEFkZHIuY19zdHIoKSk7DQoN
CiAgICAgICAgc29ja2FkZHJfaW4gc29ja0FkZHJJbjsNCiAgICAgICAgc29ja0FkZHJJbi5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsNCiAgICAgICAgc29ja0FkZHJJbi5zaW5fcG9ydCA9IGh0b25zKGlw
UG9ydCk7DQogICAgICAgIHNvY2tBZGRySW4uc2luX2FkZHIuc19hZGRyID0gaG9zdGFkZHI7DQog
ICAgICAgIHJlcyA9IGNvbm5lY3QodGhpcy0+c29jaywgKHNvY2thZGRyKikoJnNvY2tBZGRySW4p
LCBzaXplb2Yoc29ja2FkZHJfaW4pKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAw
LCAiU29ja2V0IGNvbm5lY3QgZmFpbHVyZSwgcmVzPSIgPDwgcmVzLCApOw0KDQogICAgICAgIHNv
Y2sgPSB0aGlzLT5zb2NrOw0KICAgICAgICB0aGlzLT5iSW5pdCA9IHRydWU7DQogICAgICAgIGJJ
bml0ID0gdHJ1ZTsNCiAgICB9DQoNCiAgICB+QXV0b1NvY2tldCgpDQogICAgew0KICAgICAgICBp
ZiAodGhpcy0+YkluaXQpDQogICAgICAgIHsNCiNpZmRlZiBXSU4zMg0KICAgICAgICAgICAgY2xv
c2Vzb2NrZXQoc29jayk7DQojZWxzZQ0KICAgICAgICAgICAgY2xvc2Uoc29jayk7DQojZW5kaWYN
CiAgICAgICAgfQ0KICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAgIGxpYnNz
aDJfc29ja2V0X3Qgc29jazsNCn07DQoNCg0Kc3RydWN0IExpYlNzaDJTZXNzaW9uV3JhcA0Kew0K
ICAgIExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbjsNCiAgICBsaWJzc2gyX3NvY2tldF90IHNvY2s7
DQp9Ow0KDQoNCnN0YXRpYyBpbnQgdGltZWRXYWl0U2Vzc2lvblNvY2tldChMSUJTU0gyX1NFU1NJ
T04gKnNlc3Npb24sIGxpYnNzaDJfc29ja2V0X3Qgc29jaywgaW50IHRpbWVvdXRNcykNCnsNCiAg
ICBmZF9zZXQgZmQ7DQogICAgRkRfWkVSTygmZmQpOw0KICAgIEZEX1NFVChzb2NrLCAmZmQpOw0K
DQogICAgaW50IGRpciA9IGxpYnNzaDJfc2Vzc2lvbl9ibG9ja19kaXJlY3Rpb25zKHNlc3Npb24p
Ow0KDQogICAgZmRfc2V0ICpyZWFkZmQgPSBOVUxMOw0KICAgIGlmIChkaXIgJiBMSUJTU0gyX1NF
U1NJT05fQkxPQ0tfSU5CT1VORCkNCiAgICB7DQogICAgICAgIHJlYWRmZCA9ICZmZDsNCiAgICB9
DQoNCiAgICBmZF9zZXQgKndyaXRlZmQgPSBOVUxMOw0KICAgIGlmIChkaXIgJiBMSUJTU0gyX1NF
U1NJT05fQkxPQ0tfT1VUQk9VTkQpDQogICAgew0KICAgICAgICB3cml0ZWZkID0gJmZkOw0KICAg
IH0NCg0KICAgIHRpbWV2YWwgdGltZW91dDsNCiAgICB0aW1lb3V0LnR2X3NlYyA9IHRpbWVvdXRN
cyAvIDEwMDA7DQogICAgdGltZW91dC50dl91c2VjID0gKHRpbWVvdXRNcyAlIDEwMDApICogMTAw
MDsNCiAgICBpbnQgcmVzID0gc2VsZWN0KHNvY2srMSwgcmVhZGZkLCB3cml0ZWZkLCBOVUxMLCAm
dGltZW91dCk7DQogICAgaWYgKHJlcyA9PSAwKQ0KICAgIHsNCiAgICAgICAgbmN2QXNzZXJ0UmV0
dXJuKGZhbHNlLCAic2VsZWN0IHRpbWVvdXQiLCBMSUJTU0gyX0VSUk9SX0VBR0FJTik7DQogICAg
fQ0KICAgIGVsc2UgaWYgKHJlcyA8IDApDQogICAgew0KICAgICAgICBuY3ZBc3NlcnRSZXR1cm4o
ZmFsc2UsICJzZWxlY3QgZXJyb3I9IiA8PCByZXMsIC0xKTsNCiAgICB9DQogICAgcmV0dXJuIDA7
DQp9DQoNCg0KI2RlZmluZSBMSUJTU0gyX1RJTUVEX1BSRUZJWChsaWJzc2gyX2Z1bmNfbmFtZSkg
XA0KICAgIG5jdlByaW50KCI+Pj4+PiBCZWdpbiAiIGxpYnNzaDJfZnVuY19uYW1lKTsgXA0KICAg
IGludCByZXM7IFwNCiAgICB3aGlsZSAoMSkgXA0KICAgIHsNCg0KI2RlZmluZSBMSUJTU0gyX1RJ
TUVEX1NVRkZJWF9JTlQobGlic3NoMl9mdW5jX25hbWUsIEJXQUlUU09DS0VULCBTRVNTSU9OLCBT
T0NLLCBTRlRQKSBcDQogICAgICAgIGlmIChyZXMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIFwN
CiAgICAgICAgeyBcDQogICAgICAgICAgICBpZiAoU0ZUUCAhPSBOVUxMICYmIHJlcyA9PSBMSUJT
U0gyX0VSUk9SX1NGVFBfUFJPVE9DT0wpIFwNCiAgICAgICAgICAgIHsgXA0KICAgICAgICAgICAg
ICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKFNGVFApOyBcDQogICAgICAgICAgICB9
IFwNCiAgICAgICAgICAgIG5jdlByaW50KCI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSAi
cmVzPSIgPDwgcmVzKTsgXA0KICAgICAgICAgICAgcmV0dXJuIHJlczsgXA0KICAgICAgICB9IFwN
CiAgICAgICAgaWYgKEJXQUlUU09DS0VUKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgcmVz
ID0gdGltZWRXYWl0U2Vzc2lvblNvY2tldChTRVNTSU9OLCBTT0NLLCB0aW1lb3V0TXMpOyBcDQog
ICAgICAgICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICI+Pj4+PiBFbmQgIiBsaWJzc2gy
X2Z1bmNfbmFtZSAiOiB0aW1lZFdhaXRTZXNzaW9uU29ja2V0IGZhaWx1cmUsIHJlcz0iIDw8IHJl
cywgcmVzKTsgXA0KICAgICAgICB9IFwNCiAgICB9DQoNCiNkZWZpbmUgTElCU1NIMl9USU1FRF9T
VUZGSVhfQ0hBTk5FTChsaWJzc2gyX2Z1bmNfbmFtZSwgY2huYW1lLCBTRVNTSU9OLCBTT0NLLCBT
RlRQKSBcDQogICAgICAgIGlmIChjaG5hbWUgIT0gTlVMTCkgXA0KICAgICAgICB7IFwNCiAgICAg
ICAgICAgIG5jdlByaW50KCI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSk7IFwNCiAgICAg
ICAgICAgIHJldHVybiAwOyBcDQogICAgICAgIH0gXA0KICAgICAgICByZXMgPSBsaWJzc2gyX3Nl
c3Npb25fbGFzdF9lcnJubyhTRVNTSU9OKTsgXA0KICAgICAgICBpZiAocmVzICE9IExJQlNTSDJf
RVJST1JfRUFHQUlOKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgaWYgKFNGVFAgIT0gTlVM
TCAmJiByZXMgPT0gTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MKSBcDQogICAgICAgICAgICB7
IFwNCiAgICAgICAgICAgICAgICByZXMgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihTRlRQKTsg
XA0KICAgICAgICAgICAgfSBcDQogICAgICAgICAgICBuY3ZQcmludCgiPj4+Pj4gRW5kICIgbGli
c3NoMl9mdW5jX25hbWUgInJlcz0iIDw8IHJlcyk7IFwNCiAgICAgICAgICAgIHJldHVybiByZXM7
IFwNCiAgICAgICAgfSBcDQogICAgICAgIHJlcyA9IHRpbWVkV2FpdFNlc3Npb25Tb2NrZXQoU0VT
U0lPTiwgU09DSywgdGltZW91dE1zKTsgXA0KICAgICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09
IDAsICI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSAiOiB0aW1lZFdhaXRTZXNzaW9uU29j
a2V0IGZhaWx1cmUsIHJlcz0iIDw8IHJlcywgcmVzKTsgXA0KICAgIH0NCg0KDQpzdGF0aWMgaW50
IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UoTElCU1NIMl9TRVNTSU9OICpzZXNzaW9u
LCBsaWJzc2gyX3NvY2tldF90IHNvY2ssIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9U
SU1FRF9QUkVGSVgoImxpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UiKTsNCiAgICByZXMgPSBsaWJz
c2gyX3Nlc3Npb25faGFuZHNoYWtlKHNlc3Npb24sIHNvY2spOw0KICAgIExJQlNTSDJfVElNRURf
U1VGRklYX0lOVCgibGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSIsIDAsIE5VTEwsIDAsIE5VTEwp
DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChMSUJT
U0gyX1NFU1NJT04gKnNlc3Npb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIExJQlNTSDJfVElN
RURfUFJFRklYKCJsaWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdCIpOw0KICAgIHJlcyA9IGxpYnNz
aDJfc2Vzc2lvbl9kaXNjb25uZWN0KHNlc3Npb24sIGRlc2NyaXB0aW9uKTsNCiAgICBMSUJTU0gy
X1RJTUVEX1NVRkZJWF9JTlQoImxpYnNzaDJfc2Vzc2lvbl9kaXNjb25uZWN0IiwgMCwgTlVMTCwg
MCwgTlVMTCkNCn0NCg0KDQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9mcmVlKExJ
QlNTSDJfU0VTU0lPTiAqc2Vzc2lvbiwgaW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJ
TUVEX1BSRUZJWCgibGlic3NoMl9zZXNzaW9uX2ZyZWUiKTsNCiAgICByZXMgPSBsaWJzc2gyX3Nl
c3Npb25fZnJlZShzZXNzaW9uKTsNCiAgICBMSUJTU0gyX1RJTUVEX1NVRkZJWF9JTlQoImxpYnNz
aDJfc2Vzc2lvbl9mcmVlIiwgMCwgTlVMTCwgMCwgTlVMTCkNCn0NCg0KDQpzdGF0aWMgaW50IHRp
bWVkX2xpYnNzaDJfdXNlcmF1dGhfcGFzc3dvcmQoTElCU1NIMl9TRVNTSU9OICpzZXNzaW9uLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVz
ZXJuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnBhc3N3b3JkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9QUkVGSVgoImxpYnNzaDJf
dXNlcmF1dGhfcGFzc3dvcmQiKTsNCiAgICByZXMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3Jk
KHNlc3Npb24sIHVzZXJuYW1lLCBwYXNzd29yZCk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhf
SU5UKCJsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkIiwgMCwgTlVMTCwgMCwgTlVMTCkNCn0NCg0K
DQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Z0cF9pbml0KGNvbnN0IExpYlNzaDJTZXNzaW9u
V3JhcCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NI
Ml9TRlRQICogJiBzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJTUVEX1BSRUZJWCgibGlic3NoMl9z
ZnRwX2luaXQiKTsNCiAgICBzZnRwQ2hhbm5lbCA9IGxpYnNzaDJfc2Z0cF9pbml0KHNlc3Npb24u
c2Vzc2lvbik7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfQ0hBTk5FTCgibGlic3NoMl9zZnRw
X2luaXQiLCBzZnRwQ2hhbm5lbCwgc2Vzc2lvbi5zZXNzaW9uLCBzZXNzaW9uLnNvY2ssIE5VTEwp
DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfc2h1dGRvd24oY29uc3QgTGli
U3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9Q
UkVGSVgoImxpYnNzaDJfc2Z0cF9zaHV0ZG93biIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9z
aHV0ZG93bihzZnRwQ2hhbm5lbCk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJz
c2gyX3NmdHBfc2h1dGRvd24iLCAxLCBzZXNzaW9uLnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0
cENoYW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfb3Blbl9leDIo
Y29uc3QgTGliU3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtb2RlLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqICYgc2Z0
cEhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1l
b3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9QUkVGSVgoImxpYnNzaDJfc2Z0cF9vcGVuX2V4
Iik7DQogICAgc2Z0cEhhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNmdHBDaGFubmVsLCBm
aWxlbmFtZSwgc3RybGVuKGZpbGVuYW1lKSwgZmxhZ3MsIG1vZGUsIExJQlNTSDJfU0ZUUF9PUEVO
RklMRSk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfQ0hBTk5FTCgibGlic3NoMl9zZnRwX29w
ZW5fZXgiLCBzZnRwSGFuZGxlLCBzZXNzaW9uLnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0cENo
YW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfY2xvc2VfaGFuZGxl
KGNvbnN0IExpYlNzaDJTZXNzaW9uV3JhcCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUg
KnNmdHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJTUVEX1BSRUZJWCgibGlic3NoMl9zZnRw
X2Nsb3NlX2hhbmRsZSIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9jbG9zZV9oYW5kbGUoc2Z0
cEhhbmRsZSk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJzc2gyX3NmdHBfY2xv
c2VfaGFuZGxlIiwgMSwgc2Vzc2lvbi5zZXNzaW9uLCBzZXNzaW9uLnNvY2ssIHNmdHBDaGFubmVs
KQ0KfQ0KDQoNCnN0YXRpYyBpbnQgdGltZWRfbGlic3NoMl9zZnRwX3JlYWQoY29uc3QgTGliU3No
MlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICpzZnRwSGFuZGxlLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBidWZmZXJfbWF4bGVuLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIExJQlNTSDJfVElNRURfUFJFRklY
KCJsaWJzc2gyX3NmdHBfcmVhZCIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9yZWFkKHNmdHBI
YW5kbGUsIGJ1ZmZlciwgYnVmZmVyX21heGxlbik7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhf
SU5UKCJsaWJzc2gyX3NmdHBfcmVhZCIsIDEsIHNlc3Npb24uc2Vzc2lvbiwgc2Vzc2lvbi5zb2Nr
LCBzZnRwQ2hhbm5lbCkNCn0NCg0KDQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Z0cF9yZWFk
X2FsbChjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Npb24sDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0
cEhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVj
dG9yPHVuc2lnbmVkIGNoYXI+ICZidWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3pNYXgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIGludCByZXM7DQogICAgYnVmLnJlc2l6ZSgwKTsNCiAg
ICBjaGFyIGJ1ZmZlclsweDQwMDBdOw0KICAgIGludCBzekxlZnQgPSAoc3pNYXggPiAwID8gc3pN
YXggOiBJTlRfTUFYKTsNCg0KICAgIGRvDQogICAgew0KICAgICAgICByZXMgPSB0aW1lZF9saWJz
c2gyX3NmdHBfcmVhZChzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgYnVmZmVyLCBz
dGQ6Om1pbjxpbnQ+KHN6TGVmdCwgc2l6ZW9mKGJ1ZmZlcikpLCB0aW1lb3V0TXMpOw0KICAgICAg
ICBuY3ZBc3NlcnRSZXR1cm4ocmVzID49IDAsICJ0aW1lZF9saWJzc2gyX2NoYW5uZWxfcmVhZF9l
eCBmYWlsdXJlLCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBpZiAocmVzID4gMCkNCiAg
ICAgICAgew0KICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IGJ1Zi5zaXplKCk7DQogICAg
ICAgICAgICBidWYucmVzaXplKG9sZFNpemUgKyByZXMpOw0KICAgICAgICAgICAgbWVtY3B5KCZi
dWZbMF0gKyBvbGRTaXplLCBidWZmZXIsIHJlcyk7DQogICAgICAgICAgICBpZiAoc3pNYXggPiAw
ICYmIChpbnQpYnVmLnNpemUoKSA+PSBzek1heCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKHJl
cyA+IDApOw0KDQogICAgcmV0dXJuIDA7DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gy
X3NmdHBfd3JpdGUoY29uc3QgTGliU3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNm
dHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpidWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291
bnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0K
ew0KICAgIExJQlNTSDJfVElNRURfUFJFRklYKCJsaWJzc2gyX3NmdHBfd3JpdGUiKTsNCiAgICBy
ZXMgPSBsaWJzc2gyX3NmdHBfd3JpdGUoc2Z0cEhhbmRsZSwgYnVmZmVyLCBjb3VudCk7DQogICAg
TElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJzc2gyX3NmdHBfd3JpdGUiLCAxLCBzZXNzaW9u
LnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0cENoYW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0
aW1lZF9saWJzc2gyX3NmdHBfd3JpdGVfYWxsKGNvbnN0IExpYlNzaDJTZXNzaW9uV3JhcCAmc2Vz
c2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NG
VFAgKnNmdHBDaGFubmVsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gJmJ1ZiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0K
ew0KICAgIGludCByZXM7DQogICAgaW50IGJ1Zk9mZnMgPSAwOw0KICAgIGludCBidWZMZWZ0ID0g
KGludClidWYuc2l6ZSgpOw0KDQogICAgZG8NCiAgICB7DQogICAgICAgIHJlcyA9IHRpbWVkX2xp
YnNzaDJfc2Z0cF93cml0ZShzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgKGNvbnN0
IGNoYXIgKikmYnVmWzBdK2J1Zk9mZnMsIGJ1ZkxlZnQsIHRpbWVvdXRNcyk7DQogICAgICAgIG5j
dkFzc2VydFJldHVybihyZXMgPj0gMCwgInRpbWVkX2xpYnNzaDJfc2Z0cF93cml0ZSBmYWlsdXJl
LCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBpZiAocmVzID4gMCkNCiAgICAgICAgew0K
ICAgICAgICAgICAgYnVmT2ZmcyArPSByZXM7DQogICAgICAgICAgICBidWZMZWZ0IC09IHJlczsN
CiAgICAgICAgICAgIGlmIChidWZMZWZ0IDw9IDApDQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChy
ZXMgPiAwKTsNCg0KICAgIHJldHVybiAwOw0KfQ0KDQoNCmNsYXNzIEF1dG9Tc2hTZXNzaW9uDQp7
DQpwdWJsaWM6DQogICAgQXV0b1NzaFNlc3Npb24obGlic3NoMl9zb2NrZXRfdCBzb2NrLCBMSUJT
U0gyX1NFU1NJT04gKiAmIHNlc3Npb24sIGJvb2wgJmJJbml0KQ0KICAgIHsNCiAgICAgICAgaW50
IHJlczsNCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAgYkluaXQgPSBmYWxz
ZTsNCiAgICAgICAgc2Vzc2lvbiA9IE5VTEw7DQoNCiAgICAgICAgdGhpcy0+c2Vzc2lvbiA9IGxp
YnNzaDJfc2Vzc2lvbl9pbml0KCk7DQogICAgICAgIG5jdkFzc2VydFJldHVybih0aGlzLT5zZXNz
aW9uICE9IE5VTEwsICJsaWJzc2gyX3Nlc3Npb25faW5pdCBmYWlsdXJlIiwgKTsNCg0KICAgICAg
ICBsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHRoaXMtPnNlc3Npb24sIDApOw0KDQogICAg
ICAgIHJlcyA9IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UodGhpcy0+c2Vzc2lvbiwg
c29jaywgU1NIX0VBR0FJTl9USU1FT1VUX01TKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJl
cyA9PSAwLCAidGltZWRfbGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSBmYWlsdXJlLCByZXM9IiA8
PCByZXMsICk7DQoNCiAgICAgICAgdGhpcy0+YkluaXQgPSB0cnVlOw0KICAgICAgICBiSW5pdCA9
IHRydWU7DQogICAgICAgIHNlc3Npb24gPSB0aGlzLT5zZXNzaW9uOw0KDQogICAgICAgIGNvbnN0
IGNoYXIgKnNlc3Npb25Ib3N0a2V5SGFzaCA9IGxpYnNzaDJfaG9zdGtleV9oYXNoKHNlc3Npb24s
IExJQlNTSDJfSE9TVEtFWV9IQVNIX01ENSk7DQogICAgICAgIG5jdkFzc2VydFJldHVybihzZXNz
aW9uSG9zdGtleUhhc2ggIT0gTlVMTCwgImxpYnNzaDJfaG9zdGtleV9oYXNoIGZhaWx1cmUiLCAp
Ow0KICAgIH0NCg0KICAgIGludCBhdXRoZW50aWNhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnVzZXJu
YW1lLCBjb25zdCBzdGQ6OnN0cmluZyAmcGFzc3dvcmQpDQogICAgew0KICAgICAgICByZXR1cm4g
dGltZWRfbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZCh0aGlzLT5zZXNzaW9uLCB1c2VybmFtZS5j
X3N0cigpLCBwYXNzd29yZC5jX3N0cigpLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgIH0N
Cg0KICAgIH5BdXRvU3NoU2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAodGhpcy0+YkluaXQp
DQogICAgICAgIHsNCiAgICAgICAgICAgIGludCByZXM7DQogICAgICAgICAgICByZXMgPSB0aW1l
ZF9saWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChzZXNzaW9uLCAiYnllIiwgU1NIX0VBR0FJTl9U
SU1FT1VUX01TKTsNCiAgICAgICAgICAgIG5jdkFzc2VydFByaW50KHJlcyA9PSAwLCAidGltZWRf
bGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3QgZmFpbHVyZSwgcmVzPSIgPDwgcmVzLCBmYWxzZSk7
DQogICAgICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3Nlc3Npb25fZnJlZShzZXNzaW9uLCBT
U0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UHJpbnQocmVzID09
IDAsICJ0aW1lZF9saWJzc2gyX3Nlc3Npb25fZnJlZSBmYWlsdXJlLCByZXM9IiA8PCByZXMsIGZh
bHNlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAg
IExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbjsNCn07DQoNCg0KY2xhc3MgQXV0b1NmdHBDaGFubmVs
DQp7DQpwdWJsaWM6DQogICAgQXV0b1NmdHBDaGFubmVsKGNvbnN0IExpYlNzaDJTZXNzaW9uV3Jh
cCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICogJiBzZnRwQ2hh
bm5lbCwNCiAgICAgICAgICAgICAgICAgICAgaW50ICZyZXMpDQogICAgICA6IHNlc3Npb24oc2Vz
c2lvbikNCiAgICB7DQogICAgICAgIHRoaXMtPmJJbml0ID0gZmFsc2U7DQogICAgICAgIHNmdHBD
aGFubmVsID0gTlVMTDsNCiAgICAgICAgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX2luaXQoc2Vz
c2lvbiwgc2Z0cENoYW5uZWwsIFNTSF9FQUdBSU5fVElNRU9VVF9NUyk7DQogICAgICAgIG5jdkFz
c2VydFJldHVybihyZXMgPT0gMCwgInRpbWVkX2xpYnNzaDJfc2Z0cF9pbml0IGZhaWx1cmUsIHJl
cz0iIDw8IHJlcywgKTsNCiAgICAgICAgdGhpcy0+c2Z0cENoYW5uZWwgPSBzZnRwQ2hhbm5lbDsN
CiAgICAgICAgdGhpcy0+YkluaXQgPSB0cnVlOw0KICAgIH0NCg0KICAgIH5BdXRvU2Z0cENoYW5u
ZWwoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMtPmJJbml0KQ0KICAgICAgICB7DQogICAgICAg
ICAgICBpbnQgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX3NodXRkb3duKHNlc3Npb24sIHNmdHBD
aGFubmVsLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UHJp
bnQocmVzID09IDAsICJ0aW1lZF9saWJzc2gyX3NmdHBfc2h1dGRvd24gZmFpbHVyZSwgcmVzPSIg
PDwgcmVzLCBmYWxzZSk7DQogICAgICAgIH0NCiAgICB9DQoNCnByaXZhdGU6DQogICAgYm9vbCBi
SW5pdDsNCiAgICBjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Npb247DQogICAgTElCU1NI
Ml9TRlRQICpzZnRwQ2hhbm5lbDsNCn07DQoNCg0KY2xhc3MgQXV0b1NmdHBIYW5kbGUNCnsNCnB1
YmxpYzoNCiAgICBBdXRvU2Z0cEhhbmRsZShjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Np
b24sDQogICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmbGFncywNCiAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICog
JiBzZnRwSGFuZGxlLA0KICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0TXMsDQogICAgICAg
ICAgICAgICAgICAgaW50ICZyZXMpDQogICAgICA6IHNlc3Npb24oc2Vzc2lvbiksDQogICAgICAg
IHNmdHBDaGFubmVsKHNmdHBDaGFubmVsKSwNCiAgICAgICAgdGltZW91dE1zKHRpbWVvdXRNcykN
CiAgICB7DQogICAgICAgIHRoaXMtPmJJbml0ID0gZmFsc2U7DQogICAgICAgIHNmdHBIYW5kbGUg
PSBOVUxMOw0KICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfb3Blbl9leDIoc2Vzc2lv
biwgc2Z0cENoYW5uZWwsIGZpbGVuYW1lLCBmbGFncywgMDY2Niwgc2Z0cEhhbmRsZSwgdGltZW91
dE1zKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAidGltZWRfbGlic3NoMl9z
ZnRwX29wZW5fZXgyIGZhaWx1cmUsIHJlcz0iIDw8IHJlcywgKTsNCiAgICAgICAgdGhpcy0+c2Z0
cEhhbmRsZSA9IHNmdHBIYW5kbGU7DQogICAgICAgIHRoaXMtPmJJbml0ID0gdHJ1ZTsNCiAgICB9
DQoNCiAgICB+QXV0b1NmdHBIYW5kbGUoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMtPmJJbml0
KQ0KICAgICAgICB7DQogICAgICAgICAgICBpbnQgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX2Ns
b3NlX2hhbmRsZShzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgdGltZW91dE1zKTsN
CiAgICAgICAgICAgIG5jdkFzc2VydFByaW50KHJlcyA9PSAwLCAidGltZWRfbGlic3NoMl9zZnRw
X2Nsb3NlX2hhbmRsZSBmYWlsdXJlLCByZXM9IiA8PCByZXMsIGZhbHNlKTsNCiAgICAgICAgfQ0K
ICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAgIGNvbnN0IExpYlNzaDJTZXNz
aW9uV3JhcCAmc2Vzc2lvbjsNCiAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsOw0KICAgIGlu
dCB0aW1lb3V0TXM7DQogICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0cEhhbmRsZTsNCn07DQoN
Cg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCnsNCiAgICBpbnQgcmVzOw0KICAg
IGJvb2wgYkluaXQ7DQoNCiAgICBBdXRvV3NhSW5pdCB3c2FJbml0KGJJbml0KTsNCiAgICBuY3ZB
c3NlcnRSZXR1cm4oYkluaXQsICJBdXRvV3NhSW5pdCBjdG9yIGZhaWx1cmUiLCAtMSk7DQoNCiAg
ICBBdXRvTGlic3NoMkluaXQgbGlic3NoMkluaXQoYkluaXQpOw0KICAgIG5jdkFzc2VydFJldHVy
bihiSW5pdCwgIkF1dG9MaWJzc2gySW5pdCBjdG9yIGZhaWx1cmUiLCAtMSk7DQoNCiAgICBsaWJz
c2gyX3NvY2tldF90IHNvY2s7DQogICAgQXV0b1NvY2tldCBhU29ja2V0KGhvc3RuYW1lLCAyMiwg
c29jaywgYkluaXQpOw0KICAgIG5jdkFzc2VydFJldHVybihiSW5pdCwgIkF1dG9Tb2NrZXQgY3Rv
ciBmYWlsdXJlIiwgLTEpOw0KDQogICAgTElCU1NIMl9TRVNTSU9OICpzZXNzaW9uOw0KICAgIEF1
dG9Tc2hTZXNzaW9uIGFTc2hTZXNzaW9uKHNvY2ssIHNlc3Npb24sIGJJbml0KTsNCiAgICBuY3ZB
c3NlcnRSZXR1cm4oYkluaXQsICJBdXRvU3NoU2Vzc2lvbiBjdG9yIGZhaWx1cmUiLCAtMSk7DQoN
CiAgICByZXMgPSBhU3NoU2Vzc2lvbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkKTsN
CiAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJTU0ggYXV0aGVudGljYXRpb24gZmFpbHVy
ZSIsIC0xKTsNCg0KICAgIGxpYnNzaDJfdHJhY2Uoc2Vzc2lvbiwgfjApOw0KICAgIGxpYnNzaDJf
dHJhY2Vfc2V0aGFuZGxlcihzZXNzaW9uLCBOVUxMLCBsaWJzc2gyX3RyYWNlX2hhbmRsZXJfY2Ip
Ow0KDQogICAgTGliU3NoMlNlc3Npb25XcmFwIHNlc3Npb25XcmFwOw0KICAgIHNlc3Npb25XcmFw
LnNlc3Npb24gPSBzZXNzaW9uOw0KICAgIHNlc3Npb25XcmFwLnNvY2sgPSBzb2NrOw0KDQogICAg
c3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gbm9pc2UoMTAyNCoxMDI0LCAwKTsNCiAgICBmb3Ig
KGludCBpPTA7IGk8KGludClub2lzZS5zaXplKCk7IGkrKykNCiAgICB7DQogICAgICAgIG5vaXNl
W2ldID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqICgoZG91YmxlKXJhbmQoKSkgLyBSQU5EX01BWCk7
DQogICAgfQ0KDQogICAgLy8zMDAwMCBpcyB0aGUgZmlyc3QgcHJvYmxlbWF0aWMgc2l6ZQ0KICAg
IGludCBzeltdID0gey8qMTAwMCwgMjAwMCwgMzAwMCwgNDAwMCwgNTAwMCwgMTAwMDAsIDIwMDAw
LCAqLzMwMDAwLCA0MDAwMCwgNTAwMDAsIDgwMDAwLCAxMDAwMDAsIDIwMDAwMCwgNDAwMDAwLCA4
MDAwMDAsIDEwMDAwMDB9Ow0KDQogICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbDsNCiAgICBB
dXRvU2Z0cENoYW5uZWwgYVNmdHBDaGFubmVsKHNlc3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgcmVz
KTsNCiAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJBdXRvU2Z0cENoYW5uZWwgY3RvciBm
YWlsdXJlIiwgLTEpOw0KDQogICAgZm9yICh1bnNpZ25lZCBpPTA7IGk8c2l6ZW9mKHN6KS9zaXpl
b2YoaW50KTsgaSsrKQ0KICAgIHsNCiAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4g
c3ViTm9pc2UoJm5vaXNlWzBdLCAmbm9pc2VbMF0gKyBzeltpXSk7DQoNCiAgICAgICAgTElCU1NI
Ml9TRlRQX0hBTkRMRSAqc2Z0cEhhbmRsZVVwOw0KICAgICAgICBBdXRvU2Z0cEhhbmRsZSBhU2Z0
cEhhbmRsZVVwKHNlc3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgIi90bXAvdGVzdCIsIExJQlNTSDJf
RlhGX0NSRUFUfExJQlNTSDJfRlhGX1RSVU5DfExJQlNTSDJfRlhGX1dSSVRFLCBzZnRwSGFuZGxl
VXAsIFNTSF9FQUdBSU5fVElNRU9VVF9NUywgcmVzKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJu
KHJlcyA9PSAwLCAiQXV0b1NmdHBIYW5kbGUgY3RvciBmYWlsdXJlIiwgLTEpOw0KDQogICAgICAg
IHJlcyA9IHRpbWVkX2xpYnNzaDJfc2Z0cF93cml0ZV9hbGwoc2Vzc2lvbldyYXAsIHNmdHBDaGFu
bmVsLCBzZnRwSGFuZGxlVXAsIHN1Yk5vaXNlLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAg
ICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJ0aW1lZF9saWJzc2gyX3NmdHBfd3JpdGVf
YWxsLCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICpz
ZnRwSGFuZGxlRG93bjsNCiAgICAgICAgQXV0b1NmdHBIYW5kbGUgYVNmdHBIYW5kbGVEb3duKHNl
c3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgIi90bXAvdGVzdCIsIExJQlNTSDJfRlhGX1JFQUQsIHNm
dHBIYW5kbGVEb3duLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMsIHJlcyk7DQogICAgICAgIG5jdkFz
c2VydFJldHVybihyZXMgPT0gMCwgIkF1dG9TZnRwSGFuZGxlIGN0b3IgZmFpbHVyZSIsIC0xKTsN
Cg0KICAgICAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdWJOb2lzZVJlY3ZkOw0KICAg
ICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfcmVhZF9hbGwoc2Vzc2lvbldyYXAsIHNmdHBD
aGFubmVsLCBzZnRwSGFuZGxlRG93biwgc3ViTm9pc2VSZWN2ZCwgMCwgU1NIX0VBR0FJTl9USU1F
T1VUX01TKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAidGltZWRfbGlic3No
Ml9zZnRwX3dyaXRlX2FsbCwgcmVzPSIgPDwgcmVzLCAtMSk7DQoNCiAgICAgICAgbmN2QXNzZXJ0
UmV0dXJuKHN1Yk5vaXNlLnNpemUoKSA9PSBzdWJOb2lzZVJlY3ZkLnNpemUoKSwgIkRhdGEgdmFs
aWRhdGlvbiBmYWlsZWQiLCAtMSk7DQogICAgICAgIG5jdkFzc2VydFJldHVybigwID09IG1lbWNt
cCgmc3ViTm9pc2VbMF0sICZzdWJOb2lzZVJlY3ZkWzBdLCBzdWJOb2lzZVJlY3ZkLnNpemUoKSks
ICJEYXRhIHZhbGlkYXRpb24gZmFpbGVkIiwgLTEpOw0KDQogICAgICAgIGNvbnN0IGludCBudW1J
dGVyID0gNTAvKGkrMSk7DQogICAgICAgIGZvciAoaW50IGo9MDsgajxudW1JdGVyOyBqKyspDQog
ICAgICAgIHsNCiAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBIYW5kbGVEb3du
MjsNCiAgICAgICAgICAgIEF1dG9TZnRwSGFuZGxlIGFTZnRwSGFuZGxlRG93bihzZXNzaW9uV3Jh
cCwgc2Z0cENoYW5uZWwsICIvdG1wL3Rlc3QiLCBMSUJTU0gyX0ZYRl9SRUFELCBzZnRwSGFuZGxl
RG93bjIsIFNTSF9FQUdBSU5fVElNRU9VVF9NUywgcmVzKTsNCiAgICAgICAgICAgIG5jdkFzc2Vy
dFJldHVybihyZXMgPT0gMCwgIkF1dG9TZnRwSGFuZGxlIGN0b3IgZmFpbHVyZSIsIC0xKTsNCg0K
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gc3ViTm9pc2VSZWN2ZDI7DQog
ICAgICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfcmVhZF9hbGwoc2Vzc2lvbldyYXAs
IHNmdHBDaGFubmVsLCBzZnRwSGFuZGxlRG93bjIsIHN1Yk5vaXNlUmVjdmQyLCAwLCBTU0hfRUFH
QUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAi
dGltZWRfbGlic3NoMl9zZnRwX3dyaXRlX2FsbCwgcmVzPSIgPDwgcmVzLCAtMSk7DQogICAgICAg
IH0NCg0KICAgICAgICBuY3ZQcmludCgiU2VyaWVzIG9mICIgPDwgc3pbaV0gPDwgIiBieXRlcyBk
b3dubG9hZGVkIHZpYSBTRlRQIik7DQogICAgfQ0KDQogICAgcmV0dXJuIDA7DQp9DQo=
--e89a8fb1f832ac17ea04cbe8bfd0
Content-Type: application/x-gzip; name="repro.tar.gz"
Content-Disposition: attachment; filename="repro.tar.gz"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_h886wzjn1

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
--e89a8fb1f832ac17ea04cbe8bfd0
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

--e89a8fb1f832ac17ea04cbe8bfd0--

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 13 06:12:49 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9D4Cgdl004476;
	Sat, 13 Oct 2012 06:12:47 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9D4CeJS004469
 for <libssh2-devel@cool.haxx.se>; Sat, 13 Oct 2012 06:12:40 +0200
Received: (qmail 2609 invoked by uid 501); 13 Oct 2012 04:05:59 -0000
Message-ID: <20121013040559.2608.qmail@stuge.se>
Date: Sat, 13 Oct 2012 06:05:59 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: select timeouts after libssh2_sftp_open_ex
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Anton Obukhov wrote:
> the following download results in a timeout

Did you try this on a few different platforms?


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 15:58:50 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FDwI8a016315;
	Mon, 15 Oct 2012 15:58:41 +0200
Received: from gator378.hostgator.com (gator378.hostgator.com
 [184.173.199.219])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FDwGDm016309
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 15:58:16 +0200
Received: from [173.231.110.50] (port=44315 helo=[192.168.10.210])
 by gator378.hostgator.com with esmtpa (Exim 4.80)
 (envelope-from <maxmtl2002@yahoo.ca>) id 1TNkGB-0004Mu-Eg
 for libssh2-devel@cool.haxx.se; Mon, 15 Oct 2012 07:59:07 -0500
Message-ID: <507C089A.6080906@yahoo.ca>
Date: Mon, 15 Oct 2012 08:59:06 -0400
From: Maxime Larocque <maxmtl2002@yahoo.ca>
User-Agent: Mozilla/5.0 (X11; Linux i686;
 rv:16.0) Gecko/20121011 Thunderbird/16.0.1
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: select timeouts after libssh2_sftp_open_ex
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
In-Reply-To: <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
X-AntiAbuse: This header was added to track abuse,
 please include it with any abuse report
X-AntiAbuse: Primary Hostname - gator378.hostgator.com
X-AntiAbuse: Original Domain - cool.haxx.se
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - yahoo.ca
X-BWhitelist: no
X-Source: 
X-Source-Args: 
X-Source-Dir: 
X-Source-Sender: ([192.168.10.210]) [173.231.110.50]:44315
X-Source-Auth: max@weirdows.com
X-Email-Count: 6
X-Source-Cap: bWF4bXRsO21heG10bDtnYXRvcjM3OC5ob3N0Z2F0b3IuY29t
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"; Format="flowed"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9FDwI8a016315

Hi Anton,

Le 12/10/2012 23:53, Anton Obukhov a écrit :
> The code uses non-blocking API. For file sizes between 1000 and 20000 
> bytes it works great. However, when data size is 30000 bytes, the 
> upload happens successfully, but the following download results in a 
> timeout in select after the call to libssh2_sftp_open_ex returns 
> LIBSSH2_ERROR_EAGAIN.

I have a doubt about your usage of select (which, incidentally, is 
identical to the libssh2 examples). Is it safe to call select with the 
readfds and the writefds being a pointer to the same structure? The 
select man page does not say anything about this, but the select_tut 
always uses 2 fdsets.

 From the man page:
==============================
On success, *select*() and *pselect*() return the number of file 
descriptors contained in the three returned descriptor sets (that is, 
the total number of bits that are set in /readfds/, /writefds/, 
/exceptfds/) which may be zero if the timeout expires before anything 
interesting happens.
==============================

 From what I understand of this (it can depend on the implementation),
but if you pass the same fdset to read and write, and if one of them gets cleared (not ready),
it could effectively return 0, even if one of them is ready.


Maxime Larocque

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 16:19:27 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FEJLmG029503;
	Mon, 15 Oct 2012 16:19:26 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FEJJwa029427
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 16:19:19 +0200
Received: (qmail 29739 invoked by uid 501); 15 Oct 2012 14:19:20 -0000
Message-ID: <20121015141920.29738.qmail@stuge.se>
Date: Mon, 15 Oct 2012 16:19:20 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: select timeouts after libssh2_sftp_open_ex
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
 <507C089A.6080906@yahoo.ca>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <507C089A.6080906@yahoo.ca>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Maxime Larocque wrote:
> Is it safe to call select with the readfds and the writefds being a
> pointer to the same structure?

I do not think so. Please send patches.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 18:06:17 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FG5wWE004542;
	Mon, 15 Oct 2012 18:06:14 +0200
Received: from xware.se (static-213-115-131-235.sme.bredbandsbolaget.se
 [213.115.131.235])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FG5uM7004495
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 18:05:56 +0200
X-Default-Received-SPF: pass (skip=forwardok (res=PASS))
 x-ip-name=192.168.34.151; 
From: =?iso-8859-1?Q?Torbj=F6rn_Lindgren?= <torbjorn@xware.se>
To: <libssh2-devel@cool.haxx.se>
Subject: ProFTPD SFTP connection problem
Date: Mon, 15 Oct 2012 18:05:51 +0200
Message-ID: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se>
MIME-Version: 1.0
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac2q7vJOYuEoCr8USUu43R/1LfXRUA==
Content-Language: en-us
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============2013016377=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

This is a multipart message in MIME format.

--===============2013016377==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_00E6_01CDAAFF.B6727830"
Content-Language: en-us

This is a multipart message in MIME format.

------=_NextPart_000_00E6_01CDAAFF.B6727830
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello

=20

Like the original poster on this subject I fail to connect to ProFTPD =
using
libssh2 so I would be interested to know if this problem has been =
solved.

I run the sftp.c example on Windows7 compiled with Visual Studio 2008,
against a ProFTPD server version 1.3.3rc3 and libssh2_session_handshake
returns -43. According to the logged banner in the trace output, the =
server
is SSH-2.0-mod_sftp/0.9.7. I have no direct access to the server so at =
this
moment I do not know what the server log says. The client trace log have
some "Failure Event: -37" here and there, but they are present also when
connecting to a working server. It ends with:

=20

[libssh2] 0.609810 Transport: Looking for packet of type: 6

[libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5)

Failure establishing SSH session: -43

=20

At some occations libssh2_session_handshake waits for several minutes. =
At
those occations return is still -43 but it is (got 0) instead of (got =
5).

=20

I would be very grateful for any help

=20

/Torbj=F6rn


------=_NextPart_000_00E6_01CDAAFF.B6727830
Content-Type: text/html;
	charset="iso-8859-1"
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=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1"><meta name=3DGenerator content=3D"Microsoft Word =
14 (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:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-language:EN-US;}
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.E-postmall17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";
	mso-fareast-language:EN-US;}
@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=3DSV link=3Dblue =
vlink=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span =
lang=3DEN-US>Hello<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>Like the original poster on this subject I fail to connect =
to ProFTPD using libssh2 so I would be interested to know if this =
problem has been solved.<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>I run the sftp.c example on Windows7 compiled with Visual =
Studio 2008, against a ProFTPD server version 1.3.3rc3 and =
libssh2_session_handshake returns -43. According to the logged banner in =
the trace output, the server is SSH-2.0-mod_sftp/0.9.7. I have no direct =
access to the server so at this moment I do not know what the server log =
says. The client trace log have some &quot;Failure Event: -37&quot; here =
and there, but they are present also when connecting to a working =
server. It ends with:<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>[libssh2] 0.609810 Transport: Looking for packet of type: =
6<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-US>[libssh2] =
0.609810 Socket: Error recving 16384 bytes (got =
5)<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-US>Failure =
establishing SSH session: -43<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>At some occations =
libssh2_session_handshake waits for several minutes. At those occations =
return is still -43 but it is (got 0) instead of (got =
5).<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>I would be very grateful for any =
help<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>/Torbj=F6rn<o:p></o:p></span></p></div></body></html>
------=_NextPart_000_00E6_01CDAAFF.B6727830--


--===============2013016377==
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

--===============2013016377==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 18:18:14 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FGI8XH012297;
	Mon, 15 Oct 2012 18:18:13 +0200
Received: from mail.adbitaly.com (mail.adbitaly.com [93.57.16.197])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FGI6L9012199
 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 18:18:06 +0200
Received: from ADBBEXCH01.adbitaly.com ([::1]) by adbbexch01.adbitaly.com
 ([::1]) with mapi id 14.01.0421.002; Mon, 15 Oct 2012 18:18:02 +0200
From: Timothy Redaelli <T.Redaelli@ext.adbglobal.com>
To: "libssh2-devel@cool.haxx.se" <libssh2-devel@cool.haxx.se>
Subject: New about nettle support?
Thread-Topic: New about nettle support?
Thread-Index: Ac2q8HhNGPTSm1UCTCKgJa5MtCmyJg==
Date: Mon, 15 Oct 2012 16:18:01 +0000
Message-ID: <EA896395A436344DB98357A12F711F99058B6746@adbbexch01.adbitaly.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.94.130]
MIME-Version: 1.0
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id
 q9FGI6L9012199
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Hi,
Any news about nettle support (http://trac.libssh2.org/ticket/227)?

Do anyone have a (unofficial too) patch?

Thanks in advance

-- 
Timothy M. Redaelli


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 19:01:31 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FH1Hlb015167;
	Mon, 15 Oct 2012 19:01:27 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FH1G8Z015134
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 19:01:16 +0200
Received: (qmail 27345 invoked from network); 15 Oct 2012 17:01:13 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 15 Oct 2012 17:01:13 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Mon, 15 Oct 2012 17:01:13 -0000
X-URL: https://trac.libssh2.org/
Subject: Re: [libssh2] #227: nettle support
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/227#comment:2
Message-ID: <058.c7c9d2557ed720f456849b547a0a546f@libssh2.stuge.se>
References: <043.ea73fcd1508a7faeacbc82c8689c2f79@libssh2.stuge.se>
X-Trac-Ticket-ID: 227
In-Reply-To: <043.ea73fcd1508a7faeacbc82c8689c2f79@libssh2.stuge.se>
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9FH1G8Z015134
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#227: nettle support
--------------------------+-----------------
  Reporter:  vtorri       |      Owner:
      Type:  enhancement  |     Status:  new
  Priority:  normal       |  Milestone:
 Component:  crypto       |    Version:
Resolution:               |   Keywords:
Blocked By:               |     Blocks:
--------------------------+-----------------
Changes (by stuge):

 * version:  1.3.0 =>


-- 
Ticket URL: <https://trac.libssh2.org/ticket/227#comment:2>
libssh2 <https://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 15 20:02:56 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FI2agx032551;
	Mon, 15 Oct 2012 20:02:53 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FI2YdS032540
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 20:02:34 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9FI2Y68032536
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 20:02:34 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Mon, 15 Oct 2012 20:02:34 +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: New about nettle support?
In-Reply-To: <EA896395A436344DB98357A12F711F99058B6746@adbbexch01.adbitaly.com>
Message-ID: <alpine.DEB.2.00.1210152000350.29201@tvnag.unkk.fr>
References: <EA896395A436344DB98357A12F711F99058B6746@adbbexch01.adbitaly.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Mon, 15 Oct 2012, Timothy Redaelli wrote:

> Any news about nettle support (http://trac.libssh2.org/ticket/227)?
>
> Do anyone have a (unofficial too) patch?

I don't know of anyone working on nettle support. The ticket is pretty much 
useless and serves no purpose.

-- 

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 23:43:55 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLhUPh000737;
	Mon, 15 Oct 2012 23:43:49 +0200
Received: from na3sys009aog101.obsmtp.com (na3sys009aog101.obsmtp.com
 [74.125.149.67])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLhRov000699
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 23:43:28 +0200
Received: from mail-ie0-f182.google.com ([209.85.223.182]) (using TLSv1) by
 na3sys009aob101.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUHyDeglgJfzqhNNfaD3H89uzcgsirpgr@postini.com;
 Mon, 15 Oct 2012 14:43:29 PDT
Received: by mail-ie0-f182.google.com with SMTP id k10so10112205iea.41
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 14:43:22 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=gFg06PC2+H90q0Czk0yiE1QCKgk0m06SWBB1lS4f6lk=;
 b=B2RWvnmjGb9WF22Q19q3F0uHVaR1yyjPwHjz8ebPCOvKxflhMLOLMQJarPRaRVeIta
 cAkZwwYrmThHmxoiPg2LKIOA85HIb5nnQCe6QtiYPPDga9/oocL/Sqi29VtkXtoIe3mT
 rnAv/6c6LbYMWnFJj58/j9Ee5vTWihDp3+tpXGG0A3ONoJxpBmahxJLrfIAnpcAircUX
 j2A4OtlnWld2mBOAY/lr6b9TBBl5NBGxyYBOYqZxTcGXWLcjuoSUM2vr/3lcP543YTrn
 1VluEJe8URxX5dmB2owQ+bHwuOJmHixBiQMilaGlyq4UQixU7Qn/qYdfrt7Fj8VM6yAa
 epUg==
MIME-Version: 1.0
Received: by 10.50.104.137 with SMTP id ge9mr10130949igb.17.1350337402106;
 Mon, 15 Oct 2012 14:43:22 -0700 (PDT)
Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:43:22 -0700 (PDT)
In-Reply-To: <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
Date: Mon, 15 Oct 2012 14:43:22 -0700
Message-ID: <CA+dEfD1WRMkVOuBv+h48wXeOXjxLAKAHFpmPFnR0Xyr_it2o_A@mail.gmail.com>
Subject: Re: select timeouts after libssh2_sftp_open_ex
From: Anton Obukhov <anton@ubnt.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQkL6NlAJNtV8fQctwG7ENt3gbJsTcWuPThKA1Ic7MX5n7AnoTDIFAZ8s7hq3H7DA6VisE68
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1450179827=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1450179827==
Content-Type: multipart/alternative; boundary=e89a8f23585f2df4c104cc1fed51

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

> From: Peter Stuge <peter_at_stuge.se>
> Date: Sat, 13 Oct 2012 06:05:59 +0200
>
>> Anton Obukhov wrote:
>> the following download results in a timeout
>
> Did you try this on a few different platforms?

Yes - it works with Ubuntu desktop, however the device I'm connecting to is
embedded, and it has OpenSSH SFTP server in it.

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

&gt; From: Peter Stuge &lt;<a href=3D"http://peter_at_stuge.se">peter_at_st=
uge.se</a>&gt;=A0<br>&gt; Date: Sat, 13 Oct 2012 06:05:59 +0200<br>&gt;<br>=
&gt;&gt; Anton Obukhov wrote:=A0<br>&gt;&gt; the following download results=
 in a timeout=A0<br>
&gt;<br>&gt; Did you try this on a few different platforms?=A0<br><div><br>=
</div><div>Yes - it works with Ubuntu desktop, however the device I&#39;m c=
onnecting to is embedded, and it has OpenSSH SFTP server in it.<br></div>

--e89a8f23585f2df4c104cc1fed51--

--===============1450179827==
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

--===============1450179827==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 23:45:14 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLjDce002518;
	Mon, 15 Oct 2012 23:45:14 +0200
Received: from na3sys009aog126.obsmtp.com (na3sys009aog126.obsmtp.com
 [74.125.149.155])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLjAI7002478
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 23:45:11 +0200
Received: from mail-ia0-f182.google.com ([209.85.210.182]) (using TLSv1) by
 na3sys009aob126.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUHyD57pc/UNE8WlZvNMX3rneLRswoZiw@postini.com;
 Mon, 15 Oct 2012 14:45:12 PDT
Received: by mail-ia0-f182.google.com with SMTP id k10so4723104iag.41
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 14:45:11 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=N0zAVq0+WtOA1tFlRUpuyItlm/sROjMdGdfNIDxKYno=;
 b=IvdFazk1fgxZSaUnuwyOvow8V0ikc2IkF3r4o3wquJbMgEgda/1PL9JTvv7cQ9DFZf
 UM0v6ezHBSMlnbfTvX7t7y16U9lnBGch1XwGtu+D6MCySOib3kgbWWlm0m4PdUxO6Q0a
 6BCTZQdlVf3zJhhBY98XY6eptWAEowzmFkdz98S05PnqIxm17kr+OX1jH2sRq9tF63v+
 MhlR0Bv0ZnVsIhYNNcL47P5bnoGuS9xNDAy3QzHyYFRHIyY3Be/k+xJb3AVRxDAdD7Hh
 W/vqmV/PxCnc5WCPGcEyutf0Y64qRY5Ml4+04JCXnRQ1/mfaCH1Kf+eaVR7bgt0dKHkl
 iMzQ==
MIME-Version: 1.0
Received: by 10.50.36.201 with SMTP id s9mr6933558igj.17.1350337511153; Mon,
 15 Oct 2012 14:45:11 -0700 (PDT)
Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:45:11 -0700 (PDT)
In-Reply-To: <CA+dEfD1WRMkVOuBv+h48wXeOXjxLAKAHFpmPFnR0Xyr_it2o_A@mail.gmail.com>
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
 <CA+dEfD1WRMkVOuBv+h48wXeOXjxLAKAHFpmPFnR0Xyr_it2o_A@mail.gmail.com>
Date: Mon, 15 Oct 2012 14:45:11 -0700
Message-ID: <CA+dEfD17H-LpOLZTfws9bfcZzzCp8WS7QuAS8pvTjOBVwR3MXQ@mail.gmail.com>
Subject: Re: select timeouts after libssh2_sftp_open_ex
From: Anton Obukhov <anton@ubnt.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQlNWYnU9eWwYrV3ED4Rd3u2SvzVdW1jiLVprknZ+wrQ2be/x6UsWL706ZdpTWDcIaLvcfo6
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1755597449=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1755597449==
Content-Type: multipart/alternative; boundary=14dae9340e35addf1004cc1ff381

--14dae9340e35addf1004cc1ff381
Content-Type: text/plain; charset=ISO-8859-1

> From: Maxime Larocque Date: Mon, 15 Oct 2012 08:59:06 -0400
>
> I have a doubt about your usage of select (which, incidentally, is
> identical to the libssh2 examples).

Thanks for the suggestion, I changed it and tried again - unfortunately it
didn't solve the problem..

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

<div>&gt;=A0From: Maxime Larocque Date: Mon, 15 Oct 2012 08:59:06 -0400</di=
v><div>&gt;</div><div>&gt; I have a doubt about your usage of select (which=
, incidentally, is=A0<br></div><div>&gt; identical to the libssh2 examples)=
.<br>
</div><div><br></div><div>Thanks for the suggestion, I changed it and tried=
 again - unfortunately it didn&#39;t solve the problem..</div>

--14dae9340e35addf1004cc1ff381--

--===============1755597449==
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

--===============1755597449==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 15 23:47:23 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLlLQN003464;
	Mon, 15 Oct 2012 23:47:22 +0200
Received: from na3sys009aog131.obsmtp.com (na3sys009aog131.obsmtp.com
 [74.125.149.247])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLlJ7L003442
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 23:47:19 +0200
Received: from mail-ie0-f182.google.com ([209.85.223.182]) (using TLSv1) by
 na3sys009aob131.postini.com ([74.125.148.12]) with SMTP
 ID DSNKUHyEaDHgvHbWJZuKqDzfe0kJGbrlxtwX@postini.com;
 Mon, 15 Oct 2012 14:47:21 PDT
Received: by mail-ie0-f182.google.com with SMTP id k10so10118910iea.41
 for <libssh2-devel@cool.haxx.se>; Mon, 15 Oct 2012 14:47:20 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type:x-gm-message-state;
 bh=tKXkwxNzvLXNr3XDPxioyufiXi5FScI+72J3nbaADDg=;
 b=ehYouq6Hdn8nQH/Me3mEU0JDCd4hR/m8qMboZ3VlXTKpUbgqSA8ltGWU/KesJ1mcrg
 ApOIil5Q5rA4HN6aF+AG08Sv3vWgGXLQE6sulf/c/0u7IUCKNu9tmRRKNvxo3kua3b5N
 nsYnR9ZhZjs+cVawUdr+3ItUAxk9bxyEK/Lez+IG6zUphyYZbTxqWUkld4bve2LXBD7l
 yKqt41iRQdTuyavFLdrv+AlfvkmmZU5you5jNth5Tpu2gkz0H8yPKFue6BJrWcy2N7er
 Thrkz4Ut7IzsfUR0I5iPvPssS6Zqx10414259w//SLX9XePYrwf5TcJLPWLcLmUqSEZk
 UKkw==
MIME-Version: 1.0
Received: by 10.50.171.4 with SMTP id aq4mr10192695igc.72.1350337639989; Mon,
 15 Oct 2012 14:47:19 -0700 (PDT)
Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:47:19 -0700 (PDT)
In-Reply-To: <CA+dEfD1WRMkVOuBv+h48wXeOXjxLAKAHFpmPFnR0Xyr_it2o_A@mail.gmail.com>
References: <CA+dEfD2pQGoX+DKh=X7Btr_tdPXx7C_x9oy-XpMvf7s9d16ApQ@mail.gmail.com>
 <CA+dEfD3EufvGc7rPwS0guXLhVt7ybFp9DJjX=b+ipnH0e6Kp6w@mail.gmail.com>
 <CA+dEfD1WRMkVOuBv+h48wXeOXjxLAKAHFpmPFnR0Xyr_it2o_A@mail.gmail.com>
Date: Mon, 15 Oct 2012 14:47:19 -0700
Message-ID: <CA+dEfD2o+RfNC2o14mvZApNbN20e7yBxzW4s-w+JfaH23Jvz1Q@mail.gmail.com>
Subject: Re: select timeouts after libssh2_sftp_open_ex
From: Anton Obukhov <anton@ubnt.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQkFZthLvv7hr+k61mbPd6ZTw6qPTTmnohA0zIXVlF+fMiK23ZKRDr6Ho/H+RCIu4qvojSL6
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============2037203972=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============2037203972==
Content-Type: multipart/alternative; boundary=e89a8f2353f55bc19504cc1ffb8d

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

> Yes - it works with Ubuntu desktop, however the device I'm connecting to
is embedded, and it has OpenSSH SFTP server in it.

The main SSH server on that embedded device is dropbear, just in case this
may be helpful.

--e89a8f2353f55bc19504cc1ffb8d
Content-Type: text/html; charset=ISO-8859-1

&gt; Yes - it works with Ubuntu desktop, however the device I&#39;m connecting to is embedded, and it has OpenSSH SFTP server in it.<br>
<div><br></div><div>The main SSH server on that embedded device is dropbear, just in case this may be helpful.<br></div>

--e89a8f2353f55bc19504cc1ffb8d--

--===============2037203972==
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

--===============2037203972==--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 16 00:52:56 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FMqgZs021722;
	Tue, 16 Oct 2012 00:52:54 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FMqedh021706
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 16 Oct 2012 00:52:40 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9FMqeip021698
 for <libssh2-devel@cool.haxx.se>; Tue, 16 Oct 2012 00:52:40 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Tue, 16 Oct 2012 00:52: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: ProFTPD SFTP connection problem
In-Reply-To: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se>
Message-ID: <alpine.DEB.2.00.1210160051490.16107@tvnag.unkk.fr>
References: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED;
 BOUNDARY="1129329158-1931616621-1350341560=:16107"
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--1129329158-1931616621-1350341560=:16107
Content-Type: TEXT/PLAIN; charset=iso-8859-1; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 15 Oct 2012, Torbjörn Lindgren wrote:

> [libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5)
>
> Failure establishing SSH session: -43
>
> At some occations libssh2_session_handshake waits for several minutes. At
> those occations return is still -43 but it is (got 0) instead of (got 5).

That's src/transport.c:376 at work. I can't easily tell why that triggers for 
you though.

-- 

  / daniel.haxx.se
--1129329158-1931616621-1350341560=:16107
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

--1129329158-1931616621-1350341560=:16107--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 16 18:48:45 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GGmJvI024997;
	Tue, 16 Oct 2012 18:48:37 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GGmHDP024979
 for <libssh2-devel@cool.haxx.se>; Tue, 16 Oct 2012 18:48:17 +0200
Received: (qmail 2656 invoked from network); 16 Oct 2012 16:48:16 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 16 Oct 2012 16:48:16 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Tue, 16 Oct 2012 16:48:16 -0000
X-URL: https://trac.libssh2.org/
Subject: [libssh2] #249: sftp download data corruption
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249
Message-ID: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-Trac-Ticket-ID: 249
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GGmHDP024979
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#249: sftp download data corruption
--------------------+--------------------
 Reporter:  maxmtl  |       Owner:
     Type:  defect  |      Status:  new
 Priority:  normal  |   Milestone:  1.4.3
Component:  SFTP    |     Version:  1.4.2
 Keywords:          |  Blocked By:
   Blocks:          |
--------------------+--------------------
 When using libssh2's sftp to receive a file from an Apache Mina SSHD
 server (v0.6), the file is corrupted.

 Other clients (sftp from Openssh, Filezilla) does not show this behavior.
 Other SSH servers do not show this behavior.

 The problem seems to be that when libssh2 asks for 2000 bytes in
 SSH_FXP_READ, Mina SSHD always returns 32KB. When the SSH_FXP_DATA packet
 is received, all 32KB is sent to the application instead of only 2000
 bytes. However, the next 32KB received will have an offset of 2000 instead
 of 32KB, thus corrupting the file.

 The solutions:
 - libssh2: limit the length of the chunk to the length of data that was
 requested (see patch)
 - Mina: correct the length of the data sent

 With the attached patch it works, but takes much more time to complete
 (2m27 for a 2 MB file, instead of around 14 seconds). At least, the data
 is not corrupted.

-- 
Ticket URL: <https://trac.libssh2.org/ticket/249>
libssh2 <https://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 17 00:23:34 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMNBOh007506;
	Wed, 17 Oct 2012 00:23:29 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMN9Sv007471
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 00:23:09 +0200
Received: (qmail 4831 invoked from network); 16 Oct 2012 22:23:05 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 16 Oct 2012 22:23:05 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Tue, 16 Oct 2012 22:23:05 -0000
X-URL: https://trac.libssh2.org/
Subject: Re: [libssh2] #249: sftp download data corruption
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:1
Message-ID: <058.5b48a0ad844ac87782e642124f2d5974@libssh2.stuge.se>
References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-Trac-Ticket-ID: 249
In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GMN9Sv007471
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#249: sftp download data corruption
---------------------+-------------------
  Reporter:  maxmtl  |      Owner:
      Type:  defect  |     Status:  new
  Priority:  normal  |  Milestone:  1.4.3
 Component:  SFTP    |    Version:  1.4.2
Resolution:          |   Keywords:
Blocked By:          |     Blocks:
---------------------+-------------------

Comment (by bagder):

 That's a violation of the spec from the server's side.

 Both the -5 draft as well as the latest -13 draft mentions that it should
 not return more data than the 'length' as given in the SSH_FXP_READ
 packet.

 I would rather argue that when detecting that the data is larger than
 requested, it should probably bail out since there's no way for it to know
 what data it got and how to handle it. I think your fix is somewhat of a
 kludge that works for this particular broken server but we can't tell how
 other broken servers will respond with wrong sizes.

-- 
Ticket URL: <https://trac.libssh2.org/ticket/249#comment:1>
libssh2 <https://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 17 00:25:55 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMPrM8009874;
	Wed, 17 Oct 2012 00:25:55 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMPq8o009848
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 00:25:52 +0200
Received: (qmail 4992 invoked from network); 16 Oct 2012 22:25:52 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 16 Oct 2012 22:25:52 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Tue, 16 Oct 2012 22:25:52 -0000
X-URL: https://trac.libssh2.org/
Subject: Re: [libssh2] #249: sftp download data corruption
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:2
Message-ID: <058.259a0f629dc5e2b0389c6829191f7bbb@libssh2.stuge.se>
References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-Trac-Ticket-ID: 249
In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GMPq8o009848
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#249: sftp download data corruption
---------------------+-------------------
  Reporter:  maxmtl  |      Owner:
      Type:  defect  |     Status:  new
  Priority:  normal  |  Milestone:  1.4.3
 Component:  SFTP    |    Version:  1.4.2
Resolution:          |   Keywords:
Blocked By:          |     Blocks:
---------------------+-------------------

Comment (by bagder):

 This seems to be the patch for Mina SSHD:

 https://issues.apache.org/jira/browse/SSHD-101

-- 
Ticket URL: <https://trac.libssh2.org/ticket/249#comment:2>
libssh2 <https://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 17 10:27:02 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9H8QeR6009486;
	Wed, 17 Oct 2012 10:26:57 +0200
Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com
 [209.85.220.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9H8QaOU009443
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 10:26:37 +0200
Received: by mail-pa0-f54.google.com with SMTP id bi1so6626888pad.41
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 01:26:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :content-type; bh=7/intrxZs/MiZW27GBqgVCdRQETyOH21oyWTwmedi4o=;
 b=b/L8KpHNe7C/5coNFeuQNz1SU+MzQB11WTp3mR79k9aczUaclshxDqtO89tbhRjEp0
 tgYe+uE1FqkKrEF89zK0GGqXrmqvqkBwrHcKO8OPiN+21wu0EQFpiZmt6GtlJhv1ZKrY
 8lKOvR18gPOLHkUFQqQc3dIyfT3vMIgr1FG8A2AWpGLEH8y3UwJTeRduOW0cCTPAklQY
 Fu85RvY5yOVt/OoZ8rgcMXoiswGxy+jt3moC8bIrJt5U3YWU8QHMd0vOKj0SHBNyCjM/
 mnDrPf2ARXWxSYRoypCferL79GgBjbDmvNO1uUKn67pj9BPRbdgFcXxEDz9d0Wj1w9Bi
 YDiw==
MIME-Version: 1.0
Received: by 10.68.228.98 with SMTP id sh2mr54689497pbc.95.1350462392111; Wed,
 17 Oct 2012 01:26:32 -0700 (PDT)
Received: by 10.66.190.131 with HTTP; Wed, 17 Oct 2012 01:26:32 -0700 (PDT)
In-Reply-To: <alpine.DEB.2.00.1210160051490.16107@tvnag.unkk.fr>
References: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se>
 <alpine.DEB.2.00.1210160051490.16107@tvnag.unkk.fr>
Date: Wed, 17 Oct 2012 10:26:32 +0200
Message-ID: <CA+EgX28yHGV4M55SbJHq+3P3aWfsQws7yfT-i9-23-dWzecvpQ@mail.gmail.com>
Subject: Re: ProFTPD SFTP connection problem
From: Michael Krietemeyer <michael.krietemeyer@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Content-Type: multipart/mixed; boundary=e89a8ff243012a11a804cc3d07d0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--e89a8ff243012a11a804cc3d07d0
Content-Type: multipart/alternative; boundary=e89a8ff243012a11a404cc3d07ce

--e89a8ff243012a11a404cc3d07ce
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hello,

I compiled the libssh2 with Visual Studio 2008 and bulid the example sftp.c
(added a few printf statements and activated tracing). If i connect against
our protftp the error is:
Failure establishing SSH session: -41

The trace log is attached to this eMail.

Greetings
Michael

2012/10/16 Daniel Stenberg <daniel@haxx.se>

> On Mon, 15 Oct 2012, Torbj=C3=B6rn Lindgren wrote:
>
>  [libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5)
>>
>> Failure establishing SSH session: -43
>>
>> At some occations libssh2_session_handshake waits for several minutes. A=
t
>> those occations return is still -43 but it is (got 0) instead of (got 5)=
.
>>
>
> That's src/transport.c:376 at work. I can't easily tell why that triggers
> for you though.
>
> --
>
>  / daniel.haxx.se
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>
>

--e89a8ff243012a11a404cc3d07ce
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hello,<div><br></div><div>I compiled the libssh2 with Visual Studio 2008 an=
d bulid the example sftp.c (added a few printf statements and activated tra=
cing). If i connect against our protftp the error is:=C2=A0</div><div>Failu=
re establishing SSH session: -41</div>
<div><br></div><div>The trace log is attached to this eMail.</div><div><br>=
</div><div>Greetings=C2=A0</div><div>Michael</div><br><div class=3D"gmail_q=
uote">2012/10/16 Daniel Stenberg <span dir=3D"ltr">&lt;<a href=3D"mailto:da=
niel@haxx.se" target=3D"_blank">daniel@haxx.se</a>&gt;</span><br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div class=3D"im">On Mon, 15 Oct 2012, Torbj=
=C3=B6rn Lindgren wrote:<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
[libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5)<br>
<br>
Failure establishing SSH session: -43<br>
<br>
At some occations libssh2_session_handshake waits for several minutes. At<b=
r>
those occations return is still -43 but it is (got 0) instead of (got 5).<b=
r>
</blockquote>
<br></div>
That&#39;s src/transport.c:376 at work. I can&#39;t easily tell why that tr=
iggers for you though.<span class=3D"HOEnZb"><font color=3D"#888888"><br>
<br>
-- <br>
<br>
=C2=A0/ <a href=3D"http://daniel.haxx.se" target=3D"_blank">daniel.haxx.se<=
/a></font></span><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>
<br></blockquote></div><br>

--e89a8ff243012a11a404cc3d07ce--
--e89a8ff243012a11a804cc3d07d0
Content-Type: text/plain; charset=US-ASCII; name="trace.txt"
Content-Disposition: attachment; filename="trace.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_h8e6fk1c0

W2xpYnNzaDJdIDAuMDkwNjE2IFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2NrZXQg
MTQwDQpbbGlic3NoMl0gMC4wOTA2MTYgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NILTIu
MC1saWJzc2gyXzEuNC4yDQpbbGlic3NoMl0gMC4wOTA2MTYgU29ja2V0OiBTZW50IDIzLzIzIGJ5
dGVzIGF0IDAxMkYwODE0KzANCltsaWJzc2gyXSAwLjA5MDYxNiBTb2NrZXQ6IEVycm9yIHJlY3Zp
bmcgMSBieXRlczogMTENCltsaWJzc2gyXSAwLjA5MDYxNiBGYWlsdXJlIEV2ZW50OiAtMzcgLSBG
YWlsZWQgZ2V0dGluZyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAx
IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg
YmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN
CltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNz
aDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4x
MTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBT
b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDog
UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQg
MSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz
IGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy
DQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz
c2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAu
MTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcg
U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6
IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVk
IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRl
cyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l
cg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGli
c3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw
LjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3
IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0
OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBUcmFuc3BvcnQ6IFJl
Y2VpdmVkIEJhbm5lcjogU1NILTIuMC1tb2Rfc2Z0cC8wLjkuNw0KW2xpYnNzaDJdIDAuMjA2NjIy
IEtleSBFeDogU2VudCBLRVg6IGRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSxkaWZmaWUtaGVs
bG1hbi1ncm91cC1leGNoYW5nZS1zaGExLGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExDQpbbGli
c3NoMl0gMC4yMDY2MjIgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Esc3NoLWRzcw0KW2xp
YnNzaDJdIDAuMjA2NjIyIEtleSBFeDogU2VudCBDUllQVF9DUzogYWVzMTI4LWN0cixhZXMxOTIt
Y3RyLGFlczI1Ni1jdHIsYWVzMjU2LWNiYyxyaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UsYWVz
MTkyLWNiYyxhZXMxMjgtY2JjLGJsb3dmaXNoLWNiYyxhcmNmb3VyMTI4LGFyY2ZvdXIsY2FzdDEy
OC1jYmMsM2Rlcy1jYmMNCltsaWJzc2gyXSAwLjIwNjYyMiBLZXkgRXg6IFNlbnQgQ1JZUFRfU0M6
IGFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3RyLGFlczI1Ni1jYmMscmlqbmRhZWwtY2Jj
QGx5c2F0b3IubGl1LnNlLGFlczE5Mi1jYmMsYWVzMTI4LWNiYyxibG93ZmlzaC1jYmMsYXJjZm91
cjEyOCxhcmNmb3VyLGNhc3QxMjgtY2JjLDNkZXMtY2JjDQpbbGlic3NoMl0gMC4yMDY2MjIgS2V5
IEV4OiBTZW50IE1BQ19DUzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1k
NS05NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQ0KW2xpYnNzaDJd
IDAuMjA2NjIyIEtleSBFeDogU2VudCBNQUNfU0M6IGhtYWMtc2hhMSxobWFjLXNoYTEtOTYsaG1h
Yy1tZDUsaG1hYy1tZDUtOTYsaG1hYy1yaXBlbWQxNjAsaG1hYy1yaXBlbWQxNjBAb3BlbnNzaC5j
b20NCltsaWJzc2gyXSAwLjIwNjYyMiBLZXkgRXg6IFNlbnQgQ09NUF9DUzogbm9uZQ0KW2xpYnNz
aDJdIDAuMjA2NjIyIEtleSBFeDogU2VudCBDT01QX1NDOiBub25lDQpbbGlic3NoMl0gMC4yMDY2
MjIgS2V5IEV4OiBTZW50IExBTkdfQ1M6IA0KW2xpYnNzaDJdIDAuMjA2NjIyIEtleSBFeDogU2Vu
dCBMQU5HX1NDOiANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMp
DQowMDAwOiAxNCAzNyBENCA2NiA3MSAxMCBGNyA0MiAgRTggNUMgOTMgMzMgNDQgQUMgNTggMjIg
OiAuNy5mcS4uQi5cLjNELlgiDQowMDEwOiBCRCAwMCAwMCAwMCA1OSA2NCA2OSA2NiAgNjYgNjkg
NjUgMkQgNjggNjUgNkMgNkMgOiAuLi4uWWRpZmZpZS1oZWxsDQowMDIwOiA2RCA2MSA2RSAyRCA2
NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGExDQow
MDMwOiAyQyA2NCA2OSA2NiA2NiA2OSA2NSAyRCAgNjggNjUgNkMgNkMgNkQgNjEgNkUgMkQgOiAs
ZGlmZmllLWhlbGxtYW4tDQowMDQwOiA2NyA3MiA2RiA3NSA3MCAyRCA2NSA3OCAgNjMgNjggNjEg
NkUgNjcgNjUgMkQgNzMgOiBncm91cC1leGNoYW5nZS1zDQowMDUwOiA2OCA2MSAzMSAyQyA2NCA2
OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmllLWhlbGxtDQowMDYw
OiA2MSA2RSAyRCA2NyA3MiA2RiA3NSA3MCAgMzEgMkQgNzMgNjggNjEgMzEgMDAgMDAgOiBhbi1n
cm91cDEtc2hhMS4uDQowMDcwOiAwMCAwRiA3MyA3MyA2OCAyRCA3MiA3MyAgNjEgMkMgNzMgNzMg
NjggMkQgNjQgNzMgOiAuLnNzaC1yc2Esc3NoLWRzDQowMDgwOiA3MyAwMCAwMCAwMCA5MiA2MSA2
NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4uLmFlczEyOC1jdHIsDQowMDkwOiA2
MSA2NSA3MyAzMSAzOSAzMiAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMgMzIgMzUgOiBhZXMxOTIt
Y3RyLGFlczI1DQowMGEwOiAzNiAyRCA2MyA3NCA3MiAyQyA2MSA2NSAgNzMgMzIgMzUgMzYgMkQg
NjMgNjIgNjMgOiA2LWN0cixhZXMyNTYtY2JjDQowMGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2
NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkgOiAscmlqbmRhZWwtY2JjQGx5DQowMGMwOiA3MyA2
MSA3NCA2RiA3MiAyRSA2QyA2OSAgNzUgMkUgNzMgNjUgMkMgNjEgNjUgNzMgOiBzYXRvci5saXUu
c2UsYWVzDQowMGQwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEgNjUgNzMgMzEgMzIgMzgg
MkQgNjMgOiAxOTItY2JjLGFlczEyOC1jDQowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAg
NjkgNzMgNjggMkQgNjMgNjIgNjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsDQowMGYwOiA2MSA3MiA2
MyA2NiA2RiA3NSA3MiAzMSAgMzIgMzggMkMgNjEgNzIgNjMgNjYgNkYgOiBhcmNmb3VyMTI4LGFy
Y2ZvDQowMTAwOiA3NSA3MiAyQyA2MyA2MSA3MyA3NCAzMSAgMzIgMzggMkQgNjMgNjIgNjMgMkMg
MzMgOiB1cixjYXN0MTI4LWNiYywzDQowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAg
MDAgOTIgNjEgNjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyDQowMTIwOiAzOCAyRCA2MyA3
NCA3MiAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNzQgNzIgOiA4LWN0cixhZXMxOTItY3Ry
DQowMTMwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNzQgNzIgMkMgNjEgNjUgNzMgMzIg
OiAsYWVzMjU2LWN0cixhZXMyDQowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg
NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtDQowMTUwOiA2MyA2MiA2MyA0MCA2
QyA3OSA3MyA2MSAgNzQgNkYgNzIgMkUgNkMgNjkgNzUgMkUgOiBjYmNAbHlzYXRvci5saXUuDQow
MTYwOiA3MyA2NSAyQyA2MSA2NSA3MyAzMSAzOSAgMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUgOiBz
ZSxhZXMxOTItY2JjLGFlDQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAgMkMgNjIgNkMg
NkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzDQowMTgwOiA2OCAyRCA2MyA2MiA2MyAy
QyA2MSA3MiAgNjMgNjYgNkYgNzUgNzIgMzEgMzIgMzggOiBoLWNiYyxhcmNmb3VyMTI4DQowMTkw
OiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3MiAgMkMgNjMgNjEgNzMgNzQgMzEgMzIgMzggOiAsYXJj
Zm91cixjYXN0MTI4DQowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIg
NjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uDQowMWIwOiA1NSA2OCA2RCA2MSA2MyAyRCA3
MyA2OCAgNjEgMzEgMkMgNjggNkQgNjEgNjMgMkQgOiBVaG1hYy1zaGExLGhtYWMtDQowMWMwOiA3
MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEgNjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2
LGhtYWMtbWQ1DQowMWQwOiAyQyA2OCA2RCA2MSA2MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMg
NjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1hDQowMWUwOiA2MyAyRCA3MiA2OSA3MCA2NSA2RCA2
NCAgMzEgMzYgMzAgMkMgNjggNkQgNjEgNjMgOiBjLXJpcGVtZDE2MCxobWFjDQowMWYwOiAyRCA3
MiA2OSA3MCA2NSA2RCA2NCAzMSAgMzYgMzAgNDAgNkYgNzAgNjUgNkUgNzMgOiAtcmlwZW1kMTYw
QG9wZW5zDQowMjAwOiA3MyA2OCAyRSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMg
MkQgNzMgOiBzaC5jb20uLi5VaG1hYy1zDQowMjEwOiA2OCA2MSAzMSAyQyA2OCA2RCA2MSA2MyAg
MkQgNzMgNjggNjEgMzEgMkQgMzkgMzYgOiBoYTEsaG1hYy1zaGExLTk2DQowMjIwOiAyQyA2OCA2
RCA2MSA2MyAyRCA2RCA2NCAgMzUgMkMgNjggNkQgNjEgNjMgMkQgNkQgOiAsaG1hYy1tZDUsaG1h
Yy1tDQowMjMwOiA2NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUg
NkQgOiBkNS05NixobWFjLXJpcGVtDQowMjQwOiA2NCAzMSAzNiAzMCAyQyA2OCA2RCA2MSAgNjMg
MkQgNzIgNjkgNzAgNjUgNkQgNjQgOiBkMTYwLGhtYWMtcmlwZW1kDQowMjUwOiAzMSAzNiAzMCA0
MCA2RiA3MCA2NSA2RSAgNzMgNzMgNjggMkUgNjMgNkYgNkQgMDAgOiAxNjBAb3BlbnNzaC5jb20u
DQowMjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg
OiAuLi5ub25lLi4uLm5vbmUuDQowMjcwOiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgMDAg
MDAgMDAgICAgICAgICAgICAgOiAuLi4uLi4uLi4uLi4NCltsaWJzc2gyXSAwLjIwNjYyMiBTb2Nr
ZXQ6IFNlbnQgODA4LzgwOCBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRf
d3JpdGUgc2VuZCgpICg4MDggYnl0ZXMpDQowMDAwOiAwMCAwMCAwMyAyNCBBNyAxNCAzNyBENCAg
NjYgNzEgMTAgRjcgNDIgRTggNUMgOTMgOiAuLi4kLi43LmZxLi5CLlwuDQowMDEwOiAzMyA0NCBB
QyA1OCAyMiBCRCAwMCAwMCAgMDAgNTkgNjQgNjkgNjYgNjYgNjkgNjUgOiAzRC5YIi4uLi5ZZGlm
ZmllDQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcgNzIgNkYgNzUgNzAgMzEg
MzQgOiAtaGVsbG1hbi1ncm91cDE0DQowMDMwOiAyRCA3MyA2OCA2MSAzMSAyQyA2NCA2OSAgNjYg
NjYgNjkgNjUgMkQgNjggNjUgNkMgOiAtc2hhMSxkaWZmaWUtaGVsDQowMDQwOiA2QyA2RCA2MSA2
RSAyRCA2NyA3MiA2RiAgNzUgNzAgMkQgNjUgNzggNjMgNjggNjEgOiBsbWFuLWdyb3VwLWV4Y2hh
DQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAgMkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQg
OiBuZ2Utc2hhMSxkaWZmaWUtDQowMDYwOiA2OCA2NSA2QyA2QyA2RCA2MSA2RSAyRCAgNjcgNzIg
NkYgNzUgNzAgMzEgMkQgNzMgOiBoZWxsbWFuLWdyb3VwMS1zDQowMDcwOiA2OCA2MSAzMSAwMCAw
MCAwMCAwRiA3MyAgNzMgNjggMkQgNzIgNzMgNjEgMkMgNzMgOiBoYTEuLi4uc3NoLXJzYSxzDQow
MDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAwMCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBz
aC1kc3MuLi4uYWVzMTI4DQowMDkwOiAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyAgMzEgMzkgMzIg
MkQgNjMgNzQgNzIgMkMgOiAtY3RyLGFlczE5Mi1jdHIsDQowMGEwOiA2MSA2NSA3MyAzMiAzNSAz
NiAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMgMzIgMzUgOiBhZXMyNTYtY3RyLGFlczI1DQowMGIw
OiAzNiAyRCA2MyA2MiA2MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNi
YyxyaWpuZGFlbC1jDQowMGMwOiA2MiA2MyA0MCA2QyA3OSA3MyA2MSA3NCAgNkYgNzIgMkUgNkMg
NjkgNzUgMkUgNzMgOiBiY0BseXNhdG9yLmxpdS5zDQowMGQwOiA2NSAyQyA2MSA2NSA3MyAzMSAz
OSAzMiAgMkQgNjMgNjIgNjMgMkMgNjEgNjUgNzMgOiBlLGFlczE5Mi1jYmMsYWVzDQowMGUwOiAz
MSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2Jj
LGJsb3dmaXNoDQowMGYwOiAyRCA2MyA2MiA2MyAyQyA2MSA3MiA2MyAgNjYgNkYgNzUgNzIgMzEg
MzIgMzggMkMgOiAtY2JjLGFyY2ZvdXIxMjgsDQowMTAwOiA2MSA3MiA2MyA2NiA2RiA3NSA3MiAy
QyAgNjMgNjEgNzMgNzQgMzEgMzIgMzggMkQgOiBhcmNmb3VyLGNhc3QxMjgtDQowMTEwOiA2MyA2
MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMsM2Rlcy1j
YmMuLi4uDQowMTIwOiA2MSA2NSA3MyAzMSAzMiAzOCAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMg
MzEgMzkgOiBhZXMxMjgtY3RyLGFlczE5DQowMTMwOiAzMiAyRCA2MyA3NCA3MiAyQyA2MSA2NSAg
NzMgMzIgMzUgMzYgMkQgNjMgNzQgNzIgOiAyLWN0cixhZXMyNTYtY3RyDQowMTQwOiAyQyA2MSA2
NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUgOiAsYWVzMjU2LWNiYyxy
aWpuDQowMTUwOiA2NCA2MSA2NSA2QyAyRCA2MyA2MiA2MyAgNDAgNkMgNzkgNzMgNjEgNzQgNkYg
NzIgOiBkYWVsLWNiY0BseXNhdG9yDQowMTYwOiAyRSA2QyA2OSA3NSAyRSA3MyA2NSAyQyAgNjEg
NjUgNzMgMzEgMzkgMzIgMkQgNjMgOiAubGl1LnNlLGFlczE5Mi1jDQowMTcwOiA2MiA2MyAyQyA2
MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJs
DQowMTgwOiA2RiA3NyA2NiA2OSA3MyA2OCAyRCA2MyAgNjIgNjMgMkMgNjEgNzIgNjMgNjYgNkYg
OiBvd2Zpc2gtY2JjLGFyY2ZvDQowMTkwOiA3NSA3MiAzMSAzMiAzOCAyQyA2MSA3MiAgNjMgNjYg
NkYgNzUgNzIgMkMgNjMgNjEgOiB1cjEyOCxhcmNmb3VyLGNhDQowMWEwOiA3MyA3NCAzMSAzMiAz
OCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQgNjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jDQow
MWIwOiA2MiA2MyAwMCAwMCAwMCA1NSA2OCA2RCAgNjEgNjMgMkQgNzMgNjggNjEgMzEgMkMgOiBi
Yy4uLlVobWFjLXNoYTEsDQowMWMwOiA2OCA2RCA2MSA2MyAyRCA3MyA2OCA2MSAgMzEgMkQgMzkg
MzYgMkMgNjggNkQgNjEgOiBobWFjLXNoYTEtOTYsaG1hDQowMWQwOiA2MyAyRCA2RCA2NCAzNSAy
QyA2OCA2RCAgNjEgNjMgMkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05DQowMWUw
OiAzNiAyQyA2OCA2RCA2MSA2MyAyRCA3MiAgNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgOiA2LGht
YWMtcmlwZW1kMTYwDQowMWYwOiAyQyA2OCA2RCA2MSA2MyAyRCA3MiA2OSAgNzAgNjUgNkQgNjQg
MzEgMzYgMzAgNDAgOiAsaG1hYy1yaXBlbWQxNjBADQowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2
OCAyRSAgNjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoDQowMjEwOiA2
RCA2MSA2MyAyRCA3MyA2OCA2MSAzMSAgMkMgNjggNkQgNjEgNjMgMkQgNzMgNjggOiBtYWMtc2hh
MSxobWFjLXNoDQowMjIwOiA2MSAzMSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNkQgNjQg
MzUgMkMgNjggOiBhMS05NixobWFjLW1kNSxoDQowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAzNSAy
RCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtDQowMjQwOiA3MiA2
OSA3MCA2NSA2RCA2NCAzMSAzNiAgMzAgMkMgNjggNkQgNjEgNjMgMkQgNzIgOiByaXBlbWQxNjAs
aG1hYy1yDQowMjUwOiA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCAgNDAgNkYgNzAgNjUgNkUgNzMg
NzMgNjggOiBpcGVtZDE2MEBvcGVuc3NoDQowMjYwOiAyRSA2MyA2RiA2RCAwMCAwMCAwMCAwNCAg
NkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4uDQowMjcwOiA2RSA2RiA2
RSA2NSAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiBub25lLi4uLi4uLi4u
Li4uDQowMjgwOiAwMCA1QiA3QiBDMyA2QiBGRiBCQyBEOCAgRjQgNDAgNzIgRDQgRjYgOEYgQTIg
QUYgOiAuW3suay4uLi5Aci4uLi4uDQowMjkwOiAyOCA0NyAyQSA3NSAzNCBBMyBFNyAyQSAgMEYg
M0QgMzcgNjQgOEQgNzUgNEIgNjQgOiAoRyp1NC4uKi49N2QudUtkDQowMmEwOiAzNiAxNyA4NyBD
QiA5QiBDNyBDQyAzNSAgRDEgRjggMzcgMEQgOUUgNDYgODEgODAgOiA2Li4uLi4uNS4uNy4uRi4u
DQowMmIwOiA5QyAxRSAzQSA0QiBEQiA1NCA2OSA4RSAgRkIgNEEgNUMgNDEgRTAgNDQgRkQgRjkg
OiAuLjpLLlRpLi5KXEEuRC4uDQowMmMwOiAzQiAxMSBGNSAxMSA0OCA1RSAyNiAxMSAgMDIgRjQg
RTYgMEMgQjAgQzQgQTkgNTYgOiA7Li4uSF4mLi4uLi4uLi5WDQowMmQwOiAwNiA3NCA4RiAyOCBG
MiA1NSA3MiA5QyAgMUMgOEEgMjYgQTAgNDEgQUIgNEUgQ0UgOiAudC4oLlVyLi4uJi5BLk4uDQow
MmUwOiA1MCA5RiAxNSBGMSBGOCAyQyBDQiBDNyAgQTAgQkIgQkUgODMgMjUgN0EgNDUgQUYgOiBQ
Li4uLiwuLi4uLi4lekUuDQowMmYwOiA2QiAyMiBGOSA4NSA5OCAyRCBDMyA5MyAgREMgNEMgRTYg
OTUgOUIgODIgMDYgMTUgOiBrIi4uLi0uLi5MLi4uLi4uDQowMzAwOiBDNCBDNSBGRSAzQiBEMiA4
MyAzQSBEQiAgM0EgQUYgMDIgNzIgQjMgQjYgNzMgMkUgOiAuLi47Li46LjouLnIuLnMuDQowMzEw
OiA5MCBFMCAwRSBCMyA1RSBBQSBGMSA5NCAgQzMgOTIgMkQgQ0MgREIgNzUgNTcgRjEgOiAuLi4u
Xi4uLi4uLS4udVcuDQowMzIwOiA1NyBFNCBGQSAxQSBBQSA5NCBCRCAzOCAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBXLi4uLi4uOA0KW2xpYnNzaDJdIDAuMjA2NjIyIFRyYW5zcG9ydDogTG9v
a2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwDQpbbGlic3NoMl0gMC4yMDY2MjIgU29ja2V0OiBS
ZWN2ZWQgNjgwLzE2Mzg0IGJ5dGVzIHRvIDAwNUZFRDY4KzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0
X3JlYWQoKSByYXcgKDY4MCBieXRlcykNCjAwMDA6IDAwIDAwIDAyIEE0IDA1IDE0IEUzIDgyICAz
MiA2QyBFQSAyNSA5OSBEMSBDOCBCRCA6IC4uLi4uLi4uMmwuJS4uLi4NCjAwMTA6IEY0IDExIEJG
IDA5IDdEIEUwIDAwIDAwICAwMCA4QiA2NCA2OSA2NiA2NiA2OSA2NSA6IC4uLi59Li4uLi5kaWZm
aWUNCjAwMjA6IDJEIDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAyRCA2
NSA6IC1oZWxsbWFuLWdyb3VwLWUNCjAwMzA6IDc4IDYzIDY4IDYxIDZFIDY3IDY1IDJEICA3MyA2
OCA2MSAzMiAzNSAzNiAyQyA2NCA6IHhjaGFuZ2Utc2hhMjU2LGQNCjAwNDA6IDY5IDY2IDY2IDY5
IDY1IDJEIDY4IDY1ICA2QyA2QyA2RCA2MSA2RSAyRCA2NyA3MiA6IGlmZmllLWhlbGxtYW4tZ3IN
CjAwNTA6IDZGIDc1IDcwIDJEIDY1IDc4IDYzIDY4ICA2MSA2RSA2NyA2NSAyRCA3MyA2OCA2MSA6
IG91cC1leGNoYW5nZS1zaGENCjAwNjA6IDMxIDJDIDY0IDY5IDY2IDY2IDY5IDY1ICAyRCA2OCA2
NSA2QyA2QyA2RCA2MSA2RSA6IDEsZGlmZmllLWhlbGxtYW4NCjAwNzA6IDJEIDY3IDcyIDZGIDc1
IDcwIDMxIDM0ICAyRCA3MyA2OCA2MSAzMSAyQyA2NCA2OSA6IC1ncm91cDE0LXNoYTEsZGkNCjAw
ODA6IDY2IDY2IDY5IDY1IDJEIDY4IDY1IDZDICA2QyA2RCA2MSA2RSAyRCA2NyA3MiA2RiA6IGZm
aWUtaGVsbG1hbi1ncm8NCjAwOTA6IDc1IDcwIDMxIDJEIDczIDY4IDYxIDMxICAyQyA3MiA3MyA2
MSAzMSAzMCAzMiAzNCA6IHVwMS1zaGExLHJzYTEwMjQNCjAwYTA6IDJEIDczIDY4IDYxIDMxIDAw
IDAwIDAwICAwRiA3MyA3MyA2OCAyRCA3MiA3MyA2MSA6IC1zaGExLi4uLnNzaC1yc2ENCjAwYjA6
IDJDIDczIDczIDY4IDJEIDY0IDczIDczICAwMCAwMCAwMCA4RiA2MSA2NSA3MyAzMiA6ICxzc2gt
ZHNzLi4uLmFlczINCjAwYzA6IDM1IDM2IDJEIDYzIDc0IDcyIDJDIDYxICA2NSA3MyAzMSAzOSAz
MiAyRCA2MyA3NCA6IDU2LWN0cixhZXMxOTItY3QNCjAwZDA6IDcyIDJDIDYxIDY1IDczIDMxIDMy
IDM4ICAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyA6IHIsYWVzMTI4LWN0cixhZXMNCjAwZTA6IDMy
IDM1IDM2IDJEIDYzIDYyIDYzIDJDICA2MSA2NSA3MyAzMSAzOSAzMiAyRCA2MyA6IDI1Ni1jYmMs
YWVzMTkyLWMNCjAwZjA6IDYyIDYzIDJDIDYxIDY1IDczIDMxIDMyICAzOCAyRCA2MyA2MiA2MyAy
QyA2MiA2QyA6IGJjLGFlczEyOC1jYmMsYmwNCjAxMDA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz
ICA3NCA3MiAyQyA2MiA2QyA2RiA3NyA2NiA6IG93ZmlzaC1jdHIsYmxvd2YNCjAxMTA6IDY5IDcz
IDY4IDJEIDYzIDYyIDYzIDJDICA2MyA2MSA3MyA3NCAzMSAzMiAzOCAyRCA6IGlzaC1jYmMsY2Fz
dDEyOC0NCjAxMjA6IDYzIDYyIDYzIDJDIDYxIDcyIDYzIDY2ICA2RiA3NSA3MiAzMiAzNSAzNiAy
QyA2MSA6IGNiYyxhcmNmb3VyMjU2LGENCjAxMzA6IDcyIDYzIDY2IDZGIDc1IDcyIDMxIDMyICAz
OCAyQyAzMyA2NCA2NSA3MyAyRCA2MyA6IHJjZm91cjEyOCwzZGVzLWMNCjAxNDA6IDc0IDcyIDJD
IDMzIDY0IDY1IDczIDJEICA2MyA2MiA2MyAwMCAwMCAwMCA4RiA2MSA6IHRyLDNkZXMtY2JjLi4u
LmENCjAxNTA6IDY1IDczIDMyIDM1IDM2IDJEIDYzIDc0ICA3MiAyQyA2MSA2NSA3MyAzMSAzOSAz
MiA6IGVzMjU2LWN0cixhZXMxOTINCjAxNjA6IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAz
MiAzOCAyRCA2MyA3NCA3MiAyQyA6IC1jdHIsYWVzMTI4LWN0ciwNCjAxNzA6IDYxIDY1IDczIDMy
IDM1IDM2IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzOSA6IGFlczI1Ni1jYmMsYWVzMTkN
CjAxODA6IDMyIDJEIDYzIDYyIDYzIDJDIDYxIDY1ICA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyA6
IDItY2JjLGFlczEyOC1jYmMNCjAxOTA6IDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczICA2OCAyRCA2
MyA3NCA3MiAyQyA2MiA2QyA6ICxibG93ZmlzaC1jdHIsYmwNCjAxYTA6IDZGIDc3IDY2IDY5IDcz
IDY4IDJEIDYzICA2MiA2MyAyQyA2MyA2MSA3MyA3NCAzMSA6IG93ZmlzaC1jYmMsY2FzdDENCjAx
YjA6IDMyIDM4IDJEIDYzIDYyIDYzIDJDIDYxICA3MiA2MyA2NiA2RiA3NSA3MiAzMiAzNSA6IDI4
LWNiYyxhcmNmb3VyMjUNCjAxYzA6IDM2IDJDIDYxIDcyIDYzIDY2IDZGIDc1ICA3MiAzMSAzMiAz
OCAyQyAzMyA2NCA2NSA6IDYsYXJjZm91cjEyOCwzZGUNCjAxZDA6IDczIDJEIDYzIDc0IDcyIDJD
IDMzIDY0ICA2NSA3MyAyRCA2MyA2MiA2MyAwMCAwMCA6IHMtY3RyLDNkZXMtY2JjLi4NCjAxZTA6
IDAwIDNBIDY4IDZEIDYxIDYzIDJEIDczICA2OCA2MSAzMSAyQyA2OCA2RCA2MSA2MyA6IC46aG1h
Yy1zaGExLGhtYWMNCjAxZjA6IDJEIDczIDY4IDYxIDMxIDJEIDM5IDM2ICAyQyA2OCA2RCA2MSA2
MyAyRCA2RCA2NCA6IC1zaGExLTk2LGhtYWMtbWQNCjAyMDA6IDM1IDJDIDY4IDZEIDYxIDYzIDJE
IDZEICA2NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCA6IDUsaG1hYy1tZDUtOTYsaG0NCjAyMTA6IDYx
IDYzIDJEIDcyIDY5IDcwIDY1IDZEICA2NCAzMSAzNiAzMCAwMCAwMCAwMCAzQSA6IGFjLXJpcGVt
ZDE2MC4uLjoNCjAyMjA6IDY4IDZEIDYxIDYzIDJEIDczIDY4IDYxICAzMSAyQyA2OCA2RCA2MSA2
MyAyRCA3MyA6IGhtYWMtc2hhMSxobWFjLXMNCjAyMzA6IDY4IDYxIDMxIDJEIDM5IDM2IDJDIDY4
ICA2RCA2MSA2MyAyRCA2RCA2NCAzNSAyQyA6IGhhMS05NixobWFjLW1kNSwNCjAyNDA6IDY4IDZE
IDYxIDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAyQyA2OCA2RCA2MSA2MyA6IGhtYWMtbWQ1LTk2
LGhtYWMNCjAyNTA6IDJEIDcyIDY5IDcwIDY1IDZEIDY0IDMxICAzNiAzMCAwMCAwMCAwMCAxQSA3
QSA2QyA6IC1yaXBlbWQxNjAuLi4uemwNCjAyNjA6IDY5IDYyIDQwIDZGIDcwIDY1IDZFIDczICA3
MyA2OCAyRSA2MyA2RiA2RCAyQyA3QSA6IGliQG9wZW5zc2guY29tLHoNCjAyNzA6IDZDIDY5IDYy
IDJDIDZFIDZGIDZFIDY1ICAwMCAwMCAwMCAxQSA3QSA2QyA2OSA2MiA6IGxpYixub25lLi4uLnps
aWINCjAyODA6IDQwIDZGIDcwIDY1IDZFIDczIDczIDY4ICAyRSA2MyA2RiA2RCAyQyA3QSA2QyA2
OSA6IEBvcGVuc3NoLmNvbSx6bGkNCjAyOTA6IDYyIDJDIDZFIDZGIDZFIDY1IDAwIDAwICAwMCAw
MCAwMCAwMCAwMCAwMCAwMCAwMCA6IGIsbm9uZS4uLi4uLi4uLi4NCjAyYTA6IDAwIDAwIDAwIDdF
IDQxIEFBIDE2IEU3ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLn5BLi4uDQo9PiBsaWJz
c2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDY3MCBieXRlcykNCjAwMDA6IDE0IEUzIDgyIDMy
IDZDIEVBIDI1IDk5ICBEMSBDOCBCRCBGNCAxMSBCRiAwOSA3RCA6IC4uLjJsLiUuLi4uLi4uLn0N
CjAwMTA6IEUwIDAwIDAwIDAwIDhCIDY0IDY5IDY2ICA2NiA2OSA2NSAyRCA2OCA2NSA2QyA2QyA6
IC4uLi4uZGlmZmllLWhlbGwNCjAwMjA6IDZEIDYxIDZFIDJEIDY3IDcyIDZGIDc1ICA3MCAyRCA2
NSA3OCA2MyA2OCA2MSA2RSA6IG1hbi1ncm91cC1leGNoYW4NCjAwMzA6IDY3IDY1IDJEIDczIDY4
IDYxIDMyIDM1ICAzNiAyQyA2NCA2OSA2NiA2NiA2OSA2NSA6IGdlLXNoYTI1NixkaWZmaWUNCjAw
NDA6IDJEIDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAyRCA2NSA6IC1o
ZWxsbWFuLWdyb3VwLWUNCjAwNTA6IDc4IDYzIDY4IDYxIDZFIDY3IDY1IDJEICA3MyA2OCA2MSAz
MSAyQyA2NCA2OSA2NiA6IHhjaGFuZ2Utc2hhMSxkaWYNCjAwNjA6IDY2IDY5IDY1IDJEIDY4IDY1
IDZDIDZDICA2RCA2MSA2RSAyRCA2NyA3MiA2RiA3NSA6IGZpZS1oZWxsbWFuLWdyb3UNCjAwNzA6
IDcwIDMxIDM0IDJEIDczIDY4IDYxIDMxICAyQyA2NCA2OSA2NiA2NiA2OSA2NSAyRCA6IHAxNC1z
aGExLGRpZmZpZS0NCjAwODA6IDY4IDY1IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3
MCAzMSAyRCA3MyA6IGhlbGxtYW4tZ3JvdXAxLXMNCjAwOTA6IDY4IDYxIDMxIDJDIDcyIDczIDYx
IDMxICAzMCAzMiAzNCAyRCA3MyA2OCA2MSAzMSA6IGhhMSxyc2ExMDI0LXNoYTENCjAwYTA6IDAw
IDAwIDAwIDBGIDczIDczIDY4IDJEICA3MiA3MyA2MSAyQyA3MyA3MyA2OCAyRCA6IC4uLi5zc2gt
cnNhLHNzaC0NCjAwYjA6IDY0IDczIDczIDAwIDAwIDAwIDhGIDYxICA2NSA3MyAzMiAzNSAzNiAy
RCA2MyA3NCA6IGRzcy4uLi5hZXMyNTYtY3QNCjAwYzA6IDcyIDJDIDYxIDY1IDczIDMxIDM5IDMy
ICAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyA6IHIsYWVzMTkyLWN0cixhZXMNCjAwZDA6IDMxIDMy
IDM4IDJEIDYzIDc0IDcyIDJDICA2MSA2NSA3MyAzMiAzNSAzNiAyRCA2MyA6IDEyOC1jdHIsYWVz
MjU2LWMNCjAwZTA6IDYyIDYzIDJDIDYxIDY1IDczIDMxIDM5ICAzMiAyRCA2MyA2MiA2MyAyQyA2
MSA2NSA6IGJjLGFlczE5Mi1jYmMsYWUNCjAwZjA6IDczIDMxIDMyIDM4IDJEIDYzIDYyIDYzICAy
QyA2MiA2QyA2RiA3NyA2NiA2OSA3MyA6IHMxMjgtY2JjLGJsb3dmaXMNCjAxMDA6IDY4IDJEIDYz
IDc0IDcyIDJDIDYyIDZDICA2RiA3NyA2NiA2OSA3MyA2OCAyRCA2MyA6IGgtY3RyLGJsb3dmaXNo
LWMNCjAxMTA6IDYyIDYzIDJDIDYzIDYxIDczIDc0IDMxICAzMiAzOCAyRCA2MyA2MiA2MyAyQyA2
MSA6IGJjLGNhc3QxMjgtY2JjLGENCjAxMjA6IDcyIDYzIDY2IDZGIDc1IDcyIDMyIDM1ICAzNiAy
QyA2MSA3MiA2MyA2NiA2RiA3NSA6IHJjZm91cjI1NixhcmNmb3UNCjAxMzA6IDcyIDMxIDMyIDM4
IDJDIDMzIDY0IDY1ICA3MyAyRCA2MyA3NCA3MiAyQyAzMyA2NCA6IHIxMjgsM2Rlcy1jdHIsM2QN
CjAxNDA6IDY1IDczIDJEIDYzIDYyIDYzIDAwIDAwICAwMCA4RiA2MSA2NSA3MyAzMiAzNSAzNiA6
IGVzLWNiYy4uLi5hZXMyNTYNCjAxNTA6IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAz
MiAyRCA2MyA3NCA3MiAyQyA6IC1jdHIsYWVzMTkyLWN0ciwNCjAxNjA6IDYxIDY1IDczIDMxIDMy
IDM4IDJEIDYzICA3NCA3MiAyQyA2MSA2NSA3MyAzMiAzNSA6IGFlczEyOC1jdHIsYWVzMjUNCjAx
NzA6IDM2IDJEIDYzIDYyIDYzIDJDIDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA2MiA2MyA6IDYt
Y2JjLGFlczE5Mi1jYmMNCjAxODA6IDJDIDYxIDY1IDczIDMxIDMyIDM4IDJEICA2MyA2MiA2MyAy
QyA2MiA2QyA2RiA3NyA6ICxhZXMxMjgtY2JjLGJsb3cNCjAxOTA6IDY2IDY5IDczIDY4IDJEIDYz
IDc0IDcyICAyQyA2MiA2QyA2RiA3NyA2NiA2OSA3MyA6IGZpc2gtY3RyLGJsb3dmaXMNCjAxYTA6
IDY4IDJEIDYzIDYyIDYzIDJDIDYzIDYxICA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiA6IGgtY2Jj
LGNhc3QxMjgtY2INCjAxYjA6IDYzIDJDIDYxIDcyIDYzIDY2IDZGIDc1ICA3MiAzMiAzNSAzNiAy
QyA2MSA3MiA2MyA6IGMsYXJjZm91cjI1NixhcmMNCjAxYzA6IDY2IDZGIDc1IDcyIDMxIDMyIDM4
IDJDICAzMyA2NCA2NSA3MyAyRCA2MyA3NCA3MiA6IGZvdXIxMjgsM2Rlcy1jdHINCjAxZDA6IDJD
IDMzIDY0IDY1IDczIDJEIDYzIDYyICA2MyAwMCAwMCAwMCAzQSA2OCA2RCA2MSA6ICwzZGVzLWNi
Yy4uLjpobWENCjAxZTA6IDYzIDJEIDczIDY4IDYxIDMxIDJDIDY4ICA2RCA2MSA2MyAyRCA3MyA2
OCA2MSAzMSA6IGMtc2hhMSxobWFjLXNoYTENCjAxZjA6IDJEIDM5IDM2IDJDIDY4IDZEIDYxIDYz
ICAyRCA2RCA2NCAzNSAyQyA2OCA2RCA2MSA6IC05NixobWFjLW1kNSxobWENCjAyMDA6IDYzIDJE
IDZEIDY0IDM1IDJEIDM5IDM2ICAyQyA2OCA2RCA2MSA2MyAyRCA3MiA2OSA6IGMtbWQ1LTk2LGht
YWMtcmkNCjAyMTA6IDcwIDY1IDZEIDY0IDMxIDM2IDMwIDAwICAwMCAwMCAzQSA2OCA2RCA2MSA2
MyAyRCA6IHBlbWQxNjAuLi46aG1hYy0NCjAyMjA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2
MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6IHNoYTEsaG1hYy1zaGExLTkNCjAyMzA6IDM2IDJDIDY4
IDZEIDYxIDYzIDJEIDZEICA2NCAzNSAyQyA2OCA2RCA2MSA2MyAyRCA6IDYsaG1hYy1tZDUsaG1h
Yy0NCjAyNDA6IDZEIDY0IDM1IDJEIDM5IDM2IDJDIDY4ICA2RCA2MSA2MyAyRCA3MiA2OSA3MCA2
NSA6IG1kNS05NixobWFjLXJpcGUNCjAyNTA6IDZEIDY0IDMxIDM2IDMwIDAwIDAwIDAwICAxQSA3
QSA2QyA2OSA2MiA0MCA2RiA3MCA6IG1kMTYwLi4uLnpsaWJAb3ANCjAyNjA6IDY1IDZFIDczIDcz
IDY4IDJFIDYzIDZGICA2RCAyQyA3QSA2QyA2OSA2MiAyQyA2RSA6IGVuc3NoLmNvbSx6bGliLG4N
CjAyNzA6IDZGIDZFIDY1IDAwIDAwIDAwIDFBIDdBICA2QyA2OSA2MiA0MCA2RiA3MCA2NSA2RSA6
IG9uZS4uLi56bGliQG9wZW4NCjAyODA6IDczIDczIDY4IDJFIDYzIDZGIDZEIDJDICA3QSA2QyA2
OSA2MiAyQyA2RSA2RiA2RSA6IHNzaC5jb20semxpYixub24NCjAyOTA6IDY1IDAwIDAwIDAwIDAw
IDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAgICAgICA6IGUuLi4uLi4uLi4uLi4uDQpbbGli
c3NoMl0gMC4yMDc2MjIgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3Ro
PTY3MA0KW2xpYnNzaDJdIDAuMjA3NjIyIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m
IHR5cGU6IDIwDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4OiBBZ3JlZWQgb24gS0VYIG1ldGhv
ZDogZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGExDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4
OiBBZ3JlZWQgb24gSE9TVEtFWSBtZXRob2Q6IHNzaC1yc2ENCltsaWJzc2gyXSAwLjIwNzYyMiBL
ZXkgRXg6IEFncmVlZCBvbiBDUllQVF9DUyBtZXRob2Q6IGFlczEyOC1jdHINCltsaWJzc2gyXSAw
LjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczEyOC1jdHINClts
aWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBNQUNfQ1MgbWV0aG9kOiBobWFjLXNo
YTENCltsaWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBNQUNfU0MgbWV0aG9kOiBo
bWFjLXNoYTENCltsaWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBDT01QX0NTIG1l
dGhvZDogbm9uZQ0KW2xpYnNzaDJdIDAuMjA3NjIyIEtleSBFeDogQWdyZWVkIG9uIENPTVBfU0Mg
bWV0aG9kOiBub25lDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4OiBJbml0aWF0aW5nIERpZmZp
ZS1IZWxsbWFuIEdyb3VwMTQgS2V5IEV4Y2hhbmdlDQpbbGlic3NoMl0gMC4yMDk2MjMgS2V5IEV4
OiBTZW5kaW5nIEtFWCBwYWNrZXQgMzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWlu
ICgyNjIgYnl0ZXMpDQowMDAwOiAxRSAwMCAwMCAwMSAwMSAwMCBDNyA1NCAgMkEgNTQgN0QgODgg
MjMgMDMgNTIgNkYgOiAuLi4uLi4uVCpUfS4jLlJvDQowMDEwOiBENyA4MiBDOCBCNiBBQSA5QyAy
RCBBNSAgMUMgOUMgNDYgQkYgMDIgMzcgRTEgNTcgOiAuLi4uLi4tLi4uRi4uNy5XDQowMDIwOiAz
QiBDNCAyNSAyQiA0NyA5NiBFQyAyMiAgQTcgMEEgQUIgRDYgRjYgNkUgOTUgNkEgOiA7LiUrRy4u
Ii4uLi4ubi5qDQowMDMwOiBBMSAxQyA3QiA1MSBCQiAwQSA1MyA2MSAgNTUgOTEgQTggQzQgOEYg
ODUgMUEgOTcgOiAuLntRLi5TYVUuLi4uLi4uDQowMDQwOiA2QiA5MyA1QyA4NyBEQiBFNiBENyBC
MyAgQzAgNjUgMDEgOEYgMEQgQTkgMTEgNzMgOiBrLlwuLi4uLi5lLi4uLi5zDQowMDUwOiBERCAz
QSAwOCA2RCBCRSA3MSA0NSA4MyAgRDUgMjcgNjYgQUMgRkYgNDkgMTkgMDAgOiAuOi5tLnFFLi4n
Zi4uSS4uDQowMDYwOiBGRiBEQyAwQyBFRCA5OCAzMCBEMyA1RiAgMUUgOTMgNDYgRTQgNDUgNjcg
RUYgQkUgOiAuLi4uLjAuXy4uRi5FZy4uDQowMDcwOiAzNiAwMiA4QSA0QSBGRiBEMyAyOCA1MCAg
QkIgMTYgOEEgQkIgMTUgRjkgMzggMzYgOiA2Li5KLi4oUC4uLi4uLjg2DQowMDgwOiA0MiBCQSA0
NiBEMCBGMiA1MiA0QyBBNCAgQkQgQkEgQzggMUQgMzAgMUUgRDUgODUgOiBCLkYuLlJMLi4uLi4w
Li4uDQowMDkwOiAwRCBBNiA3MCAxRCAzQyA1RiBFRiA2QiAgQjcgRUYgMDMgRTEgNEEgRjggNkQg
QUYgOiAuLnAuPF8uay4uLi5KLm0uDQowMGEwOiBBMiA3RiBDMiAzQSA5RSA5OCA3RCAzNCAgMzUg
QjggMTcgQTQgMDcgMzcgRjQgRDUgOiAuLi46Li59NDUuLi4uNy4uDQowMGIwOiAxRiA4MSAxMyBF
RiBDMSA0RiBDOCA2NiAgN0YgNUIgNzkgMkIgRjcgN0YgRDEgOEYgOiAuLi4uLk8uZi5beSsuLi4u
DQowMGMwOiBFRiBCMCA5NSAwQyA3NCBFNSA5NSA2QiAgNEEgRTUgRDggODUgQUIgQjAgQzQgOUUg
OiAuLi4udC4ua0ouLi4uLi4uDQowMGQwOiBCMSA2MyAzNyBGRCBFMiAzNyA0NCA0OCAgNzQgQTYg
RDkgRjUgNTggNkUgMUQgOTAgOiAuYzcuLjdESHQuLi5Ybi4uDQowMGUwOiBGOCBGRCBFQSA5RCA2
MiBGRCA3OCBCNyAgNTUgNUUgQ0YgODMgRTkgMTggQUUgMUQgOiAuLi4uYi54LlVeLi4uLi4uDQow
MGYwOiAxNiA3MCAzRiAyMiA2MyAxNCAwMiA1NiAgQ0UgMTQgOTIgNDQgQjQgNDMgRTUgMTcgOiAu
cD8iYy4uVi4uLkQuQy4uDQowMTAwOiA4QSBFNyA1QyA3NyAxMSAyOSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAuLlx3LikNCltsaWJzc2gyXSAwLjIwOTYyMyBTb2NrZXQ6IFNlbnQg
NTEyLzUxMiBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2Vu
ZCgpICg1MTIgYnl0ZXMpDQowMDAwOiAwMCAwMCAwMSBGQyBGNSAxRSAwMCAwMCAgMDEgMDEgMDAg
QzcgNTQgMkEgNTQgN0QgOiAuLi4uLi4uLi4uLi5UKlR9DQowMDEwOiA4OCAyMyAwMyA1MiA2RiBE
NyA4MiBDOCAgQjYgQUEgOUMgMkQgQTUgMUMgOUMgNDYgOiAuIy5Sby4uLi4uLi0uLi5GDQowMDIw
OiBCRiAwMiAzNyBFMSA1NyAzQiBDNCAyNSAgMkIgNDcgOTYgRUMgMjIgQTcgMEEgQUIgOiAuLjcu
VzsuJStHLi4iLi4uDQowMDMwOiBENiBGNiA2RSA5NSA2QSBBMSAxQyA3QiAgNTEgQkIgMEEgNTMg
NjEgNTUgOTEgQTggOiAuLm4uai4ue1EuLlNhVS4uDQowMDQwOiBDNCA4RiA4NSAxQSA5NyA2QiA5
MyA1QyAgODcgREIgRTYgRDcgQjMgQzAgNjUgMDEgOiAuLi4uLmsuXC4uLi4uLmUuDQowMDUwOiA4
RiAwRCBBOSAxMSA3MyBERCAzQSAwOCAgNkQgQkUgNzEgNDUgODMgRDUgMjcgNjYgOiAuLi4ucy46
Lm0ucUUuLidmDQowMDYwOiBBQyBGRiA0OSAxOSAwMCBGRiBEQyAwQyAgRUQgOTggMzAgRDMgNUYg
MUUgOTMgNDYgOiAuLkkuLi4uLi4uMC5fLi5GDQowMDcwOiBFNCA0NSA2NyBFRiBCRSAzNiAwMiA4
QSAgNEEgRkYgRDMgMjggNTAgQkIgMTYgOEEgOiAuRWcuLjYuLkouLihQLi4uDQowMDgwOiBCQiAx
NSBGOSAzOCAzNiA0MiBCQSA0NiAgRDAgRjIgNTIgNEMgQTQgQkQgQkEgQzggOiAuLi44NkIuRi4u
UkwuLi4uDQowMDkwOiAxRCAzMCAxRSBENSA4NSAwRCBBNiA3MCAgMUQgM0MgNUYgRUYgNkIgQjcg
RUYgMDMgOiAuMC4uLi4ucC48Xy5rLi4uDQowMGEwOiBFMSA0QSBGOCA2RCBBRiBBMiA3RiBDMiAg
M0EgOUUgOTggN0QgMzQgMzUgQjggMTcgOiAuSi5tLi4uLjouLn00NS4uDQowMGIwOiBBNCAwNyAz
NyBGNCBENSAxRiA4MSAxMyAgRUYgQzEgNEYgQzggNjYgN0YgNUIgNzkgOiAuLjcuLi4uLi4uTy5m
Llt5DQowMGMwOiAyQiBGNyA3RiBEMSA4RiBFRiBCMCA5NSAgMEMgNzQgRTUgOTUgNkIgNEEgRTUg
RDggOiArLi4uLi4uLi50Li5rSi4uDQowMGQwOiA4NSBBQiBCMCBDNCA5RSBCMSA2MyAzNyAgRkQg
RTIgMzcgNDQgNDggNzQgQTYgRDkgOiAuLi4uLi5jNy4uN0RIdC4uDQowMGUwOiBGNSA1OCA2RSAx
RCA5MCBGOCBGRCBFQSAgOUQgNjIgRkQgNzggQjcgNTUgNUUgQ0YgOiAuWG4uLi4uLi5iLnguVV4u
DQowMGYwOiA4MyBFOSAxOCBBRSAxRCAxNiA3MCAzRiAgMjIgNjMgMTQgMDIgNTYgQ0UgMTQgOTIg
OiAuLi4uLi5wPyJjLi5WLi4uDQowMTAwOiA0NCBCNCA0MyBFNSAxNyA4QSBFNyA1QyAgNzcgMTEg
MjkgRjYgNzEgQjUgQjEgMEQgOiBELkMuLi4uXHcuKS5xLi4uDQowMTEwOiA2MiBBQiBCRSBFNCA2
NiBEQyAyQiA2MSAgMDEgQTIgNzIgQ0YgM0YgREIgRTMgMTcgOiBiLi4uZi4rYS4uci4/Li4uDQow
MTIwOiBENCA3MCAwMSAxNiAwNyBBQSA2NSBBRCAgMkEgOEEgQ0YgQUUgOUEgNzAgOUMgNTUgOiAu
cC4uLi5lLiouLi4ucC5VDQowMTMwOiAwQyA2MCA5NSBGRCA2NyBDQSBBMyAyNyAgMUEgNTUgQjUg
M0IgNzIgMjcgODMgMEEgOiAuYC4uZy4uJy5VLjtyJy4uDQowMTQwOiBDNiBBRiAzRiAxRSBGNiA0
NCBFRCAyRSAgMEYgODkgQTEgM0MgOTYgM0IgOUUgQ0UgOiAuLj8uLkQuLi4uLjwuOy4uDQowMTUw
OiA5QiA3OCA0QyBBNyA2QiA1MyBFNSBGNCAgNDAgNDggOTYgMEYgRTcgNTYgNTMgQzQgOiAueEwu
a1MuLkBILi4uVlMuDQowMTYwOiBGOCBBRCA1NCA5MyAwOCA3NSAzRSAxMCAgM0QgRDggMDkgNTIg
MkYgQzQgQkUgOEUgOiAuLlQuLnU+Lj0uLlIvLi4uDQowMTcwOiA4NCA5MyA5QSA0QSA5MCBGOCBB
NSA4NiAgQjIgMzAgMTkgRkQgQjAgREUgOUEgNTkgOiAuLi5KLi4uLi4wLi4uLi5ZDQowMTgwOiBF
QiBBQiBGNCA0NyA0NSBGQSBENCBGNSAgOUMgM0UgRDEgQjggNUEgNkUgMTYgMjAgOiAuLi5HRS4u
Li4+Li5abi4gDQowMTkwOiBGMyA3QiAwNyBCNyA4RSAyQyAwOCBEMCAgRTIgM0UgODEgNkYgODAg
NTQgNDEgNTAgOiAuey4uLiwuLi4+Lm8uVEFQDQowMWEwOiAxRiA3QyA5OSA2OCA3QiAwRCBFRiAy
MyAgM0MgN0EgRDQgOTggQUIgQjQgRDEgNUYgOiAufC5oey4uIzx6Li4uLi5fDQowMWIwOiA0RCA2
MiBBQyA0OSA4RSA4NyA0RiBFRCAgNkQgQzggMEEgNEIgQTEgNzMgQ0MgMjUgOiBNYi5JLi5PLm0u
Lksucy4lDQowMWMwOiBENyAxRCBCRSA5NCBCNiAyNSA5NCBGNiAgNUUgMzYgMkQgQjcgRTQgMzkg
MDcgOTUgOiAuLi4uLiUuLl42LS4uOS4uDQowMWQwOiBENCBGRSBEOCAwRCBENyBDOCA1NCA4RSAg
NEUgOUMgNTMgRUIgNkYgN0QgNzEgRDEgOiAuLi4uLi5ULk4uUy5vfXEuDQowMWUwOiBFMSAzRiBD
NyBDNiA2MCA0NyAwRiAyRiAgNjggNjcgM0IgQkMgODUgOTAgRjMgNTMgOiAuPy4uYEcuL2hnOy4u
Li5TDQowMWYwOiAxNiAyMyA3NCBBQyA5RiAzQiBCNyBBOCAgQ0IgNDUgMTAgRkYgMzYgRjUgOUMg
NjQgOiAuI3QuLjsuLi5FLi42Li5kDQpbbGlic3NoMl0gMC4yMDk2MjMgVHJhbnNwb3J0OiBMb29r
aW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMzENCltsaWJzc2gyXSAwLjIwOTYyMyBGYWlsdXJlIEV2
ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQpbbGlic3NoMl0g
MC4zMDI2MjggU29ja2V0OiBSZWN2ZWQgNTc2LzE2Mzg0IGJ5dGVzIHRvIDAwNUZFRDY4KzANCj0+
IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcgKDU3NiBieXRlcykNCjAwMDA6IDAwIDAwIDAy
IDNDIDA5IDFGIDAwIDAwICAwMCA5NSAwMCAwMCAwMCAwNyA3MyA3MyA6IC4uLjwuLi4uLi4uLi4u
c3MNCjAwMTA6IDY4IDJEIDcyIDczIDYxIDAwIDAwIDAwICAwMSAyMyAwMCAwMCAwMCA4MSAwMCA5
OSA6IGgtcnNhLi4uLiMuLi4uLi4NCjAwMjA6IDFBIEU2IDgyIDEzIDA3IDAwIEU2IDg2ICAzRSA2
NCA0NSBEQSA5NyA2OCA0NSAxQSA6IC4uLi4uLi4uPmRFLi5oRS4NCjAwMzA6IENEIDI3IEEzIDVG
IDdFIDRDIENEIDk4ICBBRiAyOSBDQSBFQSA2QyAwNSA0RiAyNyA6IC4nLl9+TC4uLikuLmwuTycN
CjAwNDA6IEFDIDQwIEVGIEM5IEIzIDhDIDgyIENGICBGQyA5QyAwNSA1MyA4RCA5MiA3OCA0NyA6
IC5ALi4uLi4uLi4uUy4ueEcNCjAwNTA6IDlFIDU1IDcyIDgwIDQ0IDJCIDRFIDQ4ICA3RSA1QyA1
RCA4NSA0MSA3OSBGMCAwQiA6IC5Vci5EK05IflxdLkF5Li4NCjAwNjA6IEE0IEUxIDJEIEMwIEM0
IDlEIDExIDM5ICA0QiAzMiA5MiAxQiBDNCAyMCA3RCAyMCA6IC4uLS4uLi45SzIuLi4gfSANCjAw
NzA6IDQ2IDJGIDcwIDE0IDUwIDYwIDdEIDY1ICBEMiAwMyA5RCA2RCAyMyBBQyBDRiA0QiA6IEYv
cC5QYH1lLi4ubSMuLksNCjAwODA6IDFDIDg4IDc2IEUzIDVDIDBGIDU2IEQzICBBRSBDNyAyNCA5
QSBFMyBDMiAwRSBGNyA6IC4udi5cLlYuLi4kLi4uLi4NCjAwOTA6IDQ5IDgyIDFEIDREIEM0IEEw
IDYwIEE3ICAzNyAwMyA2RCBBRSAxOSBDOSA0OSAwMCA6IEkuLk0uLmAuNy5tLi4uSS4NCjAwYTA6
IDAwIDAxIDAxIDAwIEY0IEVDIERCIEQxICA4RiA1QSA1OSAwNSA0QyAxRSAwMiAzRCA6IC4uLi4u
Li4uLlpZLkwuLj0NCjAwYjA6IDk5IDQ1IDI2IDdGIDYwIDBFIDNFIDc4ICA4QSA5QyAwMCA2OSA1
RSBFOCAzMiAyRiA6IC5FJi5gLj54Li4uaV4uMi8NCjAwYzA6IEI5IEVEIDIxIDQ5IDFGIDVEIDE3
IDNCICAyRiAzQiBBNyAzRSBBQSA3OSBGNSA5RiA6IC4uIUkuXS47LzsuPi55Li4NCjAwZDA6IDk3
IDE1IDQ4IDg3IEQ5IEY2IEIxIEE5ICAxMCBDOSBDMyA4NSAzNyAwNSAzQSBBQiA6IC4uSC4uLi4u
Li4uLjcuOi4NCjAwZTA6IDdEIDYwIDA2IDk3IDI4IDU1IDVDIEVBICBCOCBBRiAyQyBBNyBGOCA2
QSAzMyBGMCA6IH1gLi4oVVwuLi4sLi5qMy4NCjAwZjA6IEQyIDM3IEM3IDI5IDlFIDExIEE5IDEz
ICBCNiA1MSBENCBFNiAwOSA1RSAyRSBFNCA6IC43LikuLi4uLlEuLi5eLi4NCjAxMDA6IDU3IDUw
IDI4IEZDIDY2IDkwIDU2IEQ4ICA2QiBBRiBERiBFRCA2OCBBRCBDNiA4OCA6IFdQKC5mLlYuay4u
LmguLi4NCjAxMTA6IDNGIEU0IEFGIDBEIEREIENEIENBIEU0ICBGRSAwQiBGQSA1NyA3NSA1QSBB
QiA0QyA6ID8uLi4uLi4uLi4uV3VaLkwNCjAxMjA6IDhBIDIyIDJEIDA0IEI4IDEzIEQ2IDMyICA3
MSAwQiA1NiBEQiAzNSA2MSBBQyBENiA6IC4iLS4uLi4ycS5WLjVhLi4NCjAxMzA6IDk4IEJGIDBG
IDdFIDAxIDI4IEVBIDgzICA1QyA1RCAyOCBCOCA1OCA4MiA2RSBDMSA6IC4uLn4uKC4uXF0oLlgu
bi4NCjAxNDA6IDU2IEI2IDE3IDYwIDdDIDczIEEyIENCICBDRCAzNiBFNCA0QiBCRSA5NyBGRiA5
NiA6IFYuLmB8cy4uLjYuSy4uLi4NCjAxNTA6IDg5IDU3IEIyIDIzIDU0IEY2IDYxIEFFICBBNyA4
QSA2QiBDMyA2QSA4QiA5QiBDOCA6IC5XLiNULmEuLi5rLmouLi4NCjAxNjA6IEQxIEI2IERBIEI4
IDYzIDk0IDA5IDA4ICA2OSBCRiBDOCBENCAyRCA0NiA3QiA5OSA6IC4uLi5jLi4uaS4uLi1Gey4N
CjAxNzA6IDEyIDlEIDJFIDMzIEQ4IDE5IDFFIDI3ICBCNyAzNiAwQiBGQSAyMSA3MSBCMCA2NiA6
IC4uLjMuLi4nLjYuLiFxLmYNCjAxODA6IDFGIEREIDQzIDU3IEU0IDI3IEIzIDM0ICBFRiAzRSBD
OSA5MyBDRiBBMyAyOSA5OCA6IC4uQ1cuJy40Lj4uLi4uKS4NCjAxOTA6IENFIDgxIENCIDA4IDk2
IDY1IDg0IDNEICBDNyBDOSA2NCBFRSA3QiBBQiBGRSBERSA6IC4uLi4uZS49Li5kLnsuLi4NCjAx
YTA6IDM1IDRGIDEzIDA5IDAwIDAwIDAwIDhGICAwMCAwMCAwMCAwNyA3MyA3MyA2OCAyRCA6IDVP
Li4uLi4uLi4uLnNzaC0NCjAxYjA6IDcyIDczIDYxIDAwIDAwIDAwIDgwIDBEICAxRSA3MyAyNCA3
MiAzRiAyRSAzRCA4MCA6IHJzYS4uLi4uLnMkcj8uPS4NCjAxYzA6IDgyIDg3IEFBIEY5IDNDIDBD
IDc0IDI5ICAzRSAzMyA5NSAxMCBCMSBBMiAxRSBEMyA6IC4uLi48LnQpPjMuLi4uLi4NCjAxZDA6
IEM5IDQwIDFEIDhEIDdCIEQ4IDY3IDRGICBDRCBBNyBBNyAxOCBBQyBDQiA2OSBBNyA6IC5ALi57
LmdPLi4uLi4uaS4NCjAxZTA6IEM5IDEzIDkzIDEwIDc5IEM0IDlCIDlGICBGRCAyMyA0NyBGMyAz
NCA5RSBBMiAyOSA6IC4uLi55Li4uLiNHLjQuLikNCjAxZjA6IEE3IEZFIEE0IEVEIDI0IDRGIDcz
IDQ1ICBGRSAwQiAxRCBEMSAyQiAwOSA5NCA3RSA6IC4uLi4kT3NFLi4uLisuLn4NCjAyMDA6IDQ4
IEMwIDFBIDAyIEEwIDY1IEM2IEVGICAzNCBDMiA0NyBFOCA3QiAyOSA2MCBFRiA6IEguLi4uZS4u
NC5HLnspYC4NCjAyMTA6IDVFIDQ2IEY5IEZBIDk2IDBCIDlDIDUyICA5OSA2RiAwQSA0MiBDQyA2
RCA4MCBCMyA6IF5GLi4uLi5SLm8uQi5tLi4NCjAyMjA6IDAwIDIzIEQ2IDA0IDA0IDVFIDk2IEIx
ICBDNyAyNyA4QiBBNiBFMSAyMiBFNyAzQyA6IC4jLi4uXi4uLicuLi4iLjwNCjAyMzA6IDAwIDAx
IEU4IEFGIDNGIERCIEM5IDM2ICAwMyA5NCAzRiBGMCAwMSA2MCBCQSBBNiA6IC4uLi4/Li42Li4/
Li5gLi4NCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNTYyIGJ5dGVzKQ0KMDAw
MDogMUYgMDAgMDAgMDAgOTUgMDAgMDAgMDAgIDA3IDczIDczIDY4IDJEIDcyIDczIDYxIDogLi4u
Li4uLi4uc3NoLXJzYQ0KMDAxMDogMDAgMDAgMDAgMDEgMjMgMDAgMDAgMDAgIDgxIDAwIDk5IDFB
IEU2IDgyIDEzIDA3IDogLi4uLiMuLi4uLi4uLi4uLg0KMDAyMDogMDAgRTYgODYgM0UgNjQgNDUg
REEgOTcgIDY4IDQ1IDFBIENEIDI3IEEzIDVGIDdFIDogLi4uPmRFLi5oRS4uJy5ffg0KMDAzMDog
NEMgQ0QgOTggQUYgMjkgQ0EgRUEgNkMgIDA1IDRGIDI3IEFDIDQwIEVGIEM5IEIzIDogTC4uLiku
LmwuTycuQC4uLg0KMDA0MDogOEMgODIgQ0YgRkMgOUMgMDUgNTMgOEQgIDkyIDc4IDQ3IDlFIDU1
IDcyIDgwIDQ0IDogLi4uLi4uUy4ueEcuVXIuRA0KMDA1MDogMkIgNEUgNDggN0UgNUMgNUQgODUg
NDEgIDc5IEYwIDBCIEE0IEUxIDJEIEMwIEM0IDogK05IflxdLkF5Li4uLi0uLg0KMDA2MDogOUQg
MTEgMzkgNEIgMzIgOTIgMUIgQzQgIDIwIDdEIDIwIDQ2IDJGIDcwIDE0IDUwIDogLi45SzIuLi4g
fSBGL3AuUA0KMDA3MDogNjAgN0QgNjUgRDIgMDMgOUQgNkQgMjMgIEFDIENGIDRCIDFDIDg4IDc2
IEUzIDVDIDogYH1lLi4ubSMuLksuLnYuXA0KMDA4MDogMEYgNTYgRDMgQUUgQzcgMjQgOUEgRTMg
IEMyIDBFIEY3IDQ5IDgyIDFEIDREIEM0IDogLlYuLi4kLi4uLi5JLi5NLg0KMDA5MDogQTAgNjAg
QTcgMzcgMDMgNkQgQUUgMTkgIEM5IDQ5IDAwIDAwIDAxIDAxIDAwIEY0IDogLmAuNy5tLi4uSS4u
Li4uLg0KMDBhMDogRUMgREIgRDEgOEYgNUEgNTkgMDUgNEMgIDFFIDAyIDNEIDk5IDQ1IDI2IDdG
IDYwIDogLi4uLlpZLkwuLj0uRSYuYA0KMDBiMDogMEUgM0UgNzggOEEgOUMgMDAgNjkgNUUgIEU4
IDMyIDJGIEI5IEVEIDIxIDQ5IDFGIDogLj54Li4uaV4uMi8uLiFJLg0KMDBjMDogNUQgMTcgM0Ig
MkYgM0IgQTcgM0UgQUEgIDc5IEY1IDlGIDk3IDE1IDQ4IDg3IEQ5IDogXS47LzsuPi55Li4uLkgu
Lg0KMDBkMDogRjYgQjEgQTkgMTAgQzkgQzMgODUgMzcgIDA1IDNBIEFCIDdEIDYwIDA2IDk3IDI4
IDogLi4uLi4uLjcuOi59YC4uKA0KMDBlMDogNTUgNUMgRUEgQjggQUYgMkMgQTcgRjggIDZBIDMz
IEYwIEQyIDM3IEM3IDI5IDlFIDogVVwuLi4sLi5qMy4uNy4pLg0KMDBmMDogMTEgQTkgMTMgQjYg
NTEgRDQgRTYgMDkgIDVFIDJFIEU0IDU3IDUwIDI4IEZDIDY2IDogLi4uLlEuLi5eLi5XUCguZg0K
MDEwMDogOTAgNTYgRDggNkIgQUYgREYgRUQgNjggIEFEIEM2IDg4IDNGIEU0IEFGIDBEIEREIDog
LlYuay4uLmguLi4/Li4uLg0KMDExMDogQ0QgQ0EgRTQgRkUgMEIgRkEgNTcgNzUgIDVBIEFCIDRD
IDhBIDIyIDJEIDA0IEI4IDogLi4uLi4uV3VaLkwuIi0uLg0KMDEyMDogMTMgRDYgMzIgNzEgMEIg
NTYgREIgMzUgIDYxIEFDIEQ2IDk4IEJGIDBGIDdFIDAxIDogLi4ycS5WLjVhLi4uLi5+Lg0KMDEz
MDogMjggRUEgODMgNUMgNUQgMjggQjggNTggIDgyIDZFIEMxIDU2IEI2IDE3IDYwIDdDIDogKC4u
XF0oLlgubi5WLi5gfA0KMDE0MDogNzMgQTIgQ0IgQ0QgMzYgRTQgNEIgQkUgIDk3IEZGIDk2IDg5
IDU3IEIyIDIzIDU0IDogcy4uLjYuSy4uLi4uVy4jVA0KMDE1MDogRjYgNjEgQUUgQTcgOEEgNkIg
QzMgNkEgIDhCIDlCIEM4IEQxIEI2IERBIEI4IDYzIDogLmEuLi5rLmouLi4uLi4uYw0KMDE2MDog
OTQgMDkgMDggNjkgQkYgQzggRDQgMkQgIDQ2IDdCIDk5IDEyIDlEIDJFIDMzIEQ4IDogLi4uaS4u
Li1Gey4uLi4zLg0KMDE3MDogMTkgMUUgMjcgQjcgMzYgMEIgRkEgMjEgIDcxIEIwIDY2IDFGIERE
IDQzIDU3IEU0IDogLi4nLjYuLiFxLmYuLkNXLg0KMDE4MDogMjcgQjMgMzQgRUYgM0UgQzkgOTMg
Q0YgIEEzIDI5IDk4IENFIDgxIENCIDA4IDk2IDogJy40Lj4uLi4uKS4uLi4uLg0KMDE5MDogNjUg
ODQgM0QgQzcgQzkgNjQgRUUgN0IgIEFCIEZFIERFIDM1IDRGIDEzIDA5IDAwIDogZS49Li5kLnsu
Li41Ty4uLg0KMDFhMDogMDAgMDAgOEYgMDAgMDAgMDAgMDcgNzMgIDczIDY4IDJEIDcyIDczIDYx
IDAwIDAwIDogLi4uLi4uLnNzaC1yc2EuLg0KMDFiMDogMDAgODAgMEQgMUUgNzMgMjQgNzIgM0Yg
IDJFIDNEIDgwIDgyIDg3IEFBIEY5IDNDIDogLi4uLnMkcj8uPS4uLi4uPA0KMDFjMDogMEMgNzQg
MjkgM0UgMzMgOTUgMTAgQjEgIEEyIDFFIEQzIEM5IDQwIDFEIDhEIDdCIDogLnQpPjMuLi4uLi4u
QC4uew0KMDFkMDogRDggNjcgNEYgQ0QgQTcgQTcgMTggQUMgIENCIDY5IEE3IEM5IDEzIDkzIDEw
IDc5IDogLmdPLi4uLi4uaS4uLi4ueQ0KMDFlMDogQzQgOUIgOUYgRkQgMjMgNDcgRjMgMzQgIDlF
IEEyIDI5IEE3IEZFIEE0IEVEIDI0IDogLi4uLiNHLjQuLikuLi4uJA0KMDFmMDogNEYgNzMgNDUg
RkUgMEIgMUQgRDEgMkIgIDA5IDk0IDdFIDQ4IEMwIDFBIDAyIEEwIDogT3NFLi4uLisuLn5ILi4u
Lg0KMDIwMDogNjUgQzYgRUYgMzQgQzIgNDcgRTggN0IgIDI5IDYwIEVGIDVFIDQ2IEY5IEZBIDk2
IDogZS4uNC5HLnspYC5eRi4uLg0KMDIxMDogMEIgOUMgNTIgOTkgNkYgMEEgNDIgQ0MgIDZEIDgw
IEIzIDAwIDIzIEQ2IDA0IDA0IDogLi5SLm8uQi5tLi4uIy4uLg0KMDIyMDogNUUgOTYgQjEgQzcg
MjcgOEIgQTYgRTEgIDIyIEU3IDNDIDAwIDAxIEU4IEFGIDNGIDogXi4uLicuLi4iLjwuLi4uPw0K
MDIzMDogREIgQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
Li4NCltsaWJzc2gyXSAwLjMwMjYyOCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDMxIHJlY2VpdmVk
LCBsZW5ndGg9NTYyDQpbbGlic3NoMl0gMC4zMDI2MjggVHJhbnNwb3J0OiBMb29raW5nIGZvciBw
YWNrZXQgb2YgdHlwZTogMzENCltsaWJzc2gyXSAwLjMwMjYyOCBLZXkgRXg6IFNlcnZlcidzIE1E
NSBGaW5nZXJwcmludDogZDc6MmY6Nzk6ZDk6Nzk6MzE6MmQ6ZDI6OWM6NTk6NmM6OGI6NGI6YzA6
ZWQ6YWQNCltsaWJzc2gyXSAwLjMwMjYyOCBLZXkgRXg6IFNlcnZlcidzIFNIQTEgRmluZ2VycHJp
bnQ6IDBmOjBiOjllOmNlOjI2Ojg2OjQ0OjMyOjQyOmVlOjFiOmFkOmJmOmM3OmQ1Ojc2OjNlOjk1
OjFjOmZiDQpbbGlic3NoMl0gMC4zMDc2MjggS2V5IEV4OiBTZW5kaW5nIE5FV0tFWVMgbWVzc2Fn
ZQ0KPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDEgYnl0ZXMpDQowMDAwOiAxNSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuDQpbbGlic3No
Ml0gMC4zMDc2MjggU29ja2V0OiBTZW50IDE4NC8xODQgYnl0ZXMgYXQgMDA2MDJEOTANCj0+IGxp
YnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTg0IGJ5dGVzKQ0KMDAwMDogMDAgMDAgMDAg
QjQgQjIgMTUgN0IgOTMgIDc2IDU0IDYzIDNCIDQ5IEUzIDkyIDg0IDogLi4uLi4uey52VGM7SS4u
Lg0KMDAxMDogNzEgRTkgMDYgMzkgMjMgRDMgNzIgRkQgIDQyIEJCIEM4IDM4IDRGIEYwIDczIDNG
IDogcS4uOSMuci5CLi44Ty5zPw0KMDAyMDogNkYgNTUgN0MgQzAgMkUgQzUgNTUgNjQgIDM1IDA5
IDFGIDI5IEIwIEEzIDFBIEFGIDogb1V8Li4uVWQ1Li4pLi4uLg0KMDAzMDogOUQgMEMgMjYgOUIg
N0IgQTggNzMgQjkgIEI3IDhDIEI0IEY2IDIzIDhDIDE5IEVBIDogLi4mLnsucy4uLi4uIy4uLg0K
MDA0MDogODAgRTYgQzkgMkQgMDQgQzIgNTcgRjkgIEEwIDJEIDMyIDU0IEZBIDBBIDUyIERGIDog
Li4uLS4uVy4uLTJULi5SLg0KMDA1MDogMjIgM0IgRTAgOUYgOTIgOTMgMTYgOEUgIERCIEQzIDRD
IEU2IDg0IEM5IEExIEM1IDogIjsuLi4uLi4uLkwuLi4uLg0KMDA2MDogMEMgRTkgRkUgRDggRTUg
RDYgMDEgQjUgIDk4IDNEIDAxIDZDIEE5IDMwIDNCIDhGIDogLi4uLi4uLi4uPS5sLjA7Lg0KMDA3
MDogRDAgMzYgNUUgMUEgMzcgOTcgQTMgNUQgIEExIEM5IEQzIDBFIDFCIEU1IEIyIDVCIDogLjZe
LjcuLl0uLi4uLi4uWw0KMDA4MDogODQgMzUgNEEgQzEgQkMgMjcgRTQgMjkgIEREIEFGIEZDIDJB
IDMxIDVFIDQ1IEUxIDogLjVKLi4nLikuLi4qMV5FLg0KMDA5MDogRjEgQjMgNDggRjAgNkUgNDEg
NUIgOTQgIDkzIERFIDlEIDI5IDg3IEEyIDI3IEQwIDogLi5ILm5BWy4uLi4pLi4nLg0KMDBhMDog
NEUgQTAgRUYgODkgMEQgRUQgN0QgRUYgIDI2IDc3IDBGIDNEIDUzIDU3IEUzIDc3IDogTi4uLi4u
fS4mdy49U1cudw0KMDBiMDogNDggOTEgN0MgRkMgRkMgNzIgQjAgQTggICAgICAgICAgICAgICAg
ICAgICAgICAgIDogSC58Li5yLi4NCltsaWJzc2gyXSAwLjMwNzYyOCBUcmFuc3BvcnQ6IExvb2tp
bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAyMQ0KW2xpYnNzaDJdIDAuMzA3NjI4IEZhaWx1cmUgRXZl
bnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMNCltsaWJzc2gyXSAw
LjMyNTYyOSBTb2NrZXQ6IFJlY3ZlZCAxNi8xNjM4NCBieXRlcyB0byAwMDVGRUQ2OCswDQo9PiBs
aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgxNiBieXRlcykNCjAwMDA6IDAwIDAwIDAwIDBD
IDBBIDE1IEE3IEVBICAwQSAyMyA5OSBGNyA5RCA1RiA3OCAzRiA6IC4uLi4uLi4uLiMuLi5feD8N
Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykNCjAwMDA6IDE1ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4NCltsaWJzc2gy
XSAwLjMyNTYyOSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIxIHJlY2VpdmVkLCBsZW5ndGg9MQ0K
W2xpYnNzaDJdIDAuMzI1NjI5IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6
IDIxDQpbbGlic3NoMl0gMC4zMjU2MjkgS2V5IEV4OiBSZWNlaXZlZCBORVdLRVlTIG1lc3NhZ2UN
CltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IHNlc3Npb25faWQgY2FsY3VsYXRlZA0KW2xpYnNz
aDJdIDAuMzI1NjI5IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQgS2V5IGNhbGN1bGF0
ZWQNCltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSVYgYW5kIEtl
eSBjYWxjdWxhdGVkDQpbbGlic3NoMl0gMC4zMjU2MjkgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVy
IEhNQUMgS2V5IGNhbGN1bGF0ZWQNCltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IFNlcnZlciB0
byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZA0KW2xpYnNzaDJdIDAuMzI1NjI5IEtleSBFeDog
Q2xpZW50IHRvIFNlcnZlciBjb21wcmVzc2lvbiBpbml0aWFsaXplZA0KW2xpYnNzaDJdIDAuMzI1
NjI5IEtleSBFeDogU2VydmVyIHRvIENsaWVudCBjb21wcmVzc2lvbiBpbml0aWFsaXplZA0KW2xp
YnNzaDJdIDAuMzI1NjI5IFRyYW5zcG9ydDogUmVxdWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlDQo9
PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTcgYnl0ZXMpDQowMDAwOiAwNSAwMCAw
MCAwMCAwbGlic3NoMl9pbml0OiBkb25lLg0Kc29ja2V0OiBkb25lLg0KY29ubmVjdDogZG9uZS4N
CmxpYnNzaDJfc2Vzc2lvbl9pbml0OiBkb25lLg0KbGlic3NoMl9zZXNzaW9uX3NldF9ibG9ja2lu
ZzogZG9uZS4NCmxpYnNzaDJfdHJhY2U6IGRvbmUuDQpDIDczIDczIDY4ICAyRCA3NSA3MyA2NSA3
MiA2MSA3NSA3NCA6IC4uLi4uc3NoLXVzZXJhdXQNCjAwMTA6IDY4ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGgNCltsaWJzc2gyXSAwLjMyNTYyOSBTb2Nr
ZXQ6IFNlbnQgMTMyLzEzMiBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRf
d3JpdGUgc2VuZCgpICgxMzIgYnl0ZXMpDQowMDAwOiAxMyBGNSAzOCBFQiBCRSA1NSBEQiBBQSAg
MDMgOEIgODkgNDYgQzUgREIgNUMgQkQgOiAuLjguLlUuLi4uLkYuLlwuDQowMDEwOiA3QiA3MCBG
NSAzNCBDMyBFQSAyQiAwRCAgMjYgRDcgM0IgMzcgMTYgNDcgQjQgQTUgOiB7cC40Li4rLiYuOzcu
Ry4uDQowMDIwOiAzMCAwRCAxRCBDQyA0MyA1NyA2QyA0OSAgQjMgODEgQTIgNEEgMTYgOTIgRTEg
MTYgOiAwLi4uQ1dsSS4uLkouLi4uDQowMDMwOiA1QSA3QyAzNiAyQSA3OCA3RiA1OSBEOSAgMTEg
MzYgMzAgNzMgMEMgODMgREEgRjYgOiBafDYqeC5ZLi42MHMuLi4uDQowMDQwOiAxRiBBNyBBQSA0
QyA0OCAxNiBGQiA1NSAgQ0QgNjggRDQgOTggQTQgODIgMjUgQkEgOiAuLi5MSC4uVS5oLi4uLiUu
DQowMDUwOiAwNCBENiA3OSBCNyBFOCA0RiA5RCBEQiAgNzQgOTIgNkUgNjcgNTAgNkUgNEEgQjkg
OiAuLnkuLk8uLnQubmdQbkouDQowMDYwOiBBNSAwQyAzQyBDNiA0MCAxQiAxNSA2RCAgMEYgQUQg
NTUgMDMgQTQgQTUgOTIgMjUgOiAuLjwuQC4ubS4uVS4uLi4lDQowMDcwOiAwNyA3QyBDQiA5OCA2
QSBERiA2RCBGRiAgODkgQTAgRTAgOUEgNDMgNDggM0QgODMgOiAufC4uai5tLi4uLi5DSD0uDQow
MDgwOiBFQSA5RCBDOCA0OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu
Li5JDQpbbGlic3NoMl0gMC4zMjU2MjkgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2Yg
dHlwZTogNg0KW2xpYnNzaDJdIDAuMzQzNjMwIFNvY2tldDogUmVjdmVkIDY4LzE2Mzg0IGJ5dGVz
IHRvIDAwNUZFRDY4KzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcgKDY4IGJ5dGVz
KQ0KMDAwMDogRjEgMDEgRjAgMkEgQTAgMUYgREMgMzMgIDNGIDc1IDY5IDU3IDY2IDcyIDdBIDhE
IDogLi4uKi4uLjM/dWlXZnJ6Lg0KMDAxMDogNzEgN0QgOUUgMDcgNEUgNEIgMDMgRjMgIEIzIEI2
IDAwIDcyIEREIDJGIDJGIDQ5IDogcX0uLk5LLi4uLi5yLi8vSQ0KMDAyMDogMDIgRkEgMEEgMTIg
OEEgOTkgM0MgQjMgIDg4IEVGIDgzIDhGIDJFIDQ2IERDIDk3IDogLi4uLi4uPC4uLi4uLkYuLg0K
MDAzMDogOTMgREYgM0EgMDUgQTcgNTYgMDAgOTUgIEVDIEE5IDU0IEE2IDVDIEVEIEU1IDUyIDog
Li46Li5WLi4uLlQuXC4uUg0KMDA0MDogMEIgNDggRjkgREQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogLkguLg0KRmFpbHVyZSBlc3RhYmxpc2hpbmcgU1NIIHNlc3Npb246
IC00MQ0K
--e89a8ff243012a11a804cc3d07d0
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

--e89a8ff243012a11a804cc3d07d0--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 17 16:09:35 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HE9B00027261;
	Wed, 17 Oct 2012 16:09:28 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HE99Ks027250
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 16:09:09 +0200
Received: (qmail 13341 invoked from network); 17 Oct 2012 14:09:08 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 17 Oct 2012 14:09:08 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 17 Oct 2012 14:09:08 -0000
X-URL: https://trac.libssh2.org/
Subject: Re: [libssh2] #249: sftp download data corruption
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:3
Message-ID: <058.b5a4fe58847874f40a17200088bbaf07@libssh2.stuge.se>
References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-Trac-Ticket-ID: 249
In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9HE99Ks027250
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#249: sftp download data corruption
---------------------+-------------------
  Reporter:  maxmtl  |      Owner:
      Type:  defect  |     Status:  new
  Priority:  normal  |  Milestone:  1.4.3
 Component:  SFTP    |    Version:  1.4.2
Resolution:          |   Keywords:
Blocked By:          |     Blocks:
---------------------+-------------------

Comment (by maxmtl):

 Thanks for your time.

 I will have to talk with the Java guys here about the Mina SSHD patch. I
 think they redid the same correction.

 I agree that this is somewhat of a kludge. We have to work with old
 versions of our software (both embedded and java/pc-based), so this looked
 like the right solution.

 I have been mislead by Openssh's sftp client working correctly. So I
 (finally) took a look into the Openssh sftp client code. It goes fatal()
 when it receives more data than requested, but since it always asks for
 32768 bytes it works correctly with old versions of Mina SSHD. Maybe that
 would be the correct solution in our case.

 Should I submit a patch that aborts when the received size is longer than
 requested?

-- 
Ticket URL: <https://trac.libssh2.org/ticket/249#comment:3>
libssh2 <https://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 17 19:03:28 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HH36Jj011989;
	Wed, 17 Oct 2012 19:03:22 +0200
Received: from gator378.hostgator.com (gator378.hostgator.com
 [184.173.199.219])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HH32ch011958
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 19:03:03 +0200
Received: from [173.231.110.50] (port=64500 helo=[192.168.10.158])
 by gator378.hostgator.com with esmtpa (Exim 4.80)
 (envelope-from <maxmtl2002@yahoo.ca>) id 1TOUVQ-0003JO-HU
 for libssh2-devel@cool.haxx.se; Wed, 17 Oct 2012 09:21:56 -0500
Message-ID: <507EBF03.6080908@yahoo.ca>
Date: Wed, 17 Oct 2012 10:21:55 -0400
From: Maxime Larocque <maxmtl2002@yahoo.ca>
User-Agent: Mozilla/5.0 (X11; Linux i686;
 rv:16.0) Gecko/20121011 Thunderbird/16.0.1
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: sftp: Problem if received data is shorter than requested
X-AntiAbuse: This header was added to track abuse,
 please include it with any abuse report
X-AntiAbuse: Primary Hostname - gator378.hostgator.com
X-AntiAbuse: Original Domain - cool.haxx.se
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - yahoo.ca
X-BWhitelist: no
X-Source: 
X-Source-Args: 
X-Source-Dir: 
X-Source-Sender: ([192.168.10.158]) [173.231.110.50]:64500
X-Source-Auth: max@weirdows.com
X-Email-Count: 0
X-Source-Cap: bWF4bXRsO21heG10bDtnYXRvcjM3OC5ob3N0Z2F0b3IuY29t
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Hello,

While working around ticket 249 I have seen something that might 
eventually lead to trouble.

In sftp.c, around line 1487, sftp_read():
======================================
             case SSH_FXP_DATA:
                 rc32 = _libssh2_ntohu32(data + 5);
                 if (rc32 > (data_len - 9))
                     return _libssh2_error(session, 
LIBSSH2_ERROR_SFTP_PROTOCOL,
                                           "SFTP Protocol badness");

                 if(rc32 != chunk->len) {
                     /* a short read does not imply end of file, but we must
                        adjust the offset_sent since it was advanced with a
                        full chunk->len before */
                     filep->offset_sent -= (chunk->len - rc32);
======================================

If the received length is shorter than requested, it just reduce the 
filep->offset_sent. This is wrong, since offset_sent has already been 
used to send requests. If this happens, the file will be missing a 
chunk. What OpenSSH does in this case is to resend the request with the 
missing length. I do not know if a lot of servers answers with data 
shorter than requested...

It looks like old code, if the sftp code has passed from 
one-request-at-a-time to multiple parallel requests.

I may have missed something in this case, so feel free to comment :-).


Maxime Larocque

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

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 17 22:46:52 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKkToQ017143;
	Wed, 17 Oct 2012 22:46:47 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKkRBJ017132
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 22:46:27 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9HKkRKj017123
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 22:46:27 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Wed, 17 Oct 2012 22:46: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: sftp: Problem if received data is shorter than requested
In-Reply-To: <507EBF03.6080908@yahoo.ca>
Message-ID: <alpine.DEB.2.00.1210172242110.4175@tvnag.unkk.fr>
References: <507EBF03.6080908@yahoo.ca>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Wed, 17 Oct 2012, Maxime Larocque wrote:

> If the received length is shorter than requested, it just reduce the 
> filep->offset_sent. This is wrong, since offset_sent has already been used 
> to send requests. If this happens, the file will be missing a chunk. What 
> OpenSSH does in this case is to resend the request with the missing length. 
> I do not know if a lot of servers answers with data shorter than 
> requested...

You're right. But the fix is a bit harder than "just that" because libssh2 
does use speculative read-ahead and adding a separate read for a gap in the 
middle will require some proper considerations.

I've basically held off trying to do that since I don't have a reliable (and 
repeatable) set of test cases to use for verification.

But by all means, if you're up to it please go ahead and make an attempt!

In reality, I've only seen a short read happen on the very last read for a 
file. I suppose you could make it happen if you for example try to read from 
/dev/random on the remote host or something. Ie from a file/pipe that provides 
data slowly.

-- 

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

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 17 22:49:38 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKnaPU018855;
	Wed, 17 Oct 2012 22:49:37 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKm8Yg018037
 for <libssh2-devel@cool.haxx.se>; Wed, 17 Oct 2012 22:48:08 +0200
Received: (qmail 3253 invoked from network); 17 Oct 2012 20:48:07 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 17 Oct 2012 20:48:07 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 17 Oct 2012 20:48:07 -0000
X-URL: https://trac.libssh2.org/
Subject: Re: [libssh2] #249: sftp download data corruption
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:4
Message-ID: <058.f046bfd155ae576d4ed93262b51b3e45@libssh2.stuge.se>
References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-Trac-Ticket-ID: 249
In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se>
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9HKm8Yg018037
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#249: sftp download data corruption
---------------------+-------------------
  Reporter:  maxmtl  |      Owner:
      Type:  defect  |     Status:  new
  Priority:  normal  |  Milestone:  1.4.3
 Component:  SFTP    |    Version:  1.4.2
Resolution:          |   Keywords:
Blocked By:          |     Blocks:
---------------------+-------------------

Comment (by bagder):

 Yes please, such a patch would be awesome. Especially since it seems you
 have a fairly good way of trying it out! =)

-- 
Ticket URL: <https://trac.libssh2.org/ticket/249#comment:4>
libssh2 <https://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 22 01:40:31 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9LNdx1l005067;
	Mon, 22 Oct 2012 01:40:23 +0200
Received: from plane.gmane.org (plane.gmane.org [80.91.229.3])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9LNdwsK005060
 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 01:39:58 +0200
Received: from list by plane.gmane.org with local (Exim 4.69)
 (envelope-from <gnslg-libssh2-devel-2@m.gmane.org>)
 id 1TQ57k-0007yD-9R
 for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 01:40:04 +0200
Received: from 208.65.91.109 ([208.65.91.109])
 by main.gmane.org with esmtp (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 01:40:04 +0200
Received: from james.sumners by 208.65.91.109 with local (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 01:40:04 +0200
X-Injected-Via-Gmane: http://gmane.org/
To: libssh2-devel@cool.haxx.se
From: James Sumners <james.sumners@gmail.com>
Subject: Key exchange trashing memory
Date: Sun, 21 Oct 2012 19:27:52 -0400
Lines: 58
Message-ID: <k620dh$lur$3@ger.gmane.org>
Mime-Version: 1.0
X-Complaints-To: usenet@ger.gmane.org
X-Gmane-NNTP-Posting-Host: 208.65.91.109
User-Agent: Unison/2.1.9
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

I'm writing an Objective-C interface to libssh2. During my initial 
testing I was communicating with a server that reports the version 
string "OpenSSH_5.5p1 Debian-6+squeeze2" and didn't have any problems. 
Now, I'm testing against a server that reports simply "OpenSSH_6.0" 
(it's a slightly outdated Arch Linux server; OpenSSH 6.1 is available 
as an update) and the key exchange is failing. I'm using libssh2 
version 1.4.3_DEV.

I recorded a video of what is happening -- 
http://www.youtube.com/watch?v=vD364d9J8bc . This video shows the 
problem being run through LLDB.

In the video, you can see that in the `void libssh2_sha1(const unsigned 
char *message, unsigned long len, unsigned char *out)` function in 
openssl.c (line 512) the `len` and `out` variables are getting 
overwritten after the call to `EVP_DigestInit`. Also shown in the video 
is a patch that allows the function to finish, but causes a crash later 
on in the process.

Can anyone shed some light on what is happening here?

The trace for the key exchange is:

[libssh2] 0.229073 Key Ex: Sent KEX: 
diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 

[libssh2] 0.229620 Key Ex: Sent HOSTKEY: ssh-rsa,ssh-dss
[libssh2] 0.229920 Key Ex: Sent CRYPT_CS: 
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc 

[libssh2] 0.230242 Key Ex: Sent CRYPT_SC: 
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc 

[libssh2] 0.230549 Key Ex: Sent MAC_CS: 
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com 

[libssh2] 0.230828 Key Ex: Sent MAC_SC: 
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com 

[libssh2] 0.248835 Key Ex: Sent COMP_CS: none
[libssh2] 0.249782 Key Ex: Sent COMP_SC: none
[libssh2] 0.250296 Key Ex: Sent LANG_CS:
[libssh2] 0.250665 Key Ex: Sent LANG_SC:
[libssh2] 0.251181 Key Ex: Agreed on KEX method: diffie-hellman-group14-sha1
[libssh2] 0.251501 Key Ex: Agreed on HOSTKEY method: ssh-rsa
[libssh2] 0.251799 Key Ex: Agreed on CRYPT_CS method: aes128-ctr
[libssh2] 0.252076 Key Ex: Agreed on CRYPT_SC method: aes128-ctr
[libssh2] 0.252362 Key Ex: Agreed on MAC_CS method: hmac-sha1
[libssh2] 0.252644 Key Ex: Agreed on MAC_SC method: hmac-sha1
[libssh2] 0.252915 Key Ex: Agreed on COMP_CS method: none
[libssh2] 0.253183 Key Ex: Agreed on COMP_SC method: none
[libssh2] 0.262499 Key Ex: Initiating Diffie-Hellman Group14 Key Exchange
[libssh2] 0.273457 Key Ex: Sending KEX packet 30
[libssh2] 0.380532 Key Ex: Server's MD5 Fingerprint: 
4b:ae:9e:24:47:80:5a:73:86:1e:ba:55:4c:b8:54:79
[libssh2] 0.381142 Key Ex: Server's SHA1 Fingerprint: 
3f:de:ee:71:0b:2f:f4:92:7c:78:c6:0f:5b:ed:be:65:29:70:19:1d


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 10:47:16 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9M8kvNU014412;
	Mon, 22 Oct 2012 10:47:11 +0200
Received: from mail-ee0-f54.google.com (mail-ee0-f54.google.com [74.125.83.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9M8kthn014383
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 10:46:55 +0200
Received: by mail-ee0-f54.google.com with SMTP id c50so894292eek.41
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 01:46:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer;
 bh=n4FPGrhdYW99UAv3Ji/lCtc8l6LoTKHCXL0D+fXPvoI=;
 b=a1RIh/t/JrUOAE5Owg8/da/rOnGOquDTDujAlS5E5eERq2+pa3J8ScycQaJrIcF+xK
 eQSDHTqCR+MFZL/Frm45Q9gjlsRzg8PR+u7UEm1UIgP+eS6hdrOxYsBfwfH2rXxMuIHw
 AUc7VAA6McgyGA1B2t/CzUgCzV1SgpvUb+fCw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer
 :x-gm-message-state;
 bh=n4FPGrhdYW99UAv3Ji/lCtc8l6LoTKHCXL0D+fXPvoI=;
 b=csVIEGjXsX6j1Db+5KCi/VkidkS9dbSBKjBr+U6bPvxduEMm6IyagvTOIcP7x+uTRD
 ABzjg2hew0Zm8tfoBEKq1JOU9RDDMdcqwnyAgTJLXXSk93/Hj3i7cUi+FhMWtPRwmav7
 V5FM2EB9aADUjxiLHdj9EXM5M6KAc9CjnbhNpezptlIXfUY+eKIeE5HHZm+Yunb4mDuH
 5bSm69QtZ/9AiSeYrXEQs5Hl2l9V9gJAHIVtBaizaYbDdWIkSrHD9ufiT9/g2tKqvKi7
 brimaAutmSkqDOfqhH3tuemx3siEfk7j2qe8MkmvKRy+zIxLA+pmLAlUm6rF9LdWJQsL
 NZ9w==
Received: by 10.14.214.133 with SMTP id c5mr10955903eep.8.1350895610991;
 Mon, 22 Oct 2012 01:46:50 -0700 (PDT)
Received: from mikes-mac-pro-2.home
 (host86-159-9-168.range86-159.btcentralplus.com. [86.159.9.168])
 by mx.google.com with ESMTPS id k2sm14869681eep.15.2012.10.22.01.46.49
 (version=SSLv3 cipher=OTHER); Mon, 22 Oct 2012 01:46:50 -0700 (PDT)
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: Key exchange trashing memory
From: Mike Abdullah <mabdullah@karelia.com>
In-Reply-To: <k620dh$lur$3@ger.gmane.org>
Date: Mon, 22 Oct 2012 09:46:49 +0100
Message-Id: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
References: <k620dh$lur$3@ger.gmane.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1499)
X-Gm-Message-State: ALoCoQk1XKvGsCCdISwyiPfEwYij28s8NG6N9gdRH8pNveR6pMn/lq4LmG3dSY8LRlr4biiby7Ff
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id
 q9M8kthn014383
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

James,

If you're interested, our libssh2 wrapper lives here:
https://github.com/karelia/libssh2_sftp-Cocoa-wrapper

It might help locate your problem. (Even better in my book if you can just extend it to your needs)

On 22 Oct 2012, at 00:27, James Sumners <james.sumners@gmail.com> wrote:

> I'm writing an Objective-C interface to libssh2. During my initial testing I was communicating with a server that reports the version string "OpenSSH_5.5p1 Debian-6+squeeze2" and didn't have any problems. Now, I'm testing against a server that reports simply "OpenSSH_6.0" (it's a slightly outdated Arch Linux server; OpenSSH 6.1 is available as an update) and the key exchange is failing. I'm using libssh2 version 1.4.3_DEV.
> 
> I recorded a video of what is happening -- http://www.youtube.com/watch?v=vD364d9J8bc . This video shows the problem being run through LLDB.
> 
> In the video, you can see that in the `void libssh2_sha1(const unsigned char *message, unsigned long len, unsigned char *out)` function in openssl.c (line 512) the `len` and `out` variables are getting overwritten after the call to `EVP_DigestInit`. Also shown in the video is a patch that allows the function to finish, but causes a crash later on in the process.
> 
> Can anyone shed some light on what is happening here?
> 
> The trace for the key exchange is:
> 
> [libssh2] 0.229073 Key Ex: Sent KEX: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 
> [libssh2] 0.229620 Key Ex: Sent HOSTKEY: ssh-rsa,ssh-dss
> [libssh2] 0.229920 Key Ex: Sent CRYPT_CS: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc 
> [libssh2] 0.230242 Key Ex: Sent CRYPT_SC: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc 
> [libssh2] 0.230549 Key Ex: Sent MAC_CS: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com 
> [libssh2] 0.230828 Key Ex: Sent MAC_SC: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com 
> [libssh2] 0.248835 Key Ex: Sent COMP_CS: none
> [libssh2] 0.249782 Key Ex: Sent COMP_SC: none
> [libssh2] 0.250296 Key Ex: Sent LANG_CS:
> [libssh2] 0.250665 Key Ex: Sent LANG_SC:
> [libssh2] 0.251181 Key Ex: Agreed on KEX method: diffie-hellman-group14-sha1
> [libssh2] 0.251501 Key Ex: Agreed on HOSTKEY method: ssh-rsa
> [libssh2] 0.251799 Key Ex: Agreed on CRYPT_CS method: aes128-ctr
> [libssh2] 0.252076 Key Ex: Agreed on CRYPT_SC method: aes128-ctr
> [libssh2] 0.252362 Key Ex: Agreed on MAC_CS method: hmac-sha1
> [libssh2] 0.252644 Key Ex: Agreed on MAC_SC method: hmac-sha1
> [libssh2] 0.252915 Key Ex: Agreed on COMP_CS method: none
> [libssh2] 0.253183 Key Ex: Agreed on COMP_SC method: none
> [libssh2] 0.262499 Key Ex: Initiating Diffie-Hellman Group14 Key Exchange
> [libssh2] 0.273457 Key Ex: Sending KEX packet 30
> [libssh2] 0.380532 Key Ex: Server's MD5 Fingerprint: 4b:ae:9e:24:47:80:5a:73:86:1e:ba:55:4c:b8:54:79
> [libssh2] 0.381142 Key Ex: Server's SHA1 Fingerprint: 3f:de:ee:71:0b:2f:f4:92:7c:78:c6:0f:5b:ed:be:65:29:70:19:1d
> 
> 
> _______________________________________________
> 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  Mon Oct 22 13:48:49 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MBmVbR025187;
	Mon, 22 Oct 2012 13:48:45 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MBmR3n025163
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 13:48:28 +0200
Received: from int-mx09.intmail.prod.int.phx2.redhat.com
 (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MBmRro026619
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 07:48:27 -0400
Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67])
 by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q9MBmPNa029427; Mon, 22 Oct 2012 07:48:26 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: libssh2-devel@cool.haxx.se
Subject: [PATCH] examples: use stderr for messages, stdout for data
Date: Mon, 22 Oct 2012 13:47:23 +0200
Message-Id: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Reported by: Karel Srot
Bug: https://bugzilla.redhat.com/867462
---
 example/direct_tcpip.c        |   19 ++++++++-------
 example/scp_nonblock.c        |    2 +-
 example/scp_write_nonblock.c  |    2 +-
 example/sftp.c                |   49 +++++++++++++++++++++-------------------
 example/sftp_RW_nonblock.c    |   14 ++++++------
 example/sftp_append.c         |   18 +++++++-------
 example/sftp_mkdir.c          |   12 +++++-----
 example/sftp_mkdir_nonblock.c |   12 +++++-----
 example/sftp_nonblock.c       |    4 +-
 example/sftp_write.c          |   14 ++++++------
 example/sftp_write_nonblock.c |   16 ++++++------
 example/sftp_write_sliding.c  |   16 ++++++------
 example/sftpdir.c             |   12 +++++-----
 example/sftpdir_nonblock.c    |    8 +++---
 example/ssh2.c                |   26 +++++++++++----------
 example/ssh2_agent.c          |   14 ++++++------
 example/ssh2_echo.c           |    2 +-
 example/ssh2_exec.c           |    4 +-
 example/subsystem_netconf.c   |   20 ++++++++--------
 example/tcpip-forward.c       |   25 +++++++++++----------
 20 files changed, 148 insertions(+), 141 deletions(-)

diff --git a/example/direct_tcpip.c b/example/direct_tcpip.c
index 6aa9845..e530199 100644
--- a/example/direct_tcpip.c
+++ b/example/direct_tcpip.c
@@ -135,7 +135,7 @@ int main(int argc, char *argv[])
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "password"))
         auth |= AUTH_PASSWORD;
     if (strstr(userauthlist, "publickey"))
@@ -157,12 +157,12 @@ int main(int argc, char *argv[])
     } else if (auth & AUTH_PUBLICKEY) {
         if (libssh2_userauth_publickey_fromfile(session, username, keyfile1,
                                                 keyfile2, password)) {
-            printf("\tAuthentication by public key failed!\n");
+            fprintf(stderr, "\tAuthentication by public key failed!\n");
             goto shutdown;
         }
-        printf("\tAuthentication by public key succeeded.\n");
+        fprintf(stderr, "\tAuthentication by public key succeeded.\n");
     } else {
-        printf("No supported authentication methods found!\n");
+        fprintf(stderr, "No supported authentication methods found!\n");
         goto shutdown;
     }
 
@@ -185,7 +185,7 @@ int main(int argc, char *argv[])
         goto shutdown;
     }
 
-    printf("Waiting for TCP connection on %s:%d...\n",
+    fprintf(stderr, "Waiting for TCP connection on %s:%d...\n",
         inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
 
     forwardsock = accept(listensock, (struct sockaddr *)&sin, &sinlen);
@@ -197,8 +197,8 @@ int main(int argc, char *argv[])
     shost = inet_ntoa(sin.sin_addr);
     sport = ntohs(sin.sin_port);
 
-    printf("Forwarding connection from %s:%d here to remote %s:%d\n", shost,
-        sport, remote_desthost, remote_destport);
+    fprintf(stderr, "Forwarding connection from %s:%d here to remote %s:%d\n",
+        shost, sport, remote_desthost, remote_destport);
 
     channel = libssh2_channel_direct_tcpip_ex(session, remote_desthost,
         remote_destport, shost, sport);
@@ -228,7 +228,8 @@ int main(int argc, char *argv[])
                 perror("read");
                 goto shutdown;
             } else if (0 == len) {
-                printf("The client at %s:%d disconnected!\n", shost, sport);
+                fprintf(stderr, "The client at %s:%d disconnected!\n", shost,
+                    sport);
                 goto shutdown;
             }
             wr = 0;
@@ -259,7 +260,7 @@ int main(int argc, char *argv[])
                 wr += i;
             }
             if (libssh2_channel_eof(channel)) {
-                printf("The server at %s:%d disconnected!\n",
+                fprintf(stderr, "The server at %s:%d disconnected!\n",
                     remote_desthost, remote_destport);
                 goto shutdown;
             }
diff --git a/example/scp_nonblock.c b/example/scp_nonblock.c
index 867d851..5d636c0 100644
--- a/example/scp_nonblock.c
+++ b/example/scp_nonblock.c
@@ -250,7 +250,7 @@ int main(int argc, char *argv[])
     gettimeofday(&end, NULL);
 
     time_ms = tvdiff(end, start);
-    printf("Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total,
+    fprintf(stderr, "Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total,
            time_ms, total/(time_ms/1000.0), spin );
 
     libssh2_channel_free(channel);
diff --git a/example/scp_write_nonblock.c b/example/scp_write_nonblock.c
index 9dfbd4e..0ac0f69 100644
--- a/example/scp_write_nonblock.c
+++ b/example/scp_write_nonblock.c
@@ -243,7 +243,7 @@ int main(int argc, char *argv[])
 
     duration = (int)(time(NULL)-start);
 
-    printf("%ld bytes in %d seconds makes %.1f bytes/sec\n",
+    fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n",
            total, duration, total/(double)duration);
 
     fprintf(stderr, "Sending EOF\n");
diff --git a/example/sftp.c b/example/sftp.c
index e69b3c3..88ceba2 100644
--- a/example/sftp.c
+++ b/example/sftp.c
@@ -55,24 +55,24 @@ static void kbd_callback(const char *name, int name_len,
     char buf[1024];
     (void)abstract;
 
-    printf("Performing keyboard-interactive authentication.\n");
+    fprintf(stderr, "Performing keyboard-interactive authentication.\n");
 
-    printf("Authentication name: '");
-    fwrite(name, 1, name_len, stdout);
-    printf("'\n");
+    fprintf(stderr, "Authentication name: '");
+    fwrite(name, 1, name_len, stderr);
+    fprintf(stderr, "'\n");
 
-    printf("Authentication instruction: '");
-    fwrite(instruction, 1, instruction_len, stdout);
-    printf("'\n");
+    fprintf(stderr, "Authentication instruction: '");
+    fwrite(instruction, 1, instruction_len, stderr);
+    fprintf(stderr, "'\n");
 
-    printf("Number of prompts: %d\n\n", num_prompts);
+    fprintf(stderr, "Number of prompts: %d\n\n", num_prompts);
 
     for (i = 0; i < num_prompts; i++) {
-        printf("Prompt %d from server: '", i);
-        fwrite(prompts[i].text, 1, prompts[i].length, stdout);
-        printf("'\n");
+        fprintf(stderr, "Prompt %d from server: '", i);
+        fwrite(prompts[i].text, 1, prompts[i].length, stderr);
+        fprintf(stderr, "'\n");
 
-        printf("Please type response: ");
+        fprintf(stderr, "Please type response: ");
         fgets(buf, sizeof(buf), stdin);
         n = strlen(buf);
         while (n > 0 && strchr("\r\n", buf[n - 1]))
@@ -82,12 +82,13 @@ static void kbd_callback(const char *name, int name_len,
         responses[i].text = strdup(buf);
         responses[i].length = n;
 
-        printf("Response %d from user is '", i);
-        fwrite(responses[i].text, 1, responses[i].length, stdout);
-        printf("'\n\n");
+        fprintf(stderr, "Response %d from user is '", i);
+        fwrite(responses[i].text, 1, responses[i].length, stderr);
+        fprintf(stderr, "'\n\n");
     }
 
-    printf("Done. Sending keyboard-interactive responses to server now.\n");
+    fprintf(stderr,
+        "Done. Sending keyboard-interactive responses to server now.\n");
 }
 
 
@@ -127,7 +128,7 @@ int main(int argc, char *argv[])
 
     rc = libssh2_init (0);
     if (rc != 0) {
-        fprintf (stderr, "libssh2 initialization failed (%d)\n", rc);
+        fprintf(stderr, "libssh2 initialization failed (%d)\n", rc);
         return 1;
     }
 
@@ -178,7 +179,7 @@ int main(int argc, char *argv[])
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "password") != NULL) {
         auth_pw |= 1;
     }
@@ -211,21 +212,23 @@ int main(int argc, char *argv[])
     } else if (auth_pw & 2) {
         /* Or via keyboard-interactive */
         if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) {
-            printf("\tAuthentication by keyboard-interactive failed!\n");
+            fprintf(stderr,
+                "\tAuthentication by keyboard-interactive failed!\n");
             goto shutdown;
         } else {
-            printf("\tAuthentication by keyboard-interactive succeeded.\n");
+            fprintf(stderr,
+                "\tAuthentication by keyboard-interactive succeeded.\n");
         }
     } else if (auth_pw & 4) {
         /* Or by public key */
         if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) {
-            printf("\tAuthentication by public key failed!\n");
+            fprintf(stderr, "\tAuthentication by public key failed!\n");
             goto shutdown;
         } else {
-            printf("\tAuthentication by public key succeeded.\n");
+            fprintf(stderr, "\tAuthentication by public key succeeded.\n");
         }
     } else {
-        printf("No supported authentication methods found!\n");
+        fprintf(stderr, "No supported authentication methods found!\n");
         goto shutdown;
     }
 
diff --git a/example/sftp_RW_nonblock.c b/example/sftp_RW_nonblock.c
index babb48a..77c2027 100644
--- a/example/sftp_RW_nonblock.c
+++ b/example/sftp_RW_nonblock.c
@@ -141,11 +141,11 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if(argc > 1) {
         username = argv[1];
@@ -162,7 +162,7 @@ int main(int argc, char *argv[])
 
     tempstorage = fopen(STORAGE, "wb");
     if(!tempstorage) {
-        printf("Can't open temp storage file %s\n", STORAGE);
+        fprintf(stderr, "Can't open temp storage file %s\n", STORAGE);
         goto shutdown;
     }
 
@@ -171,7 +171,7 @@ int main(int argc, char *argv[])
         while ((rc = libssh2_userauth_password(session, username, password))
                == LIBSSH2_ERROR_EAGAIN);
         if (rc) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -185,7 +185,7 @@ int main(int argc, char *argv[])
                                                     password)) ==
                LIBSSH2_ERROR_EAGAIN);
         if (rc) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -341,7 +341,7 @@ int main(int argc, char *argv[])
 #endif
     if (tempstorage)
         fclose(tempstorage);
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_append.c b/example/sftp_append.c
index 731d21a..7585d38 100644
--- a/example/sftp_append.c
+++ b/example/sftp_append.c
@@ -86,7 +86,7 @@ int main(int argc, char *argv[])
 
     local = fopen(loclfile, "rb");
     if (!local) {
-        printf("Can't local file %s\n", loclfile);
+        fprintf(stderr, "Can't open local file %s\n", loclfile);
         return -1;
     }
 
@@ -129,16 +129,16 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -147,7 +147,7 @@ int main(int argc, char *argv[])
                             "/home/username/.ssh/id_rsa.pub",
                             "/home/username/.ssh/id_rsa",
                             password)) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -174,12 +174,12 @@ int main(int argc, char *argv[])
     }
 
     if(libssh2_sftp_fstat_ex(sftp_handle, &attrs, 0) < 0) {
-        printf("libssh2_sftp_fstat_ex failed\n");
+        fprintf(stderr, "libssh2_sftp_fstat_ex failed\n");
         goto shutdown;
     }
     else
         libssh2_sftp_seek64(sftp_handle, attrs.filesize);
-    printf("Did a seek to position %ld\n", (long) attrs.filesize);
+    fprintf(stderr, "Did a seek to position %ld\n", (long) attrs.filesize);
 
     fprintf(stderr, "libssh2_sftp_open() a handle for APPEND\n");
 
@@ -222,7 +222,7 @@ shutdown:
 #endif
     if (local)
         fclose(local);
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_mkdir.c b/example/sftp_mkdir.c
index 39af8f0..8747084 100644
--- a/example/sftp_mkdir.c
+++ b/example/sftp_mkdir.c
@@ -110,16 +110,16 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -128,7 +128,7 @@ int main(int argc, char *argv[])
                             "/home/username/.ssh/id_rsa.pub",
                             "/home/username/.ssh/id_rsa",
                             password)) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -164,7 +164,7 @@ int main(int argc, char *argv[])
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_mkdir_nonblock.c b/example/sftp_mkdir_nonblock.c
index 84cdc8f..22a8f59 100644
--- a/example/sftp_mkdir_nonblock.c
+++ b/example/sftp_mkdir_nonblock.c
@@ -110,16 +110,16 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -128,7 +128,7 @@ int main(int argc, char *argv[])
                             "/home/username/.ssh/id_rsa.pub",
                             "/home/username/.ssh/id_rsa",
                             password)) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -164,7 +164,7 @@ int main(int argc, char *argv[])
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_nonblock.c b/example/sftp_nonblock.c
index 6ddc109..29cec8a 100644
--- a/example/sftp_nonblock.c
+++ b/example/sftp_nonblock.c
@@ -251,7 +251,7 @@ int main(int argc, char *argv[])
 
     gettimeofday(&end, NULL);
     time_ms = tvdiff(end, start);
-    printf("Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total,
+    fprintf(stderr, "Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total,
            time_ms, total/(time_ms/1000.0), spin );
 
     libssh2_sftp_close(sftp_handle);
@@ -259,7 +259,7 @@ int main(int argc, char *argv[])
 
 shutdown:
 
-    printf("libssh2_session_disconnect\n");
+    fprintf(stderr, "libssh2_session_disconnect\n");
     while (libssh2_session_disconnect(session,
                                       "Normal Shutdown, Thank you") ==
            LIBSSH2_ERROR_EAGAIN);
diff --git a/example/sftp_write.c b/example/sftp_write.c
index 9415ce4..483f80a 100644
--- a/example/sftp_write.c
+++ b/example/sftp_write.c
@@ -85,7 +85,7 @@ int main(int argc, char *argv[])
 
     local = fopen(loclfile, "rb");
     if (!local) {
-        printf("Can't local file %s\n", loclfile);
+        fprintf(stderr, "Can't open local file %s\n", loclfile);
         return -1;
     }
 
@@ -128,16 +128,16 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -146,7 +146,7 @@ int main(int argc, char *argv[])
                             "/home/username/.ssh/id_rsa.pub",
                             "/home/username/.ssh/id_rsa",
                             password)) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -206,7 +206,7 @@ shutdown:
 #endif
     if (local)
         fclose(local);
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_write_nonblock.c b/example/sftp_write_nonblock.c
index 61cc5f4..0d66c40 100644
--- a/example/sftp_write_nonblock.c
+++ b/example/sftp_write_nonblock.c
@@ -125,7 +125,7 @@ int main(int argc, char *argv[])
 
     local = fopen(loclfile, "rb");
     if (!local) {
-        printf("Can't local file %s\n", loclfile);
+        fprintf(stderr, "Can't open local file %s\n", loclfile);
         return -1;
     }
 
@@ -169,18 +169,18 @@ int main(int argc, char *argv[])
      * that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         while ((rc = libssh2_userauth_password(session, username, password)) ==
                LIBSSH2_ERROR_EAGAIN);
         if (rc) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -191,7 +191,7 @@ int main(int argc, char *argv[])
                                                          password)) ==
                LIBSSH2_ERROR_EAGAIN);
     if (rc) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -253,7 +253,7 @@ int main(int argc, char *argv[])
 
     duration = (int)(time(NULL)-start);
 
-    printf("%ld bytes in %d seconds makes %.1f bytes/sec\n",
+    fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n",
            total, duration, total/(double)duration);
 
 
@@ -272,7 +272,7 @@ shutdown:
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftp_write_sliding.c b/example/sftp_write_sliding.c
index 2d8301c..c2ba39d 100644
--- a/example/sftp_write_sliding.c
+++ b/example/sftp_write_sliding.c
@@ -125,7 +125,7 @@ int main(int argc, char *argv[])
 
     local = fopen(loclfile, "rb");
     if (!local) {
-        printf("Can't local file %s\n", loclfile);
+        fprintf(stderr, "Can't open local file %s\n", loclfile);
         return -1;
     }
 
@@ -169,18 +169,18 @@ int main(int argc, char *argv[])
      * that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         while ((rc = libssh2_userauth_password(session, username, password)) ==
                LIBSSH2_ERROR_EAGAIN);
         if (rc) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -191,7 +191,7 @@ int main(int argc, char *argv[])
                                                          password)) ==
                LIBSSH2_ERROR_EAGAIN);
     if (rc) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -262,7 +262,7 @@ int main(int argc, char *argv[])
 
     duration = (int)(time(NULL)-start);
 
-    printf("%ld bytes in %d seconds makes %.1f bytes/sec\n",
+    fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n",
            total, duration, total/(double)duration);
 
 
@@ -281,7 +281,7 @@ shutdown:
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftpdir.c b/example/sftpdir.c
index 006fd27..cb9fb88 100644
--- a/example/sftpdir.c
+++ b/example/sftpdir.c
@@ -130,16 +130,16 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("Authentication by password failed.\n");
+            fprintf(stderr, "Authentication by password failed.\n");
             goto shutdown;
         }
     } else {
@@ -148,7 +148,7 @@ int main(int argc, char *argv[])
                             "/home/username/.ssh/id_rsa.pub",
                             "/home/username/.ssh/id_rsa",
                             password)) {
-            printf("\tAuthentication by public key failed\n");
+            fprintf(stderr, "\tAuthentication by public key failed\n");
             goto shutdown;
         }
     }
@@ -229,7 +229,7 @@ int main(int argc, char *argv[])
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/sftpdir_nonblock.c b/example/sftpdir_nonblock.c
index 38fb010..c8ad9f5 100644
--- a/example/sftpdir_nonblock.c
+++ b/example/sftpdir_nonblock.c
@@ -134,11 +134,11 @@ int main(int argc, char *argv[])
      * user, that's your call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     if (auth_pw) {
         /* We could authenticate via password */
@@ -239,7 +239,7 @@ int main(int argc, char *argv[])
 #else
     close(sock);
 #endif
-    printf("all done\n");
+    fprintf(stderr, "all done\n");
 
     libssh2_exit();
 
diff --git a/example/ssh2.c b/example/ssh2.c
index d5e6166..008496c 100644
--- a/example/ssh2.c
+++ b/example/ssh2.c
@@ -126,15 +126,15 @@ int main(int argc, char *argv[])
      * call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "password") != NULL) {
         auth_pw |= 1;
     }
@@ -161,31 +161,33 @@ int main(int argc, char *argv[])
     if (auth_pw & 1) {
         /* We could authenticate via password */
         if (libssh2_userauth_password(session, username, password)) {
-            printf("\tAuthentication by password failed!\n");
+            fprintf(stderr, "\tAuthentication by password failed!\n");
             goto shutdown;
         } else {
-            printf("\tAuthentication by password succeeded.\n");
+            fprintf(stderr, "\tAuthentication by password succeeded.\n");
         }
     } else if (auth_pw & 2) {
         /* Or via keyboard-interactive */
         if (libssh2_userauth_keyboard_interactive(session, username,
                                                   &kbd_callback) ) {
-            printf("\tAuthentication by keyboard-interactive failed!\n");
+            fprintf(stderr,
+                "\tAuthentication by keyboard-interactive failed!\n");
             goto shutdown;
         } else {
-            printf("\tAuthentication by keyboard-interactive succeeded.\n");
+            fprintf(stderr,
+                "\tAuthentication by keyboard-interactive succeeded.\n");
         }
     } else if (auth_pw & 4) {
         /* Or by public key */
         if (libssh2_userauth_publickey_fromfile(session, username, keyfile1,
                                                 keyfile2, password)) {
-            printf("\tAuthentication by public key failed!\n");
+            fprintf(stderr, "\tAuthentication by public key failed!\n");
             goto shutdown;
         } else {
-            printf("\tAuthentication by public key succeeded.\n");
+            fprintf(stderr, "\tAuthentication by public key succeeded.\n");
         }
     } else {
-        printf("No supported authentication methods found!\n");
+        fprintf(stderr, "No supported authentication methods found!\n");
         goto shutdown;
     }
 
@@ -250,7 +252,7 @@ int main(int argc, char *argv[])
 #else
     close(sock);
 #endif
-    printf("all done!\n");
+    fprintf(stderr, "all done!\n");
 
     libssh2_exit();
 
diff --git a/example/ssh2_agent.c b/example/ssh2_agent.c
index 9ca1a42..231445f 100644
--- a/example/ssh2_agent.c
+++ b/example/ssh2_agent.c
@@ -105,15 +105,15 @@ int main(int argc, char *argv[])
      * call
      */
     fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
-    printf("Fingerprint: ");
+    fprintf(stderr, "Fingerprint: ");
     for(i = 0; i < 20; i++) {
-        printf("%02X ", (unsigned char)fingerprint[i]);
+        fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]);
     }
-    printf("\n");
+    fprintf(stderr, "\n");
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "publickey") == NULL) {
         fprintf(stderr, "\"publickey\" authentication is not supported\n");
         goto shutdown;
@@ -147,11 +147,11 @@ int main(int argc, char *argv[])
             goto shutdown;
         }
         if (libssh2_agent_userauth(agent, username, identity)) {
-            printf("\tAuthentication with username %s and "
+            fprintf(stderr, "\tAuthentication with username %s and "
                    "public key %s failed!\n",
                    username, identity->comment);
         } else {
-            printf("\tAuthentication with username %s and "
+            fprintf(stderr, "\tAuthentication with username %s and "
                    "public key %s succeeded!\n",
                    username, identity->comment);
             break;
@@ -234,7 +234,7 @@ int main(int argc, char *argv[])
 #endif
     }
 
-    printf("all done!\n");
+    fprintf(stderr, "all done!\n");
 
     libssh2_exit();
 
diff --git a/example/ssh2_echo.c b/example/ssh2_echo.c
index 1fd8f3f..2430e33 100644
--- a/example/ssh2_echo.c
+++ b/example/ssh2_echo.c
@@ -327,7 +327,7 @@ int main(int argc, char *argv[])
         }
 
         if (exitsignal)
-            printf("\nGot signal: %s\n", exitsignal);
+            fprintf(stderr, "\nGot signal: %s\n", exitsignal);
 
         libssh2_channel_free(channel);
         channel = NULL;
diff --git a/example/ssh2_exec.c b/example/ssh2_exec.c
index e5b151d..d47761c 100644
--- a/example/ssh2_exec.c
+++ b/example/ssh2_exec.c
@@ -292,9 +292,9 @@ int main(int argc, char *argv[])
     }
 
     if (exitsignal)
-        printf("\nGot signal: %s\n", exitsignal);
+        fprintf(stderr, "\nGot signal: %s\n", exitsignal);
     else 
-        printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
+        fprintf(stderr, "\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
 
     libssh2_channel_free(channel);
     channel = NULL;
diff --git a/example/subsystem_netconf.c b/example/subsystem_netconf.c
index 708113b..6f83661 100644
--- a/example/subsystem_netconf.c
+++ b/example/subsystem_netconf.c
@@ -173,7 +173,7 @@ int main(int argc, char *argv[])
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "password"))
         auth |= AUTH_PASSWORD;
     if (strstr(userauthlist, "publickey"))
@@ -195,12 +195,12 @@ int main(int argc, char *argv[])
     } else if (auth & AUTH_PUBLICKEY) {
         if (libssh2_userauth_publickey_fromfile(session, username, keyfile1,
                                                 keyfile2, password)) {
-            printf("Authentication by public key failed!\n");
+            fprintf(stderr, "Authentication by public key failed!\n");
             goto shutdown;
         }
-        printf("Authentication by public key succeeded.\n");
+        fprintf(stderr, "Authentication by public key succeeded.\n");
     } else {
-        printf("No supported authentication methods found!\n");
+        fprintf(stderr, "No supported authentication methods found!\n");
         goto shutdown;
     }
 
@@ -223,7 +223,7 @@ int main(int argc, char *argv[])
 
     /* NETCONF: http://tools.ietf.org/html/draft-ietf-netconf-ssh-06 */
 
-    printf("Sending NETCONF client <hello>\n");
+    fprintf(stderr, "Sending NETCONF client <hello>\n");
     snprintf(buf, sizeof(buf),
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
       "<hello>"
@@ -235,14 +235,14 @@ int main(int argc, char *argv[])
     if (-1 == netconf_write(channel, buf, len))
         goto shutdown;
 
-    printf("Reading NETCONF server <hello>\n");
+    fprintf(stderr, "Reading NETCONF server <hello>\n");
     len = netconf_read_until(channel, "</hello>", buf, sizeof(buf));
     if (-1 == len)
         goto shutdown;
 
-    printf("Got %d bytes:\n----------------------\n%s", (int)len, buf);
+    fprintf(stderr, "Got %d bytes:\n----------------------\n%s", (int)len, buf);
 
-    printf("Sending NETCONF <rpc>\n");
+    fprintf(stderr, "Sending NETCONF <rpc>\n");
     snprintf(buf, sizeof(buf),
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
       "<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
@@ -252,12 +252,12 @@ int main(int argc, char *argv[])
     if (-1 == netconf_write(channel, buf, len))
         goto shutdown;
 
-    printf("Reading NETCONF <rpc-reply>\n");
+    fprintf(stderr, "Reading NETCONF <rpc-reply>\n");
     len = netconf_read_until(channel, "</rpc-reply>", buf, sizeof(buf));
     if (-1 == len)
         goto shutdown;
 
-    printf("Got %d bytes:\n----------------------\n%s", (int)len, buf);
+    fprintf(stderr, "Got %d bytes:\n----------------------\n%s", (int)len, buf);
 
 shutdown:
     if (channel)
diff --git a/example/tcpip-forward.c b/example/tcpip-forward.c
index a408b69..94d3cc8 100644
--- a/example/tcpip-forward.c
+++ b/example/tcpip-forward.c
@@ -137,7 +137,7 @@ int main(int argc, char *argv[])
 
     /* check what authentication methods are available */
     userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
+    fprintf(stderr, "Authentication methods: %s\n", userauthlist);
     if (strstr(userauthlist, "password"))
         auth |= AUTH_PASSWORD;
     if (strstr(userauthlist, "publickey"))
@@ -159,17 +159,17 @@ int main(int argc, char *argv[])
     } else if (auth & AUTH_PUBLICKEY) {
         if (libssh2_userauth_publickey_fromfile(session, username, keyfile1,
                                                 keyfile2, password)) {
-            printf("\tAuthentication by public key failed!\n");
+            fprintf(stderr, "\tAuthentication by public key failed!\n");
             goto shutdown;
         }
-        printf("\tAuthentication by public key succeeded.\n");
+        fprintf(stderr, "\tAuthentication by public key succeeded.\n");
     } else {
-        printf("No supported authentication methods found!\n");
+        fprintf(stderr, "No supported authentication methods found!\n");
         goto shutdown;
     }
 
-    printf("Asking server to listen on remote %s:%d\n", remote_listenhost,
-        remote_wantport);
+    fprintf(stderr, "Asking server to listen on remote %s:%d\n",
+        remote_listenhost, remote_wantport);
 
     listener = libssh2_channel_forward_listen_ex(session, remote_listenhost,
         remote_wantport, &remote_listenport, 1);
@@ -180,10 +180,10 @@ int main(int argc, char *argv[])
         goto shutdown;
     }
 
-    printf("Server is listening on %s:%d\n", remote_listenhost,
+    fprintf(stderr, "Server is listening on %s:%d\n", remote_listenhost,
         remote_listenport);
 
-    printf("Waiting for remote connection\n");
+    fprintf(stderr, "Waiting for remote connection\n");
     channel = libssh2_channel_forward_accept(listener);
     if (!channel) {
         fprintf(stderr, "Could not accept connection!\n"
@@ -192,7 +192,8 @@ int main(int argc, char *argv[])
         goto shutdown;
     }
 
-    printf("Accepted remote connection. Connecting to local server %s:%d\n",
+    fprintf(stderr,
+        "Accepted remote connection. Connecting to local server %s:%d\n",
         local_destip, local_destport);
     forwardsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     sin.sin_family = AF_INET;
@@ -206,7 +207,7 @@ int main(int argc, char *argv[])
         goto shutdown;
     }
 
-    printf("Forwarding connection from remote %s:%d to local %s:%d\n",
+    fprintf(stderr, "Forwarding connection from remote %s:%d to local %s:%d\n",
         remote_listenhost, remote_listenport, local_destip, local_destport);
 
     /* Must use non-blocking IO hereafter due to the current libssh2 API */
@@ -228,7 +229,7 @@ int main(int argc, char *argv[])
                 perror("read");
                 goto shutdown;
             } else if (0 == len) {
-                printf("The local server at %s:%d disconnected!\n",
+                fprintf(stderr, "The local server at %s:%d disconnected!\n",
                     local_destip, local_destport);
                 goto shutdown;
             }
@@ -260,7 +261,7 @@ int main(int argc, char *argv[])
                 wr += i;
             }
             if (libssh2_channel_eof(channel)) {
-                printf("The remote client at %s:%d disconnected!\n",
+                fprintf(stderr, "The remote client at %s:%d disconnected!\n",
                     remote_listenhost, remote_listenport);
                 goto shutdown;
             }
-- 
1.7.1

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 14:40:22 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MCeAxV005451;
	Mon, 22 Oct 2012 14:40:20 +0200
Received: from plane.gmane.org (plane.gmane.org [80.91.229.3])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MCe8Hw005438
 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 14:40:08 +0200
Received: from list by plane.gmane.org with local (Exim 4.69)
 (envelope-from <gnslg-libssh2-devel-2@m.gmane.org>)
 id 1TQHIi-00051l-Lb
 for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 14:40:12 +0200
Received: from sumners-osx.clayton.edu ([168.28.245.176])
 by main.gmane.org with esmtp (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 14:40:12 +0200
Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1
 (Debian)) id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 14:40:12 +0200
X-Injected-Via-Gmane: http://gmane.org/
To: libssh2-devel@cool.haxx.se
From: James Sumners <james.sumners@gmail.com>
Subject: Re: Key exchange trashing memory
Date: Mon, 22 Oct 2012 08:39:55 -0400
Lines: 15
Message-ID: <k63eqp$j8u$1@ger.gmane.org>
References: <k620dh$lur$3@ger.gmane.org>
 <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
Mime-Version: 1.0
X-Complaints-To: usenet@ger.gmane.org
X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu
User-Agent: Unison/2.1.9
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On 2012-10-22 08:46:49 +0000, Mike Abdullah said:

> James,
> 
> If you're interested, our libssh2 wrapper lives here:
> https://github.com/karelia/libssh2_sftp-Cocoa-wrapper
> 
> It might help locate your problem. (Even better in my book if you can 
> just extend it to your needs)

Looks good, but I'm going in a different direction with my interface. 
In regard to the problem, I don't see anything in your session class 
that would shed light on why libssh2 itself is failing. The error is 
occuring during the handshake while negotiating encryption keys.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 17:45:01 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MFiWc4024457;
	Mon, 22 Oct 2012 17:44:54 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MFiVbA024450
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 17:44:31 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9MFiVdT024446
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 17:44:31 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Mon, 22 Oct 2012 17:44: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] examples: use stderr for messages, stdout for data
In-Reply-To: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
Message-ID: <alpine.DEB.2.00.1210221744160.2563@tvnag.unkk.fr>
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Yeps,

Looks perfectly reasonable to me!

-- 

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 18:15:21 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGFFxD011340;
	Mon, 22 Oct 2012 18:15:19 +0200
Received: from mail-wg0-f54.google.com (mail-wg0-f54.google.com [74.125.82.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGFEtm011260
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:15:14 +0200
Received: by mail-wg0-f54.google.com with SMTP id dt10so1858221wgb.11
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 09:15:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer;
 bh=7yTHjh4FdaV8GlxpAj5/ua0VbW6dxwO9hdymgROAFqU=;
 b=BxoYn/m5pfTpYqih39UE9N+TG/PSJ5PGJpNY0XYzdM699HOj+jKA6ep1f48lIzYKnp
 tgtbhdcJq+EXZAvLQp/SeOuEHuZRf+Nqk7sp+yFtlIt9r/1BHL2QyvMnpqwEgbICXS0f
 BuDXTs04PvgBQ8T+4qfPggW9o55jZHRUk6ZR0=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer
 :x-gm-message-state;
 bh=7yTHjh4FdaV8GlxpAj5/ua0VbW6dxwO9hdymgROAFqU=;
 b=QtvDL7j8Kr+f0ZqolJuVBE7kpYv6uoyvPEE0n8jE2+RBySHeqBpUgkpOmA49tNCT0K
 l1rN8elvhwe7jpgA7vKkkKqeo4Ac5YjV56i0bd9gupR/PRjv0ifcBeCEzEs3OBKCA5kJ
 Hss86NPThqiAxwKqP8gmHPQTsFCvFS6ODqJCwJA5VhmeQKmxTnIbckOAJxpQhijo1TAU
 w+XhaPD8cfWhaSvqrEx0v6KEhgSTnmL/a+JYy0PuKw8bi8w6O8Yu6ufAChR+JkzzCPL4
 w5JcqidnXhyjUOqwcPPsUSAj3JQ1+wIvzhyPVatPVmQ6PuaQPTiUmgINA7y2OdaWKgkY
 qu5w==
Received: by 10.180.87.42 with SMTP id u10mr22449193wiz.0.1350922510619;
 Mon, 22 Oct 2012 09:15:10 -0700 (PDT)
Received: from android_53e9a288fce7f1e5.mshome.net
 (87-194-215-37.bethere.co.uk. [87.194.215.37])
 by mx.google.com with ESMTPS id fp6sm31619793wib.0.2012.10.22.09.15.09
 (version=TLSv1/SSLv3 cipher=OTHER);
 Mon, 22 Oct 2012 09:15:10 -0700 (PDT)
Mime-Version: 1.0 (Apple Message framework v1278)
Subject: Re: Key exchange trashing memory
From: Mike Abdullah <mabdullah@karelia.com>
In-Reply-To: <k63eqp$j8u$1@ger.gmane.org>
Date: Mon, 22 Oct 2012 16:25:19 +0100
Message-Id: <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com>
References: <k620dh$lur$3@ger.gmane.org>
 <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
 <k63eqp$j8u$1@ger.gmane.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1278)
X-Gm-Message-State: ALoCoQkFgzL/Kd9nCZMjRbU2/n5MWjqPI7eAaR+QibDuM6unhBJ0xMcXQCjH9PX4s30dIkJ/cXeF
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id
 q9MGFEtm011260
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="windows-1252"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGFFxD011340


On 22 Oct 2012, at 13:39, James Sumners wrote:

> On 2012-10-22 08:46:49 +0000, Mike Abdullah said:
> 
>> James,
>> If you're interested, our libssh2 wrapper lives here:
>> https://github.com/karelia/libssh2_sftp-Cocoa-wrapper
>> It might help locate your problem. (Even better in my book if you can just extend it to your needs)
> 
> Looks good, but I'm going in a different direction with my interface.

If you care to publish it when finished, I would be very interested to see how you approach it differently.

> In regard to the problem, I don't see anything in your session class that would shed light on why libssh2 itself is failing. The error is occuring during the handshake while negotiating encryption keys.

I figured you might spot a difference in how the two talk to libssh2 that might throw light on the problem. Nothing more helpful than that I’m afraid.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 18:38:06 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGbxAV025130;
	Mon, 22 Oct 2012 18:38:05 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9MGbxrC025116
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:37:59 +0200
Received: (qmail 22394 invoked by uid 501); 22 Oct 2012 16:38:00 -0000
Message-ID: <20121022163800.22393.qmail@stuge.se>
Date: Mon, 22 Oct 2012 18:38:00 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] examples: use stderr for messages, stdout for data
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Kamil Dudka wrote:
> Reported by: Karel Srot
> Bug: https://bugzilla.redhat.com/867462

I think this is a waste of time.

The examples are *library usage examples* - they are not supposed to
be useful beyond that. Anyone caring about how they output their
bytes is clearly not focusing on *library usage*.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 18:39:39 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGdbt0025852;
	Mon, 22 Oct 2012 18:39:38 +0200
Received: from plane.gmane.org (plane.gmane.org [80.91.229.3])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGdZ2w025834
 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:39:35 +0200
Received: from list by plane.gmane.org with local (Exim 4.69)
 (envelope-from <gnslg-libssh2-devel-2@m.gmane.org>)
 id 1TQL2U-0001Sk-1H
 for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 18:39:42 +0200
Received: from sumners-osx.clayton.edu ([168.28.245.176])
 by main.gmane.org with esmtp (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:39:42 +0200
Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1
 (Debian)) id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:39:42 +0200
X-Injected-Via-Gmane: http://gmane.org/
To: libssh2-devel@cool.haxx.se
From: James Sumners <james.sumners@gmail.com>
Subject: Re: Key exchange trashing memory
Date: Mon, 22 Oct 2012 12:39:21 -0400
Lines: 33
Message-ID: <k63sro$seu$1@ger.gmane.org>
References: <k620dh$lur$3@ger.gmane.org>
 <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
 <k63eqp$j8u$1@ger.gmane.org>
 <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com>
Mime-Version: 1.0
X-Complaints-To: usenet@ger.gmane.org
X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu
User-Agent: Unison/2.1.9
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"; Format="flowed"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9MGdbt0025852

On 2012-10-22 15:25:19 +0000, Mike Abdullah said:

> 
> On 22 Oct 2012, at 13:39, James Sumners wrote:
> 
>> On 2012-10-22 08:46:49 +0000, Mike Abdullah said:
>> 
>>> James,
>>> If you're interested, our libssh2 wrapper lives here:
>>> https://github.com/karelia/libssh2_sftp-Cocoa-wrapper
>>> It might help locate your problem. (Even better in my book if you can 
>>> just extend it to your needs)
>> 
>> Looks good, but I'm going in a different direction with my interface.
> 
> If you care to publish it when finished, I would be very interested to 
> see how you approach it differently.

Definitely.

> 
>> In regard to the problem, I don't see anything in your session class 
>> that would shed light on why libssh2 itself is failing. The error is 
>> occuring during the handshake while negotiating encryption keys.
> 
> I figured you might spot a difference in how the two talk to libssh2 
> that might throw light on the problem. Nothing more helpful than that 
> Iâ€™m afraid.

I think I've found the problem. Xcode is insisting on linking to the OS 
X bundled version of OpenSSL. I'm in the process of trying to figure 
out how to force it to use the right library.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 18:46:06 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGjvOd030264;
	Mon, 22 Oct 2012 18:46:05 +0200
Received: from mail-wg0-f54.google.com (mail-wg0-f54.google.com [74.125.82.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGjuLI030216
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 18:45:56 +0200
Received: by mail-wg0-f54.google.com with SMTP id dt10so1878857wgb.11
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 09:45:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer;
 bh=Lb0EPRfiYhpd2Jrj7JAaVe01iZVCQ0uLyp9Cei4CqZE=;
 b=TGCkPlBhNWngB/MXR/knK086jBsn2EGwA5lWYbYBm/QlfHfULEh/vzGHDS4atPcTNy
 //yKvzo0m1VwldGG36eAIwzTGaKVhJ680hOwPbjmkORiqnYhehlH4doVsVNBAilgdjRz
 Bd6DEIoDi/A8MVyZM/cHZgf/Tx6Qcyq9ca7Cw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=content-type:mime-version:subject:from:in-reply-to:date
 :content-transfer-encoding:message-id:references:to:x-mailer
 :x-gm-message-state;
 bh=Lb0EPRfiYhpd2Jrj7JAaVe01iZVCQ0uLyp9Cei4CqZE=;
 b=X5n9Vc+PcY+ncB8N3l+GoZUNHdADteuIsiS04DJmXghBWHoTI3bRPHxU0eJJxv6ZXo
 DuvyqOBdt48KPzB/ymIqznIlt558XJov2Rc7QFw+J41zFVEUJrBS9QlQGScyGRCFsQKl
 EDRdhV2rTYe+RBTCafBuDWLasz7RaJD3mNOlFIQJeiB105bJdJ+F7Zn/6Xb6tisE/0lD
 9IZbf0t3WlbAiomQs8HlX/27BpVWN+uCFnniD8NdPO5H2JLYyLmiAz8/b5HWDXPzSQ7k
 7LkoPzQvhysbtHParDxLCjfTJomdQGyZxRIFmw4h5R01kBIrbeRfjD4bWYxr5IcDr+AQ
 0Bvg==
Received: by 10.180.74.33 with SMTP id q1mr38410406wiv.4.1350924352810;
 Mon, 22 Oct 2012 09:45:52 -0700 (PDT)
Received: from android_53e9a288fce7f1e5.mshome.net
 (87-194-215-37.bethere.co.uk. [87.194.215.37])
 by mx.google.com with ESMTPS id dq6sm17814329wib.5.2012.10.22.09.45.51
 (version=TLSv1/SSLv3 cipher=OTHER);
 Mon, 22 Oct 2012 09:45:52 -0700 (PDT)
Mime-Version: 1.0 (Apple Message framework v1278)
Subject: Re: Key exchange trashing memory
From: Mike Abdullah <mabdullah@karelia.com>
In-Reply-To: <k63sro$seu$1@ger.gmane.org>
Date: Mon, 22 Oct 2012 17:45:57 +0100
Message-Id: <997D2C15-A87F-4DF2-A397-17528CB39317@karelia.com>
References: <k620dh$lur$3@ger.gmane.org>
 <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
 <k63eqp$j8u$1@ger.gmane.org>
 <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com>
 <k63sro$seu$1@ger.gmane.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1278)
X-Gm-Message-State: ALoCoQmmYyi4gcqw2VY/5bOBmdNvsxOPJsAHiZpK6X/WtJasBtpkRgi93BI0h+OwjuC3Q1RAFy/A
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id
 q9MGjuLI030216
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="windows-1252"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGjvOd030264


On 22 Oct 2012, at 17:39, James Sumners wrote:

> I think I've found the problem. Xcode is insisting on linking to the OS X bundled version of OpenSSL. I'm in the process of trying to figure out how to force it to use the right library.

Aha, well our code does specially link against an old copy of libcrypto just so we can force Xcode to use the right one. We don’t actually deploy a copy of the library, just use it to nudge the linker.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 19:00:39 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MH0XLM007001;
	Mon, 22 Oct 2012 19:00:38 +0200
Received: from plane.gmane.org (plane.gmane.org [80.91.229.3])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MH0WOA006996
 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 19:00:32 +0200
Received: from list by plane.gmane.org with local (Exim 4.69)
 (envelope-from <gnslg-libssh2-devel-2@m.gmane.org>)
 id 1TQLMi-0006l2-Nq
 for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 19:00:36 +0200
Received: from sumners-osx.clayton.edu ([168.28.245.176])
 by main.gmane.org with esmtp (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 19:00:36 +0200
Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1
 (Debian)) id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 19:00:36 +0200
X-Injected-Via-Gmane: http://gmane.org/
To: libssh2-devel@cool.haxx.se
From: James Sumners <james.sumners@gmail.com>
Subject: Re: [PATCH] examples: use stderr for messages, stdout for data
Date: Mon, 22 Oct 2012 13:00:18 -0400
Lines: 18
Message-ID: <k63u30$959$1@ger.gmane.org>
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
 <20121022163800.22393.qmail@stuge.se>
Mime-Version: 1.0
X-Complaints-To: usenet@ger.gmane.org
X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu
User-Agent: Unison/2.1.9
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On 2012-10-22 16:38:00 +0000, Peter Stuge said:

> Kamil Dudka wrote:
>> Reported by: Karel Srot
>> Bug: https://bugzilla.redhat.com/867462
> 
> I think this is a waste of time.
> 
> The examples are *library usage examples* - they are not supposed to
> be useful beyond that. Anyone caring about how they output their
> bytes is clearly not focusing on *library usage*.
> 
> 
> //Peter

I agree. I read the RH BugZilla and thought "why is this even a report? 
They are examples, not programs to be used in production."


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 21:52:48 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MJqN3O026992;
	Mon, 22 Oct 2012 21:52:44 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MJqLeD026960
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 21:52:21 +0200
Received: from int-mx10.intmail.prod.int.phx2.redhat.com
 (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MJqKqG020412
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
 Mon, 22 Oct 2012 15:52:21 -0400
Received: from nbkamil.localnet (vpn1-7-141.ams2.redhat.com [10.36.7.141])
 by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q9MJqIAF022803; Mon, 22 Oct 2012 15:52:19 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: James Sumners <james.sumners@gmail.com>
Subject: Re: [PATCH] examples: use stderr for messages, stdout for data
Date: Mon, 22 Oct 2012 21:52:15 +0200
Message-ID: <2119335.tfSgouqnTz@nbkamil>
User-Agent: KMail/4.9.2 (Linux/3.4.4-gentoo+; KDE/4.9.2; x86_64; ; )
In-Reply-To: <k63u30$959$1@ger.gmane.org>
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
 <20121022163800.22393.qmail@stuge.se> <k63u30$959$1@ger.gmane.org>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23
Cc: Peter Stuge <peter@stuge.se>, libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Monday, October 22, 2012 13:00:18 James Sumners wrote:
> On 2012-10-22 16:38:00 +0000, Peter Stuge said:
> > Kamil Dudka wrote:
> >> Reported by: Karel Srot
> >> Bug: https://bugzilla.redhat.com/867462
> > 
> > I think this is a waste of time.

I am not forcing anybody to work on this.  The time I spent on writing
the patch was sponsored by my employer, so it was not a big waste really.

> > The examples are *library usage examples* - they are not supposed to
> > be useful beyond that. Anyone caring about how they output their
> > bytes is clearly not focusing on *library usage*.
> > 
> > 
> > //Peter
> 
> I agree. I read the RH BugZilla and thought "why is this even a report?
> They are examples, not programs to be used in production."

We are trying to introduce an easy way to test new releases of libssh2 
independently of the libraries and applications that use it.  Running the
set of examples distributed with libssh2 seemed like a reasonable step to 
start with.

To improve the test coverage, I asked Karel Srot to write some tests checking 
whether the contents of the transferred files matches the original contents.  
Obviously, this is something hard to check as long as the output of the 
examples is interleaved with verbose messages.

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 22:05:32 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MK5RRD006359;
	Mon, 22 Oct 2012 22:05:31 +0200
Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9MK5QxF006353
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 22:05:26 +0200
Received: (qmail 6314 invoked by uid 501); 22 Oct 2012 20:05:27 -0000
Message-ID: <20121022200527.6313.qmail@stuge.se>
Date: Mon, 22 Oct 2012 22:05:27 +0200
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] examples: use stderr for messages, stdout for data
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
 <20121022163800.22393.qmail@stuge.se> <k63u30$959$1@ger.gmane.org>
 <2119335.tfSgouqnTz@nbkamil>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <2119335.tfSgouqnTz@nbkamil>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Kamil Dudka wrote:
> > > I think this is a waste of time.
> 
> I am not forcing anybody to work on this.  The time I spent on writing
> the patch was sponsored by my employer, so it was not a big waste really.

Waste for the employer IMO.


> We are trying to introduce an easy way to test new releases of
> libssh2 independently of the libraries and applications that use it.

This is a great idea!


> Running the set of examples distributed with libssh2 seemed like a
> reasonable step to start with.

This not so much. The examples are, third time, intended to
demonstrate *library usage*. They are specifically not test cases.

I would very much welcome test cases, which use the library, and not
the examples.

The exapmles can be improved to be more readable, so that they better
serve their function of demonstrating library usage, but please stop
mistaking them for test cases sooner rather than later.


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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 22:41:36 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKfU0T002205;
	Mon, 22 Oct 2012 22:41:35 +0200
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKfSv0002189
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 22:41:29 +0200
Received: from int-mx12.intmail.prod.int.phx2.redhat.com
 (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25])
 by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MKfT4L005528
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
 Mon, 22 Oct 2012 16:41:29 -0400
Received: from nbkamil.localnet (vpn1-7-141.ams2.redhat.com [10.36.7.141])
 by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id
 q9MKfSrc031958; Mon, 22 Oct 2012 16:41:29 -0400
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: [PATCH] examples: use stderr for messages, stdout for data
Date: Mon, 22 Oct 2012 22:41:25 +0200
Message-ID: <26520325.S8Xus5HSlQ@nbkamil>
User-Agent: KMail/4.9.2 (Linux/3.4.4-gentoo+; KDE/4.9.2; x86_64; ; )
In-Reply-To: <20121022200527.6313.qmail@stuge.se>
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
 <2119335.tfSgouqnTz@nbkamil> <20121022200527.6313.qmail@stuge.se>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Monday, October 22, 2012 22:05:27 Peter Stuge wrote:
> Kamil Dudka wrote:
> > > > I think this is a waste of time.
> > 
> > I am not forcing anybody to work on this.  The time I spent on writing
> > the patch was sponsored by my employer, so it was not a big waste really.
> 
> Waste for the employer IMO.
> 
> > We are trying to introduce an easy way to test new releases of
> > libssh2 independently of the libraries and applications that use it.
> 
> This is a great idea!
> 
> > Running the set of examples distributed with libssh2 seemed like a
> > reasonable step to start with.
> 
> This not so much. The examples are, third time, intended to
> demonstrate *library usage*. They are specifically not test cases.
> 
> I would very much welcome test cases, which use the library, and not
> the examples.

I agree, we need test cases.  Still, the test cases can be based on the 
examples.  If we need to test sftp, scp, tcp/ip forwarding, etc., we can
just run the corresponding examples in a defined way and compare their
output with the expected one.  Otherwise we would have to duplicate the
code exercising libssh2 and maintain it at two places.

> The exapmles can be improved to be more readable, so that they better
> serve their function of demonstrating library usage, but please stop
> mistaking them for test cases sooner rather than later.

I admit that my patch does not bring any major improvement from user's
point of view, but I do not think it anyhow breaks the original purpose
of those examples.

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

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 22 22:46:59 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKkv7M005891;
	Mon, 22 Oct 2012 22:46:58 +0200
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKktaL005867
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 22:46:55 +0200
Received: from localhost (dast@localhost)
 by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9MKktjQ005860
 for <libssh2-devel@cool.haxx.se>; Mon, 22 Oct 2012 22:46:55 +0200
X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs
Date: Mon, 22 Oct 2012 22:46: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: [PATCH] examples: use stderr for messages, stdout for data
In-Reply-To: <26520325.S8Xus5HSlQ@nbkamil>
Message-ID: <alpine.DEB.2.00.1210222244200.23331@tvnag.unkk.fr>
References: <1350906443-20504-1-git-send-email-kdudka@redhat.com>
 <2119335.tfSgouqnTz@nbkamil> <20121022200527.6313.qmail@stuge.se>
 <26520325.S8Xus5HSlQ@nbkamil>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On Mon, 22 Oct 2012, Kamil Dudka wrote:

> I admit that my patch does not bring any major improvement from user's point 
> of view, but I do not think it anyhow breaks the original purpose of those 
> examples.

I agree. I don't think the patch harms anything but actually makes the 
situation slightly better.

I'm not entirely sure however that basing tests on the example code is a good 
idea, but I also feel that the one who's doing the job right now gets to do a 
fair bit of deciding. We _can_ after all clone the examples into separate test 
cases at a later point (instead of doing it immediately now) in case we end up 
needing that.


-- 

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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 23 00:58:56 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MMwVOW024773;
	Tue, 23 Oct 2012 00:58:52 +0200
Received: from plane.gmane.org (plane.gmane.org [80.91.229.3])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MMwTY8024768
 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 00:58:29 +0200
Received: from list by plane.gmane.org with local (Exim 4.69)
 (envelope-from <gnslg-libssh2-devel-2@m.gmane.org>)
 id 1TQQxA-0004hf-Qx
 for libssh2-devel@cool.haxx.se; Tue, 23 Oct 2012 00:58:36 +0200
Received: from 208.65.91.109 ([208.65.91.109])
 by main.gmane.org with esmtp (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 00:58:36 +0200
Received: from james.sumners by 208.65.91.109 with local (Gmexim 0.1 (Debian))
 id 1AlnuQ-0007hv-00
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 00:58:36 +0200
X-Injected-Via-Gmane: http://gmane.org/
To: libssh2-devel@cool.haxx.se
From: James Sumners <james.sumners@gmail.com>
Subject: Re: Key exchange trashing memory
Date: Mon, 22 Oct 2012 18:58:20 -0400
Lines: 18
Message-ID: <k64j29$26l$1@ger.gmane.org>
References: <k620dh$lur$3@ger.gmane.org>
 <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com>
 <k63eqp$j8u$1@ger.gmane.org>
 <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com>
 <k63sro$seu$1@ger.gmane.org>
 <997D2C15-A87F-4DF2-A397-17528CB39317@karelia.com>
Mime-Version: 1.0
X-Complaints-To: usenet@ger.gmane.org
X-Gmane-NNTP-Posting-Host: 208.65.91.109
User-Agent: Unison/2.1.9
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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"; Format="flowed"
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9MMwVOW024773

On 2012-10-22 16:45:57 +0000, Mike Abdullah said:

> 
> On 22 Oct 2012, at 17:39, James Sumners wrote:
> 
>> I think I've found the problem. Xcode is insisting on linking to the OS 
>> X bundled version of OpenSSL. I'm in the process of trying to figure 
>> out how to force it to use the right library.
> 
> Aha, well our code does specially link against an old copy of libcrypto 
> just so we can force Xcode to use the right one. We donâ€™t actually 
> deploy a copy of the library, just use it to nudge the linker.

It was definitely a problem with my test application linking to the 
system libcrypto.dylib instead of my own libcrypto.a. Took a while to 
figure out how to fix that. I'll post instructions along with my 
interface when it's releasable.


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

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 23 03:46:57 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9N1kXrH014631;
	Tue, 23 Oct 2012 03:46:53 +0200
Received: from earth.stuge.se (earth.stuge.se [212.116.89.126])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9N1kVxJ014616
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 03:46:32 +0200
Received: (qmail 13423 invoked from network); 23 Oct 2012 01:46:29 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
 by localhost with SMTP; 23 Oct 2012 01:46:29 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 1.0dev
Precedence: bulk
Auto-Submitted: auto-generated
X-Mailer: Trac 1.0dev, by Edgewall Software
To: jaf@meyersound.com
X-Trac-Project: libssh2
Date: Tue, 23 Oct 2012 01:46:29 -0000
X-URL: https://trac.libssh2.org/
Subject: [libssh2] #250: libssh2_channel_send_eof() sometimes fails when
 used in non-blocking mode
X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/250
Message-ID: <045.71dc68c0246eaefb66a5712cf86a4fa0@libssh2.stuge.se>
X-Trac-Ticket-ID: 250
X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9N1kVxJ014616
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

#250: libssh2_channel_send_eof() sometimes fails when used in non-blocking mode
-------------------------------------------+--------------------
 Reporter:  jfriesne                       |       Owner:
     Type:  defect                         |      Status:  new
 Priority:  normal                         |   Milestone:  1.4.3
Component:  API                            |     Version:  1.4.2
 Keywords:  non-blocking channel_send_eof  |  Blocked By:
   Blocks:                                 |
-------------------------------------------+--------------------
 Hi there libssh2 developers,

 I think I've found a bug in the libssh2_channel_send_eof() function, when
 it is used in conjunction with libssh's non-blocking mode.

 The symptom for me is this:  I have a program that uses libssh2 1.4.2 to
 upload multiple files at once.  Each upload is handled by a different
 thread with its own (non-shared) libssh2 session object.  Under Windows 7,
 about 80% of the time one or more of the uploads (at random) would fail
 with libssh2_channel_send_eof() returning error -7 (aka
 LIBSSH2_ERROR_SOCKET_SEND).

 I did some investigation and found found that the call to
 _libssh2_transport_write() inside channel_send_eof() was failing, with
 error code -39 (aka LIBSSH2_ERROR_BAD_USE), which AFAIK should never
 occur.

 A little more investigation revealed what is happening:  sometimes
 channel_send_eof()'s first call to _libssh2_transport_write() would result
 in LIBSSH2_ERROR_EAGAIN, because the socket's output buffer has no more
 space.  This is fine, but the problem is that the pointer passed in to
 _libssh2_transport_write() gets recorded into libssh2's transportpacket
 data structure, and then the next time _libssh2_transport_write() is
 called, it calls send_existing() and send_existing() checks to make sure
 that the pointer passed in on the second attempt is the same as the
 pointer that was passed in on the first attempt.

 That would all be fine, except that the 5-byte char array being sent by
 channel_send_eof() is located on the stack:

 static int channel_send_eof(LIBSSH2_CHANNEL *channel)
 {
     LIBSSH2_SESSION *session = channel->session;
     unsigned char packet[5];    /* packet_type(1) + channelno(4) */
     int rc;
 [...]
     rc = _libssh2_transport_write(session, packet, 5);
 [...]

 .... which means that the memory location pointed to by (packet) may be
 different each time channel_send_eof() is called, even if the data pointed
 to by (packet) is the same.  This is what triggers the
 LIBSSH2_ERROR_BAD_USE error inside send_existing(), which in turn causes
 libssh2_channel_send_eof() to fail.

 In my local copy of libssh2 I was able to resolve the problem by moving

        unsigned char packet[5];    /* packet_type(1) + channelno(4) */

 from the stack of the channel_send_eof() function into the LIBSSH2_CHANNEL
 object instead (i.e. as a member variable).  That way the memory location
 of (packet) will always be the same for a given channel object, and thus
 the false-positive error detection is avoided.

 I hope that all made sense -- if not, feel free to email me
 (jaf@meyersound.com).

 -Jeremy

-- 
Ticket URL: <https://trac.libssh2.org/ticket/250>
libssh2 <https://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 23 17:27:22 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9NFQw0N031549;
	Tue, 23 Oct 2012 17:27:17 +0200
Received: from smtp1.hushmail.com (smtp1a.hushmail.com [65.39.178.236])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9NFQuAM031507
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 17:26:57 +0200
Received: from smtp1.hushmail.com (smtp1a.hushmail.com [65.39.178.236])
 by smtp1.hushmail.com (Postfix) with SMTP id 5B1A02FDF1
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 15:26:56 +0000 (UTC)
Received: from smtp.hushmail.com (w7.hushmail.com [65.39.178.32])
 by smtp1.hushmail.com (Postfix) with ESMTP
 for <libssh2-devel@cool.haxx.se>; Tue, 23 Oct 2012 15:26:56 +0000 (UTC)
Received: by smtp.hushmail.com (Postfix, from userid 99)
 id 10E2B6F454; Tue, 23 Oct 2012 15:26:56 +0000 (UTC)
MIME-Version: 1.0
Date: Tue, 23 Oct 2012 16:26:55 +0100
To: libssh2-devel@cool.haxx.se
Subject: libssh2_userauth_publickey functionning
From: scout_game@hushmail.me
Message-Id: <20121023152656.10E2B6F454@smtp.hushmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

Good morning;
I want to use libssh2_userauth_publickey for my apps, I have seen a usage of this function from agent.c source file, but here I don't understand what is going on. Normally libssh2_userauth_publickey_fromfile() requires both public and private keys to authenticate. This is usual but I haven't seen libssh2_userauth_publickey uses any private key but only a public key in its argument as unsigned char* variable. So should I setup my ssh to authenticate without providing a private key before using libssh2_userauth_publickey ? if yes I have no clue how to do that, maybe should I generate the pub/priv keys from the remote server and copy the public key to my local computer but I haven't tried that trick before so don't know if this is the solution or there is something else hidden.
Regards

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

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 25 12:44:53 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PAiQ27014358;
	Thu, 25 Oct 2012 12:44:44 +0200
Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com
 [209.85.214.182])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PAiNLp014332
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Thu, 25 Oct 2012 12:44:24 +0200
Received: by mail-ob0-f182.google.com with SMTP id wc20so1432984obb.41
 for <libssh2-devel@cool.haxx.se>; Thu, 25 Oct 2012 03:44:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=ideadevice.com; s=google;
 h=mime-version:date:message-id:subject:from:to:content-type;
 bh=jBRkiszkM8rJ2W89RVq0yDoCh9VM7aK+Vg1ymQWKk9g=;
 b=eqOIbvE3BAVUF4ihuOi+5QKFcn++lb1ZI7xOFXvyshZV7b+GbSNByRjAspIhYko8nS
 0vB4ZP9iDJozkzbJeSQIa6SvH65N0afy/wmDcQCdixu/NO0pRLx92H/fBbhe7T8seCEQ
 BZOio79R6GB+5gRyVhqWF4EuBcrrR20fCqqjg=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=google.com; s=20120113;
 h=mime-version:date:message-id:subject:from:to:content-type
 :x-gm-message-state;
 bh=jBRkiszkM8rJ2W89RVq0yDoCh9VM7aK+Vg1ymQWKk9g=;
 b=g8n/PQ0HkRrlEBEX/4LvNZJvJpEvYLpJIIkLoyX4r8kfqVC86SjRNIc18KXqUJTs7u
 Rraf0BZLaxJeLAK4Kn90igVm8CnJUEm3egMkPuBUeOzUoyd2ldlxCCDYklD+1Uz8UdrU
 4JRwLqxcIvy90vfv7z0zWByWlPCSdvO/vknSTJW2UZSloJFJmxRKZrEeBuWc1Y/jPVO9
 NKLGYw05wVWDx7jFSySmMzHpmmQ+4tudyZ9JvDH2j/wRuZPkzc1N51jq3atvu55OV2U7
 mCmErO5C3+k53nKwgKCkpy5Sn4IncfyQsOuVde3Nbo37//wE4SG53vquW0KSMiL50H6d
 7Xlw==
MIME-Version: 1.0
Received: by 10.182.113.5 with SMTP id iu5mr15306002obb.36.1351161859125; Thu,
 25 Oct 2012 03:44:19 -0700 (PDT)
Received: by 10.182.81.199 with HTTP; Thu, 25 Oct 2012 03:44:17 -0700 (PDT)
Date: Thu, 25 Oct 2012 16:14:17 +0530
Message-ID: <CAKXjG14j9cxO8tKxkWFEzVDkywhfuXcXHHY3FcSag+A05vBfSg@mail.gmail.com>
Subject: Issue with libssh2_channel_wait_closed() after Shell is requested.
From: Ravikanth Sharma <ravi@ideadevice.com>
To: libssh2-devel@cool.haxx.se
X-Gm-Message-State: ALoCoQknbu2DtJY3+00O7Jp+RvY9te752NxKAZ/m389JGtnJY8cS11kBJ23hHHea4m2RUNdFMOJ8
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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="===============1309106277=="
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

--===============1309106277==
Content-Type: multipart/alternative; boundary=f46d0447f188a5afe404ccdfe216

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

Hi folks,

libssh2_channel_wait_closed() returns -34 (LIBSSH2_ERROR_INVAL) after shell
is requested(libssh2_channel_shell()).
It works fine (returns 0) when there is no shell open on channel.

Is there something extra I need to do to close the channel properly with
shell running?
Why cant I follow libssh2_channel_close() with
libssh2_channel_wait_closed() when the shell is running?

<Code>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

/*******************************************************
 *                                                     *
 * NO LICENSE, THIS CODE IS PUBLIC DOMAIN              *
 *                                                     *
 * Written by Pioz                                     *
 * To compile: "gcc -o ssh_client ssh_client.c -lssh2" *
 *******************************************************/

#include <arpa/inet.h>
#include <stdio.h>
#include <libssh2.h>


int
main (int argc, char **argv)
{
  if (argc != 4)
    {
      fprintf (stderr, "usage: %s host user pass\n", argv[0]);
      return -1;
    }

  char *host = argv[1];
  int   port = 22;
  char *user = argv[2];
  char *pass = argv[3];

  int sock;
  LIBSSH2_SESSION *session;
  LIBSSH2_CHANNEL *channel;
  struct sockaddr_in sin;

  // Make a connection on port 22
  sock = socket (AF_INET, SOCK_STREAM, 0);
  sin.sin_family = AF_INET;
  sin.sin_port = htons (port);
  sin.sin_addr.s_addr = inet_addr (host);
  if (connect (sock, (struct sockaddr*)(&sin), sizeof (struct sockaddr_in))
!= 0)
    {
      fprintf (stderr, "Connection failed!\n");
      return -1;
    }
  session = libssh2_session_init ();
  if (libssh2_session_startup (session, sock))
    {
      fprintf (stderr, "SSH connection failed!\n");
      return -1;
    }

  // Authentication
  if (libssh2_userauth_password (session, user, pass))
    {
      fprintf (stderr, "Authentication failed!\n");
      return -1;
    }
  printf ("Authentication successfully!\n");

  // Open terminal
  if (!(channel = libssh2_channel_open_session (session)))
    {
      fprintf (stderr, "Cannot open channel!\n");
      return -1;
    }

  printf ( "\nrequest_pty:\t%d", libssh2_channel_request_pty (channel,
"vt100"));
  printf ( "\nshell:\t%d", libssh2_channel_shell (channel));

  // Close terminal
  printf ( "\nclose:\t%d", libssh2_channel_close (channel));
  printf ( "\nwait_closed:\t%d", libssh2_channel_wait_closed (channel));
  libssh2_channel_free (channel);

  // Disconnect
  libssh2_session_disconnect (session, "Goodbye");
  libssh2_session_free (session);

  printf ("\nAll done.\n");

  return 0;
}

</Code>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Cheers!

Ravi

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

Hi folks,<br><br>libssh2_channel_wait_closed() returns -34 (LIBSSH2_ERROR_I=
NVAL) after shell is requested(libssh2_channel_shell()).<br>It works fine (=
returns 0) when there is no shell open on channel.<br><br>Is there somethin=
g extra I need to do to close the channel properly with shell running?<br>
Why cant I follow libssh2_channel_close() with libssh2_channel_wait_closed(=
) when the shell is running?<br><br>&lt;Code&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt=
;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&g=
t;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&=
gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;=
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt=
;&gt;&gt;&gt;&gt;&gt;<br>
<br>/*******************************************************<br>=A0*=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
 *<br>=A0* NO LICENSE, THIS CODE IS PUBLIC DOMAIN=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 *<br>=A0*=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 *<br>
=A0* Written by Pioz=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 *<br>=A0* To compile=
: &quot;gcc -o ssh_client ssh_client.c -lssh2&quot; *<br>=A0***************=
****************************************/<br><br>#include &lt;arpa/inet.h&g=
t;<br>
#include &lt;stdio.h&gt;<br>#include &lt;libssh2.h&gt;<br><br><br>int<br>ma=
in (int argc, char **argv)<br>{<br>=A0 if (argc !=3D 4)<br>=A0=A0=A0 {<br>=
=A0=A0=A0=A0=A0 fprintf (stderr, &quot;usage: %s host user pass\n&quot;, ar=
gv[0]);<br>=A0=A0=A0=A0=A0 return -1;<br>
=A0=A0=A0 }<br><br>=A0 char *host =3D argv[1];<br>=A0 int=A0=A0 port =3D 22=
;<br>=A0 char *user =3D argv[2];<br>=A0 char *pass =3D argv[3];<br><br>=A0 =
int sock;<br>=A0 LIBSSH2_SESSION *session;<br>=A0 LIBSSH2_CHANNEL *channel;=
<br>=A0 struct sockaddr_in sin;<br>
=A0<br>=A0 // Make a connection on port 22<br>=A0 sock =3D socket (AF_INET,=
 SOCK_STREAM, 0);<br>=A0 sin.sin_family =3D AF_INET;<br>=A0 sin.sin_port =
=3D htons (port);<br>=A0 sin.sin_addr.s_addr =3D inet_addr (host);<br>=A0 i=
f (connect (sock, (struct sockaddr*)(&amp;sin), sizeof (struct sockaddr_in)=
) !=3D 0)<br>
=A0=A0=A0 {<br>=A0=A0=A0=A0=A0 fprintf (stderr, &quot;Connection failed!\n&=
quot;);<br>=A0=A0=A0=A0=A0 return -1;<br>=A0=A0=A0 }<br>=A0 session =3D lib=
ssh2_session_init ();<br>=A0 if (libssh2_session_startup (session, sock))<b=
r>=A0=A0=A0 {<br>=A0=A0=A0=A0=A0 fprintf (stderr, &quot;SSH connection fail=
ed!\n&quot;);<br>
=A0=A0=A0=A0=A0 return -1;<br>=A0=A0=A0 }<br><br>=A0 // Authentication<br>=
=A0 if (libssh2_userauth_password (session, user, pass))<br>=A0=A0=A0 {<br>=
=A0=A0=A0=A0=A0 fprintf (stderr, &quot;Authentication failed!\n&quot;);<br>=
=A0=A0=A0=A0=A0 return -1;<br>=A0=A0=A0 }<br>=A0 printf (&quot;Authenticati=
on successfully!\n&quot;);<br>
=A0<br>=A0 // Open terminal<br>=A0 if (!(channel =3D libssh2_channel_open_s=
ession (session)))<br>=A0=A0=A0 {<br>=A0=A0=A0=A0=A0 fprintf (stderr, &quot=
;Cannot open channel!\n&quot;);<br>=A0=A0=A0=A0=A0 return -1;<br>=A0=A0=A0 =
} <br><br>=A0 printf ( &quot;\nrequest_pty:\t%d&quot;, libssh2_channel_requ=
est_pty (channel, &quot;vt100&quot;));<br>
=A0 printf ( &quot;\nshell:\t%d&quot;, libssh2_channel_shell (channel));<br=
><br>=A0 // Close terminal<br>=A0 printf ( &quot;\nclose:\t%d&quot;, libssh=
2_channel_close (channel));<br>=A0 printf ( &quot;\nwait_closed:\t%d&quot;,=
 libssh2_channel_wait_closed (channel));<br>
=A0 libssh2_channel_free (channel); <br>=A0<br>=A0 // Disconnect<br>=A0 lib=
ssh2_session_disconnect (session, &quot;Goodbye&quot;);<br>=A0 libssh2_sess=
ion_free (session); <br><br>=A0 printf (&quot;\nAll done.\n&quot;);<br><br>=
=A0 return 0;<br>
}<br><br>&lt;/Code&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&=
gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;=
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt=
;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&g=
t;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
<br>Cheers!<br><br>Ravi<br>

--f46d0447f188a5afe404ccdfe216--

--===============1309106277==
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

--===============1309106277==--

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 25 13:55:44 2012
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from www.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PBtUvL031688;
	Thu, 25 Oct 2012 13:55:41 +0200
Received: from mail-qa0-f54.google.com (mail-qa0-f54.google.com
 [209.85.216.54])
 by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PBtREK031609
 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT)
 for <libssh2-devel@cool.haxx.se>; Thu, 25 Oct 2012 13:55:28 +0200
Received: by mail-qa0-f54.google.com with SMTP id p27so1851445qat.20
 for <libssh2-devel@cool.haxx.se>; Thu, 25 Oct 2012 04:55:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=mime-version:sender:in-reply-to:references:date
 :x-google-sender-auth:message-id:subject:from:to:content-type
 :content-transfer-encoding;
 bh=o7oFoKLJlpROWzeXQVXn065AirySVRf2cmNmdzJv9BI=;
 b=jDowtMQN42G7LnNBRdqR9laUEDnV608JxOqSh6cAPjMbWziWaX2qeyNih2Iv+lZQDz
 2LdT1MmhxIuQTbaIPRAB+CVQYZ9e7fD2FtBgXp3mLtYoiv9rHDHg4XKblQgcj8jDuH78
 DXedW9eqfaX3NQY2aKgEQIdVKEReQcsnLQsdroVaqR8xI+OkVNUAQN/c/HrMB2DbRrcB
 9OZzXe+P0qRUH8dX7ESXITV9OrOaQAIVucPZIEn/4jV7SWDyS3ehg9F8ZofoRROcqgy4
 dkZ+e8t4XTlEdKU24oZpe8h+SaX8DgnuouP+eNH4ALjGXYnIos+cQ6GnAnwox1QzCwT8
 P4/A==
MIME-Version: 1.0
Received: by 10.224.116.12 with SMTP id k12mr6438010qaq.47.1351166123963; Thu,
 25 Oct 2012 04:55:23 -0700 (PDT)
Received: by 10.229.2.205 with HTTP; Thu, 25 Oct 2012 04:55:23 -0700 (PDT)
In-Reply-To: <20121023152656.10E2B6F454@smtp.hushmail.com>
References: <20121023152656.10E2B6F454@smtp.hushmail.com>
Date: Thu, 25 Oct 2012 12:55:23 +0100
X-Google-Sender-Auth: yAq4ZjdoM9gRO5ruIG8ryJdmevo
Message-ID: <CADyPeTP6cuvUMAhyu3UzDxkmyqy2adF0GAzdy6e3h+n5+CjZfw@mail.gmail.com>
Subject: Re: libssh2_userauth_publickey functionning
From: Alexander Lamaison <swish@lammy.co.uk>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id
 q9PBtREK031609
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.15
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
Errors-To: libssh2-devel-bounces@cool.haxx.se
Sender: "libssh2-devel" <libssh2-devel-bounces@cool.haxx.se>

On 23 October 2012 16:26,  <scout_game@hushmail.me> wrote:
> Good morning;
> I want to use libssh2_userauth_publickey for my apps, I have seen a usage of this function from agent.c source file, but here I don't understand what is going on.

The easiest way to use public key authentication with libssh2 is to
use the key agent API.  These are the API functions that start with
'libssh2_agent_'.  This way the user loads their keys into the
appropriate keychain for their platform (for instance Pageant on
Windows) and you call the agent api functions to authenticate using
those keys.

> Normally libssh2_userauth_publickey_fromfile() requires both public and private keys to authenticate.

If you are using the OpenSSL crypto backend, you only need to provide
the private key.  The public key is extracted from it.

> This is usual but I haven't seen libssh2_userauth_publickey uses any private key but only a public key in its argument as unsigned char* variable. So should I setup my ssh to authenticate without providing a private key before using libssh2_userauth_publickey ?

I believe that libssh2_userauth_publickey expects you to sign the data
manually yourself using a private key in the function you pass as a
callback to the sign_callback argument.  But I'm not 100% sure.  Noone
seems to remember quite how this API call works and it isn't
documented.  Notice that libssh2_userauth_publickey_from_file_ex is
implemented in terms of libssh2_userauth_publickey and includes and
example of a sign_callback function.

> maybe should I generate the pub/priv keys from the remote server and copy the public key to my local computer but I haven't tried that trick before so don't know if this is the solution or there is something else hidden.

How you distribute and install the public keys depends on your SSH
server.  For OpenSSH you copy and paste the public key line into the
~/.ssh/authorized_keys file.

Alex

-- 
Swish - Easy SFTP for Windows Explorer (http://www.swish-sftp.org)

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

