SSH: SshHosts error handling improved. Various fixes & cosmetics.

git-svn-id: svn://ultimatepp.org/upp/trunk@12181 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
oblivion 2018-08-23 12:50:05 +00:00
parent 00e99f14ef
commit 203b2252ae
13 changed files with 278 additions and 429 deletions

View file

@ -119,7 +119,7 @@ dword Ssh::GetWaitEvents()
void Ssh::SetError(int rc, const String& reason)
{
if(IsNull(reason) && ssh && ssh->session) {
Buffer<char*> libmsg(256);
Buffer<char*> libmsg(256, 0);
rc = libssh2_session_last_error(ssh->session, libmsg, nullptr, 0);
throw Error(rc, *libmsg);
}

View file

@ -1,137 +1,147 @@
#include "SSH.h"
namespace Upp {
bool SshHosts::Add(const String& host, int port, const Info& info, const String& comment)
{
return Add(Format("[%s]:%d", host, port), info, comment);
}
bool SshHosts::Add(const String& host, const Info& info, const String& comment)
{
ASSERT(ssh_session);
bool b = handle &&
libssh2_knownhost_addc(
handle,
~host,
NULL,
~info.key, info.key.GetLength(),
~comment, comment.GetLength(),
info.type |
LIBSSH2_KNOWNHOST_TYPE_PLAIN |
LIBSSH2_KNOWNHOST_KEYENC_RAW,
NULL
) == 0;
return b ? b : Error();
}
bool SshHosts::Remove(SshHost* host)
{
ASSERT(ssh_session);
auto b = handle && libssh2_knownhost_del(handle, host) == 0;
return b ? b : Error();
}
bool SshHosts::Load(const String& filename)
{
ASSERT(ssh_session);
file_path = filename;
auto b = libssh2_knownhost_readfile(handle, ~file_path, LIBSSH2_KNOWNHOST_FILE_OPENSSH) >= 0;
return b ? b : Error();
}
bool SshHosts::Save()
{
return SaveAs(file_path);
}
bool SshHosts::SaveAs(const String& filename)
{
ASSERT(ssh_session);
auto b = handle && libssh2_knownhost_writefile(handle, ~filename, LIBSSH2_KNOWNHOST_FILE_OPENSSH) == 0;
return b ? b : Error();
}
SshHosts::Info SshHosts::Check(const String& host, int port)
{
ASSERT(ssh_session);
Info info;
if(handle) {
int type = 0;
size_t length = 0;
auto* p = libssh2_session_hostkey(ssh_session, &length, &type);
if(!p) {
Error();
info.status = LIBSSH2_KNOWNHOST_CHECK_FAILURE;
return pick(info);
}
info.status = libssh2_knownhost_checkp(
handle,
~host,
port,
p,
length,
LIBSSH2_KNOWNHOST_TYPE_PLAIN |
LIBSSH2_KNOWNHOST_KEYENC_RAW,
NULL
);
info.key.Set(p, length);
switch(type) {
case LIBSSH2_HOSTKEY_TYPE_RSA:
info.type = LIBSSH2_KNOWNHOST_KEY_SSHRSA;
break;
case LIBSSH2_HOSTKEY_TYPE_DSS:
info.type = LIBSSH2_KNOWNHOST_KEY_SSHDSS;
break;
case LIBSSH2_HOSTKEY_TYPE_UNKNOWN:
info.type = LIBSSH2_KNOWNHOST_KEY_UNKNOWN;
break;
default:
NEVER();
}
}
return pick(info);
}
Vector<SshHost*> SshHosts::GetHosts()
{
ASSERT(ssh_session);
Vector<SshHost*> v;
SshHost *prev = NULL, *next = NULL;
int rc = libssh2_knownhost_get(handle, &prev, NULL);
if(rc >= 0) {
v.Add(prev);
if(rc == 0)
while(rc < 1) {
rc = libssh2_knownhost_get(handle, &next, prev);
if(rc < 0) break;
v.Add(next);
prev = next;
}
}
if(rc < 0) Error();
return pick(v);
}
bool SshHosts::Error()
{
ASSERT(ssh_session);
String msg = !handle ? "Invalid host handle." : "";
//_error = ssh_liberror(ssh_session, handle ? 0 : -1, msg);
return false;
}
SshHosts::SshHosts(SshSession& session)
{
ASSERT(session.GetHandle());
ssh_session = session.GetHandle();
handle = libssh2_knownhost_init(ssh_session);
}
SshHosts::~SshHosts()
{
if(ssh_session && handle)
libssh2_knownhost_free(handle);
}
#include "SSH.h"
namespace Upp {
#define LLOG(x) do { if(SSH::sTrace) RLOG("SshHosts: " << x); } while(false)
bool SshHosts::Add(const String& host, int port, const Info& info, const String& comment)
{
return Add(Format("[%s]:%d", host, port), info, comment);
}
bool SshHosts::Add(const String& host, const Info& info, const String& comment)
{
ASSERT(ssh_session);
Clear();
bool b = handle &&
libssh2_knownhost_addc(
handle,
~host,
NULL,
~info.key, info.key.GetLength(),
~comment, comment.GetLength(),
info.type |
LIBSSH2_KNOWNHOST_TYPE_PLAIN |
LIBSSH2_KNOWNHOST_KEYENC_RAW,
NULL
) == 0;
return b ? b : Error();
}
bool SshHosts::Remove(SshHost* host)
{
ASSERT(ssh_session);
Clear();
auto b = handle && libssh2_knownhost_del(handle, host) == 0;
return b ? b : Error();
}
bool SshHosts::Load(const String& filename)
{
ASSERT(ssh_session);
Clear();
file_path = filename;
auto b = libssh2_knownhost_readfile(handle, ~file_path, LIBSSH2_KNOWNHOST_FILE_OPENSSH) >= 0;
return b ? b : Error();
}
bool SshHosts::Save()
{
return SaveAs(file_path);
}
bool SshHosts::SaveAs(const String& filename)
{
ASSERT(ssh_session);
Clear();
auto b = handle && libssh2_knownhost_writefile(handle, ~filename, LIBSSH2_KNOWNHOST_FILE_OPENSSH) == 0;
return b ? b : Error();
}
SshHosts::Info SshHosts::Check(const String& host, int port)
{
ASSERT(ssh_session);
Clear();
Info info;
if(handle) {
int type = 0;
size_t length = 0;
auto* p = libssh2_session_hostkey(ssh_session, &length, &type);
if(!p) {
Error();
info.status = LIBSSH2_KNOWNHOST_CHECK_FAILURE;
return pick(info);
}
info.status = libssh2_knownhost_checkp(
handle,
~host,
port,
p,
length,
LIBSSH2_KNOWNHOST_TYPE_PLAIN |
LIBSSH2_KNOWNHOST_KEYENC_RAW,
nullptr
);
info.key.Set(p, length);
switch(type) {
case LIBSSH2_HOSTKEY_TYPE_RSA:
info.type = LIBSSH2_KNOWNHOST_KEY_SSHRSA;
break;
case LIBSSH2_HOSTKEY_TYPE_DSS:
info.type = LIBSSH2_KNOWNHOST_KEY_SSHDSS;
break;
case LIBSSH2_HOSTKEY_TYPE_UNKNOWN:
info.type = LIBSSH2_KNOWNHOST_KEY_UNKNOWN;
break;
default:
NEVER();
}
}
return pick(info);
}
Vector<SshHost*> SshHosts::GetHosts()
{
ASSERT(ssh_session);
Clear();
Vector<SshHost*> v;
SshHost *prev = nullptr, *next = nullptr;
int rc = libssh2_knownhost_get(handle, &prev, nullptr);
if(rc >= 0) {
v.Add(prev);
if(rc == 0)
while(rc < 1) {
rc = libssh2_knownhost_get(handle, &next, prev);
if(rc < 0) break;
v.Add(next);
prev = next;
}
}
if(rc < 0) Error();
return pick(v);
}
bool SshHosts::Error()
{
ASSERT(ssh_session);
Buffer<char*> libmsg(256, 0);
int rc = libssh2_session_last_error(ssh_session, libmsg, nullptr, 0);
error.a = rc;
error.b = String(*libmsg);
LLOG("Failed. " << error.b);
return false;
}
SshHosts::SshHosts(SshSession& session)
{
ASSERT(session.GetHandle());
ssh_session = session.GetHandle();
handle = libssh2_knownhost_init(ssh_session);
}
SshHosts::~SshHosts()
{
if(ssh_session && handle)
libssh2_knownhost_free(handle);
}
}

View file

@ -1,42 +1,43 @@
class SshHosts {
public:
struct Info {
String key;
int type;
int status;
bool IsRSA() const { return type == LIBSSH2_KNOWNHOST_KEY_SSHRSA; }
bool IsDSS() const { return type == LIBSSH2_KNOWNHOST_KEY_SSHDSS; }
bool IsUnknown() const { return !IsRSA() && !IsDSS(); }
bool IsFailure() const { return status == LIBSSH2_KNOWNHOST_CHECK_FAILURE; }
bool IsNotFound() const { return status == LIBSSH2_KNOWNHOST_CHECK_NOTFOUND; }
bool IsMismatch() const { return status == LIBSSH2_KNOWNHOST_CHECK_MISMATCH; }
bool IsMatch() const { return status == LIBSSH2_KNOWNHOST_CHECK_MATCH; }
};
public:
bool Add(const String& host, int port, const Info& info, const String& comment);
bool Add(const String& host, const Info& info, const String& comment);
bool Remove(SshHost* host);
bool Load(const String& filename);
bool Save();
bool SaveAs(const String& filename);
Info Check(const String& host, int port);
Vector<SshHost*> GetHosts();
int GetError() const { return error.Get<int>(); }
String GetErrorDesc() const { return error.Get<String>(); }
SshHosts(SshSession& session);
virtual ~SshHosts();
private:
bool Error();
String file_path;
Tuple<int,String> error;
LIBSSH2_SESSION* ssh_session;
LIBSSH2_KNOWNHOSTS* handle;
};
class SshHosts {
public:
struct Info {
String key;
int type;
int status;
bool IsRSA() const { return type == LIBSSH2_KNOWNHOST_KEY_SSHRSA; }
bool IsDSS() const { return type == LIBSSH2_KNOWNHOST_KEY_SSHDSS; }
bool IsUnknown() const { return !IsRSA() && !IsDSS(); }
bool IsFailure() const { return status == LIBSSH2_KNOWNHOST_CHECK_FAILURE; }
bool IsNotFound() const { return status == LIBSSH2_KNOWNHOST_CHECK_NOTFOUND; }
bool IsMismatch() const { return status == LIBSSH2_KNOWNHOST_CHECK_MISMATCH; }
bool IsMatch() const { return status == LIBSSH2_KNOWNHOST_CHECK_MATCH; }
};
public:
bool Add(const String& host, int port, const Info& info, const String& comment);
bool Add(const String& host, const Info& info, const String& comment);
bool Remove(SshHost* host);
bool Load(const String& filename);
bool Save();
bool SaveAs(const String& filename);
Info Check(const String& host, int port);
Vector<SshHost*> GetHosts();
int GetError() const { return error.a; }
String GetErrorDesc() const { return error.b; }
SshHosts(SshSession& session);
virtual ~SshHosts();
private:
bool Error();
void Clear() { error.a = 0; error.b = Null; }
String file_path;
Tuple<int,String> error;
LIBSSH2_SESSION* ssh_session;
LIBSSH2_KNOWNHOSTS* handle;
};

View file

@ -1,11 +1,9 @@
SSH package for U++
--------------------
SSH package is a feautre-rich, flexible yet very easy to use libssh2 wrapper for Ultimate++.
SSH package is a flexible and easy-to-use libssh2 wrapper for Ultimate++.
It supports both console and GUI-based applications on POSIX-compliant operating systems and
MS Windows (tm).
Currently it is in beta (version 1) stage.
Classes:
--------------------
@ -29,208 +27,23 @@ Features and Highlights:
interface.
- Uses U++ memory allocators (Native allocators is also a compile-time option)
- Uses OpenSSL by default.
- Supports 3rd-party network proxies. (Such as NetProxy)
- Supports 3rd-party network proxies.
- Supports known hosts verification mechanism.
- Supports password, public key, host-based, and keyboard-interactive authentication methods.
- Supports ssh-agents.
- Supports real-time interactive command line (shell) interface with both console and GUI integration (works on Windows and Posix-compliant OS'es)
- Supports real-time interactive command line (shell) interface with both console and GUI integration
(works on both Windows and Posix-compliant OS'es)
- Supports multiple X11 connection forwarding.
- Supports Tcp/IP and port forwarding.
- Supports detailed (full) debug logging.
Todo:
--------------------
- Add more high level methods.
- Refactor Ssh (core) class.
- Improve documentation.
Reference examples:
-------------------
- SFtpGet: Demonstrates basic SFtp file download in blocking mode.
- SFtpGetNB: Demonstrates basic SFtp file download in non-blocking mode.
- SFtpGetMT: Demonstrates basic SFtp file download, using a worker thread.
- SFtpGUI: Demonstrates a basic SFtp browser with GUI (with upload, download, mkdir, rename, delete commands).
- SFtpMultiGetMT: Demonstrates SFtp dir listing and concurrent file transfers, using worker threads.
- SFtpConsumerGet: Demonstrates the usage of a consumer function for SFtp download in blocking mode.
- SFtpConsumerGetMT: Demonstrates the usage of a consumer function for SFtp download, using a worker thread.
- SshExec: Demonstrates basic Ssh remote command execution in blocking mode.
- SshExecNB: Demonstrates basic Ssh remote command execution in non-blocking mode.
- SshExecMT: Demonstrates basic Ssh remote command execution, using a worker thread.
- SshKeyboardAuth: Demonstrates basic Ssh interactive (challenge-response) authentication method in blocking mode.
- SshLoggingExample: Demonstrates the logging capabilities of SSH package.
- SshOverTor: Demonstrates a basic Ssh connection over TOR, using a third-party network proxy adapter.
- SshPolymorphismNB: Demonstrates the polymorphism capability of SSH channels in non-blocking mode.
- SshShell: Demonstrates a basic, real-time SSH shell console in blocking mode.
- SshShellNB: Demonstrates a basic, real-time SSH shell console in non-blocking mode.
- SshShellX11: Demonstrates a basic, real-time SSH shell console with multiple X11 forwarding.
- SshShellGUI: Demonstrates the basic GUI integration of SshShell class with multiple X11 forwarding, in non-blocking mode.
- SshTunnelExample: Demonstrates the basic SSH tunneling (as tunnel/server) in blocking mode.
History:
--------------------
2018-08-10: SSH package: Third iteration.
SSH package is now officially a part of Ultimate++.
Full non-blocking mode and MT convenience methods removed in favor of simple an robust blocking interface.
Ssh, SFtp and SshSession classes are refactored accordingly.
SFtpStream variants are added to the package (Thanks Mirek!).
Memory footprint slightly reduced.
2018-06-15: Critical fix: SshChannel and SFtp data read and write methods fixed: The recently introduced
socket wait mechanism was causing a constant I/O blocking. This is now fixed.
Cosmetics & cleanup.
2018-06-06: SshShell: Console loop fixed.
2018-05-04: Ssh::GetWaitEvents() fixed.
SshTunnel::Validate() fixed.
SshTunnelExample is added to the reference examples.
2018-04-21: AsyncConsumerGet() methods are added to SFtp and Scp classes.
License file udated.
2018-04-15: Consumer function support added to SFtp and SshChannel classes.
GetWaitStep() method is added to Ssh class.
Multithreaded methods rewritten.
2018-04-06: Blocking and non-blocking behaviour is aligned with TcpSocket.
WhenDo replaced with WhenWait, and WaitStep() method is added.
2018-02-23: SshShell: Console mode is now properly restored on failure.
2018-01-28: X11 forwarding support added as an operation mode for shell.
From now a signle SshShells can forward multiple X11 connections.
X11 examples (for both console and GUI) are added to the examples directory.
2018-01-26: SshChannel::Lock() and SShChannel::Unlock() methods are added.
These methods allow serialized access to desired SShChannel methods while keeping
their non-blocking state. That is, it is now possible to open multiple non-blocking
exec, and shell channels (per-session) concurrently in a single-threaded environment.
2018-01-25: Stream close correctly handled in ReadString and ReadStream.
2018-01-19: Alpha version 2.
SshChannel reworked. It is now more flexible, and more analogous to a tcp socket.
Scp class gained a new Put method (and its corresponding operator overload).
NEW: SShShell is added to the package. It allows GUI integration and has a
"console mode" that supports both POSIX consoles and Windows command prompt.
NEW: SshTunnel class is added to the package. It allows TCP/IP and port forwarding
over SSH protocol.
Various bug fixes, and improvements.
2017-12-19: It is now possible to use encryption keys loaded into memory.
ssh_session_libtrace() function added: This function allows full-level logging
(redirection) of libsssh2 diagnostic messages.
Hostbased authentication mechanism added.
Documentation updated.
2017-11-24: Connect() method overload added. This variant takes a secure shell URL string.
Multithreaded functions are improved.
Documentation updated.
2017-11-19: GetCurrentDir() and GetParentDir() methods are added to SFtp class.
libssh2, session.c (line: 177-8), banner_receive() method patched to
prevent a memory leak which is caused by accidentally trying to connect to a
non-ssh2 server.
2017-11-12: Basic multithreading support added for SFtp, Scp, and Exec classes.
2017-11-10: GetWaitEvents() and AddTo() methods addet to Ssh class.
Scp, SshChannel, SshExec, SshHosts classes are added to the package.
Documentation added for Ssh, SshSession, SFtp, Scp, SshExec, and SshHosts classes.
2017-10-21: Ssh agents support added. A ToXml() method added to SFtp::DirEntry class.
Timeouts error code is from now on -1000. This is to prevent unnecessary cleanup
rounds when the server is not responding.
2017-10-20: Known hosts support is re-added via SshHosts class. Docs are updated accordingly.
2017-10-17: Class names finalized:
Core class -> Ssh
Session class -> SshSession
SFtp class -> SFtp
Channel class -> SshChannel
Scp class -> Scp
Exec class -> SshExec
Knownhosts class -> SshHosts
SshAgents -> (will be added as such)
CreateSFtp(), CreateExec(), CreateScp(), CreateChannel() methods added to SshSession
class.
Logging further refined.
Error management further refined.
2017-10-15: Second iteration of SSH package.
1) This version brings a major redesign of overall components. SSH package's classes
are redesigned around a core class named Ssh. Ssh allows a uniform
interface for both blocking and non-blocking modes of operation. Visible result
of this new design is a single set of methods for both modes of operation for
each class. Methods starting with "Start" prefix are removed in favor of a
simple "NonBlocking()" switch.
2) In accordance with this behaviour, a sort of "feature parity" is successfully
kept, thanks to the new design. Namely, in non-blocking mode, any result can be
gathered using the new GetResult() method, which returns Value.
3) All SSH package classes now has pick semantics.
4) New design allows creation of higher-level ("complex") SFTP methods where needed.
Unlike the simple SFTP methods, which work on file handles, Complex methods take
care of (allocate/free) file handles internally.
5) Experimental multithreading support is added (using AsyncWork). This is still
at a primitive stage.
6) Network proxy support is added. This new feature uses NetProxy (Http/Socks4/4a/5)
package It works through a plugin, provided via SshSession::WhenProxy callback.
And it is completely optional.
7) Cancellation mechanism is added. Any operation can be cancelled at any time using
the Cancel() method.
8) SFtp::DirEntry class now has a ToString() method. (It will also gain an ToXml()
method.) This method will give an output similar to Unix ls command.
9) LibSsh2 configured to use OpenSSL by default (WinCNG will be made a compile-time
option in the next release).
2017-08-11: Initial api reference docs for Ssh, Ssh::SubSystem, SFtp, Scp, Exec, Knownhosts, are added.
2017-07-31: It is now possible to query, get, and set the possible transportation methods and exchange
algorithms. Added Ssh::Method(), Ssh::Methods(), Ssh::GetMethod(), Ssh::GetMethods() methods.
Ssh::Host class is from now on KnownHosts class.
2017-07-21: Authentication methods (password, public key, keyboard interaction) are properly implemented.
From now on it is possible to choose between authentication methods both on initialization,
and on-the-fly (i.e. while logging in, using WhenAuth callback).
Ssh::Host class is added to the package. This class provides basic known hosts support.
It is now possible to verify and trust servers.
SshAlloc named as SshMalloc, and made into a general-purpose memory allocator (needed for keyboard callback).
SshSubsystem class is now Ssh::Subsystem.
2017-07-04: Credits should go to Koldo and Tom (Tom1). I am grateful for their feedback. Thanks!
Include paths fixes.
2017-07-03: libssh2 config: Newer diffie-hellman-group-exchange-sha1 syntax enabled.
2017-07-02: Initial MSC support added.
Due to a name clash on MSC environment, addrinfo changed to ip_addrinfo.
2017-06-30: The source code of libssh2 is added to the SSH package.
Exec::operator()() made inline.
2017-06-29: SshSubsystem::To(): reinterpret_csst() replaced with dynamic_cast().
2017-06-28: EAGAIN is now properly handled across the subsystems.
WhenWrite and WhenRead callbacks are removed in favour of parametrized gates.
2017-06-27: SFtp::StartStop: fixed.
2017-06-27: CleanUp() methods are added to the classes Ssh, SFtp, and Channel.
This method utilizes JobQueue's WhenCleanup event.
2017-06-26: U++ memory [de/re]allocators added and made default.
initial support for ssh shell, and terminal added.
Subsystems now perform a clean up on failure to prevent possible heap leaks.
2017-06-22: Initial release.
- SshBasics: Demonstrates basic capabilities of SSH package.
- SFtpGUI: Demonstrates a simple sftp browser with GUI.

View file

@ -61,13 +61,14 @@ SFtpHandle SFtp::Open(const String& path, dword flags, long mode)
return h;
}
bool SFtp::Close(SFtpHandle handle)
void SFtp::Close(SFtpHandle handle)
{
return Run([=] () mutable {
if(!handle)
return;
Run([=] () mutable {
int rc = libssh2_sftp_close_handle(handle);
if(!WouldBlock(rc) && rc < 0)
SetError(-1, "Unable to close file handle.");
if(rc == 0)
if(!rc)
LLOG("File handle freed.");
return !rc;
});
@ -305,7 +306,12 @@ bool SFtp::ListDir(SFtpHandle handle, DirList& list)
bool SFtp::ListDir(const String& path, DirList& list)
{
SFtpHandle h = OpenDir(path);
return h && ListDir(h, list) && Close(h);
if(h) {
bool b = ListDir(h, list);
Close(h);
if(!b) ssh->status = FAILED;
}
return !IsError();
}
bool SFtp::SymLink(const String& path, String& target, int type)

View file

@ -83,7 +83,7 @@ public:
SFtpHandle Open(const String& path, dword flags, long mode);
SFtpHandle OpenRead(const String& path) { return Open(path, READ, IRALL); }
SFtpHandle OpenWrite(const String& path) { return Open(path, CREATE | WRITE, IRALL | IWUSR); }
bool Close(SFtpHandle handle);
void Close(SFtpHandle handle);
bool Rename(const String& oldpath, const String& newpath);
bool Delete(const String& path);
bool Sync(SFtpHandle handle);

View file

@ -44,7 +44,7 @@ bool Scp::Load(Stream& s, ScpAttrs a, int64 maxsize)
int64 size = a.st_size;
String msg;
if(size < 0 && size >= maxsize) {
if(size < 0 || size >= maxsize) {
msg = "Invald stream size.";
}
else
@ -73,7 +73,7 @@ bool Scp::Save(Stream& s)
Buffer<char> chunk(ssh->chunk_size, 0);
while(done_ < size && !IsEof() && !IsError()) {
int l = s.Get(chunk, min<int64>(size - done_, ssh->chunk_size));
int l = s.Get(chunk, (int) min<int64>(size - done_, ssh->chunk_size));
int n = Put(chunk, l);
if(n > 0) {
done_ += n;

View file

@ -188,10 +188,10 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
})) goto Bailout;
if(!Run([=] () mutable {
session->fingerprint = libssh2_hostkey_hash(ssh->session, LIBSSH2_HOSTKEY_HASH_SHA1);
session->fingerprint = libssh2_hostkey_hash(ssh->session, session->hashtype);
if(session->fingerprint.IsEmpty()) LLOG("Warning: Fingerprint is not available!.");
LDUMPHEX(session->fingerprint);
if(WhenVerify && !WhenVerify())
if(WhenVerify && !WhenVerify(host, port))
SetError(-1);
return true;
})) goto Bailout;
@ -201,7 +201,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
if(session->authmethods.IsEmpty()) { if(!WouldBlock()) SetError(-1); return false; }
LLOG("Authentication methods successfully retrieved.");
WhenAuth();
if(session->phrase.IsEmpty())
if(IsNull(session->phrase))
session->phrase = password;
return true;
})) goto Bailout;
@ -409,6 +409,7 @@ SshSession::SshSession()
session->authmethod = PASSWORD;
session->connected = false;
session->keyfile = true;
session->hashtype = LIBSSH2_HOSTKEY_HASH_SHA1;
}
SshSession::~SshSession()

View file

@ -1,6 +1,6 @@
class SshSession : public Ssh {
public:
enum Methods {
enum Methods {
METHOD_EXCHANGE = 0,
METHOD_HOSTKEY,
METHOD_CENCRYPTION,
@ -11,9 +11,14 @@ public:
METHOD_SCOMPRESSION
};
enum Hash {
HASH_MD5,
HASH_SHA1
};
public:
SshSession& Timeout(int ms) { ssh->timeout = ms; return *this; }
SshSession& WaitStep(int ms) { ssh->waitstep = clamp(ms, 0, INT_MAX); return *this; }
SshSession& HashType(Hash h) { session->hashtype = h == HASH_SHA1 ? LIBSSH2_HOSTKEY_HASH_SHA1 : LIBSSH2_HOSTKEY_HASH_MD5; return *this; }
SshSession& Keys(const String& prikey, const String& pubkey, const String& phrase = Null, bool fromfile = true);
SshSession& Method(int type, Value method) { session->iomethods(type) = pick(method); return *this; }
@ -46,7 +51,7 @@ public:
Event<> WhenConfig;
Event<> WhenAuth;
Gate<> WhenVerify;
Gate<String, int> WhenVerify;
Gate<> WhenProxy;
Event<SshX11Handle> WhenX11;
Function<String(String, String, String)> WhenKeyboard;
@ -66,6 +71,7 @@ private:
struct SessionData {
TcpSocket socket;
String fingerprint;
int hashtype;
String authmethods;
int authmethod;
String prikey;

View file

@ -93,11 +93,11 @@ on failure. File handles obtained using this method must be released
using the Close() method when finished.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:SFtp`:`:Close`(Upp`:`:SFtpHandle`):%- [@(0.0.255) bool]_[* Close]([_^Upp`:`:SFtpHandle^ S
[s5;:Upp`:`:SFtp`:`:Close`(Upp`:`:SFtpHandle`):%- [@(0.0.255) void]_[* Close]([_^Upp`:`:SFtpHandle^ S
FtpHandle]_[*@3 handle])&]
[s2; Closes the file [%-*@3 handle]. Return true on success. File handles
obtained with Open() or OpenDir() methods must be released using
this method when finished.&]
[s2; Closes the file [%-*@3 handle]. File handles obtained with Open()
or OpenDir() methods must be released using this method when
finished.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:SFtp`:`:Rename`(const Upp`:`:String`&`,const Upp`:`:String`&`):%- [@(0.0.255) b

View file

@ -1,22 +1,22 @@
TITLE("SFtp")
COMPRESSED
120,156,221,93,13,115,218,72,210,254,43,83,149,219,61,59,133,137,36,192,96,216,219,178,99,123,29,215,249,171,140,189,201,91,46,108,4,26,204,156,133,196,105,36,39,222,189,205,111,191,238,153,209,23,72,32,64,94,239,189,169,196,96,105,186,167,251,233,158,158,153,158,143,220,177,122,189,213,49,141,70,231,233,159,151,123,29,131,252,237,111,122,69,123,87,107,234,181,86,163,166,215,141,93,248,161,215,116,163,97,212,234,122,203,216,171,183,106,181,150,214,30,218,38,231,189,59,219,104,181,4,145,81,49,222,25,205,134,161,55,235,173,122,75,175,53,91,6,208,26,154,102,104,77,163,161,215,107,45,163,209,182,40,31,246,238,52,40,94,131,58,246,118,107,123,154,174,105,77,93,215,106,70,83,171,53,234,186,94,51,128,133,209,52,116,173,209,166,142,213,187,251,180,219,65,130,58,16,104,141,93,77,211,118,129,91,189,174,1,119,36,171,215,244,154,102,212,26,250,94,99,183,61,160,143,204,233,221,205,171,212,88,170,82,83,107,51,159,78,148,70,102,189,243,126,191,
209,209,129,116,183,178,251,174,9,213,214,27,80,217,30,106,84,3,50,195,216,109,236,233,141,58,136,84,215,140,182,71,255,29,48,143,78,168,227,43,14,76,215,13,189,51,208,155,29,16,225,251,247,239,85,189,174,73,164,154,32,139,174,129,220,134,14,207,64,143,166,222,216,211,246,26,45,189,165,213,154,117,163,209,4,213,167,166,103,78,148,38,131,186,209,81,122,180,42,173,119,187,250,46,32,170,181,64,254,198,30,48,208,64,9,248,4,32,27,240,183,214,106,251,138,24,233,144,104,175,178,247,14,64,170,53,180,230,158,214,172,55,27,117,208,196,208,119,117,0,82,67,253,193,12,109,199,245,38,166,221,187,67,2,13,177,94,242,167,125,68,71,102,96,131,186,191,63,252,241,195,241,197,206,109,151,220,145,223,127,215,241,229,254,22,24,178,90,55,170,218,54,185,227,90,135,220,189,223,111,118,234,164,251,139,63,237,245,254,248,227,199,222,29,175,117,126,216,33,248,69,239,180,111,167,211,126,187,223,198,215,248,41,124,171,13,175,239,246,183,180,170,86,5,69,183,
107,68,121,92,141,60,244,238,222,215,4,47,130,191,182,225,247,100,185,105,48,176,217,48,44,184,95,235,64,89,62,238,97,85,90,231,157,48,14,185,25,51,46,25,18,234,12,205,41,15,108,211,167,156,152,14,233,118,63,25,192,252,230,138,240,96,192,95,56,56,69,149,156,250,196,180,109,247,43,39,35,215,35,38,241,76,231,145,18,119,68,220,41,245,76,159,185,14,39,174,67,192,3,92,159,146,17,179,41,145,164,196,29,252,139,14,125,94,1,110,195,49,49,185,120,249,193,2,103,25,250,174,247,66,134,30,21,244,21,98,81,155,202,111,30,117,204,9,115,30,43,146,147,15,181,241,17,245,128,73,76,103,51,238,67,17,144,223,31,86,37,24,82,31,80,204,162,30,123,166,22,25,121,238,132,220,221,251,238,148,13,1,215,15,253,15,135,174,71,251,31,64,197,254,7,238,13,251,31,16,248,7,64,167,255,240,209,228,180,255,64,157,254,78,192,251,239,66,131,192,155,208,30,247,2,69,50,128,114,178,166,10,160,101,145,49,168,4,236,159,8,167,19,211,241,217,
144,87,147,214,13,61,226,151,45,221,104,109,159,136,159,251,122,232,20,228,74,216,138,156,83,127,236,90,228,12,116,154,115,143,198,156,123,220,176,9,117,3,191,191,197,28,191,191,45,252,228,225,62,81,230,94,250,89,194,41,72,255,199,222,3,84,167,40,123,91,201,119,192,5,95,238,215,200,132,247,182,177,74,163,67,186,212,231,196,151,197,201,179,105,7,20,202,145,9,3,216,233,208,117,44,94,197,34,104,1,226,143,233,76,73,223,37,23,129,109,131,39,34,19,120,45,204,35,61,1,171,115,201,192,118,135,79,72,60,113,45,42,213,21,202,214,243,181,62,28,7,206,83,151,253,70,215,208,59,162,205,211,156,255,54,163,57,8,61,68,34,194,129,10,21,186,251,97,71,21,20,77,192,50,125,104,5,212,180,184,240,130,175,30,4,79,192,228,6,232,44,25,24,146,244,224,147,187,245,127,146,107,234,7,30,180,148,254,123,31,219,31,242,153,72,203,15,199,38,115,0,143,106,49,44,78,168,255,9,170,181,1,139,254,54,152,131,251,10,141,179,211,143,216,126,193,
167,161,1,247,31,62,29,92,28,157,29,223,147,204,199,105,160,222,11,160,34,198,189,173,237,135,228,123,81,73,79,65,20,234,97,146,169,11,24,82,15,1,66,200,108,54,224,124,108,16,62,2,123,115,202,57,52,103,104,33,200,16,195,3,132,128,33,197,134,115,113,123,118,134,15,70,38,179,3,143,166,90,204,34,189,47,167,208,64,183,132,44,36,124,229,123,128,91,255,199,126,69,61,176,190,186,158,213,175,216,46,60,205,112,18,169,158,116,21,165,42,42,142,156,211,206,33,53,126,72,80,139,154,128,82,124,102,184,25,184,199,212,244,199,189,74,162,74,33,205,61,17,31,170,204,200,54,31,57,22,74,48,64,105,195,70,8,45,66,58,163,214,145,193,26,101,147,46,153,140,175,232,132,81,52,52,253,208,65,133,4,228,43,243,33,216,10,180,195,23,178,90,225,173,234,137,168,169,154,176,166,224,155,97,46,164,153,53,25,249,37,46,12,177,127,224,131,3,67,200,13,184,12,9,224,222,202,181,39,1,24,107,128,178,219,20,98,103,92,132,146,67,219,229,116,107,
59,44,249,117,76,129,63,180,3,62,166,86,85,249,154,250,192,218,84,143,146,165,86,59,81,186,9,99,15,24,31,117,76,24,123,180,15,125,207,22,209,227,248,226,230,248,186,45,6,34,77,3,64,69,242,67,160,191,62,62,56,234,237,252,71,98,44,0,96,142,104,216,2,158,106,46,195,179,227,95,110,34,118,223,211,60,63,95,159,222,28,207,49,21,49,98,9,215,235,211,147,79,185,108,15,174,174,142,47,230,133,53,167,240,235,50,113,111,46,175,242,216,30,2,4,66,220,67,236,138,105,200,120,68,152,79,44,151,114,167,255,119,159,208,111,208,55,165,216,231,112,59,254,114,120,118,219,61,253,85,48,52,3,8,2,68,185,238,191,3,10,158,0,145,2,93,8,249,227,99,232,232,177,163,198,26,77,27,97,127,145,85,65,44,149,114,9,3,75,39,50,109,238,162,39,241,41,29,178,17,3,58,193,4,35,41,150,129,79,168,206,202,199,224,227,229,205,205,229,121,30,12,55,215,183,23,135,7,179,118,67,215,247,189,0,198,72,136,12,19,242,255,70,61,151,108,
193,208,110,240,34,130,254,185,242,112,172,93,182,188,132,232,201,136,190,200,143,69,99,228,100,11,198,83,19,38,2,39,223,206,242,234,88,122,248,45,254,129,163,9,212,226,244,250,182,123,93,33,167,159,229,199,23,249,113,253,249,203,45,232,117,203,33,84,39,42,200,180,103,140,200,233,245,201,245,21,242,146,31,95,228,7,240,58,1,94,39,158,27,76,147,204,150,241,186,188,249,132,188,228,199,23,249,1,188,46,129,215,85,204,69,116,138,46,120,134,183,92,186,131,179,51,32,190,198,182,170,176,20,131,83,219,94,70,249,89,82,126,22,13,114,53,210,47,146,244,248,27,29,6,190,57,0,15,25,188,20,161,3,77,15,208,2,142,7,141,192,99,67,159,102,10,189,188,235,71,223,68,149,243,186,193,213,186,60,228,84,86,183,23,14,160,100,235,81,93,85,170,87,66,77,177,141,227,64,231,175,220,237,20,179,130,112,159,114,204,32,88,253,185,118,192,222,72,216,65,0,250,149,193,112,29,208,18,179,49,25,88,231,163,255,255,182,201,4,139,254,214,156,65,148,169,
18,112,14,92,215,150,211,6,36,1,179,20,48,35,96,43,53,140,224,23,196,114,216,38,208,82,22,80,165,66,48,177,115,73,66,152,135,150,232,86,208,162,0,2,88,15,191,29,49,47,66,132,231,131,23,227,187,14,106,215,56,21,207,245,242,202,34,231,207,66,84,178,43,193,211,93,219,10,199,218,155,178,114,232,215,84,187,145,50,70,94,158,26,103,203,140,130,180,100,40,66,98,118,24,178,138,155,202,156,121,139,193,126,132,185,144,37,193,37,11,95,73,87,118,36,145,92,19,190,60,51,221,200,87,183,152,182,221,23,103,184,90,203,68,138,117,27,38,210,142,61,215,129,137,121,66,37,57,147,181,176,59,79,183,212,112,110,171,2,41,7,63,48,31,113,150,255,204,134,116,99,205,41,125,202,210,60,156,204,130,76,187,245,213,114,29,200,114,85,104,146,51,86,81,229,61,17,31,161,51,184,156,97,102,46,145,35,161,79,60,225,247,81,1,49,31,73,77,83,115,113,173,150,154,14,185,114,121,190,7,229,234,70,36,229,186,158,20,217,30,179,69,129,231,81,199,
143,160,32,91,0,133,152,32,108,203,168,129,133,68,126,30,21,195,212,105,81,156,138,143,72,160,71,40,103,60,2,140,74,141,33,243,153,140,220,212,197,91,141,50,74,24,97,156,155,79,116,129,9,146,41,169,172,152,166,200,75,204,66,45,75,48,225,40,69,205,249,205,92,139,144,94,70,50,105,38,117,180,94,240,187,6,247,127,94,132,216,162,113,132,34,125,173,174,46,106,156,75,29,117,77,229,49,215,47,84,207,15,254,209,96,128,121,88,122,33,32,138,221,38,129,127,166,186,123,162,190,100,163,134,235,47,17,106,10,23,241,76,133,67,23,162,25,132,67,136,115,115,64,38,66,221,146,209,113,198,248,233,38,57,160,197,89,139,151,176,2,125,134,86,43,154,110,162,199,142,43,6,74,58,153,250,47,69,71,97,145,141,22,103,156,215,179,83,233,169,230,13,236,119,249,76,61,219,53,173,106,33,75,22,27,250,149,99,169,162,43,3,24,60,207,152,243,180,212,86,203,99,75,200,170,140,89,138,199,30,211,54,42,64,228,155,222,35,245,51,34,52,127,153,12,92,
92,46,180,65,186,112,88,26,78,70,176,38,230,152,98,69,110,126,253,117,243,80,109,90,37,193,27,178,122,149,38,176,58,188,215,148,67,79,50,15,239,236,138,10,192,205,124,14,51,188,111,209,11,197,169,4,108,109,152,139,92,65,53,229,192,27,114,251,11,33,108,75,136,135,238,100,106,211,111,184,194,111,131,171,62,139,217,53,224,142,136,83,43,19,112,58,26,129,255,98,209,114,81,135,145,255,129,239,123,153,179,134,100,96,151,133,22,33,30,114,218,180,239,21,76,100,113,201,47,19,92,83,188,10,177,61,9,23,171,241,49,27,4,24,40,32,80,207,7,128,220,249,5,233,197,211,56,201,187,60,100,151,119,155,43,161,251,42,61,230,235,162,62,59,148,46,27,235,238,34,47,78,195,95,8,237,238,250,190,188,208,58,107,2,221,205,6,58,26,53,22,115,241,94,245,245,96,47,148,23,93,21,250,87,152,255,189,145,73,50,122,209,178,99,205,169,51,114,87,200,122,168,17,242,177,227,123,47,82,245,126,59,122,16,70,28,228,89,246,204,50,78,107,132,181,133,
32,249,99,128,9,135,217,38,131,247,12,234,246,38,98,79,28,49,7,184,169,42,133,224,92,30,4,55,90,205,109,165,41,224,192,89,184,205,224,179,204,95,139,192,52,7,121,132,117,38,100,84,188,90,226,108,25,142,230,209,169,71,57,157,105,255,146,91,158,147,109,2,32,56,137,220,139,86,200,241,178,242,142,243,219,209,202,243,49,132,76,108,60,3,176,114,189,167,191,163,175,229,56,139,244,206,202,91,231,56,79,153,250,47,201,95,35,20,243,62,21,238,232,67,156,122,51,64,149,16,151,206,76,238,159,187,22,27,189,224,174,203,130,142,130,69,239,197,54,205,208,77,210,108,94,211,97,108,168,9,19,123,108,196,134,50,252,224,174,78,133,202,28,66,9,76,54,139,67,197,112,74,247,168,162,228,146,224,244,58,192,45,233,85,19,246,203,158,26,225,155,57,79,156,71,62,156,235,64,241,215,242,205,3,65,179,177,111,198,108,94,221,55,85,10,90,128,242,154,222,184,28,153,245,188,177,124,168,94,207,27,19,88,231,69,128,77,253,16,23,108,142,197,94,191,213,
243,255,49,237,171,121,29,234,196,102,188,44,26,101,132,171,83,5,85,61,10,19,155,235,234,59,195,224,237,148,142,82,180,133,151,246,39,152,236,91,87,239,20,249,219,105,157,74,13,22,213,220,29,62,81,127,109,197,19,212,111,168,183,144,162,160,194,87,108,186,118,123,142,105,223,78,89,185,21,121,10,146,20,84,248,35,30,98,89,87,227,4,241,219,169,44,142,225,200,253,212,166,189,74,64,235,74,146,77,66,248,28,139,183,131,97,56,54,61,115,136,231,88,214,128,2,198,65,71,174,51,115,18,103,254,144,17,81,229,10,29,172,17,59,227,131,201,0,36,130,78,87,236,34,33,83,207,197,206,21,92,212,10,16,1,12,198,120,8,41,60,29,87,37,167,184,80,103,65,1,95,108,147,31,154,182,29,30,130,251,60,166,206,103,147,193,60,217,13,124,230,20,63,113,131,132,87,158,251,8,96,241,244,112,240,196,244,97,112,129,63,123,63,229,204,190,114,167,101,63,35,32,73,214,33,0,167,35,60,62,133,59,55,42,114,211,198,163,137,91,180,229,209,67,208,84,
30,26,3,76,82,170,171,131,87,35,230,129,7,138,195,159,20,141,9,136,61,51,75,109,242,50,39,110,32,87,49,37,41,230,92,240,236,94,120,234,96,64,113,45,82,49,244,168,37,89,202,195,110,9,158,19,243,37,228,43,15,190,185,62,184,203,44,115,129,127,130,89,133,12,2,31,23,53,133,38,145,133,180,112,8,37,246,168,160,155,138,117,82,115,224,122,126,106,83,81,218,208,114,71,77,161,243,133,55,138,70,157,48,228,169,211,133,249,14,157,153,78,126,118,153,213,127,223,175,196,167,239,178,189,124,179,220,49,214,210,123,232,191,151,237,217,247,102,94,39,142,236,225,164,254,161,255,143,135,211,139,155,254,195,249,193,151,184,221,139,83,121,56,163,226,126,114,150,223,83,45,73,160,25,237,201,74,157,169,82,89,75,14,29,31,19,27,161,197,222,151,153,13,129,226,4,163,216,206,21,140,16,219,249,188,179,148,219,247,94,132,97,93,98,185,208,149,70,34,201,35,180,241,41,22,117,120,178,186,176,249,67,124,10,192,123,94,196,198,109,104,231,69,59,229,32,
219,152,50,90,23,50,233,85,176,161,73,195,80,190,182,149,67,203,138,109,242,43,152,118,161,125,98,51,174,236,1,127,13,211,118,205,103,138,189,103,216,245,98,47,134,198,92,185,35,86,124,178,251,223,228,35,168,32,54,90,73,187,175,209,98,241,28,212,124,166,115,187,78,20,246,194,180,184,128,182,218,46,148,130,199,191,5,168,115,199,191,51,58,193,251,84,191,69,122,162,131,26,154,78,116,0,12,157,10,59,170,140,160,93,96,199,145,107,90,25,54,157,93,199,72,227,42,246,21,41,194,53,140,152,185,155,53,134,63,209,66,210,144,255,111,33,155,215,90,98,72,169,57,121,197,118,146,52,30,212,36,140,71,241,150,138,172,70,193,156,66,77,2,138,145,236,6,65,254,31,182,136,89,75,85,50,154,72,230,150,187,184,105,172,100,4,188,40,97,105,71,182,114,115,154,55,22,233,137,158,40,220,200,21,44,218,219,242,23,52,222,146,17,232,33,98,230,5,152,51,130,161,189,111,50,187,192,13,23,226,51,50,56,31,119,229,85,2,81,243,124,47,79,63,36,13,
26,21,18,247,116,168,239,217,134,85,23,19,196,59,236,98,17,171,228,35,115,172,196,165,21,12,94,153,206,48,117,5,132,34,79,58,240,236,112,124,209,5,48,201,245,230,8,10,193,101,254,38,152,104,37,182,93,240,86,152,120,117,21,158,20,184,25,230,220,125,166,120,140,21,31,254,52,199,225,231,7,117,109,76,226,214,24,135,114,28,22,141,169,61,133,65,76,116,231,10,75,76,62,57,155,76,109,54,146,219,123,97,238,196,213,164,45,227,94,24,178,133,15,19,55,187,48,252,37,149,111,131,223,241,142,151,109,181,127,52,222,56,28,95,250,82,141,215,212,165,64,111,112,43,75,210,84,48,11,186,16,199,230,210,183,115,228,119,223,138,160,120,114,0,10,147,45,140,30,219,11,118,95,44,219,43,80,56,11,48,163,219,45,204,26,178,85,203,90,232,134,210,133,245,10,240,132,58,179,230,198,223,5,21,204,92,210,94,89,189,147,149,212,59,89,65,189,71,113,104,254,173,245,147,11,248,133,21,148,11,245,5,53,12,119,29,100,40,19,158,135,202,215,106,19,165,
162,229,94,152,118,229,40,183,96,113,29,136,10,171,152,189,78,190,65,51,220,64,99,185,164,184,162,198,33,209,106,26,207,172,190,254,185,186,170,221,118,89,27,186,10,108,98,75,108,34,221,254,51,170,147,151,162,185,48,44,85,21,206,226,169,174,73,82,103,105,163,173,77,114,20,2,48,137,60,66,54,194,107,33,24,9,244,61,55,77,189,238,6,193,88,217,239,11,253,233,64,230,112,197,51,232,145,67,119,10,143,49,228,66,177,150,190,167,92,78,25,114,116,141,166,6,178,92,177,118,160,86,17,114,252,158,205,172,8,175,42,111,180,192,91,68,232,168,112,105,146,207,46,235,174,42,190,90,167,45,34,188,42,90,154,232,89,107,179,43,139,47,151,125,10,137,47,139,150,38,254,194,181,167,85,245,16,139,138,69,180,16,5,75,211,33,119,25,113,85,249,113,25,184,136,248,88,174,52,233,231,214,125,87,246,30,177,74,94,200,121,68,201,242,92,63,185,60,191,170,212,184,76,130,51,191,34,114,135,101,75,146,220,83,236,214,148,92,44,3,20,21,61,42,92,146,
236,152,163,223,64,118,68,242,210,177,11,133,249,176,108,25,146,227,132,24,97,239,239,184,192,81,245,190,107,234,16,95,126,85,68,139,184,116,73,22,160,17,195,181,228,191,113,213,154,72,225,201,121,72,81,120,188,156,220,194,159,115,46,72,12,23,68,33,223,180,112,180,35,238,98,186,12,252,105,160,178,238,241,225,89,248,198,217,132,217,166,184,103,243,214,97,223,136,141,35,169,201,4,70,216,253,191,115,204,25,2,217,154,104,124,153,216,171,64,1,197,75,198,193,33,223,38,118,4,193,117,152,228,145,15,162,155,169,32,218,193,175,192,0,11,251,230,99,37,158,56,139,100,200,130,51,40,92,28,36,244,233,55,191,61,147,171,171,235,181,90,187,209,218,109,254,132,249,173,159,27,245,122,199,254,96,236,122,240,207,255,160,215,7,240,111,95,223,145,137,161,127,96,102,8,47,54,109,227,96,73,102,239,218,109,40,222,128,226,13,40,222,128,226,141,125,131,168,26,228,203,52,175,45,189,217,218,86,220,14,162,193,46,148,84,207,174,92,206,25,94,42,247,43,222,163,
187,197,183,243,107,64,113,14,137,255,2,29,97,72,79,238,14,133,254,137,107,146,43,225,233,202,138,234,44,42,162,163,171,200,46,187,191,163,250,236,74,60,12,73,60,19,215,240,245,98,233,176,194,128,89,169,250,14,66,59,69,27,106,196,214,20,71,166,16,228,125,192,51,44,30,55,103,33,150,124,55,228,49,9,231,253,73,62,103,217,115,123,230,144,255,131,63,237,243,115,76,222,30,145,79,159,224,107,187,219,85,77,120,134,179,25,206,175,231,56,39,231,208,171,241,76,92,180,152,98,235,125,253,38,255,206,101,40,11,230,58,215,202,207,39,35,72,244,125,43,74,206,71,41,228,104,246,123,20,222,137,156,72,181,175,19,174,226,202,22,173,114,39,37,40,119,79,89,116,24,223,145,247,19,36,174,44,16,33,33,237,127,169,245,210,98,203,93,171,40,187,236,148,97,249,48,188,210,153,66,64,213,55,211,119,208,44,65,51,181,43,67,29,37,220,104,57,38,153,228,95,108,30,113,197,7,124,197,208,107,209,209,236,200,71,61,78,194,242,171,208,233,158,200,207,228,
110,185,5,167,227,126,86,219,190,133,96,225,90,112,74,92,57,7,144,76,195,227,131,136,211,204,26,19,161,182,248,127,25,102,70,123,128,84,175,247,95,149,173,222,115,
120,156,221,93,13,83,227,56,210,254,43,170,154,219,61,152,10,25,219,73,72,72,246,182,96,128,101,168,227,171,8,236,204,91,84,32,78,172,16,31,142,157,179,108,102,216,189,157,223,126,221,146,108,203,137,157,56,137,89,246,222,169,25,18,108,117,75,253,116,171,37,181,90,154,59,187,94,111,117,76,163,209,121,250,231,229,94,199,32,127,251,155,94,209,222,213,154,122,173,213,168,233,117,99,23,126,232,53,221,104,24,181,186,222,50,246,234,173,90,173,165,181,135,142,201,88,239,206,49,90,45,78,100,84,140,119,70,179,97,232,205,122,171,222,210,107,205,150,1,180,134,166,25,90,211,104,232,245,90,203,104,180,45,202,134,189,59,13,138,215,160,142,189,221,218,158,166,107,90,83,215,181,154,209,212,106,141,186,174,215,12,96,97,52,13,93,107,180,169,107,245,238,62,237,118,144,160,14,4,90,99,87,211,180,93,224,86,175,107,192,29,201,234,53,189,166,25,181,134,190,215,216,109,15,232,163,237,246,238,230,69,106,44,21,169,169,181,237,128,78,164,68,102,189,243,126,
191,209,209,129,116,183,178,251,174,9,213,214,27,80,217,30,74,84,3,50,195,216,109,236,233,141,58,52,169,174,25,109,159,254,59,180,125,58,161,110,32,57,216,186,110,232,157,129,222,236,64,19,190,127,255,94,213,235,154,64,170,9,109,209,53,104,183,161,195,51,144,163,169,55,246,180,189,70,75,111,105,181,102,221,104,52,65,244,169,233,155,19,41,201,160,110,116,164,28,173,74,235,221,174,190,11,136,106,45,104,127,99,15,24,104,32,4,124,2,144,13,248,91,107,181,3,73,140,116,72,180,87,217,123,7,32,213,26,90,115,79,107,214,155,141,58,72,98,232,187,58,0,169,161,252,160,134,182,235,249,19,211,233,221,33,129,134,88,47,249,211,62,162,35,51,116,64,220,223,31,254,248,225,248,98,231,182,75,238,200,239,191,235,248,114,127,11,20,89,173,27,85,109,155,220,49,173,67,238,222,239,55,59,117,210,253,37,152,246,122,127,252,241,99,239,142,213,58,63,236,16,252,162,119,218,183,211,105,191,221,111,227,107,252,228,182,213,134,215,119,251,91,90,85,171,130,
160,219,53,34,45,174,70,30,122,119,239,107,156,23,193,95,219,240,187,90,110,26,14,28,123,24,21,220,175,117,160,44,27,247,176,42,173,243,142,43,135,220,140,109,38,24,18,234,14,205,41,11,29,51,160,140,152,46,233,118,63,25,192,252,230,138,176,112,192,94,24,24,69,149,156,6,196,116,28,239,43,35,35,207,39,38,241,77,247,145,18,111,68,188,41,245,205,192,246,92,70,60,151,128,5,120,1,37,35,219,161,68,144,18,111,240,47,58,12,88,5,184,13,199,196,100,252,229,7,11,140,101,24,120,254,11,25,250,148,211,87,136,69,29,42,190,249,212,53,39,182,251,88,17,156,2,168,141,141,168,15,76,18,58,199,102,1,20,129,246,7,195,170,0,67,200,3,130,89,212,183,159,169,69,70,190,55,33,119,247,129,55,181,135,128,235,135,254,135,67,207,167,253,15,32,98,255,3,243,135,253,15,8,252,3,160,211,127,248,104,50,218,127,160,110,127,39,100,253,119,145,66,224,77,164,143,123,142,34,25,64,57,81,83,5,208,178,200,24,68,2,246,79,132,209,137,
233,6,246,144,85,85,237,70,22,241,203,150,110,180,182,79,248,207,125,61,50,10,114,197,117,69,206,105,48,246,44,114,6,50,205,153,71,99,206,60,110,236,9,245,194,160,191,101,187,65,127,155,219,201,195,189,82,230,94,216,153,98,20,164,255,99,239,1,170,147,148,189,45,245,29,112,193,151,251,53,50,97,189,109,172,210,232,144,46,13,24,9,68,113,242,108,58,33,133,114,100,98,3,236,116,232,185,22,171,98,17,212,0,9,198,116,166,100,224,145,139,208,113,192,18,145,9,188,230,234,17,150,128,213,121,100,224,120,195,39,36,158,120,22,21,226,114,97,235,249,82,31,142,67,247,169,107,255,70,215,144,59,166,205,147,156,253,54,35,57,52,122,136,68,132,1,21,10,116,247,195,142,44,200,187,128,101,6,208,11,168,105,49,110,5,95,125,112,158,128,201,13,208,89,194,49,168,244,96,147,187,245,127,146,107,26,132,62,244,148,254,251,0,251,31,242,153,8,205,15,199,166,237,2,30,213,98,88,156,208,224,19,84,235,0,22,253,109,80,7,11,36,26,103,167,31,
177,255,130,77,67,7,238,63,124,58,184,56,58,59,190,39,153,143,211,64,189,231,64,197,140,123,91,219,15,234,123,94,73,79,66,20,201,97,146,169,7,24,82,31,1,66,200,28,123,192,216,216,32,108,4,250,102,148,49,232,206,208,67,144,33,186,7,112,1,67,138,29,231,226,246,236,12,31,140,76,219,9,125,154,234,49,139,228,190,156,66,7,221,226,109,33,209,171,192,7,220,250,63,246,43,242,129,245,213,243,173,126,197,241,224,105,134,145,8,241,132,169,72,81,81,112,228,156,54,14,33,241,131,66,205,107,2,74,254,153,97,102,96,30,83,51,24,247,42,74,149,188,53,247,132,127,200,50,35,199,124,100,88,72,97,128,173,141,58,33,244,8,97,140,90,71,56,107,108,155,48,73,213,191,162,17,198,222,208,12,34,3,229,45,32,95,237,0,156,45,71,59,122,33,170,229,214,42,159,240,154,170,138,54,57,223,12,117,33,205,172,202,200,47,73,97,240,253,131,0,12,24,92,110,200,132,75,0,243,150,166,61,9,65,89,3,108,187,67,193,119,38,69,40,57,116,
60,70,183,182,163,146,95,199,20,248,67,63,96,99,106,85,165,173,201,15,172,77,142,40,89,98,181,149,210,77,152,123,192,252,168,99,194,220,163,125,24,248,14,247,30,199,23,55,199,215,109,62,17,105,26,0,42,146,31,2,253,245,241,193,81,111,231,63,2,99,14,128,237,242,142,205,225,169,230,50,60,59,254,229,38,102,247,61,205,243,243,245,233,205,241,28,83,238,35,150,112,189,62,61,249,148,203,246,224,234,234,248,98,190,177,230,20,126,93,214,220,155,203,171,60,182,135,0,1,111,238,33,14,197,52,98,60,34,118,64,44,143,50,183,255,247,128,208,111,48,54,165,216,231,112,59,254,114,120,118,219,61,253,149,51,52,67,112,2,68,154,238,191,67,10,150,0,158,2,77,8,249,227,99,24,232,113,160,198,26,77,7,97,127,17,85,129,47,21,237,226,10,22,70,100,58,204,67,75,98,83,58,180,71,54,208,113,38,232,73,177,12,124,66,117,86,62,6,31,47,111,110,46,207,243,96,184,185,190,189,56,60,152,213,27,154,126,224,135,48,71,66,100,108,222,254,
223,168,239,145,45,152,218,13,94,184,211,63,151,22,142,181,139,158,167,52,93,245,232,139,236,152,119,70,70,182,96,62,53,177,185,227,100,219,89,86,157,180,30,126,75,126,224,108,2,165,56,189,190,237,94,87,200,233,103,241,241,69,124,92,127,254,114,11,114,221,50,112,213,74,5,153,250,76,16,57,189,62,185,190,66,94,226,227,139,248,0,94,39,192,235,196,247,194,169,202,108,25,175,203,155,79,200,75,124,124,17,31,192,235,18,120,93,37,92,248,160,232,129,101,248,203,91,119,112,118,6,196,215,216,87,37,150,124,114,234,56,203,40,63,11,202,207,188,67,174,70,250,69,144,30,127,163,195,48,48,7,96,33,131,151,34,116,32,233,1,106,192,245,161,19,248,246,48,160,153,141,94,62,244,163,109,162,200,121,195,224,106,67,30,114,42,107,216,139,38,80,162,247,200,161,42,53,42,161,164,216,199,113,162,243,87,30,118,138,105,129,155,79,57,106,224,172,254,92,61,224,104,196,245,192,1,253,106,195,116,29,208,226,171,49,225,88,231,189,255,255,182,202,56,139,254,
214,156,66,164,170,20,56,159,61,219,18,203,6,36,1,181,20,80,35,96,43,36,140,225,231,196,98,218,198,209,146,26,144,165,242,80,225,195,7,106,14,132,5,45,225,183,35,219,143,37,103,249,32,37,56,174,131,206,53,46,185,115,173,185,178,200,200,21,228,6,158,231,112,228,4,187,18,44,218,115,172,104,78,189,41,43,151,126,77,245,15,209,198,216,154,83,243,105,17,57,16,26,139,154,160,172,2,35,86,73,151,128,57,130,218,19,170,164,24,236,71,24,243,88,226,68,178,240,21,116,101,123,12,193,85,177,217,153,101,69,190,184,197,164,237,190,184,195,66,61,48,150,19,41,214,237,128,72,59,246,61,23,22,224,138,72,98,197,106,225,176,157,238,145,209,26,86,58,76,6,118,96,62,226,106,254,217,30,210,141,37,167,244,41,75,242,104,209,10,109,218,173,175,22,211,64,150,171,66,163,174,76,121,149,247,132,127,68,198,224,49,27,35,112,74,44,132,62,49,197,238,227,2,124,221,145,90,142,230,226,90,45,53,236,113,229,177,124,11,202,149,141,8,202,117,45,
41,214,61,70,133,66,223,167,110,16,67,65,182,0,10,190,16,216,22,94,3,11,241,56,60,10,134,33,210,162,56,21,159,121,192,136,80,206,188,3,24,149,234,67,230,35,22,185,33,138,183,154,77,148,48,147,56,55,159,232,2,21,168,161,167,44,159,38,201,75,140,54,45,11,36,225,108,68,174,237,205,92,141,144,94,70,208,104,38,68,180,158,243,187,6,243,127,94,132,216,162,121,132,36,125,173,161,46,238,156,75,13,117,77,225,49,166,207,69,207,119,254,241,100,192,246,177,244,66,64,36,187,77,28,255,76,117,247,68,126,201,70,13,247,89,98,212,36,46,252,153,116,135,30,120,51,112,135,224,231,230,128,84,92,93,238,44,56,119,254,116,163,78,104,113,117,226,43,90,160,207,208,107,121,215,85,70,236,164,98,160,164,147,105,240,82,116,22,22,235,104,113,100,121,61,61,149,30,82,222,64,127,151,207,212,119,60,211,170,22,210,100,177,169,95,57,154,42,186,3,128,206,243,204,118,159,150,234,106,185,111,137,88,149,177,74,241,237,199,180,142,10,16,5,166,255,
72,131,12,15,205,94,38,3,15,183,5,29,104,93,52,45,141,22,35,88,147,237,154,124,231,109,126,159,117,115,87,109,90,37,193,27,177,122,149,46,176,58,188,215,148,193,72,50,15,239,236,206,9,192,109,7,12,86,120,223,226,23,146,83,9,216,58,176,22,185,130,106,202,129,55,226,246,23,66,216,17,16,15,189,201,212,161,223,112,39,223,1,83,125,230,171,107,192,29,17,167,86,38,224,116,52,2,251,197,162,229,162,14,51,255,131,32,240,51,87,13,170,99,23,133,22,33,30,113,218,116,236,229,76,68,113,193,47,19,92,147,191,138,176,61,137,54,165,241,177,61,8,209,81,128,163,158,119,0,185,235,11,210,75,150,113,130,119,121,200,46,31,54,87,66,247,85,70,204,215,69,125,118,42,93,54,214,221,69,86,156,134,191,16,218,221,245,109,121,161,118,214,4,186,155,13,116,60,107,44,102,226,189,234,235,193,94,40,46,186,42,244,175,176,254,123,35,149,100,140,162,101,251,154,83,119,228,173,16,245,144,51,228,99,55,240,95,132,232,253,118,252,32,242,56,200,
179,236,149,101,18,214,136,106,139,64,10,198,0,19,78,179,77,27,222,219,80,183,63,225,185,111,196,28,96,242,84,10,193,185,56,8,38,84,205,165,204,20,48,224,44,220,102,240,89,102,175,69,96,154,131,60,198,58,19,50,202,95,45,49,182,12,67,243,233,212,167,140,206,244,127,193,45,207,200,54,1,16,140,68,228,156,21,50,188,172,184,227,124,218,89,121,54,134,144,241,4,51,0,43,215,122,250,59,250,90,134,179,72,238,172,184,117,142,241,148,41,255,146,248,53,66,49,111,83,81,230,30,226,212,155,1,170,4,191,116,102,178,224,220,179,236,209,11,102,87,22,52,20,44,122,207,211,49,35,51,73,179,121,77,131,113,160,38,12,236,217,35,123,40,220,15,102,111,74,84,230,16,82,48,217,204,15,21,195,41,61,162,242,146,75,156,211,235,0,183,100,84,85,244,151,189,52,194,55,115,150,56,143,124,180,214,129,226,175,101,155,7,156,102,99,219,76,216,188,186,109,202,16,52,7,229,53,173,113,57,50,235,89,99,249,80,189,158,53,42,88,231,121,128,77,237,
16,55,108,142,121,78,223,234,241,255,132,246,213,172,14,101,178,103,172,44,158,101,68,187,83,5,69,61,138,2,155,235,202,59,195,224,237,132,142,67,180,133,183,246,39,24,236,91,87,238,20,249,219,73,157,10,13,22,149,220,27,62,209,96,109,193,21,234,55,148,155,183,162,160,192,87,246,116,237,254,156,208,190,157,176,34,229,120,10,45,41,40,240,71,60,172,178,174,196,10,241,219,137,204,143,219,136,188,105,211,89,197,161,117,5,201,38,46,124,142,197,219,193,48,28,155,190,57,196,243,42,107,64,1,243,160,35,207,157,57,113,51,127,152,136,200,114,133,14,208,240,12,248,112,50,128,22,193,160,203,179,72,200,212,247,112,112,5,19,181,66,68,0,157,49,30,54,138,78,193,85,201,41,110,212,89,80,32,224,233,240,67,211,113,162,195,110,159,199,212,253,108,218,176,78,246,194,192,118,139,159,172,65,194,43,223,123,4,176,88,122,58,120,98,6,48,185,192,159,189,159,114,86,95,185,203,178,159,17,16,149,117,4,192,233,8,143,73,97,230,70,69,36,109,60,154,
152,138,45,142,24,130,164,226,112,24,96,146,18,93,30,176,26,217,62,88,32,63,228,73,81,153,128,216,179,109,201,36,47,115,226,133,98,23,83,144,98,204,5,207,232,69,167,11,6,20,247,34,37,67,159,90,130,165,56,212,166,240,156,152,47,17,95,113,192,205,11,192,92,102,153,115,252,21,102,21,50,8,3,220,212,228,146,196,26,210,162,41,20,207,81,65,51,229,251,164,230,192,243,131,84,82,81,90,209,34,163,166,208,57,194,27,73,35,79,18,178,212,41,194,124,131,206,12,39,99,250,107,255,125,191,146,156,178,203,182,242,205,98,199,34,201,182,255,94,244,231,192,159,121,173,28,205,195,69,253,67,255,31,15,167,23,55,253,135,243,131,47,73,191,231,167,239,112,69,197,2,117,149,223,147,61,137,163,25,231,100,165,206,78,201,168,37,131,129,207,230,9,207,60,247,101,38,33,144,159,84,228,233,92,225,8,177,157,143,59,139,118,7,254,11,87,172,71,44,15,134,210,184,73,226,168,108,114,90,69,30,146,172,46,236,254,224,159,66,176,158,23,158,160,13,253,
188,232,160,28,102,43,83,120,235,66,42,189,10,55,84,105,228,202,215,214,114,164,89,158,14,191,130,106,23,234,39,81,227,202,22,240,215,80,109,215,124,166,56,122,70,67,47,142,98,168,204,149,7,98,201,39,123,252,85,31,65,5,137,210,74,202,190,70,141,37,107,80,243,153,206,101,157,72,236,185,106,113,3,109,181,44,148,130,199,188,57,168,115,199,188,51,6,193,251,212,184,69,122,124,128,26,154,110,124,208,11,141,10,7,170,12,167,93,32,227,200,51,173,12,157,206,238,99,164,113,229,121,69,146,112,13,37,102,102,179,38,240,43,61,36,13,249,255,22,178,121,189,37,129,148,154,147,87,236,39,170,242,160,38,174,60,138,183,81,100,117,10,219,45,212,37,160,24,201,238,16,228,255,97,143,152,213,84,37,163,139,100,166,220,37,93,99,37,37,224,133,8,75,7,178,149,187,211,188,178,72,143,143,68,81,34,87,184,40,183,229,47,168,188,37,51,208,67,196,204,15,49,102,4,83,251,192,180,157,2,55,89,240,207,88,225,108,220,21,87,6,196,221,243,189,56,
253,160,42,52,46,196,239,227,144,223,179,21,43,47,32,72,50,236,146,38,86,201,71,219,181,148,203,41,108,120,101,186,195,212,85,15,146,92,53,224,217,233,248,162,139,94,212,253,230,24,10,206,101,254,198,151,120,39,182,93,240,246,151,100,119,21,158,20,184,1,230,220,123,166,120,92,21,31,254,52,199,225,231,7,121,61,140,114,59,140,75,25,78,139,198,212,153,194,36,38,190,91,197,86,22,159,204,158,76,29,123,36,210,123,97,237,196,228,162,45,227,254,23,178,133,15,149,27,92,108,252,37,21,111,131,223,241,46,151,109,153,63,154,36,14,39,151,187,84,147,61,117,209,160,55,184,125,69,85,21,172,130,46,248,177,185,244,45,28,249,195,183,36,40,30,28,128,194,100,11,189,199,246,130,236,139,101,185,2,133,163,0,51,178,221,194,170,33,91,180,172,141,110,40,93,88,174,16,79,162,219,214,220,252,187,160,128,153,91,218,43,139,119,178,146,120,39,43,136,247,200,15,199,191,181,124,98,3,191,176,128,98,163,190,160,132,81,214,65,134,48,209,121,168,124,169,
54,17,42,222,238,133,101,87,142,112,11,54,215,129,168,176,136,217,251,228,27,116,195,13,36,22,91,138,43,74,28,17,173,38,241,204,238,235,159,43,171,204,182,203,74,232,42,144,196,166,36,145,110,255,25,213,137,203,207,60,152,150,202,10,103,241,148,215,33,201,179,180,113,106,147,152,133,0,76,60,142,144,141,240,90,8,198,13,250,158,27,166,94,55,65,48,17,246,251,66,123,58,16,49,92,254,12,70,228,200,156,162,99,12,185,80,172,37,239,41,19,75,134,28,89,227,165,129,40,87,172,31,200,93,132,28,187,183,103,118,132,87,109,111,188,193,91,164,209,113,225,210,90,62,187,173,187,106,243,229,62,109,145,198,203,162,165,53,61,107,111,118,229,230,139,109,159,66,205,23,69,75,107,254,194,189,167,85,229,224,155,138,69,164,224,5,75,147,33,119,27,113,213,246,227,54,112,145,230,99,185,210,90,63,183,239,187,178,245,240,93,242,66,198,195,75,150,103,250,234,246,252,170,173,198,109,18,92,249,21,105,119,84,182,164,150,251,146,221,154,45,231,219,0,69,155,
30,23,46,169,237,24,163,223,160,237,136,228,165,235,20,114,243,81,217,50,90,142,11,98,132,189,191,227,1,71,57,250,174,41,67,114,201,85,17,41,146,210,37,105,128,198,12,215,106,255,141,39,247,68,10,47,206,35,138,194,243,101,53,133,63,231,92,16,159,46,240,66,129,105,225,108,135,223,185,116,25,6,211,80,70,221,147,195,179,240,141,217,19,219,49,249,125,154,183,174,253,141,56,56,147,154,76,96,134,221,255,59,195,152,33,144,173,137,198,151,137,179,10,20,80,188,100,28,92,242,109,226,196,16,92,71,65,30,241,32,190,129,10,188,29,252,10,12,176,112,96,62,86,146,133,51,15,134,44,56,131,194,248,65,194,128,126,11,218,51,177,186,186,94,171,181,27,173,221,230,79,24,223,250,185,81,175,119,156,15,198,174,15,255,130,15,122,125,0,255,246,245,29,17,24,250,7,70,134,240,2,211,54,78,150,68,244,174,221,134,226,13,40,222,128,226,13,40,222,216,55,136,172,65,188,76,243,218,210,155,173,109,201,237,32,158,236,66,73,249,236,202,99,204,198,203,
227,126,197,251,114,183,216,118,126,13,216,156,67,18,188,192,64,24,209,147,187,67,46,191,114,29,114,37,58,93,89,145,131,69,133,15,116,21,49,100,247,119,228,152,93,73,166,33,202,51,126,221,94,47,105,29,86,24,218,86,170,190,131,72,79,113,66,13,79,77,113,69,8,65,220,251,59,195,226,113,115,22,124,203,119,67,30,147,104,221,175,242,57,203,94,219,219,46,249,63,248,211,62,63,199,224,237,17,249,244,9,190,182,187,93,217,133,103,56,155,209,250,122,142,179,186,134,94,141,167,114,161,98,138,173,255,245,155,248,59,23,161,44,24,235,92,43,62,175,122,144,248,251,86,28,156,143,67,200,241,234,247,40,186,251,88,9,181,175,227,174,146,202,22,237,114,171,45,40,55,167,44,62,140,239,138,251,9,148,43,11,184,75,72,219,95,106,191,180,216,118,215,42,194,46,59,101,88,62,12,175,116,166,16,80,13,204,244,29,52,75,208,76,101,101,200,163,132,27,109,199,168,65,254,197,234,225,87,124,192,87,116,189,22,29,205,206,124,228,99,21,150,95,185,76,247,
68,124,170,217,114,11,78,199,253,44,211,190,121,195,162,189,224,84,115,197,26,64,48,141,142,15,34,78,51,123,76,132,58,252,255,95,152,153,237,1,82,189,222,127,1,43,73,213,181,

View file

@ -30,6 +30,13 @@ to Null puts the SshSession object into blocking mode. Returns
inherit their default timeout values from their session.&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:SshSession`:`:HashType`(Hash`): [_^Upp`:`:SshSession^ SshSession][@(0.0.255) `&
]_[* HashType](Hash_[*@3 h])&]
[s2;%% Sets the requested hash type for server fingerprint. Can be
[C HASH`_MD5 ]or [C HASH`_SHA1]. SHA1 is the default hash algorithm.
Returns `*this for method chaining.&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:SshSession`:`:Keys`(const Upp`:`:String`&`,const Upp`:`:String`&`,const Upp`:`:String`&`,bool`): [_^Upp`:`:SshSession^ S
shSession][@(0.0.255) `&]_[* Keys]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
]_[*@3 prikey], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 pubkey],
@ -109,7 +116,10 @@ onst]&]
[s5;:Upp`:`:SshSession`:`:GetFingerprint`(`)const: [_^Upp`:`:String^ String]_[* GetFinger
print]()_[@(0.0.255) const]&]
[s2;%% Returns the computed digest of the server`'s host key (in
raw bytes) on success, or an empty String on failure.&]
raw bytes) on success, or an empty String on failure (e.g. requested
hash algorithm might not be available). Hash type can be set
using the [^topic`:`/`/Core`/SSH`/src`/Upp`_Ssh`_Session`_en`-us`#Upp`:`:SshSession`:`:HashType`(Hash`)^ H
ashType()] method.&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SshSession`:`:GetSocket`(`): [_^Upp`:`:TcpSocket^ TcpSocket][@(0.0.255) `&]_[* G
@ -191,10 +201,12 @@ authentication phase to allow user to query or set the authentication
method(s)&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SshSession`:`:WhenVerify: [_^Upp`:`:Gate^ Gate]<>_[* WhenVerify]&]
[s5;:Upp`:`:SshSession`:`:WhenVerify: [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:String^ String],
[@(0.0.255) int]>_[* WhenVerify]&]
[s0;l288;%% This gate is invoked after a successful protocol handshake
to allow user to verify the host against a list of known (trusted)
hosts. Returning false halts the connection process.&]
hosts. Passes the target hostname and port number as its parameters.
Returning false halts the connection process.&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SshSession`:`:WhenProxy: [_^Upp`:`:Gate^ Gate]<>_[* WhenProxy]&]

View file

@ -1,18 +1,18 @@
TITLE("Session")
COMPRESSED
120,156,197,26,13,115,218,198,242,175,220,36,109,31,100,0,235,3,1,134,190,55,78,92,39,206,52,95,83,220,190,116,24,217,58,196,1,170,133,164,234,78,118,120,109,243,219,223,238,221,73,58,108,136,77,156,180,25,7,208,105,111,111,191,111,119,239,38,81,183,59,24,81,199,27,93,254,248,246,112,228,144,111,190,177,91,214,99,183,111,187,3,207,181,187,78,15,62,108,215,118,60,199,237,218,3,231,176,59,112,221,129,53,12,99,202,185,63,137,157,193,64,78,114,90,206,99,167,239,57,118,191,59,232,14,108,183,63,112,96,174,99,89,142,213,119,60,187,235,14,28,111,56,99,60,244,39,22,128,187,176,198,97,207,61,180,108,203,234,219,182,229,58,125,203,245,186,182,237,58,128,194,233,59,182,229,13,89,50,243,39,167,189,17,78,232,194,4,203,235,89,150,213,3,108,221,174,5,216,113,90,215,181,93,203,113,61,251,208,235,13,167,108,17,37,254,228,54,75,222,157,44,245,173,97,36,216,74,115,68,187,163,39,71,222,200,134,169,189,86,239,113,31,150,237,122,
176,216,33,114,228,194,52,199,233,121,135,182,215,5,146,186,150,51,204,217,239,69,148,179,21,75,132,198,16,217,182,99,143,166,118,127,4,36,124,252,248,177,99,119,45,37,169,62,208,98,91,64,183,99,195,24,240,209,183,189,67,235,208,27,216,3,203,237,119,29,175,15,172,103,52,167,43,205,201,180,235,140,52,31,131,214,224,113,207,238,129,68,173,1,208,239,29,2,2,11,152,128,111,16,164,7,127,238,96,40,244,100,156,135,147,14,91,135,143,65,72,174,103,245,15,173,126,183,239,117,129,19,199,238,217,32,72,11,249,7,53,12,147,52,95,209,216,159,224,4,11,101,125,199,191,225,15,108,78,139,24,216,253,227,226,47,50,33,127,252,97,227,240,81,3,84,216,233,58,29,171,73,38,220,26,125,251,45,153,60,57,234,143,186,100,204,151,99,198,121,148,38,190,255,215,95,223,249,19,238,142,8,126,217,163,225,207,89,22,12,131,97,13,130,79,210,194,134,100,114,212,176,58,86,7,152,109,186,68,91,157,75,46,252,201,19,215,196,137,99,67,24,53,161,179,98,
26,71,97,9,126,228,142,228,12,31,23,181,70,143,165,154,128,190,179,101,196,21,98,194,146,144,102,188,136,169,96,156,80,194,89,88,228,140,240,37,139,99,210,184,98,57,174,68,156,38,64,71,160,105,120,47,215,238,144,151,130,0,142,156,241,44,77,120,52,141,25,153,167,57,97,92,80,32,128,47,163,100,209,34,180,16,75,152,20,133,84,168,231,100,70,86,52,161,96,177,11,88,43,204,215,153,72,23,57,205,150,0,18,199,107,189,250,76,47,175,215,34,240,71,19,50,30,159,58,36,76,87,89,28,81,73,72,14,212,117,12,121,104,134,128,170,25,203,163,43,64,51,207,211,21,153,156,139,52,139,66,16,239,65,112,112,156,230,44,56,0,84,193,1,207,195,224,0,181,112,1,40,130,139,103,148,179,224,130,37,65,187,224,193,227,90,59,149,90,206,165,32,201,20,224,212,74,138,159,37,229,4,208,95,2,65,192,26,240,202,59,181,162,75,19,121,222,176,157,65,243,133,252,60,178,107,43,33,239,164,186,200,107,38,150,233,140,188,138,184,184,97,41,222,14,75,
57,139,86,44,45,68,208,136,18,17,52,193,100,46,206,111,193,157,111,24,75,109,37,36,248,206,191,128,197,53,14,191,97,190,3,124,248,242,200,37,43,238,55,145,4,7,105,29,51,193,137,80,19,200,21,141,11,6,144,100,21,129,174,89,152,38,51,222,65,16,84,51,1,157,223,128,20,41,121,83,128,66,179,2,145,192,107,67,105,233,244,55,22,10,92,54,37,211,56,13,47,17,197,42,157,177,14,249,137,137,34,79,56,9,158,8,180,87,180,175,149,18,84,184,164,81,2,128,29,242,38,21,128,127,73,193,32,248,146,240,98,202,215,28,98,26,151,186,1,176,36,97,49,216,68,178,4,147,16,184,118,148,131,121,72,55,222,36,146,43,107,81,16,165,149,43,69,0,251,248,163,251,105,141,252,200,214,60,104,128,44,184,32,37,128,200,129,200,224,187,160,181,223,240,52,77,227,207,85,42,146,177,169,81,185,8,188,171,145,201,133,0,145,252,222,130,4,148,159,229,209,37,91,251,45,242,112,76,197,244,75,97,90,230,224,124,254,69,240,239,11,52,167,77,140,40,
51,13,135,138,156,71,177,130,52,97,68,94,176,91,54,13,230,72,249,122,5,150,149,131,39,66,56,196,168,132,150,9,84,115,52,221,41,35,5,135,104,2,63,141,128,198,228,204,42,28,78,190,109,27,36,146,16,2,150,49,111,198,194,40,3,19,148,115,64,180,87,56,31,240,67,24,157,235,57,24,183,146,20,204,56,3,216,121,196,102,45,176,230,12,130,29,96,200,32,218,92,167,249,140,92,71,224,69,37,222,8,68,200,232,108,95,63,185,6,14,36,29,154,228,74,90,68,238,161,76,0,153,128,5,101,213,170,216,82,214,32,157,170,28,82,106,37,92,42,140,87,164,137,156,1,115,51,144,41,65,172,128,84,44,165,24,113,73,220,46,192,219,33,56,35,247,18,0,2,135,220,141,34,165,138,210,55,167,108,73,175,162,180,128,8,255,22,198,243,107,136,51,8,176,222,182,208,138,173,210,124,77,166,197,124,14,27,22,26,151,80,124,43,237,134,162,160,177,84,231,94,14,173,130,178,138,176,45,13,241,11,134,138,207,117,77,133,112,87,184,21,235,140,161,151,84,
136,229,90,231,68,126,149,33,89,97,216,98,194,89,206,128,119,220,59,69,78,19,216,148,115,81,26,1,218,3,130,232,71,173,63,185,28,200,190,130,214,227,26,202,175,141,97,69,215,165,72,49,65,0,177,198,37,178,22,1,220,148,192,38,32,72,58,215,131,176,49,94,71,98,169,214,76,225,77,77,155,70,142,240,165,137,228,0,128,102,133,208,49,163,27,224,0,0,27,173,184,151,133,239,175,89,136,214,166,164,95,211,236,97,138,197,176,187,169,60,64,169,245,7,191,54,84,120,123,107,221,174,7,14,42,210,216,149,148,249,50,45,226,89,165,15,48,234,160,173,54,217,140,130,44,91,232,222,57,83,177,43,103,32,74,142,89,91,150,114,149,163,105,169,161,242,117,254,162,55,191,26,182,82,49,10,25,92,49,202,98,118,203,168,26,188,185,91,203,255,180,122,223,233,112,249,20,162,117,208,248,92,165,154,88,252,198,182,93,195,200,110,97,187,40,69,155,98,138,8,59,73,21,180,55,225,246,224,246,94,188,202,4,18,54,253,7,50,107,162,217,143,91,85,113,200,
120,254,85,57,61,5,35,195,36,253,129,106,221,64,179,31,167,75,52,115,204,255,191,178,78,65,13,211,148,62,212,126,77,44,251,241,121,169,103,6,109,216,157,88,78,213,134,221,0,78,226,152,37,11,118,160,171,62,214,252,186,114,120,186,0,212,15,19,66,133,194,148,192,73,2,53,42,196,188,130,203,58,52,193,210,33,104,83,4,149,20,239,98,106,119,118,37,51,24,61,170,251,34,188,116,12,140,126,70,202,87,166,148,58,220,238,33,142,23,76,156,2,178,152,85,226,120,245,242,25,86,197,80,193,158,140,199,47,223,190,57,39,55,71,54,101,242,68,202,164,194,83,201,164,226,144,194,78,33,117,94,38,108,113,52,5,225,56,85,41,190,148,19,177,34,231,69,24,50,44,130,223,252,252,234,21,14,204,105,20,67,241,190,31,67,207,176,64,203,145,33,89,17,108,40,121,179,34,208,148,171,9,64,249,197,237,114,162,82,112,173,48,166,251,4,28,252,22,39,146,104,78,232,21,80,138,22,176,31,169,207,129,10,150,131,38,33,29,188,63,189,198,172,61,136,198,
54,71,129,123,232,44,90,48,149,91,213,188,4,255,226,42,20,97,200,133,236,148,228,244,154,76,215,130,241,230,134,98,208,146,19,194,86,153,88,107,162,62,91,77,99,168,203,153,184,233,134,103,97,166,94,156,147,234,231,54,39,172,16,152,78,88,155,156,204,7,160,238,98,165,209,149,198,198,229,164,253,40,173,82,187,77,82,183,167,99,164,158,160,73,179,70,101,139,172,166,175,204,110,177,28,131,12,104,75,138,205,55,228,142,14,95,9,94,77,174,197,78,198,21,22,51,23,35,52,103,117,14,6,47,167,107,18,60,194,112,17,60,210,24,75,171,53,178,236,101,20,46,203,82,179,74,219,184,86,181,153,152,235,34,173,181,125,25,149,2,6,143,204,42,17,66,125,153,26,226,28,176,178,56,189,102,121,136,149,106,204,4,132,136,253,138,41,144,52,134,225,93,234,129,162,48,205,65,57,242,219,255,126,167,87,253,71,107,205,192,181,151,230,160,112,190,25,223,75,121,214,113,190,82,222,149,36,103,67,125,103,75,108,116,198,32,12,20,242,28,10,212,29,232,164,216,
194,2,18,221,68,96,103,179,36,97,8,2,47,83,67,212,45,60,201,125,2,51,121,249,136,174,45,147,12,245,184,117,51,6,93,41,225,87,98,122,46,192,182,149,30,110,143,237,82,202,177,44,161,17,238,214,14,43,231,226,167,244,147,26,208,116,97,53,42,229,197,231,34,43,219,109,178,49,65,193,159,247,240,92,133,234,88,33,216,178,221,235,55,114,187,215,191,13,194,202,145,109,180,17,216,214,25,118,118,30,76,221,201,7,22,110,33,13,135,37,93,248,195,32,74,62,110,151,22,131,87,15,167,103,28,222,86,91,136,90,11,55,148,22,238,212,89,248,5,84,118,86,236,208,152,122,33,5,163,126,26,52,233,129,173,234,18,192,85,59,202,84,218,132,33,22,18,174,107,176,127,116,183,135,139,12,207,21,182,101,147,56,174,114,73,252,101,138,79,62,111,165,52,103,43,12,151,234,172,226,33,164,165,48,51,20,187,122,199,205,225,214,62,39,209,211,190,64,175,183,200,99,163,29,161,241,202,60,149,170,83,23,149,119,212,173,73,220,54,140,14,34,206,55,178,228,
188,48,19,196,14,169,43,143,117,34,232,135,50,153,249,249,167,87,216,244,195,46,129,140,167,120,238,117,12,216,130,9,166,227,127,130,117,194,7,132,149,224,79,116,151,192,31,30,28,4,19,140,223,195,42,124,30,5,62,70,203,96,50,68,75,9,124,127,114,76,58,254,62,219,210,29,178,111,201,222,223,94,205,251,175,175,46,100,249,70,59,189,238,34,162,32,190,68,175,29,5,253,69,122,246,90,87,123,26,24,173,250,96,146,219,141,198,51,114,184,219,220,246,209,254,15,17,15,75,3,184,169,184,171,52,154,73,197,213,64,102,24,168,71,235,131,35,147,151,61,252,255,191,144,61,128,76,230,209,194,140,74,39,87,144,56,156,19,249,229,127,47,243,158,26,176,174,26,100,229,201,16,8,157,137,173,34,33,148,248,144,30,121,55,64,246,193,181,207,101,121,42,210,48,141,101,29,199,151,244,18,134,150,152,210,161,42,208,9,85,130,4,79,191,23,44,95,99,18,201,153,194,117,43,231,221,147,67,204,216,238,193,159,172,213,55,243,185,253,88,44,139,135,27,89,217,
125,217,220,154,204,53,120,115,63,102,127,129,140,99,190,54,217,125,1,155,198,57,193,79,131,89,5,182,141,221,5,118,11,240,84,36,185,74,47,145,219,57,22,229,180,180,242,121,17,111,211,229,45,246,174,228,2,146,49,89,49,210,5,197,13,202,72,141,47,147,244,58,33,13,240,34,236,217,54,37,88,149,10,203,20,151,198,32,184,37,141,69,89,154,74,171,151,50,205,83,195,229,238,43,155,119,121,250,225,110,209,72,168,218,204,95,206,85,247,165,148,203,140,205,163,4,207,192,68,117,30,84,138,42,143,22,75,60,63,130,188,65,157,209,69,73,36,34,26,235,114,210,96,160,188,196,176,98,120,161,160,22,158,136,226,232,127,234,244,40,202,241,244,45,135,90,32,104,67,166,30,23,11,204,195,131,71,36,97,2,194,218,37,202,224,195,154,208,25,205,176,36,130,64,20,180,103,120,17,96,246,85,101,248,222,182,119,251,18,128,195,123,213,226,169,228,9,35,82,154,189,17,121,247,118,252,242,61,80,26,175,145,70,221,172,130,116,166,80,126,244,222,140,96,55,99,
140,20,182,206,200,36,43,128,215,96,167,58,232,43,51,169,42,31,226,186,172,4,243,205,132,156,133,125,50,38,141,109,204,216,125,111,105,232,76,159,111,187,169,161,146,187,141,235,26,42,123,219,83,184,101,227,212,148,240,243,34,145,12,158,147,242,215,39,138,212,198,206,55,173,221,253,162,79,188,106,86,90,44,73,219,22,50,240,6,205,148,134,151,234,90,142,84,107,149,168,125,118,71,87,7,64,85,247,202,16,34,45,32,226,92,238,186,234,144,8,29,173,66,165,110,94,104,2,100,150,172,48,171,235,65,20,27,22,37,168,196,154,151,142,106,176,208,186,117,175,40,157,150,39,186,50,180,149,72,121,75,158,78,26,222,191,82,200,40,222,26,10,89,125,69,199,5,31,157,69,200,18,68,130,234,108,147,147,6,188,211,221,17,76,0,228,201,104,36,98,121,18,139,15,104,191,121,161,140,219,87,232,244,253,136,116,149,97,30,114,134,208,114,220,4,45,201,82,125,4,189,64,25,18,48,72,149,12,84,225,139,97,183,133,138,90,103,40,109,51,136,84,93,9,221,224,
145,19,49,166,220,12,41,20,246,71,0,220,231,26,210,113,170,105,79,241,118,12,136,58,190,231,53,36,227,73,101,80,79,204,134,188,153,47,233,115,253,176,94,105,15,183,12,62,222,90,200,76,54,63,250,119,174,59,99,213,178,4,114,140,116,69,133,190,115,22,198,41,103,220,204,29,76,194,172,50,149,180,54,36,249,201,59,127,198,161,122,217,163,210,210,116,70,186,26,34,207,24,110,53,145,217,165,186,117,112,175,58,131,13,236,2,54,213,221,57,221,90,106,168,206,92,211,104,108,129,209,64,188,4,203,14,47,233,130,117,140,197,42,19,232,218,174,59,244,6,189,126,124,224,244,114,248,47,14,236,238,20,254,31,217,109,101,12,255,86,214,0,81,134,156,124,192,138,118,193,124,127,56,4,120,15,224,61,128,247,0,222,59,114,36,52,81,175,54,81,53,236,254,160,89,33,3,76,0,84,61,202,222,43,36,83,91,113,254,217,53,104,56,38,166,1,12,95,159,156,157,190,253,33,184,56,121,127,124,250,244,205,139,19,191,196,138,192,199,100,22,205,161,106,8,218,
24,237,97,239,13,218,139,60,45,50,59,104,67,90,100,87,176,228,94,147,186,127,223,172,160,205,180,148,191,192,108,199,235,249,219,20,114,67,183,120,252,137,90,249,251,212,106,223,173,214,211,183,227,179,31,79,126,189,161,85,121,42,55,227,124,151,88,228,251,156,211,251,176,125,172,174,95,53,142,213,45,86,112,166,3,8,117,99,153,232,52,255,78,97,220,67,26,199,39,111,142,127,250,245,221,25,30,223,169,200,243,73,240,177,1,190,41,32,202,56,88,69,208,14,69,78,118,9,17,96,236,67,71,194,60,12,68,173,52,13,73,35,143,126,75,102,148,197,242,49,56,138,215,156,98,216,141,163,162,3,9,198,157,171,76,195,79,129,56,131,79,130,184,16,231,31,6,16,82,46,238,90,133,230,33,118,254,239,120,13,88,118,65,36,144,58,221,199,108,95,63,61,38,167,84,222,166,254,231,109,183,127,15,211,5,130,239,101,179,8,183,41,146,229,138,134,42,144,5,109,29,203,182,73,206,4,243,108,231,78,176,157,65,181,134,8,218,135,119,44,183,154,121,119,2,220,
141,37,143,50,182,154,217,61,139,52,110,12,4,71,105,198,18,136,103,157,48,93,237,244,16,101,52,42,145,144,99,190,255,127,82,206,167,130,
120,156,197,26,13,115,26,183,242,175,104,146,182,15,50,128,239,131,3,12,237,27,39,196,137,51,249,156,226,246,165,195,156,125,226,16,112,245,125,189,147,206,14,175,109,126,251,219,149,116,31,216,96,155,56,105,51,14,112,186,213,106,191,181,187,210,52,232,118,7,35,106,57,163,139,215,239,15,71,22,249,238,59,179,101,60,182,251,166,61,112,108,179,107,245,224,195,180,77,203,177,236,174,57,176,14,187,3,219,30,24,67,63,164,156,187,211,208,26,12,228,36,171,101,61,182,250,142,101,246,187,131,238,192,180,251,3,11,230,90,134,97,25,125,203,49,187,246,192,114,134,115,198,125,119,106,0,184,13,107,28,246,236,67,195,52,140,190,105,26,182,213,55,108,167,107,154,182,5,40,172,190,101,26,206,144,197,115,119,122,210,27,225,132,46,76,48,156,158,97,24,61,192,214,237,26,128,29,167,117,109,211,54,44,219,49,15,157,222,112,198,150,65,236,78,111,178,228,220,201,82,223,24,6,130,69,154,35,218,29,61,57,114,70,38,76,237,181,122,143,251,176,108,215,129,197,
14,145,35,27,166,89,86,207,57,52,157,46,144,212,53,172,97,198,254,155,7,25,139,88,44,52,134,192,52,45,115,52,51,251,35,32,225,243,231,207,29,179,107,40,73,245,129,22,211,0,186,45,19,198,128,143,190,233,28,26,135,206,192,28,24,118,191,107,57,125,96,61,165,25,141,52,39,179,174,53,210,124,12,90,131,199,61,179,7,18,53,6,64,191,115,8,8,12,96,2,190,65,144,14,252,217,131,161,208,147,113,30,78,58,108,29,62,6,33,217,142,209,63,52,250,221,190,211,5,78,44,179,103,130,32,13,228,31,212,48,140,147,44,162,161,59,197,9,6,202,250,142,127,195,231,108,65,243,16,216,253,227,252,47,50,37,127,252,97,226,240,81,3,84,216,233,90,29,163,73,166,220,24,125,255,61,153,62,57,234,143,186,100,194,87,19,198,121,144,196,174,251,215,95,63,184,83,110,143,8,126,153,163,225,47,105,234,13,189,97,5,130,79,210,194,134,100,122,212,48,58,70,7,152,109,218,68,91,157,77,206,221,233,19,187,142,19,199,134,48,90,135,78,243,89,24,
248,5,248,145,61,146,51,92,92,212,24,61,150,106,2,250,78,87,1,87,136,9,139,125,154,242,60,164,130,113,66,9,103,126,158,49,194,87,44,12,73,227,146,101,184,18,177,154,0,29,128,166,225,189,92,187,67,94,9,2,56,50,198,211,36,230,193,44,100,100,145,100,132,113,65,129,0,190,10,226,101,139,208,92,172,96,82,224,83,161,158,227,57,137,104,76,193,98,151,176,150,159,173,83,145,44,51,154,174,0,36,12,215,122,245,185,94,94,175,69,224,143,198,100,50,57,177,136,159,68,105,24,80,73,72,6,212,117,106,242,208,12,1,85,115,150,5,151,128,102,145,37,17,153,158,137,36,13,124,16,239,129,119,48,78,50,230,29,0,42,239,128,103,190,119,128,90,56,7,20,222,249,51,202,153,119,206,98,175,157,115,239,113,165,157,82,45,103,82,144,100,6,112,106,37,197,207,138,114,2,232,47,128,32,96,13,120,229,157,74,209,133,137,188,104,152,214,160,249,82,126,30,153,149,149,144,15,82,93,228,45,19,171,100,78,222,4,92,92,179,20,103,135,165,156,6,
17,75,114,225,53,130,88,120,77,48,153,243,179,27,112,103,27,198,82,89,9,241,126,112,207,97,113,141,195,109,212,223,1,62,124,121,100,147,136,187,77,36,193,66,90,39,76,112,34,212,4,114,73,195,156,1,36,137,2,208,53,243,147,120,206,59,8,130,106,38,160,243,107,144,34,33,239,114,80,104,154,35,18,120,93,83,90,50,251,157,249,2,151,77,200,44,76,252,11,68,17,37,115,214,33,63,51,145,103,49,39,222,19,129,246,138,246,21,41,65,249,43,26,196,0,216,33,239,18,1,248,87,20,12,130,175,8,207,103,124,205,33,166,113,169,27,0,139,99,22,130,77,196,43,48,9,129,107,7,25,152,135,116,227,77,34,185,178,22,5,81,88,185,82,4,176,143,63,186,183,107,228,132,242,213,233,58,101,94,3,127,125,169,78,10,44,174,196,162,20,177,186,161,7,16,33,134,95,240,54,38,45,112,69,4,204,145,18,82,126,65,22,32,29,150,165,25,200,181,67,198,224,62,51,70,166,99,114,242,20,76,255,252,237,115,135,184,0,91,14,76,78,158,154,46,104,
16,190,208,127,16,127,33,36,137,157,134,203,4,228,183,138,238,165,148,125,164,246,154,173,185,215,0,11,226,130,20,0,2,168,94,122,63,120,173,253,134,103,73,18,126,169,216,145,140,77,63,144,139,192,187,10,153,92,8,16,201,239,45,72,64,83,32,239,11,182,118,91,228,225,152,242,217,215,194,180,202,32,100,185,231,222,79,231,232,132,155,24,81,102,26,14,205,127,17,132,10,178,14,35,178,156,109,179,64,202,215,17,168,62,131,248,5,155,8,198,114,244,103,160,154,163,195,131,189,229,28,172,19,126,214,182,1,38,103,150,155,200,244,251,118,141,68,226,43,59,45,230,205,153,31,164,224,184,114,14,136,246,18,231,3,126,216,124,22,122,14,90,107,156,128,243,167,0,187,8,216,188,5,49,32,133,45,2,48,164,16,163,175,146,108,78,174,2,136,61,5,222,0,68,200,232,124,223,232,114,5,28,72,58,52,201,165,180,136,204,60,152,0,50,209,115,64,86,173,146,45,101,13,50,20,21,67,74,173,132,75,133,241,146,52,145,49,138,190,12,155,9,98,5,164,98,
37,197,168,92,29,217,19,176,165,33,247,18,0,194,173,220,195,175,57,235,140,173,232,101,144,228,176,47,190,135,241,236,10,162,51,2,172,183,45,20,177,40,201,214,100,150,47,22,176,205,163,113,9,197,183,210,174,47,114,26,74,117,238,229,208,106,43,83,251,82,75,67,252,138,1,246,75,93,83,33,220,181,73,97,220,67,47,41,17,203,181,206,136,252,42,54,50,133,97,139,9,167,25,3,222,49,227,16,25,141,33,149,201,68,97,4,104,15,8,162,31,181,254,228,114,32,251,18,90,143,107,40,183,50,134,136,174,11,145,98,90,5,98,13,11,100,45,2,184,41,129,173,83,144,100,161,7,33,157,184,130,8,171,214,76,224,77,69,155,70,142,240,133,137,100,0,128,102,133,208,33,163,27,224,0,0,233,137,248,234,161,90,41,2,162,117,93,210,111,105,250,48,197,98,216,221,84,30,160,212,250,131,95,27,42,188,153,144,108,215,3,7,21,105,236,74,202,124,149,228,225,188,212,7,24,181,215,86,169,73,74,65,150,45,116,239,140,169,216,149,49,16,37,199,92,55,
77,184,202,108,181,212,80,249,58,235,211,41,67,5,91,170,24,133,12,174,24,164,33,187,97,84,13,222,220,173,229,127,90,189,31,116,184,124,10,209,218,107,124,169,82,235,88,220,198,182,93,163,86,19,192,118,81,136,54,193,196,26,118,146,50,104,111,194,237,193,237,189,120,149,105,55,108,250,15,100,182,142,102,63,110,85,157,38,227,249,55,229,244,4,140,12,75,155,7,170,117,3,205,126,156,174,208,204,177,106,250,198,58,5,53,204,18,250,80,251,173,99,217,143,207,11,61,211,107,195,238,196,50,170,54,236,6,112,18,134,12,146,241,3,93,43,179,230,183,149,195,211,37,160,126,152,16,74,20,117,9,28,199,80,217,67,204,203,185,172,222,99,44,184,188,54,69,80,73,241,46,166,118,103,87,50,131,209,163,186,155,196,11,199,192,232,87,75,249,138,148,82,135,219,61,196,241,146,137,19,64,22,178,82,28,111,94,61,195,94,2,84,61,199,147,201,171,247,239,206,200,245,145,77,153,60,145,50,41,241,148,50,41,57,164,176,83,72,157,23,9,91,24,204,64,56,
86,217,192,88,201,137,216,199,224,185,239,51,108,29,188,251,229,205,27,28,88,208,32,204,51,182,31,67,207,176,172,205,144,33,89,17,108,40,121,179,34,208,148,171,9,64,249,249,205,114,162,84,112,165,48,166,171,72,14,126,139,19,73,176,32,244,18,40,69,11,216,143,212,23,85,29,186,7,189,181,89,123,16,141,205,161,28,247,208,121,176,100,42,183,170,120,241,254,197,85,40,194,144,11,217,41,201,232,21,153,173,5,227,205,13,197,160,37,199,132,69,169,88,107,162,106,106,34,13,214,1,195,189,86,123,151,213,49,137,130,229,74,200,130,4,108,181,148,88,179,35,203,122,85,163,235,26,135,51,161,61,73,22,21,247,235,81,21,162,221,210,166,186,165,17,113,86,54,21,26,77,87,251,219,126,74,156,36,254,5,19,215,227,201,169,159,170,23,103,164,252,185,45,154,148,8,234,209,164,242,29,153,216,64,1,201,10,239,41,188,134,203,73,251,81,90,230,168,155,164,110,207,43,73,53,65,147,102,140,138,14,105,69,95,145,166,99,93,9,169,220,150,90,129,111,24,
16,70,174,210,130,212,228,202,205,201,164,196,82,79,42,9,205,88,149,76,194,203,217,154,120,143,48,238,121,143,52,198,194,152,106,229,194,42,240,87,133,61,149,249,39,215,54,91,175,48,116,181,217,218,190,140,202,101,189,71,245,114,23,246,172,34,199,197,57,224,46,97,114,197,50,31,75,238,144,9,136,117,251,85,133,32,105,220,79,118,169,7,170,219,36,3,229,200,111,247,199,157,225,225,223,90,107,53,92,123,105,46,135,88,176,125,7,231,213,134,85,42,239,82,146,179,161,190,211,21,118,217,66,16,6,10,121,1,149,246,14,116,82,108,126,14,25,123,44,176,177,93,144,48,4,129,23,57,46,234,22,158,228,134,135,37,137,124,196,24,37,179,37,245,184,53,171,0,93,41,225,151,98,122,33,192,182,149,30,110,142,237,82,202,88,246,2,16,238,70,170,32,231,226,167,244,147,10,176,238,194,106,84,202,139,47,68,90,116,91,101,135,133,130,63,239,225,185,10,213,88,33,216,146,183,232,55,50,111,209,191,107,132,21,35,219,104,35,144,159,48,108,81,61,152,186,
227,79,204,223,66,26,14,75,186,240,71,141,40,249,184,93,90,12,94,61,156,158,137,127,83,109,62,106,205,223,80,154,191,83,103,254,87,80,217,105,190,67,99,234,133,20,140,250,89,163,73,15,108,85,151,0,174,218,65,170,242,63,12,177,144,57,94,129,253,163,187,61,92,100,120,172,180,45,45,198,113,149,20,227,175,186,248,228,243,86,74,51,22,97,184,84,71,85,15,33,45,129,153,190,216,213,4,111,14,183,54,108,137,158,246,21,154,214,121,22,214,250,42,26,175,76,184,169,58,116,211,71,10,101,143,21,183,141,90,43,20,231,215,210,253,44,175,103,186,29,82,149,80,235,88,208,79,69,86,246,203,207,111,176,123,137,237,14,25,79,241,216,115,12,216,188,41,214,21,127,130,117,194,7,132,21,239,79,116,23,207,29,30,28,120,83,140,223,195,50,124,30,121,46,70,75,111,58,68,75,241,92,119,58,38,29,119,159,109,233,14,217,183,100,19,115,175,83,136,111,175,46,100,249,218,185,64,213,14,69,65,124,141,67,3,20,244,87,57,124,208,186,218,211,192,104,
217,208,147,220,110,116,208,145,195,221,230,182,143,246,159,7,220,47,12,224,186,226,46,147,96,46,21,87,1,213,195,64,53,90,157,27,214,121,217,195,255,255,3,217,3,200,100,17,44,235,81,233,248,18,18,135,51,34,191,220,31,101,222,83,1,86,229,143,44,161,25,2,161,51,177,40,16,66,137,15,233,145,87,67,100,67,95,251,92,154,37,34,241,147,80,22,164,124,69,47,96,104,133,41,29,170,2,157,80,37,72,240,4,245,77,182,38,242,56,81,225,186,145,243,238,201,33,102,108,247,224,79,54,29,54,243,185,253,88,44,138,135,107,89,217,125,217,220,154,204,53,120,115,63,102,127,133,140,99,177,174,179,251,18,54,141,51,130,159,183,100,183,55,157,186,148,139,194,184,77,50,75,236,144,224,73,80,124,153,92,160,96,22,216,136,160,133,67,44,242,112,155,218,111,72,226,82,46,32,101,32,171,100,186,164,184,151,213,178,232,139,56,185,138,73,3,28,14,43,223,166,4,131,240,142,13,95,166,234,111,65,179,37,200,17,95,196,52,98,213,30,30,231,209,12,137,
2,42,193,95,202,51,146,50,231,150,185,52,13,65,67,43,26,138,162,152,151,238,37,149,151,37,53,223,190,175,18,62,100,201,167,157,58,40,5,43,161,42,127,122,181,80,253,170,66,170,115,182,8,98,60,53,20,229,9,90,33,232,76,214,250,51,6,9,138,58,213,12,226,64,4,52,212,117,107,141,129,226,178,76,196,240,226,74,37,122,17,132,193,255,84,11,32,200,240,188,50,131,162,195,107,67,73,16,230,75,76,248,189,71,36,102,2,226,231,5,202,224,211,154,208,57,77,81,112,16,241,188,246,28,47,156,204,191,169,12,63,154,230,110,167,5,112,120,175,154,98,165,60,97,68,74,179,55,34,31,222,79,94,125,4,74,195,53,210,168,219,123,144,55,229,202,97,63,214,67,229,245,96,38,133,173,83,63,201,10,224,173,177,83,30,141,22,41,91,153,120,113,93,191,130,241,167,66,206,210,205,26,121,65,229,222,157,22,93,82,240,173,173,22,153,69,110,92,11,82,105,226,158,194,45,90,205,117,9,191,200,99,201,224,25,41,126,221,18,47,26,183,69,146,47,120,
213,44,181,88,144,182,45,224,224,77,173,25,245,47,212,245,47,169,214,50,35,252,226,30,120,209,150,146,5,182,12,64,210,2,2,206,229,246,174,142,213,208,209,74,84,234,134,143,38,64,166,227,10,179,186,134,70,177,51,82,128,74,172,89,225,168,53,22,90,55,238,175,37,179,226,12,92,6,198,2,41,111,201,243,220,154,247,71,10,25,197,219,105,62,171,174,130,217,224,163,243,0,89,130,72,80,69,58,210,128,119,186,13,131,153,134,60,75,14,68,40,207,174,241,1,237,55,203,149,113,187,10,157,190,81,146,68,41,38,60,167,8,45,199,235,160,5,89,170,97,161,23,40,66,2,6,169,130,129,50,124,49,108,235,80,81,233,12,165,93,15,34,101,251,67,119,146,228,68,140,41,215,67,10,133,141,24,0,247,185,238,54,78,52,237,9,222,194,2,81,135,247,188,238,86,123,82,169,218,147,250,17,70,61,49,211,55,33,252,106,165,61,220,210,251,124,99,161,122,86,251,217,189,115,221,57,43,151,37,144,204,36,17,21,250,110,163,31,38,197,70,185,121,189,140,40,
39,211,57,171,177,33,201,91,239,150,214,174,33,20,205,48,45,77,107,164,203,46,242,140,225,86,19,212,219,97,55,174,58,168,22,100,3,219,141,77,117,71,83,247,176,26,170,5,216,172,117,208,192,104,32,94,130,101,251,23,116,201,58,181,197,74,19,232,154,182,61,116,6,189,126,120,96,245,50,248,47,14,204,238,12,254,31,153,109,101,12,63,41,107,128,40,67,142,63,97,233,188,100,174,59,28,2,188,3,240,14,192,59,0,239,28,89,18,154,168,87,155,168,26,102,127,208,44,145,1,38,0,42,31,101,147,23,178,182,173,56,255,236,214,104,24,147,186,1,12,223,30,159,158,188,127,238,157,31,127,28,159,60,125,247,242,216,45,176,34,240,152,204,131,5,148,39,94,27,163,61,236,189,94,123,153,37,121,106,122,109,72,170,204,18,150,220,107,82,247,239,155,229,181,153,150,242,87,152,109,57,61,119,155,66,174,233,22,15,140,81,43,127,159,90,205,187,213,122,242,126,114,250,250,248,183,107,90,149,231,152,115,206,119,137,69,190,207,56,189,15,219,99,117,97,173,
49,86,183,165,193,153,14,32,212,77,100,162,211,252,59,133,113,15,105,140,143,223,141,127,254,237,195,41,30,120,170,200,115,43,248,164,6,190,41,32,202,56,88,133,215,246,69,70,118,9,17,96,204,67,75,194,60,12,68,173,52,243,73,35,11,126,143,231,148,133,242,209,59,10,215,156,98,216,13,131,188,3,9,198,157,171,204,252,219,64,172,193,173,32,54,196,249,135,1,248,148,139,187,86,161,153,143,71,12,119,188,6,44,187,32,98,72,157,238,99,182,111,159,142,229,33,33,238,247,255,184,237,246,239,97,186,64,240,189,108,22,225,54,69,178,138,168,175,2,153,215,214,177,108,155,228,234,96,142,105,221,9,182,51,168,86,16,94,251,240,142,229,162,185,115,39,192,221,88,178,32,101,209,220,236,25,164,113,109,192,59,74,82,22,67,60,235,248,73,180,211,67,148,209,168,68,66,142,185,238,255,1,244,93,122,38,