From 23981cef2cec5f8a4e49544cfdfb7e8aeab03839 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 8 Apr 2026 15:39:57 +0000 Subject: [PATCH] deploy: 8941d092381e9409f851699ecab13aa57cb3b94c --- pr/571/docs/help.html | 2 +- pr/571/docs/noq/enum.ConnectionError.html | 6 +- pr/571/docs/noq/enum.SendDatagramError.html | 6 +- pr/571/docs/noq/struct.AcceptBi.html | 6 +- pr/571/docs/noq/struct.AcceptUni.html | 6 +- pr/571/docs/noq/struct.Connection.html | 13 +- pr/571/docs/noq/struct.OnClosed.html | 4 +- pr/571/docs/noq/struct.OpenBi.html | 6 +- pr/571/docs/noq/struct.OpenUni.html | 6 +- pr/571/docs/noq/struct.ReadDatagram.html | 6 +- pr/571/docs/noq/struct.SendDatagram.html | 6 +- .../docs/noq/struct.WeakConnectionHandle.html | 10 +- pr/571/docs/noq/trait.NetworkChangeHint.html | 4 +- .../docs/noq_proto/enum.ClosePathError.html | 6 +- .../docs/noq_proto/enum.ConnectionError.html | 6 +- pr/571/docs/noq_proto/enum.Event.html | 4 +- pr/571/docs/noq_proto/enum.PathError.html | 6 +- pr/571/docs/noq_proto/enum.PathEvent.html | 2 +- .../noq_proto/n0_nat_traversal/index.html | 2 +- pr/571/docs/noq_proto/struct.Connection.html | 15 +- .../struct.MultipathNotNegotiated.html | 4 +- .../docs/noq_proto/struct.TransportError.html | 2 +- .../noq_proto/trait.NetworkChangeHint.html | 4 +- .../{dbbcb1ebecee.js => 626a47bf323b.js} | 2 +- pr/571/docs/search.index/root.js | 2 +- pr/571/docs/search.index/type/3e6b4613c076.js | 1 - pr/571/docs/search.index/type/954727a35b95.js | 1 + pr/571/docs/settings.html | 2 +- pr/571/docs/src/noq/connection.rs.html | 1907 +++++++++-------- .../docs/src/noq_proto/connection/mod.rs.html | 1503 ++++++------- .../src/noq_proto/n0_nat_traversal.rs.html | 1197 ++++++----- 31 files changed, 2385 insertions(+), 2362 deletions(-) rename pr/571/docs/search.index/function/{dbbcb1ebecee.js => 626a47bf323b.js} (96%) delete mode 100644 pr/571/docs/search.index/type/3e6b4613c076.js create mode 100644 pr/571/docs/search.index/type/954727a35b95.js diff --git a/pr/571/docs/help.html b/pr/571/docs/help.html index 99d8cb979..cda0c7f93 100644 --- a/pr/571/docs/help.html +++ b/pr/571/docs/help.html @@ -1 +1 @@ -Help

All

Rustdoc help

Back
\ No newline at end of file +Help

All

Rustdoc help

Back
\ No newline at end of file diff --git a/pr/571/docs/noq/enum.ConnectionError.html b/pr/571/docs/noq/enum.ConnectionError.html index 39c5d4543..c64803c4c 100644 --- a/pr/571/docs/noq/enum.ConnectionError.html +++ b/pr/571/docs/noq/enum.ConnectionError.html @@ -1,4 +1,4 @@ -ConnectionError in noq - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
+ConnectionError in noq - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
     VersionMismatch,
     TransportError(Error),
     ConnectionClosed(ConnectionClose),
@@ -20,8 +20,8 @@ and §

LocallyClosed

The local application closed the connection

§

CidsExhausted

The connection could not be created because not enough of the CID space is available

Try using longer connection IDs.

-

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Close> for ConnectionError

Source§

fn from(x: Close) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<CloseReason> for ConnectionError

Source§

fn from(value: CloseReason) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ReadError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ResetError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for StoppedError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for WriteError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: Error) -> ConnectionError

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Close> for ConnectionError

Source§

fn from(x: Close) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<CloseReason> for ConnectionError

Source§

fn from(value: CloseReason) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ReadError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ResetError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for StoppedError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for WriteError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: Error) -> ConnectionError

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq/enum.SendDatagramError.html b/pr/571/docs/noq/enum.SendDatagramError.html index 4b8a4e090..91c6ca5ca 100644 --- a/pr/571/docs/noq/enum.SendDatagramError.html +++ b/pr/571/docs/noq/enum.SendDatagramError.html @@ -1,4 +1,4 @@ -SendDatagramError in noq - Rust

SendDatagramError

Enum SendDatagramError 

Source
pub enum SendDatagramError {
+SendDatagramError in noq - Rust

SendDatagramError

Enum SendDatagramError 

Source
pub enum SendDatagramError {
     UnsupportedByPeer,
     Disabled,
     TooLarge,
@@ -10,8 +10,8 @@
 

Indicates that the path MTU minus overhead or the limit advertised by the peer has been exceeded.

§

ConnectionLost(ConnectionError)

The connection was lost

-

Trait Implementations§

Source§

impl Clone for SendDatagramError

Source§

fn clone(&self) -> SendDatagramError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SendDatagramError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for SendDatagramError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for SendDatagramError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for SendDatagramError

Source§

fn eq(&self, other: &SendDatagramError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for SendDatagramError

Source§

impl StructuralPartialEq for SendDatagramError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for SendDatagramError

Source§

fn clone(&self) -> SendDatagramError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SendDatagramError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for SendDatagramError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for SendDatagramError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for SendDatagramError

Source§

fn eq(&self, other: &SendDatagramError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for SendDatagramError

Source§

impl StructuralPartialEq for SendDatagramError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq/struct.AcceptBi.html b/pr/571/docs/noq/struct.AcceptBi.html index 180bbe0f8..6f7293eef 100644 --- a/pr/571/docs/noq/struct.AcceptBi.html +++ b/pr/571/docs/noq/struct.AcceptBi.html @@ -1,6 +1,6 @@ -AcceptBi in noq - Rust

AcceptBi

Struct AcceptBi 

Source
pub struct AcceptBi<'a> { /* private fields */ }
Expand description

Future produced by Connection::accept_bi

-

Trait Implementations§

Source§

impl Future for AcceptBi<'_>

Source§

type Output = Result<(SendStream, RecvStream), ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for AcceptBi<'a>
where +AcceptBi in noq - Rust

AcceptBi

Struct AcceptBi 

Source
pub struct AcceptBi<'a> { /* private fields */ }
Expand description

Future produced by Connection::accept_bi

+

Trait Implementations§

Source§

impl Future for AcceptBi<'_>

Source§

type Output = Result<(SendStream, RecvStream), ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for AcceptBi<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for AcceptBi<'a>

§

impl<'a> !RefUnwindSafe for AcceptBi<'a>

§

impl<'a> Send for AcceptBi<'a>

§

impl<'a> Sync for AcceptBi<'a>

§

impl<'a> !UnwindSafe for AcceptBi<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.AcceptUni.html b/pr/571/docs/noq/struct.AcceptUni.html index 0e6b55eaa..d26ba3ca0 100644 --- a/pr/571/docs/noq/struct.AcceptUni.html +++ b/pr/571/docs/noq/struct.AcceptUni.html @@ -1,6 +1,6 @@ -AcceptUni in noq - Rust

AcceptUni

Struct AcceptUni 

Source
pub struct AcceptUni<'a> { /* private fields */ }
Expand description

Future produced by Connection::accept_uni

-

Trait Implementations§

Source§

impl Future for AcceptUni<'_>

Source§

type Output = Result<RecvStream, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for AcceptUni<'a>
where +AcceptUni in noq - Rust

AcceptUni

Struct AcceptUni 

Source
pub struct AcceptUni<'a> { /* private fields */ }
Expand description

Future produced by Connection::accept_uni

+

Trait Implementations§

Source§

impl Future for AcceptUni<'_>

Source§

type Output = Result<RecvStream, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for AcceptUni<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for AcceptUni<'a>

§

impl<'a> !RefUnwindSafe for AcceptUni<'a>

§

impl<'a> Send for AcceptUni<'a>

§

impl<'a> Sync for AcceptUni<'a>

§

impl<'a> !UnwindSafe for AcceptUni<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.Connection.html b/pr/571/docs/noq/struct.Connection.html index 7a59936d7..778c5c28a 100644 --- a/pr/571/docs/noq/struct.Connection.html +++ b/pr/571/docs/noq/struct.Connection.html @@ -8,7 +8,7 @@ receiving CONNECTION_CLOSE the peer may drop any stream data not yet de application. Connection::close() describes in more detail how to gracefully close a connection without losing application data.

May be cloned to obtain another handle to the same connection.

-

Implementations§

Source§

impl Connection

Source

pub fn weak_handle(&self) -> WeakConnectionHandle

Returns a weak reference to the inner connection struct.

+

Implementations§

Source§

impl Connection

Source

pub fn weak_handle(&self) -> WeakConnectionHandle

Returns a weak reference to the inner connection struct.

Source

pub fn open_uni(&self) -> OpenUni<'_> ⓘ

Initiate a new outgoing unidirectional stream.

Streams are cheap and instantaneous to open unless blocked by flow control. As a consequence, the peer won’t be notified that a stream has been opened until the stream is @@ -167,15 +167,16 @@ strong and pseudorandom, and are suitable for use as keying material.

counts increase both minimum and worst-case memory consumption.

Source

pub fn observed_external_addr(&self) -> ObservedExternalAddr

Track changes on our external address as reported by the peer.

Source

pub fn is_multipath_enabled(&self) -> bool

Is multipath enabled?

-
Source

pub fn add_nat_traversal_address( +

Source

pub fn add_nat_traversal_address( &self, address: SocketAddr, + priority: u8, ) -> Result<(), Error>

Registers one address at which this endpoint might be reachable

When the NAT traversal extension is negotiated, servers send these addresses to clients in ADD_ADDRESS frames. This allows clients to obtain server address candidates to initiate NAT traversal attempts. Clients provide their own reachable addresses in REACH_OUT frames when Self::initiate_nat_traversal_round is called.

-
Source

pub fn remove_nat_traversal_address( +

Source

pub fn remove_nat_traversal_address( &self, address: SocketAddr, ) -> Result<(), Error>

Removes one or more addresses from the set of addresses at which this endpoint is reachable

@@ -184,13 +185,13 @@ clients in REMOVE_ADDRESS frames. This allows clients to stop using server address candidates that are no longer valid for NAT traversal.

For clients, removed addresses will no longer be advertised in REACH_OUT frames.

Addresses not present in the set will be silently ignored.

-
Source

pub fn get_local_nat_traversal_addresses( +

Source

pub fn get_local_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the current local nat traversal addresses

-
Source

pub fn get_remote_nat_traversal_addresses( +

Source

pub fn get_remote_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the currently advertised nat traversal addresses by the server

-
Source

pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, Error>

Initiates a new nat traversal round

+
Source

pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, Error>

Initiates a new nat traversal round

A nat traversal round involves advertising the client’s local addresses in REACH_OUT frames, and initiating probing of the known remote addresses. When a new round is initiated, the previous one is cancelled, and paths that have not been opened are closed.

diff --git a/pr/571/docs/noq/struct.OnClosed.html b/pr/571/docs/noq/struct.OnClosed.html index 530c1e14e..60a40350a 100644 --- a/pr/571/docs/noq/struct.OnClosed.html +++ b/pr/571/docs/noq/struct.OnClosed.html @@ -1,6 +1,6 @@ -OnClosed in noq - Rust

OnClosed

Struct OnClosed 

Source
pub struct OnClosed { /* private fields */ }
Expand description

Future returned by Connection::on_closed

+OnClosed in noq - Rust

OnClosed

Struct OnClosed 

Source
pub struct OnClosed { /* private fields */ }
Expand description

Future returned by Connection::on_closed

Resolves to a tuple of (ConnectionError, ConnectionStats).

-

Trait Implementations§

Source§

impl Drop for OnClosed

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl Future for OnClosed

Source§

type Output = (ConnectionError, ConnectionStats)

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +

Trait Implementations§

Source§

impl Drop for OnClosed

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl Future for OnClosed

Source§

type Output = (ConnectionError, ConnectionStats)

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.OpenBi.html b/pr/571/docs/noq/struct.OpenBi.html index c878e5abb..303c8e7a1 100644 --- a/pr/571/docs/noq/struct.OpenBi.html +++ b/pr/571/docs/noq/struct.OpenBi.html @@ -1,6 +1,6 @@ -OpenBi in noq - Rust

OpenBi

Struct OpenBi 

Source
pub struct OpenBi<'a> { /* private fields */ }
Expand description

Future produced by Connection::open_bi

-

Trait Implementations§

Source§

impl Future for OpenBi<'_>

Source§

type Output = Result<(SendStream, RecvStream), ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for OpenBi<'a>
where +OpenBi in noq - Rust

OpenBi

Struct OpenBi 

Source
pub struct OpenBi<'a> { /* private fields */ }
Expand description

Future produced by Connection::open_bi

+

Trait Implementations§

Source§

impl Future for OpenBi<'_>

Source§

type Output = Result<(SendStream, RecvStream), ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for OpenBi<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for OpenBi<'a>

§

impl<'a> !RefUnwindSafe for OpenBi<'a>

§

impl<'a> Send for OpenBi<'a>

§

impl<'a> Sync for OpenBi<'a>

§

impl<'a> !UnwindSafe for OpenBi<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.OpenUni.html b/pr/571/docs/noq/struct.OpenUni.html index dbe517c1f..f9c9a8af8 100644 --- a/pr/571/docs/noq/struct.OpenUni.html +++ b/pr/571/docs/noq/struct.OpenUni.html @@ -1,6 +1,6 @@ -OpenUni in noq - Rust

OpenUni

Struct OpenUni 

Source
pub struct OpenUni<'a> { /* private fields */ }
Expand description

Future produced by Connection::open_uni

-

Trait Implementations§

Source§

impl Future for OpenUni<'_>

Source§

type Output = Result<SendStream, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for OpenUni<'a>
where +OpenUni in noq - Rust

OpenUni

Struct OpenUni 

Source
pub struct OpenUni<'a> { /* private fields */ }
Expand description

Future produced by Connection::open_uni

+

Trait Implementations§

Source§

impl Future for OpenUni<'_>

Source§

type Output = Result<SendStream, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for OpenUni<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for OpenUni<'a>

§

impl<'a> !RefUnwindSafe for OpenUni<'a>

§

impl<'a> Send for OpenUni<'a>

§

impl<'a> Sync for OpenUni<'a>

§

impl<'a> !UnwindSafe for OpenUni<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.ReadDatagram.html b/pr/571/docs/noq/struct.ReadDatagram.html index cac5d37c3..37d7f5c13 100644 --- a/pr/571/docs/noq/struct.ReadDatagram.html +++ b/pr/571/docs/noq/struct.ReadDatagram.html @@ -1,6 +1,6 @@ -ReadDatagram in noq - Rust

ReadDatagram

Struct ReadDatagram 

Source
pub struct ReadDatagram<'a> { /* private fields */ }
Expand description

Future produced by Connection::read_datagram

-

Trait Implementations§

Source§

impl Future for ReadDatagram<'_>

Source§

type Output = Result<Bytes, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for ReadDatagram<'a>
where +ReadDatagram in noq - Rust

ReadDatagram

Struct ReadDatagram 

Source
pub struct ReadDatagram<'a> { /* private fields */ }
Expand description

Future produced by Connection::read_datagram

+

Trait Implementations§

Source§

impl Future for ReadDatagram<'_>

Source§

type Output = Result<Bytes, ConnectionError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for ReadDatagram<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for ReadDatagram<'a>

§

impl<'a> !RefUnwindSafe for ReadDatagram<'a>

§

impl<'a> Send for ReadDatagram<'a>

§

impl<'a> Sync for ReadDatagram<'a>

§

impl<'a> !UnwindSafe for ReadDatagram<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.SendDatagram.html b/pr/571/docs/noq/struct.SendDatagram.html index 04c0cba2f..e3a0bd9ca 100644 --- a/pr/571/docs/noq/struct.SendDatagram.html +++ b/pr/571/docs/noq/struct.SendDatagram.html @@ -1,6 +1,6 @@ -SendDatagram in noq - Rust

SendDatagram

Struct SendDatagram 

Source
pub struct SendDatagram<'a> { /* private fields */ }
Expand description

Future produced by Connection::send_datagram_wait

-

Trait Implementations§

Source§

impl Future for SendDatagram<'_>

Source§

type Output = Result<(), SendDatagramError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering -the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for SendDatagram<'a>
where +SendDatagram in noq - Rust

SendDatagram

Struct SendDatagram 

Source
pub struct SendDatagram<'a> { /* private fields */ }
Expand description

Future produced by Connection::send_datagram_wait

+

Trait Implementations§

Source§

impl Future for SendDatagram<'_>

Source§

type Output = Result<(), SendDatagramError>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering +the current task for wakeup if the value is not yet available. Read more
Source§

impl<'__pin, 'a> Unpin for SendDatagram<'a>
where PinnedFieldsOf<__Origin<'__pin, 'a>>: Unpin,

Auto Trait Implementations§

§

impl<'a> !Freeze for SendDatagram<'a>

§

impl<'a> !RefUnwindSafe for SendDatagram<'a>

§

impl<'a> Send for SendDatagram<'a>

§

impl<'a> Sync for SendDatagram<'a>

§

impl<'a> !UnwindSafe for SendDatagram<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq/struct.WeakConnectionHandle.html b/pr/571/docs/noq/struct.WeakConnectionHandle.html index 68daf3016..6e11ad5e7 100644 --- a/pr/571/docs/noq/struct.WeakConnectionHandle.html +++ b/pr/571/docs/noq/struct.WeakConnectionHandle.html @@ -1,10 +1,10 @@ -WeakConnectionHandle in noq - Rust

WeakConnectionHandle

Struct WeakConnectionHandle 

Source
pub struct WeakConnectionHandle(/* private fields */);
Expand description

A handle to some connection internals, use with care.

+WeakConnectionHandle in noq - Rust

WeakConnectionHandle

Struct WeakConnectionHandle 

Source
pub struct WeakConnectionHandle(/* private fields */);
Expand description

A handle to some connection internals, use with care.

This contains a weak reference to the connection so will not itself keep the connection alive.

-

Implementations§

Source§

impl WeakConnectionHandle

Source

pub fn is_alive(&self) -> bool

Returns true if the Connection associated with this handle is still alive.

-
Source

pub fn upgrade(&self) -> Option<Connection>

Upgrade the handle to a full Connection

-
Source

pub fn is_same_connection(&self, other: &Self) -> bool

Returns true if the two WeakConnectionHandle point at the same connection.

-

Trait Implementations§

Source§

impl Clone for WeakConnectionHandle

Source§

fn clone(&self) -> WeakConnectionHandle

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WeakConnectionHandle

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Implementations§

Source§

impl WeakConnectionHandle

Source

pub fn is_alive(&self) -> bool

Returns true if the Connection associated with this handle is still alive.

+
Source

pub fn upgrade(&self) -> Option<Connection>

Upgrade the handle to a full Connection

+
Source

pub fn is_same_connection(&self, other: &Self) -> bool

Returns true if the two WeakConnectionHandle point at the same connection.

+

Trait Implementations§

Source§

impl Clone for WeakConnectionHandle

Source§

fn clone(&self) -> WeakConnectionHandle

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WeakConnectionHandle

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq/trait.NetworkChangeHint.html b/pr/571/docs/noq/trait.NetworkChangeHint.html index 32409d180..cea19000c 100644 --- a/pr/571/docs/noq/trait.NetworkChangeHint.html +++ b/pr/571/docs/noq/trait.NetworkChangeHint.html @@ -1,4 +1,4 @@ -NetworkChangeHint in noq - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
+NetworkChangeHint in noq - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
     // Required method
     fn is_path_recoverable(
         &self,
@@ -6,7 +6,7 @@
         network_path: FourTuple,
     ) -> bool;
 }
Expand description

Hints when the caller identifies a network change.

-

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

+

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

After network changes, paths may not be recoverable. In this case, waiting for the path to become idle may take longer than what is desirable. If Self::is_path_recoverable returns false, a multipath-enabled, client-side connection will establish a new path to diff --git a/pr/571/docs/noq_proto/enum.ClosePathError.html b/pr/571/docs/noq_proto/enum.ClosePathError.html index 9c47f12a6..66cc1771c 100644 --- a/pr/571/docs/noq_proto/enum.ClosePathError.html +++ b/pr/571/docs/noq_proto/enum.ClosePathError.html @@ -1,4 +1,4 @@ -ClosePathError in noq_proto - Rust

ClosePathError

Enum ClosePathError 

Source
pub enum ClosePathError {
+ClosePathError in noq_proto - Rust

ClosePathError

Enum ClosePathError 

Source
pub enum ClosePathError {
     MultipathNotNegotiated,
     ClosedPath,
     LastOpenPath,
@@ -7,8 +7,8 @@
 
§

ClosedPath

The path is already closed or was never opened

§

LastOpenPath

Cannot close the last remaining open path via the local API.

Use Connection::close to end the connection instead.

-

Trait Implementations§

Source§

impl Clone for ClosePathError

Source§

fn clone(&self) -> ClosePathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClosePathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ClosePathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ClosePathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for ClosePathError

Source§

fn eq(&self, other: &ClosePathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ClosePathError

Source§

impl StructuralPartialEq for ClosePathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ClosePathError

Source§

fn clone(&self) -> ClosePathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClosePathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ClosePathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ClosePathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for ClosePathError

Source§

fn eq(&self, other: &ClosePathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ClosePathError

Source§

impl StructuralPartialEq for ClosePathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq_proto/enum.ConnectionError.html b/pr/571/docs/noq_proto/enum.ConnectionError.html index 7a8d48731..d136f3d20 100644 --- a/pr/571/docs/noq_proto/enum.ConnectionError.html +++ b/pr/571/docs/noq_proto/enum.ConnectionError.html @@ -1,4 +1,4 @@ -ConnectionError in noq_proto - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
+ConnectionError in noq_proto - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
     VersionMismatch,
     TransportError(TransportError),
     ConnectionClosed(ConnectionClose),
@@ -20,8 +20,8 @@ and §

LocallyClosed

The local application closed the connection

§

CidsExhausted

The connection could not be created because not enough of the CID space is available

Try using longer connection IDs.

-

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for Error

Source§

fn from(x: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for Error

Source§

fn from(x: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq_proto/enum.Event.html b/pr/571/docs/noq_proto/enum.Event.html index abd9e5d51..4c0690692 100644 --- a/pr/571/docs/noq_proto/enum.Event.html +++ b/pr/571/docs/noq_proto/enum.Event.html @@ -1,4 +1,4 @@ -Event in noq_proto - Rust

Event

Enum Event 

Source
pub enum Event {
+Event in noq_proto - Rust

Event

Enum Event 

Source
pub enum Event {
     HandshakeDataReady,
     Connected,
     HandshakeConfirmed,
@@ -22,7 +22,7 @@
 
§

DatagramsUnblocked

One or more application datagrams have been sent after blocking

§

Path(PathEvent)

(Multi)Path events

§

NatTraversal(Event)

n0’s nat traversal events

-

Trait Implementations§

Source§

impl Debug for Event

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !Freeze for Event

§

impl !RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl !UnwindSafe for Event

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Debug for Event

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !Freeze for Event

§

impl !RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl !UnwindSafe for Event

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/pr/571/docs/noq_proto/enum.PathError.html b/pr/571/docs/noq_proto/enum.PathError.html index a1af5518f..0542bfbd8 100644 --- a/pr/571/docs/noq_proto/enum.PathError.html +++ b/pr/571/docs/noq_proto/enum.PathError.html @@ -1,4 +1,4 @@ -PathError in noq_proto - Rust

PathError

Enum PathError 

Source
pub enum PathError {
+PathError in noq_proto - Rust

PathError

Enum PathError 

Source
pub enum PathError {
     MultipathNotNegotiated,
     ServerSideNotAllowed,
     MaxPathIdReached,
@@ -12,8 +12,8 @@
 
§

RemoteCidsExhausted

No remote CIDs available to open a new path

§

ValidationFailed

Path could not be validated and will be abandoned

§

InvalidRemoteAddress(SocketAddr)

The remote address for the path is not supported by the endpoint

-

Trait Implementations§

Source§

impl Clone for PathError

Source§

fn clone(&self) -> PathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for PathError

Source§

fn eq(&self, other: &PathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PathError

Source§

impl Eq for PathError

Source§

impl StructuralPartialEq for PathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for PathError

Source§

fn clone(&self) -> PathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for PathError

Source§

fn eq(&self, other: &PathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Copy for PathError

Source§

impl Eq for PathError

Source§

impl StructuralPartialEq for PathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq_proto/enum.PathEvent.html b/pr/571/docs/noq_proto/enum.PathEvent.html index c79598b37..eb148dd98 100644 --- a/pr/571/docs/noq_proto/enum.PathEvent.html +++ b/pr/571/docs/noq_proto/enum.PathEvent.html @@ -39,7 +39,7 @@ changes the status.

Fields

§id: PathId

Path over which the observed address was reported, PathId::ZERO when multipath is not negotiated

§addr: SocketAddr

The address observed by the remote over this path

-

Trait Implementations§

Source§

impl Clone for PathEvent

Source§

fn clone(&self) -> PathEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PathEvent

Source§

fn eq(&self, other: &PathEvent) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Clone for PathEvent

Source§

fn clone(&self) -> PathEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PathEvent

Source§

fn eq(&self, other: &PathEvent) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for PathEvent

Source§

impl StructuralPartialEq for PathEvent

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq_proto/n0_nat_traversal/index.html b/pr/571/docs/noq_proto/n0_nat_traversal/index.html index 3bca1b38a..d00652974 100644 --- a/pr/571/docs/noq_proto/n0_nat_traversal/index.html +++ b/pr/571/docs/noq_proto/n0_nat_traversal/index.html @@ -1,2 +1,2 @@ -noq_proto::n0_nat_traversal - Rust

Module n0_nat_traversal

Module n0_nat_traversal 

Source
Expand description

n0’s (https://n0.computer) NAT Traversal protocol implementation.

+noq_proto::n0_nat_traversal - Rust

Module n0_nat_traversal

Module n0_nat_traversal 

Source
Expand description

n0’s (https://n0.computer) NAT Traversal protocol implementation.

Enums§

Error
Errors that the nat traversal state might encounter.
Event
Event emitted when the client receives ADD_ADDRESS or REMOVE_ADDRESS frames.
\ No newline at end of file diff --git a/pr/571/docs/noq_proto/struct.Connection.html b/pr/571/docs/noq_proto/struct.Connection.html index e955260ea..1c64fab22 100644 --- a/pr/571/docs/noq_proto/struct.Connection.html +++ b/pr/571/docs/noq_proto/struct.Connection.html @@ -33,7 +33,7 @@ increasing time. Specifically, calling Instant may be interleaved in any order with a call to handle_event at that same instant; however events or timeouts with different instants must not be interleaved.

-

Implementations§

Source§

impl Connection

Source

pub fn poll_timeout(&mut self) -> Option<Instant>

Returns the next time at which handle_timeout should be called

+

Implementations§

Source§

impl Connection

Source

pub fn poll_timeout(&mut self) -> Option<Instant>

Returns the next time at which handle_timeout should be called

The value returned may change after:

Source

pub fn add_nat_traversal_address( +

Source

pub fn add_nat_traversal_address( &mut self, address: SocketAddr, + priority: u8, ) -> Result<(), Error>

Add addresses the local endpoint considers are reachable for nat traversal.

-
Source

pub fn remove_nat_traversal_address( +

Source

pub fn remove_nat_traversal_address( &mut self, address: SocketAddr, ) -> Result<(), Error>

Removes an address the endpoing no longer considers reachable for nat traversal

Addresses not present in the set will be silently ignored.

-
Source

pub fn get_local_nat_traversal_addresses( +

Source

pub fn get_local_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the current local nat traversal addresses

-
Source

pub fn get_remote_nat_traversal_addresses( +

Source

pub fn get_remote_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the currently advertised nat traversal addresses by the server

-
Source

pub fn initiate_nat_traversal_round( +

Source

pub fn initiate_nat_traversal_round( &mut self, now: Instant, ) -> Result<Vec<SocketAddr>, Error>

Initiates a new nat traversal round

@@ -241,7 +242,7 @@ initiated, the previous one is cancelled, and paths that have not been opened ar

Returns the server addresses that are now being probed. If addresses fail due to spurious errors, these might succeed later and not be returned in this set.

-

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/pr/571/docs/noq_proto/struct.MultipathNotNegotiated.html b/pr/571/docs/noq_proto/struct.MultipathNotNegotiated.html index 1c0dd4482..ab2fcc537 100644 --- a/pr/571/docs/noq_proto/struct.MultipathNotNegotiated.html +++ b/pr/571/docs/noq_proto/struct.MultipathNotNegotiated.html @@ -1,5 +1,5 @@ -MultipathNotNegotiated in noq_proto - Rust

MultipathNotNegotiated

Struct MultipathNotNegotiated 

Source
pub struct MultipathNotNegotiated { /* private fields */ }
Expand description

Error when the multipath extension was not negotiated, but attempted to be used.

-

Trait Implementations§

Source§

impl Clone for MultipathNotNegotiated

Source§

fn clone(&self) -> MultipathNotNegotiated

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultipathNotNegotiated

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for MultipathNotNegotiated

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for MultipathNotNegotiated

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Copy for MultipathNotNegotiated

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +MultipathNotNegotiated in noq_proto - Rust

MultipathNotNegotiated

Struct MultipathNotNegotiated 

Source
pub struct MultipathNotNegotiated { /* private fields */ }
Expand description

Error when the multipath extension was not negotiated, but attempted to be used.

+

Trait Implementations§

Source§

impl Clone for MultipathNotNegotiated

Source§

fn clone(&self) -> MultipathNotNegotiated

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultipathNotNegotiated

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for MultipathNotNegotiated

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for MultipathNotNegotiated

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Copy for MultipathNotNegotiated

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/571/docs/noq_proto/struct.TransportError.html b/pr/571/docs/noq_proto/struct.TransportError.html index 69de47734..24fc708e0 100644 --- a/pr/571/docs/noq_proto/struct.TransportError.html +++ b/pr/571/docs/noq_proto/struct.TransportError.html @@ -11,7 +11,7 @@
§reason: String

Human-readable explanation of the reason

§crypto: Option<Arc<dyn Error + Send + Sync>>

An underlying crypto (e.g. TLS) layer error

Implementations§

Source§

impl Error

Source

pub fn new(code: Code, reason: String) -> Self

Construct an error with a code and a reason

-

Trait Implementations§

Source§

impl Clone for Error

Source§

fn clone(&self) -> Error

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for ConnectionClose

Source§

fn from(x: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for TransportError

Source§

fn from(e: Error) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Error

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Clone for Error

Source§

fn clone(&self) -> Error

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for ConnectionClose

Source§

fn from(x: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for TransportError

Source§

fn from(e: Error) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Error

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Error

Auto Trait Implementations§

§

impl Freeze for Error

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/571/docs/noq_proto/trait.NetworkChangeHint.html b/pr/571/docs/noq_proto/trait.NetworkChangeHint.html index f0fe47119..0cf99c41b 100644 --- a/pr/571/docs/noq_proto/trait.NetworkChangeHint.html +++ b/pr/571/docs/noq_proto/trait.NetworkChangeHint.html @@ -1,4 +1,4 @@ -NetworkChangeHint in noq_proto - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
+NetworkChangeHint in noq_proto - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
     // Required method
     fn is_path_recoverable(
         &self,
@@ -6,7 +6,7 @@
         network_path: FourTuple,
     ) -> bool;
 }
Expand description

Hints when the caller identifies a network change.

-

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

+

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

After network changes, paths may not be recoverable. In this case, waiting for the path to become idle may take longer than what is desirable. If Self::is_path_recoverable returns false, a multipath-enabled, client-side connection will establish a new path to diff --git a/pr/571/docs/search.index/function/dbbcb1ebecee.js b/pr/571/docs/search.index/function/626a47bf323b.js similarity index 96% rename from pr/571/docs/search.index/function/dbbcb1ebecee.js rename to pr/571/docs/search.index/function/626a47bf323b.js index d35f29dd5..d64c86ab4 100644 --- a/pr/571/docs/search.index/function/dbbcb1ebecee.js +++ b/pr/571/docs/search.index/function/626a47bf323b.js @@ -1 +1 @@ -rd_("Bf[\"{{{AHEf{ANKd}}{AHEf{ANKd}}}D@n}\",[]]Bf[\"{{{AHEf{BEB`}}{AHEf{BEB`}}}D@n}\",[]]Bd[\"{{{AHEf{KAd}}{AHEf{KAd}}}D@n}\",[]]Bd[\"{{{AHEf{CNn}}{AHEf{CNn}}}D@n}\",[]]Bf[\"{{{AHEf{BBAd}}{AHEf{BBAd}}}D@n}\",[]]Bf[\"{{{AHEf{BB@f}}{AHEf{BB@f}}}D@n}\",[]]Bf[\"{{{AHEf{AGLh}}{AHEf{AGLh}}}D@n}\",[]]Bf[\"{{{AHEf{AIDn}}{AHEf{AIDn}}}D@n}\",[]]Bf[\"{{{AHEf{BB@d}}{AHEf{BB@d}}}D@n}\",[]]Bf[\"{{{AHEf{AIGb}}{AHEf{AIGb}}}D@n}\",[]]Bf[\"{{{AHEf{B@Cd}}{AHEf{B@Cd}}}D@n}\",[]]Bd[\"{{{AHEf{KDf}}{AHEf{KDf}}}D@n}\",[]]Bf[\"{{{AHEf{BFFl}}{AHEf{BFFl}}}D@n}\",[]]Bd[\"{{{AHEf{I@`}}{AHEf{I@`}}}D@n}\",[]]Bd[\"{{{AHEf{KBd}}{AHEf{KBd}}}D@n}\",[]]Bf[\"{{{AHEf{AANl}}{AHEf{AANl}}}D@n}\",[]]Bf[\"{{{AHEf{AIBb}}{AHEf{AIBb}}}D@n}\",[]]Bf[\"{{{AHEf{AGLb}}{AHEf{AGLb}}}D@n}\",[]]Bd[\"{{{AHEf{NIf}}{AHEf{NIf}}}D@n}\",[]]Bf[\"{{{AHEf{AOMb}}{AHEf{AOMb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKn}}{AHEf{BBKn}}}D@n}\",[]]Bf[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}D@n}\",[]]Bf[\"{{{AHEf{ANKj}}{AHEf{ANKj}}}D@n}\",[]]Bf[\"{{{AHEf{AGJb}}{AHEf{AGJb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKh}}{AHEf{BBKh}}}D@n}\",[]]Bf[\"{{{AHEf{BDDj}}{AHEf{BDDj}}}D@n}\",[]]Bf[\"{{{AHEf{AOMn}}{AHEf{AOMn}}}D@n}\",[]]Bf[\"{{{AHEf{AONd}}{AHEf{AONd}}}D@n}\",[]]Bf[\"{{{AHEf{AONn}}{AHEf{AONn}}}D@n}\",[]]Bf[\"{{{AHEf{BEIf}}{AHEf{BEIf}}}D@n}\",[]]Bd[\"{{{AHEf{COl}}{AHEf{COl}}}D@n}\",[]]Bb[\"{{{AHEf{Ol}}{AHEf{Ol}}}D@n}\",[]]Bf[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}D@n}\",[]]Bf[\"{{{AHEf{BGIf}}{AHEf{BGIf}}}D@n}\",[]]Bd[\"{{{AHEf{IBb}}{AHEf{IBb}}}D@n}\",[]]Bd[\"{{{AHEf{KDh}}{AHEf{KDh}}}D@n}\",[]]Bf[\"{{{AHEf{BFFn}}{AHEf{BFFn}}}D@n}\",[]]Bd[\"{{{AHEf{I@b}}{AHEf{I@b}}}D@n}\",[]]Bf[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}D@n}\",[]]Bd[\"{{{AHEf{KBf}}{AHEf{KBf}}}D@n}\",[]]Bf[\"{{{AHEf{AIDb}}{AHEf{AIDb}}}D@n}\",[]]Bf[\"{{{AHEf{AGL`}}{AHEf{AGL`}}}D@n}\",[]]Bf[\"{{{AHEf{BEAn}}{AHEf{BEAn}}}D@n}\",[]]Bf[\"{{{AHEf{BEHn}}{AHEf{BEHn}}}D@n}\",[]]Bf[\"{{{AHEf{AI@n}}{AHEf{AI@n}}}D@n}\",[]]Bf[\"{{{AHEf{AANn}}{AHEf{AANn}}}D@n}\",[]]Bf[\"{{{AHEf{AIBd}}{AHEf{AIBd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLd}}{AHEf{AGLd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}D@n}\",[]]Bf[\"{{{AHEf{BABj}}{AHEf{BABj}}}D@n}\",[]]Bd[\"{{{AHEf{NIh}}{AHEf{NIh}}}D@n}\",[]]Bf[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}D@n}\",[]]Bf[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}D@n}\",[]]Bf[\"{{{AHEf{ANOb}}{AHEf{ANOb}}}D@n}\",[]]Bf[\"{{{AHEf{BB@h}}{AHEf{BB@h}}}D@n}\",[]]Bf[\"{{{AHEf{AOMj}}{AHEf{AOMj}}}D@n}\",[]]Bf[\"{{{AHEf{BBL`}}{AHEf{BBL`}}}D@n}\",[]]Bf[\"{{{AHEf{AGKl}}{AHEf{AGKl}}}D@n}\",[]]Bf[\"{{{AHEf{BALd}}{AHEf{BALd}}}D@n}\",[]]Bf[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}D@n}\",[]]Bf[\"{{{AHEf{ANKl}}{AHEf{ANKl}}}D@n}\",[]]Bf[\"{{{AHEf{AGJd}}{AHEf{AGJd}}}D@n}\",[]]Bf[\"{{{AHEf{BANb}}{AHEf{BANb}}}D@n}\",[]]Bf[\"{{{AHEf{AIC`}}{AHEf{AIC`}}}D@n}\",[]]Bf[\"{{{AHEf{AIEn}}{AHEf{AIEn}}}D@n}\",[]]Bf[\"{{{AHEf{AONh}}{AHEf{AONh}}}D@n}\",[]]Bf[\"{{{AHEf{BBKl}}{AHEf{BBKl}}}D@n}\",[]]Bf[\"{{{AHEf{BDDn}}{AHEf{BDDn}}}D@n}\",[]]Bf[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}D@n}\",[]]Bf[\"{{{AHEf{AON`}}{AHEf{AON`}}}D@n}\",[]]Bf[\"{{{AHEf{AAKf}}{AHEf{AAKf}}}D@n}\",[]]Bf[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}D@n}\",[]]Bf[\"{{{AHEf{AONf}}{AHEf{AONf}}}D@n}\",[]]Bf[\"{{{AHEf{AOO`}}{AHEf{AOO`}}}D@n}\",[]]Bf[\"{{{AHEf{BBA`}}{AHEf{BBA`}}}D@n}\",[]]Bf[\"{{{AHEf{BEIh}}{AHEf{BEIh}}}D@n}\",[]]Bd[\"{{{AHEf{COn}}{AHEf{COn}}}D@n}\",[]]Bb[\"{{{AHEf{On}}{AHEf{On}}}D@n}\",[]]Bf[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}D@n}\",[]]Bf[\"{{{AHEf{AGJ`}}{AHEf{AGJ`}}}D@n}\",[]]Bf[\"{{{AHEf{BACf}}{AHEf{BACf}}}D@n}\",[]]Bf[\"{{{AHEf{BEOd}}{AHEf{BEOd}}}D@n}\",[]]Bd[\"{{{AHEf{IBf}}{AHEf{IBf}}}D@n}\",[]]Bf[\"{{{AHEf{BGIh}}{AHEf{BGIh}}}D@n}\",[]]Bd[\"{{{AHEf{IBd}}{AHEf{IBd}}}D@n}\",[]]Bf[\"{{{AHEf{AOOb}}{AHEf{AOOb}}}D@n}\",[]]Ai[\"{{{AHEf{CNn}}}KBd}\",[]]Aj[\"{{{AHEf{BBAd}}}KBd}\",[]]Ak[\"{{{AHEf{AIDj}}}AAMb}\",[]]Ak[\"{{{AHEf{BEOf}}}AAMb}\",[]]Ak[\"{{{AHEf{AIEf}}}AAMb}\",[]]o[\"{KAhKBf}\",[]]A`[\"{AGGdKBf}\",[]]A`[\"{AGIhKBf}\",[]]A`[\"{B@AjKBf}\",[]]A`[\"{B@@lKBf}\",[]]Aa[\"{AALjAAMd}\",[]]Aa[\"{AAObAAMd}\",[]]Aa[\"{AAJjAAMd}\",[]]A`[\"{NGnAAMd}\",[]]A`[\"{ANNdNGf}\",[]]A`[\"{CNfAAKf}\",[]]Ac[\"{{AANlAANl}}\",[]]Ac[\"{{AIBbAIBb}}\",[]]Ac[\"{{BBLfAGLb}}\",[]]Bc[\"{{AANnAANn}c{}}\",[\"Add::Output\"]]Bc[\"{{AIBdAIBd}c{}}\",[\"Add::Output\"]]Bc[\"{{BBLhAGLd}c{}}\",[\"Add::Output\"]]Be[\"{{{AHEf{KDf}}{AHEf{KDf}}}AALh}\",[]]Be[\"{{{AHEf{KBd}}{AHEf{KBd}}}AALh}\",[]]Bg[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}AALh}\",[]]Bg[\"{{{AHEf{AONd}}{AHEf{AONd}}}AALh}\",[]]Be[\"{{{AHEf{COl}}{AHEf{COl}}}AALh}\",[]]Bc[\"{{{AHEf{Ol}}{AHEf{Ol}}}AALh}\",[]]Bg[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}AALh}\",[]]Be[\"{{{AHEf{KDh}}{AHEf{KDh}}}AALh}\",[]]Bg[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}AALh}\",[]]Be[\"{{{AHEf{KBf}}{AHEf{KBf}}}AALh}\",[]]Bg[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}AALh}\",[]]Bg[\"{{{AHEf{BABj}}{AHEf{BABj}}}AALh}\",[]]Bg[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}AALh}\",[]]Bg[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}AALh}\",[]]Bg[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}AALh}\",[]]Bg[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}AALh}\",[]]Bg[\"{{{AHEf{AONf}}{AHEf{AONf}}}AALh}\",[]]Be[\"{{{AHEf{COn}}{AHEf{COn}}}AALh}\",[]]Bc[\"{{{AHEf{On}}{AHEf{On}}}AALh}\",[]]Bg[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}AALh}\",[]]o[\"{AAMbOl}\",[]]o[\"{AAMdOn}\",[]]n[\"{KAjOn}\",[]]o[\"{AGHbOn}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AALnKB`}\",[]]A`[\"{AANjKB`}\",[]]Bh[\"{{{AHEf{A@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGBb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFFf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFGb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEB`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAJf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Of}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KAd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AICn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BENh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIE`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAN`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{CNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEOf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@f}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGLh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BB@d}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NHb}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{KDf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Cd[\"{{{AHEf{I@`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{KBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AIBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGLb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBLf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBMj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBNl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEE`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEFn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAMf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{B@Bh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BFMn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOLf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANKj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AGJb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BDDj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AOMn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AIBh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BDHl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{COl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{Ol}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AAMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{O`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGHh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{I@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NF`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAAj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BE@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BGIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{IBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{AIAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KDh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BFFn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{I@b}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEBb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{KBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@B`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGL`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEHn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AI@n}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIBd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBLh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BABj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANLl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@h}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOMj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBL`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BALd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGAh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEEb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEG`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANM`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAMh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Bl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFN`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOLj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGJd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BANb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIC`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIEn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AONh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAIj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AON`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAKf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Od}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AONf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AOO`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBA`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEIh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIBj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGMl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BDHn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{COn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bg[\"{{{AHEf{On}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAMd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGJ`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BACf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEOd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEJd}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{IBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{BFFd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bg[\"{{{AHEf{Ob}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGHj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{I@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{NFb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAAl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BE@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AALn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AANj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bd[\"{{{AHEf{BFFf}}}{{KB`{AIEl}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AANlCLf}\",[]]A`[\"{AANnCLf}\",[]]Aj[\"{{{AHEf{BAB`}}}JNf}\",[]]A`[\"{BGB`CLf}\",[]]o[\"{CNfCLf}\",[]]A`[\"{AALnJNf}\",[]]Ce[\"{{{AHEf{CEdBFMn}}{Nn{AAMn}}}{{AHEf{CEdBFMn}}}}\",[]]Ce[\"{{{AHEf{CEdBFN`}}{Nn{AAN`}}}{{AHEf{CEdBFN`}}}}\",[]]8Af[\"{{AAJbCLf}BB@j}\",[]]Ag[\"{{}{{Nn{BGBb}}}}\",[]]Ae[\"{{JNfCLd}B@Nd}\",[]]Cd[\"{{BAMf{KB`{B@Bh}}AGMb{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Ah[\"{{{Of{IEb}}}AIDd}\",[]]A`[\"{NG`BBMj}\",[]]Ah[\"{{{Nn{NDn}}}BAMf}\",[]]Bc[\"{{{Nn{B@Bj}}{Nn{BE@l}}}B@Bh}\",[]]Ai[\"{{{Nn{AOLh}}}AOLf}\",[]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONd}\",[]]Ae[\"{{CLdJNf}BDHl}\",[]]Ag[\"{{COlOlCLf}AAMb}\",[]]Aj[\"{{{Nn{AGHh}}CLb}O`}\",[]]An[\"{{{Nn{ANLd}}NEdCLb}I@h}\",[]]An[\"{{{Nn{BAAj}}NEdCLb}NF`}\",[]]Ae[\"{{JNfCLd}B@Nf}\",[]]Ah[\"{{{Of{IEb}}}AIDf}\",[]]Bm[\"{{{Nn{BAMh}}{KB`{{Nn{B@Bl}}}}D@n}AAJh}\",[]]A`[\"{JNfBH@n}\",[]]o[\"{{}BGMb}\",[]]A`[\"{NG`BBMl}\",[]]Ah[\"{{{Nn{NE`}}}BAMh}\",[]]Bc[\"{{{Nn{B@Bn}}{Nn{BE@n}}}B@Bl}\",[]]Ai[\"{{{Nn{AOLl}}}AOLj}\",[]]Ek[\"{{AAI`{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{{JNd{BAB`{KB`{AAI`}}}}BEAj}}}{BEElIDh}}\",[\"\"]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONf}\",[]]Af[\"{{BEIhKDb}BBA`}\",[]]A`[\"{JNfBGMl}\",[]]Ae[\"{{CLdJNf}BDHn}\",[]]Ag[\"{{COnOnCLf}AAMd}\",[]]Am[\"{{AIEl{KB`{KAb}}}AGJ`}\",[]]Aj[\"{{{Nn{AGHj}}CLb}Ob}\",[]]An[\"{{{Nn{ANLf}}NEdCLb}I@j}\",[]]An[\"{{{Nn{BAAl}}NEdCLb}NFb}\",[]]Aj[\"{AIG`{{KBl{BBAb}}}}\",[]]Aa[\"{BDHfBGGj}\",[]]Aa[\"{BDHjBGGl}\",[]]o[\"{COlCOl}\",[]]o[\"{COnCOn}\",[]]Ak[\"{{{AHEf{AIFd}}}AIFb}\",[]]Ai[\"{{{AHEf{NGh}}}NEd}\",[]]0Aj[\"{{{AHEf{B@Cf}}}NEd}\",[]]Ak[\"{{{AHEf{BACb}}}AIFb}\",[]]Ak[\"{{{AHEf{AIFf}}}AIFb}\",[]]Ak[\"{{{AHEf{BACd}}}AIFb}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLbAAJb}\",[]]Bg[\"{{{AHEf{AIAh}}KBf}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLdAAJb}\",[]]Ah[\"{A@n{{KBn{HOj}}}}\",[]]Ah[\"{AA`{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{B@@lAIEl}\",[]]Aa[\"{AALnAIEl}\",[]]Aa[\"{BBA`BEIh}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{AAIjHOn}\",[]]Am[\"{{{AHEf{CEdAALd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAAJn}}}HOj}\",[]]Al[\"{{{AHEf{CEdCNn}}}HOj}\",[]]Am[\"{{{AHEf{CEdBBAd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIDj}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIEf}}}HOj}\",[]]Al[\"{{{AHEf{CEdJOn}}}HOj}\",[]]A`[\"{cc{}}\",[\"T\"]]0000000000000000000000Aa[\"{BBKnBEB`}\",[]]111111111111111Aa[\"{AGLhBB@f}\",[]]2Aa[\"{AIDnAGLh}\",[]]Aa[\"{BBKnAGLh}\",[]]Aa[\"{BBKnAIDn}\",[]]55Aa[\"{AGLhBB@d}\",[]]6666Aa[\"{AOMbAIGb}\",[]]Aa[\"{B@CdAIGb}\",[]]Aa[\"{BBKnAIGb}\",[]]9Aa[\"{BBKnB@Cd}\",[]]::::::A`[\"{AAMbKDf}\",[]]n[\"{NdKDf}\",[]]o[\"{CLbKDf}\",[]]A`[\"{BEIfKDf}\",[]]o[\"{CLdKDf}\",[]]???Al[\"{cKBd{{CN`{CLd}}}}\",[\"T\"]]A`[\"{cc{}}\",[\"T\"]]000000A`[\"{I@fBBKn}\",[]]1A`[\"{IAlBBKn}\",[]]Aa[\"{ANKhBBKn}\",[]]33333A`[\"{KDfANLn}\",[]]4444Aa[\"{BBO`ANKj}\",[]]5Aa[\"{BFFlANKj}\",[]]66A`[\"{IAlBBKh}\",[]]7Aa[\"{BEInAOMn}\",[]]8888A`[\"{KDfBEIf}\",[]]99999A`[\"{KDfAAMb}\",[]]:::::::::::Aa[\"{ANOhANL`}\",[]];;;;A`[\"{BBNdIBb}\",[]]A`[\"{BBLjIBb}\",[]]A`[\"{BDFfIBb}\",[]]A`[\"{BAOfIBb}\",[]]A`[\"{BANdIBb}\",[]]A`[\"{AICfIBb}\",[]]A`[\"{cc{}}\",[\"T\"]]A`[\"{BDE`IBb}\",[]]A`[\"{BGIdIBb}\",[]]A`[\"{BDGnIBb}\",[]]A`[\"{BGJfIBb}\",[]]A`[\"{BGDfIBb}\",[]]555555555555555555555555o[\"{CLbKDh}\",[]]o[\"{CLdKDh}\",[]]n[\"{NdKDh}\",[]]A`[\"{AAMdKDh}\",[]]A`[\"{BEIhKDh}\",[]]::::Al[\"{cKBf{{CN`{CLd}}}}\",[\"T\"]];;;;;;;;;;;;;;;;;;;Aa[\"{BBA`BBL`}\",[]]<<<>>>>Aa[\"{BBO`ANKl}\",[]]Aa[\"{BFFnANKl}\",[]]A`[\"{cc{}}\",[\"T\"]]00000Aa[\"{BBA`BBKl}\",[]]11111Aa[\"{BEJdAON`}\",[]]22222222Aa[\"{BACfBEAj}\",[]]3333A`[\"{IBfBBA`}\",[]]4A`[\"{KDhBEIh}\",[]]5555555A`[\"{KDhAAMd}\",[]]6666A`[\"{BACfIBf}\",[]]7777Aa[\"{ANOhANLb}\",[]]8888A`[\"{BDE`IBd}\",[]]A`[\"{BGIdIBd}\",[]]A`[\"{AICfIBd}\",[]]A`[\"{BANdIBd}\",[]]A`[\"{BDFfIBd}\",[]]A`[\"{BBLjIBd}\",[]]A`[\"{BGJfIBd}\",[]]A`[\"{BAOfIBd}\",[]]A`[\"{BDGnIBd}\",[]]A`[\"{BBNdIBd}\",[]]A`[\"{cc{}}\",[\"T\"]]A`[\"{BGDfIBd}\",[]]111111111111An[\"{{{AHEf{c}}}AIG`CLl}\",[\"S\"]]22222222222222Bm[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{ANLn}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AONd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COl}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{Ol}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEBb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{AGLj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BABj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AIGd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{ANM`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BDEf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEAj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AONf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COn}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{On}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AGJ`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Aa[\"{{}c{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n[\"{{}HOj}\",[]]0000Cc[\"{{{AHEf{CEdJOn}}JNf}{{KBj{{KB`{I@b}}AGLj}}}}\",[]]Cf[\"{{{AHEf{CEdBA@h}}}{{KB`{c}}}{}}\",[\"Iterator::Item\"]]Dl[\"{{{AHEf{BE@l}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANL`}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Dl[\"{{{AHEf{BE@n}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANLb}}}}\",[]]Bf[\"{{{AHEf{AIAf}}KBd}{{KB`{CNn}}}}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjAI@h}}}}\",[]]A`[\"{AIBbCLf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}HOj}\",[]]A`[\"{AIBdCLf}\",[]]Ck[\"{{{AAd{{AHEf{CEdAI@`}}}}{AHEf{CEdNDb}}}{{COf{HOj}}}}\",[]]Dk[\"{{{AAd{{AHEf{CEdBBOf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALd}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAIAb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNFf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdKAf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAGGh}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAAHn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@Ah}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@Bb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdJNn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdBAN`}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNHb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{IBl}}}}\",[]]De[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}D@n}{{KBj{JOnBABj}}}}\",[]]Bo[\"{{COn{AHEf{CEdc}}}{{KBj{BEOdIBf}}}Oh}\",[\"R\"]]Bf[\"{{{AHEf{CEdAGId}}}{{KB`{HOn}}}}\",[]]Ec[\"{{{AHEf{BBAb}}AIG`{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{KBl{JNf}}}}\",[]]Cn[\"{{{AHEf{BE@l}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANL`}}}}\",[]]Cn[\"{{{AHEf{BE@n}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANLb}}}}\",[]]C`[\"{{{AHEf{CEdAGId}}HOnD@n}{{KBj{HOjBEBb}}}}\",[]]Cc[\"{{{AHEf{BBAb}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bn[\"{{{AHEf{CEdBFMn}}CLd}{{AHEf{CEdBFMn}}}}\",[]]Bn[\"{{{AHEf{CEdBFN`}}CLd}{{AHEf{CEdBFN`}}}}\",[]]Aj[\"{{{AHEf{AIAf}}}COl}\",[]]Aj[\"{{{AHEf{AIAh}}}COn}\",[]]Cn[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cn[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]A`[\"{BB@jCLf}\",[]]A`[\"{AANfJNf}\",[]]A`[\"{AANhJNf}\",[]]o[\"{IDdD@n}\",[]]Bm[\"{{{AHEf{CEdAIDj}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdBEOf}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}KDh}{{KBj{HOjAOMj}}}}\",[]]Bn[\"{{{AHEf{AIFl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BAOb}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{AIFn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BAOd}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bd[\"{{{AHEf{BDEl}}}{{KB`{BA@h}}}}\",[]]Bg[\"{{{Nn{BE@d}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{AGHh}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{ANLd}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BAAj}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BE@f}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{AGHj}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{ANLf}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{BAAl}}NEdCLb}{{Of{AIAl}}}}\",[]]Ai[\"{BENf{{Nn{BE@f}}}}\",[]]o[\"{I@`HOn}\",[]]A`[\"{AANlCLf}\",[]]o[\"{NIfJNf}\",[]]o[\"{I@bHOn}\",[]]A`[\"{AANnCLf}\",[]]o[\"{NIhJNf}\",[]]Aa[\"{ANK`BBL`}\",[]]Ai[\"{{{AHEf{A@l}}}A@l}\",[]]Ak[\"{{{AHEf{ANNd}}}ANNd}\",[]]Ak[\"{{{AHEf{ANKd}}}ANKd}\",[]]Ak[\"{{{AHEf{AIAf}}}AIAf}\",[]]Ak[\"{{{AHEf{BFGb}}}BFGb}\",[]]Ak[\"{{{AHEf{BEB`}}}BEB`}\",[]]Ak[\"{{{AHEf{AAJf}}}AAJf}\",[]]Ak[\"{{{AHEf{B@Of}}}B@Of}\",[]]Ai[\"{{{AHEf{KAd}}}KAd}\",[]]Ai[\"{{{AHEf{CNn}}}CNn}\",[]]Ak[\"{{{AHEf{BBAd}}}BBAd}\",[]]Ak[\"{{{AHEf{BB@f}}}BB@f}\",[]]Ak[\"{{{AHEf{AGLh}}}AGLh}\",[]]Ak[\"{{{AHEf{AIDn}}}AIDn}\",[]]Ak[\"{{{AHEf{BB@d}}}BB@d}\",[]]Ak[\"{{{AHEf{AIGb}}}AIGb}\",[]]Ak[\"{{{AHEf{B@Cd}}}B@Cd}\",[]]Ai[\"{{{AHEf{KDf}}}KDf}\",[]]Ak[\"{{{AHEf{BFFl}}}BFFl}\",[]]Ai[\"{{{AHEf{KBd}}}KBd}\",[]]Ak[\"{{{AHEf{AANl}}}AANl}\",[]]Ak[\"{{{AHEf{AIBb}}}AIBb}\",[]]Ak[\"{{{AHEf{AGLb}}}AGLb}\",[]]Ak[\"{{{AHEf{BBLf}}}BBLf}\",[]]Ai[\"{{{AHEf{NIf}}}NIf}\",[]]Ak[\"{{{AHEf{AOMb}}}AOMb}\",[]]Ak[\"{{{AHEf{BBKn}}}BBKn}\",[]]Ak[\"{{{AHEf{BBNl}}}BBNl}\",[]]Ak[\"{{{AHEf{BEE`}}}BEE`}\",[]]Ak[\"{{{AHEf{BEFn}}}BEFn}\",[]]Ak[\"{{{AHEf{ANLn}}}ANLn}\",[]]Ak[\"{{{AHEf{BAMf}}}BAMf}\",[]]Ak[\"{{{AHEf{B@Bh}}}B@Bh}\",[]]Ak[\"{{{AHEf{BFMn}}}BFMn}\",[]]Ak[\"{{{AHEf{AOLf}}}AOLf}\",[]]Ak[\"{{{AHEf{ANKj}}}ANKj}\",[]]Ak[\"{{{AHEf{AGJb}}}AGJb}\",[]]Ak[\"{{{AHEf{BBKh}}}BBKh}\",[]]Ak[\"{{{AHEf{BDDj}}}BDDj}\",[]]Ak[\"{{{AHEf{AOMn}}}AOMn}\",[]]Ak[\"{{{AHEf{AONd}}}AONd}\",[]]Ak[\"{{{AHEf{AONn}}}AONn}\",[]]Ak[\"{{{AHEf{BEIf}}}BEIf}\",[]]Ak[\"{{{AHEf{AIBh}}}AIBh}\",[]]Ai[\"{{{AHEf{COl}}}COl}\",[]]Ag[\"{{{AHEf{Ol}}}Ol}\",[]]Ak[\"{{{AHEf{AAMb}}}AAMb}\",[]]Ag[\"{{{AHEf{O`}}}O`}\",[]]Ak[\"{{{AHEf{AGHh}}}AGHh}\",[]]Ai[\"{{{AHEf{I@h}}}I@h}\",[]]Ak[\"{{{AHEf{ANLd}}}ANLd}\",[]]Ai[\"{{{AHEf{NF`}}}NF`}\",[]]Ak[\"{{{AHEf{BAAj}}}BAAj}\",[]]Ai[\"{{{AHEf{IBb}}}IBb}\",[]]Ak[\"{{{AHEf{BDHd}}}BDHd}\",[]]Ak[\"{{{AHEf{BFFb}}}BFFb}\",[]]Ak[\"{{{AHEf{BDHh}}}BDHh}\",[]]Ai[\"{{{AHEf{KDh}}}KDh}\",[]]Ak[\"{{{AHEf{BFFn}}}BFFn}\",[]]Ak[\"{{{AHEf{BEBb}}}BEBb}\",[]]Ai[\"{{{AHEf{KBf}}}KBf}\",[]]Ak[\"{{{AHEf{B@B`}}}B@B`}\",[]]Ak[\"{{{AHEf{AIDb}}}AIDb}\",[]]Ak[\"{{{AHEf{AGL`}}}AGL`}\",[]]Ak[\"{{{AHEf{BEAn}}}BEAn}\",[]]Ak[\"{{{AHEf{BEHn}}}BEHn}\",[]]Ak[\"{{{AHEf{AI@n}}}AI@n}\",[]]Ak[\"{{{AHEf{AANn}}}AANn}\",[]]Ak[\"{{{AHEf{AIBd}}}AIBd}\",[]]Ak[\"{{{AHEf{AGLd}}}AGLd}\",[]]Ak[\"{{{AHEf{BBLh}}}BBLh}\",[]]Ak[\"{{{AHEf{AGLj}}}AGLj}\",[]]Ak[\"{{{AHEf{BABj}}}BABj}\",[]]Ai[\"{{{AHEf{NIh}}}NIh}\",[]]Ak[\"{{{AHEf{AIGd}}}AIGd}\",[]]Ak[\"{{{AHEf{ANLl}}}ANLl}\",[]]Ak[\"{{{AHEf{BB@h}}}BB@h}\",[]]Ak[\"{{{AHEf{AOMj}}}AOMj}\",[]]Ak[\"{{{AHEf{BBL`}}}BBL`}\",[]]Ak[\"{{{AHEf{AGKl}}}AGKl}\",[]]Ak[\"{{{AHEf{BALd}}}BALd}\",[]]Ak[\"{{{AHEf{BGAh}}}BGAh}\",[]]Ak[\"{{{AHEf{BBNn}}}BBNn}\",[]]Ak[\"{{{AHEf{BEEb}}}BEEb}\",[]]Ak[\"{{{AHEf{BEG`}}}BEG`}\",[]]Ak[\"{{{AHEf{ANM`}}}ANM`}\",[]]Ak[\"{{{AHEf{BAMh}}}BAMh}\",[]]Ak[\"{{{AHEf{B@Bl}}}B@Bl}\",[]]Ak[\"{{{AHEf{BFN`}}}BFN`}\",[]]Ak[\"{{{AHEf{AOLj}}}AOLj}\",[]]Ak[\"{{{AHEf{ANKl}}}ANKl}\",[]]Ak[\"{{{AHEf{AGJd}}}AGJd}\",[]]Ak[\"{{{AHEf{AIC`}}}AIC`}\",[]]Ak[\"{{{AHEf{AIEn}}}AIEn}\",[]]Ak[\"{{{AHEf{AONh}}}AONh}\",[]]Ak[\"{{{AHEf{BBKl}}}BBKl}\",[]]Ak[\"{{{AHEf{BDDn}}}BDDn}\",[]]Ak[\"{{{AHEf{AAIj}}}AAIj}\",[]]Ak[\"{{{AHEf{BDEf}}}BDEf}\",[]]Ak[\"{{{AHEf{AON`}}}AON`}\",[]]Ak[\"{{{AHEf{BBMh}}}BBMh}\",[]]Ak[\"{{{AHEf{BGB`}}}BGB`}\",[]]Ak[\"{{{AHEf{AAKf}}}AAKf}\",[]]Ak[\"{{{AHEf{BEAj}}}BEAj}\",[]]Ak[\"{{{AHEf{AONf}}}AONf}\",[]]Ak[\"{{{AHEf{AOO`}}}AOO`}\",[]]Ak[\"{{{AHEf{BBA`}}}BBA`}\",[]]Ak[\"{{{AHEf{BEIh}}}BEIh}\",[]]Ak[\"{{{AHEf{AIBj}}}AIBj}\",[]]Ak[\"{{{AHEf{BGMl}}}BGMl}\",[]]Ai[\"{{{AHEf{COn}}}COn}\",[]]Ag[\"{{{AHEf{On}}}On}\",[]]Ak[\"{{{AHEf{AAMd}}}AAMd}\",[]]Ak[\"{{{AHEf{AGJ`}}}AGJ`}\",[]]Ak[\"{{{AHEf{BACf}}}BACf}\",[]]Ak[\"{{{AHEf{BEOd}}}BEOd}\",[]]Ai[\"{{{AHEf{IBf}}}IBf}\",[]]Ai[\"{{{AHEf{IBd}}}IBd}\",[]]Ak[\"{{{AHEf{BDHf}}}BDHf}\",[]]Ak[\"{{{AHEf{BFFd}}}BFFd}\",[]]Ak[\"{{{AHEf{BDHj}}}BDHj}\",[]]Ag[\"{{{AHEf{Ob}}}Ob}\",[]]Ak[\"{{{AHEf{AGHj}}}AGHj}\",[]]Ai[\"{{{AHEf{I@j}}}I@j}\",[]]Ak[\"{{{AHEf{ANLf}}}ANLf}\",[]]Ai[\"{{{AHEf{NFb}}}NFb}\",[]]Ak[\"{{{AHEf{BAAl}}}BAAl}\",[]]Ai[\"{{{AHEf{IBn}}}IBn}\",[]]Ak[\"{{{AHEf{AALn}}}AALn}\",[]]Ak[\"{{{AHEf{AANj}}}AANj}\",[]]Ak[\"{{{AHEf{AOOb}}}AOOb}\",[]]Ak[\"{{{AHEf{BENf}}}BENf}\",[]]Ak[\"{{{AHEf{BBM`}}}BBM`}\",[]]Ak[\"{{{AHEf{BGGj}}}BGGj}\",[]]Ak[\"{{{AHEf{BGGl}}}BGGl}\",[]]Bn[\"{{{AHEf{AIAf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bn[\"{{{AHEf{AAJf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjBALb}}}}\",[]]Bf[\"{{{AHEf{CEdAIAh}}NEdKDhHOn}HOj}\",[]]Bj[\"{{{AHEf{AONd}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Bj[\"{{{AHEf{AONf}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Aa[\"{BBA`AIC`}\",[]]A`[\"{AAMbCLf}\",[]]A`[\"{AAMdCLf}\",[]]A`[\"{AONnD@n}\",[]]A`[\"{AOO`D@n}\",[]]l[\"{NEf}\",[]]l[\"{NEh}\",[]]Ce[\"{{{AHEf{BEEl}}{AHEf{CEdOh}}}{{KBj{AONfBEAj}}}}\",[]]Ce[\"{{{AHEf{BH@n}}{AHEf{CEdOh}}}{{KBj{AONfBEAj}}}}\",[]]Bc[\"{{{AHEf{AIAh}}}{{AAj{KBf}}}}\",[]]Bd[\"{{{AHEf{IDj}}{AHEf{CL`}}}HOj}\",[]]Am[\"{{{AHEf{ANKf}}JNf}HOj}\",[]]Ai[\"{{{AHEf{IDl}}}HOj}\",[]]Bg[\"{{{AAd{{AHEf{CEdAI@`}}}}NEd}HOj}\",[]]Bm[\"{{{AHEf{CEdAIEf}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}KDh}{{KBj{HOjAOMj}}}}\",[]]Am[\"{AAJn{{KBj{HOjAIE`}}}}\",[]]Dc[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}{{KBj{AANhAIEb}}}}\",[]]Bi[\"{{{AHEf{NGh}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{B@Cf}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{ANNj}}{AAd{{Of{K@n}}}}}HOj}\",[]]o[\"{A@lD@n}\",[]]Ak[\"{{{AHEf{AIAf}}}BBLf}\",[]]Ak[\"{{{AHEf{AAJf}}}B@Of}\",[]]Aj[\"{{{AHEf{CNn}}}AGLb}\",[]]An[\"{{{AHEf{CEdAIAh}}}BBLh}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGb}}}}\",[]]Ck[\"{{{AHEf{CEdAIEh}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGd}}}}\",[]]Bl[\"{{{AHEf{BEOd}}{AHEf{CEdc}}}HOjJOl}\",[\"W\"]]Aj[\"{{{AHEf{AAJf}}}JNn}\",[]]An[\"{AAJn{{KBj{AIAbBBKn}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Fh[\"{{{AHEf{CEdAAJh}}AAK`NEd{AHEf{CEd{AAj{Nd}}}}{KB`{{Nn{B@Bl}}}}}{{KBj{{JNd{BDEfAIAh}}{Of{ANK`}}}}}}\",[]]Am[\"{AHEf{{AHEf{c}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000o[\"{NIfJNf}\",[]]o[\"{NIhJNf}\",[]]A`[\"{A@lANKd}\",[]]Bc[\"{{AIElBAL`A@l}{{KBn{ANKf}}}}\",[]]Aj[\"{AIEl{{KBl{AAJf}}}}\",[]]B`[\"{{}{{KBj{HOj{Of{IAd}}}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BBKn}\",[]]Be[\"{{{AHEf{AAJh}}}{{AHEf{BAMh}}}}\",[]]o[\"{NdBEIf}\",[]]A`[\"{AIBbCLf}\",[]]o[\"{B@BhNn}\",[]]o[\"{NdBEIh}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{B@BlNn}\",[]]A`[\"{BBA`KB`}\",[]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KDfBACf}}}Oh}\",[\"B\"]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KBdBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AGJbBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{BEIfBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AAMbBACf}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KDh}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KBf}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGJd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AIC`}}}Oh}\",[\"B\"]]Ek[\"{{{AHEf{CEd{K@l{AAI`}}}}{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{BBMhBEAj}}}{BEElIDh}}\",[\"\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{BEIh}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AAMd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGIf}}}Oh}\",[\"B\"]]A`[\"{AALnKB`}\",[]]Bk[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEIf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AIC`}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAIj}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEIh}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGIl}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bj[\"{{{AHEf{CEdAIEf}}}{{KBj{HOjAOMb}}}}\",[]]Bj[\"{{{AHEf{CEdAIEh}}}{{KBj{HOjANLl}}}}\",[]]An[\"{{{AHEf{ANOf}}AAJb}HOj}\",[]]Ea[\"{{{AHEf{CEdAAJh}}NEdAGJ`{KB`{AOO`}}AAI`{AHEf{CEd{AAj{Nd}}}}}{{KB`{B@Ob}}}}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]A`[\"{AAJnHOj}\",[]]Ba[\"{{{AHEf{CEdAAJh}}AAK`}HOj}\",[]]Bh[\"{{{AHEf{AIFl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BAOb}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{AIFn}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BAOd}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHn}}{AHEf{CL`}}HOn}HOj}\",[]]A`[\"{AGHnD@n}\",[]]o[\"{I@`CLf}\",[]]o[\"{I@bCLf}\",[]]Ce[\"{{{AHEf{CEdAIAj}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cc[\"{{{AHEf{CEdO`}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@h}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNF`}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Ce[\"{{{AHEf{CEdAIAl}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cc[\"{{{AHEf{CEdOb}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@j}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNFb}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]o[\"{BDIfNd}\",[]]A`[\"{BBKhHOn}\",[]]A`[\"{BDDjHOn}\",[]]A`[\"{BBKlHOn}\",[]]A`[\"{BDDnHOn}\",[]]A`[\"{BBA`KDb}\",[]]Aa[\"{BALhBBL`}\",[]]Aa[\"{AGGdBEAn}\",[]]Bg[\"{{{AHEf{AAJf}}AGMb}{{KBl{HOj}}}}\",[]]A`[\"{AAJnHOj}\",[]]Cf[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}AANh}\",[]]l[\"{NEf}\",[]]Ak[\"{{{AHEf{AGJ`}}}AIEl}\",[]]l[\"{NEh}\",[]]An[\"{{AAJdA@l}{{KBn{HOj}}}}\",[]]B`[\"{{B@BhAIEl}{{KBl{AAJf}}}}\",[]]Bb[\"{B@Bf{{KBj{HOj{Of{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BEB`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BB@f}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AGLh}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIDn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BB@d}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIGb}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{B@Cd}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBKn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBL`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Bg[\"{{{AHEf{CNn}}}{{KBj{AID`AI@h}}}}\",[]]Aa[\"{B@AjAIDb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]A`[\"{AALnJNf}\",[]]Aa[\"{AGLbAANl}\",[]]Aa[\"{BBLfAANl}\",[]]Aa[\"{AGLdAANn}\",[]]Aa[\"{BBLhAANn}\",[]]3210Dh[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANL`}}}}\",[]]Dh[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANLb}}}}\",[]]Aj[\"{{{AHEf{AIAj}}}CLf}\",[]]Ah[\"{{{AHEf{O`}}}CLf}\",[]]Ai[\"{{{AHEf{I@h}}}CLf}\",[]]Ai[\"{{{AHEf{NF`}}}CLf}\",[]]Aj[\"{{{AHEf{AIAl}}}CLf}\",[]]Ah[\"{{{AHEf{Ob}}}CLf}\",[]]Ai[\"{{{AHEf{I@j}}}CLf}\",[]]Ai[\"{{{AHEf{NFb}}}CLf}\",[]]Aj[\"{{{AHEf{BFLl}}}JNf}\",[]]Aj[\"{{{AHEf{BFLn}}}JNf}\",[]]Aj[\"{{{AHEf{BGMb}}}JNf}\",[]]Aj[\"{{{AHEf{BGMl}}}JNf}\",[]]o[\"{A@lJNf}\",[]]n[\"{{}ND`}\",[]]0o[\"{OjAAId}\",[]]111Ba[\"{{AHEf{AHEf{c}}}AALh{}}\",[\"K\"]]0000000000000000000Cg[\"{{{AHEf{AAJf}}AIEl{AHEf{CL`}}}{{KBj{AIAbAOMn}}}}\",[]]Dl[\"{{{AHEf{CEdAAJh}}NEdAOLjAIEl{AHEf{CL`}}}{{KBj{{JNd{BDEfAIAh}}AON`}}}}\",[]]Bd[\"{{{AHEf{AAJn}}}{{KB`{BDEj}}}}\",[]]Dm[\"{{{AHEf{AGKf}}KBdCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANL`}}}}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Bd[\"{{{AHEf{AAK`}}}{{KB`{BDEl}}}}\",[]]Dm[\"{{{AHEf{AGKh}}KBfCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANLb}}}}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]o[\"{{}ANOd}\",[]]n[\"{{}IDj}\",[]]o[\"{{}ANKf}\",[]]o[\"{{}B@Nd}\",[]]o[\"{{}B@Of}\",[]]n[\"{{}KDf}\",[]]n[\"{{}KBd}\",[]]o[\"{{}AANl}\",[]]o[\"{{}AIBb}\",[]]o[\"{{}AGLb}\",[]]o[\"{{}BBLf}\",[]]n[\"{{}NIf}\",[]]o[\"{{}AOMb}\",[]]o[\"{{}BBNl}\",[]]o[\"{{}BEE`}\",[]]o[\"{{}BEFn}\",[]]o[\"{{}ANLn}\",[]]o[\"{{}BAMf}\",[]]o[\"{{}BFMn}\",[]]o[\"{{}BDHl}\",[]]o[\"{{}AGHh}\",[]]o[\"{{}ANLd}\",[]]o[\"{{}BAAj}\",[]]o[\"{{}BE@h}\",[]]o[\"{{}B@Nf}\",[]]o[\"{{}BGMb}\",[]]n[\"{{}KDh}\",[]]n[\"{{}KBf}\",[]]o[\"{{}AIDb}\",[]]o[\"{{}AI@n}\",[]]o[\"{{}AANn}\",[]]o[\"{{}AIBd}\",[]]o[\"{{}AGLd}\",[]]o[\"{{}BBLh}\",[]]n[\"{{}NIh}\",[]]o[\"{{}BB@h}\",[]]o[\"{{}AOMj}\",[]]o[\"{{}BBNn}\",[]]o[\"{{}BEEb}\",[]]o[\"{{}BEG`}\",[]]o[\"{{}ANM`}\",[]]o[\"{{}BAMh}\",[]]o[\"{{}BFN`}\",[]]o[\"{{}BGMl}\",[]]o[\"{{}BDHn}\",[]]o[\"{{}AGHj}\",[]]o[\"{{}ANLf}\",[]]o[\"{{}BAAl}\",[]]o[\"{{}BE@j}\",[]]o[\"{{}AALn}\",[]]n[\"{{}IDl}\",[]]o[\"{{}BBM`}\",[]]o[\"{{}B@Od}\",[]]Ak[\"{{{AHEf{BAB`}}}AONf}\",[]]Ak[\"{{{AHEf{BBMh}}}AONf}\",[]]Aa[\"{BGB`AONf}\",[]]Aa[\"{BEIjAONf}\",[]]A`[\"{CNfAONf}\",[]]A`[\"{ID`AONf}\",[]]A`[\"{IDdAONf}\",[]]Aa[\"{BDIfAONf}\",[]]Cg[\"{{{AHEf{AGKf}}KBdCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cg[\"{{{AHEf{AGKh}}KBfCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Aj[\"{{{AHEf{AIDj}}}D@n}\",[]]Aj[\"{{{AHEf{BEOf}}}D@n}\",[]]Ak[\"{{{AHEf{AIAj}}}BE@h}\",[]]Ai[\"{{{AHEf{O`}}}BE@h}\",[]]Aj[\"{{{AHEf{I@h}}}BE@h}\",[]]Aj[\"{{{AHEf{NF`}}}BE@h}\",[]]Ak[\"{{{AHEf{AIAl}}}BE@j}\",[]]Ai[\"{{{AHEf{Ob}}}BE@j}\",[]]Aj[\"{{{AHEf{I@j}}}BE@j}\",[]]Aj[\"{{{AHEf{NFb}}}BE@j}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLb}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLb}{{AHEf{CEdBBNn}}}}\",[]]Bf[\"{{{AHEf{CEdAIAj}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdO`}}NEdCLfCLf}HOj}\",[]]Bf[\"{{{AHEf{CEdAIAl}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdOb}}NEdCLfCLf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}KAf}\",[]]Bc[\"{{{AHEf{AALf}}}{{KB`{KBd}}}}\",[]]Aa[\"{BGB`AONf}\",[]]Aa[\"{BEIjAONf}\",[]]A`[\"{CNfAONf}\",[]]A`[\"{ID`AONf}\",[]]Aa[\"{BDIfAONf}\",[]]Aj[\"{{{AHEf{AIEf}}}NHb}\",[]]Bn[\"{{{AHEf{AIEh}}}{{KBj{{KB`{KDh}}AOMj}}}}\",[]]o[\"{A@lJNf}\",[]]o[\"{IDjJNf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}NHj}\",[]]Aj[\"{{{AHEf{AGKf}}}JNf}\",[]]Aj[\"{{{AHEf{AGKh}}}JNf}\",[]]A`[\"{AHEfKDd}\",[]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bd[\"{{{AHEf{BFGb}}}{{KB`{AIAf}}}}\",[]]Bc[\"{{{AHEf{BBAd}}}{{KB`{CNn}}}}\",[]]Bn[\"{{{AHEf{CEdAOLf}}CLd}{{AHEf{CEdAOLf}}}}\",[]]Bn[\"{{{AHEf{CEdAOLj}}CLd}{{AHEf{CEdAOLj}}}}\",[]]A`[\"{BGB`CLd}\",[]]A`[\"{BEIjCLd}\",[]]o[\"{CNfCLd}\",[]]o[\"{ID`CLd}\",[]]A`[\"{AGHnKB`}\",[]]Aa[\"{AANjAHEf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{BB@jAAJb}\",[]]A`[\"{JOnBB@h}\",[]]Aa[\"{AGLbAIBb}\",[]]Aa[\"{BBLfAIBb}\",[]]Aa[\"{AGLdAIBd}\",[]]Aa[\"{BBLhAIBd}\",[]]3210Bg[\"{{{AHEf{CEdc}}JNf}AONd{OhIDh}}\",[\"\"]]Bg[\"{{{AHEf{CEdc}}JNf}AONf{OhIDh}}\",[\"\"]]o[\"{{}BBMj}\",[]]o[\"{{}BBMl}\",[]]A`[\"{CLfBGMb}\",[]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANNdc}}}{}}\",[\"FromStr::Err\"]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANKdc}}}{}}\",[\"FromStr::Err\"]]o[\"{CLdKDf}\",[]]o[\"{CLdKDh}\",[]]Al[\"{CLf{{KBj{KDfBFFl}}}}\",[]]Al[\"{CLf{{KBj{KDhBFFn}}}}\",[]]Aa[\"{BFEdANKn}\",[]]Aa[\"{BHA`BA@b}\",[]]Aa[\"{BFEfANKn}\",[]]Aa[\"{BHAbBA@b}\",[]]Af[\"{{}{{KB`{Ab}}}}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBEFn}}AAJb}{{AHEf{CEdBEFn}}}}\",[]]Bo[\"{{{AHEf{CEdBEG`}}AAJb}{{AHEf{CEdBEG`}}}}\",[]]Ao[\"{{{Of{AIAj}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{O`}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@h}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NF`}}}{{Of{Nl}}}}\",[]]Ao[\"{{{Of{AIAl}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{Ob}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@j}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NFb}}}{{Of{Nl}}}}\",[]]Aj[\"{{{AHEf{BFGb}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBFMn}}AAJb}{{AHEf{CEdBFMn}}}}\",[]]Bo[\"{{{AHEf{CEdBFN`}}AAJb}{{AHEf{CEdBFN`}}}}\",[]]Bc[\"{{{AHEf{AIAb}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AIAf}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAJn}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAK`}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AGJ`}}}{{KB`{KAb}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bc[\"{{{AHEf{AGId}}}{{KB`{JNf}}}}\",[]]Am[\"{{{AHEf{ANOf}}JNf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}NFf}\",[]]Bg[\"{{{AHEf{AIEf}}}{{KBj{CCnAOMb}}}}\",[]]Bg[\"{{{AHEf{AIEh}}}{{KBj{CCnAOMj}}}}\",[]]A`[\"{B@OjKB`}\",[]]A`[\"{B@OlKB`}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{ANK`KB`}\",[]]Ck[\"{{{AHEf{CEdBAMf}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAMf}}}}\",[]]Ck[\"{{{AHEf{CEdBAMh}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAMh}}}}\",[]]A`[\"{BE@hKB`}\",[]]A`[\"{BE@jKB`}\",[]]Ac[\"{AHEfc{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]000000000000000000000000000000000000000000000000000Al[\"{JNf{{KBj{KDfBFFl}}}}\",[]]Al[\"{CLf{{KBj{KDfBFFl}}}}\",[]]2Al[\"{HOh{{KBj{KDfBFFl}}}}\",[]]33333333333333Aj[\"{AAJb{{KBj{ANLn}}}}\",[]]4444444Ai[\"{CLf{{KBj{AGJb}}}}\",[]]5555555555555555555555555555Aj[\"{AOLb{{KBj{BDHd}}}}\",[]]Bb[\"{{{Nn{AOLb}}}{{KBj{BDHd}}}}\",[]]7Bb[\"{{{Nn{B@Bd}}}{{KBj{BDHh}}}}\",[]]8Aj[\"{B@Bd{{KBj{BDHh}}}}\",[]]999999999999999999999Al[\"{CLf{{KBj{KDhBFFn}}}}\",[]]Al[\"{HOh{{KBj{KDhBFFn}}}}\",[]]Al[\"{JNf{{KBj{KDhBFFn}}}}\",[]]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Bm[\"{AOLb{{KBj{BDHfc}}}{}}\",[\"TryFrom::Error\"]]Ce[\"{{{Nn{AOLb}}}{{KBj{BDHfc}}}{}}\",[\"TryFrom::Error\"]]Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]00Ce[\"{{{Nn{B@Bd}}}{{KBj{BDHjc}}}{}}\",[\"TryFrom::Error\"]]Bm[\"{B@Bd{{KBj{BDHjc}}}{}}\",[\"TryFrom::Error\"]]22222222222222222222222Aj[\"{{}{{KBj{c}}}{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cd[\"{{{AAd{{AHEf{CEdc}}}}{AHEf{CEdNDb}}}COf{}}\",[\"F\"]]000000000Cc[\"{{{AHEf{BBAb}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bk[\"{{{AHEf{BFLl}}AONd}{{KBj{HOjAIBh}}}}\",[]]Bk[\"{{{AHEf{BFLn}}AONf}{{KBj{HOjAIBj}}}}\",[]]0Bk[\"{{{AHEf{BGMb}}AONf}{{KBj{HOjAIBj}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AAHn}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{KDfIB`}}}}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{COlIB`}}}}\",[]]Bh[\"{{{AHEf{CEdB@Ch}}}{{KBj{OlIB`}}}}\",[]]Bj[\"{{{AHEf{CEdB@Ch}}}{{KBj{AAMbIB`}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{KDh}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{COn}}}}\",[]]Be[\"{{{AHEf{CEdB@Ch}}}{{KC`{On}}}}\",[]]Bg[\"{{{AHEf{CEdB@Ch}}}{{KC`{AAMd}}}}\",[]]Aa[\"{ANKdBFFj}\",[]]Bc[\"{{{AHEf{AIAj}}}{{Of{AIAj}}}}\",[]]Ba[\"{{{AHEf{O`}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{I@h}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{NF`}}}{{Of{AIAj}}}}\",[]]Bc[\"{{{AHEf{AIAl}}}{{Of{AIAl}}}}\",[]]Ba[\"{{{AHEf{Ob}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{I@j}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{NFb}}}{{Of{AIAl}}}}\",[]]A`[\"{AANlCLf}\",[]]An[\"{{{AHEf{CEdAIAh}}}AGId}\",[]]A`[\"{AANnCLf}\",[]]C`[\"{{{AHEf{CEdAONd}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]C`[\"{{{AHEf{CEdAONf}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]Ah[\"{Nd{{KB`{AONn}}}}\",[]]Ah[\"{Nd{{KB`{AOO`}}}}\",[]]Ah[\"{Nd{{KB`{AOOb}}}}\",[]]A`[\"{AAMbCOl}\",[]]A`[\"{AAMdCOn}\",[]]Bi[\"{AIAb{{KBj{{JNd{AIAfBBOf}}AIAb}}}}\",[]]Aa[\"{{}c{}}\",[\"I\"]]o[\"{COlD@n}\",[]]o[\"{COnD@n}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]21Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}D@n}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}D@n}{{AHEf{CEdB@Bl}}}}\",[]]Bl[\"{{{AHEf{NGh}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{B@Cf}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{ANNj}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Ak[\"{{{AHEf{AIAf}}}AALd}\",[]]Bc[\"{{{AHEf{AIAf}}AIElAID`}AALf}\",[]]Ce[\"{{{AHEf{CEdAIAh}}AGJ`AIDbNEd}{{KBj{KBfAGKl}}}}\",[]]43Bm[\"{{{AHEf{CEdAIAh}}KBf}{{KBj{HOjAI@n}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdBFFf}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBDDf}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdAICn}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBENh}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]Ef[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Ec[\"{{{AHEf{CEdAIDj}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBj{JNfAGLh}}}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEdNGb}}}{{COf{{KBl{HOj}}}}}}\",[]]Fg[\"{{{AHEf{CEdBAKn}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Dn[\"{{{AAd{{AHEf{CEdAGM`}}}}{AHEf{AANj}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]>=Cd[\"{{{AHEf{CEdBAMf}}{Nn{NDn}}}{{AHEf{CEdBAMf}}}}\",[]]Cd[\"{{{AHEf{CEdBAMh}}{Nn{NE`}}}{{AHEf{CEdBAMh}}}}\",[]]Cj[\"{{{AHEf{B@Bj}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHh}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{B@Bn}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHj}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BGGl}}CLdAONb{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Bb[\"{JNf{{JNd{JNf{KB`{JNf}}}}}}\",[]]000Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]A`[\"{AHEfKDb}\",[]]00000000000000000000000000000000000000000000000000000000000000Ce[\"{{{AHEf{CEdB@Bh}}{Nn{BE@l}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{BE@n}}}{{AHEf{CEdB@Bl}}}}\",[]]A`[\"{BGB`ICf}\",[]]o[\"{B@BhNn}\",[]]o[\"{B@BlNn}\",[]]Aj[\"{{{AHEf{AAJf}}}HOj}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}JNf}\",[]]Ak[\"{{{AHEf{AIAf}}}AGGh}\",[]]Ba[\"{{{AHEf{CEdAANl}}AANl}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBb}}AIBb}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLf}}AGLb}HOj}\",[]]Ba[\"{{{AHEf{CEdAANn}}AANn}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBd}}AIBd}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLh}}AGLd}HOj}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bi[\"{{{AHEf{CEd}}}{{AHEf{CEdc}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bc[\"{{AHEf{AHEf{CEdc}}}HOj{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cc[\"{{{AHEf{CEdAIAh}}NEdKBfKDh}{{KBj{HOjBALd}}}}\",[]]A`[\"{AGHnD@n}\",[]]B`[\"{{AHEf{AHEf{c}}}D@n{}}\",[\"K\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Aa[\"{BBKhBEIf}\",[]]A`[\"{BDDjKDf}\",[]]Aa[\"{BBKlBEIh}\",[]]A`[\"{BDDnKDh}\",[]]A`[\"{BDOlKDh}\",[]]A`[\"{BBMnKDh}\",[]]o[\"{NGnKDh}\",[]]Aa[\"{BBKhAIBn}\",[]]Aa[\"{BBKlAIC`}\",[]]o[\"{KDfCLf}\",[]]o[\"{KDhCLf}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Aj[\"{{{AHEf{B@Od}}}D@n}\",[]]Bd[\"{{{AHEf{BAKn}}}{{KBl{AIEl}}}}\",[]]Bd[\"{{{AHEf{AAJf}}}{{KBl{AIEl}}}}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{BBLfCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLhCLf}\",[]]Cb[\"{{{AHEf{BBM`}}{AHEf{AIEd}}CLf}{{Nn{ANOf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AGLb}}}}\",[]]Bj[\"{{{AHEf{CEdAIAh}}KBf}{{KB`{AGLd}}}}\",[]]o[\"{AGIhOf}\",[]]Db[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]00Ec[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Eg[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBj{JNfAIGb}}}}}}\",[]]1Bm[\"{{{AHEf{IDl}}{AHEf{CNl}}}{{KBl{HOj}}}}\",[]]Cd[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cd[\"{{{AHEf{CEdBEOf}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cn[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{HOjBB@d}}}}\",[]]Bj[\"{{{AHEf{CNn}}AID`}{{KBj{HOjBEHl}}}}\",[]]Bn[\"{{{AHEf{CEdAIDd}}NEd}{{AHEf{CEdAIDd}}}}\",[]]Bn[\"{{{AHEf{CEdAIDf}}NEd}{{AHEf{CEdAIDf}}}}\",[]]A`[\"{BB@jAFd}\",[]]o[\"{IDjCLf}\",[]]o[\"{{}AIEl}\",[]]0o[\"{{}AHEf}\",[]]Bj[\"{{AAJn{Nn{B@Bh}}}{{KBj{AIAbBBKn}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bh[\"{{{AHEf{AGHn}}AIEl}{{KBn{AGMb}}}}\",[]]A`[\"{AGLbCLb}\",[]]Aj[\"{{{AHEf{AIAh}}}CLb}\",[]]A`[\"{AGLdCLb}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Aa[\"{AANfAIEl}\",[]]Aa[\"{AANhAIEl}\",[]]Aa[\"{AANjAIEl}\",[]]Aa[\"{AIElAGJ`}\",[]]o[\"{A@lCLb}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLb}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLb}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnCLb}\",[]]Bo[\"{{{AHEf{CEdBBNl}}AAJb}{{AHEf{CEdBBNl}}}}\",[]]Bo[\"{{{AHEf{CEdBBNn}}AAJb}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnKB`}\",[]]k[\"{{}}\",[]]0000000000Bh[\"{AAJnc{}}\",[\"IntoFuture::IntoFuture\"]]11A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{A@lJNf}\",[]]Ao[\"{{AHEfc}{{NEj{c}}}{}}\",[\"S\"]]0C`[\"{{{AHEf{CEdAIAj}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdO`}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]C`[\"{{{AHEf{CEdAIAl}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdOb}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bk[\"{{{AHEf{CEdIDl}}NEd{AHEf{BBM`}}}HOj}\",[]]A`[\"{BE@hKB`}\",[]]A`[\"{BE@jKB`}\",[]]Bn[\"{{{AHEf{KDf}}{AHEf{KDf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBd}}{AHEf{KBd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONd}}{AHEf{AONd}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COl}}{AHEf{COl}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{Ol}}{AHEf{Ol}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KDh}}{AHEf{KDh}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBf}}{AHEf{KBf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BABj}}{AHEf{BABj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONf}}{AHEf{AONf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COn}}{AHEf{COn}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{On}}{AHEf{On}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}{{KB`{AALh}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AICn}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AIDbAI@n}}}}\",[]]Df[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{HOn}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Cc[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{AAj{Nd}}BB@f}}}}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIDl}\",[]]Aj[\"{{{AHEf{AGJh}}}JNf}\",[]]Aj[\"{{{AHEf{AGJj}}}JNf}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIEh}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLf}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{B@OjKB`}\",[]]A`[\"{B@OlKB`}\",[]]Ce[\"{{{AHEf{CEdB@Bh}}{Nn{AIFd}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{AIFf}}}{{AHEf{CEdB@Bl}}}}\",[]]Ce[\"{{{AHEf{CEdAOLf}}{Nn{AIFl}}}{{AHEf{CEdAOLf}}}}\",[]]Ce[\"{{{AHEf{CEdAOLj}}{Nn{AIFn}}}{{AHEf{CEdAOLj}}}}\",[]]o[\"{A@lCLf}\",[]]Bn[\"{{{AHEf{CEdBEFn}}CLb}{{AHEf{CEdBEFn}}}}\",[]]Bn[\"{{{AHEf{CEdBEG`}}CLb}{{AHEf{CEdBEG`}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BFGb}\",[]]Aj[\"{{{AHEf{CNn}}}BBAd}\",[]]Ai[\"{{{Nn{B@Bj}}}B@Bh}\",[]]Ai[\"{{{Nn{B@Bn}}}B@Bl}\",[]]Aj[\"{{BBMjc}BBMjAAMl}\",[\"\"]]Aj[\"{{BBMlc}BBMlAAMl}\",[\"\"]]Bm[\"{{{AHEf{CEdAIEf}}HOn}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}KAb}\",[]]o[\"{ND`ND`}\",[]]0000Bd[\"{{{AHEf{BFLl}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BFLn}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMb}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMl}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{AIAf}}}{{KB`{BBKn}}}}\",[]]Ck[\"{{{AHEf{AAJf}}AOLfAIEl{AHEf{CL`}}}{{KBj{AIAbAOMn}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{AIDhD@n}{{KBn{JNf}}}}\",[]]Cj[\"{{{AHEf{NGj}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFh}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Cj[\"{{{AHEf{NGl}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFj}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]A`[\"{BFEdAAj}\",[]]A`[\"{BHA`AAj}\",[]]A`[\"{BFEfAAj}\",[]]A`[\"{BHAbAAj}\",[]]An[\"{{{AHEf{CEdBFLl}}}AONd}\",[]]An[\"{{{AHEf{CEdBFLn}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMb}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMl}}}AONf}\",[]]Ak[\"{{{AHEf{BBAb}}}B@@f}\",[]]Ba[\"{{{AHEf{CEdAIAh}}BBLd}HOj}\",[]]Bo[\"{{{AHEf{CEdAAJh}}BDEfB@Od}{{KB`{BBLd}}}}\",[]]B`[\"{{{AHEf{NGj}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{B@Bj}}CLdAONd}{{KBj{CNbBEIn}}}}\",[]]Ba[\"{{{AHEf{AIFh}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{BDHh}}CLdAONd}{{KBj{CNbBEIn}}}}\",[]]B`[\"{{{AHEf{NGl}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{B@Bn}}CLdAONf}{{KBj{CNdBEJd}}}}\",[]]Ba[\"{{{AHEf{AIFj}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{BDHj}}CLdAONf}{{KBj{CNdBEJd}}}}\",[]]Bn[\"{{{AHEf{BGGl}}CLdAONb}{{KBj{CNdBEJd}}}}\",[]]Aj[\"{{}{{NGd{c}}}{}}\",[\"T\"]]0A`[\"{AGLbCLf}\",[]]A`[\"{BBLfCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLhCLf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}JNf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}JNf}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAKn}}}D@n}\",[]]0Aj[\"{{{AHEf{BBAb}}}D@n}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AGJ`AI@n}}}}\",[]]Cb[\"{{{AHEf{BBM`}}{AHEf{AIDh}}CLf}{{Nn{ANOf}}}}\",[]]Ak[\"{{{AHEf{AAJn}}}AONd}\",[]]Ak[\"{{{AHEf{AAK`}}}AONf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{NEd}}}}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{Nn{ANMl}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{ANMn}}}{{AHEf{CEdBBNn}}}}\",[]]43A`[\"{A@lANNd}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Ai[\"{{{AHEf{NHj}}}JNf}\",[]]Bo[\"{{{AHEf{CEdBGMb}}AAJb}{{AHEf{CEdBGMb}}}}\",[]]Bo[\"{{{AHEf{CEdBGMl}}AAJb}{{AHEf{CEdBGMl}}}}\",[]]Bj[\"{{{AHEf{AIEf}}CCn}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}CCn}{{KBj{HOjAOMj}}}}\",[]]==E`[\"{{{AHEf{BGBb}}{AHEf{{JL`{Nd}}}}{AHEf{BAL`}}{AHEf{BFM`}}}{{KBj{BGDhIAh}}}}\",[]]0Bf[\"{{{Nn{BAC`}}}{{KBj{AOLfBFG`}}}}\",[]]Bf[\"{{{Nn{BAC`}}}{{KBj{AOLjBFG`}}}}\",[]]Bn[\"{{{AHEf{CEdBEE`}}KDf}{{AHEf{CEdBEE`}}}}\",[]]Bn[\"{{{AHEf{CEdBEEb}}KDh}{{AHEf{CEdBEEb}}}}\",[]]o[\"{ND`ND`}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]0Ci[\"{{{AHEf{CNn}}{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@h}}}}\",[]]Cd[\"{{{AHEf{CEdA@l}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cc[\"{{{AHEf{CEdOj}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAAId}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAGHn}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdA@n}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdAA`}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bh}}BFMn}{{AHEf{CEdB@Bh}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bl}}BFN`}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAMf}}}CLf}\",[]]Aj[\"{{{AHEf{BAMh}}}CLf}\",[]]Cc[\"{{{AHEf{CEdAOLf}}{Nn{A`}}}{{AHEf{CEdAOLf}}}}\",[]]Cc[\"{{{AHEf{CEdAOLj}}{Nn{A`}}}{{AHEf{CEdAOLj}}}}\",[]]Cj[\"{{BAMf{KB`{B@Bh}}{Of{BAKn}}{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Ca[\"{{{AHEf{CEdAIAh}}NEdAICd}{{KBj{HOjBGAh}}}}\",[]]Bd[\"{{{AHEf{BGBb}}}{{AAj{BBNb}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}JNf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}JNf}{{AHEf{CEdBBNn}}}}\",[]]Bl[\"{{}{{KBj{{JNd{BAL`BEGj}}{Of{IAd}}}}}}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{{AHEf{AAJf}}AOLf}HOj}\",[]]Dc[\"{{{AHEf{CEdAIAh}}NEdKBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]o[\"{{}AHEf}\",[]]Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}CLf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}CLf}{{AHEf{CEdB@Bl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}KDf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}KDh}{{AHEf{CEdBBNn}}}}\",[]]:Bb[\"{{{AHEf{CEdAIAh}}OnKDh}HOj}\",[]]Ak[\"{{}{{KBj{AOLfIBb}}}}\",[]]Ak[\"{{}{{KBj{AOLjIBd}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]65Cg[\"{{{AHEf{CEdA@l}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cf[\"{{{AHEf{CEdOj}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAAId}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAGHn}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdA@n}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdAA`}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Bi[\"{{{AHEf{CEdAGJ`}}{AHEf{AGJ`}}}D@n}\",[]]n[\"{{}HOj}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{KB`{JNf}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{KB`{JNf}}}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Cd[\"{{{AHEf{CEdAIAh}}NEd}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Am[\"{{{AHEf{CEdAIAj}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@h}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIAl}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@j}}}HOj}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]D`[\"{{{AHEf{CEdAIAh}}KBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{Nn{BE@d}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{BE@f}}}{{AHEf{CEdBBNn}}}}\",[]]Cf[\"{{{AHEf{CEdBBNl}}{KB`{AAJb}}}{{AHEf{CEdBBNl}}}}\",[]]Cf[\"{{{AHEf{CEdBBNn}}{KB`{AAJb}}}{{AHEf{CEdBBNn}}}}\",[]]Aa[\"{B@OjAICb}\",[]]Aa[\"{B@OlAICb}\",[]]9Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Am[\"{{{AHEf{AIAf}}KDf}HOj}\",[]]o[\"{ND`ND`}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLd}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLd}{{AHEf{CEdBBNn}}}}\",[]]3109854Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Bn[\"{{{AHEf{AIAh}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]10A`[\"{BEOdKB`}\",[]]Bm[\"{{{AHEf{CEdBBNl}}Nd}{{AHEf{CEdBBNl}}}}\",[]]Bm[\"{{{AHEf{CEdBBNn}}Nd}{{AHEf{CEdBBNn}}}}\",[]]o[\"{{}AICd}\",[]]") \ No newline at end of file +rd_("Bf[\"{{{AHEf{ANKd}}{AHEf{ANKd}}}D@n}\",[]]Bf[\"{{{AHEf{BEB`}}{AHEf{BEB`}}}D@n}\",[]]Bd[\"{{{AHEf{KAd}}{AHEf{KAd}}}D@n}\",[]]Bd[\"{{{AHEf{CNn}}{AHEf{CNn}}}D@n}\",[]]Bf[\"{{{AHEf{BBAd}}{AHEf{BBAd}}}D@n}\",[]]Bf[\"{{{AHEf{BB@f}}{AHEf{BB@f}}}D@n}\",[]]Bf[\"{{{AHEf{AGLh}}{AHEf{AGLh}}}D@n}\",[]]Bf[\"{{{AHEf{AIDn}}{AHEf{AIDn}}}D@n}\",[]]Bf[\"{{{AHEf{BB@d}}{AHEf{BB@d}}}D@n}\",[]]Bf[\"{{{AHEf{AIGb}}{AHEf{AIGb}}}D@n}\",[]]Bf[\"{{{AHEf{B@Cd}}{AHEf{B@Cd}}}D@n}\",[]]Bd[\"{{{AHEf{KDf}}{AHEf{KDf}}}D@n}\",[]]Bf[\"{{{AHEf{BFFl}}{AHEf{BFFl}}}D@n}\",[]]Bd[\"{{{AHEf{I@`}}{AHEf{I@`}}}D@n}\",[]]Bd[\"{{{AHEf{KBd}}{AHEf{KBd}}}D@n}\",[]]Bf[\"{{{AHEf{AANl}}{AHEf{AANl}}}D@n}\",[]]Bf[\"{{{AHEf{AIBb}}{AHEf{AIBb}}}D@n}\",[]]Bf[\"{{{AHEf{AGLb}}{AHEf{AGLb}}}D@n}\",[]]Bd[\"{{{AHEf{NIf}}{AHEf{NIf}}}D@n}\",[]]Bf[\"{{{AHEf{AOMb}}{AHEf{AOMb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKn}}{AHEf{BBKn}}}D@n}\",[]]Bf[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}D@n}\",[]]Bf[\"{{{AHEf{ANKj}}{AHEf{ANKj}}}D@n}\",[]]Bf[\"{{{AHEf{AGJb}}{AHEf{AGJb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKh}}{AHEf{BBKh}}}D@n}\",[]]Bf[\"{{{AHEf{BDDj}}{AHEf{BDDj}}}D@n}\",[]]Bf[\"{{{AHEf{AOMn}}{AHEf{AOMn}}}D@n}\",[]]Bf[\"{{{AHEf{AONd}}{AHEf{AONd}}}D@n}\",[]]Bf[\"{{{AHEf{AONn}}{AHEf{AONn}}}D@n}\",[]]Bf[\"{{{AHEf{BEIf}}{AHEf{BEIf}}}D@n}\",[]]Bd[\"{{{AHEf{COl}}{AHEf{COl}}}D@n}\",[]]Bb[\"{{{AHEf{Ol}}{AHEf{Ol}}}D@n}\",[]]Bf[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}D@n}\",[]]Bf[\"{{{AHEf{BGIf}}{AHEf{BGIf}}}D@n}\",[]]Bd[\"{{{AHEf{IBb}}{AHEf{IBb}}}D@n}\",[]]Bd[\"{{{AHEf{KDh}}{AHEf{KDh}}}D@n}\",[]]Bf[\"{{{AHEf{BFFn}}{AHEf{BFFn}}}D@n}\",[]]Bd[\"{{{AHEf{I@b}}{AHEf{I@b}}}D@n}\",[]]Bf[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}D@n}\",[]]Bd[\"{{{AHEf{KBf}}{AHEf{KBf}}}D@n}\",[]]Bf[\"{{{AHEf{AIDb}}{AHEf{AIDb}}}D@n}\",[]]Bf[\"{{{AHEf{AGL`}}{AHEf{AGL`}}}D@n}\",[]]Bf[\"{{{AHEf{BEAn}}{AHEf{BEAn}}}D@n}\",[]]Bf[\"{{{AHEf{BEHn}}{AHEf{BEHn}}}D@n}\",[]]Bf[\"{{{AHEf{AI@n}}{AHEf{AI@n}}}D@n}\",[]]Bf[\"{{{AHEf{AANn}}{AHEf{AANn}}}D@n}\",[]]Bf[\"{{{AHEf{AIBd}}{AHEf{AIBd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLd}}{AHEf{AGLd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}D@n}\",[]]Bf[\"{{{AHEf{BABj}}{AHEf{BABj}}}D@n}\",[]]Bd[\"{{{AHEf{NIh}}{AHEf{NIh}}}D@n}\",[]]Bf[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}D@n}\",[]]Bf[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}D@n}\",[]]Bf[\"{{{AHEf{ANOb}}{AHEf{ANOb}}}D@n}\",[]]Bf[\"{{{AHEf{BB@h}}{AHEf{BB@h}}}D@n}\",[]]Bf[\"{{{AHEf{AOMj}}{AHEf{AOMj}}}D@n}\",[]]Bf[\"{{{AHEf{BBL`}}{AHEf{BBL`}}}D@n}\",[]]Bf[\"{{{AHEf{AGKl}}{AHEf{AGKl}}}D@n}\",[]]Bf[\"{{{AHEf{BALd}}{AHEf{BALd}}}D@n}\",[]]Bf[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}D@n}\",[]]Bf[\"{{{AHEf{ANKl}}{AHEf{ANKl}}}D@n}\",[]]Bf[\"{{{AHEf{AGJd}}{AHEf{AGJd}}}D@n}\",[]]Bf[\"{{{AHEf{BANb}}{AHEf{BANb}}}D@n}\",[]]Bf[\"{{{AHEf{AIC`}}{AHEf{AIC`}}}D@n}\",[]]Bf[\"{{{AHEf{AIEn}}{AHEf{AIEn}}}D@n}\",[]]Bf[\"{{{AHEf{AONh}}{AHEf{AONh}}}D@n}\",[]]Bf[\"{{{AHEf{BBKl}}{AHEf{BBKl}}}D@n}\",[]]Bf[\"{{{AHEf{BDDn}}{AHEf{BDDn}}}D@n}\",[]]Bf[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}D@n}\",[]]Bf[\"{{{AHEf{AON`}}{AHEf{AON`}}}D@n}\",[]]Bf[\"{{{AHEf{AAKf}}{AHEf{AAKf}}}D@n}\",[]]Bf[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}D@n}\",[]]Bf[\"{{{AHEf{AONf}}{AHEf{AONf}}}D@n}\",[]]Bf[\"{{{AHEf{AOO`}}{AHEf{AOO`}}}D@n}\",[]]Bf[\"{{{AHEf{BBA`}}{AHEf{BBA`}}}D@n}\",[]]Bf[\"{{{AHEf{BEIh}}{AHEf{BEIh}}}D@n}\",[]]Bd[\"{{{AHEf{COn}}{AHEf{COn}}}D@n}\",[]]Bb[\"{{{AHEf{On}}{AHEf{On}}}D@n}\",[]]Bf[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}D@n}\",[]]Bf[\"{{{AHEf{AGJ`}}{AHEf{AGJ`}}}D@n}\",[]]Bf[\"{{{AHEf{BACf}}{AHEf{BACf}}}D@n}\",[]]Bf[\"{{{AHEf{BEOd}}{AHEf{BEOd}}}D@n}\",[]]Bd[\"{{{AHEf{IBf}}{AHEf{IBf}}}D@n}\",[]]Bf[\"{{{AHEf{BGIh}}{AHEf{BGIh}}}D@n}\",[]]Bd[\"{{{AHEf{IBd}}{AHEf{IBd}}}D@n}\",[]]Bf[\"{{{AHEf{AOOb}}{AHEf{AOOb}}}D@n}\",[]]Ai[\"{{{AHEf{CNn}}}KBd}\",[]]Aj[\"{{{AHEf{BBAd}}}KBd}\",[]]Ak[\"{{{AHEf{AIDj}}}AAMb}\",[]]Ak[\"{{{AHEf{BEOf}}}AAMb}\",[]]Ak[\"{{{AHEf{AIEf}}}AAMb}\",[]]o[\"{KAhKBf}\",[]]A`[\"{AGGdKBf}\",[]]A`[\"{AGIhKBf}\",[]]A`[\"{B@AjKBf}\",[]]A`[\"{B@@lKBf}\",[]]Aa[\"{AALjAAMd}\",[]]Aa[\"{AAObAAMd}\",[]]Aa[\"{AAJjAAMd}\",[]]A`[\"{NGnAAMd}\",[]]A`[\"{ANNdNGf}\",[]]A`[\"{CNfAAKf}\",[]]Ac[\"{{AANlAANl}}\",[]]Ac[\"{{AIBbAIBb}}\",[]]Ac[\"{{BBLfAGLb}}\",[]]Bc[\"{{AANnAANn}c{}}\",[\"Add::Output\"]]Bc[\"{{AIBdAIBd}c{}}\",[\"Add::Output\"]]Bc[\"{{BBLhAGLd}c{}}\",[\"Add::Output\"]]Be[\"{{{AHEf{KDf}}{AHEf{KDf}}}AALh}\",[]]Be[\"{{{AHEf{KBd}}{AHEf{KBd}}}AALh}\",[]]Bg[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}AALh}\",[]]Bg[\"{{{AHEf{AONd}}{AHEf{AONd}}}AALh}\",[]]Be[\"{{{AHEf{COl}}{AHEf{COl}}}AALh}\",[]]Bc[\"{{{AHEf{Ol}}{AHEf{Ol}}}AALh}\",[]]Bg[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}AALh}\",[]]Be[\"{{{AHEf{KDh}}{AHEf{KDh}}}AALh}\",[]]Bg[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}AALh}\",[]]Be[\"{{{AHEf{KBf}}{AHEf{KBf}}}AALh}\",[]]Bg[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}AALh}\",[]]Bg[\"{{{AHEf{BABj}}{AHEf{BABj}}}AALh}\",[]]Bg[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}AALh}\",[]]Bg[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}AALh}\",[]]Bg[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}AALh}\",[]]Bg[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}AALh}\",[]]Bg[\"{{{AHEf{AONf}}{AHEf{AONf}}}AALh}\",[]]Be[\"{{{AHEf{COn}}{AHEf{COn}}}AALh}\",[]]Bc[\"{{{AHEf{On}}{AHEf{On}}}AALh}\",[]]Bg[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}AALh}\",[]]o[\"{AAMbOl}\",[]]o[\"{AAMdOn}\",[]]n[\"{KAjOn}\",[]]o[\"{AGHbOn}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AALnKB`}\",[]]A`[\"{AANjKB`}\",[]]Bh[\"{{{AHEf{A@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGBb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFFf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFGb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEB`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAJf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Of}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KAd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AICn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BENh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIE`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAN`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{CNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEOf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@f}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGLh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BB@d}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NHb}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{KDf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Cd[\"{{{AHEf{I@`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{KBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AIBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGLb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBLf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBMj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBNl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEE`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEFn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAMf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{B@Bh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BFMn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOLf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANKj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AGJb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BDDj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AOMn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AIBh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BDHl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{COl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{Ol}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AAMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{O`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGHh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{I@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NF`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAAj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BE@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BGIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{IBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{AIAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KDh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BFFn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{I@b}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEBb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{KBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@B`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGL`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEHn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AI@n}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIBd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBLh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BABj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANLl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@h}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOMj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBL`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BALd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGAh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEEb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEG`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANM`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAMh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Bl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFN`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOLj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGJd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BANb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIC`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIEn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AONh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAIj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AON`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAKf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Od}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AONf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AOO`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBA`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEIh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIBj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGMl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BDHn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{COn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bg[\"{{{AHEf{On}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAMd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGJ`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BACf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEOd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEJd}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{IBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{BFFd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bg[\"{{{AHEf{Ob}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGHj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{I@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{NFb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAAl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BE@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AALn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AANj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bd[\"{{{AHEf{BFFf}}}{{KB`{AIEl}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AANlCLf}\",[]]A`[\"{AANnCLf}\",[]]Aj[\"{{{AHEf{BAB`}}}JNf}\",[]]A`[\"{BGB`CLf}\",[]]o[\"{CNfCLf}\",[]]A`[\"{AALnJNf}\",[]]Ce[\"{{{AHEf{CEdBFMn}}{Nn{AAMn}}}{{AHEf{CEdBFMn}}}}\",[]]Ce[\"{{{AHEf{CEdBFN`}}{Nn{AAN`}}}{{AHEf{CEdBFN`}}}}\",[]]8Af[\"{{AAJbCLf}BB@j}\",[]]Ag[\"{{}{{Nn{BGBb}}}}\",[]]Ae[\"{{JNfCLd}B@Nd}\",[]]Cd[\"{{BAMf{KB`{B@Bh}}AGMb{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Ah[\"{{{Of{IEb}}}AIDd}\",[]]A`[\"{NG`BBMj}\",[]]Ah[\"{{{Nn{NDn}}}BAMf}\",[]]Bc[\"{{{Nn{B@Bj}}{Nn{BE@l}}}B@Bh}\",[]]Ai[\"{{{Nn{AOLh}}}AOLf}\",[]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONd}\",[]]Ae[\"{{CLdJNf}BDHl}\",[]]Ag[\"{{COlOlCLf}AAMb}\",[]]Aj[\"{{{Nn{AGHh}}CLb}O`}\",[]]An[\"{{{Nn{ANLd}}NEdCLb}I@h}\",[]]An[\"{{{Nn{BAAj}}NEdCLb}NF`}\",[]]Ae[\"{{JNfCLd}B@Nf}\",[]]Ah[\"{{{Of{IEb}}}AIDf}\",[]]Bm[\"{{{Nn{BAMh}}{KB`{{Nn{B@Bl}}}}D@n}AAJh}\",[]]A`[\"{JNfBH@n}\",[]]o[\"{{}BGMb}\",[]]A`[\"{NG`BBMl}\",[]]Ah[\"{{{Nn{NE`}}}BAMh}\",[]]Bc[\"{{{Nn{B@Bn}}{Nn{BE@n}}}B@Bl}\",[]]Ai[\"{{{Nn{AOLl}}}AOLj}\",[]]Ek[\"{{AAI`{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{{JNd{BAB`{KB`{AAI`}}}}BEAj}}}{BEElIDh}}\",[\"\"]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONf}\",[]]Af[\"{{BEIhKDb}BBA`}\",[]]A`[\"{JNfBGMl}\",[]]Ae[\"{{CLdJNf}BDHn}\",[]]Ag[\"{{COnOnCLf}AAMd}\",[]]Am[\"{{AIEl{KB`{KAb}}}AGJ`}\",[]]Aj[\"{{{Nn{AGHj}}CLb}Ob}\",[]]An[\"{{{Nn{ANLf}}NEdCLb}I@j}\",[]]An[\"{{{Nn{BAAl}}NEdCLb}NFb}\",[]]Aj[\"{AIG`{{KBl{BBAb}}}}\",[]]Aa[\"{BDHfBGGj}\",[]]Aa[\"{BDHjBGGl}\",[]]o[\"{COlCOl}\",[]]o[\"{COnCOn}\",[]]Ak[\"{{{AHEf{AIFd}}}AIFb}\",[]]Ai[\"{{{AHEf{NGh}}}NEd}\",[]]0Aj[\"{{{AHEf{B@Cf}}}NEd}\",[]]Ak[\"{{{AHEf{BACb}}}AIFb}\",[]]Ak[\"{{{AHEf{AIFf}}}AIFb}\",[]]Ak[\"{{{AHEf{BACd}}}AIFb}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLbAAJb}\",[]]Bg[\"{{{AHEf{AIAh}}KBf}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLdAAJb}\",[]]Ah[\"{A@n{{KBn{HOj}}}}\",[]]Ah[\"{AA`{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{B@@lAIEl}\",[]]Aa[\"{AALnAIEl}\",[]]Aa[\"{BBA`BEIh}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{AAIjHOn}\",[]]Am[\"{{{AHEf{CEdAALd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAAJn}}}HOj}\",[]]Al[\"{{{AHEf{CEdCNn}}}HOj}\",[]]Am[\"{{{AHEf{CEdBBAd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIDj}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIEf}}}HOj}\",[]]Al[\"{{{AHEf{CEdJOn}}}HOj}\",[]]A`[\"{cc{}}\",[\"T\"]]0000000000000000000000Aa[\"{BBKnBEB`}\",[]]111111111111111Aa[\"{AGLhBB@f}\",[]]2Aa[\"{AIDnAGLh}\",[]]Aa[\"{BBKnAGLh}\",[]]Aa[\"{BBKnAIDn}\",[]]55Aa[\"{AGLhBB@d}\",[]]6666Aa[\"{AOMbAIGb}\",[]]Aa[\"{B@CdAIGb}\",[]]Aa[\"{BBKnAIGb}\",[]]9Aa[\"{BBKnB@Cd}\",[]]::::::A`[\"{AAMbKDf}\",[]]n[\"{NdKDf}\",[]]o[\"{CLbKDf}\",[]]A`[\"{BEIfKDf}\",[]]o[\"{CLdKDf}\",[]]???Al[\"{cKBd{{CN`{CLd}}}}\",[\"T\"]]A`[\"{cc{}}\",[\"T\"]]000000A`[\"{I@fBBKn}\",[]]1A`[\"{IAlBBKn}\",[]]Aa[\"{ANKhBBKn}\",[]]33333A`[\"{KDfANLn}\",[]]4444Aa[\"{BBO`ANKj}\",[]]5Aa[\"{BFFlANKj}\",[]]66A`[\"{IAlBBKh}\",[]]7Aa[\"{BEInAOMn}\",[]]8888A`[\"{KDfBEIf}\",[]]99999A`[\"{KDfAAMb}\",[]]:::::::::::Aa[\"{ANOhANL`}\",[]];;;;A`[\"{BBNdIBb}\",[]]A`[\"{BBLjIBb}\",[]]A`[\"{BDFfIBb}\",[]]A`[\"{BAOfIBb}\",[]]A`[\"{BANdIBb}\",[]]A`[\"{AICfIBb}\",[]]A`[\"{cc{}}\",[\"T\"]]A`[\"{BDE`IBb}\",[]]A`[\"{BGIdIBb}\",[]]A`[\"{BDGnIBb}\",[]]A`[\"{BGJfIBb}\",[]]A`[\"{BGDfIBb}\",[]]555555555555555555555555o[\"{CLbKDh}\",[]]o[\"{CLdKDh}\",[]]n[\"{NdKDh}\",[]]A`[\"{AAMdKDh}\",[]]A`[\"{BEIhKDh}\",[]]::::Al[\"{cKBf{{CN`{CLd}}}}\",[\"T\"]];;;;;;;;;;;;;;;;;;;Aa[\"{BBA`BBL`}\",[]]<<<>>>>Aa[\"{BBO`ANKl}\",[]]Aa[\"{BFFnANKl}\",[]]A`[\"{cc{}}\",[\"T\"]]00000Aa[\"{BBA`BBKl}\",[]]11111Aa[\"{BEJdAON`}\",[]]22222222Aa[\"{BACfBEAj}\",[]]3333A`[\"{IBfBBA`}\",[]]4A`[\"{KDhBEIh}\",[]]5555555A`[\"{KDhAAMd}\",[]]6666A`[\"{BACfIBf}\",[]]7777Aa[\"{ANOhANLb}\",[]]8888A`[\"{BDE`IBd}\",[]]A`[\"{BGIdIBd}\",[]]A`[\"{AICfIBd}\",[]]A`[\"{BANdIBd}\",[]]A`[\"{BDFfIBd}\",[]]A`[\"{BBLjIBd}\",[]]A`[\"{BGJfIBd}\",[]]A`[\"{BAOfIBd}\",[]]A`[\"{BDGnIBd}\",[]]A`[\"{BBNdIBd}\",[]]A`[\"{cc{}}\",[\"T\"]]A`[\"{BGDfIBd}\",[]]111111111111An[\"{{{AHEf{c}}}AIG`CLl}\",[\"S\"]]22222222222222Bm[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{ANLn}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AONd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COl}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{Ol}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEBb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{AGLj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BABj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AIGd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{ANM`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BDEf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEAj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AONf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COn}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{On}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AGJ`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Aa[\"{{}c{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n[\"{{}HOj}\",[]]0000Cc[\"{{{AHEf{CEdJOn}}JNf}{{KBj{{KB`{I@b}}AGLj}}}}\",[]]Cf[\"{{{AHEf{CEdBA@h}}}{{KB`{c}}}{}}\",[\"Iterator::Item\"]]Dl[\"{{{AHEf{BE@l}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANL`}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Dl[\"{{{AHEf{BE@n}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANLb}}}}\",[]]Bf[\"{{{AHEf{AIAf}}KBd}{{KB`{CNn}}}}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjAI@h}}}}\",[]]A`[\"{AIBbCLf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}HOj}\",[]]A`[\"{AIBdCLf}\",[]]Ck[\"{{{AAd{{AHEf{CEdAI@`}}}}{AHEf{CEdNDb}}}{{COf{HOj}}}}\",[]]Dk[\"{{{AAd{{AHEf{CEdBBOf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALd}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAIAb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNFf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdKAf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAGGh}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAAHn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@Ah}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@Bb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdJNn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdBAN`}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNHb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{IBl}}}}\",[]]De[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}D@n}{{KBj{JOnBABj}}}}\",[]]Bo[\"{{COn{AHEf{CEdc}}}{{KBj{BEOdIBf}}}Oh}\",[\"R\"]]Bf[\"{{{AHEf{CEdAGId}}}{{KB`{HOn}}}}\",[]]Ec[\"{{{AHEf{BBAb}}AIG`{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{KBl{JNf}}}}\",[]]Cn[\"{{{AHEf{BE@l}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANL`}}}}\",[]]Cn[\"{{{AHEf{BE@n}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANLb}}}}\",[]]C`[\"{{{AHEf{CEdAGId}}HOnD@n}{{KBj{HOjBEBb}}}}\",[]]Cc[\"{{{AHEf{BBAb}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bn[\"{{{AHEf{CEdBFMn}}CLd}{{AHEf{CEdBFMn}}}}\",[]]Bn[\"{{{AHEf{CEdBFN`}}CLd}{{AHEf{CEdBFN`}}}}\",[]]Aj[\"{{{AHEf{AIAf}}}COl}\",[]]Aj[\"{{{AHEf{AIAh}}}COn}\",[]]Cn[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cn[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]A`[\"{BB@jCLf}\",[]]A`[\"{AANfJNf}\",[]]A`[\"{AANhJNf}\",[]]o[\"{IDdD@n}\",[]]Bm[\"{{{AHEf{CEdAIDj}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdBEOf}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}KDh}{{KBj{HOjAOMj}}}}\",[]]Bn[\"{{{AHEf{AIFl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BAOb}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{AIFn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BAOd}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bd[\"{{{AHEf{BDEl}}}{{KB`{BA@h}}}}\",[]]Bg[\"{{{Nn{BE@d}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{AGHh}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{ANLd}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BAAj}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BE@f}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{AGHj}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{ANLf}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{BAAl}}NEdCLb}{{Of{AIAl}}}}\",[]]Ai[\"{BENf{{Nn{BE@f}}}}\",[]]o[\"{I@`HOn}\",[]]A`[\"{AANlCLf}\",[]]o[\"{NIfJNf}\",[]]o[\"{I@bHOn}\",[]]A`[\"{AANnCLf}\",[]]o[\"{NIhJNf}\",[]]Aa[\"{ANK`BBL`}\",[]]Ai[\"{{{AHEf{A@l}}}A@l}\",[]]Ak[\"{{{AHEf{ANNd}}}ANNd}\",[]]Ak[\"{{{AHEf{ANKd}}}ANKd}\",[]]Ak[\"{{{AHEf{AIAf}}}AIAf}\",[]]Ak[\"{{{AHEf{BFGb}}}BFGb}\",[]]Ak[\"{{{AHEf{BEB`}}}BEB`}\",[]]Ak[\"{{{AHEf{AAJf}}}AAJf}\",[]]Ak[\"{{{AHEf{B@Of}}}B@Of}\",[]]Ai[\"{{{AHEf{KAd}}}KAd}\",[]]Ai[\"{{{AHEf{CNn}}}CNn}\",[]]Ak[\"{{{AHEf{BBAd}}}BBAd}\",[]]Ak[\"{{{AHEf{BB@f}}}BB@f}\",[]]Ak[\"{{{AHEf{AGLh}}}AGLh}\",[]]Ak[\"{{{AHEf{AIDn}}}AIDn}\",[]]Ak[\"{{{AHEf{BB@d}}}BB@d}\",[]]Ak[\"{{{AHEf{AIGb}}}AIGb}\",[]]Ak[\"{{{AHEf{B@Cd}}}B@Cd}\",[]]Ai[\"{{{AHEf{KDf}}}KDf}\",[]]Ak[\"{{{AHEf{BFFl}}}BFFl}\",[]]Ai[\"{{{AHEf{KBd}}}KBd}\",[]]Ak[\"{{{AHEf{AANl}}}AANl}\",[]]Ak[\"{{{AHEf{AIBb}}}AIBb}\",[]]Ak[\"{{{AHEf{AGLb}}}AGLb}\",[]]Ak[\"{{{AHEf{BBLf}}}BBLf}\",[]]Ai[\"{{{AHEf{NIf}}}NIf}\",[]]Ak[\"{{{AHEf{AOMb}}}AOMb}\",[]]Ak[\"{{{AHEf{BBKn}}}BBKn}\",[]]Ak[\"{{{AHEf{BBNl}}}BBNl}\",[]]Ak[\"{{{AHEf{BEE`}}}BEE`}\",[]]Ak[\"{{{AHEf{BEFn}}}BEFn}\",[]]Ak[\"{{{AHEf{ANLn}}}ANLn}\",[]]Ak[\"{{{AHEf{BAMf}}}BAMf}\",[]]Ak[\"{{{AHEf{B@Bh}}}B@Bh}\",[]]Ak[\"{{{AHEf{BFMn}}}BFMn}\",[]]Ak[\"{{{AHEf{AOLf}}}AOLf}\",[]]Ak[\"{{{AHEf{ANKj}}}ANKj}\",[]]Ak[\"{{{AHEf{AGJb}}}AGJb}\",[]]Ak[\"{{{AHEf{BBKh}}}BBKh}\",[]]Ak[\"{{{AHEf{BDDj}}}BDDj}\",[]]Ak[\"{{{AHEf{AOMn}}}AOMn}\",[]]Ak[\"{{{AHEf{AONd}}}AONd}\",[]]Ak[\"{{{AHEf{AONn}}}AONn}\",[]]Ak[\"{{{AHEf{BEIf}}}BEIf}\",[]]Ak[\"{{{AHEf{AIBh}}}AIBh}\",[]]Ai[\"{{{AHEf{COl}}}COl}\",[]]Ag[\"{{{AHEf{Ol}}}Ol}\",[]]Ak[\"{{{AHEf{AAMb}}}AAMb}\",[]]Ag[\"{{{AHEf{O`}}}O`}\",[]]Ak[\"{{{AHEf{AGHh}}}AGHh}\",[]]Ai[\"{{{AHEf{I@h}}}I@h}\",[]]Ak[\"{{{AHEf{ANLd}}}ANLd}\",[]]Ai[\"{{{AHEf{NF`}}}NF`}\",[]]Ak[\"{{{AHEf{BAAj}}}BAAj}\",[]]Ai[\"{{{AHEf{IBb}}}IBb}\",[]]Ak[\"{{{AHEf{BDHd}}}BDHd}\",[]]Ak[\"{{{AHEf{BFFb}}}BFFb}\",[]]Ak[\"{{{AHEf{BDHh}}}BDHh}\",[]]Ai[\"{{{AHEf{KDh}}}KDh}\",[]]Ak[\"{{{AHEf{BFFn}}}BFFn}\",[]]Ak[\"{{{AHEf{BEBb}}}BEBb}\",[]]Ai[\"{{{AHEf{KBf}}}KBf}\",[]]Ak[\"{{{AHEf{B@B`}}}B@B`}\",[]]Ak[\"{{{AHEf{AIDb}}}AIDb}\",[]]Ak[\"{{{AHEf{AGL`}}}AGL`}\",[]]Ak[\"{{{AHEf{BEAn}}}BEAn}\",[]]Ak[\"{{{AHEf{BEHn}}}BEHn}\",[]]Ak[\"{{{AHEf{AI@n}}}AI@n}\",[]]Ak[\"{{{AHEf{AANn}}}AANn}\",[]]Ak[\"{{{AHEf{AIBd}}}AIBd}\",[]]Ak[\"{{{AHEf{AGLd}}}AGLd}\",[]]Ak[\"{{{AHEf{BBLh}}}BBLh}\",[]]Ak[\"{{{AHEf{AGLj}}}AGLj}\",[]]Ak[\"{{{AHEf{BABj}}}BABj}\",[]]Ai[\"{{{AHEf{NIh}}}NIh}\",[]]Ak[\"{{{AHEf{AIGd}}}AIGd}\",[]]Ak[\"{{{AHEf{ANLl}}}ANLl}\",[]]Ak[\"{{{AHEf{BB@h}}}BB@h}\",[]]Ak[\"{{{AHEf{AOMj}}}AOMj}\",[]]Ak[\"{{{AHEf{BBL`}}}BBL`}\",[]]Ak[\"{{{AHEf{AGKl}}}AGKl}\",[]]Ak[\"{{{AHEf{BALd}}}BALd}\",[]]Ak[\"{{{AHEf{BGAh}}}BGAh}\",[]]Ak[\"{{{AHEf{BBNn}}}BBNn}\",[]]Ak[\"{{{AHEf{BEEb}}}BEEb}\",[]]Ak[\"{{{AHEf{BEG`}}}BEG`}\",[]]Ak[\"{{{AHEf{ANM`}}}ANM`}\",[]]Ak[\"{{{AHEf{BAMh}}}BAMh}\",[]]Ak[\"{{{AHEf{B@Bl}}}B@Bl}\",[]]Ak[\"{{{AHEf{BFN`}}}BFN`}\",[]]Ak[\"{{{AHEf{AOLj}}}AOLj}\",[]]Ak[\"{{{AHEf{ANKl}}}ANKl}\",[]]Ak[\"{{{AHEf{AGJd}}}AGJd}\",[]]Ak[\"{{{AHEf{AIC`}}}AIC`}\",[]]Ak[\"{{{AHEf{AIEn}}}AIEn}\",[]]Ak[\"{{{AHEf{AONh}}}AONh}\",[]]Ak[\"{{{AHEf{BBKl}}}BBKl}\",[]]Ak[\"{{{AHEf{BDDn}}}BDDn}\",[]]Ak[\"{{{AHEf{AAIj}}}AAIj}\",[]]Ak[\"{{{AHEf{BDEf}}}BDEf}\",[]]Ak[\"{{{AHEf{AON`}}}AON`}\",[]]Ak[\"{{{AHEf{BBMh}}}BBMh}\",[]]Ak[\"{{{AHEf{BGB`}}}BGB`}\",[]]Ak[\"{{{AHEf{AAKf}}}AAKf}\",[]]Ak[\"{{{AHEf{BEAj}}}BEAj}\",[]]Ak[\"{{{AHEf{AONf}}}AONf}\",[]]Ak[\"{{{AHEf{AOO`}}}AOO`}\",[]]Ak[\"{{{AHEf{BBA`}}}BBA`}\",[]]Ak[\"{{{AHEf{BEIh}}}BEIh}\",[]]Ak[\"{{{AHEf{AIBj}}}AIBj}\",[]]Ak[\"{{{AHEf{BGMl}}}BGMl}\",[]]Ai[\"{{{AHEf{COn}}}COn}\",[]]Ag[\"{{{AHEf{On}}}On}\",[]]Ak[\"{{{AHEf{AAMd}}}AAMd}\",[]]Ak[\"{{{AHEf{AGJ`}}}AGJ`}\",[]]Ak[\"{{{AHEf{BACf}}}BACf}\",[]]Ak[\"{{{AHEf{BEOd}}}BEOd}\",[]]Ai[\"{{{AHEf{IBf}}}IBf}\",[]]Ai[\"{{{AHEf{IBd}}}IBd}\",[]]Ak[\"{{{AHEf{BDHf}}}BDHf}\",[]]Ak[\"{{{AHEf{BFFd}}}BFFd}\",[]]Ak[\"{{{AHEf{BDHj}}}BDHj}\",[]]Ag[\"{{{AHEf{Ob}}}Ob}\",[]]Ak[\"{{{AHEf{AGHj}}}AGHj}\",[]]Ai[\"{{{AHEf{I@j}}}I@j}\",[]]Ak[\"{{{AHEf{ANLf}}}ANLf}\",[]]Ai[\"{{{AHEf{NFb}}}NFb}\",[]]Ak[\"{{{AHEf{BAAl}}}BAAl}\",[]]Ai[\"{{{AHEf{IBn}}}IBn}\",[]]Ak[\"{{{AHEf{AALn}}}AALn}\",[]]Ak[\"{{{AHEf{AANj}}}AANj}\",[]]Ak[\"{{{AHEf{AOOb}}}AOOb}\",[]]Ak[\"{{{AHEf{BENf}}}BENf}\",[]]Ak[\"{{{AHEf{BBM`}}}BBM`}\",[]]Ak[\"{{{AHEf{BGGj}}}BGGj}\",[]]Ak[\"{{{AHEf{BGGl}}}BGGl}\",[]]Bn[\"{{{AHEf{AIAf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bn[\"{{{AHEf{AAJf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjBALb}}}}\",[]]Bf[\"{{{AHEf{CEdAIAh}}NEdKDhHOn}HOj}\",[]]Bj[\"{{{AHEf{AONd}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Bj[\"{{{AHEf{AONf}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Aa[\"{BBA`AIC`}\",[]]A`[\"{AAMbCLf}\",[]]A`[\"{AAMdCLf}\",[]]A`[\"{AONnD@n}\",[]]A`[\"{AOO`D@n}\",[]]l[\"{NEf}\",[]]l[\"{NEh}\",[]]Ce[\"{{{AHEf{BEEl}}{AHEf{CEdOh}}}{{KBj{AONfBEAj}}}}\",[]]Ce[\"{{{AHEf{BH@n}}{AHEf{CEdOh}}}{{KBj{AONfBEAj}}}}\",[]]Bc[\"{{{AHEf{AIAh}}}{{AAj{KBf}}}}\",[]]Bd[\"{{{AHEf{IDj}}{AHEf{CL`}}}HOj}\",[]]Am[\"{{{AHEf{ANKf}}JNf}HOj}\",[]]Ai[\"{{{AHEf{IDl}}}HOj}\",[]]Bg[\"{{{AAd{{AHEf{CEdAI@`}}}}NEd}HOj}\",[]]Bm[\"{{{AHEf{CEdAIEf}}KDf}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}KDh}{{KBj{HOjAOMj}}}}\",[]]Am[\"{AAJn{{KBj{HOjAIE`}}}}\",[]]Dc[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}{{KBj{AANhAIEb}}}}\",[]]Bi[\"{{{AHEf{NGh}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{B@Cf}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{ANNj}}{AAd{{Of{K@n}}}}}HOj}\",[]]o[\"{A@lD@n}\",[]]Ak[\"{{{AHEf{AIAf}}}BBLf}\",[]]Ak[\"{{{AHEf{AAJf}}}B@Of}\",[]]Aj[\"{{{AHEf{CNn}}}AGLb}\",[]]An[\"{{{AHEf{CEdAIAh}}}BBLh}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGb}}}}\",[]]Ck[\"{{{AHEf{CEdAIEh}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGd}}}}\",[]]Bl[\"{{{AHEf{BEOd}}{AHEf{CEdc}}}HOjJOl}\",[\"W\"]]Aj[\"{{{AHEf{AAJf}}}JNn}\",[]]An[\"{AAJn{{KBj{AIAbBBKn}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Fh[\"{{{AHEf{CEdAAJh}}AAK`NEd{AHEf{CEd{AAj{Nd}}}}{KB`{{Nn{B@Bl}}}}}{{KBj{{JNd{BDEfAIAh}}{Of{ANK`}}}}}}\",[]]Am[\"{AHEf{{AHEf{c}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000o[\"{NIfJNf}\",[]]o[\"{NIhJNf}\",[]]A`[\"{A@lANKd}\",[]]Bc[\"{{AIElBAL`A@l}{{KBn{ANKf}}}}\",[]]Aj[\"{AIEl{{KBl{AAJf}}}}\",[]]B`[\"{{}{{KBj{HOj{Of{IAd}}}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BBKn}\",[]]Be[\"{{{AHEf{AAJh}}}{{AHEf{BAMh}}}}\",[]]o[\"{NdBEIf}\",[]]A`[\"{AIBbCLf}\",[]]o[\"{B@BhNn}\",[]]o[\"{NdBEIh}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{B@BlNn}\",[]]A`[\"{BBA`KB`}\",[]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KDfBACf}}}Oh}\",[\"B\"]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KBdBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AGJbBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{BEIfBACf}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AAMbBACf}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KDh}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KBf}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGJd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AIC`}}}Oh}\",[\"B\"]]Ek[\"{{{AHEf{CEd{K@l{AAI`}}}}{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{BBMhBEAj}}}{BEElIDh}}\",[\"\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{BEIh}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AAMd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGIf}}}Oh}\",[\"B\"]]A`[\"{AALnKB`}\",[]]Bk[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEIf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AIC`}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAIj}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEIh}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGIl}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bj[\"{{{AHEf{CEdAIEf}}}{{KBj{HOjAOMb}}}}\",[]]Bj[\"{{{AHEf{CEdAIEh}}}{{KBj{HOjANLl}}}}\",[]]An[\"{{{AHEf{ANOf}}AAJb}HOj}\",[]]Ea[\"{{{AHEf{CEdAAJh}}NEdAGJ`{KB`{AOO`}}AAI`{AHEf{CEd{AAj{Nd}}}}}{{KB`{B@Ob}}}}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]A`[\"{AAJnHOj}\",[]]Ba[\"{{{AHEf{CEdAAJh}}AAK`}HOj}\",[]]Bh[\"{{{AHEf{AIFl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BAOb}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{AIFn}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BAOd}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHn}}{AHEf{CL`}}HOn}HOj}\",[]]A`[\"{AGHnD@n}\",[]]o[\"{I@`CLf}\",[]]o[\"{I@bCLf}\",[]]Ce[\"{{{AHEf{CEdAIAj}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cc[\"{{{AHEf{CEdO`}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@h}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNF`}}NEdNEdCLfD@n{AHEf{B@An}}}HOj}\",[]]Ce[\"{{{AHEf{CEdAIAl}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cc[\"{{{AHEf{CEdOb}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@j}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNFb}}NEdNEdCLfD@n{AHEf{B@B`}}}HOj}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]o[\"{BDIfNd}\",[]]A`[\"{BBKhHOn}\",[]]A`[\"{BDDjHOn}\",[]]A`[\"{BBKlHOn}\",[]]A`[\"{BDDnHOn}\",[]]A`[\"{BBA`KDb}\",[]]Aa[\"{BALhBBL`}\",[]]Aa[\"{AGGdBEAn}\",[]]Bg[\"{{{AHEf{AAJf}}AGMb}{{KBl{HOj}}}}\",[]]A`[\"{AAJnHOj}\",[]]Cf[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}AANh}\",[]]l[\"{NEf}\",[]]Ak[\"{{{AHEf{AGJ`}}}AIEl}\",[]]l[\"{NEh}\",[]]An[\"{{AAJdA@l}{{KBn{HOj}}}}\",[]]B`[\"{{B@BhAIEl}{{KBl{AAJf}}}}\",[]]Bb[\"{B@Bf{{KBj{HOj{Of{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BEB`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BB@f}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AGLh}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIDn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BB@d}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIGb}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{B@Cd}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBKn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBL`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Bg[\"{{{AHEf{CNn}}}{{KBj{AID`AI@h}}}}\",[]]Aa[\"{B@AjAIDb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]A`[\"{AALnJNf}\",[]]Aa[\"{AGLbAANl}\",[]]Aa[\"{BBLfAANl}\",[]]Aa[\"{AGLdAANn}\",[]]Aa[\"{BBLhAANn}\",[]]3210Dh[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANL`}}}}\",[]]Dh[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANLb}}}}\",[]]Aj[\"{{{AHEf{AIAj}}}CLf}\",[]]Ah[\"{{{AHEf{O`}}}CLf}\",[]]Ai[\"{{{AHEf{I@h}}}CLf}\",[]]Ai[\"{{{AHEf{NF`}}}CLf}\",[]]Aj[\"{{{AHEf{AIAl}}}CLf}\",[]]Ah[\"{{{AHEf{Ob}}}CLf}\",[]]Ai[\"{{{AHEf{I@j}}}CLf}\",[]]Ai[\"{{{AHEf{NFb}}}CLf}\",[]]Aj[\"{{{AHEf{BFLl}}}JNf}\",[]]Aj[\"{{{AHEf{BFLn}}}JNf}\",[]]Aj[\"{{{AHEf{BGMb}}}JNf}\",[]]Aj[\"{{{AHEf{BGMl}}}JNf}\",[]]o[\"{A@lJNf}\",[]]n[\"{{}ND`}\",[]]0o[\"{OjAAId}\",[]]111Ba[\"{{AHEf{AHEf{c}}}AALh{}}\",[\"K\"]]0000000000000000000Cg[\"{{{AHEf{AAJf}}AIEl{AHEf{CL`}}}{{KBj{AIAbAOMn}}}}\",[]]Dl[\"{{{AHEf{CEdAAJh}}NEdAOLjAIEl{AHEf{CL`}}}{{KBj{{JNd{BDEfAIAh}}AON`}}}}\",[]]Bd[\"{{{AHEf{AAJn}}}{{KB`{BDEj}}}}\",[]]Dm[\"{{{AHEf{AGKf}}KBdCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANL`}}}}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Bd[\"{{{AHEf{AAK`}}}{{KB`{BDEl}}}}\",[]]Dm[\"{{{AHEf{AGKh}}KBfCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANLb}}}}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]o[\"{{}ANOd}\",[]]n[\"{{}IDj}\",[]]o[\"{{}ANKf}\",[]]o[\"{{}B@Nd}\",[]]o[\"{{}B@Of}\",[]]n[\"{{}KDf}\",[]]n[\"{{}KBd}\",[]]o[\"{{}AANl}\",[]]o[\"{{}AIBb}\",[]]o[\"{{}AGLb}\",[]]o[\"{{}BBLf}\",[]]n[\"{{}NIf}\",[]]o[\"{{}AOMb}\",[]]o[\"{{}BBNl}\",[]]o[\"{{}BEE`}\",[]]o[\"{{}BEFn}\",[]]o[\"{{}ANLn}\",[]]o[\"{{}BAMf}\",[]]o[\"{{}BFMn}\",[]]o[\"{{}BDHl}\",[]]o[\"{{}AGHh}\",[]]o[\"{{}ANLd}\",[]]o[\"{{}BAAj}\",[]]o[\"{{}BE@h}\",[]]o[\"{{}B@Nf}\",[]]o[\"{{}BGMb}\",[]]n[\"{{}KDh}\",[]]n[\"{{}KBf}\",[]]o[\"{{}AIDb}\",[]]o[\"{{}AI@n}\",[]]o[\"{{}AANn}\",[]]o[\"{{}AIBd}\",[]]o[\"{{}AGLd}\",[]]o[\"{{}BBLh}\",[]]n[\"{{}NIh}\",[]]o[\"{{}BB@h}\",[]]o[\"{{}AOMj}\",[]]o[\"{{}BBNn}\",[]]o[\"{{}BEEb}\",[]]o[\"{{}BEG`}\",[]]o[\"{{}ANM`}\",[]]o[\"{{}BAMh}\",[]]o[\"{{}BFN`}\",[]]o[\"{{}BGMl}\",[]]o[\"{{}BDHn}\",[]]o[\"{{}AGHj}\",[]]o[\"{{}ANLf}\",[]]o[\"{{}BAAl}\",[]]o[\"{{}BE@j}\",[]]o[\"{{}AALn}\",[]]n[\"{{}IDl}\",[]]o[\"{{}BBM`}\",[]]o[\"{{}B@Od}\",[]]Ak[\"{{{AHEf{BAB`}}}AONf}\",[]]Ak[\"{{{AHEf{BBMh}}}AONf}\",[]]Aa[\"{BGB`AONf}\",[]]Aa[\"{BEIjAONf}\",[]]A`[\"{CNfAONf}\",[]]A`[\"{ID`AONf}\",[]]A`[\"{IDdAONf}\",[]]Aa[\"{BDIfAONf}\",[]]Cg[\"{{{AHEf{AGKf}}KBdCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cg[\"{{{AHEf{AGKh}}KBfCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Aj[\"{{{AHEf{AIDj}}}D@n}\",[]]Aj[\"{{{AHEf{BEOf}}}D@n}\",[]]Ak[\"{{{AHEf{AIAj}}}BE@h}\",[]]Ai[\"{{{AHEf{O`}}}BE@h}\",[]]Aj[\"{{{AHEf{I@h}}}BE@h}\",[]]Aj[\"{{{AHEf{NF`}}}BE@h}\",[]]Ak[\"{{{AHEf{AIAl}}}BE@j}\",[]]Ai[\"{{{AHEf{Ob}}}BE@j}\",[]]Aj[\"{{{AHEf{I@j}}}BE@j}\",[]]Aj[\"{{{AHEf{NFb}}}BE@j}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLb}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLb}{{AHEf{CEdBBNn}}}}\",[]]Bf[\"{{{AHEf{CEdAIAj}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdO`}}NEdCLfCLf}HOj}\",[]]Bf[\"{{{AHEf{CEdAIAl}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdOb}}NEdCLfCLf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}KAf}\",[]]Bc[\"{{{AHEf{AALf}}}{{KB`{KBd}}}}\",[]]Aa[\"{BGB`AONf}\",[]]Aa[\"{BEIjAONf}\",[]]A`[\"{CNfAONf}\",[]]A`[\"{ID`AONf}\",[]]Aa[\"{BDIfAONf}\",[]]Aj[\"{{{AHEf{AIEf}}}NHb}\",[]]Bn[\"{{{AHEf{AIEh}}}{{KBj{{KB`{KDh}}AOMj}}}}\",[]]o[\"{A@lJNf}\",[]]o[\"{IDjJNf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}NHj}\",[]]Aj[\"{{{AHEf{AGKf}}}JNf}\",[]]Aj[\"{{{AHEf{AGKh}}}JNf}\",[]]A`[\"{AHEfKDd}\",[]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bd[\"{{{AHEf{BFGb}}}{{KB`{AIAf}}}}\",[]]Bc[\"{{{AHEf{BBAd}}}{{KB`{CNn}}}}\",[]]Bn[\"{{{AHEf{CEdAOLf}}CLd}{{AHEf{CEdAOLf}}}}\",[]]Bn[\"{{{AHEf{CEdAOLj}}CLd}{{AHEf{CEdAOLj}}}}\",[]]A`[\"{BGB`CLd}\",[]]A`[\"{BEIjCLd}\",[]]o[\"{CNfCLd}\",[]]o[\"{ID`CLd}\",[]]A`[\"{AGHnKB`}\",[]]Aa[\"{AANjAHEf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{BB@jAAJb}\",[]]A`[\"{JOnBB@h}\",[]]Aa[\"{AGLbAIBb}\",[]]Aa[\"{BBLfAIBb}\",[]]Aa[\"{AGLdAIBd}\",[]]Aa[\"{BBLhAIBd}\",[]]3210Bg[\"{{{AHEf{CEdc}}JNf}AONd{OhIDh}}\",[\"\"]]Bg[\"{{{AHEf{CEdc}}JNf}AONf{OhIDh}}\",[\"\"]]o[\"{{}BBMj}\",[]]o[\"{{}BBMl}\",[]]A`[\"{CLfBGMb}\",[]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANNdc}}}{}}\",[\"FromStr::Err\"]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANKdc}}}{}}\",[\"FromStr::Err\"]]o[\"{CLdKDf}\",[]]o[\"{CLdKDh}\",[]]Al[\"{CLf{{KBj{KDfBFFl}}}}\",[]]Al[\"{CLf{{KBj{KDhBFFn}}}}\",[]]Aa[\"{BFEdANKn}\",[]]Aa[\"{BHA`BA@b}\",[]]Aa[\"{BFEfANKn}\",[]]Aa[\"{BHAbBA@b}\",[]]Af[\"{{}{{KB`{Ab}}}}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBEFn}}AAJb}{{AHEf{CEdBEFn}}}}\",[]]Bo[\"{{{AHEf{CEdBEG`}}AAJb}{{AHEf{CEdBEG`}}}}\",[]]Ao[\"{{{Of{AIAj}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{O`}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@h}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NF`}}}{{Of{Nl}}}}\",[]]Ao[\"{{{Of{AIAl}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{Ob}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@j}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NFb}}}{{Of{Nl}}}}\",[]]Aj[\"{{{AHEf{BFGb}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBFMn}}AAJb}{{AHEf{CEdBFMn}}}}\",[]]Bo[\"{{{AHEf{CEdBFN`}}AAJb}{{AHEf{CEdBFN`}}}}\",[]]Bc[\"{{{AHEf{AIAb}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AIAf}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAJn}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAK`}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AGJ`}}}{{KB`{KAb}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bc[\"{{{AHEf{AGId}}}{{KB`{JNf}}}}\",[]]Am[\"{{{AHEf{ANOf}}JNf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}NFf}\",[]]Bg[\"{{{AHEf{AIEf}}}{{KBj{CCnAOMb}}}}\",[]]Bg[\"{{{AHEf{AIEh}}}{{KBj{CCnAOMj}}}}\",[]]A`[\"{B@OjKB`}\",[]]A`[\"{B@OlKB`}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{ANK`KB`}\",[]]Ck[\"{{{AHEf{CEdBAMf}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAMf}}}}\",[]]Ck[\"{{{AHEf{CEdBAMh}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAMh}}}}\",[]]A`[\"{BE@hKB`}\",[]]A`[\"{BE@jKB`}\",[]]Ac[\"{AHEfc{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]000000000000000000000000000000000000000000000000000Al[\"{JNf{{KBj{KDfBFFl}}}}\",[]]Al[\"{CLf{{KBj{KDfBFFl}}}}\",[]]2Al[\"{HOh{{KBj{KDfBFFl}}}}\",[]]33333333333333Aj[\"{AAJb{{KBj{ANLn}}}}\",[]]4444444Ai[\"{CLf{{KBj{AGJb}}}}\",[]]5555555555555555555555555555Aj[\"{AOLb{{KBj{BDHd}}}}\",[]]Bb[\"{{{Nn{AOLb}}}{{KBj{BDHd}}}}\",[]]7Bb[\"{{{Nn{B@Bd}}}{{KBj{BDHh}}}}\",[]]8Aj[\"{B@Bd{{KBj{BDHh}}}}\",[]]999999999999999999999Al[\"{CLf{{KBj{KDhBFFn}}}}\",[]]Al[\"{HOh{{KBj{KDhBFFn}}}}\",[]]Al[\"{JNf{{KBj{KDhBFFn}}}}\",[]]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Bm[\"{AOLb{{KBj{BDHfc}}}{}}\",[\"TryFrom::Error\"]]Ce[\"{{{Nn{AOLb}}}{{KBj{BDHfc}}}{}}\",[\"TryFrom::Error\"]]Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]00Ce[\"{{{Nn{B@Bd}}}{{KBj{BDHjc}}}{}}\",[\"TryFrom::Error\"]]Bm[\"{B@Bd{{KBj{BDHjc}}}{}}\",[\"TryFrom::Error\"]]22222222222222222222222Aj[\"{{}{{KBj{c}}}{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cd[\"{{{AAd{{AHEf{CEdc}}}}{AHEf{CEdNDb}}}COf{}}\",[\"F\"]]000000000Cc[\"{{{AHEf{BBAb}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bk[\"{{{AHEf{BFLl}}AONd}{{KBj{HOjAIBh}}}}\",[]]Bk[\"{{{AHEf{BFLn}}AONf}{{KBj{HOjAIBj}}}}\",[]]0Bk[\"{{{AHEf{BGMb}}AONf}{{KBj{HOjAIBj}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AAHn}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{KDfIB`}}}}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{COlIB`}}}}\",[]]Bh[\"{{{AHEf{CEdB@Ch}}}{{KBj{OlIB`}}}}\",[]]Bj[\"{{{AHEf{CEdB@Ch}}}{{KBj{AAMbIB`}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{KDh}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{COn}}}}\",[]]Be[\"{{{AHEf{CEdB@Ch}}}{{KC`{On}}}}\",[]]Bg[\"{{{AHEf{CEdB@Ch}}}{{KC`{AAMd}}}}\",[]]Aa[\"{ANKdBFFj}\",[]]Bc[\"{{{AHEf{AIAj}}}{{Of{AIAj}}}}\",[]]Ba[\"{{{AHEf{O`}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{I@h}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{NF`}}}{{Of{AIAj}}}}\",[]]Bc[\"{{{AHEf{AIAl}}}{{Of{AIAl}}}}\",[]]Ba[\"{{{AHEf{Ob}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{I@j}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{NFb}}}{{Of{AIAl}}}}\",[]]A`[\"{AANlCLf}\",[]]An[\"{{{AHEf{CEdAIAh}}}AGId}\",[]]A`[\"{AANnCLf}\",[]]C`[\"{{{AHEf{CEdAONd}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]C`[\"{{{AHEf{CEdAONf}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]Ah[\"{Nd{{KB`{AONn}}}}\",[]]Ah[\"{Nd{{KB`{AOO`}}}}\",[]]Ah[\"{Nd{{KB`{AOOb}}}}\",[]]A`[\"{AAMbCOl}\",[]]A`[\"{AAMdCOn}\",[]]Bi[\"{AIAb{{KBj{{JNd{AIAfBBOf}}AIAb}}}}\",[]]Aa[\"{{}c{}}\",[\"I\"]]o[\"{COlD@n}\",[]]o[\"{COnD@n}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]21Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}D@n}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}D@n}{{AHEf{CEdB@Bl}}}}\",[]]Bl[\"{{{AHEf{NGh}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{B@Cf}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{ANNj}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Ak[\"{{{AHEf{AIAf}}}AALd}\",[]]Bc[\"{{{AHEf{AIAf}}AIElAID`}AALf}\",[]]Ce[\"{{{AHEf{CEdAIAh}}AGJ`AIDbNEd}{{KBj{KBfAGKl}}}}\",[]]43Bm[\"{{{AHEf{CEdAIAh}}KBf}{{KBj{HOjAI@n}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdBFFf}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBDDf}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdAICn}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBENh}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]Ef[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Ec[\"{{{AHEf{CEdAIDj}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBj{JNfAGLh}}}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEdNGb}}}{{COf{{KBl{HOj}}}}}}\",[]]Fg[\"{{{AHEf{CEdBAKn}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Dn[\"{{{AAd{{AHEf{CEdAGM`}}}}{AHEf{AANj}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]>=Cd[\"{{{AHEf{CEdBAMf}}{Nn{NDn}}}{{AHEf{CEdBAMf}}}}\",[]]Cd[\"{{{AHEf{CEdBAMh}}{Nn{NE`}}}{{AHEf{CEdBAMh}}}}\",[]]Cj[\"{{{AHEf{B@Bj}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHh}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{B@Bn}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHj}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BGGl}}CLdAONb{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Bb[\"{JNf{{JNd{JNf{KB`{JNf}}}}}}\",[]]000Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]A`[\"{AHEfKDb}\",[]]00000000000000000000000000000000000000000000000000000000000000Ce[\"{{{AHEf{CEdB@Bh}}{Nn{BE@l}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{BE@n}}}{{AHEf{CEdB@Bl}}}}\",[]]A`[\"{BGB`ICf}\",[]]o[\"{B@BhNn}\",[]]o[\"{B@BlNn}\",[]]Aj[\"{{{AHEf{AAJf}}}HOj}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}JNf}\",[]]Ak[\"{{{AHEf{AIAf}}}AGGh}\",[]]Ba[\"{{{AHEf{CEdAANl}}AANl}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBb}}AIBb}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLf}}AGLb}HOj}\",[]]Ba[\"{{{AHEf{CEdAANn}}AANn}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBd}}AIBd}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLh}}AGLd}HOj}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bi[\"{{{AHEf{CEd}}}{{AHEf{CEdc}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bc[\"{{AHEf{AHEf{CEdc}}}HOj{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cc[\"{{{AHEf{CEdAIAh}}NEdKBfKDh}{{KBj{HOjBALd}}}}\",[]]A`[\"{AGHnD@n}\",[]]B`[\"{{AHEf{AHEf{c}}}D@n{}}\",[\"K\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Aa[\"{BBKhBEIf}\",[]]A`[\"{BDDjKDf}\",[]]Aa[\"{BBKlBEIh}\",[]]A`[\"{BDDnKDh}\",[]]A`[\"{BDOlKDh}\",[]]A`[\"{BBMnKDh}\",[]]o[\"{NGnKDh}\",[]]Aa[\"{BBKhAIBn}\",[]]Aa[\"{BBKlAIC`}\",[]]o[\"{KDfCLf}\",[]]o[\"{KDhCLf}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Aj[\"{{{AHEf{B@Od}}}D@n}\",[]]Bd[\"{{{AHEf{BAKn}}}{{KBl{AIEl}}}}\",[]]Bd[\"{{{AHEf{AAJf}}}{{KBl{AIEl}}}}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{BBLfCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLhCLf}\",[]]Cb[\"{{{AHEf{BBM`}}{AHEf{AIEd}}CLf}{{Nn{ANOf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AGLb}}}}\",[]]Bj[\"{{{AHEf{CEdAIAh}}KBf}{{KB`{AGLd}}}}\",[]]o[\"{AGIhOf}\",[]]Db[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]00Ec[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Eg[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBj{JNfAIGb}}}}}}\",[]]1Bm[\"{{{AHEf{IDl}}{AHEf{CNl}}}{{KBl{HOj}}}}\",[]]Cd[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cd[\"{{{AHEf{CEdBEOf}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cn[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{HOjBB@d}}}}\",[]]Bj[\"{{{AHEf{CNn}}AID`}{{KBj{HOjBEHl}}}}\",[]]Bn[\"{{{AHEf{CEdAIDd}}NEd}{{AHEf{CEdAIDd}}}}\",[]]Bn[\"{{{AHEf{CEdAIDf}}NEd}{{AHEf{CEdAIDf}}}}\",[]]A`[\"{BB@jAFd}\",[]]o[\"{IDjCLf}\",[]]o[\"{{}AIEl}\",[]]0o[\"{{}AHEf}\",[]]Bj[\"{{AAJn{Nn{B@Bh}}}{{KBj{AIAbBBKn}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bh[\"{{{AHEf{AGHn}}AIEl}{{KBn{AGMb}}}}\",[]]A`[\"{AGLbCLb}\",[]]Aj[\"{{{AHEf{AIAh}}}CLb}\",[]]A`[\"{AGLdCLb}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Aa[\"{AANfAIEl}\",[]]Aa[\"{AANhAIEl}\",[]]Aa[\"{AANjAIEl}\",[]]Aa[\"{AIElAGJ`}\",[]]o[\"{A@lCLb}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLb}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLb}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnCLb}\",[]]Bo[\"{{{AHEf{CEdBBNl}}AAJb}{{AHEf{CEdBBNl}}}}\",[]]Bo[\"{{{AHEf{CEdBBNn}}AAJb}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnKB`}\",[]]k[\"{{}}\",[]]0000000000Bh[\"{AAJnc{}}\",[\"IntoFuture::IntoFuture\"]]11A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{A@lJNf}\",[]]Ao[\"{{AHEfc}{{NEj{c}}}{}}\",[\"S\"]]0C`[\"{{{AHEf{CEdAIAj}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdO`}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]C`[\"{{{AHEf{CEdAIAl}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdOb}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bk[\"{{{AHEf{CEdIDl}}NEd{AHEf{BBM`}}}HOj}\",[]]A`[\"{BE@hKB`}\",[]]A`[\"{BE@jKB`}\",[]]Bn[\"{{{AHEf{KDf}}{AHEf{KDf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBd}}{AHEf{KBd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONd}}{AHEf{AONd}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COl}}{AHEf{COl}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{Ol}}{AHEf{Ol}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KDh}}{AHEf{KDh}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBf}}{AHEf{KBf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BABj}}{AHEf{BABj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BDEf}}{AHEf{BDEf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONf}}{AHEf{AONf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COn}}{AHEf{COn}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{On}}{AHEf{On}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}{{KB`{AALh}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AICn}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AIDbAI@n}}}}\",[]]Df[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{HOn}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Cc[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{AAj{Nd}}BB@f}}}}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIDl}\",[]]Aj[\"{{{AHEf{AGJh}}}JNf}\",[]]Aj[\"{{{AHEf{AGJj}}}JNf}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIEh}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLf}{{AHEf{CEdBBNn}}}}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{B@OjKB`}\",[]]A`[\"{B@OlKB`}\",[]]Ce[\"{{{AHEf{CEdB@Bh}}{Nn{AIFd}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{AIFf}}}{{AHEf{CEdB@Bl}}}}\",[]]Ce[\"{{{AHEf{CEdAOLf}}{Nn{AIFl}}}{{AHEf{CEdAOLf}}}}\",[]]Ce[\"{{{AHEf{CEdAOLj}}{Nn{AIFn}}}{{AHEf{CEdAOLj}}}}\",[]]o[\"{A@lCLf}\",[]]Bn[\"{{{AHEf{CEdBEFn}}CLb}{{AHEf{CEdBEFn}}}}\",[]]Bn[\"{{{AHEf{CEdBEG`}}CLb}{{AHEf{CEdBEG`}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BFGb}\",[]]Aj[\"{{{AHEf{CNn}}}BBAd}\",[]]Ai[\"{{{Nn{B@Bj}}}B@Bh}\",[]]Ai[\"{{{Nn{B@Bn}}}B@Bl}\",[]]Aj[\"{{BBMjc}BBMjAAMl}\",[\"\"]]Aj[\"{{BBMlc}BBMlAAMl}\",[\"\"]]Bm[\"{{{AHEf{CEdAIEf}}HOn}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}KAb}\",[]]o[\"{ND`ND`}\",[]]0000Bd[\"{{{AHEf{BFLl}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BFLn}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMb}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMl}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{AIAf}}}{{KB`{BBKn}}}}\",[]]Ck[\"{{{AHEf{AAJf}}AOLfAIEl{AHEf{CL`}}}{{KBj{AIAbAOMn}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{AIDhD@n}{{KBn{JNf}}}}\",[]]Cj[\"{{{AHEf{NGj}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFh}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Cj[\"{{{AHEf{NGl}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFj}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]A`[\"{BFEdAAj}\",[]]A`[\"{BHA`AAj}\",[]]A`[\"{BFEfAAj}\",[]]A`[\"{BHAbAAj}\",[]]An[\"{{{AHEf{CEdBFLl}}}AONd}\",[]]An[\"{{{AHEf{CEdBFLn}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMb}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMl}}}AONf}\",[]]Ak[\"{{{AHEf{BBAb}}}B@@f}\",[]]Ba[\"{{{AHEf{CEdAIAh}}BBLd}HOj}\",[]]Bo[\"{{{AHEf{CEdAAJh}}BDEfB@Od}{{KB`{BBLd}}}}\",[]]B`[\"{{{AHEf{NGj}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{B@Bj}}CLdAONd}{{KBj{CNbBEIn}}}}\",[]]Ba[\"{{{AHEf{AIFh}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{BDHh}}CLdAONd}{{KBj{CNbBEIn}}}}\",[]]B`[\"{{{AHEf{NGl}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{B@Bn}}CLdAONf}{{KBj{CNdBEJd}}}}\",[]]Ba[\"{{{AHEf{AIFj}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{BDHj}}CLdAONf}{{KBj{CNdBEJd}}}}\",[]]Bn[\"{{{AHEf{BGGl}}CLdAONb}{{KBj{CNdBEJd}}}}\",[]]Aj[\"{{}{{NGd{c}}}{}}\",[\"T\"]]0A`[\"{AGLbCLf}\",[]]A`[\"{BBLfCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLhCLf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}JNf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}JNf}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAKn}}}D@n}\",[]]0Aj[\"{{{AHEf{BBAb}}}D@n}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AGJ`AI@n}}}}\",[]]Cb[\"{{{AHEf{BBM`}}{AHEf{AIDh}}CLf}{{Nn{ANOf}}}}\",[]]Ak[\"{{{AHEf{AAJn}}}AONd}\",[]]Ak[\"{{{AHEf{AAK`}}}AONf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{NEd}}}}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{Nn{ANMl}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{ANMn}}}{{AHEf{CEdBBNn}}}}\",[]]43A`[\"{A@lANNd}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Ai[\"{{{AHEf{NHj}}}JNf}\",[]]Bo[\"{{{AHEf{CEdBGMb}}AAJb}{{AHEf{CEdBGMb}}}}\",[]]Bo[\"{{{AHEf{CEdBGMl}}AAJb}{{AHEf{CEdBGMl}}}}\",[]]Bj[\"{{{AHEf{AIEf}}CCn}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}CCn}{{KBj{HOjAOMj}}}}\",[]]==E`[\"{{{AHEf{BGBb}}{AHEf{{JL`{Nd}}}}{AHEf{BAL`}}{AHEf{BFM`}}}{{KBj{BGDhIAh}}}}\",[]]0Bf[\"{{{Nn{BAC`}}}{{KBj{AOLfBFG`}}}}\",[]]Bf[\"{{{Nn{BAC`}}}{{KBj{AOLjBFG`}}}}\",[]]Bn[\"{{{AHEf{CEdBEE`}}KDf}{{AHEf{CEdBEE`}}}}\",[]]Bn[\"{{{AHEf{CEdBEEb}}KDh}{{AHEf{CEdBEEb}}}}\",[]]o[\"{ND`ND`}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]0Ci[\"{{{AHEf{CNn}}{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@h}}}}\",[]]Cd[\"{{{AHEf{CEdA@l}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cc[\"{{{AHEf{CEdOj}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAAId}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAGHn}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdA@n}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdAA`}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bh}}BFMn}{{AHEf{CEdB@Bh}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bl}}BFN`}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAMf}}}CLf}\",[]]Aj[\"{{{AHEf{BAMh}}}CLf}\",[]]Cc[\"{{{AHEf{CEdAOLf}}{Nn{A`}}}{{AHEf{CEdAOLf}}}}\",[]]Cc[\"{{{AHEf{CEdAOLj}}{Nn{A`}}}{{AHEf{CEdAOLj}}}}\",[]]Cj[\"{{BAMf{KB`{B@Bh}}{Of{BAKn}}{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Ca[\"{{{AHEf{CEdAIAh}}NEdAICd}{{KBj{HOjBGAh}}}}\",[]]Bd[\"{{{AHEf{BGBb}}}{{AAj{BBNb}}}}\",[]]Bl[\"{{{AHEf{AIAf}}AIElNd}{{KBj{HOjIBh}}}}\",[]]Bo[\"{{{AHEf{CEdAIAh}}AIElNd}{{KBj{HOjIBh}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}JNf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}JNf}{{AHEf{CEdBBNn}}}}\",[]]Bl[\"{{}{{KBj{{JNd{BAL`BEGj}}{Of{IAd}}}}}}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{{AHEf{AAJf}}AOLf}HOj}\",[]]Dc[\"{{{AHEf{CEdAIAh}}NEdKBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]o[\"{{}AHEf}\",[]]Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}CLf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}CLf}{{AHEf{CEdB@Bl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}KDf}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}KDh}{{AHEf{CEdBBNn}}}}\",[]]:Bb[\"{{{AHEf{CEdAIAh}}OnKDh}HOj}\",[]]Ak[\"{{}{{KBj{AOLfIBb}}}}\",[]]Ak[\"{{}{{KBj{AOLjIBd}}}}\",[]]Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]65Cg[\"{{{AHEf{CEdA@l}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cf[\"{{{AHEf{CEdOj}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAAId}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAGHn}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdA@n}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdAA`}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Bi[\"{{{AHEf{CEdAGJ`}}{AHEf{AGJ`}}}D@n}\",[]]n[\"{{}HOj}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{KB`{JNf}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{KB`{JNf}}}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Cd[\"{{{AHEf{CEdAIAh}}NEd}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Am[\"{{{AHEf{CEdAIAj}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@h}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIAl}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@j}}}HOj}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]D`[\"{{{AHEf{CEdAIAh}}KBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]Ce[\"{{{AHEf{CEdBBNl}}{Nn{BE@d}}}{{AHEf{CEdBBNl}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{BE@f}}}{{AHEf{CEdBBNn}}}}\",[]]Cf[\"{{{AHEf{CEdBBNl}}{KB`{AAJb}}}{{AHEf{CEdBBNl}}}}\",[]]Cf[\"{{{AHEf{CEdBBNn}}{KB`{AAJb}}}{{AHEf{CEdBBNn}}}}\",[]]Aa[\"{B@OjAICb}\",[]]Aa[\"{B@OlAICb}\",[]]9Bn[\"{{{AHEf{CEdBBNl}}D@n}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Am[\"{{{AHEf{AIAf}}KDf}HOj}\",[]]o[\"{ND`ND`}\",[]]Bn[\"{{{AHEf{CEdBBNl}}CLd}{{AHEf{CEdBBNl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLd}{{AHEf{CEdBBNn}}}}\",[]]3109854Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Bn[\"{{{AHEf{AIAh}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]10A`[\"{BEOdKB`}\",[]]Bm[\"{{{AHEf{CEdBBNl}}Nd}{{AHEf{CEdBBNl}}}}\",[]]Bm[\"{{{AHEf{CEdBBNn}}Nd}{{AHEf{CEdBBNn}}}}\",[]]o[\"{{}AICd}\",[]]") \ No newline at end of file diff --git a/pr/571/docs/search.index/root.js b/pr/571/docs/search.index/root.js index 973d62e46..57f5ffcc9 100644 --- a/pr/571/docs/search.index/root.js +++ b/pr/571/docs/search.index/root.js @@ -1 +1 @@ -rr_('{"normalizedName":{"I":"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","N":"ADBg","E":"OjAAAAAAAAA=","H":"EsWEWAg0"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBg","E":"OjAAAAAAAAA=","H":"+RVafadn"},"path":{"N":"BAo","E":"OzAAAAEAAAcSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5Dh0BWA8AAGMPAQBpDwMAbw8BAHIPAQB1DwEAfA8DAIEPQQDEDwIAyQ8WAOYPAQDpDwIA9A8BAPkPBAD/DwIABhAEAA0QAAAcEBIAMBAgAFIQHgBzEAMAexAAAH4QAQCBEAEAhBAHAJAQAQCVEAEAmxADAKAQAACiEAIAphA3AOQQBQDtEAEA8hAFAPsQBQAFEQEAChFQAFwRAABgEQAAZREBAGgRAQBvEQAAeBEBAHsRAwCAEaEAIxIAACUSAAAoEgEAKxIAAC4SAwAzEgoAPxIBAEcSAgBLEhgAZRIXAH4SAgCHEgEAkRIRAKQSAgCpEgMArhIHALgSAwC9EgUAxxICAM0SAADPEgEA0hIbAO8SAgD0EgQA+xIfAB0TCwArEwQAMxMAADkTJQBgEwQAaBMFAHATGgCMEwIAkRMQAKQTFwC+EwoAzBMFANMTFADpEwMA7hMXAAkUHQA=","H":"tf4W8H1m"},"entry":{"N":"ACAo","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5bD14PaA93D3sPww/HD8gP4A/hD+0P8A/+DwIQBRAMEA4QERASEBcQGBAbEC8QURB3EIAQjhCSEJMQlxCfEKEQ3xDgEOIQ4xDsEPEQ+hBkEWoRbhFwEXERdBF3EX8RJxIsEjISPhJKEmQSfRKLEo0SvBLDEsQSxRLMEu4SGxMcEykTKhM0EzcTXxNnE6IToxPJE9ITBxQIFA==","H":"K9SQ4NQp"},"desc":{"N":"FNl","E":"OzAAAAEAADoNhgEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACoCAAA6AgAAPAICAEECAABGAgIASgIAAFECBABZAgAAYQIAAGMCAQBqAgAAbwIAAHECAAB0AgAAdgIAAHsCAACBAgAAjQIAAJICBQCZAgQAtgIEAL8CAADTAgAA2AIAAN0CAADjAgEA6wIAAPECAAD6AgAA/wIAAAEDAAAJAwAADgMAABMDAAAYAwkAIwMAADADAAA/AxQAOwQEAEEEAABFBAAARwQAAEkEAABLBAAATQQMAFsEAABfBAAAYQQAAGQEAABtBAAAcAQAAHYEAQB5BAUAgQQBAIUECgCUBAAAmgQAAJ8EAAChBAAAowQFAKoEAQCtBAIAsQQDALwEhgBHBQQAVAUBAFcFAgBfBQAAYQUFAGwFAABvBQMAdwUDAHwFAQCDBQUAiwUBAI8FAQCTBQQAnAUBAJ8FAgCoBeYAkgYBAJUGAQCYBgAAmgYAAJwGAQCgBgAApAYAAKcGCACxBgEAtQYLAMQGAADLBgEAzgYBANQGAgDYBgMA7AYCAPAGAADyBgEA9QYLAAYHAQARBwAAFQcCABkHAgAfBwQAKQcAACwHAgAxBwAAMwcHAD4HAABFBwAARwcBAE8HAABSBxkAdAcwAKYHAQC4BwIAvAcCAMMHAADFBwAAyAcBANEHAADTBwAA1wfmAMcIBADNCAAA0AgBANQIAADYCAEA3wgBAOMIAQDtCAAA9wgBAPwIBAAPCQEAGQkEAB8JAAAjCQIAJwkCADIJAQA1CQIAQwm6AAAKAAACCk0AUwpgAbgLAQC8CwQAxQsBAMgLAADLCwAAzgsAANALAQDVCwAA1wsBANwLAADeCwAA5QsBAOgLAQDrCwkA9gsCAPoLAwABDAEACQwAABQMAwAcDAEAHwwEACUMAAAoDAIALgwAADAMBQA3DD4AeQwAAH4MAACADAEAgwwAAIcMAACJDAAAjgwBAJIMAACVDAEAmAwFAJ8MAACjDAAAqQwAAKwMBAC7DAUAwwxtATIOAQA3DvcAQg8AAEgPAwBNDwEAVQ8BAFgPAwBeDwAAYw8BAGgPAABrDwEAbw8EAHUPAgB5DwIAfQ8DAJEPDwCiDwEApQ8AAKcPAQCrDxMAww8AAMcPAQDdDwEA4A8BAO0PAADwDwAA8w8AAPwPAwACEAAABRAAAAcQAwAMEAAADhAAABEQAQAXEAEAGxAFACMQAQAoEAIALBAAAC4QAQA2EAEAPRABAEEQBABQEAIAVRABAFoQAQBlEAMAdxAAAH4QAgCHEAMAjhAAAJAQAwCVEAIAnBABAJ8QAAChEAAApRAAAKcQAgCvEAIAsxACALcQBgDDEAAAzxABANMQCQDfEAEA4hABAOwQAADxEAAA9BABAPoQAAD9EAMABBEAAAwRAAAOEQAAEBEAABURAAAXEQMAHBEAAB4RAAAgEQAAIxEAACURAAAnEQAAKxEAAC4RAAAwEQAAMhEAADYRAAA4EQIAPhEAAEARAABNEQEAVREAAFgRAgBcEQAAZBECAGgRAgBuEQAAcBEBAHQRAAB3EQAAfxGHAA0SBAATEgAAGRIBABwSAQAfEgAAIRIAACMSAAAlEgAAJxIAACwSAAAyEgAAOBIGAEoSAABNEgEAUBICAFUSAQBZEgUAYhICAGwSAABxEgAAfRIAAIsSAACNEgAAkRIDAJwSAwCjEgEAuRIAALwSAgDDEgIAxxICAMwSAADSEgQA4RIBAO4SAQDyEgAA9BIDAP8SBAAHEwAACRMAABITAgAWEwIAGxMBAB4TAAAhEwMAKRMBADQTAAA3EwAAPRMGAFMTAABWEwEAXRMCAGETAABkEwAAZxMAAHwTAQCNEwEAkBMBAJQTAACWEwAAnBMDAKITAQCqEwQAshMFALwTAQDGEwAAyRMAANITAADXEwMA5BMAAPITBQD5EwAA/xMAAAEUAQAHFAEAERQAABUUAAA=","H":"qFWkrVd+"},"function":{"N":"A@Jc","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFcPAABZDxgAdA8HAIAPAADDDwAAxw8BAN0PIQAAEBsALxAAAFEQAQBvECsAnxACAKUQAADZEDAAWhElACISKQBkEgEAexIbAKMSAAClEhMAuhIXAO4SAADyEgsAGxMCACUTEwBfEwAAYhMAAGUTCgCBEw8AohMFALoTAwDHEwsA3hMAAOgTBQAGFAQA","H":"27yx6+zu"},"type":{"N":"AJl","E":"OzAAAAEAAHoSnAACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAAAjAQAAJQEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACrBLMAYAUQAHMFAgB3BQUAfwUFAI0FAQCZBQYApAV6ASEHBAAoBwAALQcBADEHAAAzBwMAPwcAAEEHAgBFBwQATAd7AMkH/ADICAAAyggBAM0IAgDVCAAA2AgBANsIBQDlCAAA5wgAAOoIAgDwCAEA+Qi/AroLAAC8CwMAwQsBAMULAADHCwAAzAsAANILAADWCwMA3AsAAN4LAADiCwAA5QsBAOkLQAArDFIAgAwCAIQMAQCHDAAAjgwBAJIMAACbDAIArwwAALoMnAJYDwAAYw8BAGgPBABvDwEAcg8BAHUPAgB8D2MA5g8BAOkPAgD0DwEA+Q8IAAYQBAANEAAAHBBUAHMQBAB7EAAAfhABAIEQAQCEEAcAkBABAJUQAQCbEEIA4hAAAOQQBQDsEAIA8hAFAPsQBQAFEQEAChFQAFwRAABgEQAAZREBAGgRAgBvEQAAeBEBAHsRpgAjEgAAJRIAACgSAQArEgAALhIDADMSCgA/EgEARxICAEsSMQB+EgIAhxIBAIsSAACNEgAAkRIVAKkSAwCuEgcAuBIDAL0SBQDEEgAAxxICAM0SAADPEgEA0hIfAPQSBAD7Ei0AKxMEADMTAAA5EysAaBMFAHATGgCMEwIAkRMQAKQTFwC+EwoAzBMFANMTFADpEwMA7hMXAAkUHQA=","H":"PmtGE8B2"},"alias":{"N":"`","E":"OzAAAAEAACYUAQAAACYU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"9aRB+vFv"}}') \ No newline at end of file +rr_('{"normalizedName":{"I":"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","N":"ADBg","E":"OjAAAAAAAAA=","H":"EsWEWAg0"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBg","E":"OjAAAAAAAAA=","H":"+RVafadn"},"path":{"N":"BAo","E":"OzAAAAEAAAcSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5Dh0BWA8AAGMPAQBpDwMAbw8BAHIPAQB1DwEAfA8DAIEPQQDEDwIAyQ8WAOYPAQDpDwIA9A8BAPkPBAD/DwIABhAEAA0QAAAcEBIAMBAgAFIQHgBzEAMAexAAAH4QAQCBEAEAhBAHAJAQAQCVEAEAmxADAKAQAACiEAIAphA3AOQQBQDtEAEA8hAFAPsQBQAFEQEAChFQAFwRAABgEQAAZREBAGgRAQBvEQAAeBEBAHsRAwCAEaEAIxIAACUSAAAoEgEAKxIAAC4SAwAzEgoAPxIBAEcSAgBLEhgAZRIXAH4SAgCHEgEAkRIRAKQSAgCpEgMArhIHALgSAwC9EgUAxxICAM0SAADPEgEA0hIbAO8SAgD0EgQA+xIfAB0TCwArEwQAMxMAADkTJQBgEwQAaBMFAHATGgCMEwIAkRMQAKQTFwC+EwoAzBMFANMTFADpEwMA7hMXAAkUHQA=","H":"tf4W8H1m"},"entry":{"N":"ACAo","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5bD14PaA93D3sPww/HD8gP4A/hD+0P8A/+DwIQBRAMEA4QERASEBcQGBAbEC8QURB3EIAQjhCSEJMQlxCfEKEQ3xDgEOIQ4xDsEPEQ+hBkEWoRbhFwEXERdBF3EX8RJxIsEjISPhJKEmQSfRKLEo0SvBLDEsQSxRLMEu4SGxMcEykTKhM0EzcTXxNnE6IToxPJE9ITBxQIFA==","H":"K9SQ4NQp"},"desc":{"N":"FNl","E":"OzAAAAEAADoNhgEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACoCAAA6AgAAPAICAEECAABGAgIASgIAAFECBABZAgAAYQIAAGMCAQBqAgAAbwIAAHECAAB0AgAAdgIAAHsCAACBAgAAjQIAAJICBQCZAgQAtgIEAL8CAADTAgAA2AIAAN0CAADjAgEA6wIAAPECAAD6AgAA/wIAAAEDAAAJAwAADgMAABMDAAAYAwkAIwMAADADAAA/AxQAOwQEAEEEAABFBAAARwQAAEkEAABLBAAATQQMAFsEAABfBAAAYQQAAGQEAABtBAAAcAQAAHYEAQB5BAUAgQQBAIUECgCUBAAAmgQAAJ8EAAChBAAAowQFAKoEAQCtBAIAsQQDALwEhgBHBQQAVAUBAFcFAgBfBQAAYQUFAGwFAABvBQMAdwUDAHwFAQCDBQUAiwUBAI8FAQCTBQQAnAUBAJ8FAgCoBeYAkgYBAJUGAQCYBgAAmgYAAJwGAQCgBgAApAYAAKcGCACxBgEAtQYLAMQGAADLBgEAzgYBANQGAgDYBgMA7AYCAPAGAADyBgEA9QYLAAYHAQARBwAAFQcCABkHAgAfBwQAKQcAACwHAgAxBwAAMwcHAD4HAABFBwAARwcBAE8HAABSBxkAdAcwAKYHAQC4BwIAvAcCAMMHAADFBwAAyAcBANEHAADTBwAA1wfmAMcIBADNCAAA0AgBANQIAADYCAEA3wgBAOMIAQDtCAAA9wgBAPwIBAAPCQEAGQkEAB8JAAAjCQIAJwkCADIJAQA1CQIAQwm6AAAKAAACCk0AUwpgAbgLAQC8CwQAxQsBAMgLAADLCwAAzgsAANALAQDVCwAA1wsBANwLAADeCwAA5QsBAOgLAQDrCwkA9gsCAPoLAwABDAEACQwAABQMAwAcDAEAHwwEACUMAAAoDAIALgwAADAMBQA3DD4AeQwAAH4MAACADAEAgwwAAIcMAACJDAAAjgwBAJIMAACVDAEAmAwFAJ8MAACjDAAAqQwAAKwMBAC7DAUAwwxtATIOAQA3DvcAQg8AAEgPAwBNDwEAVQ8BAFgPAwBeDwAAYw8BAGgPAABrDwEAbw8EAHUPAgB5DwIAfQ8DAJEPDwCiDwEApQ8AAKcPAQCrDxMAww8AAMcPAQDdDwEA4A8BAO0PAADwDwAA8w8AAPwPAwACEAAABRAAAAcQAwAMEAAADhAAABEQAQAXEAEAGxAFACMQAQAoEAIALBAAAC4QAQA2EAEAPRABAEEQBABQEAIAVRABAFoQAQBlEAMAdxAAAH4QAgCHEAMAjhAAAJAQAwCVEAIAnBABAJ8QAAChEAAApRAAAKcQAgCvEAIAsxACALcQBgDDEAAAzxABANMQCQDfEAEA4hABAOwQAADxEAAA9BABAPoQAAD9EAMABBEAAAwRAAAOEQAAEBEAABURAAAXEQMAHBEAAB4RAAAgEQAAIxEAACURAAAnEQAAKxEAAC4RAAAwEQAAMhEAADYRAAA4EQIAPhEAAEARAABNEQEAVREAAFgRAgBcEQAAZBECAGgRAgBuEQAAcBEBAHQRAAB3EQAAfxGHAA0SBAATEgAAGRIBABwSAQAfEgAAIRIAACMSAAAlEgAAJxIAACwSAAAyEgAAOBIGAEoSAABNEgEAUBICAFUSAQBZEgUAYhICAGwSAABxEgAAfRIAAIsSAACNEgAAkRIDAJwSAwCjEgEAuRIAALwSAgDDEgIAxxICAMwSAADSEgQA4RIBAO4SAQDyEgAA9BIDAP8SBAAHEwAACRMAABITAgAWEwIAGxMBAB4TAAAhEwMAKRMBADQTAAA3EwAAPRMGAFMTAABWEwEAXRMCAGETAABkEwAAZxMAAHwTAQCNEwEAkBMBAJQTAACWEwAAnBMDAKITAQCqEwQAshMFALwTAQDGEwAAyRMAANITAADXEwMA5BMAAPITBQD5EwAA/xMAAAEUAQAHFAEAERQAABUUAAA=","H":"qFWkrVd+"},"function":{"N":"A@Jc","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFcPAABZDxgAdA8HAIAPAADDDwAAxw8BAN0PIQAAEBsALxAAAFEQAQBvECsAnxACAKUQAADZEDAAWhElACISKQBkEgEAexIbAKMSAAClEhMAuhIXAO4SAADyEgsAGxMCACUTEwBfEwAAYhMAAGUTCgCBEw8AohMFALoTAwDHEwsA3hMAAOgTBQAGFAQA","H":"YmpHvzI7"},"type":{"N":"AJl","E":"OzAAAAEAAHoSnAACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAAAjAQAAJQEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACrBLMAYAUQAHMFAgB3BQUAfwUFAI0FAQCZBQYApAV6ASEHBAAoBwAALQcBADEHAAAzBwMAPwcAAEEHAgBFBwQATAd7AMkH/ADICAAAyggBAM0IAgDVCAAA2AgBANsIBQDlCAAA5wgAAOoIAgDwCAEA+Qi/AroLAAC8CwMAwQsBAMULAADHCwAAzAsAANILAADWCwMA3AsAAN4LAADiCwAA5QsBAOkLQAArDFIAgAwCAIQMAQCHDAAAjgwBAJIMAACbDAIArwwAALoMnAJYDwAAYw8BAGgPBABvDwEAcg8BAHUPAgB8D2MA5g8BAOkPAgD0DwEA+Q8IAAYQBAANEAAAHBBUAHMQBAB7EAAAfhABAIEQAQCEEAcAkBABAJUQAQCbEEIA4hAAAOQQBQDsEAIA8hAFAPsQBQAFEQEAChFQAFwRAABgEQAAZREBAGgRAgBvEQAAeBEBAHsRpgAjEgAAJRIAACgSAQArEgAALhIDADMSCgA/EgEARxICAEsSMQB+EgIAhxIBAIsSAACNEgAAkRIVAKkSAwCuEgcAuBIDAL0SBQDEEgAAxxICAM0SAADPEgEA0hIfAPQSBAD7Ei0AKxMEADMTAAA5EysAaBMFAHATGgCMEwIAkRMQAKQTFwC+EwoAzBMFANMTFADpEwMA7hMXAAkUHQA=","H":"lUcno1uV"},"alias":{"N":"`","E":"OzAAAAEAACYUAQAAACYU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"9aRB+vFv"}}') \ No newline at end of file diff --git a/pr/571/docs/search.index/type/3e6b4613c076.js b/pr/571/docs/search.index/type/3e6b4613c076.js deleted file mode 100644 index c66a8ea12..000000000 --- a/pr/571/docs/search.index/type/3e6b4613c076.js +++ /dev/null @@ -1 +0,0 @@ -rd_("CBg[\"\",\"ADswAAABAAAFAAIAOwQEAPkTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwTElcSbBLYE+QTAhQRFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAWElgS6hKXE5gT2xP+E/8TABQBFBQUGBQ7MAAAAQAALAESAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAADIMAwC7DAUAqg2GADkQAACyEAcAEREAAIARhgAXEgAAGRIAAKESAADrEgAAChMAADowAAABAAAAAAAdABAAAABaBWAFYQViBcIGwwbKBssGzAbNBs4Gzwa1C7YLtwu4CwgMTg9SD2MQyBASEh4TWxNcE3IT0xPXE+UTAxQ7MAAAAQAAPQAUAD8DFABmBAAAcgQCAEMFAQBGBQAAWwUBAHUFAAC1BgwAwgcDALQLAAAeDAAAqA8AANwPAABkEAAAChEAAKISAADmEgMAUxMAANQTAAAEFAAAOzAAAAEAAFcADQDbAD0AigEBAGUEAABwBwAAcwcAALIHAAC0BwAAKxADAEwSBQBDEwAAcxMAALITBQDFEwAAOzAAAAEAABUABwBMBAAAfQwAADEOAACkDwMAFBIAABETBwDyEwUAOzAAAAEAABMACQBiBAEAawQBANMGBwCxBwAAswcAAEgPAgBRDwAAwxAAAHoSAAADEgcAABMHAABpEgAAAScMAAAEbQcAAG8HAAByBwAAJQwAAAA7MAAAAQAABQACAMIBAACSEwQAAAABpwUAAA==\"]Bo[\"AAAAAAAAAAACwBMAAMETAAAAAAAAAqIQAACjEAAA\",\"\"]0Bg[\"\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAA=\"]AGg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAADQAFAHMFAQA/CQEALQwEAH0MAAA9EQMAOjAAAAEAAAAAAAsAEAAAAGsEbASxB7MHUQ9tEG4QLxEwETERMhF6EgRcBAAAEgcAABMHAADBDwAABEIEAABEBAAAnhMAAJ8TAAAFYQQAAG8HAAByBwAASw8AAE0PAAADIwwAACQMAABMDwAAOzAAAAEAAAYAAwDCAQAAsAYAAJITBAAB7xIAAAEmDAAA\",\"AAAAAVkRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAA==\"]ANg[\"AAAEUgIAALgCAACfBgAAowYAAAMDDAAABAwAAAUMAAACswEAAMMBAAA7MAAAAQAAhgABAIARhgAAOzAAAAEAAAcAAwBDBQEA5hIDACQUAQAEcAcAAHMHAACyBwAAtAcAADswAAABAAASAAcAcwUBAOgGAAA/CQEALQwEAH0MAAA9EQMAHhIDADowAAABAAAAAAAKABAAAABiBGMEawRsBLEHswdRDy8RMBExETIRBVwEAABeBQAAEgcAABMHAADEEAAABEIEAABEBAAAnhMAAJ8TAAAEbwcAAHIHAABLDwAATQ8AAATFBgAAIwwAACQMAABMDwAABZITAACTEwAAlBMAAJUTAACWEwAAAe8SAAAAAacFAAA=\",\"AAAAAAACSAUAAEkFAAAAAgEMAAACDAAAAcIPAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAAAAAAAAA94GAAAYEQAAGREAAA==\"]Dc[\"\",\"AAAAADswAAABAAAHAAEAIgkHADswAAABAAAJAAIAvhAEABMRBAAAARIRAAA=\"]ADm[\"AAAABrABAACyAQAAvwEAAMEBAADYDwAA2Q8AAAS2AQAAyQEAADYKAAA4CgAAOjAAAAEAAAAAAAkAEAAAALEBtwG4AcABygHLAaYKqgqgE6ETOzAAAAEAAA0ABACsBAcAfA8AAGkQAwByEwAAArsBAACiEgAAOzAAAAEAABUACgCmAQEArQEAACsMAQB2DAEAzw8DAFgQAQByEgMAQxMAAMATAQALFAEAAcITAAAAAAAAAAAAAAGnBQAA\",\"AAABqwEAAAK0BAAABxIAAAAAAAJCDwAAUBAAAAAAAAAAAAAAAAAEoQYAAKUGAAB6DAAAewwAAA==\",1]Fk[\"AAAABOsEAAAVBwAAuAcAABwRAAACIwkAAPYLAAABsxAAAAABwwcAAAELAQAAAqUPAAASEwAAAdQGAAA=\",\"AAAAAesEAAABtgEAAA==\"]Fk[\"AAAABDUFAAAZBwAAvAcAACMRAAACJwkAAPoLAAABtxAAAAGOAQAAAcUHAAAAAqcPAAAWEwAAAdgGAAA=\",\"AAAAATUFAAAByQEAAA==\"]AEa[\"AAAAAq4BAAC6AQAAOzAAAAEAAAcAAQAiCQcAAARgBQAAYQUAAGIFAAASEgAAAAABwhMAAAAAAAKiEAAAoxAAAA==\",\"AAAAADswAAABAAAQAAMAlgYAACIJBwD1CwcAOzAAAAEAAAsABAD2BgAApBAAAL4QBAATEQQAOzAAAAEAAA8ABQCsBAcAEwwCABsSAgBTEgAA1xMAADowAAABAAAAAAAKABAAAADOENAQ0hDUENYQEhE1ETYRNxE4EVMTBCsQAAAsEAAALRAAAC4QAAAAAAXNEAAAzxAAANEQAADTEAAA1RAAAAAAAAAAAAKnBQAARw8AAA==\",1]Ec[\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCADswAAABAAAGAAIApwYEAAoJAQADXgQAAFMFAABUBQAA\",\"\"]Dg[\"AAAAAAAAAAABsxMAAAHzEwAAAAAAAAAAAAABVAcAAA==\",\"AAAAAAABWhIAAAE+EwAA\"]Eo[\"AAAAAekEAAABtQEAAAIqAAAAmQAAAAGwDwAAAUQDAAACBgEAAAcBAAA=\",\"AAABqAAAAAHpBAAAAQATAAAAAe0LAAA=\"]Ic[\"AAAAASsFAAADxwEAABoTAACZEwAAAlgAAACmAAAABnsBAAB8AQAAQwQAAKYFAAC9DwAA5RMAAAFRAwAA\",\"AAABqQAAAAIrBQAAAhMAAAAB8QsAAAAAAAAAAAAAAAAAAAKqAAAAqwAAAA==\"]Ik[\"AAAAArwEAABxEgAAAfMGAAABkwYAAAGyAAAAAQoRAAABshMAAAIUEgAA8hMAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAGcFkQZRB9IHig+hD9MPXBCmEEER\",\"AAAAAbwEAAAAAVkSAAABPRMAAA==\"]Ck[\"AAAAAd0BAAAAAAAAAbYTAAAB9hMAAA==\",\"AAAAAAABXRIAAAFBEwAA\"]Ck[\"AAAAAd4BAAAAAAAAAbcTAAAB9xMAAA==\",\"AAAAAAABXhIAAAFCEwAA\"]Kk[\"AAAAAAAABFoFAABgBQAAYQUAAGIFAAAAOzAAAAEAAAkAAQCqCwkAOzAAAAEAAA0AAQBMBA0AOzAAAAEAAAkABAAfDAMASA8CAMMQAADXEAEAAAEnDAAAAyUMAABLDwAATQ8AAAIjDAAATA8AAA==\",\"AAAAAAABpBAAAAMTDAAAFAwAABUMAAA=\"]Nk[\"AAAAAAAAAngSAAB5EgAABOYSAADnEgAA6BIAAOkSAAAC7BIAAO0SAAAF6AYAAB4SAAAfEgAAIBIAACESAAACYgQAAGMEAAACXgUAAMQQAAAAAAHFBgAAAAAAAacFAAA=\",\"AAAAAAJWBQAAxhMAAAAF/BMAAB8UAAAgFAAAIRQAACIUAAABUxMAAALCDwAA/RMAAAAAAAAAAAAAAAQwEAAAMRAAADIQAAAzEAAA\"]Bg[\"AAAAAAAAAARWEQAAVxEAAHYTAAB3EwAA\",\"\"]Bk[\"\",\"AAAAAVURAAAAAAAAAAAAAAAAAAAAAAFVDwAA\"]Cc[\"AAAAAAAAAWMQAAABZBAAAA==\",\"AAAAAAACOQkAADoJAAA=\"]FGo[\"AAAAADswAAABAAAVAAkADAIGAEoEAABrBQAA1AcAAP8LAAA0EAMAWBIAAJcTAQD+EwMAOzAAAAEAABMCEgBBBAAAWgQAAGAEAADJBgAA7wsDALsMBQDDDG0BxA8AAMkPAAA5EAAAVxAAALIQBwAREQAAgBGGABcSAAAZEgAA6xIAAE4TAAA7MAAAAQAAwwAPALIAKAAZAXAAjAEPAEMEAABaBQAApgUAAKwGAwCxBgIAwgYBAOsLAwBGDwAAHhMAAD0TBQDlEwAA+BMAADswAAABAACiAEIAPwMUAF0EAABnBAEAcgQCAEYFAABbBQEAdQUAAKcGBAC1BgwAvwcBAMIHAwDACAEACgkBACAJAQArCQEAAQwBABEMAQAeDAAAwQwBAEMPAQBTDwEAiw8BAI4PAQCoDwAAyg8BANQPAQDcDwAAOhAAAEoQAQBhEAEAZBAAAMkQAQASEQAAHREAAB8RAAAhEQAAJBEAACYRAAAoEQAAMxEFAEIRAQBFEQIAVhEBAAgSAQBqEgEAohIAANcSAQDdEgEA5hIDAAQTAQBEEwEAVBMBAFgTAQB2EwEAfhMBAKgTAQC4EwEA1BMCAOATAwDuEwMABBQAABIUAQAWFAEAGRQBAB0UAQAkFAEAOzAAAAEAAI8AJgDbAD0AigEBAKYBAQBABAAAXgQAAGUEAABTBQEAbQUBAHAHAABzBwAAsgcAALQHAACqCwkAKwwBAHYMAQBPDwEAhA8BAMIPAADPDwMAWBABAKwQAQDFEAEAFRIAAGASAQByEgMA7BIBAA0TAQA5EwEATBMBAE8TAwBzEwAAshMFAMATAQDFEwAA+hMBAP0TAAALFAMAGxQBADswAAABAAAxAA0ATAQNAHMFAQDoBgAAPwkBABsMAAB9DAAAMQ4AAKQPAwA9EQMAHhIDABETBwBJEwEA8hMFADswAAABAAAcAA0AYgQBAGsEAQDTBgcAsQcAALMHAAAfDAMASA8CAFEPAABtEAEAwxAAANcQAQB6EgAABRQAADowAAABAAAAAAAHABAAAABcBF4FwQ/EEDsRPBFpEtwTA0IEAABEBAAAJwwAADowAAABAAAAAAAIABAAAABhBG0HbwdyByUMSw9ND6IQoxAExQYAACMMAAAkDAAATA8AADswAAABAAAFAAIAsAYAAJITBAAAASYMAAABpwUAAA==\",\"AAAAAAA7MAAAAQAA5gABAMMM5gAAOjAAAAEAAAAAAFkAEAAAAGcEaAS/B8AHwAjBCCAJIQkrCSwJAQwCDBEMEgzBDMIMQw9ED1MPVA+LD4wPjg+PD8oPyw/UD9UPShBLEGEQYhDJEMoQHREfESERJBEmESgRMxE0EUIRQxFWEVcRCBIJEmoSaxLXEtgS3RLeEgQTBRNEE0UTVBNVE1gTWRN2E3cTfhN/E6gTqRO4E7kT1RPWE+AT4RPiE+MT7hPvE/AT8RMSFBMUFhQXFBkUGhQdFB4UJBQlFDswAAABAAAvABQApgEBAG0FAQArDAEAdgwBAIQPAQDPDwMAWBABAKwQAQDFEAEAYBIBAHISAwDsEgEADRMBADkTAQBMEwEATxMDAMATAQD6EwEACxQDABsUAQAEPwkAAEAJAABJEwAAShMAAAACOxEAADwRAAAAAqIQAACjEAAA\"]Ic[\"AAAAARoRAAAABFcFAAAPCQAAEAkAABESAAA7MAAAAQAADAADAHUEBQDKBgUAkRMAAAADbAcAAMUQAADGEAAAASYQAAAAB80QAADPEAAA0RAAANMQAADVEAAAOxEAADwRAAAAAW0HAAA=\",\"\"]Lk[\"AAACUwIAALYCAAAAArYBAADJAQAAOzAAAAEAAAsAAwC3AQEAygEBALIQBwA7MAAAAQAABwABAKwEBwA6MAAAAQAAAAAABwAQAAAAvwfAB4sPjA/UD9UPMxE0EQACSRMAAEoTAAA=\",\"AAAAAYIPAAAAAAAAAAAAAAAAAAAAAAWBDwAAgw8AAIoPAACNDwAASxMAAA==\"]AAg[\"AAAEVQIAALcCAAARCQAAEgkAAASsAQAAtAEAALkBAADGAQAAAlkCAAC/AgAAAAA6MAAAAQAAAAAAEwAQAAAAZwRoBMAIwQg8ED4QQBBCEEMQzhDQENIQ1BDWEGoSaxIWFBcUGRQaFALsEgAA7RIAAAUtDAAALgwAAC8MAAAwDAAAMQwAAAAFzRAAAM8QAADREAAA0xAAANUQAAAAAAACwgEAALAGAAA=\",\"AAAAAAAAAAAAAAAAAAAAAAAABMIIAADDCAAAxAgAAMUIAAA=\"]BLk[\"AAADDgkAANkSAADaEgAABaoBAAAYCgAAVREAAN8SAADgEgAAOjAAAAEAAAAAAAcAEAAAALUBxwETCRQJ/wlQCnoKFhIBFxIAAAEeEwAAOjAAAAEAAAAAABEAEAAAAMIHwwfEB8UHQg/KD8sPUBAdER8RIREkESYRKBFEE0UT4BPhEwFDEwAAOzAAAAEAAAsAAgCkDwMAERMHADswAAABAAAJAAMA0wYHALEHAACzBwAAAAACbwcAAHIHAAA=\",\"AAAETQUAAE4FAAA4DwAAOQ8AADswAAABAAAWAAsAFAcHABsRAQAeEQAAIBEAACIRAQAlEQAAJxEAAAoSAQBwEwEAdBMAAL4TAQACGhMAAJkTAAABERIAAAAAAAAAAAAAAAAAADowAAABAAAAAABvABAAAACgAaEBowGkAQICAwIJAgoCSQRLBG0EtgS5BKAGpAbRBtIGBgcHB/wI/QgyCTMJ/gsADBYMFwwcDB0MKAwpDD4PPw9AD0EPVg99D34Pnw+gD9MPKBApEEYQRxBIEEkQVRBWEFoQWxBlEGYQnBCdEKYQqBCpEK8QsBC6ELsQvBC9EDkROhFNEU4RDRIOEg8SEBJVElYSYhJjEm4ScBKXEpgSmRKaEpwSnRKeEp8S2xLhEuIS4xL+Eg8TEBMZEx8TIBMhEyITIxMkEzsTPBNWE1cTXRNeE3wTfROcE50T2RPaEw==\"]Ac[\"AAAAAAEwAwAA\",\"\"]Ca[\"AAAAAAJZAgAAvwIAADswAAABAAAFAAEATxEFAA==\",\"\",1]Ek[\"AAAAAAAAAAAAAAAAAAAAAAAAAsYGAADcBgAA\",\"AAAAAAACOxAAAD0QAAAAAjwQAAA+EAAAAAIeEgAAHxIAAA==\"]Eo[\"AAAAAAAAAAAAAAAAAAAAAAAAAscGAADdBgAA\",\"AAAAAAACPxAAAEEQAAAAA0AQAABCEAAAQxAAAAACIBIAACESAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAABXAAAACkAQAArQcAAMwHAADECAAA\",\"\"]Bg[\"AAAAAAAAAU4PAAAAAAAAAjsRAAA8EQAA\",\"\"]Gk[\"AAAABGEAAADFBAAAagUAANcPAAABDgIAAAYOAAAASAQAAEUFAAAEBwAASxEAAJsTAAACxwAAAFIPAAAAAloTAACxEwAA\",\"AAAAAcUEAAABvwgAAAFGBAAA\"]Ic[\"\",\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAwxAAANcQAQAAAScMAAADJQwAAEsPAABNDwAAAyMMAAAkDAAATA8AAAAAASYMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Hk[\"AAAD0AEAAAoMAAANDAAAAegEAAABtQEAAAQpAAAAmAAAADsQAAA9EAAAAa8PAAABQwMAAAMFAQAADREAAA4RAAA=\",\"AAAC0AEAAAYMAAACaQQAAOgEAAAB/xIAAAAB7AsAAA==\"]Hk[\"AAAD0QEAAAsMAAAODAAAASoFAAABxwEAAARXAAAApQAAAD8QAABBEAAAAnoBAAC8DwAAAVADAAADXgQAAA8RAAAQEQAA\",\"AAAC0QEAAAcMAAADagQAACoFAAABEwAAAAHwCwAA\"]2ALo[\"AAAAAAEqEAAAAAA6MAAAAQAAAAAAEQAQAAAAuwFdBBEMEgzBDMIMQw9ED8kQyhAIEgkS7hPvExIUExQdFB4UAmUEAABDEwAAOzAAAAEAAAsAAgCkDwMAERMHADswAAABAAAHAAEA0wYHAAAAAAACwgEAALAGAAA=\",\"AAAHTwUAAFAFAAAKDAAACwwAAA0MAAAODAAAGBIAADowAAABAAAAAAAXABAAAAC1B7YHHgkqCQwMDwwQDDoPOw9MEE0QThCbEBoRKhErESwRLREuEUYTrxOwE8MTxBM7MAAAAQAA+QACADkO9QAGEwMAOzAAAAEAAFkABAALAFUA3BIAAAsTAQB1EwAAAfgTAAAAAAQ9EQAAPhEAAD8RAABAEQAABC8RAAAwEQAAMREAADIRAAABaRIAAAAAAAAAAAdxBAAAZwUAANAGAAA2DgAAnhAAAK4QAABBEQAA\"]Dk[\"AAAAAAIBCgAAUQoAAAAAADswAAABAAAFAAEATBIFAAACYgQAAGMEAAAAAkIEAABEBAAA\",\"\"]BNo[\"\",\"ADswAAABAAAFAAIAOwQEAPkTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwTElcSbBLYE+QTAhQRFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAWElgS6hKXE5gT2xP+E/8TABQBFBQUGBQ7MAAAAQAAKAERAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAALsMBQCqDYYAORAAALIQBwAREQAAgBGGABcSAAAZEgAAoRIAAOsSAAAKEwAAOjAAAAEAAAAAABsAEAAAAFoFYAVhBWIFwgbDBsoGywbMBs0GzgbPBrULtgu3C7gLTg9SD2MQyBASEh4TWxNcE3IT0xPlEwMUOzAAAAEAADsAEgA/AxQAZgQAAHIEAgBDBQEARgUAAFsFAQB1BQAAtQYMAMIHAwC0CwAAHgwAAKgPAADcDwAAZBAAAKISAADmEgMA1BMAAAQUAAA7MAAAAQAAUgALANsAPQCKAQEAZQQAAHAHAABzBwAAsgcAALQHAABMEgUAcxMAALITBQDFEwAAOzAAAAEAABQABgBMBAAAfQwAADEOAACkDwMAERMHAPITBQA7MAAAAQAAEwAJAGIEAQBrBAEA0wYHALEHAACzBwAASA8CAFEPAADDEAAAehIAAAISBwAAEwcAAAEnDAAAA28HAAByBwAAJQwAAAAFkhMAAJMTAACUEwAAlRMAAJYTAAA=\"]Bc[\"AAAAAAAAAAAAAAACOxEAADwRAAA=\",\"\"]Kc[\"AAAAAAHlEgAAADswAAABAAAGAAIAygYFAMgQAAACRgUAANwPAAABZQQAAAADbRAAAG4QAAB6EgAAAcEPAAA=\",\"AAAAAAABYAQAADswAAABAAAFAAEAdQQFAAAAAAAAAAAAAAAABwsCAAC1BAAAuAQAAN8GAADgBgAA4QYAAOIGAAA=\"]Do[\"AAAAAAABGAAAAAAAAd8AAAAAAAAAAAAAAAACtQQAANEGAAA=\",\"AAAAAAAAAAACTw8AAFAPAAA=\"]Dk[\"AAAAAAABMAAAAAEfAQAAAAAAAAAAAAAAAAACuAQAANIGAAA=\",\"AAAAAAAAAAABQAQAAA==\"]Ac[\"AAABYQIAAA==\",\"\"]Fg[\"AAAABO0EAAAWBwAAuQcAAB4RAAADJAkAAPcLAAD/EwAAAbQQAAAAAAENAQAAARMTAAAB1QYAAA==\",\"AAAAAe0EAAAAAbcBAAA=\"]Fg[\"AAAABDcFAAAaBwAAvQcAACURAAADKAkAAPsLAAABFAAAAbgQAAABkAEAAAAAARcTAAAB2QYAAA==\",\"AAAAATcFAAAAAcoBAAA=\"]Bk[\"\",\"AAAAAAAAAAA7MAAAAQAAPwACANsAPQCKAQEA\"]Ck[\"\",\"AAAAAAGWBgAAOzAAAAEAAAkAAgD2BgAA+AYIAAHXEwAAAVMTAAA=\"]Bo[\"\",\"AAAAAAAAAAAAAAAAAp4TAACfEwAAAAAAAe8SAAA=\"]Ck[\"AAACYwIAAHQCAAA=\",\"AAAAAAAAAmATAABhEwAAAAACPREAAD4RAAA=\"]Eo[\"\",\"AAAAAAA7MAAAAQAABQABAFkSBQA7MAAAAQAABQABAD0TBQAAOzAAAAEAAAUAAQCyEwUAOzAAAAEAAAUAAQDyEwUA\"]Cc[\"\",\"AAAAAAL/EgAAABMAAAAE6wsAAOwLAADtCwAA7gsAAA==\"]Eo[\"AAAAAfEEAAAAAS0AAAAAAAIVAQAAFgEAAA==\",\"AAA7MAAAAQAACgACAJICBQCZAgQAAvEEAADmEwAAAAABeBIAAA==\"]Eo[\"AAAAATEFAAAAAV8AAAAAAAKKAQAAiwEAAA==\",\"AAA7MAAAAQAACgACABgDCQAjAwAAAjEFAADnEwAAAAABeRIAAA==\"]Dg[\"AAAB/wIAAAEwBQAAAAFdAAAAAoUBAACGAQAA\",\"AAABDgMAAAEwBQAAAAAAAAFeBAAA\"]Eo[\"AAAAAAAAApUBAACWAQAA\",\"AAAAAAAAB9MTAAD8EwAAAxQAAB8UAAAgFAAAIRQAACIUAAAC1BMAAAQUAAAB/RMAAA==\"]Bk[\"AAAAAAAAAUUBAAA=\",\"AAAB2AIAAAAAAVoEAAA=\"]Bg[\"AAAAATsFAAAAAAGXAQAA\",\"AAAAATsFAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAXgMAAA=\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA64HAADNBwAAxQgAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAnEEAACvBwAA\",\"\"]Cc[\"AAAAAAAAAAIKCQAACwkAAAAAAAAAAAACwgEAALAGAAA=\",\"\"]Fo[\"AAAAAAACVwUAABkSAAAAAAAAAAAAAAAAAAAE0wcAAFYPAABnEAAAWBEAAA==\",\"AAF1BwAAAAAAAAAAAAAAAAAAAAAAAAJoEAAADBEAAA==\"]Bk[\"AAAAAVkFAAAAAAFODwAAAagPAAA=\",\"AAGmBwAA\"]Bg[\"AAAAAAAABGkQAABqEAAAaxAAAGwQAAA=\",\"\"]Ag[\"AAAAAq4BAAC6AQAA\",\"\"]Dg[\"AAAAAAAAAAAAAj8JAABACQAA\",\"AAAAAAAAAAAABS0MAAAuDAAALwwAADAMAAAxDAAA\"]AEg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAACwAEAHMFAQAtDAQAfQwAAD0RAwA6MAAAAQAAAAAACwAQAAAAawRsBLEHswdRD20QbhAvETARMREyEXoSBFwEAAASBwAAEwcAAMEPAAAEQgQAAEQEAACeEwAAnxMAAAVhBAAAbwcAAHIHAABLDwAATQ8AAAMjDAAAJAwAAEwPAAA7MAAAAQAABgADAMIBAACwBgAAkhMEAAHvEgAAASYMAAA=\",\"AAAAAVkRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAAAAACQgQAAEQEAAA=\"]He[\"\",\"AAAAAAAEMgwAADMMAAA0DAAANQwAAAIIDAAA1xMAAAIKEQAAUxMAAAUrEAAALBAAAC0QAAAuEAAAQxMAAAEUEgAAAAFpEgAAAAFtBwAAAAHCAQAAAAABpwUAAA==\",1]AMk[\"AAACvAEAAMUBAAAGrAEAALQBAAC5AQAAxgEAAN8SAADgEgAABFgFAAA3CQAA/gkAAFIKAAAEMgwAADMMAAA0DAAANQwAAAJbEwAAXBMAADowAAABAAAAAAAHABAAAAAKCQsJShBLENcS2BLVE9YTOjAAAAEAAAAAAAkAEAAAAEAEcAdzB7IHtAdPD1APwg/6E/sTAAKxBwAAswcAAA==\",\"AAAAOjAAAAEAAAAAABAAEAAAAKIBTQdOB08HUAfVB9YHNgzFD8YPYBDLEMwQZhJnEqAS3xMDNAkAACoQAACbEgAABjIMAAAzDAAANAwAADUMAABtEgAAbxIAAAAAAAJzBQAAdAUAAAACXAQAAMEPAAAAA2EEAABLDwAATQ8AAAMjDAAAJAwAAEwPAAAAAAImDAAAggwAADowAAABAAAAAAALABAAAAClAW4EbwS3BLoEjwaQBggHUQfSB9MHoQ8=\"]Bg[\"AAAAAAAAAAAAAVcEAAA=\",\"AAAAAaQFAAA=\"]Bk[\"AAAAAAAAADswAAABAAANAAIAdQUAALUGDAA=\",\"\"]Cc[\"AAABAQkAAAABEgIAAAAAAAFABAAA\",\"AAAAAAAAAAFdBAAA\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAbAGAAA=\",\"\"]Be[\"AAAAAAAAA2AFAABhBQAAYgUAAA==\",\"\",1]Bg[\"AAAAAAAAADswAAABAAAUAAEAPwMUAA==\",\"\"]Dk[\"AAAAAAHIAQAA\",\"AAAAAAUtCQAALgkAAC8JAAAwCQAAMQkAAAAAAAAAAAAAAAAAAAH/DwAA\"]Cc[\"AAAAAcQEAAAAAQ0AAAACvwAAAMAAAAA=\",\"AAAAAcQEAAA=\"]Bg[\"AAAAAAAAAAAAAVIEAAA=\",\"AAAAAcYHAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWYAAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAaoAAAA=\",\"\"]C@i[\"AAAAAAHIAQAAAaESAAABchMAAAK7AQAAohIAADowAAABAAAAAAAbABAAAACtAW0FbgWED4UPrBCtEGASYRINEw4TORM6E0wTTRNPE1ATURNSE1oTcxOxE/oT+xMNFA4UGxQcFDswAAABAAAGAAMAPwkBAKQPAwDCEwAAAQUUAAAB3BMAAAAAAcUGAAAAAAABpwUAAA==\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAAEAwwAAAQMAAAFDAAABxIAADowAAABAAAAAAAXABAAAACcAakEbgdxB8cHvgi/CC0JLgkvCTAJMQk0CSEQIhAjECQQJRCbEqQSBhMHEwgTCRM7MAAAAQAAIAAOANkBAADbAQAAQQQAAEYEAABaBAAAYAQAAPgGCAAyDAMARQ8AAFcQAAC+EAQAExEEAOQSAABOEwAAOzAAAAEAACMACQBDBAAAdQQFAKYFAADQBwAARg8AAKsPEwBTEgEAYBMBAGMTAQA7MAAAAQAACAAEADoQAAA1EQMARRECAHsTAAA7MAAAAQAADAAGAEAEAABPDwEAKxADAA0RAwBaEwAAsRMAAAQeEgAAHxIAACASAAAhEgAAOzAAAAEAAAYAAwAfDAMA1xABAAUUAAAEXAQAAMEPAADEEAAA3BMAAAAAAcUGAAABwgEAAAAAOjAAAAEAAAAAABwAEAAAAKwArQCuAK8Apga0BgEHAgcDB/oIOwk8CT0JPglBCUIJkA+pD6oPzA/ND84PXRBeEF8QRBEMEoATIxQ=\",1]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Jo[\"AAAAAc8EAAAAOjAAAAEAAAAAAAcAEAAAABkAlQDZAUYERQ9QEVMRCxMCrA8AAFMSAAACQAMAALYGAAAC4AAAAOEAAAAAAbEHAAAAAAFvBwAA\",\"AAF6BwAAAANhAAAAYgAAAM8EAAACWQIAAMcHAAACUBEAAFMRAAAAAagGAAA=\"]A@c[\"AAAAAfgEAAAABzIAAACdAAAA2wEAAFIRAABUEQAA5BIAAAwTAAAHIgEAACMBAABGDwAAtA8AAMAPAABPEAAAVBIAAARIAwAAuwYAAB4MAAB7EwAAARUSAAABMQ4AAAKzBwAABRQAAAHcEwAAAAFyBwAA\",\"AAGPBwAAAAH4BAAAAr8CAABWBQAAAlIRAABUEQAAAa0GAAAAAAEbDAAAAAFpEgAAAAAAAAAABWYAAABnAAAAaAAAAGkAAABqAAAA\"]Bo[\"\",\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwA=\"]CCm[\"\",\"AAA7MAAAAQAA5gABAMMK5gA7MAAAAQAA7QAMAMoJMwAACgAAAgozADcKAAA5ChYAUwofAHQKBQB7CikApwoCAKwKFgBSEgAA5hMBADowAAABAAAAAAASABAAAABdBaUFlgYTCRQJ/gn/CQEKNgo4ClAKUQpSCnMKegqlCqsK/xIAEzowAAABAAAAAAASABAAAABIBEUF9gYEBzkJOgmmCqoKSxFZEloSWxJcEl0SXhIKE5sToBOhEzowAAABAAAAAAApABAAAADCBsMG0Ae1C7YLtwu4C+sL7AvtC+4LCAxSD3wPwA9PEGMQaRBqEGsQbBDIEHgSeRI9Ez4TPxNAE0ETQhNgE2ETYxNkE9MT1xP8EwMUHxQgFCEUIhQ6MAAAAQAAAAAAGgAQAAAAXQRyBHMEdARbBVwFpwaoBqkGqgarBh4M3A88ED4QQBBCEEMQZBASEUURRhFHEVMTexPUEwQUOzAAAAEAAFkADwDbAD0AigEBAEAEAABeBAAAZQQAAFMFAQBsBwAATw8BAMIPAAAVEgAATBIFAFoTAACxEwYAxRMAAP0TAAA7MAAAAQAAEQAIAHMFAQAbDAAAfQwAADEOAAAmEAAAPREDAEkTAQDyEwUAOjAAAAEAAAAAAAgAEAAAAGIEYwRRD20QbhDXENgQehIFFDowAAABAAAAAAALABAAAABcBF4FEgcTB8EPzRDPENEQ0xDVEGkS3BMEQgQAAEQEAACeEwAAnxMAAANtBwAAbwcAAHIHAAACJAwAAEwPAAA7MAAAAQAABgADAMIBAACwBgAAkhMEAAHvEgAAAAGnBQAA\",1]Le[\"\",\"AAAAAswBAACUBgAAA/QGAAA8DwAAPQ8AAAPmBgAAbRIAAG8SAAA6MAAAAQAAAAAABwAQAAAATg8SEhsSHBIdElsTXBOREwJmBAAAtAsAAAGtAQAAAcITAAAESA8AAEkPAABKDwAAwxAAAAABJwwAAARhBAAAJQwAAEsPAABNDwAAASMMAAAAAAEmDAAA\",1]Gc[\"\",\"AAAAOjAAAAEAAAAAAAcAEAAAAN0B3gETEmwS2BPkEwIUERQC8wYAACoQAAAFkwYAAA8JAAAQCQAAfw8AABESAAABHhMAAAEKEQAAAUMTAAA=\"]Bo[\"\",\"AAAAAgETAAACEwAAAATvCwAA8AsAAPELAADyCwAA\"]Bk[\"\",\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCAA==\"]Fc[\"AAAAAcQBAAAAAAAABG0FAABuBQAAhA8AAIUPAAA=\",\"AAA7MAAAAQAAPgABADcMPgAAAAAAAAAAAAAAAAAAAAAB4wYAAA==\"]Ao[\"\",\"AAA7MAAAAQAA5gABANcH5gA=\"]A@o[\"AAAEagIAAHsCAACBAgAAOA8AAAHNBAAAA+oSAAAUFAAAGBQAAAMWAAAAlAAAAE8RAAABqw8AADowAAABAAAAAAAMABAAAAA/A3IEcwRDBUQFWwW1BkIRVBN+E6gT4hPwEwLbAAAA3AAAAA==\",\"AAF5BwAAOzAAAAEAAAYAAwBRAgQAEQkAANkSAAABzQQAAAQTCQAA/gkAAP8JAAABCgAAAU8RAAAB6wsAAAOnBgAARREAAEYRAAAAAAAAAAAAAAAAATAPAAA=\"]AAk[\"AAAE3QIAAAEDAAAJAwAAOQ8AAAH1BAAAAAQuAAAAmwAAAFERAADrEgAABBsBAAAcAQAAsg8AAOUTAAA6MAAAAQAAAAAACgAQAAAARgN0BEYFXAW6BkMRVRN/E6kT4xPxEwABMQ4AAA==\",\"AAGOBwAAOzAAAAEAAAYAAwC2AgQAEgkAANoSAAAB9QQAAAQUCQAAUAoAAFEKAABSCgAAAu8LAABREQAAAqwGAADQBwAAAUcRAAAAAAAAAAAAAAAABDIPAAAzDwAANA8AADUPAAA=\"]Gc[\"AAA7MAAAAQAACwAEABwQBAADEwAAqhMEABUUAAA=\",\"ADswAAABAAAJAAMAUgcBAFUHAgDSEgQAOzAAAAEAAAsABAAcEAQAAxMAAKoTBAAVFAAA\"]Ic[\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAwxAAANcQAQAAAScMAAADJQwAAEsPAABNDwAAAyMMAAAkDAAATA8AAAAAASYMAAA=\",\"\"]Cc[\"AAAAArABAADLEAAAAAAAAAErDAAAAAFrBAAAARIHAAA=\",\"\"]Cc[\"AAAAAr8BAADMEAAAAAAAAAEsDAAAAAFsBAAAARMHAAA=\",\"\"]ABg[\"AAAAAvASAADxEgAAAAW3AQAAuAEAAMoBAADLAQAAEREAADswAAABAAALAAMArAQHAFoFAAATDAIAOjAAAAEAAAAAAAcAEAAAAEYFwgfDB8QHxQdTD1QPqA8HDREAAA4RAAAPEQAAEBEAAHMTAADFEwAA/RMAADswAAABAAANAAQAGwwAADEOAACkDwMAERMHADswAAABAAAHAAEA0wYHAAPEEAAAaRIAANwTAAAAAW0HAAABxQYAAAAAAAGnBQAA\",\"AAAAA9MBAADUAQAA1QEAAAABVxAAAA==\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUQUAAOkGAAA=\",\"AAAAAAAAAAI1EQAANhEAAAAAAAAAAAAAAAACxgYAANwGAAA=\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUgUAAOsGAAA=\",\"AAAAAAAAAAI3EQAAOBEAAAAAAAAAAAAAAAACxwYAAN0GAAA=\"]Ak[\"\",\"AAAAAAKiDwAAow8AAA==\"]Eo[\"AAAABO8EAAAXBwAAugcAACARAAACJQkAAPgLAAABtRAAAAAAAQ8BAAABFBMAAAHWBgAA\",\"AAAAAe8EAAAAAbgBAAA=\"]Eo[\"AAAABDkFAAAbBwAAvgcAACcRAAACKQkAAPwLAAABuRAAAAGSAQAAAAABGBMAAAHaBgAA\",\"AAAAATkFAAAAAcsBAAA=\"]Bg[\"AAAAAAAAAAAAAVEEAAA=\",\"AAAAATgJAAA=\"]Ag[\"AAACrwEAAL4BAAA=\",\"\"]Ao[\"AAAAAAAAAAAAAAAAAAElDAAA\",\"\"]Ag[\"\",\"AAACRBAAAEUQAAA=\"]Bg[\"AAAAAAAAAAAAARQSAAA=\",\"AAABbwAAAA==\"]Dg[\"AAAAAtMBAADUAQAAAAADYAUAABMMAAAbEgAAAAGtAQAAAcITAAA=\",\"AAAAAQcSAAA=\"]Hg[\"AAAAASoRAAABBhMAAAM7EAAAvxAAABQRAAABYBMAAAE1EQAAASsQAAACPREAAB4SAAABLxEAAAAAAAABkxMAAA==\",\"AAAAAAAAAALOEAAA0BAAAAAAAALNEAAAzxAAAA==\"]Ig[\"AAAAAS0RAAABCBMAAAM/EAAAwRAAABYRAAABYxMAAAE3EQAAAS0QAAACPxEAACASAAABMREAAAAAAAABlRMAAA==\",\"AAAAAAELEQAAAAAD0hAAANQQAADWEAAAAAAAA9EQAADTEAAA1RAAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAm4AAAA1DwAA\",\"\"]Bk[\"AAAAAAAAAdoAAAAAAAFZBAAA\",\"AAAAAc8HAAA=\"]Cc[\"AAAAAWAQAAABGhMAAAACQwQAAKYFAAA=\",\"AAAAAAHUBwAA\"]Ek[\"AAAAAdQEAAAAAR0AAAAAAAHmAAAAAAAAAAAAAAAAArcEAACPBgAA\",\"AAF/BwAAAAHUBAAAAAAAAAAAAW0QAAA=\"]Ek[\"AAAAAQUFAAAAAT0AAAABNAEAAAAAAAAAAAAAAAAAAroEAACQBgAA\",\"AAGWBwAAAAEFBQAAAAAAAAAAAW4QAAA=\"]Be[\"AAAAAAA7MAAAAQAAhgABAIARhgA=\",\"\",1]Bg[\"AAAAAAAAAAAAAVQEAAA=\",\"AAAAAeoLAAA=\"]Ec[\"AAAAAAAAAAAAAAAAAAJvBwAAcgcAAAHFBgAAAsIBAACwBgAA\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Dk[\"AAAAAAAAAAABtBMAAAH0EwAA\",\"AAAAAAABWxIAAAE/EwAAAAAAAAAAAAAAAAABVAcAAA==\"]Dg[\"AAAAAR0FAAAAAAJfAQAAYAEAAAG+BgAAAAAAAAAAAAAAAAELAgAA\",\"AAAAAR0FAAA=\"]ABc[\"AAAAA6oBAAAQCgAAVREAAAPEBgAAcwoAALEQAAAAADowAAABAAAAAAANABAAAAAgCSEJKwksCY4Pjw9hEGIQ3RLeEgQTBRNYE1kTOzAAAAEAAA8ABwCsEAEATBIFAA0TAQBaEwAAsRMAAA0UAQAbFAEAAAEFFAAAAdwTAAA=\",\"AAAAA50BAACoAQAAJxAAAAQhEAAAIhAAACMQAAAkEAAAAtkBAADbAQAAAAACWhMAALETAAAAAQUUAAAB3BMAAAAAAAAAAATaAQAA3AEAAP4IAABYEQAA\"]Bk[\"AAAAAAHzBgAA\",\"AAAAAAAAAAEKEQAAAAEUEgAA\"]Ho[\"AAAABcIEAABpBQAApAUAAHwMAABmEgAAAj0PAADbEwAAAuYGAAChEgAAA70AAAASEgAAchMAAAFEBQAAAWwHAAABJhAAAA==\",\"AAAAAsIEAACUBgAAAfQGAAAAAAABrQEAAAHCEwAA\"]Gc[\"AAAAAmcSAAB0EwAAAZsGAAAByQYAAAEaAQAAAjoQAACiEgAAAAHoBgAAAAFeBQAAAAFtBwAAAcUGAAAAAAABpwUAAA==\",\"AAAAAAAAAAG7AQAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAW0AAAA=\",\"\"]Fg[\"AAADyAYAAOcGAACcDwAABA8MAABTEAAAShEAAMMTAAAFDQIAAF0FAAClBQAAbgcAAC8JAAAAAsMAAAB8DwAA\",\"AAABqhAAAA==\"]Fg[\"AAAABBAMAABUEAAATBEAAMQTAAACcQcAADAJAAAByQYAAAFiAQAAAAAB6AYAAAABXgUAAAAAAAAAAAGnBQAA\",\"AAABqxAAAA==\"]Dg[\"AAAAASIFAAAAAVEAAAABawEAAA==\",\"AAAAASIFAAAAAAAAAAAAAAAAAAAAAAFwAAAA\"]Bk[\"AAAAAAEMAgAAAAAAAAFOBAAA\",\"AAAAARkMAAA=\"]Cc[\"AAAAAAHHBwAAAAAAAAFPBAAA\",\"AAAAAAACGgwAAGgSAAA=\"]Dk[\"\",\"AAAAADswAAABAAATAAEAWAcTADswAAABAAATAAEAlAATADswAAABAAATAAEAqw8TAA==\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWsAAAA=\",\"\"]Fg[\"AAAAATwFAAAAAAGZAQAAAAAAAAAAAWEEAAAAAAABJgwAAAauAAAApQEAAAUCAAC0BgAACAcAAAwSAAA=\",\"AAGlBwAAAAE8BQAA\"]Hk[\"AAAEqAAAAFECAABNBQAABgwAAAHqBAAAAAIrAAAAmgAAAAGxDwAAAkUDAAC5BgAAAggBAAAJAQAA\",\"AAABgQIAAARjAAAAZAAAAGUAAADqBAAAAbUBAAAAAe4LAAABqwYAAA==\"]Kc[\"AAAEqQAAALkCAABOBQAABwwAAAEsBQAAAARZAAAApwAAAMQPAADJDwAAA30BAAB+AQAAvg8AAAJSAwAAwAYAAA==\",\"AAABCQMAAAEsBQAAAccBAAAB8gsAAANDBAAApgUAALIGAAAAAAAAAAAAAAAAAARrAAAAbAAAAG0AAABuAAAA\"]Ak[\"AAAAAALaDwAA2w8AAA==\",\"\"]Ao[\"AAAAAAAAAAACpgEAAEwSAAA=\",\"\"]Ao[\"AAAAAAAAAAACpwEAAE8SAAA=\",\"\"]Dc[\"AAAAAAAAAAABCgEAAAAAAAAAAAAAAAWsAAAAbgQAAAEHAACGDwAAXRAAAA==\",\"\"]Fc[\"AAAAAAAAAX8BAAAAAAAAAAAAAAAAAAWtAAAAbwQAAAIHAACHDwAAXhAAAA==\",\"AAAAAAAAAAAAAegGAAAAAl4FAADEEAAA\"]Fc[\"AAAAAT0FAAAAAAGaAQAAAmYEAAC0CwAAAAAAAAEnDAAAAAAAAAAFrwAAAAMHAAD7CAAAiA8AAF8QAAA=\",\"AAAAAT0FAAA=\"]Hg[\"AAABjQAAAAHQBAAAAAIaAAAAuwwAAAAAAeIAAAAAAAAAAAAAAAADoAEAALYEAAD+CwAA\",\"AAF7BwAAAAHQBAAAAAAAAAAAAAAAAAAAAAAECQcAAAoHAAANBwAADgcAAA==\"]Hg[\"AAAAApAAAAD/BAAAAAI4AAAAvgwAAAEsAQAAAAAAAAAAAAAAAAADoQEAALkEAAAADAAA\",\"AAGSBwAAAAH/BAAAAAAAAAAAAAAAAAAAAAAECwcAAAwHAAAPBwAAEAcAAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWwAAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmcAAADlBgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVMEAAA=\",\"AAAAAboMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAasAAAA=\",\"\"]Dk[\"AAAAAewEAAABtgEAAAABrQQAAAEdEQAAAQwBAAA=\",\"AAGIBwAAAAHsBAAAAAAAAR0RAAA=\"]Dk[\"AAAAATYFAAAByQEAAAACjwEAALEEAAABJBEAAA==\",\"AAGhBwAAAAE2BQAAAAAAASQRAAA=\"]Hc[\"AAAAAAABfw8AAAGREwAAAAG1EwAAAfUTAAAAAAAAAAAAADowAAABAAAAAAANABAAAADQBvoIPQk2Do0PkA/MD54QrhBEEW4ScBJLE4AT\",\"AAAAAAABXBIAAAFAEwAA\"]Ak[\"AAAAAAKXEwAAmBMAAA==\",\"\"]Cg[\"AAAAAaASAAABNAkAAAFgBAAAAAABZQQAAA==\",\"AAAAAAH/CwAA\"]Ag[\"\",\"AAAAAAAAAbMGAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmgAAABHDwAA\",\"\"]Ag[\"AAAAAAAAAAHBBgAA\",\"\"]Dk[\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwAAOzAAAAEAAD8AAgDbAD0AigEBAA==\",\"\"]Hg[\"AAAAAi0FAADqBgAAATEJAAAEWgAAAAsTAAAMEwAAdRMAAAOAAQAAgQEAAPgTAAABUwMAAAABGwwAAAABaRIAAAAAAcUGAAA=\",\"AAABiQ8AAAEtBQAAAcgBAAAAAU8QAAA=\"]Dk[\"AAAAAeAEAAAAASIAAAAAAbcGAAAC9gAAAPcAAAA=\",\"AAAAAuAEAAAYCgAAAAAAAakGAAA=\"]Dk[\"AAAAARcFAAAAAUgAAAACUQEAAFIBAAABvAYAAA==\",\"AAAAARcFAAABegoAAAABrgYAAA==\"]Ck[\"AAAAAcUPAAAAAAAAAnAHAACyBwAA\",\"AAAAAAAAAAACKxAAACwQAAA=\"]Ck[\"AAAAAcYPAAAAAAAAAnMHAAC0BwAA\",\"AAAAAAAAAAACLRAAAC4QAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAaEgAA\"]Ek[\"AAAAA9UHAAAKEgAAcBMAAAAAAAAAAAGxBwAAAAABbwcAAA==\",\"AAAAAAAAAAI1EQAANhEAAAIrEAAALBAAAA==\"]Ek[\"AAAAA9YHAAALEgAAcRMAAAAAAAAAAAGzBwAAAAABcgcAAA==\",\"AAAAAAAAAAI3EQAAOBEAAAItEAAALhAAAA==\"]Dg[\"AAAAAQsFAAAAAUQAAAACPwEAAEABAAA=\",\"AAAAAQsFAAAAAAAAAAEbDAAAAAFpEgAA\"]Cc[\"AAAB2AIAAAH7BAAAAAE0AAAAASYBAAA=\",\"AAAAAfsEAAA=\"]Ic[\"AAABjwAAAAHSBAAAAAIcAAAAvQwAAAAAAeQAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA2gEJAgkHDQcCCQYJPg+BD0YQlxIPEx8TOxM=\",\"AAF9BwAAAALSBAAAagUAAAABRQ8AAA==\"]Ho[\"AAAAApIAAAABBQAAAAI6AAAAwAwAAAEuAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA3AEKAgsHDwcECQgJQA+DD0gQmBIQEyATPBM=\",\"AAGUBwAAAAEBBQAAAAABRg8AAA==\"]Gg[\"AAACOgIAAEECAAAByAQAAAACEQAAAPoGAAACzQAAAM4AAAA=\",\"AAACPAIAAD0CAAAByAQAAAAAAAACTw8AAFAPAAAAAAJcBAAAwQ8AAAAAASQMAAA=\"]Do[\"AAAAAQMFAAAAAjsAAACeAAAAAzABAAAxAQAAtQ8AAAFJAwAA\",\"AAAAAQMFAAAAAAAAAUAEAAA=\"]Ck[\"AAAAAngTAAB5EwAAAAAAAAAAAAABJwwAAA==\",\"AAAAAAABpBAAAA==\"]Co[\"AAAAAAAB5gYAAAMbEgAAHBIAAB0SAAAAAa0BAAA=\",\"AAAAAAABfw8AAA==\"]K@i[\"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\",1]Eo[\"AAAAAAA7MAAAAQAABQABAFkSBQA7MAAAAQAABQABAD0TBQAAOzAAAAEAAAUAAQCyEwUAOzAAAAEAAAUAAQDyEwUA\",\"\"]Ck[\"AAAAAAAAAVoFAAAAAAFMBAAA\",\"AAAAAAAAAxMMAAAUDAAAFQwAAA==\"]Cc[\"\",\"AAAAAAAESAQAAAQHAABLEQAAmxMAAAAAAloTAACxEwAA\"]Fc[\"AAAAAf4EAAAAATcAAAACKgEAACsBAAA=\",\"AAGRBwAAAAH+BAAAAAACwA8AAE8QAAACHgwAAHsTAAAAAAEFFAAAAdwTAAA=\"]Eo[\"AAAAAUgRAAABLQkAAAACuAAAAAgMAAABEhEAAAABUAQAAA==\",\"AAAAAAGlBQAAAAIIDAAAfA8AAAABbAcAAAEmEAAA\"]Dk[\"AAAABhMSAABsEgAA2BMAAOQTAAACFAAAERQAAAAAAAABQxMAAA==\",\"AAAAAAAAAAEKEQAA\"]A@g[\"AAAAOjAAAAEAAAAAABIAEAAAAGkEvwRoBZcGxgc4CeoLGQw2DLoMvw/WD8cQSRFXEkYTehOaE98TOjAAAAEAAAAAAAcAEAAAAC4JJRAWEpsS5RLqEhQUGBQ6MAAAAQAAAAAABwAQAAAA2QFGBBoMRQ++EBMRaBIKEzowAAABAAAAAAAHABAAAAC5AMgQUxLTE/wTAxQfFCEUAUMFAAAAAAAAAAAAAZITAAA=\",\"AAAAAb8EAAABvggAAAABCAwAAA==\"]ACk[\"AAAAOjAAAAEAAAAAAAgAEAAAAGoEHgkMDDoPgg+bECwRrxOwEzowAAABAAAAAAAHABAAAABKBFYFawXUB/8LCxFYEpkTOjAAAAEAAAAAAAoAEAAAANsBWgTED8kPORBXEBERFxLkEusSThM6MAAAAQAAAAAABwAQAAAAGQFGD8APTxBUEuUTIBQiFAVGBQAAHgwAAHsTAADUEwAABBQAAAQVEgAAcxMAAMUTAAD9EwAAAhsMAAAxDgAAAQUUAAADxBAAAGkSAADcEwAA\",\"AAAAAAAAAAAAAAAAAAFtBwAAAAAAAAGnBQAA\"]Ho[\"AAAAAxQHAAC3BwAAGxEAAAMiCQAA9QsAAP4TAAABshAAAAABwgcAAAACpA8AABETAAAB0wYAAA==\",\"AAAAAAT1CwAA9gsAAPcLAAD4CwAAAAWsBAAArQQAAK4EAACvBAAAUxIAAA==\"]Ho[\"AAAAAxgHAAC7BwAAIhEAAAMmCQAA+QsAAAAUAAABthAAAAABxAcAAAACpg8AABUTAAAB1wYAAA==\",\"AAAAAAT5CwAA+gsAAPsLAAD8CwAAAAWwBAAAsQQAALIEAACzBAAAVBIAAA==\"]No[\"AAABjgAAAAHRBAAAAAIbAAAAvAwAAAAAAeMAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAgJJBKAGBgf8CDIJFgwcDCgMfQ+fDygQVRBaEGUQnBCoEK8QuhC8EBgRORFNEQ0SDxJVEmISnBKeEuESIRMjE1YTXRN8E5wT2RM=\",\"AAF8BwAAAAHRBAAAAAAAAAAAAAAAAAAAAAAEAgkAAAMJAAAGCQAABwkAAA==\"]No[\"AAAAApEAAAAABQAAAAI5AAAAvwwAAAEtAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAwJLBKQGBwf9CDMJFwwdDCkMfg+gDykQVhBbEGYQnRCpELAQuxC9EBkROhFOEQ4SEBJWEmMSnRKfEuISIhMkE1cTXhN9E50T2hM=\",\"AAGTBwAAAAEABQAAAAAAAAAAAAAAAAAAAAAEBAkAAAUJAAAICQAACQkAAA==\"]Cc[\"AAAAAecEAAAAAAAAAQMBAAA=\",\"AAAAAecEAAAAAAG1CwAA\"]Ck[\"AAAAASgFAAAAAAF3AQAA\",\"AAAAASgFAAAAAAO2CwAAtwsAALgLAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAFhBAAAAAAAASYMAAA=\",\"\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAATYPAAA=\"]Eo[\"AAAAARgFAAAAAUoAAAACVQEAAFYBAAABvQYAAA==\",\"AAAAARgFAAAAAAGvBgAAAAAAAAAAAAAAAAACTAUAADcPAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAg8UAAAQFAAA\"]Ck[\"AAAAAAAAAAABxRMAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAABJhQAAA==\"]Ag[\"AAAClwIAABoDAAA=\",\"\"]Bo[\"AAAAAAAAAcEAAAAAAAABIQwAAA==\",\"AAAAAb8PAAA=\"]Cc[\"AAAAAAACGgwAAGgSAAABUg8AAA==\",\"AAAAAAABBAcAAA==\"]Gc[\"AAAAAfoEAAAAATMAAAABJQEAAAABFRIAAAEbDAAAAAFpEgAA\",\"AAGQBwAAAAH6BAAAAAHkEgAAAcAPAAAAARUSAAAAAAAAAAAAAAABBQcAAA==\"]Do[\"AAAAAAAAAAFTDwAAAm0FAACEDwAA\",\"AAAAAa4BAAAAAAABUw8AAARtBQAAhA8AAA0RAAAOEQAA\"]Do[\"AAAAAAAAAAFUDwAAAm4FAACFDwAA\",\"AAAAAboBAAAAAAABVA8AAARuBQAAhQ8AAA8RAAAQEQAA\"]Ao[\"AAAAAAEqEAAAAAABUBAAAA==\",\"\"]Fk[\"AAABKREAAAJjAAAAtQcAAAEQAgAAAAHJAAAAAnIEAABFEQAAAk8PAADCDwAAAAFRDwAAAlwEAADBDwAAAAElDAAAAiMMAAAkDAAA\",\"\"]Cc[\"AAAAAAAAAANdBAAAdAQAAEcRAAA=\",\"AAAAAAABxA8AAA==\"]Ec[\"AAABPAIAAAHJBAAAAAISAAAA+wYAAALPAAAA0AAAAA==\",\"AAABPgIAAAHJBAAAAAAAAkURAABGEQAA\"]Bo[\"AAABqhAAAAAAAALEAAAAxQAAAA==\",\"AAAAAAFdBQAA\"]Ck[\"AAABqxAAAAAAAAJmAQAAZwEAAA==\",\"AAAAAAAAAAAAAAABXgUAAA==\"]Ao[\"AAAAAAAAAR4TAAABQg8AAA==\",\"\"]Hg[\"AAAAAmUAAADPBwAAARECAAABOQkAAAPVAAAAwgYAAGMQAAACWwUAANwPAAAAAnMFAAB9DAAABkgPAABJDwAASg8AAG0QAADDEAAAehIAAAAAAksPAABNDwAAAUwPAAA=\",\"\"]Dk[\"AAAAAAABOgkAAALDBgAA0AcAAAJcBQAAZBAAAAABdAUAAAFuEAAA\",\"AAAAAAAByQ8AAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\",\"\"]ABc[\"AAABiQ8AAAGUBgAAAsgBAAD0BgAABJMGAAAaDAAAfw8AAGgSAAAC0xMAAAMUAAADChEAANQTAAAEFAAABWwHAAANEQAADhEAAA8RAAAQEQAAASYQAAAAAAABbQcAAA==\",\"AAAABeoGAABIEQAASREAAEoRAABMEQAAA5wBAAA8DwAAPQ8AAAFLEQAABfwTAAAfFAAAIBQAACEUAAAiFAAAAXsTAAAB/RMAAAEUEgAAAAAAAAAAAAJYDwAAcg8AAAUEAgAABQIAAIYPAACHDwAAiA8AAA==\"]Cc[\"AAAAARkFAAAAAUsAAAACVwEAAFgBAAA=\",\"AAAAARkFAAA=\"]Dc[\"AAAAAAAAAAA7MAAAAQAABQABAEwSBQA=\",\"AAAABNIBAADWAQAA1wEAANgBAAA=\"]Ao[\"AAAAAdIBAAAAAAAAAc8PAAA=\",\"\"]Ao[\"AAAAAdcBAAAAAAAAAdAPAAA=\",\"\"]Eo[\"AAAAASsRAAABBxMAAAM9EAAAwBAAABURAAABYRMAAAE2EQAAASwQAAACPhEAAB8SAAABMBEAAAAAAAABlBMAAA==\",\"\"]Eo[\"AAAAAS4RAAABCRMAAANBEAAAwhAAABcRAAABZBMAAAE4EQAAAS4QAAACQBEAACESAAABMhEAAAAAAAABlhMAAA==\",\"\"]Bc[\"AAAAAAAAAnUEAADKBgAAAAHRDwAA\",\"\"]Bc[\"AAAAAAAAAngEAADNBgAAAAHSDwAA\",\"\"]Ec[\"AAAAAcwBAAAAAm0SAABvEgAAAlsTAABcEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAAEwAwAA\"]Gg[\"AAAAAcsEAAAAAhQAAAD9BgAAAtYAAADXAAAA\",\"AAADRgIAAEcCAABIAgAAAcsEAAAAAAAB3A8AAAACcwUAAH0MAAACbRAAAHoSAAAAAAABTA8AAA==\"]Eg[\"AAAAAQYFAAAAAj4AAACgAAAAAzUBAAA2AQAAtw8AAAFLAwAA\",\"AAAAAQYFAAAAAAAAAAF0BQAAAW4QAAA=\"]Ec[\"AAAAAAAAAWUBAAAAAAAAAAAAAAAAAAK7BAAAPgkAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAacFAAA=\"]Ec[\"AAAB8wsAAAG+BAAAAAELAAAAAbQAAAA=\",\"AAAAAb4EAAAAARAJAAAAAAAAAAAAAAAAAAABkQYAAA==\"]Dg[\"AAAAAAFYBQAAAAAAAAAAAAAAAAAAAAJoEAAADBEAAA==\",\"AAF2BwAAAAAAAZMGAAA=\"]Ac[\"AAABZAIAAA==\",\"\"]Do[\"AAAAAd8EAAAAASEAAAAAAAL0AAAA9QAAAA==\",\"AAACbwIAAHECAAAB3wQAAAAAAAAAAUkTAAA=\"]Dk[\"AAAAARYFAAAAAUcAAAACTwEAAFABAAA=\",\"AAAC4wIAAOQCAAABFgUAAAAAAAAAAUoTAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAXCQAA\"]Dk[\"AAAAAAAAAAABEwEAAA==\",\"AAABjQIAAAAAAAAAAAABYgQAAAESBwAAAUIEAAABbwcAAA==\"]Dg[\"AAAAAAAAAYgBAAA=\",\"AAABEwMAAAAAAAAAAAABYwQAAAETBwAAAUQEAAABcgcAAA==\"]Dk[\"AAAAAe4EAAAAAbcBAAABrgQAAAEfEQAAAQ4BAAA=\",\"AAGJBwAAAAHuBAAAAAAAAR8RAAA=\"]Dk[\"AAAAATgFAAAAAcoBAAACkQEAALIEAAABJhEAAA==\",\"AAGiBwAAAAE4BQAAAAAAASYRAAA=\"]Ck[\"AAAAAQcFAAAAAT8AAAACNwEAADgBAAA=\",\"AAAAAQcFAAAAAAHDBgAA\"]Eg[\"AAAAAdoEAAAAAiAAAACWAAAAAa0PAAABQQMAAALvAAAAYBIAAA==\",\"AAGEBwAAAWoCAAAC2gQAABAKAAA=\"]Eg[\"AAAAAREFAAAAAkYAAAChAAAAAkoBAAC4DwAAAUwDAAABYRIAAA==\",\"AAGcBwAAAd0CAAABEQUAAAFzCgAA\"]Ao[\"AAAAAAAAAAACWBAAAA0RAAA=\",\"\"]Ao[\"AAAAAAAAAAACWRAAAA8RAAA=\",\"\"]Do[\"AAABbwAAAAG9BAAAAAABswAAAA==\",\"AAAAAb0EAAAAAQ8JAAAAAAAAAAAAAAAAAAABXBAAAA==\"]Bg[\"AAAAAAAABNQAAABiBQAAFQwAAB0SAAA=\",\"\"]Ak[\"AAAAAAABQAAAAAE5AQAA\",\"\"]Do[\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAaEgAA\",\"AAF0BwAAAAAAAAAAAAAAAAAAAAAAAAFnEAAA\"]Cg[\"AAAAAAPEBgAANwkAALEQAAA=\",\"AAAAAAAAAAJCDwAAUBAAAA==\"]Ag[\"AAACjQIAABMDAAA=\",\"\"]Cc[\"AAAAATUKAAACNgoAAKUKAAABpgoAAAJpEAAAaxAAAA==\",\"\"]Ac[\"\",\"AAAAAVISAAA=\"]Gg[\"AAAAAd4EAAAB2xMAAAAAAcAIAAAE8wAAANEPAABzEgAAwBMAAAEmEAAA\",\"AAAAA7IBAADeBAAA5hMAAAABoBMAAAABwAgAAAPRDwAAcxIAAMATAAA=\"]Bc[\"AAAAAbIBAAAAAAAAAAAAAc0QAAA=\",\"\"]Gg[\"AAAAARUFAAAAAAFOAQAAAcEIAAAD0g8AAHUSAADBEwAAAAAAAAFtBwAA\",\"AAAAA8EBAAAVBQAA5xMAAAABoRMAAAABwQgAAAPSDwAAdRIAAMETAAA=\"]Bc[\"AAAAAcEBAAAAAAAAAAAAAdEQAAA=\",\"\"]Fg[\"AAABRgIAAAHVBAAAAAEeAAAAAAAC5wAAAOgAAAA=\",\"AAGABwAAAAHVBAAAAAE5CQAAAsIGAABjEAAAA3IEAABzBAAAWwUAAA==\"]Eo[\"AAAAAQkFAAAAAUIAAAACOwEAADwBAAA=\",\"AAGYBwAAAAEJBQAAAAE6CQAAAdAHAAAEdAQAAFwFAABkEAAARxEAAA==\"]Ao[\"\",\"AAAAAAAAAAAAAAAB1RAAAA==\"]Ek[\"AAAAAeMEAAAAASUAAAAAAAL8AAAA/QAAAA==\",\"AAABdgIAAAHjBAAAAAAAAAFsBwAAASYQAAAAAs0QAADPEAAA\"]Eg[\"AAAAAR8FAAAAAVAAAAACYwEAAGQBAAA=\",\"AAAB8QIAAAEfBQAAAAAAAAAAAALREAAA0xAAAAABbQcAAA==\"]Ao[\"AAAAAAAAAAFDEAAAAAExDAAA\",\"\"]Jk[\"AAAAAeQEAAAABSYAAACXAAAASAUAADsQAAA9EAAAArULAACuDwAABEIDAAABDAAAPBAAAD4QAAAE/gAAAP8AAAANEQAADhEAAAItDAAALgwAAAIvEQAAMBEAAA==\",\"AAAAAuQEAABTEAAAArMBAAA0EAAAAAABCgkAAA==\"]Og[\"AAAAASQFAAAABVMAAACkAAAASQUAAD8QAABBEAAABnABAABxAQAAtgsAALcLAAC4CwAAuw8AAARPAwAAAgwAAEAQAABCEAAAAg8RAAAQEQAAAi8MAAAwDAAAAjERAAAyEQAA\",\"AAAABCQFAACpBwAAqgcAAFQQAAAEwwEAADUQAAA2EAAANxAAAAAAAQsJAAACUwUAAFQFAAAAAAAAAAAAAAA7MAAAAQAACgACAKsHBQDKBwQA\"]Cc[\"AAAAARoFAAAAAUwAAAACWQEAAFoBAAA=\",\"AAAAARoFAAA=\"]Ck[\"AAABTwUAAAHlBAAAAAEnAAAAAAABAAEAAA==\",\"AAAAAuUEAAADDAAA\"]Dg[\"AAABUAUAAAElBQAAAAFUAAAAAXIBAAAAAAAAAAAAAcUGAAA=\",\"AAAAAiUFAAAEDAAA\"]Cc[\"AAAAAT4FAAAAAWAAAAABmwEAAA==\",\"AAAAAj4FAAAFDAAA\"]Dg[\"AAAAAAAAAAAAAAABxBAAAA==\",\"AAAABjgQAABfEgAARxMAAEgTAAB4EwAAeRMAAA==\"]Ak[\"AAAAAAAAAAABThIAAA==\",\"\"]Ak[\"AAAAAAAAAAABURIAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmoAAAAEAgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVUEAAA=\",\"AAAAAccQAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmkAAAAFBwAA\",\"\"]Bk[\"AAAAAAAAAAAAAATTBgAA1AYAANUGAADWBgAA\",\"\"]Ec[\"AAAABJ0BAACoAQAA+QQAACcQAAAAAAEkAQAAAAAABNcGAADYBgAA2QYAANoGAAA=\",\"AAAAAfkEAAA=\"]Bg[\"AAAAAAAAAAAAAVYEAAA=\",\"AAAAAAHlEgAA\"]Cc[\"AAAAAToKAAACOAoAAKsKAAABqgoAAAJqEAAAbBAAAA==\",\"\"]Ag[\"AAAAAAAB9gYAAA==\",\"\"]No[\"AAAAAdwEAAAB9AYAAAGhEgAAAXwPAAAGEQwAAEoQAABEEwAAWBMAALgTAADgEwAAB/EAAACtAQAAdgwAAM8PAAByEgAATxMAAFETAAABwhMAAAAAAAAAAAAAA6EGAAB6DAAAdhIAAA==\",\"AAAAAtwEAADYDwAAAAGxAQAAAXgSAAAGEQwAAEoQAABEEwAAWBMAALgTAADgEwAABXYMAADPDwAAchIAAE8TAABREwAA\"]Bo[\"AAAAAdgPAAAAAbEBAAAAAjwQAADOEAAAAAEtDAAA\",\"\"]Nc[\"AAAAARMFAAAAAAFMAQAAOjAAAAEAAAAAAAcAEAAAALsBEgxLEKISRRNZE7kT4RMFdwwAANAPAAB0EgAAUBMAAFITAAAAAAAAAAAAAAAEpwUAAKUGAAB7DAAAdxIAAA==\",\"AAAAAhMFAADZDwAAAAHAAQAAAXkSAAAGEgwAAEsQAABFEwAAWRMAALkTAADhEwAABXcMAADQDwAAdBIAAFATAABSEwAA\"]Bo[\"AAAAAdkPAAAAAcABAAAAAkAQAADSEAAAAAEvDAAA\",\"\"]Ao[\"AAAAAAAAAAACTxMAAFATAAA=\",\"\"]Ao[\"AAAAAAAAAAACURMAAFITAAA=\",\"\"]Dc[\"AAABRwIAAAHMBAAAAAIVAAAA/gYAAALYAAAA2QAAAA==\",\"AAABSgIAAAHMBAAA\"]Bk[\"AAAAAdUBAAAAAATTAAAAYQUAABQMAAAcEgAA\",\"\"]Ec[\"AAAAAgETAAACEwAAAv8SAAAAEwAABO8LAADwCwAA8QsAAPILAAAE6wsAAOwLAADtCwAA7gsAAA==\",\"\"]Cc[\"AAAAAAAAAAABTRIAAA==\",\"AAF3BwAAAAKsAQAA3xIAAA==\"]Cc[\"AAAAAAAAAAABUBIAAA==\",\"AAGMBwAAAAK5AQAA4BIAAA==\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAABxQYAAA==\"]Cg[\"AAAAATsPAAAAAAFvAQAAAToQAAA=\",\"AAGoBwAAAAAAAU4TAAA=\"]Ek[\"AAAAAcMEAAAAAAG+AAAAAAAAAAAAAAAAAAAE2xIAAOMSAAD+EgAAGRMAAA==\",\"AAF4BwAAAALDBAAAaQUAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzsJAADNDwAADxQAAA==\",\"\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzwJAADODwAAEBQAAA==\",\"\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAYCQAA\"]Bc[\"AAAAAAABQQQAAA==\",\"AAAAAAGpBAAA\"]Ec[\"AAAAAfAEAAAAAbgBAAABrwQAAAIhEQAAdhMAAAEQAQAA\",\"AAGKBwAAAAHwBAAAAAAAAiERAAB2EwAA\"]Ec[\"AAAAAToFAAAAAcsBAAACkwEAALMEAAACKBEAAHcTAAA=\",\"AAGjBwAAAAE6BQAAAAAAAigRAAB3EwAA\"]Ag[\"\",\"AAAAAAABERIAAA==\"]Co[\"AAAAAqIBAACpBwAAAAABaAEAAA==\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Ac[\"\",\"AAAAAAGkEgAA\"]Cg[\"AAAAAAAAAngSAAB5EgAAAAABFBIAAA==\",\"AAAAAAAAAAFTEwAA\"]Do[\"AAAAAQQFAAAAAjwAAACfAAAAAzIBAAAzAQAAtg8AAAFKAwAA\",\"AAAAAQQFAAAAAAABXQQAAA==\"]Ak[\"AAAAAAACoBMAAKETAAA=\",\"\"]Ac[\"AAAAAdYBAAA=\",\"\"]Ac[\"AAAAAdgBAAA=\",\"\"]Eo[\"AAAC+gIAAA4DAAABLgUAAAABWwAAAAKCAQAAgwEAAA==\",\"AAAAAS4FAAAAAAAFpwYAAKgGAACpBgAAqgYAAKsGAAA=\"]Fk[\"AAAABEwQAABNEAAARxMAAEgTAAABPA8AAAGkEAAAARISAAAAAAHCEwAAAAAAAAAAAAEmDAAA\",\"AAAAAAAAAxsSAAAcEgAAHRIAAA==\"]Fc[\"AAAAAAABkwYAAAJ4EgAAeRIAAAEKEQAAAAEUEgAAAAACnhMAAJ8TAAAAAAAB7xIAAA==\",\"AAAAAAAAAdcTAAABUxMAAA==\"]Ag[\"\",\"AAAAAAABRQUAAA==\"]Co[\"AAAAAQwFAAAAAUUAAAACQQEAAEIBAAA=\",\"AAAAAQwFAAAAAAAAAAExDgAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAeQGAAA=\",\"\"]Jc[\"AAAAAtsEAAC+EwAAAAAAAggSAADdEgAABPAAAACtAQAAKwwAAOwSAAADPwkAAEkTAADCEwAAAAAAAaIQAAA=\",\"AAGFBwAAAAKwAQAA2wQAAAAAAAIIEgAA3RIAAAIrDAAA7BIAAAI/CQAASRMAAAAAAAGiEAAA\"]Jg[\"AAAAAhIFAAC/EwAAAAABSwEAAAO7AQAACRIAAN4SAAACLAwAAO0SAAACQAkAAEoTAAAAAAABoxAAAA==\",\"AAGdBwAAAAK/AQAAEgUAAAGbBgAAAAACCRIAAN4SAAACLAwAAO0SAAACQAkAAEoTAAAAAAABoxAAAA==\"]Ao[\"AAAAAAAAAcYAAAAAAAFYBAAA\",\"\"]Bc[\"AAAAAAABSQAAAAJTAQAAVAEAAA==\",\"\"]Ag[\"AAAClgIAABsDAAA=\",\"\"]Ak[\"AAAAAAAAAnYEAADLBgAA\",\"\"]Ak[\"AAAAAAAAAnkEAADOBgAA\",\"\"]Ag[\"AAAClQIAAB8DAAA=\",\"\"]Dk[\"AAAAAcoEAAAAAhMAAAD8BgAAAtEAAADSAAAA\",\"AAABQQIAAAHKBAAAAAAAAAAAAVEPAAA=\"]Dg[\"AAAAAccEAAAAAhAAAAD5BgAAAssAAADMAAAA\",\"AAABOgIAAAHHBAAAAAAAAAHCDwAA\"]Co[\"AAABGBIAAAEIBQAAAAFBAAAAAToBAAA=\",\"AAGXBwAAAQEJAAABCAUAAA==\"]Ec[\"AAAAAAABGRIAAAG1AAAAAAAAAAAAAAAAAAADbQQAAP4IAABVDwAA\",\"AAAAAaoBAAAAAAAAAUMTAAA=\"]Hk[\"AAAC0wIAAOsCAAABJgUAAAABVQAAAAJzAQAAdAEAAAAAAAAAAAAAAAAABAgCAABMBQAApgYAAOMGAAA=\",\"AAAB/wIAAALEAQAAJgUAAAAAAmMTAABkEwAAAAACPxEAAEARAAA=\"]Fc[\"AAAAAzgQAABOEAAAXxIAAAACbRIAAG8SAAADmAEAAFsTAABcEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAcwBAAA=\"]Dc[\"AAAAAmIAAADGBAAAAg8CAAC/CAAAAQ8AAAAByAAAAA==\",\"AAAAAsYEAADXDwAA\"]Eg[\"AAAAAeEEAAAAASMAAAAAAAL4AAAA+QAAAAAAAAAAAAAAAAPfBgAALw8AADYPAAA=\",\"AAABdAIAAAHhBAAA\"]Eg[\"AAAAARsFAAAAAU0AAAACWwEAAFwBAAAAAAAAAAAAAAAAAAPhBgAAMQ8AADcPAAA=\",\"AAAB6wIAAAEbBQAA\"]Hk[\"AAAFKgIAAD0CAAA+AgAASAIAAEoCAAAB1gQAAAACHwAAAP8GAAAAAALpAAAA6gAAAA==\",\"AAADYQIAAGMCAABkAgAAAtYEAACXBgAAAqUFAAAlEAAAAQoTAAABfA8AAAESEQAA\"]Ek[\"AAAAAQoFAAAAAkMAAAAABwAAAj0BAAA+AQAA\",\"AAAB0wIAAAEKBQAAAAAAAAAAAAAAAAAAAAACuwQAAOQGAAA=\"]Bk[\"AAAAAAABORAAAAFuAQAA\",\"AAAAAAAAAAE6EAAA\"]Fo[\"AAABjwAAAAHTBAAAAAG9DAAAAAAB5QAAAAAAAAAAAAAAAAYKBwAADgcAAAMJAAAHCQAAPw8AAEcQAAA=\",\"AAF+BwAAAALTBAAAaAUAAA==\"]Fo[\"AAAAApIAAAACBQAAAAHADAAAAS8BAAAAAAAAAAAAAAAAAAYMBwAAEAcAAAUJAAAJCQAAQQ8AAEkQAAA=\",\"AAGVBwAAAAECBQAAAWsFAAA=\"]Ag[\"AAACkwIAAB0DAAA=\",\"\"]Cg[\"AAAAAUAFAAAAAAADQg8AAKgPAABQEAAA\",\"AAGnBwAAAAFABQAA\"]Dc[\"AAAAAiAFAACqBwAAAAABaQEAAA==\",\"AAAAASAFAAAAAAAAAAAAAAAAAAGwBgAA\"]Dg[\"AAAAAfASAAAB2g8AAAAAAALrAAAADhEAAA==\",\"AAEMCQAAAa8BAAAB8BIAAAHaDwAA\"]Dg[\"AAAAAfESAAAB2w8AAAABRgEAAAABEBEAAA==\",\"AAENCQAAAb4BAAAB8RIAAAHbDwAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATQPAAA=\",\"\"]Ac[\"\",\"AAAAAAHGEwAA\"]Ag[\"AAACkgIAACEDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAADTBIAAE0SAABOEgAA\"]Bc[\"\",\"AAAAAAAAAAADTxIAAFASAABREgAA\"]Ak[\"\",\"AAAAAXESAAAAAAGREwAA\"]ADc[\"AAAAAdcEAAAAAAA6MAAAAQAAAAAAFAAQAAAAvwfBDEMPiw+OD8oPyRBCEVYRahLXEn4T1RPiE+4T8BMSFBYUGRQdFCQUOjAAAAEAAAAAAAwAEAAAAOwAWBDFEGASchJzEg0TORNME/oTCxQNFBsUAAABOxEAAA==\",\"AAGBBwAAAAHXBAAAAAAAOjAAAAEAAAAAABQAEAAAAL8HwQxDD4sPjg/KD8kQQhFWEWoS1xJ+E9UT4hPuE/ATEhQWFBkUHRQkFDowAAABAAAAAAAJABAAAABYEMUQYBINEzkTTBP6EwsUDRQbFAAAATsRAAA=\"]ADc[\"AAAAAQ4FAAAAAAFHAQAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8oQQxFXEWsS2BJ/E9YT4xPvE/ETExQXFBoUHhQlFDowAAABAAAAAAALABAAAABZEMYQYRJ0EnUSDhM6E00T+xMMFA4UHBQAAAE8EQAA\",\"AAGZBwAAAAEOBQAAAAAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8oQQxFXEWsS2BJ/E9YT4xPvE/ETExQXFBoUHhQlFDowAAABAAAAAAAJABAAAABZEMYQYRIOEzoTTRP7EwwUDhQcFAAAATwRAAA=\"]Ag[\"AAACbwIAAOMCAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAU0EAAA=\",\"AAAAAAAAAQgMAAA=\"]Bk[\"AAAAAAAAAAAAAAEgDAAA\",\"AAAAAAABmxMAAA==\"]Do[\"AAAAAeIEAAAAASQAAAAAAAL6AAAA+wAAAAAAAAAAAAAAAALgBgAAMA8AAA==\",\"AAAAAeIEAAA=\"]Do[\"AAAAARwFAAAAAU4AAAACXQEAAF4BAAAAAAAAAAAAAAAAAALiBgAAMg8AAA==\",\"AAAAARwFAAA=\"]Ag[\"AAACmQIAABgDAAA=\",\"\"]Fc[\"AAAAAR4FAAAAAk8AAACiAAAAAmEBAAC5DwAAAk0DAAA6EAAA\",\"AAAAAR4FAAAAAAAAAAAAAAABbQcAAAAAAAABpwUAAA==\"]Ac[\"\",\"AAAAAAFuBwAA\"]Ao[\"AAAAAAGpBAAA\",\"AAAAAAFxBwAA\"]Ag[\"AAAClAIAABwDAAA=\",\"\"]Ag[\"AAACmwIAACADAAA=\",\"\"]Dg[\"AAAAAfIEAAAAAAAB5hIAAAAAAAHPEAAA\",\"AAAAAvIEAAA1CgAAATYKAAAAAWkQAAA=\"]Do[\"AAABzQEAAAEyBQAAAAAAAegSAAAAAAAB0xAAAA==\",\"AAAAATIFAAABpQoAAAGmCgAAAWsQAAA=\"]Do[\"AAAAAfQEAAAAAAADPhAAANAQAADnEgAAAAEuDAAA\",\"AAAAAvQEAAA6CgAAATgKAAAAAWoQAAA=\"]Eg[\"AAABzgEAAAE0BQAAAAAAA0IQAADUEAAA6RIAAAABMAwAAA==\",\"AAAAATQFAAABqwoAAAGqCgAAAWwQAAA=\"]Cc[\"AAAAAAAAAncEAADMBgAAAAEEAQAA\",\"AAGHBwAAAAG0AQAA\"]Cc[\"AAAAAAAAA3kBAAB6BAAAzwYAAA==\",\"AAGgBwAAAAHGAQAA\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA94GAACwBwAAzgcAAA==\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATMPAAA=\",\"\"]Ao[\"AAAAAAAAAawEAAAAAQsUAAA=\",\"\"]Bk[\"AAAAAAAAAbAEAAAAAQwUAAA=\",\"AAAAAbQEAAA=\"]Eg[\"AAAAAAAAAAABEQEAAAAAAAAAAAAAAANBCQAAqQ8AAJkSAAA=\",\"AAGLBwAAAAS3BwAAuAcAALkHAAC6BwAA\"]Eg[\"AAAAAAAAAZQBAAAAAAAAAAAAAAAAAANCCQAAqg8AAJoSAAA=\",\"AAGkBwAAAAS7BwAAvAcAAL0HAAC+BwAA\"]Bo[\"AAAAAAABsQEAAAAAAXYMAAAAAWIEAAAAAUIEAAA=\",\"\"]Bo[\"AAAAAAABwAEAAAAAAXcMAAAAAWMEAAAAAUQEAAA=\",\"\"]Ak[\"AAAAAAABCxMAAAFyEwAA\",\"\"]Ao[\"AAAAAAABDBMAAAAAAXMTAAA=\",\"\"]Fo[\"AAAAASMFAAAAAlIAAACjAAAAA2wBAABtAQAAug8AAAFOAwAA\",\"AAAB+gIAAAEjBQAAAAAAAAJTBQAAVAUAAAAAAAAAAALCAQAAsAYAAA==\"]Dg[\"AAAAAfwEAAAAATUAAAABJwEAAA==\",\"AAAAAfwEAAAAAAAAAAAAAAAAAAAAAAHlBgAA\"]Dg[\"AAAAAcEEAAAAAgwAAAD4BgAAArsAAAC8AAAA\",\"AAABKgIAAAHBBAAAAAAByBAAAA==\"]Do[\"AAAAAfcEAAAAAjEAAACcAAAAAyABAAAhAQAAsw8AAAFHAwAA\",\"AAAAAfcEAAAAAAAAAWUEAAA=\"]Ek[\"AAAAAdgEAAAAAAACVBMAAKgTAAAD7QAAAKwQAAA5EwAA\",\"AAGCBwAAAAHYBAAAAAAAAlQTAACoEwAAAawQAAA=\"]Ek[\"AAAAAQ8FAAAAAAFIAQAAAlUTAACpEwAAAq0QAAA6EwAA\",\"AAGaBwAAAAEPBQAAAAAAAlUTAACpEwAAAa0QAAA=\"]Bo[\"AAAAAAAAAAABUwUAAAAAAAAAAALCAQAAsAYAAA==\",\"\"]Fg[\"AAAAAdkEAAAAAAAEIAkAANQPAAAzEQAABBMAAALuAAAATBMAAA==\",\"AAGDBwAAAAHZBAAAAAAABCAJAADUDwAAMxEAAAQTAAA=\"]Fg[\"AAAAARAFAAAAAAFJAQAABCEJAADVDwAANBEAAAUTAAABTRMAAA==\",\"AAGbBwAAAAEQBQAAAAAABCEJAADVDwAANBEAAAUTAAA=\"]Ag[\"\",\"AAAAAAAAAdcTAAA=\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\"]Ag[\"\",\"AAAAAAAAAVIPAAA=\"]Co[\"AAAAAf0EAAAAATYAAAACKAEAACkBAAA=\",\"AAAAAf0EAAAAAAAAARUSAAA=\"]Fg[\"AAABVAIAAAHmBAAAAAEoAAAAAAG4BgAAAgEBAAACAQAA\",\"AAACewIAAJ8GAAAB5gQAAAAAAAGqBgAAAAAAAAAAAAAAAAEvDwAA\"]Gc[\"AAABugIAAALEAQAAJwUAAAABVgAAAAJ1AQAAdgEAAAG/BgAA\",\"AAACAQMAAKMGAAABJwUAAAAAAbEGAAAAAAAAAAAAAAAAAAIIAgAAMQ8AAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA6wHAADLBwAAwwgAAA==\",\"\"]Cg[\"AAABdgIAAAAAAAAAARQBAAA=\",\"AAAAAAAAAAI8EAAAPhAAAA==\"]Cg[\"AAAB8QIAAAAAAAGJAQAA\",\"AAAAAAAAAANAEAAAQhAAAEMQAAA=\"]Bo[\"AAAAArQEAAA/BQAAAaQSAAA=\",\"AAAAAj8FAABZEQAA\"]Bo[\"AAAAAAAAAcIAAAAAAAABIgwAAA==\",\"AAAAAXoTAAA=\"]Io[\"AAAAAS8FAAAAAVwAAAABhAEAAAZ1BQAAzhAAANAQAADSEAAA1BAAANYQAAAAAAAFzRAAAM8QAADREAAA0xAAANUQAAAAAAAAAAABIxQAAA==\",\"AAAAAS8FAAAAAARgEwAAYRMAAGMTAABkEwAAAAFeBAAA\"]Co[\"AAAAAmQAAAC2BwAAAAABygAAAAJzBAAARhEAAAFQDwAA\",\"AAABKREAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAwEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhcJAAAyEAAA\",\"\"]Co[\"AAAAAfMEAAAAAAAAAhcBAAAYAQAA\",\"AAAAAfMEAAAAAAJpEAAAahAAAA==\"]Dc[\"AAAAATMFAAAAAAKMAQAAjQEAAA==\",\"AAAAAjMFAABSEgAAAAACaxAAAGwQAAA=\"]Cc[\"AAAAAAGcAQAAAAG3AAAAAAAAAR8MAAA=\",\"AAAAAZoTAAA=\"]Ac[\"\",\"AAAB8wsAAA==\"]Ec[\"AAABcQIAAAHOBAAAAAEXAAAAAAAC3QAAAN4AAAA=\",\"AAAAAc4EAAAEEwkAAP4JAAD/CQAAAQoAAA==\"]Do[\"AAAB5AIAAAH2BAAAAAEvAAAAAh0BAAAeAQAA\",\"AAAAAfYEAAAEFAkAAFAKAABRCgAAUgoAAA==\"]Ak[\"\",\"AAAAAAACoBMAAKETAAA=\"]Ck[\"AAAAAsAEAAAqCQAAAb4IAAAB3BIAAAG6AAAA\",\"AAAAAsAEAADWDwAA\"]Cg[\"AAAAAU0HAAACIRAAADQQAAAAAbULAAAAAAAAAAABohAAAA==\",\"\"]Ck[\"AAAAAU4HAAACIhAAADUQAAAAArYLAAC3CwAAAAAAAAAAAaMQAAA=\",\"\"]Bc[\"AAAAAAAAAAAAAAAAAp4TAACfEwAA\",\"\"]Fo[\"AAAAAd0EAAAAAAADZwQAACsJAAC4EwAAAvIAAACmAQAA\",\"AAGGBwAAAAHdBAAAAAAAAmcEAAArCQAAAaYBAAAAAAAAAAAAAAABdhIAAA==\"]Fo[\"AAAAARQFAAAAAAFNAQAAA2gEAAAsCQAAuRMAAAGnAQAA\",\"AAGeBwAAAAEUBQAAAAAAAmgEAAAsCQAAAacBAAAAAAAAAAAAAAABdxIAAA==\"]Ck[\"AAAAAQ0FAAAAAAJDAQAARAEAAA==\",\"AAAAAQ0FAAAAAAAAAcUTAAA=\"]Ec[\"AAAAASEFAAAAAAFqAQAAAAAAAAAAAAAAAAAFowEAAKsHAADKBwAAwggAAHgMAAA=\",\"AAAAASEFAAA=\"]Dg[\"AAAAAAHGEwAAAAG2AAAAAAAAAAACnhMAAJ8TAAAAAAAB7xIAAA==\",\"AAABqwEAAA==\"]Ag[\"AAACnQIAACMDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAp4TAACfEwAA\"]Cc[\"AAAAAUEFAAAAAAAAAAAAAdUQAAA=\",\"AAABzQEAAAFBBQAA\"]Ck[\"AAAAAUIFAAAAAAACQxAAANYQAAAAATEMAAA=\",\"AAABzgEAAAFCBQAA\"]Ag[\"AAACmgIAABkDAAA=\",\"\"]Dg[\"AAAAAAABLAAAAAAAARIBAAA=\",\"AAAAAAAAAAAAAAAAAAAAA5ITAACTEwAAlBMAAA==\"]Ck[\"AAAAAAABXgAAAAGHAQAA\",\"AAAAAAAAAAAAAAAAAAAAApUTAACWEwAA\"]Ag[\"AAACnAIAAB4DAAA=\",\"\"]Do[\"AAAAAU8HAAACIxAAADYQAAAAAbgLAAABYRAAAA==\",\"AAK9AQAAjQcAAAEOCQAAAAAAAAFhEAAA\"]Ec[\"AAAAAikFAABQBwAAAiQQAAA3EAAAAAF4AQAAAWIQAAA=\",\"AAGfBwAAAcUBAAABKQUAAAAAAAFiEAAA\"]Bg[\"AAAAAAAAAAABVAUAAA==\",\"AAABvAEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAxEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhgJAAAzEAAA\",\"\"]") \ No newline at end of file diff --git a/pr/571/docs/search.index/type/954727a35b95.js b/pr/571/docs/search.index/type/954727a35b95.js new file mode 100644 index 000000000..61b2d608f --- /dev/null +++ b/pr/571/docs/search.index/type/954727a35b95.js @@ -0,0 +1 @@ +rd_("CBg[\"\",\"ADswAAABAAAFAAIAOwQEAPkTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwTElcSbBLYE+QTAhQRFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAWElgS6hKXE5gT2xP+E/8TABQBFBQUGBQ7MAAAAQAALAESAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAADIMAwC7DAUAqg2GADkQAACyEAcAEREAAIARhgAXEgAAGRIAAKESAADrEgAAChMAADowAAABAAAAAAAcABAAAABaBWAFYQViBcIGwwbKBssGzAbNBs4Gzwa1C7YLtwu4CwgMTg9SD2MQyBASEh4TWxNcE3IT1xPlEwMUOzAAAAEAAD0AFAA/AxQAZgQAAHIEAgBDBQEARgUAAFsFAQB1BQAAtQYMAMIHAwC0CwAAHgwAAKgPAADcDwAAZBAAAAoRAACiEgAA5hIDAFMTAADTEwAABBQAADswAAABAABYAA4A2wA9AIoBAQBlBAAAcAcAAHMHAACyBwAAtAcAACsQAwBMEgUAQxMAAHMTAACyEwUAxRMAANQTAAA7MAAAAQAAFQAHAEwEAAB9DAAAMQ4AAKQPAwAUEgAAERMHAPITBQA7MAAAAQAAEwAJAGIEAQBrBAEA0wYHALEHAACzBwAASA8CAFEPAADDEAAAehIAAAMSBwAAEwcAAGkSAAABJwwAAARtBwAAbwcAAHIHAAAlDAAAADswAAABAAAFAAIAwgEAAJITBAAAAAGnBQAA\"]Bo[\"AAAAAAAAAAACwBMAAMETAAAAAAAAAqIQAACjEAAA\",\"\"]0Bg[\"\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAA=\"]AGg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAADQAFAHMFAQA/CQEALQwEAH0MAAA9EQMAOjAAAAEAAAAAAAsAEAAAAGsEbASxB7MHUQ9tEG4QLxEwETERMhF6EgRcBAAAEgcAABMHAADBDwAABEIEAABEBAAAnhMAAJ8TAAAFYQQAAG8HAAByBwAASw8AAE0PAAADIwwAACQMAABMDwAAOzAAAAEAAAYAAwDCAQAAsAYAAJITBAAB7xIAAAEmDAAA\",\"AAAAAVkRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAA==\"]AOc[\"AAAEUgIAALgCAACfBgAAowYAAAMDDAAABAwAAAUMAAACswEAAMMBAAA7MAAAAQAAhgABAIARhgAAOzAAAAEAAAgABABDBQEA5hIDANMTAAAkFAEABXAHAABzBwAAsgcAALQHAADUEwAAOzAAAAEAABIABwBzBQEA6AYAAD8JAQAtDAQAfQwAAD0RAwAeEgMAOjAAAAEAAAAAAAoAEAAAAGIEYwRrBGwEsQezB1EPLxEwETERMhEFXAQAAF4FAAASBwAAEwcAAMQQAAAEQgQAAEQEAACeEwAAnxMAAARvBwAAcgcAAEsPAABNDwAABMUGAAAjDAAAJAwAAEwPAAAFkhMAAJMTAACUEwAAlRMAAJYTAAAB7xIAAAABpwUAAA==\",\"AAAAAAACSAUAAEkFAAAAAgEMAAACDAAAAcIPAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAAAAAAAAA94GAAAYEQAAGREAAA==\"]Dc[\"\",\"AAAAADswAAABAAAHAAEAIgkHADswAAABAAAJAAIAvhAEABMRBAAAARIRAAA=\"]ADm[\"AAAABrABAACyAQAAvwEAAMEBAADYDwAA2Q8AAAS2AQAAyQEAADYKAAA4CgAAOjAAAAEAAAAAAAkAEAAAALEBtwG4AcABygHLAaYKqgqgE6ETOzAAAAEAAA0ABACsBAcAfA8AAGkQAwByEwAAArsBAACiEgAAOzAAAAEAABUACgCmAQEArQEAACsMAQB2DAEAzw8DAFgQAQByEgMAQxMAAMATAQALFAEAAcITAAAAAAAAAAAAAAGnBQAA\",\"AAABqwEAAAK0BAAABxIAAAAAAAJCDwAAUBAAAAAAAAAAAAAAAAAEoQYAAKUGAAB6DAAAewwAAA==\",1]Fk[\"AAAABOsEAAAVBwAAuAcAABwRAAACIwkAAPYLAAABsxAAAAABwwcAAAELAQAAAqUPAAASEwAAAdQGAAA=\",\"AAAAAesEAAABtgEAAA==\"]Fk[\"AAAABDUFAAAZBwAAvAcAACMRAAACJwkAAPoLAAABtxAAAAGOAQAAAcUHAAAAAqcPAAAWEwAAAdgGAAA=\",\"AAAAATUFAAAByQEAAA==\"]AEa[\"AAAAAq4BAAC6AQAAOzAAAAEAAAcAAQAiCQcAAARgBQAAYQUAAGIFAAASEgAAAAABwhMAAAAAAAKiEAAAoxAAAA==\",\"AAAAADswAAABAAAQAAMAlgYAACIJBwD1CwcAOzAAAAEAAAsABAD2BgAApBAAAL4QBAATEQQAOzAAAAEAAA8ABQCsBAcAEwwCABsSAgBTEgAA1xMAADowAAABAAAAAAAKABAAAADOENAQ0hDUENYQEhE1ETYRNxE4EVMTBCsQAAAsEAAALRAAAC4QAAAAAAXNEAAAzxAAANEQAADTEAAA1RAAAAAAAAAAAAKnBQAARw8AAA==\",1]Ec[\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCADswAAABAAAGAAIApwYEAAoJAQADXgQAAFMFAABUBQAA\",\"\"]Dg[\"AAAAAAAAAAABsxMAAAHzEwAAAAAAAAAAAAABVAcAAA==\",\"AAAAAAABWhIAAAE+EwAA\"]Eo[\"AAAAAekEAAABtQEAAAIqAAAAmQAAAAGwDwAAAUQDAAACBgEAAAcBAAA=\",\"AAABqAAAAAHpBAAAAQATAAAAAe0LAAA=\"]Ic[\"AAAAASsFAAADxwEAABoTAACZEwAAAlgAAACmAAAABnsBAAB8AQAAQwQAAKYFAAC9DwAA5RMAAAFRAwAA\",\"AAABqQAAAAIrBQAAAhMAAAAB8QsAAAAAAAAAAAAAAAAAAAKqAAAAqwAAAA==\"]Ik[\"AAAAArwEAABxEgAAAfMGAAABkwYAAAGyAAAAAQoRAAABshMAAAIUEgAA8hMAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAGcFkQZRB9IHig+hD9MPXBCmEEER\",\"AAAAAbwEAAAAAVkSAAABPRMAAA==\"]Ck[\"AAAAAd0BAAAAAAAAAbYTAAAB9hMAAA==\",\"AAAAAAABXRIAAAFBEwAA\"]Ck[\"AAAAAd4BAAAAAAAAAbcTAAAB9xMAAA==\",\"AAAAAAABXhIAAAFCEwAA\"]Kk[\"AAAAAAAABFoFAABgBQAAYQUAAGIFAAAAOzAAAAEAAAkAAQCqCwkAOzAAAAEAAA0AAQBMBA0AOzAAAAEAAAkABAAfDAMASA8CAMMQAADXEAEAAAEnDAAAAyUMAABLDwAATQ8AAAIjDAAATA8AAA==\",\"AAAAAAABpBAAAAMTDAAAFAwAABUMAAA=\"]Nk[\"AAAAAAAAAngSAAB5EgAABOYSAADnEgAA6BIAAOkSAAAC7BIAAO0SAAAF6AYAAB4SAAAfEgAAIBIAACESAAACYgQAAGMEAAACXgUAAMQQAAAAAAHFBgAAAAAAAacFAAA=\",\"AAAAAAJWBQAAxhMAAAAF/BMAAB8UAAAgFAAAIRQAACIUAAABUxMAAALCDwAA/RMAAAAAAAAAAAAAAAQwEAAAMRAAADIQAAAzEAAA\"]Bg[\"AAAAAAAAAARWEQAAVxEAAHYTAAB3EwAA\",\"\"]Bk[\"\",\"AAAAAVURAAAAAAAAAAAAAAAAAAAAAAFVDwAA\"]Cc[\"AAAAAAAAAWMQAAABZBAAAA==\",\"AAAAAAACOQkAADoJAAA=\"]FHc[\"AAAAADswAAABAAAVAAkADAIGAEoEAABrBQAA1AcAAP8LAAA0EAMAWBIAAJcTAQD+EwMAOzAAAAEAABMCEgBBBAAAWgQAAGAEAADJBgAA7wsDALsMBQDDDG0BxA8AAMkPAAA5EAAAVxAAALIQBwAREQAAgBGGABcSAAAZEgAA6xIAAE4TAAA7MAAAAQAAwwAPALIAKAAZAXAAjAEPAEMEAABaBQAApgUAAKwGAwCxBgIAwgYBAOsLAwBGDwAAHhMAAD0TBQDlEwAA+BMAADswAAABAAChAEIAPwMUAF0EAABnBAEAcgQCAEYFAABbBQEAdQUAAKcGBAC1BgwAvwcBAMIHAwDACAEACgkBACAJAQArCQEAAQwBABEMAQAeDAAAwQwBAEMPAQBTDwEAiw8BAI4PAQCoDwAAyg8BANQPAQDcDwAAOhAAAEoQAQBhEAEAZBAAAMkQAQASEQAAHREAAB8RAAAhEQAAJBEAACYRAAAoEQAAMxEFAEIRAQBFEQIAVhEBAAgSAQBqEgEAohIAANcSAQDdEgEA5hIDAAQTAQBEEwEAVBMBAFgTAQB2EwEAfhMBAKgTAQC4EwEA1RMBAOATAwDuEwMABBQAABIUAQAWFAEAGRQBAB0UAQAkFAEAOzAAAAEAAJAAJwDbAD0AigEBAKYBAQBABAAAXgQAAGUEAABTBQEAbQUBAHAHAABzBwAAsgcAALQHAACqCwkAKwwBAHYMAQBPDwEAhA8BAMIPAADPDwMAWBABAKwQAQDFEAEAFRIAAGASAQByEgMA7BIBAA0TAQA5EwEATBMBAE8TAwBzEwAAshMFAMATAQDFEwAA1BMAAPoTAQD9EwAACxQDABsUAQA7MAAAAQAAMQANAEwEDQBzBQEA6AYAAD8JAQAbDAAAfQwAADEOAACkDwMAPREDAB4SAwAREwcASRMBAPITBQA7MAAAAQAAHAANAGIEAQBrBAEA0wYHALEHAACzBwAAHwwDAEgPAgBRDwAAbRABAMMQAADXEAEAehIAAAUUAAA6MAAAAQAAAAAABwAQAAAAXAReBcEPxBA7ETwRaRLcEwNCBAAARAQAACcMAAA6MAAAAQAAAAAACAAQAAAAYQRtB28HcgclDEsPTQ+iEKMQBMUGAAAjDAAAJAwAAEwPAAA7MAAAAQAABQACALAGAACSEwQAAAEmDAAAAacFAAA=\",\"AAAAAAA7MAAAAQAA5gABAMMM5gAAOjAAAAEAAAAAAFkAEAAAAGcEaAS/B8AHwAjBCCAJIQkrCSwJAQwCDBEMEgzBDMIMQw9ED1MPVA+LD4wPjg+PD8oPyw/UD9UPShBLEGEQYhDJEMoQHREfESERJBEmESgRMxE0EUIRQxFWEVcRCBIJEmoSaxLXEtgS3RLeEgQTBRNEE0UTVBNVE1gTWRN2E3cTfhN/E6gTqRO4E7kT1RPWE+AT4RPiE+MT7hPvE/AT8RMSFBMUFhQXFBkUGhQdFB4UJBQlFDswAAABAAAvABQApgEBAG0FAQArDAEAdgwBAIQPAQDPDwMAWBABAKwQAQDFEAEAYBIBAHISAwDsEgEADRMBADkTAQBMEwEATxMDAMATAQD6EwEACxQDABsUAQAEPwkAAEAJAABJEwAAShMAAAACOxEAADwRAAAAAqIQAACjEAAA\"]Ic[\"AAAAARoRAAAABFcFAAAPCQAAEAkAABESAAA7MAAAAQAADAADAHUEBQDKBgUAkRMAAAADbAcAAMUQAADGEAAAASYQAAAAB80QAADPEAAA0RAAANMQAADVEAAAOxEAADwRAAAAAW0HAAA=\",\"\"]Lk[\"AAACUwIAALYCAAAAArYBAADJAQAAOzAAAAEAAAsAAwC3AQEAygEBALIQBwA7MAAAAQAABwABAKwEBwA6MAAAAQAAAAAABwAQAAAAvwfAB4sPjA/UD9UPMxE0EQACSRMAAEoTAAA=\",\"AAAAAYIPAAAAAAAAAAAAAAAAAAAAAAWBDwAAgw8AAIoPAACNDwAASxMAAA==\"]AAg[\"AAAEVQIAALcCAAARCQAAEgkAAASsAQAAtAEAALkBAADGAQAAAlkCAAC/AgAAAAA6MAAAAQAAAAAAEwAQAAAAZwRoBMAIwQg8ED4QQBBCEEMQzhDQENIQ1BDWEGoSaxIWFBcUGRQaFALsEgAA7RIAAAUtDAAALgwAAC8MAAAwDAAAMQwAAAAFzRAAAM8QAADREAAA0xAAANUQAAAAAAACwgEAALAGAAA=\",\"AAAAAAAAAAAAAAAAAAAAAAAABMIIAADDCAAAxAgAAMUIAAA=\"]BLk[\"AAADDgkAANkSAADaEgAABaoBAAAYCgAAVREAAN8SAADgEgAAOjAAAAEAAAAAAAcAEAAAALUBxwETCRQJ/wlQCnoKFhIBFxIAAAEeEwAAOjAAAAEAAAAAABEAEAAAAMIHwwfEB8UHQg/KD8sPUBAdER8RIREkESYRKBFEE0UT4BPhEwFDEwAAOzAAAAEAAAsAAgCkDwMAERMHADswAAABAAAJAAMA0wYHALEHAACzBwAAAAACbwcAAHIHAAA=\",\"AAAETQUAAE4FAAA4DwAAOQ8AADswAAABAAAWAAsAFAcHABsRAQAeEQAAIBEAACIRAQAlEQAAJxEAAAoSAQBwEwEAdBMAAL4TAQACGhMAAJkTAAABERIAAAAAAAAAAAAAAAAAADowAAABAAAAAABvABAAAACgAaEBowGkAQICAwIJAgoCSQRLBG0EtgS5BKAGpAbRBtIGBgcHB/wI/QgyCTMJ/gsADBYMFwwcDB0MKAwpDD4PPw9AD0EPVg99D34Pnw+gD9MPKBApEEYQRxBIEEkQVRBWEFoQWxBlEGYQnBCdEKYQqBCpEK8QsBC6ELsQvBC9EDkROhFNEU4RDRIOEg8SEBJVElYSYhJjEm4ScBKXEpgSmRKaEpwSnRKeEp8S2xLhEuIS4xL+Eg8TEBMZEx8TIBMhEyITIxMkEzsTPBNWE1cTXRNeE3wTfROcE50T2RPaEw==\"]Ac[\"AAAAAAEwAwAA\",\"\"]Ca[\"AAAAAAJZAgAAvwIAADswAAABAAAFAAEATxEFAA==\",\"\",1]Ek[\"AAAAAAAAAAAAAAAAAAAAAAAAAsYGAADcBgAA\",\"AAAAAAACOxAAAD0QAAAAAjwQAAA+EAAAAAIeEgAAHxIAAA==\"]Eo[\"AAAAAAAAAAAAAAAAAAAAAAAAAscGAADdBgAA\",\"AAAAAAACPxAAAEEQAAAAA0AQAABCEAAAQxAAAAACIBIAACESAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAABXAAAACkAQAArQcAAMwHAADECAAA\",\"\"]Bg[\"AAAAAAAAAU4PAAAAAAAAAjsRAAA8EQAA\",\"\"]Gk[\"AAAABGEAAADFBAAAagUAANcPAAABDgIAAAYOAAAASAQAAEUFAAAEBwAASxEAAJsTAAACxwAAAFIPAAAAAloTAACxEwAA\",\"AAAAAcUEAAABvwgAAAFGBAAA\"]Ic[\"\",\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAwxAAANcQAQAAAScMAAADJQwAAEsPAABNDwAAAyMMAAAkDAAATA8AAAAAASYMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Hk[\"AAAD0AEAAAoMAAANDAAAAegEAAABtQEAAAQpAAAAmAAAADsQAAA9EAAAAa8PAAABQwMAAAMFAQAADREAAA4RAAA=\",\"AAAC0AEAAAYMAAACaQQAAOgEAAAB/xIAAAAB7AsAAA==\"]Hk[\"AAAD0QEAAAsMAAAODAAAASoFAAABxwEAAARXAAAApQAAAD8QAABBEAAAAnoBAAC8DwAAAVADAAADXgQAAA8RAAAQEQAA\",\"AAAC0QEAAAcMAAADagQAACoFAAABEwAAAAHwCwAA\"]2ALo[\"AAAAAAEqEAAAAAA6MAAAAQAAAAAAEQAQAAAAuwFdBBEMEgzBDMIMQw9ED8kQyhAIEgkS7hPvExIUExQdFB4UAmUEAABDEwAAOzAAAAEAAAsAAgCkDwMAERMHADswAAABAAAHAAEA0wYHAAAAAAACwgEAALAGAAA=\",\"AAAHTwUAAFAFAAAKDAAACwwAAA0MAAAODAAAGBIAADowAAABAAAAAAAXABAAAAC1B7YHHgkqCQwMDwwQDDoPOw9MEE0QThCbEBoRKhErESwRLREuEUYTrxOwE8MTxBM7MAAAAQAA+QACADkO9QAGEwMAOzAAAAEAAFkABAALAFUA3BIAAAsTAQB1EwAAAfgTAAAAAAQ9EQAAPhEAAD8RAABAEQAABC8RAAAwEQAAMREAADIRAAABaRIAAAAAAAAAAAdxBAAAZwUAANAGAAA2DgAAnhAAAK4QAABBEQAA\"]Dk[\"AAAAAAIBCgAAUQoAAAAAADswAAABAAAFAAEATBIFAAACYgQAAGMEAAAAAkIEAABEBAAA\",\"\"]BOc[\"\",\"ADswAAABAAAFAAIAOwQEAPkTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwTElcSbBLYE+QTAhQRFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAWElgS6hKXE5gT2xP+E/8TABQBFBQUGBQ7MAAAAQAAKAERAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAALsMBQCqDYYAORAAALIQBwAREQAAgBGGABcSAAAZEgAAoRIAAOsSAAAKEwAAOjAAAAEAAAAAABoAEAAAAFoFYAVhBWIFwgbDBsoGywbMBs0GzgbPBrULtgu3C7gLTg9SD2MQyBASEh4TWxNcE3IT5RMDFDswAAABAAA7ABIAPwMUAGYEAAByBAIAQwUBAEYFAABbBQEAdQUAALUGDADCBwMAtAsAAB4MAACoDwAA3A8AAGQQAACiEgAA5hIDANMTAAAEFAAAOzAAAAEAAFMADADbAD0AigEBAGUEAABwBwAAcwcAALIHAAC0BwAATBIFAHMTAACyEwUAxRMAANQTAAA7MAAAAQAAFAAGAEwEAAB9DAAAMQ4AAKQPAwAREwcA8hMFADswAAABAAATAAkAYgQBAGsEAQDTBgcAsQcAALMHAABIDwIAUQ8AAMMQAAB6EgAAAhIHAAATBwAAAScMAAADbwcAAHIHAAAlDAAAAAWSEwAAkxMAAJQTAACVEwAAlhMAAA==\"]Bc[\"AAAAAAAAAAAAAAACOxEAADwRAAA=\",\"\"]Kc[\"AAAAAAHlEgAAADswAAABAAAGAAIAygYFAMgQAAACRgUAANwPAAABZQQAAAADbRAAAG4QAAB6EgAAAcEPAAA=\",\"AAAAAAABYAQAADswAAABAAAFAAEAdQQFAAAAAAAAAAAAAAAABwsCAAC1BAAAuAQAAN8GAADgBgAA4QYAAOIGAAA=\"]Do[\"AAAAAAABGAAAAAAAAd8AAAAAAAAAAAAAAAACtQQAANEGAAA=\",\"AAAAAAAAAAACTw8AAFAPAAA=\"]Dk[\"AAAAAAABMAAAAAEfAQAAAAAAAAAAAAAAAAACuAQAANIGAAA=\",\"AAAAAAAAAAABQAQAAA==\"]Ac[\"AAABYQIAAA==\",\"\"]Fg[\"AAAABO0EAAAWBwAAuQcAAB4RAAADJAkAAPcLAAD/EwAAAbQQAAAAAAENAQAAARMTAAAB1QYAAA==\",\"AAAAAe0EAAAAAbcBAAA=\"]Fg[\"AAAABDcFAAAaBwAAvQcAACURAAADKAkAAPsLAAABFAAAAbgQAAABkAEAAAAAARcTAAAB2QYAAA==\",\"AAAAATcFAAAAAcoBAAA=\"]Bk[\"\",\"AAAAAAAAAAA7MAAAAQAAPwACANsAPQCKAQEA\"]Ck[\"\",\"AAAAAAGWBgAAOzAAAAEAAAkAAgD2BgAA+AYIAAHXEwAAAVMTAAA=\"]Bo[\"\",\"AAAAAAAAAAAAAAAAAp4TAACfEwAAAAAAAe8SAAA=\"]Ck[\"AAACYwIAAHQCAAA=\",\"AAAAAAAAAmATAABhEwAAAAACPREAAD4RAAA=\"]Eo[\"\",\"AAAAAAA7MAAAAQAABQABAFkSBQA7MAAAAQAABQABAD0TBQAAOzAAAAEAAAUAAQCyEwUAOzAAAAEAAAUAAQDyEwUA\"]Cc[\"\",\"AAAAAAL/EgAAABMAAAAE6wsAAOwLAADtCwAA7gsAAA==\"]Eo[\"AAAAAfEEAAAAAS0AAAAAAAIVAQAAFgEAAA==\",\"AAA7MAAAAQAACgACAJICBQCZAgQAAvEEAADmEwAAAAABeBIAAA==\"]Eo[\"AAAAATEFAAAAAV8AAAAAAAKKAQAAiwEAAA==\",\"AAA7MAAAAQAACgACABgDCQAjAwAAAjEFAADnEwAAAAABeRIAAA==\"]Dg[\"AAAB/wIAAAEwBQAAAAFdAAAAAoUBAACGAQAA\",\"AAABDgMAAAEwBQAAAAAAAAFeBAAA\"]Eo[\"AAAAAAAAApUBAACWAQAA\",\"AAAAAAAABvwTAAADFAAAHxQAACAUAAAhFAAAIhQAAALTEwAABBQAAALUEwAA/RMAAA==\"]Bk[\"AAAAAAAAAUUBAAA=\",\"AAAB2AIAAAAAAVoEAAA=\"]Bg[\"AAAAATsFAAAAAAGXAQAA\",\"AAAAATsFAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAXgMAAA=\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA64HAADNBwAAxQgAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAnEEAACvBwAA\",\"\"]Cc[\"AAAAAAAAAAIKCQAACwkAAAAAAAAAAAACwgEAALAGAAA=\",\"\"]Fo[\"AAAAAAACVwUAABkSAAAAAAAAAAAAAAAAAAAE0wcAAFYPAABnEAAAWBEAAA==\",\"AAF1BwAAAAAAAAAAAAAAAAAAAAAAAAJoEAAADBEAAA==\"]Bk[\"AAAAAVkFAAAAAAFODwAAAagPAAA=\",\"AAGmBwAA\"]Bg[\"AAAAAAAABGkQAABqEAAAaxAAAGwQAAA=\",\"\"]Ag[\"AAAAAq4BAAC6AQAA\",\"\"]Dg[\"AAAAAAAAAAAAAj8JAABACQAA\",\"AAAAAAAAAAAABS0MAAAuDAAALwwAADAMAAAxDAAA\"]AEg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAACwAEAHMFAQAtDAQAfQwAAD0RAwA6MAAAAQAAAAAACwAQAAAAawRsBLEHswdRD20QbhAvETARMREyEXoSBFwEAAASBwAAEwcAAMEPAAAEQgQAAEQEAACeEwAAnxMAAAVhBAAAbwcAAHIHAABLDwAATQ8AAAMjDAAAJAwAAEwPAAA7MAAAAQAABgADAMIBAACwBgAAkhMEAAHvEgAAASYMAAA=\",\"AAAAAVkRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAAAAACQgQAAEQEAAA=\"]He[\"\",\"AAAAAAAEMgwAADMMAAA0DAAANQwAAAIIDAAA1xMAAAIKEQAAUxMAAAUrEAAALBAAAC0QAAAuEAAAQxMAAAEUEgAAAAFpEgAAAAFtBwAAAAHCAQAAAAABpwUAAA==\",1]AMk[\"AAACvAEAAMUBAAAGrAEAALQBAAC5AQAAxgEAAN8SAADgEgAABFgFAAA3CQAA/gkAAFIKAAAEMgwAADMMAAA0DAAANQwAAAJbEwAAXBMAADowAAABAAAAAAAHABAAAAAKCQsJShBLENcS2BLVE9YTOjAAAAEAAAAAAAkAEAAAAEAEcAdzB7IHtAdPD1APwg/6E/sTAAKxBwAAswcAAA==\",\"AAAAOjAAAAEAAAAAABAAEAAAAKIBTQdOB08HUAfVB9YHNgzFD8YPYBDLEMwQZhJnEqAS3xMDNAkAACoQAACbEgAABjIMAAAzDAAANAwAADUMAABtEgAAbxIAAAAAAAJzBQAAdAUAAAACXAQAAMEPAAAAA2EEAABLDwAATQ8AAAMjDAAAJAwAAEwPAAAAAAImDAAAggwAADowAAABAAAAAAALABAAAAClAW4EbwS3BLoEjwaQBggHUQfSB9MHoQ8=\"]Bg[\"AAAAAAAAAAAAAVcEAAA=\",\"AAAAAaQFAAA=\"]Bk[\"AAAAAAAAADswAAABAAANAAIAdQUAALUGDAA=\",\"\"]Cc[\"AAABAQkAAAABEgIAAAAAAAFABAAA\",\"AAAAAAAAAAFdBAAA\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAbAGAAA=\",\"\"]Be[\"AAAAAAAAA2AFAABhBQAAYgUAAA==\",\"\",1]Bg[\"AAAAAAAAADswAAABAAAUAAEAPwMUAA==\",\"\"]Dk[\"AAAAAAHIAQAA\",\"AAAAAAUtCQAALgkAAC8JAAAwCQAAMQkAAAAAAAAAAAAAAAAAAAH/DwAA\"]Cc[\"AAAAAcQEAAAAAQ0AAAACvwAAAMAAAAA=\",\"AAAAAcQEAAA=\"]Bg[\"AAAAAAAAAAAAAVIEAAA=\",\"AAAAAcYHAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWYAAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAaoAAAA=\",\"\"]C@i[\"AAAAAAHIAQAAAaESAAABchMAAAK7AQAAohIAADowAAABAAAAAAAbABAAAACtAW0FbgWED4UPrBCtEGASYRINEw4TORM6E0wTTRNPE1ATURNSE1oTcxOxE/oT+xMNFA4UGxQcFDswAAABAAAGAAMAPwkBAKQPAwDCEwAAAQUUAAAB3BMAAAAAAcUGAAAAAAABpwUAAA==\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAAEAwwAAAQMAAAFDAAABxIAADowAAABAAAAAAAXABAAAACcAakEbgdxB8cHvgi/CC0JLgkvCTAJMQk0CSEQIhAjECQQJRCbEqQSBhMHEwgTCRM7MAAAAQAAIAAOANkBAADbAQAAQQQAAEYEAABaBAAAYAQAAPgGCAAyDAMARQ8AAFcQAAC+EAQAExEEAOQSAABOEwAAOzAAAAEAACMACQBDBAAAdQQFAKYFAADQBwAARg8AAKsPEwBTEgEAYBMBAGMTAQA7MAAAAQAACAAEADoQAAA1EQMARRECAHsTAAA7MAAAAQAADAAGAEAEAABPDwEAKxADAA0RAwBaEwAAsRMAAAQeEgAAHxIAACASAAAhEgAAOzAAAAEAAAYAAwAfDAMA1xABAAUUAAAEXAQAAMEPAADEEAAA3BMAAAAAAcUGAAABwgEAAAAAOjAAAAEAAAAAABwAEAAAAKwArQCuAK8Apga0BgEHAgcDB/oIOwk8CT0JPglBCUIJkA+pD6oPzA/ND84PXRBeEF8QRBEMEoATIxQ=\",1]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Jo[\"AAAAAc8EAAAAOjAAAAEAAAAAAAcAEAAAABkAlQDZAUYERQ9QEVMRCxMCrA8AAFMSAAACQAMAALYGAAAC4AAAAOEAAAAAAbEHAAAAAAFvBwAA\",\"AAF6BwAAAANhAAAAYgAAAM8EAAACWQIAAMcHAAACUBEAAFMRAAAAAagGAAA=\"]A@c[\"AAAAAfgEAAAABzIAAACdAAAA2wEAAFIRAABUEQAA5BIAAAwTAAAHIgEAACMBAABGDwAAtA8AAMAPAABPEAAAVBIAAARIAwAAuwYAAB4MAAB7EwAAARUSAAABMQ4AAAKzBwAABRQAAAHcEwAAAAFyBwAA\",\"AAGPBwAAAAH4BAAAAr8CAABWBQAAAlIRAABUEQAAAa0GAAAAAAEbDAAAAAFpEgAAAAAAAAAABWYAAABnAAAAaAAAAGkAAABqAAAA\"]Bo[\"\",\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwA=\"]CCi[\"\",\"AAA7MAAAAQAA5gABAMMK5gA7MAAAAQAA7QAMAMoJMwAACgAAAgozADcKAAA5ChYAUwofAHQKBQB7CikApwoCAKwKFgBSEgAA5hMBADowAAABAAAAAAASABAAAABdBaUFlgYTCRQJ/gn/CQEKNgo4ClAKUQpSCnMKegqlCqsK/xIAEzowAAABAAAAAAASABAAAABIBEUF9gYEBzkJOgmmCqoKSxFZEloSWxJcEl0SXhIKE5sToBOhEzswAAABAAAoABQAwgYBANAHAAC1CwMA6wsDAAgMAABSDwAAfA8AAMAPAABPEAAAYxAAAGkQAwDIEAAAeBIBAD0TBQBgEwEAYxMBANcTAAD8EwAAAxQAAB8UAwA6MAAAAQAAAAAAGgAQAAAAXQRyBHMEdARbBVwFpwaoBqkGqgarBh4M3A88ED4QQBBCEEMQZBASEUURRhFHEVMTexPTEwQUOzAAAAEAAFoAEADbAD0AigEBAEAEAABeBAAAZQQAAFMFAQBsBwAATw8BAMIPAAAVEgAATBIFAFoTAACxEwYAxRMAANQTAAD9EwAAOzAAAAEAABEACABzBQEAGwwAAH0MAAAxDgAAJhAAAD0RAwBJEwEA8hMFADowAAABAAAAAAAIABAAAABiBGMEUQ9tEG4Q1xDYEHoSBRQ6MAAAAQAAAAAACwAQAAAAXAReBRIHEwfBD80QzxDRENMQ1RBpEtwTBEIEAABEBAAAnhMAAJ8TAAADbQcAAG8HAAByBwAAAiQMAABMDwAAOzAAAAEAAAYAAwDCAQAAsAYAAJITBAAB7xIAAAABpwUAAA==\",1]Le[\"\",\"AAAAAswBAACUBgAAA/QGAAA8DwAAPQ8AAAPmBgAAbRIAAG8SAAA6MAAAAQAAAAAABwAQAAAATg8SEhsSHBIdElsTXBOREwJmBAAAtAsAAAGtAQAAAcITAAAESA8AAEkPAABKDwAAwxAAAAABJwwAAARhBAAAJQwAAEsPAABNDwAAASMMAAAAAAEmDAAA\",1]Gc[\"\",\"AAAAOjAAAAEAAAAAAAcAEAAAAN0B3gETEmwS2BPkEwIUERQC8wYAACoQAAAFkwYAAA8JAAAQCQAAfw8AABESAAABHhMAAAEKEQAAAUMTAAA=\"]Bo[\"\",\"AAAAAgETAAACEwAAAATvCwAA8AsAAPELAADyCwAA\"]Bk[\"\",\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCAA==\"]Fc[\"AAAAAcQBAAAAAAAABG0FAABuBQAAhA8AAIUPAAA=\",\"AAA7MAAAAQAAPgABADcMPgAAAAAAAAAAAAAAAAAAAAAB4wYAAA==\"]Ao[\"\",\"AAA7MAAAAQAA5gABANcH5gA=\"]A@o[\"AAAEagIAAHsCAACBAgAAOA8AAAHNBAAAA+oSAAAUFAAAGBQAAAMWAAAAlAAAAE8RAAABqw8AADowAAABAAAAAAAMABAAAAA/A3IEcwRDBUQFWwW1BkIRVBN+E6gT4hPwEwLbAAAA3AAAAA==\",\"AAF5BwAAOzAAAAEAAAYAAwBRAgQAEQkAANkSAAABzQQAAAQTCQAA/gkAAP8JAAABCgAAAU8RAAAB6wsAAAOnBgAARREAAEYRAAAAAAAAAAAAAAAAATAPAAA=\"]AAk[\"AAAE3QIAAAEDAAAJAwAAOQ8AAAH1BAAAAAQuAAAAmwAAAFERAADrEgAABBsBAAAcAQAAsg8AAOUTAAA6MAAAAQAAAAAACgAQAAAARgN0BEYFXAW6BkMRVRN/E6kT4xPxEwABMQ4AAA==\",\"AAGOBwAAOzAAAAEAAAYAAwC2AgQAEgkAANoSAAAB9QQAAAQUCQAAUAoAAFEKAABSCgAAAu8LAABREQAAAqwGAADQBwAAAUcRAAAAAAAAAAAAAAAABDIPAAAzDwAANA8AADUPAAA=\"]Gc[\"AAA7MAAAAQAACwAEABwQBAADEwAAqhMEABUUAAA=\",\"ADswAAABAAAJAAMAUgcBAFUHAgDSEgQAOzAAAAEAAAsABAAcEAQAAxMAAKoTBAAVFAAA\"]Ic[\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAwxAAANcQAQAAAScMAAADJQwAAEsPAABNDwAAAyMMAAAkDAAATA8AAAAAASYMAAA=\",\"\"]Cc[\"AAAAArABAADLEAAAAAAAAAErDAAAAAFrBAAAARIHAAA=\",\"\"]Cc[\"AAAAAr8BAADMEAAAAAAAAAEsDAAAAAFsBAAAARMHAAA=\",\"\"]ABg[\"AAAAAvASAADxEgAAAAW3AQAAuAEAAMoBAADLAQAAEREAADswAAABAAALAAMArAQHAFoFAAATDAIAOjAAAAEAAAAAAAcAEAAAAEYFwgfDB8QHxQdTD1QPqA8HDREAAA4RAAAPEQAAEBEAAHMTAADFEwAA/RMAADswAAABAAANAAQAGwwAADEOAACkDwMAERMHADswAAABAAAHAAEA0wYHAAPEEAAAaRIAANwTAAAAAW0HAAABxQYAAAAAAAGnBQAA\",\"AAAAA9MBAADUAQAA1QEAAAABVxAAAA==\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUQUAAOkGAAA=\",\"AAAAAAAAAAI1EQAANhEAAAAAAAAAAAAAAAACxgYAANwGAAA=\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUgUAAOsGAAA=\",\"AAAAAAAAAAI3EQAAOBEAAAAAAAAAAAAAAAACxwYAAN0GAAA=\"]Ak[\"\",\"AAAAAAKiDwAAow8AAA==\"]Eo[\"AAAABO8EAAAXBwAAugcAACARAAACJQkAAPgLAAABtRAAAAAAAQ8BAAABFBMAAAHWBgAA\",\"AAAAAe8EAAAAAbgBAAA=\"]Eo[\"AAAABDkFAAAbBwAAvgcAACcRAAACKQkAAPwLAAABuRAAAAGSAQAAAAABGBMAAAHaBgAA\",\"AAAAATkFAAAAAcsBAAA=\"]Bg[\"AAAAAAAAAAAAAVEEAAA=\",\"AAAAATgJAAA=\"]Ag[\"AAACrwEAAL4BAAA=\",\"\"]Ao[\"AAAAAAAAAAAAAAAAAAElDAAA\",\"\"]Ag[\"\",\"AAACRBAAAEUQAAA=\"]Bg[\"AAAAAAAAAAAAARQSAAA=\",\"AAABbwAAAA==\"]Dg[\"AAAAAtMBAADUAQAAAAADYAUAABMMAAAbEgAAAAGtAQAAAcITAAA=\",\"AAAAAQcSAAA=\"]Hg[\"AAAAASoRAAABBhMAAAM7EAAAvxAAABQRAAABYBMAAAE1EQAAASsQAAACPREAAB4SAAABLxEAAAAAAAABkxMAAA==\",\"AAAAAAAAAALOEAAA0BAAAAAAAALNEAAAzxAAAA==\"]Ig[\"AAAAAS0RAAABCBMAAAM/EAAAwRAAABYRAAABYxMAAAE3EQAAAS0QAAACPxEAACASAAABMREAAAAAAAABlRMAAA==\",\"AAAAAAELEQAAAAAD0hAAANQQAADWEAAAAAAAA9EQAADTEAAA1RAAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAm4AAAA1DwAA\",\"\"]Bk[\"AAAAAAAAAdoAAAAAAAFZBAAA\",\"AAAAAc8HAAA=\"]Cc[\"AAAAAWAQAAABGhMAAAACQwQAAKYFAAA=\",\"AAAAAAHUBwAA\"]Ek[\"AAAAAdQEAAAAAR0AAAAAAAHmAAAAAAAAAAAAAAAAArcEAACPBgAA\",\"AAF/BwAAAAHUBAAAAAAAAAAAAW0QAAA=\"]Ek[\"AAAAAQUFAAAAAT0AAAABNAEAAAAAAAAAAAAAAAAAAroEAACQBgAA\",\"AAGWBwAAAAEFBQAAAAAAAAAAAW4QAAA=\"]Be[\"AAAAAAA7MAAAAQAAhgABAIARhgA=\",\"\",1]Bg[\"AAAAAAAAAAAAAVQEAAA=\",\"AAAAAeoLAAA=\"]Ec[\"AAAAAAAAAAAAAAAAAAJvBwAAcgcAAAHFBgAAAsIBAACwBgAA\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Dk[\"AAAAAAAAAAABtBMAAAH0EwAA\",\"AAAAAAABWxIAAAE/EwAAAAAAAAAAAAAAAAABVAcAAA==\"]Dg[\"AAAAAR0FAAAAAAJfAQAAYAEAAAG+BgAAAAAAAAAAAAAAAAELAgAA\",\"AAAAAR0FAAA=\"]ABc[\"AAAAA6oBAAAQCgAAVREAAAPEBgAAcwoAALEQAAAAADowAAABAAAAAAANABAAAAAgCSEJKwksCY4Pjw9hEGIQ3RLeEgQTBRNYE1kTOzAAAAEAAA8ABwCsEAEATBIFAA0TAQBaEwAAsRMAAA0UAQAbFAEAAAEFFAAAAdwTAAA=\",\"AAAAA50BAACoAQAAJxAAAAQhEAAAIhAAACMQAAAkEAAAAtkBAADbAQAAAAACWhMAALETAAAAAQUUAAAB3BMAAAAAAAAAAATaAQAA3AEAAP4IAABYEQAA\"]Bk[\"AAAAAAHzBgAA\",\"AAAAAAAAAAEKEQAAAAEUEgAA\"]Ho[\"AAAABcIEAABpBQAApAUAAHwMAABmEgAAAj0PAADbEwAAAuYGAAChEgAAA70AAAASEgAAchMAAAFEBQAAAWwHAAABJhAAAA==\",\"AAAAAsIEAACUBgAAAfQGAAAAAAABrQEAAAHCEwAA\"]Gc[\"AAAAAmcSAAB0EwAAAZsGAAAByQYAAAEaAQAAAjoQAACiEgAAAAHoBgAAAAFeBQAAAAFtBwAAAcUGAAAAAAABpwUAAA==\",\"AAAAAAAAAAG7AQAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAW0AAAA=\",\"\"]Fg[\"AAADyAYAAOcGAACcDwAABA8MAABTEAAAShEAAMMTAAAFDQIAAF0FAAClBQAAbgcAAC8JAAAAAsMAAAB8DwAA\",\"AAABqhAAAA==\"]Fg[\"AAAABBAMAABUEAAATBEAAMQTAAACcQcAADAJAAAByQYAAAFiAQAAAAAB6AYAAAABXgUAAAAAAAAAAAGnBQAA\",\"AAABqxAAAA==\"]Dg[\"AAAAASIFAAAAAVEAAAABawEAAA==\",\"AAAAASIFAAAAAAAAAAAAAAAAAAAAAAFwAAAA\"]Bk[\"AAAAAAEMAgAAAAAAAAFOBAAA\",\"AAAAARkMAAA=\"]Cc[\"AAAAAAHHBwAAAAAAAAFPBAAA\",\"AAAAAAACGgwAAGgSAAA=\"]Dk[\"\",\"AAAAADswAAABAAATAAEAWAcTADswAAABAAATAAEAlAATADswAAABAAATAAEAqw8TAA==\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWsAAAA=\",\"\"]Fg[\"AAAAATwFAAAAAAGZAQAAAAAAAAAAAWEEAAAAAAABJgwAAAauAAAApQEAAAUCAAC0BgAACAcAAAwSAAA=\",\"AAGlBwAAAAE8BQAA\"]Hk[\"AAAEqAAAAFECAABNBQAABgwAAAHqBAAAAAIrAAAAmgAAAAGxDwAAAkUDAAC5BgAAAggBAAAJAQAA\",\"AAABgQIAAARjAAAAZAAAAGUAAADqBAAAAbUBAAAAAe4LAAABqwYAAA==\"]Kc[\"AAAEqQAAALkCAABOBQAABwwAAAEsBQAAAARZAAAApwAAAMQPAADJDwAAA30BAAB+AQAAvg8AAAJSAwAAwAYAAA==\",\"AAABCQMAAAEsBQAAAccBAAAB8gsAAANDBAAApgUAALIGAAAAAAAAAAAAAAAAAARrAAAAbAAAAG0AAABuAAAA\"]Ak[\"AAAAAALaDwAA2w8AAA==\",\"\"]Ao[\"AAAAAAAAAAACpgEAAEwSAAA=\",\"\"]Ao[\"AAAAAAAAAAACpwEAAE8SAAA=\",\"\"]Dc[\"AAAAAAAAAAABCgEAAAAAAAAAAAAAAAWsAAAAbgQAAAEHAACGDwAAXRAAAA==\",\"\"]Fc[\"AAAAAAAAAX8BAAAAAAAAAAAAAAAAAAWtAAAAbwQAAAIHAACHDwAAXhAAAA==\",\"AAAAAAAAAAAAAegGAAAAAl4FAADEEAAA\"]Fc[\"AAAAAT0FAAAAAAGaAQAAAmYEAAC0CwAAAAAAAAEnDAAAAAAAAAAFrwAAAAMHAAD7CAAAiA8AAF8QAAA=\",\"AAAAAT0FAAA=\"]Hg[\"AAABjQAAAAHQBAAAAAIaAAAAuwwAAAAAAeIAAAAAAAAAAAAAAAADoAEAALYEAAD+CwAA\",\"AAF7BwAAAAHQBAAAAAAAAAAAAAAAAAAAAAAECQcAAAoHAAANBwAADgcAAA==\"]Hg[\"AAAAApAAAAD/BAAAAAI4AAAAvgwAAAEsAQAAAAAAAAAAAAAAAAADoQEAALkEAAAADAAA\",\"AAGSBwAAAAH/BAAAAAAAAAAAAAAAAAAAAAAECwcAAAwHAAAPBwAAEAcAAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWwAAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmcAAADlBgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVMEAAA=\",\"AAAAAboMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAasAAAA=\",\"\"]Dk[\"AAAAAewEAAABtgEAAAABrQQAAAEdEQAAAQwBAAA=\",\"AAGIBwAAAAHsBAAAAAAAAR0RAAA=\"]Dk[\"AAAAATYFAAAByQEAAAACjwEAALEEAAABJBEAAA==\",\"AAGhBwAAAAE2BQAAAAAAASQRAAA=\"]Hc[\"AAAAAAABfw8AAAGREwAAAAG1EwAAAfUTAAAAAAAAAAAAADowAAABAAAAAAANABAAAADQBvoIPQk2Do0PkA/MD54QrhBEEW4ScBJLE4AT\",\"AAAAAAABXBIAAAFAEwAA\"]Ak[\"AAAAAAKXEwAAmBMAAA==\",\"\"]Cg[\"AAAAAaASAAABNAkAAAFgBAAAAAABZQQAAA==\",\"AAAAAAH/CwAA\"]Ag[\"\",\"AAAAAAAAAbMGAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmgAAABHDwAA\",\"\"]Ag[\"AAAAAAAAAAHBBgAA\",\"\"]Dk[\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwAAOzAAAAEAAD8AAgDbAD0AigEBAA==\",\"\"]Hg[\"AAAAAi0FAADqBgAAATEJAAAEWgAAAAsTAAAMEwAAdRMAAAOAAQAAgQEAAPgTAAABUwMAAAABGwwAAAABaRIAAAAAAcUGAAA=\",\"AAABiQ8AAAEtBQAAAcgBAAAAAU8QAAA=\"]Dk[\"AAAAAeAEAAAAASIAAAAAAbcGAAAC9gAAAPcAAAA=\",\"AAAAAuAEAAAYCgAAAAAAAakGAAA=\"]Dk[\"AAAAARcFAAAAAUgAAAACUQEAAFIBAAABvAYAAA==\",\"AAAAARcFAAABegoAAAABrgYAAA==\"]Ck[\"AAAAAcUPAAAAAAAAAnAHAACyBwAA\",\"AAAAAAAAAAACKxAAACwQAAA=\"]Ck[\"AAAAAcYPAAAAAAAAAnMHAAC0BwAA\",\"AAAAAAAAAAACLRAAAC4QAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAaEgAA\"]Ek[\"AAAAA9UHAAAKEgAAcBMAAAAAAAAAAAGxBwAAAAABbwcAAA==\",\"AAAAAAAAAAI1EQAANhEAAAIrEAAALBAAAA==\"]Ek[\"AAAAA9YHAAALEgAAcRMAAAAAAAAAAAGzBwAAAAABcgcAAA==\",\"AAAAAAAAAAI3EQAAOBEAAAItEAAALhAAAA==\"]Dg[\"AAAAAQsFAAAAAUQAAAACPwEAAEABAAA=\",\"AAAAAQsFAAAAAAAAAAEbDAAAAAFpEgAA\"]Cc[\"AAAB2AIAAAH7BAAAAAE0AAAAASYBAAA=\",\"AAAAAfsEAAA=\"]Ic[\"AAABjwAAAAHSBAAAAAIcAAAAvQwAAAAAAeQAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA2gEJAgkHDQcCCQYJPg+BD0YQlxIPEx8TOxM=\",\"AAF9BwAAAALSBAAAagUAAAABRQ8AAA==\"]Ho[\"AAAAApIAAAABBQAAAAI6AAAAwAwAAAEuAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA3AEKAgsHDwcECQgJQA+DD0gQmBIQEyATPBM=\",\"AAGUBwAAAAEBBQAAAAABRg8AAA==\"]Gg[\"AAACOgIAAEECAAAByAQAAAACEQAAAPoGAAACzQAAAM4AAAA=\",\"AAACPAIAAD0CAAAByAQAAAAAAAACTw8AAFAPAAAAAAJcBAAAwQ8AAAAAASQMAAA=\"]Do[\"AAAAAQMFAAAAAjsAAACeAAAAAzABAAAxAQAAtQ8AAAFJAwAA\",\"AAAAAQMFAAAAAAAAAUAEAAA=\"]Ck[\"AAAAAngTAAB5EwAAAAAAAAAAAAABJwwAAA==\",\"AAAAAAABpBAAAA==\"]Co[\"AAAAAAAB5gYAAAMbEgAAHBIAAB0SAAAAAa0BAAA=\",\"AAAAAAABfw8AAA==\"]K@m[\"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\",1]Eo[\"AAAAAAA7MAAAAQAABQABAFkSBQA7MAAAAQAABQABAD0TBQAAOzAAAAEAAAUAAQCyEwUAOzAAAAEAAAUAAQDyEwUA\",\"\"]Ck[\"AAAAAAAAAVoFAAAAAAFMBAAA\",\"AAAAAAAAAxMMAAAUDAAAFQwAAA==\"]Cc[\"\",\"AAAAAAAESAQAAAQHAABLEQAAmxMAAAAAAloTAACxEwAA\"]Fc[\"AAAAAf4EAAAAATcAAAACKgEAACsBAAA=\",\"AAGRBwAAAAH+BAAAAAACwA8AAE8QAAACHgwAAHsTAAAAAAEFFAAAAdwTAAA=\"]Eo[\"AAAAAUgRAAABLQkAAAACuAAAAAgMAAABEhEAAAABUAQAAA==\",\"AAAAAAGlBQAAAAIIDAAAfA8AAAABbAcAAAEmEAAA\"]Dk[\"AAAABhMSAABsEgAA2BMAAOQTAAACFAAAERQAAAAAAAABQxMAAA==\",\"AAAAAAAAAAEKEQAA\"]A@g[\"AAAAOjAAAAEAAAAAABIAEAAAAGkEvwRoBZcGxgc4CeoLGQw2DLoMvw/WD8cQSRFXEkYTehOaE98TOjAAAAEAAAAAAAcAEAAAAC4JJRAWEpsS5RLqEhQUGBQ6MAAAAQAAAAAABwAQAAAA2QFGBBoMRQ++EBMRaBIKEwe5AAAAyBAAAFMSAAD8EwAAAxQAAB8UAAAhFAAAAkMFAADTEwAAAAAAAAAAAAGSEwAA\",\"AAAAAb8EAAABvggAAAABCAwAAA==\"]ACk[\"AAAAOjAAAAEAAAAAAAgAEAAAAGoEHgkMDDoPgg+bECwRrxOwEzowAAABAAAAAAAHABAAAABKBFYFawXUB/8LCxFYEpkTOjAAAAEAAAAAAAoAEAAAANsBWgTED8kPORBXEBERFxLkEusSThM6MAAAAQAAAAAABwAQAAAAGQFGD8APTxBUEuUTIBQiFARGBQAAHgwAAHsTAAAEFAAABRUSAABzEwAAxRMAANQTAAD9EwAAAhsMAAAxDgAAAQUUAAADxBAAAGkSAADcEwAA\",\"AAAAAAAAAAAAAAAAAAFtBwAAAAAAAAGnBQAA\"]Ho[\"AAAAAxQHAAC3BwAAGxEAAAMiCQAA9QsAAP4TAAABshAAAAABwgcAAAACpA8AABETAAAB0wYAAA==\",\"AAAAAAT1CwAA9gsAAPcLAAD4CwAAAAWsBAAArQQAAK4EAACvBAAAUxIAAA==\"]Ho[\"AAAAAxgHAAC7BwAAIhEAAAMmCQAA+QsAAAAUAAABthAAAAABxAcAAAACpg8AABUTAAAB1wYAAA==\",\"AAAAAAT5CwAA+gsAAPsLAAD8CwAAAAWwBAAAsQQAALIEAACzBAAAVBIAAA==\"]No[\"AAABjgAAAAHRBAAAAAIbAAAAvAwAAAAAAeMAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAgJJBKAGBgf8CDIJFgwcDCgMfQ+fDygQVRBaEGUQnBCoEK8QuhC8EBgRORFNEQ0SDxJVEmISnBKeEuESIRMjE1YTXRN8E5wT2RM=\",\"AAF8BwAAAAHRBAAAAAAAAAAAAAAAAAAAAAAEAgkAAAMJAAAGCQAABwkAAA==\"]No[\"AAAAApEAAAAABQAAAAI5AAAAvwwAAAEtAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAwJLBKQGBwf9CDMJFwwdDCkMfg+gDykQVhBbEGYQnRCpELAQuxC9EBkROhFOEQ4SEBJWEmMSnRKfEuISIhMkE1cTXhN9E50T2hM=\",\"AAGTBwAAAAEABQAAAAAAAAAAAAAAAAAAAAAEBAkAAAUJAAAICQAACQkAAA==\"]Cc[\"AAAAAecEAAAAAAAAAQMBAAA=\",\"AAAAAecEAAAAAAG1CwAA\"]Ck[\"AAAAASgFAAAAAAF3AQAA\",\"AAAAASgFAAAAAAO2CwAAtwsAALgLAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAFhBAAAAAAAASYMAAA=\",\"\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAATYPAAA=\"]Eo[\"AAAAARgFAAAAAUoAAAACVQEAAFYBAAABvQYAAA==\",\"AAAAARgFAAAAAAGvBgAAAAAAAAAAAAAAAAACTAUAADcPAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAg8UAAAQFAAA\"]Ck[\"AAAAAAAAAAABxRMAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAABJhQAAA==\"]Ag[\"AAAClwIAABoDAAA=\",\"\"]Bo[\"AAAAAAAAAcEAAAAAAAABIQwAAA==\",\"AAAAAb8PAAA=\"]Cc[\"AAAAAAACGgwAAGgSAAABUg8AAA==\",\"AAAAAAABBAcAAA==\"]Gc[\"AAAAAfoEAAAAATMAAAABJQEAAAABFRIAAAEbDAAAAAFpEgAA\",\"AAGQBwAAAAH6BAAAAAHkEgAAAcAPAAAAARUSAAAAAAAAAAAAAAABBQcAAA==\"]Do[\"AAAAAAAAAAFTDwAAAm0FAACEDwAA\",\"AAAAAa4BAAAAAAABUw8AAARtBQAAhA8AAA0RAAAOEQAA\"]Do[\"AAAAAAAAAAFUDwAAAm4FAACFDwAA\",\"AAAAAboBAAAAAAABVA8AAARuBQAAhQ8AAA8RAAAQEQAA\"]Ao[\"AAAAAAEqEAAAAAABUBAAAA==\",\"\"]Fk[\"AAABKREAAAJjAAAAtQcAAAEQAgAAAAHJAAAAAnIEAABFEQAAAk8PAADCDwAAAAFRDwAAAlwEAADBDwAAAAElDAAAAiMMAAAkDAAA\",\"\"]Cc[\"AAAAAAAAAANdBAAAdAQAAEcRAAA=\",\"AAAAAAABxA8AAA==\"]Ec[\"AAABPAIAAAHJBAAAAAISAAAA+wYAAALPAAAA0AAAAA==\",\"AAABPgIAAAHJBAAAAAAAAkURAABGEQAA\"]Bo[\"AAABqhAAAAAAAALEAAAAxQAAAA==\",\"AAAAAAFdBQAA\"]Ck[\"AAABqxAAAAAAAAJmAQAAZwEAAA==\",\"AAAAAAAAAAAAAAABXgUAAA==\"]Ao[\"AAAAAAAAAR4TAAABQg8AAA==\",\"\"]Hg[\"AAAAAmUAAADPBwAAARECAAABOQkAAAPVAAAAwgYAAGMQAAACWwUAANwPAAAAAnMFAAB9DAAABkgPAABJDwAASg8AAG0QAADDEAAAehIAAAAAAksPAABNDwAAAUwPAAA=\",\"\"]Dk[\"AAAAAAABOgkAAALDBgAA0AcAAAJcBQAAZBAAAAABdAUAAAFuEAAA\",\"AAAAAAAByQ8AAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\",\"\"]ABc[\"AAABiQ8AAAGUBgAAAsgBAAD0BgAABJMGAAAaDAAAfw8AAGgSAAABAxQAAAMKEQAA0xMAAAQUAAAGbAcAAA0RAAAOEQAADxEAABARAADUEwAAASYQAAAAAAABbQcAAA==\",\"AAAABeoGAABIEQAASREAAEoRAABMEQAAA5wBAAA8DwAAPQ8AAAFLEQAABfwTAAAfFAAAIBQAACEUAAAiFAAAAXsTAAAB/RMAAAEUEgAAAAAAAAAAAAJYDwAAcg8AAAUEAgAABQIAAIYPAACHDwAAiA8AAA==\"]Cc[\"AAAAARkFAAAAAUsAAAACVwEAAFgBAAA=\",\"AAAAARkFAAA=\"]Dc[\"AAAAAAAAAAA7MAAAAQAABQABAEwSBQA=\",\"AAAABNIBAADWAQAA1wEAANgBAAA=\"]Ao[\"AAAAAdIBAAAAAAAAAc8PAAA=\",\"\"]Ao[\"AAAAAdcBAAAAAAAAAdAPAAA=\",\"\"]Eo[\"AAAAASsRAAABBxMAAAM9EAAAwBAAABURAAABYRMAAAE2EQAAASwQAAACPhEAAB8SAAABMBEAAAAAAAABlBMAAA==\",\"\"]Eo[\"AAAAAS4RAAABCRMAAANBEAAAwhAAABcRAAABZBMAAAE4EQAAAS4QAAACQBEAACESAAABMhEAAAAAAAABlhMAAA==\",\"\"]Bc[\"AAAAAAAAAnUEAADKBgAAAAHRDwAA\",\"\"]Bc[\"AAAAAAAAAngEAADNBgAAAAHSDwAA\",\"\"]Ec[\"AAAAAcwBAAAAAm0SAABvEgAAAlsTAABcEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAAEwAwAA\"]Gg[\"AAAAAcsEAAAAAhQAAAD9BgAAAtYAAADXAAAA\",\"AAADRgIAAEcCAABIAgAAAcsEAAAAAAAB3A8AAAACcwUAAH0MAAACbRAAAHoSAAAAAAABTA8AAA==\"]Eg[\"AAAAAQYFAAAAAj4AAACgAAAAAzUBAAA2AQAAtw8AAAFLAwAA\",\"AAAAAQYFAAAAAAAAAAF0BQAAAW4QAAA=\"]Ec[\"AAAAAAAAAWUBAAAAAAAAAAAAAAAAAAK7BAAAPgkAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAacFAAA=\"]Ec[\"AAAB8wsAAAG+BAAAAAELAAAAAbQAAAA=\",\"AAAAAb4EAAAAARAJAAAAAAAAAAAAAAAAAAABkQYAAA==\"]Dg[\"AAAAAAFYBQAAAAAAAAAAAAAAAAAAAAJoEAAADBEAAA==\",\"AAF2BwAAAAAAAZMGAAA=\"]Ac[\"AAABZAIAAA==\",\"\"]Do[\"AAAAAd8EAAAAASEAAAAAAAL0AAAA9QAAAA==\",\"AAACbwIAAHECAAAB3wQAAAAAAAAAAUkTAAA=\"]Dk[\"AAAAARYFAAAAAUcAAAACTwEAAFABAAA=\",\"AAAC4wIAAOQCAAABFgUAAAAAAAAAAUoTAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAXCQAA\"]Dk[\"AAAAAAAAAAABEwEAAA==\",\"AAABjQIAAAAAAAAAAAABYgQAAAESBwAAAUIEAAABbwcAAA==\"]Dg[\"AAAAAAAAAYgBAAA=\",\"AAABEwMAAAAAAAAAAAABYwQAAAETBwAAAUQEAAABcgcAAA==\"]Dk[\"AAAAAe4EAAAAAbcBAAABrgQAAAEfEQAAAQ4BAAA=\",\"AAGJBwAAAAHuBAAAAAAAAR8RAAA=\"]Dk[\"AAAAATgFAAAAAcoBAAACkQEAALIEAAABJhEAAA==\",\"AAGiBwAAAAE4BQAAAAAAASYRAAA=\"]Ck[\"AAAAAQcFAAAAAT8AAAACNwEAADgBAAA=\",\"AAAAAQcFAAAAAAHDBgAA\"]Eg[\"AAAAAdoEAAAAAiAAAACWAAAAAa0PAAABQQMAAALvAAAAYBIAAA==\",\"AAGEBwAAAWoCAAAC2gQAABAKAAA=\"]Eg[\"AAAAAREFAAAAAkYAAAChAAAAAkoBAAC4DwAAAUwDAAABYRIAAA==\",\"AAGcBwAAAd0CAAABEQUAAAFzCgAA\"]Ao[\"AAAAAAAAAAACWBAAAA0RAAA=\",\"\"]Ao[\"AAAAAAAAAAACWRAAAA8RAAA=\",\"\"]Do[\"AAABbwAAAAG9BAAAAAABswAAAA==\",\"AAAAAb0EAAAAAQ8JAAAAAAAAAAAAAAAAAAABXBAAAA==\"]Bg[\"AAAAAAAABNQAAABiBQAAFQwAAB0SAAA=\",\"\"]Ak[\"AAAAAAABQAAAAAE5AQAA\",\"\"]Do[\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAaEgAA\",\"AAF0BwAAAAAAAAAAAAAAAAAAAAAAAAFnEAAA\"]Cg[\"AAAAAAPEBgAANwkAALEQAAA=\",\"AAAAAAAAAAJCDwAAUBAAAA==\"]Ag[\"AAACjQIAABMDAAA=\",\"\"]Cc[\"AAAAATUKAAACNgoAAKUKAAABpgoAAAJpEAAAaxAAAA==\",\"\"]Ac[\"\",\"AAAAAVISAAA=\"]Gg[\"AAAAAd4EAAAB2xMAAAAAAcAIAAAE8wAAANEPAABzEgAAwBMAAAEmEAAA\",\"AAAAA7IBAADeBAAA5hMAAAABoBMAAAABwAgAAAPRDwAAcxIAAMATAAA=\"]Bc[\"AAAAAbIBAAAAAAAAAAAAAc0QAAA=\",\"\"]Gg[\"AAAAARUFAAAAAAFOAQAAAcEIAAAD0g8AAHUSAADBEwAAAAAAAAFtBwAA\",\"AAAAA8EBAAAVBQAA5xMAAAABoRMAAAABwQgAAAPSDwAAdRIAAMETAAA=\"]Bc[\"AAAAAcEBAAAAAAAAAAAAAdEQAAA=\",\"\"]Fg[\"AAABRgIAAAHVBAAAAAEeAAAAAAAC5wAAAOgAAAA=\",\"AAGABwAAAAHVBAAAAAE5CQAAAsIGAABjEAAAA3IEAABzBAAAWwUAAA==\"]Eo[\"AAAAAQkFAAAAAUIAAAACOwEAADwBAAA=\",\"AAGYBwAAAAEJBQAAAAE6CQAAAdAHAAAEdAQAAFwFAABkEAAARxEAAA==\"]Ao[\"\",\"AAAAAAAAAAAAAAAB1RAAAA==\"]Ek[\"AAAAAeMEAAAAASUAAAAAAAL8AAAA/QAAAA==\",\"AAABdgIAAAHjBAAAAAAAAAFsBwAAASYQAAAAAs0QAADPEAAA\"]Eg[\"AAAAAR8FAAAAAVAAAAACYwEAAGQBAAA=\",\"AAAB8QIAAAEfBQAAAAAAAAAAAALREAAA0xAAAAABbQcAAA==\"]Ao[\"AAAAAAAAAAFDEAAAAAExDAAA\",\"\"]Jk[\"AAAAAeQEAAAABSYAAACXAAAASAUAADsQAAA9EAAAArULAACuDwAABEIDAAABDAAAPBAAAD4QAAAE/gAAAP8AAAANEQAADhEAAAItDAAALgwAAAIvEQAAMBEAAA==\",\"AAAAAuQEAABTEAAAArMBAAA0EAAAAAABCgkAAA==\"]Og[\"AAAAASQFAAAABVMAAACkAAAASQUAAD8QAABBEAAABnABAABxAQAAtgsAALcLAAC4CwAAuw8AAARPAwAAAgwAAEAQAABCEAAAAg8RAAAQEQAAAi8MAAAwDAAAAjERAAAyEQAA\",\"AAAABCQFAACpBwAAqgcAAFQQAAAEwwEAADUQAAA2EAAANxAAAAAAAQsJAAACUwUAAFQFAAAAAAAAAAAAAAA7MAAAAQAACgACAKsHBQDKBwQA\"]Cc[\"AAAAARoFAAAAAUwAAAACWQEAAFoBAAA=\",\"AAAAARoFAAA=\"]Ck[\"AAABTwUAAAHlBAAAAAEnAAAAAAABAAEAAA==\",\"AAAAAuUEAAADDAAA\"]Dg[\"AAABUAUAAAElBQAAAAFUAAAAAXIBAAAAAAAAAAAAAcUGAAA=\",\"AAAAAiUFAAAEDAAA\"]Cc[\"AAAAAT4FAAAAAWAAAAABmwEAAA==\",\"AAAAAj4FAAAFDAAA\"]Dg[\"AAAAAAAAAAAAAAABxBAAAA==\",\"AAAABjgQAABfEgAARxMAAEgTAAB4EwAAeRMAAA==\"]Ak[\"AAAAAAAAAAABThIAAA==\",\"\"]Ak[\"AAAAAAAAAAABURIAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmoAAAAEAgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVUEAAA=\",\"AAAAAccQAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmkAAAAFBwAA\",\"\"]Bk[\"AAAAAAAAAAAAAATTBgAA1AYAANUGAADWBgAA\",\"\"]Ec[\"AAAABJ0BAACoAQAA+QQAACcQAAAAAAEkAQAAAAAABNcGAADYBgAA2QYAANoGAAA=\",\"AAAAAfkEAAA=\"]Bg[\"AAAAAAAAAAAAAVYEAAA=\",\"AAAAAAHlEgAA\"]Cc[\"AAAAAToKAAACOAoAAKsKAAABqgoAAAJqEAAAbBAAAA==\",\"\"]Ag[\"AAAAAAAB9gYAAA==\",\"\"]No[\"AAAAAdwEAAAB9AYAAAGhEgAAAXwPAAAGEQwAAEoQAABEEwAAWBMAALgTAADgEwAAB/EAAACtAQAAdgwAAM8PAAByEgAATxMAAFETAAABwhMAAAAAAAAAAAAAA6EGAAB6DAAAdhIAAA==\",\"AAAAAtwEAADYDwAAAAGxAQAAAXgSAAAGEQwAAEoQAABEEwAAWBMAALgTAADgEwAABXYMAADPDwAAchIAAE8TAABREwAA\"]Bo[\"AAAAAdgPAAAAAbEBAAAAAjwQAADOEAAAAAEtDAAA\",\"\"]Nc[\"AAAAARMFAAAAAAFMAQAAOjAAAAEAAAAAAAcAEAAAALsBEgxLEKISRRNZE7kT4RMFdwwAANAPAAB0EgAAUBMAAFITAAAAAAAAAAAAAAAEpwUAAKUGAAB7DAAAdxIAAA==\",\"AAAAAhMFAADZDwAAAAHAAQAAAXkSAAAGEgwAAEsQAABFEwAAWRMAALkTAADhEwAABXcMAADQDwAAdBIAAFATAABSEwAA\"]Bo[\"AAAAAdkPAAAAAcABAAAAAkAQAADSEAAAAAEvDAAA\",\"\"]Ao[\"AAAAAAAAAAACTxMAAFATAAA=\",\"\"]Ao[\"AAAAAAAAAAACURMAAFITAAA=\",\"\"]Dc[\"AAABRwIAAAHMBAAAAAIVAAAA/gYAAALYAAAA2QAAAA==\",\"AAABSgIAAAHMBAAA\"]Bk[\"AAAAAdUBAAAAAATTAAAAYQUAABQMAAAcEgAA\",\"\"]Ec[\"AAAAAgETAAACEwAAAv8SAAAAEwAABO8LAADwCwAA8QsAAPILAAAE6wsAAOwLAADtCwAA7gsAAA==\",\"\"]Cc[\"AAAAAAAAAAABTRIAAA==\",\"AAF3BwAAAAKsAQAA3xIAAA==\"]Cc[\"AAAAAAAAAAABUBIAAA==\",\"AAGMBwAAAAK5AQAA4BIAAA==\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAABxQYAAA==\"]Cg[\"AAAAATsPAAAAAAFvAQAAAToQAAA=\",\"AAGoBwAAAAAAAU4TAAA=\"]Ek[\"AAAAAcMEAAAAAAG+AAAAAAAAAAAAAAAAAAAE2xIAAOMSAAD+EgAAGRMAAA==\",\"AAF4BwAAAALDBAAAaQUAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzsJAADNDwAADxQAAA==\",\"\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzwJAADODwAAEBQAAA==\",\"\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAYCQAA\"]Bc[\"AAAAAAABQQQAAA==\",\"AAAAAAGpBAAA\"]Ec[\"AAAAAfAEAAAAAbgBAAABrwQAAAIhEQAAdhMAAAEQAQAA\",\"AAGKBwAAAAHwBAAAAAAAAiERAAB2EwAA\"]Ec[\"AAAAAToFAAAAAcsBAAACkwEAALMEAAACKBEAAHcTAAA=\",\"AAGjBwAAAAE6BQAAAAAAAigRAAB3EwAA\"]Ag[\"\",\"AAAAAAABERIAAA==\"]Co[\"AAAAAqIBAACpBwAAAAABaAEAAA==\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Ac[\"\",\"AAAAAAGkEgAA\"]Cg[\"AAAAAAAAAngSAAB5EgAAAAABFBIAAA==\",\"AAAAAAAAAAFTEwAA\"]Do[\"AAAAAQQFAAAAAjwAAACfAAAAAzIBAAAzAQAAtg8AAAFKAwAA\",\"AAAAAQQFAAAAAAABXQQAAA==\"]Ak[\"AAAAAAACoBMAAKETAAA=\",\"\"]Ac[\"AAAAAdYBAAA=\",\"\"]Ac[\"AAAAAdgBAAA=\",\"\"]Eo[\"AAAC+gIAAA4DAAABLgUAAAABWwAAAAKCAQAAgwEAAA==\",\"AAAAAS4FAAAAAAAFpwYAAKgGAACpBgAAqgYAAKsGAAA=\"]Fk[\"AAAABEwQAABNEAAARxMAAEgTAAABPA8AAAGkEAAAARISAAAAAAHCEwAAAAAAAAAAAAEmDAAA\",\"AAAAAAAAAxsSAAAcEgAAHRIAAA==\"]Fc[\"AAAAAAABkwYAAAJ4EgAAeRIAAAEKEQAAAAEUEgAAAAACnhMAAJ8TAAAAAAAB7xIAAA==\",\"AAAAAAAAAdcTAAABUxMAAA==\"]Ag[\"\",\"AAAAAAABRQUAAA==\"]Co[\"AAAAAQwFAAAAAUUAAAACQQEAAEIBAAA=\",\"AAAAAQwFAAAAAAAAAAExDgAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAeQGAAA=\",\"\"]Jc[\"AAAAAtsEAAC+EwAAAAAAAggSAADdEgAABPAAAACtAQAAKwwAAOwSAAADPwkAAEkTAADCEwAAAAAAAaIQAAA=\",\"AAGFBwAAAAKwAQAA2wQAAAAAAAIIEgAA3RIAAAIrDAAA7BIAAAI/CQAASRMAAAAAAAGiEAAA\"]Jg[\"AAAAAhIFAAC/EwAAAAABSwEAAAO7AQAACRIAAN4SAAACLAwAAO0SAAACQAkAAEoTAAAAAAABoxAAAA==\",\"AAGdBwAAAAK/AQAAEgUAAAGbBgAAAAACCRIAAN4SAAACLAwAAO0SAAACQAkAAEoTAAAAAAABoxAAAA==\"]Ao[\"AAAAAAAAAcYAAAAAAAFYBAAA\",\"\"]Bc[\"AAAAAAABSQAAAAJTAQAAVAEAAA==\",\"\"]Ag[\"AAAClgIAABsDAAA=\",\"\"]Ak[\"AAAAAAAAAnYEAADLBgAA\",\"\"]Ak[\"AAAAAAAAAnkEAADOBgAA\",\"\"]Ag[\"AAAClQIAAB8DAAA=\",\"\"]Dk[\"AAAAAcoEAAAAAhMAAAD8BgAAAtEAAADSAAAA\",\"AAABQQIAAAHKBAAAAAAAAAAAAVEPAAA=\"]Dg[\"AAAAAccEAAAAAhAAAAD5BgAAAssAAADMAAAA\",\"AAABOgIAAAHHBAAAAAAAAAHCDwAA\"]Co[\"AAABGBIAAAEIBQAAAAFBAAAAAToBAAA=\",\"AAGXBwAAAQEJAAABCAUAAA==\"]Ec[\"AAAAAAABGRIAAAG1AAAAAAAAAAAAAAAAAAADbQQAAP4IAABVDwAA\",\"AAAAAaoBAAAAAAAAAUMTAAA=\"]Hk[\"AAAC0wIAAOsCAAABJgUAAAABVQAAAAJzAQAAdAEAAAAAAAAAAAAAAAAABAgCAABMBQAApgYAAOMGAAA=\",\"AAAB/wIAAALEAQAAJgUAAAAAAmMTAABkEwAAAAACPxEAAEARAAA=\"]Fc[\"AAAAAzgQAABOEAAAXxIAAAACbRIAAG8SAAADmAEAAFsTAABcEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAcwBAAA=\"]Dc[\"AAAAAmIAAADGBAAAAg8CAAC/CAAAAQ8AAAAByAAAAA==\",\"AAAAAsYEAADXDwAA\"]Eg[\"AAAAAeEEAAAAASMAAAAAAAL4AAAA+QAAAAAAAAAAAAAAAAPfBgAALw8AADYPAAA=\",\"AAABdAIAAAHhBAAA\"]Eg[\"AAAAARsFAAAAAU0AAAACWwEAAFwBAAAAAAAAAAAAAAAAAAPhBgAAMQ8AADcPAAA=\",\"AAAB6wIAAAEbBQAA\"]Hk[\"AAAFKgIAAD0CAAA+AgAASAIAAEoCAAAB1gQAAAACHwAAAP8GAAAAAALpAAAA6gAAAA==\",\"AAADYQIAAGMCAABkAgAAAtYEAACXBgAAAqUFAAAlEAAAAQoTAAABfA8AAAESEQAA\"]Ek[\"AAAAAQoFAAAAAkMAAAAABwAAAj0BAAA+AQAA\",\"AAAB0wIAAAEKBQAAAAAAAAAAAAAAAAAAAAACuwQAAOQGAAA=\"]Bk[\"AAAAAAABORAAAAFuAQAA\",\"AAAAAAAAAAE6EAAA\"]Fo[\"AAABjwAAAAHTBAAAAAG9DAAAAAAB5QAAAAAAAAAAAAAAAAYKBwAADgcAAAMJAAAHCQAAPw8AAEcQAAA=\",\"AAF+BwAAAALTBAAAaAUAAA==\"]Fo[\"AAAAApIAAAACBQAAAAHADAAAAS8BAAAAAAAAAAAAAAAAAAYMBwAAEAcAAAUJAAAJCQAAQQ8AAEkQAAA=\",\"AAGVBwAAAAECBQAAAWsFAAA=\"]Ag[\"AAACkwIAAB0DAAA=\",\"\"]Cg[\"AAAAAUAFAAAAAAADQg8AAKgPAABQEAAA\",\"AAGnBwAAAAFABQAA\"]Dc[\"AAAAAiAFAACqBwAAAAABaQEAAA==\",\"AAAAASAFAAAAAAAAAAAAAAAAAAGwBgAA\"]Dg[\"AAAAAfASAAAB2g8AAAAAAALrAAAADhEAAA==\",\"AAEMCQAAAa8BAAAB8BIAAAHaDwAA\"]Dg[\"AAAAAfESAAAB2w8AAAABRgEAAAABEBEAAA==\",\"AAENCQAAAb4BAAAB8RIAAAHbDwAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATQPAAA=\",\"\"]Ac[\"\",\"AAAAAAHGEwAA\"]Ag[\"AAACkgIAACEDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAADTBIAAE0SAABOEgAA\"]Bc[\"\",\"AAAAAAAAAAADTxIAAFASAABREgAA\"]Ak[\"\",\"AAAAAXESAAAAAAGREwAA\"]ADc[\"AAAAAdcEAAAAAAA6MAAAAQAAAAAAFAAQAAAAvwfBDEMPiw+OD8oPyRBCEVYRahLXEn4T1RPiE+4T8BMSFBYUGRQdFCQUOjAAAAEAAAAAAAwAEAAAAOwAWBDFEGASchJzEg0TORNME/oTCxQNFBsUAAABOxEAAA==\",\"AAGBBwAAAAHXBAAAAAAAOjAAAAEAAAAAABQAEAAAAL8HwQxDD4sPjg/KD8kQQhFWEWoS1xJ+E9UT4hPuE/ATEhQWFBkUHRQkFDowAAABAAAAAAAJABAAAABYEMUQYBINEzkTTBP6EwsUDRQbFAAAATsRAAA=\"]ADc[\"AAAAAQ4FAAAAAAFHAQAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8oQQxFXEWsS2BJ/E9YT4xPvE/ETExQXFBoUHhQlFDowAAABAAAAAAALABAAAABZEMYQYRJ0EnUSDhM6E00T+xMMFA4UHBQAAAE8EQAA\",\"AAGZBwAAAAEOBQAAAAAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8oQQxFXEWsS2BJ/E9YT4xPvE/ETExQXFBoUHhQlFDowAAABAAAAAAAJABAAAABZEMYQYRIOEzoTTRP7EwwUDhQcFAAAATwRAAA=\"]Ag[\"AAACbwIAAOMCAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAU0EAAA=\",\"AAAAAAAAAQgMAAA=\"]Bk[\"AAAAAAAAAAAAAAEgDAAA\",\"AAAAAAABmxMAAA==\"]Do[\"AAAAAeIEAAAAASQAAAAAAAL6AAAA+wAAAAAAAAAAAAAAAALgBgAAMA8AAA==\",\"AAAAAeIEAAA=\"]Do[\"AAAAARwFAAAAAU4AAAACXQEAAF4BAAAAAAAAAAAAAAAAAALiBgAAMg8AAA==\",\"AAAAARwFAAA=\"]Ag[\"AAACmQIAABgDAAA=\",\"\"]Fc[\"AAAAAR4FAAAAAk8AAACiAAAAAmEBAAC5DwAAAk0DAAA6EAAA\",\"AAAAAR4FAAAAAAAAAAAAAAABbQcAAAAAAAABpwUAAA==\"]Ac[\"\",\"AAAAAAFuBwAA\"]Ao[\"AAAAAAGpBAAA\",\"AAAAAAFxBwAA\"]Ag[\"AAAClAIAABwDAAA=\",\"\"]Ag[\"AAACmwIAACADAAA=\",\"\"]Dg[\"AAAAAfIEAAAAAAAB5hIAAAAAAAHPEAAA\",\"AAAAAvIEAAA1CgAAATYKAAAAAWkQAAA=\"]Do[\"AAABzQEAAAEyBQAAAAAAAegSAAAAAAAB0xAAAA==\",\"AAAAATIFAAABpQoAAAGmCgAAAWsQAAA=\"]Do[\"AAAAAfQEAAAAAAADPhAAANAQAADnEgAAAAEuDAAA\",\"AAAAAvQEAAA6CgAAATgKAAAAAWoQAAA=\"]Eg[\"AAABzgEAAAE0BQAAAAAAA0IQAADUEAAA6RIAAAABMAwAAA==\",\"AAAAATQFAAABqwoAAAGqCgAAAWwQAAA=\"]Cc[\"AAAAAAAAAncEAADMBgAAAAEEAQAA\",\"AAGHBwAAAAG0AQAA\"]Cc[\"AAAAAAAAA3kBAAB6BAAAzwYAAA==\",\"AAGgBwAAAAHGAQAA\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA94GAACwBwAAzgcAAA==\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATMPAAA=\",\"\"]Ao[\"AAAAAAAAAawEAAAAAQsUAAA=\",\"\"]Bk[\"AAAAAAAAAbAEAAAAAQwUAAA=\",\"AAAAAbQEAAA=\"]Eg[\"AAAAAAAAAAABEQEAAAAAAAAAAAAAAANBCQAAqQ8AAJkSAAA=\",\"AAGLBwAAAAS3BwAAuAcAALkHAAC6BwAA\"]Eg[\"AAAAAAAAAZQBAAAAAAAAAAAAAAAAAANCCQAAqg8AAJoSAAA=\",\"AAGkBwAAAAS7BwAAvAcAAL0HAAC+BwAA\"]Bo[\"AAAAAAABsQEAAAAAAXYMAAAAAWIEAAAAAUIEAAA=\",\"\"]Bo[\"AAAAAAABwAEAAAAAAXcMAAAAAWMEAAAAAUQEAAA=\",\"\"]Ak[\"AAAAAAABCxMAAAFyEwAA\",\"\"]Ao[\"AAAAAAABDBMAAAAAAXMTAAA=\",\"\"]Fo[\"AAAAASMFAAAAAlIAAACjAAAAA2wBAABtAQAAug8AAAFOAwAA\",\"AAAB+gIAAAEjBQAAAAAAAAJTBQAAVAUAAAAAAAAAAALCAQAAsAYAAA==\"]Dg[\"AAAAAfwEAAAAATUAAAABJwEAAA==\",\"AAAAAfwEAAAAAAAAAAAAAAAAAAAAAAHlBgAA\"]Dg[\"AAAAAcEEAAAAAgwAAAD4BgAAArsAAAC8AAAA\",\"AAABKgIAAAHBBAAAAAAByBAAAA==\"]Do[\"AAAAAfcEAAAAAjEAAACcAAAAAyABAAAhAQAAsw8AAAFHAwAA\",\"AAAAAfcEAAAAAAAAAWUEAAA=\"]Ek[\"AAAAAdgEAAAAAAACVBMAAKgTAAAD7QAAAKwQAAA5EwAA\",\"AAGCBwAAAAHYBAAAAAAAAlQTAACoEwAAAawQAAA=\"]Ek[\"AAAAAQ8FAAAAAAFIAQAAAlUTAACpEwAAAq0QAAA6EwAA\",\"AAGaBwAAAAEPBQAAAAAAAlUTAACpEwAAAa0QAAA=\"]Bo[\"AAAAAAAAAAABUwUAAAAAAAAAAALCAQAAsAYAAA==\",\"\"]Fg[\"AAAAAdkEAAAAAAAEIAkAANQPAAAzEQAABBMAAALuAAAATBMAAA==\",\"AAGDBwAAAAHZBAAAAAAABCAJAADUDwAAMxEAAAQTAAA=\"]Fg[\"AAAAARAFAAAAAAFJAQAABCEJAADVDwAANBEAAAUTAAABTRMAAA==\",\"AAGbBwAAAAEQBQAAAAAABCEJAADVDwAANBEAAAUTAAA=\"]Ag[\"\",\"AAAAAAAAAdcTAAA=\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAHvEgAA\"]Ag[\"\",\"AAAAAAAAAVIPAAA=\"]Co[\"AAAAAf0EAAAAATYAAAACKAEAACkBAAA=\",\"AAAAAf0EAAAAAAAAARUSAAA=\"]Fg[\"AAABVAIAAAHmBAAAAAEoAAAAAAG4BgAAAgEBAAACAQAA\",\"AAACewIAAJ8GAAAB5gQAAAAAAAGqBgAAAAAAAAAAAAAAAAEvDwAA\"]Gc[\"AAABugIAAALEAQAAJwUAAAABVgAAAAJ1AQAAdgEAAAG/BgAA\",\"AAACAQMAAKMGAAABJwUAAAAAAbEGAAAAAAAAAAAAAAAAAAIIAgAAMQ8AAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA6wHAADLBwAAwwgAAA==\",\"\"]Cg[\"AAABdgIAAAAAAAAAARQBAAA=\",\"AAAAAAAAAAI8EAAAPhAAAA==\"]Cg[\"AAAB8QIAAAAAAAGJAQAA\",\"AAAAAAAAAANAEAAAQhAAAEMQAAA=\"]Bo[\"AAAAArQEAAA/BQAAAaQSAAA=\",\"AAAAAj8FAABZEQAA\"]Bo[\"AAAAAAAAAcIAAAAAAAABIgwAAA==\",\"AAAAAXoTAAA=\"]Io[\"AAAAAS8FAAAAAVwAAAABhAEAAAZ1BQAAzhAAANAQAADSEAAA1BAAANYQAAAAAAAFzRAAAM8QAADREAAA0xAAANUQAAAAAAAAAAABIxQAAA==\",\"AAAAAS8FAAAAAARgEwAAYRMAAGMTAABkEwAAAAFeBAAA\"]Co[\"AAAAAmQAAAC2BwAAAAABygAAAAJzBAAARhEAAAFQDwAA\",\"AAABKREAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAwEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhcJAAAyEAAA\",\"\"]Co[\"AAAAAfMEAAAAAAAAAhcBAAAYAQAA\",\"AAAAAfMEAAAAAAJpEAAAahAAAA==\"]Dc[\"AAAAATMFAAAAAAKMAQAAjQEAAA==\",\"AAAAAjMFAABSEgAAAAACaxAAAGwQAAA=\"]Cc[\"AAAAAAGcAQAAAAG3AAAAAAAAAR8MAAA=\",\"AAAAAZoTAAA=\"]Ac[\"\",\"AAAB8wsAAA==\"]Ec[\"AAABcQIAAAHOBAAAAAEXAAAAAAAC3QAAAN4AAAA=\",\"AAAAAc4EAAAEEwkAAP4JAAD/CQAAAQoAAA==\"]Do[\"AAAB5AIAAAH2BAAAAAEvAAAAAh0BAAAeAQAA\",\"AAAAAfYEAAAEFAkAAFAKAABRCgAAUgoAAA==\"]Ak[\"\",\"AAAAAAACoBMAAKETAAA=\"]Ck[\"AAAAAsAEAAAqCQAAAb4IAAAB3BIAAAG6AAAA\",\"AAAAAsAEAADWDwAA\"]Cg[\"AAAAAU0HAAACIRAAADQQAAAAAbULAAAAAAAAAAABohAAAA==\",\"\"]Ck[\"AAAAAU4HAAACIhAAADUQAAAAArYLAAC3CwAAAAAAAAAAAaMQAAA=\",\"\"]Bc[\"AAAAAAAAAAAAAAAAAp4TAACfEwAA\",\"\"]Fo[\"AAAAAd0EAAAAAAADZwQAACsJAAC4EwAAAvIAAACmAQAA\",\"AAGGBwAAAAHdBAAAAAAAAmcEAAArCQAAAaYBAAAAAAAAAAAAAAABdhIAAA==\"]Fo[\"AAAAARQFAAAAAAFNAQAAA2gEAAAsCQAAuRMAAAGnAQAA\",\"AAGeBwAAAAEUBQAAAAAAAmgEAAAsCQAAAacBAAAAAAAAAAAAAAABdxIAAA==\"]Ck[\"AAAAAQ0FAAAAAAJDAQAARAEAAA==\",\"AAAAAQ0FAAAAAAAAAcUTAAA=\"]Ec[\"AAAAASEFAAAAAAFqAQAAAAAAAAAAAAAAAAAFowEAAKsHAADKBwAAwggAAHgMAAA=\",\"AAAAASEFAAA=\"]Dg[\"AAAAAAHGEwAAAAG2AAAAAAAAAAACnhMAAJ8TAAAAAAAB7xIAAA==\",\"AAABqwEAAA==\"]Ag[\"AAACnQIAACMDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAp4TAACfEwAA\"]Cc[\"AAAAAUEFAAAAAAAAAAAAAdUQAAA=\",\"AAABzQEAAAFBBQAA\"]Ck[\"AAAAAUIFAAAAAAACQxAAANYQAAAAATEMAAA=\",\"AAABzgEAAAFCBQAA\"]Ag[\"AAACmgIAABkDAAA=\",\"\"]Dg[\"AAAAAAABLAAAAAAAARIBAAA=\",\"AAAAAAAAAAAAAAAAAAAAA5ITAACTEwAAlBMAAA==\"]Ck[\"AAAAAAABXgAAAAGHAQAA\",\"AAAAAAAAAAAAAAAAAAAAApUTAACWEwAA\"]Ag[\"AAACnAIAAB4DAAA=\",\"\"]Do[\"AAAAAU8HAAACIxAAADYQAAAAAbgLAAABYRAAAA==\",\"AAK9AQAAjQcAAAEOCQAAAAAAAAFhEAAA\"]Ec[\"AAAAAikFAABQBwAAAiQQAAA3EAAAAAF4AQAAAWIQAAA=\",\"AAGfBwAAAcUBAAABKQUAAAAAAAFiEAAA\"]Bg[\"AAAAAAAAAAABVAUAAA==\",\"AAABvAEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAxEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhgJAAAzEAAA\",\"\"]") \ No newline at end of file diff --git a/pr/571/docs/settings.html b/pr/571/docs/settings.html index abf467830..1adf3f67d 100644 --- a/pr/571/docs/settings.html +++ b/pr/571/docs/settings.html @@ -1 +1 @@ -Settings

All

Rustdoc settings

Back
\ No newline at end of file +Settings

All

Rustdoc settings

Back
\ No newline at end of file diff --git a/pr/571/docs/src/noq/connection.rs.html b/pr/571/docs/src/noq/connection.rs.html index 2a9cd944a..729b1acb2 100644 --- a/pr/571/docs/src/noq/connection.rs.html +++ b/pr/571/docs/src/noq/connection.rs.html @@ -925,956 +925,957 @@ 925 pub fn add_nat_traversal_address( 926 &self, 927 address: SocketAddr, -928 ) -> Result<(), n0_nat_traversal::Error> { -929 let mut conn = self.0.lock_and_wake("add_nat_traversal_addresses"); -930 conn.inner.add_nat_traversal_address(address) -931 } -932 -933 /// Removes one or more addresses from the set of addresses at which this endpoint is reachable -934 /// -935 /// When the NAT traversal extension is negotiated, servers send address removals to -936 /// clients in `REMOVE_ADDRESS` frames. This allows clients to stop using outdated -937 /// server address candidates that are no longer valid for NAT traversal. -938 /// -939 /// For clients, removed addresses will no longer be advertised in `REACH_OUT` frames. -940 /// -941 /// Addresses not present in the set will be silently ignored. -942 pub fn remove_nat_traversal_address( -943 &self, -944 address: SocketAddr, -945 ) -> Result<(), n0_nat_traversal::Error> { -946 let mut conn = self.0.lock_and_wake("remove_nat_traversal_addresses"); -947 conn.inner.remove_nat_traversal_address(address) -948 } -949 -950 /// Get the current local nat traversal addresses -951 pub fn get_local_nat_traversal_addresses( -952 &self, -953 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -954 let conn = self -955 .0 -956 .lock_without_waking("get_local_nat_traversal_addresses"); -957 conn.inner.get_local_nat_traversal_addresses() -958 } -959 -960 /// Get the currently advertised nat traversal addresses by the server -961 pub fn get_remote_nat_traversal_addresses( -962 &self, -963 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -964 let conn = self -965 .0 -966 .lock_without_waking("get_remote_nat_traversal_addresses"); -967 conn.inner.get_remote_nat_traversal_addresses() -968 } -969 -970 /// Initiates a new nat traversal round -971 /// -972 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` -973 /// frames, and initiating probing of the known remote addresses. When a new round is -974 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. -975 /// -976 /// Returns the server addresses that are now being probed. -977 pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -978 let mut conn = self.0.lock_and_wake("initiate_nat_traversal_round"); -979 let now = conn.runtime.now(); -980 conn.inner.initiate_nat_traversal_round(now) -981 } -982} -983 -984pin_project! { -985 /// Future produced by [`Connection::open_uni`] -986 pub struct OpenUni<'a> { -987 conn: &'a ConnectionRef, -988 #[pin] -989 notify: Notified<'a>, -990 } -991} -992 -993impl Future for OpenUni<'_> { -994 type Output = Result<SendStream, ConnectionError>; -995 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -996 let this = self.project(); -997 let (conn, id, is_0rtt) = ready!(poll_open(ctx, this.conn, this.notify, Dir::Uni))?; -998 Poll::Ready(Ok(SendStream::new(conn, id, is_0rtt))) -999 } -1000} -1001 -1002pin_project! { -1003 /// Future produced by [`Connection::open_bi`] -1004 pub struct OpenBi<'a> { -1005 conn: &'a ConnectionRef, -1006 #[pin] -1007 notify: Notified<'a>, -1008 } -1009} -1010 -1011impl Future for OpenBi<'_> { -1012 type Output = Result<(SendStream, RecvStream), ConnectionError>; -1013 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -1014 let this = self.project(); -1015 let (conn, id, is_0rtt) = ready!(poll_open(ctx, this.conn, this.notify, Dir::Bi))?; -1016 -1017 Poll::Ready(Ok(( -1018 SendStream::new(conn.clone(), id, is_0rtt), -1019 RecvStream::new(conn, id, is_0rtt), -1020 ))) -1021 } -1022} -1023 -1024fn poll_open<'a>( -1025 ctx: &mut Context<'_>, -1026 conn: &'a ConnectionRef, -1027 mut notify: Pin<&mut Notified<'a>>, -1028 dir: Dir, -1029) -> Poll<Result<(ConnectionRef, StreamId, bool), ConnectionError>> { -1030 let mut state = conn.lock_without_waking("poll_open"); -1031 if let Some(ref e) = state.error { -1032 return Poll::Ready(Err(e.clone())); -1033 } else if let Some(id) = state.inner.streams().open(dir) { -1034 let is_0rtt = state.inner.side().is_client() && state.inner.is_handshaking(); -1035 drop(state); // Release the lock so clone can take it -1036 return Poll::Ready(Ok((conn.clone(), id, is_0rtt))); -1037 } -1038 loop { -1039 match notify.as_mut().poll(ctx) { -1040 // `state` lock ensures we didn't race with readiness -1041 Poll::Pending => return Poll::Pending, -1042 // Spurious wakeup, get a new future -1043 Poll::Ready(()) => { -1044 notify.set(conn.shared.stream_budget_available[dir as usize].notified()) -1045 } -1046 } -1047 } -1048} -1049 -1050pin_project! { -1051 /// Future produced by [`Connection::accept_uni`] -1052 pub struct AcceptUni<'a> { -1053 conn: &'a ConnectionRef, -1054 #[pin] -1055 notify: Notified<'a>, -1056 } -1057} -1058 -1059impl Future for AcceptUni<'_> { -1060 type Output = Result<RecvStream, ConnectionError>; -1061 -1062 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -1063 let this = self.project(); -1064 let (conn, id, is_0rtt) = ready!(poll_accept(ctx, this.conn, this.notify, Dir::Uni))?; -1065 Poll::Ready(Ok(RecvStream::new(conn, id, is_0rtt))) -1066 } -1067} -1068 -1069pin_project! { -1070 /// Future produced by [`Connection::accept_bi`] -1071 pub struct AcceptBi<'a> { -1072 conn: &'a ConnectionRef, -1073 #[pin] -1074 notify: Notified<'a>, -1075 } -1076} -1077 -1078impl Future for AcceptBi<'_> { -1079 type Output = Result<(SendStream, RecvStream), ConnectionError>; -1080 -1081 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -1082 let this = self.project(); -1083 let (conn, id, is_0rtt) = ready!(poll_accept(ctx, this.conn, this.notify, Dir::Bi))?; -1084 Poll::Ready(Ok(( -1085 SendStream::new(conn.clone(), id, is_0rtt), -1086 RecvStream::new(conn, id, is_0rtt), -1087 ))) -1088 } -1089} -1090 -1091fn poll_accept<'a>( -1092 ctx: &mut Context<'_>, -1093 conn: &'a ConnectionRef, -1094 mut notify: Pin<&mut Notified<'a>>, -1095 dir: Dir, -1096) -> Poll<Result<(ConnectionRef, StreamId, bool), ConnectionError>> { -1097 let mut state = conn.lock_and_wake("poll_accept"); -1098 // Check for incoming streams before checking `state.error` so that already-received streams, -1099 // which are necessarily finite, can be drained from a closed connection. -1100 if let Some(id) = state.inner.streams().accept(dir) { -1101 let is_0rtt = state.inner.is_handshaking(); -1102 drop(state); // Release the lock (wake on drop) so clone can take it -1103 return Poll::Ready(Ok((conn.clone(), id, is_0rtt))); -1104 } else if let Some(ref e) = state.error { -1105 return Poll::Ready(Err(e.clone())); -1106 } -1107 loop { -1108 match notify.as_mut().poll(ctx) { -1109 // `state` lock ensures we didn't race with readiness -1110 Poll::Pending => return Poll::Pending, -1111 // Spurious wakeup, get a new future -1112 Poll::Ready(()) => notify.set(conn.shared.stream_incoming[dir as usize].notified()), -1113 } -1114 } -1115} -1116 -1117pin_project! { -1118 /// Future produced by [`Connection::read_datagram`] -1119 pub struct ReadDatagram<'a> { -1120 conn: &'a ConnectionRef, -1121 #[pin] -1122 notify: Notified<'a>, -1123 } -1124} -1125 -1126impl Future for ReadDatagram<'_> { -1127 type Output = Result<Bytes, ConnectionError>; -1128 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -1129 let mut this = self.project(); -1130 let mut state = this.conn.lock_without_waking("ReadDatagram::poll"); -1131 // Check for buffered datagrams before checking `state.error` so that already-received -1132 // datagrams, which are necessarily finite, can be drained from a closed connection. -1133 if let Some(x) = state.inner.datagrams().recv() { -1134 return Poll::Ready(Ok(x)); -1135 } else if let Some(ref e) = state.error { -1136 return Poll::Ready(Err(e.clone())); -1137 } -1138 loop { -1139 match this.notify.as_mut().poll(ctx) { -1140 // `state` lock ensures we didn't race with readiness -1141 Poll::Pending => return Poll::Pending, -1142 // Spurious wakeup, get a new future -1143 Poll::Ready(()) => this -1144 .notify -1145 .set(this.conn.shared.datagram_received.notified()), -1146 } -1147 } -1148 } -1149} -1150 -1151pin_project! { -1152 /// Future produced by [`Connection::send_datagram_wait`] -1153 pub struct SendDatagram<'a> { -1154 conn: &'a ConnectionRef, -1155 data: Option<Bytes>, -1156 #[pin] -1157 notify: Notified<'a>, -1158 } -1159} -1160 -1161impl Future for SendDatagram<'_> { -1162 type Output = Result<(), SendDatagramError>; -1163 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { -1164 let mut this = self.project(); -1165 let mut state = this.conn.lock_and_wake("SendDatagram::poll"); -1166 if let Some(ref e) = state.error { -1167 return Poll::Ready(Err(SendDatagramError::ConnectionLost(e.clone()))); -1168 } -1169 use proto::SendDatagramError::*; -1170 match state -1171 .inner -1172 .datagrams() -1173 .send(this.data.take().unwrap(), false) -1174 { -1175 Ok(()) => Poll::Ready(Ok(())), -1176 Err(e) => Poll::Ready(Err(match e { -1177 Blocked(data) => { -1178 this.data.replace(data); -1179 loop { -1180 match this.notify.as_mut().poll(ctx) { -1181 Poll::Pending => return Poll::Pending, -1182 // Spurious wakeup, get a new future -1183 Poll::Ready(()) => this -1184 .notify -1185 .set(this.conn.shared.datagrams_unblocked.notified()), -1186 } -1187 } -1188 } -1189 UnsupportedByPeer => SendDatagramError::UnsupportedByPeer, -1190 Disabled => SendDatagramError::Disabled, -1191 TooLarge => SendDatagramError::TooLarge, -1192 })), -1193 } -1194 } -1195} -1196 -1197/// Future returned by [`Connection::on_closed`] -1198/// -1199/// Resolves to a tuple of ([`ConnectionError`], [`ConnectionStats`]). -1200pub struct OnClosed { -1201 rx: oneshot::Receiver<(ConnectionError, ConnectionStats)>, -1202 conn: WeakConnectionHandle, -1203} -1204 -1205impl Drop for OnClosed { -1206 fn drop(&mut self) { -1207 if self.rx.is_terminated() { -1208 return; -1209 }; -1210 if let Some(conn) = self.conn.upgrade() { -1211 self.rx.close(); -1212 conn.0 -1213 .lock_without_waking("OnClosed::drop") -1214 .on_closed -1215 .retain(|tx| !tx.is_closed()); -1216 } -1217 } -1218} -1219 -1220impl Future for OnClosed { -1221 type Output = (ConnectionError, ConnectionStats); -1222 -1223 fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { -1224 let this = self.get_mut(); -1225 // The `expect` is safe because `State::drop` ensures that all senders are triggered -1226 // before being dropped. -1227 Pin::new(&mut this.rx) -1228 .poll(cx) -1229 .map(|x| x.expect("on_close sender is never dropped before sending")) -1230 } -1231} -1232 -1233#[derive(Debug)] -1234#[allow(clippy::redundant_allocation)] -1235pub(crate) struct ConnectionRef(Arc<Arc<ConnectionInner>>); -1236 -1237impl ConnectionRef { -1238 #[allow(clippy::redundant_allocation)] -1239 fn from_arc(inner: Arc<Arc<ConnectionInner>>) -> Self { -1240 inner.lock_without_waking("from_arc").ref_count += 1; -1241 Self(inner) -1242 } -1243 -1244 pub(crate) fn stable_id(&self) -> usize { -1245 &*self.0 as *const _ as usize -1246 } -1247 -1248 pub(crate) fn weak_handle(&self) -> WeakConnectionHandle { -1249 WeakConnectionHandle(Arc::downgrade(&self.0)) -1250 } -1251} -1252 -1253impl Clone for ConnectionRef { -1254 fn clone(&self) -> Self { -1255 Self::from_arc(Arc::clone(&self.0)) -1256 } -1257} -1258 -1259impl Drop for ConnectionRef { -1260 fn drop(&mut self) { -1261 let conn = &mut *self.lock_without_waking("drop"); -1262 if let Some(x) = conn.ref_count.checked_sub(1) { -1263 conn.ref_count = x; -1264 if x == 0 && !conn.inner.is_closed() { -1265 // If the driver is alive, it's just it and us, so we'd better shut it down. If it's -1266 // not, we can't do any harm. If there were any streams being opened, then either -1267 // the connection will be closed for an unrelated reason or a fresh reference will -1268 // be constructed for the newly opened stream. -1269 conn.implicit_close(&self.shared); -1270 } -1271 } -1272 } -1273} -1274 -1275impl std::ops::Deref for ConnectionRef { -1276 type Target = ConnectionInner; -1277 fn deref(&self) -> &Self::Target { -1278 &self.0 -1279 } -1280} -1281 -1282#[derive(Debug)] -1283pub(crate) struct ConnectionInner { -1284 /// Kept private intentionally, use [`Self::lock_and_wake`]. -1285 state: Mutex<State>, -1286 pub(crate) shared: Shared, -1287} -1288 -1289impl ConnectionInner { -1290 /// Lock the state and return a guard that wakes the connection driver on drop. -1291 /// -1292 /// Use this for operations that may queue frames. The wake ensures the driver sends queued frames. -1293 /// If that's not needed, use [`Self::lock_without_waking`]. -1294 pub(crate) fn lock_and_wake(&self, purpose: &'static str) -> WakeGuard<'_> { -1295 WakeGuard { -1296 guard: self.state.lock(purpose), -1297 wake: true, -1298 } -1299 } -1300 -1301 /// Lock the state and return a guard that unlocks once dropped. -1302 /// -1303 /// Use this for operations that don't require any action from the connection driver. -1304 /// Otherwise, use [`Self::lock_and_wake`] instead. -1305 pub(crate) fn lock_without_waking(&self, purpose: &'static str) -> WakeGuard<'_> { -1306 WakeGuard { -1307 guard: self.state.lock(purpose), -1308 wake: false, -1309 } -1310 } -1311} -1312 -1313/// [`MutexGuard`] wrapper that calls [`State::wake`] on drop. -1314#[derive(derive_more::Deref, derive_more::DerefMut)] -1315pub(crate) struct WakeGuard<'a> { -1316 #[deref] -1317 #[deref_mut] -1318 guard: MutexGuard<'a, State>, -1319 wake: bool, -1320} -1321 -1322impl WakeGuard<'_> { -1323 pub(crate) fn skip_waking(&mut self) { -1324 self.wake = false; -1325 } -1326} -1327 -1328impl Drop for WakeGuard<'_> { -1329 fn drop(&mut self) { -1330 if self.wake { -1331 self.guard.wake(); -1332 } -1333 } -1334} -1335 -1336/// A handle to some connection internals, use with care. -1337/// -1338/// This contains a weak reference to the connection so will not itself keep the connection -1339/// alive. -1340#[derive(Debug, Clone)] -1341pub struct WeakConnectionHandle(Weak<Arc<ConnectionInner>>); -1342 -1343impl WeakConnectionHandle { -1344 /// Returns `true` if the [`Connection`] associated with this handle is still alive. -1345 pub fn is_alive(&self) -> bool { -1346 self.0.upgrade().is_some() -1347 } -1348 -1349 /// Upgrade the handle to a full `Connection` -1350 pub fn upgrade(&self) -> Option<Connection> { -1351 self.upgrade_to_ref().map(Connection) -1352 } -1353 -1354 pub(crate) fn upgrade_to_ref(&self) -> Option<ConnectionRef> { -1355 self.0.upgrade().map(ConnectionRef::from_arc) -1356 } -1357 -1358 /// Returns `true` if the two [`WeakConnectionHandle`] point at the same connection. -1359 pub fn is_same_connection(&self, other: &Self) -> bool { -1360 self.0.ptr_eq(&other.0) -1361 } -1362} -1363 -1364#[derive(Debug, Default)] -1365pub(crate) struct Shared { -1366 handshake_confirmed: Notify, -1367 /// Notified when new streams may be locally initiated due to an increase in stream ID flow -1368 /// control budget -1369 stream_budget_available: [Notify; 2], -1370 /// Notified when the peer has initiated a new stream -1371 stream_incoming: [Notify; 2], -1372 datagram_received: Notify, -1373 datagrams_unblocked: Notify, -1374 closed: Notify, -1375} -1376 -1377pub(crate) struct State { -1378 pub(crate) inner: proto::Connection, -1379 driver: Option<Waker>, -1380 handle: ConnectionHandle, -1381 on_handshake_data: Option<oneshot::Sender<()>>, -1382 on_connected: Option<oneshot::Sender<bool>>, -1383 connected: bool, -1384 handshake_confirmed: bool, -1385 timer: Option<Pin<Box<dyn AsyncTimer>>>, -1386 timer_deadline: Option<Instant>, -1387 conn_events: mpsc::UnboundedReceiver<ConnectionEvent>, -1388 endpoint_events: mpsc::UnboundedSender<(ConnectionHandle, EndpointEvent)>, -1389 pub(crate) blocked_writers: FxHashMap<StreamId, Waker>, -1390 pub(crate) blocked_readers: FxHashMap<StreamId, Waker>, -1391 pub(crate) stopped: FxHashMap<StreamId, Arc<Notify>>, -1392 /// Always set to Some before the connection becomes drained -1393 pub(crate) error: Option<ConnectionError>, -1394 /// Tracks paths being opened -1395 open_path: FxHashMap<PathId, watch::Sender<Result<(), PathError>>>, -1396 /// Tracks reference counts for paths. -1397 /// -1398 /// I.e. how many [`Path`] and [`WeakPathHandle`] structs are alive for a path. -1399 /// -1400 /// [`WeakPathHandle`]: crate::path::WeakPathHandle -1401 pub(crate) path_refs: FxHashMap<PathId, usize>, -1402 /// Final path stats for discarded paths. -1403 /// -1404 /// We only insert entries if the discarded path has a non-zero reference count in [`Self::path_refs`]. -1405 /// When the last reference to a path is dropped via [`Self::decrement_path_refs`] its value is cleared. -1406 pub(crate) final_path_stats: FxHashMap<PathId, PathStats>, -1407 pub(crate) path_events: tokio::sync::broadcast::Sender<PathEvent>, -1408 /// Number of live handles that can be used to initiate or handle I/O; excludes the driver -1409 ref_count: usize, -1410 sender: Pin<Box<dyn UdpSender>>, -1411 pub(crate) runtime: Arc<dyn Runtime>, -1412 send_buffer: Vec<u8>, -1413 /// We buffer a transmit when the underlying I/O would block -1414 buffered_transmit: Option<proto::Transmit>, -1415 /// Our last external address reported by the peer. When multipath is enabled, this will be the -1416 /// last report across all paths. -1417 pub(crate) observed_external_addr: watch::Sender<Option<SocketAddr>>, -1418 pub(crate) nat_traversal_updates: tokio::sync::broadcast::Sender<n0_nat_traversal::Event>, -1419 on_closed: Vec<oneshot::Sender<(ConnectionError, ConnectionStats)>>, -1420} -1421 -1422impl State { -1423 #[allow(clippy::too_many_arguments)] -1424 fn new( -1425 inner: proto::Connection, -1426 handle: ConnectionHandle, -1427 endpoint_events: mpsc::UnboundedSender<(ConnectionHandle, EndpointEvent)>, -1428 conn_events: mpsc::UnboundedReceiver<ConnectionEvent>, -1429 on_handshake_data: oneshot::Sender<()>, -1430 on_connected: oneshot::Sender<bool>, -1431 sender: Pin<Box<dyn UdpSender>>, -1432 runtime: Arc<dyn Runtime>, -1433 ) -> Self { -1434 Self { -1435 inner, -1436 driver: None, -1437 handle, -1438 on_handshake_data: Some(on_handshake_data), -1439 on_connected: Some(on_connected), -1440 connected: false, -1441 handshake_confirmed: false, -1442 timer: None, -1443 timer_deadline: None, -1444 conn_events, -1445 endpoint_events, -1446 blocked_writers: FxHashMap::default(), -1447 blocked_readers: FxHashMap::default(), -1448 stopped: FxHashMap::default(), -1449 open_path: FxHashMap::default(), -1450 error: None, -1451 ref_count: 0, -1452 sender, -1453 runtime, -1454 send_buffer: Vec::new(), -1455 buffered_transmit: None, -1456 path_events: tokio::sync::broadcast::channel(32).0, -1457 observed_external_addr: watch::Sender::new(None), -1458 nat_traversal_updates: tokio::sync::broadcast::channel(32).0, -1459 on_closed: Vec::new(), -1460 final_path_stats: Default::default(), -1461 path_refs: Default::default(), -1462 } -1463 } -1464 -1465 fn drive_transmit(&mut self, cx: &mut Context<'_>) -> io::Result<bool> { -1466 let now = self.runtime.now(); -1467 let mut transmits = 0; -1468 -1469 let max_datagrams = self -1470 .sender -1471 .max_transmit_segments() -1472 .min(MAX_TRANSMIT_SEGMENTS); -1473 -1474 loop { -1475 // Retry the last transmit, or get a new one. -1476 let t = match self.buffered_transmit.take() { -1477 Some(t) => t, -1478 None => { -1479 self.send_buffer.clear(); -1480 match self -1481 .inner -1482 .poll_transmit(now, max_datagrams, &mut self.send_buffer) -1483 { -1484 Some(t) => { -1485 transmits += match t.segment_size { -1486 None => 1, -1487 Some(s) => t.size.div_ceil(s), // round up -1488 }; -1489 t -1490 } -1491 None => break, -1492 } -1493 } -1494 }; -1495 -1496 let len = t.size; -1497 match self -1498 .sender -1499 .as_mut() -1500 .poll_send(&udp_transmit(&t, &self.send_buffer[..len]), cx) -1501 { -1502 Poll::Pending => { -1503 self.buffered_transmit = Some(t); -1504 return Ok(false); -1505 } -1506 Poll::Ready(Err(e)) => return Err(e), -1507 Poll::Ready(Ok(())) => {} -1508 } -1509 -1510 if transmits >= MAX_TRANSMIT_DATAGRAMS { -1511 // TODO: What isn't ideal here yet is that if we don't poll all -1512 // datagrams that could be sent we don't go into the `app_limited` -1513 // state and CWND continues to grow until we get here the next time. -1514 // See https://github.com/quinn-rs/quinn/issues/1126 -1515 return Ok(true); -1516 } -1517 } -1518 -1519 Ok(false) -1520 } -1521 -1522 fn forward_endpoint_events(&mut self) { -1523 while let Some(event) = self.inner.poll_endpoint_events() { -1524 // If the endpoint driver is gone, noop. -1525 let _ = self.endpoint_events.send((self.handle, event)); -1526 } -1527 } -1528 -1529 /// If this returns `Err`, the endpoint is dead, so the driver should exit immediately. -1530 fn process_conn_events( -1531 &mut self, -1532 shared: &Shared, -1533 cx: &mut Context<'_>, -1534 ) -> Result<(), ConnectionError> { -1535 loop { -1536 match self.conn_events.poll_recv(cx) { -1537 Poll::Ready(Some(ConnectionEvent::Rebind(sender))) => { -1538 self.sender = sender; -1539 self.inner.handle_network_change(None, self.runtime.now()); -1540 } -1541 Poll::Ready(Some(ConnectionEvent::LocalAddressChanged(hint))) => { -1542 self.inner -1543 .handle_network_change(hint.as_deref().map(|x| x as _), self.runtime.now()); -1544 } -1545 Poll::Ready(Some(ConnectionEvent::Proto(event))) => { -1546 self.inner.handle_event(event); -1547 } -1548 Poll::Ready(Some(ConnectionEvent::Close { reason, error_code })) => { -1549 self.close(error_code, reason, shared); -1550 } -1551 Poll::Ready(None) => { -1552 return Err(ConnectionError::TransportError(TransportError::new( -1553 TransportErrorCode::INTERNAL_ERROR, -1554 "endpoint driver future was dropped".to_string(), -1555 ))); -1556 } -1557 Poll::Pending => { -1558 return Ok(()); -1559 } -1560 } -1561 } -1562 } -1563 -1564 fn forward_app_events(&mut self, shared: &Shared) { -1565 while let Some(event) = self.inner.poll() { -1566 use proto::Event::*; -1567 match event { -1568 HandshakeDataReady => { -1569 if let Some(x) = self.on_handshake_data.take() { -1570 let _ = x.send(()); -1571 } -1572 } -1573 Connected => { -1574 self.connected = true; -1575 if let Some(x) = self.on_connected.take() { -1576 // We don't care if the on-connected future was dropped -1577 let _ = x.send(self.inner.accepted_0rtt()); -1578 } -1579 if self.inner.side().is_client() && !self.inner.accepted_0rtt() { -1580 // Wake up rejected 0-RTT streams so they can fail immediately with -1581 // `ZeroRttRejected` errors. -1582 wake_all(&mut self.blocked_writers); -1583 wake_all(&mut self.blocked_readers); -1584 wake_all_notify(&mut self.stopped); -1585 } -1586 } -1587 HandshakeConfirmed => { -1588 self.handshake_confirmed = true; -1589 shared.handshake_confirmed.notify_waiters(); -1590 } -1591 ConnectionLost { reason } => { -1592 self.terminate(reason, shared); -1593 } -1594 Stream(StreamEvent::Writable { id }) => wake_stream(id, &mut self.blocked_writers), -1595 Stream(StreamEvent::Opened { dir: Dir::Uni }) => { -1596 shared.stream_incoming[Dir::Uni as usize].notify_waiters(); -1597 } -1598 Stream(StreamEvent::Opened { dir: Dir::Bi }) => { -1599 shared.stream_incoming[Dir::Bi as usize].notify_waiters(); -1600 } -1601 DatagramReceived => { -1602 shared.datagram_received.notify_waiters(); -1603 } -1604 DatagramsUnblocked => { -1605 shared.datagrams_unblocked.notify_waiters(); -1606 } -1607 Stream(StreamEvent::Readable { id }) => wake_stream(id, &mut self.blocked_readers), -1608 Stream(StreamEvent::Available { dir }) => { -1609 // Might mean any number of streams are ready, so we wake up everyone -1610 shared.stream_budget_available[dir as usize].notify_waiters(); -1611 } -1612 Stream(StreamEvent::Finished { id }) => wake_stream_notify(id, &mut self.stopped), -1613 Stream(StreamEvent::Stopped { id, .. }) => { -1614 wake_stream_notify(id, &mut self.stopped); -1615 wake_stream(id, &mut self.blocked_writers); -1616 } -1617 Path(ref evt @ PathEvent::ObservedAddr { addr: observed, .. }) => { -1618 self.path_events.send(evt.clone()).ok(); -1619 self.observed_external_addr.send_if_modified(|addr| { -1620 let old = addr.replace(observed); -1621 old != *addr -1622 }); -1623 } -1624 Path(ref evt @ PathEvent::Opened { id }) => { -1625 self.path_events.send(evt.clone()).ok(); -1626 if let Some(sender) = self.open_path.remove(&id) { -1627 sender.send_modify(|value| *value = Ok(())); -1628 } -1629 } -1630 Path(ref evt @ PathEvent::Discarded { id, ref path_stats }) => { -1631 if self.path_refs.contains_key(&id) { -1632 self.final_path_stats.insert(id, *path_stats.clone()); -1633 } -1634 self.path_events.send(evt.clone()).ok(); -1635 } -1636 Path(ref evt @ PathEvent::Abandoned { id, .. }) => { -1637 if let Some(sender) = self.open_path.remove(&id) { -1638 // We don't care for the reason why this path was closed here, because semantically -1639 // all close reasons for a path that has not yet been opened equals to `ValidationFailed`. -1640 // With the noq API, there is no way to application-close a not-yet-opened path, so -1641 // `ApplicationClosed` cannot occur. And all other variants will only occur for paths -1642 // that have already been opened. -1643 // The previous iteration of this code had another event `PathEvent::LocallyClosed` which -1644 // contained a `PathError`, but that was only ever set to `ValidationFailed`. -1645 let error = PathError::ValidationFailed; -1646 sender.send_modify(|value| *value = Err(error)); -1647 } -1648 // this will happen also for already opened paths -1649 self.path_events.send(evt.clone()).ok(); -1650 } -1651 Path(evt @ PathEvent::RemoteStatus { .. }) => { -1652 self.path_events.send(evt).ok(); -1653 } -1654 NatTraversal(update) => { -1655 self.nat_traversal_updates.send(update).ok(); -1656 } -1657 } -1658 } -1659 } -1660 -1661 fn drive_timer(&mut self, cx: &mut Context<'_>) -> bool { -1662 // Check whether we need to (re)set the timer. If so, we must poll again to ensure the -1663 // timer is registered with the runtime (and check whether it's already -1664 // expired). -1665 match self.inner.poll_timeout() { -1666 Some(deadline) => { -1667 if let Some(delay) = &mut self.timer { -1668 // There is no need to reset the tokio timer if the deadline -1669 // did not change -1670 if self -1671 .timer_deadline -1672 .map(|current_deadline| current_deadline != deadline) -1673 .unwrap_or(true) -1674 { -1675 delay.as_mut().reset(deadline); -1676 } -1677 } else { -1678 self.timer = Some(self.runtime.new_timer(deadline)); -1679 } -1680 // Store the actual expiration time of the timer -1681 self.timer_deadline = Some(deadline); -1682 } -1683 None => { -1684 self.timer_deadline = None; -1685 return false; -1686 } -1687 } -1688 -1689 if self.timer_deadline.is_none() { -1690 return false; -1691 } -1692 -1693 let delay = self -1694 .timer -1695 .as_mut() -1696 .expect("timer must exist in this state") -1697 .as_mut(); -1698 if delay.poll(cx).is_pending() { -1699 // Since there wasn't a timeout event, there is nothing new -1700 // for the connection to do -1701 return false; -1702 } -1703 -1704 // A timer expired, so the caller needs to check for -1705 // new transmits, which might cause new timers to be set. -1706 self.inner.handle_timeout(self.runtime.now()); -1707 self.timer_deadline = None; -1708 true -1709 } -1710 -1711 /// Wake up a blocked `Driver` task to process I/O -1712 pub(crate) fn wake(&mut self) { -1713 if let Some(x) = self.driver.take() { -1714 x.wake(); -1715 } -1716 } -1717 -1718 /// Used to wake up all blocked futures when the connection becomes closed for any reason -1719 fn terminate(&mut self, reason: ConnectionError, shared: &Shared) { -1720 self.error = Some(reason.clone()); -1721 if let Some(x) = self.on_handshake_data.take() { -1722 let _ = x.send(()); -1723 } -1724 wake_all(&mut self.blocked_writers); -1725 wake_all(&mut self.blocked_readers); -1726 shared.stream_budget_available[Dir::Uni as usize].notify_waiters(); -1727 shared.stream_budget_available[Dir::Bi as usize].notify_waiters(); -1728 shared.stream_incoming[Dir::Uni as usize].notify_waiters(); -1729 shared.stream_incoming[Dir::Bi as usize].notify_waiters(); -1730 shared.datagram_received.notify_waiters(); -1731 shared.datagrams_unblocked.notify_waiters(); -1732 if let Some(x) = self.on_connected.take() { -1733 let _ = x.send(false); -1734 } -1735 shared.handshake_confirmed.notify_waiters(); -1736 wake_all_notify(&mut self.stopped); -1737 shared.closed.notify_waiters(); -1738 -1739 // Send to the registered on_closed futures. -1740 let stats = self.inner.stats(); -1741 for tx in self.on_closed.drain(..) { -1742 tx.send((reason.clone(), stats.clone())).ok(); -1743 } -1744 } -1745 -1746 fn close(&mut self, error_code: VarInt, reason: Bytes, shared: &Shared) { -1747 self.inner.close(self.runtime.now(), error_code, reason); -1748 self.terminate(ConnectionError::LocallyClosed, shared); -1749 self.wake(); -1750 } -1751 -1752 /// Close for a reason other than the application's explicit request -1753 pub(crate) fn implicit_close(&mut self, shared: &Shared) { -1754 self.close(0u32.into(), Bytes::new(), shared); -1755 } -1756 -1757 pub(crate) fn check_0rtt(&self) -> Result<(), ()> { -1758 if self.inner.is_handshaking() -1759 || self.inner.accepted_0rtt() -1760 || self.inner.side().is_server() -1761 { -1762 Ok(()) -1763 } else { -1764 Err(()) -1765 } -1766 } -1767 -1768 /// Returns [`PathStats`] for a path, if available. -1769 /// -1770 /// This gets the stats from [`proto::Connection`]. If that returns `None` -1771 /// it gets them from `Self::final_path_stats` instead. -1772 pub(crate) fn path_stats(&mut self, path_id: PathId) -> Option<PathStats> { -1773 self.inner -1774 .path_stats(path_id) -1775 .or_else(|| self.final_path_stats.get(&path_id).copied()) -1776 } -1777 -1778 /// Increment the reference counter for a path in this connection. -1779 /// -1780 /// This counts how many [`Path`] or [`WeakPathHandle`] structs exist for a path. -1781 /// Currently this is used to determine whether to store the final stats after a path is -1782 /// abandoned. -1783 /// -1784 /// [`WeakPathHandle`]: crate::path::WeakPathHandle -1785 pub(crate) fn increment_path_refs(&mut self, path_id: PathId) { -1786 *self.path_refs.entry(path_id).or_default() += 1; -1787 } -1788 -1789 /// Decrement the reference counter for a path in this connection. -1790 pub(crate) fn decrement_path_refs(&mut self, path_id: PathId) { -1791 if let Some(refs) = self.path_refs.get_mut(&path_id) { -1792 *refs = refs.saturating_sub(1); -1793 if *refs == 0 { -1794 self.path_refs.remove(&path_id); -1795 self.final_path_stats.remove(&path_id); -1796 } -1797 } -1798 } -1799} -1800 -1801impl Drop for State { -1802 fn drop(&mut self) { -1803 if !self.inner.is_drained() { -1804 // Ensure the endpoint can tidy up -1805 let _ = self -1806 .endpoint_events -1807 .send((self.handle, proto::EndpointEvent::drained())); -1808 } -1809 -1810 if !self.on_closed.is_empty() { -1811 // Ensure that all on_closed oneshot senders are triggered before dropping. -1812 let reason = self.error.as_ref().expect("closed without error reason"); -1813 let stats = self.inner.stats(); -1814 for tx in self.on_closed.drain(..) { -1815 tx.send((reason.clone(), stats.clone())).ok(); -1816 } -1817 } -1818 } -1819} -1820 -1821impl fmt::Debug for State { -1822 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -1823 f.debug_struct("State").field("inner", &self.inner).finish() -1824 } -1825} -1826 -1827fn wake_stream(stream_id: StreamId, wakers: &mut FxHashMap<StreamId, Waker>) { -1828 if let Some(waker) = wakers.remove(&stream_id) { -1829 waker.wake(); -1830 } -1831} -1832 -1833fn wake_all(wakers: &mut FxHashMap<StreamId, Waker>) { -1834 wakers.drain().for_each(|(_, waker)| waker.wake()) -1835} -1836 -1837fn wake_stream_notify(stream_id: StreamId, wakers: &mut FxHashMap<StreamId, Arc<Notify>>) { -1838 if let Some(notify) = wakers.remove(&stream_id) { -1839 notify.notify_waiters() -1840 } -1841} -1842 -1843fn wake_all_notify(wakers: &mut FxHashMap<StreamId, Arc<Notify>>) { -1844 wakers -1845 .drain() -1846 .for_each(|(_, notify)| notify.notify_waiters()) -1847} -1848 -1849/// Errors that can arise when sending a datagram -1850#[derive(Debug, Error, Clone, Eq, PartialEq)] -1851pub enum SendDatagramError { -1852 /// The peer does not support receiving datagram frames -1853 #[error("datagrams not supported by peer")] -1854 UnsupportedByPeer, -1855 /// Datagram support is disabled locally -1856 #[error("datagram support disabled")] -1857 Disabled, -1858 /// The datagram is larger than the connection can currently accommodate -1859 /// -1860 /// Indicates that the path MTU minus overhead or the limit advertised by the peer has been -1861 /// exceeded. -1862 #[error("datagram too large")] -1863 TooLarge, -1864 /// The connection was lost -1865 #[error("connection lost")] -1866 ConnectionLost(#[from] ConnectionError), -1867} -1868 -1869/// The maximum amount of datagrams which will be produced in a single `drive_transmit` call -1870/// -1871/// This limits the amount of CPU resources consumed by datagram generation, -1872/// and allows other tasks (like receiving ACKs) to run in between. -1873const MAX_TRANSMIT_DATAGRAMS: usize = 20; -1874 -1875/// The maximum amount of datagrams that are sent in a single transmit -1876/// -1877/// This can be lower than the maximum platform capabilities, to avoid excessive -1878/// memory allocations when calling `poll_transmit()`. Benchmarks have shown -1879/// that numbers around 10 are a good compromise. -1880const MAX_TRANSMIT_SEGMENTS: NonZeroUsize = NonZeroUsize::new(10).expect("known");

\ No newline at end of file +928 priority: u8, +929 ) -> Result<(), n0_nat_traversal::Error> { +930 let mut conn = self.0.lock_and_wake("add_nat_traversal_addresses"); +931 conn.inner.add_nat_traversal_address(address, priority) +932 } +933 +934 /// Removes one or more addresses from the set of addresses at which this endpoint is reachable +935 /// +936 /// When the NAT traversal extension is negotiated, servers send address removals to +937 /// clients in `REMOVE_ADDRESS` frames. This allows clients to stop using outdated +938 /// server address candidates that are no longer valid for NAT traversal. +939 /// +940 /// For clients, removed addresses will no longer be advertised in `REACH_OUT` frames. +941 /// +942 /// Addresses not present in the set will be silently ignored. +943 pub fn remove_nat_traversal_address( +944 &self, +945 address: SocketAddr, +946 ) -> Result<(), n0_nat_traversal::Error> { +947 let mut conn = self.0.lock_and_wake("remove_nat_traversal_addresses"); +948 conn.inner.remove_nat_traversal_address(address) +949 } +950 +951 /// Get the current local nat traversal addresses +952 pub fn get_local_nat_traversal_addresses( +953 &self, +954 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +955 let conn = self +956 .0 +957 .lock_without_waking("get_local_nat_traversal_addresses"); +958 conn.inner.get_local_nat_traversal_addresses() +959 } +960 +961 /// Get the currently advertised nat traversal addresses by the server +962 pub fn get_remote_nat_traversal_addresses( +963 &self, +964 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +965 let conn = self +966 .0 +967 .lock_without_waking("get_remote_nat_traversal_addresses"); +968 conn.inner.get_remote_nat_traversal_addresses() +969 } +970 +971 /// Initiates a new nat traversal round +972 /// +973 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` +974 /// frames, and initiating probing of the known remote addresses. When a new round is +975 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. +976 /// +977 /// Returns the server addresses that are now being probed. +978 pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +979 let mut conn = self.0.lock_and_wake("initiate_nat_traversal_round"); +980 let now = conn.runtime.now(); +981 conn.inner.initiate_nat_traversal_round(now) +982 } +983} +984 +985pin_project! { +986 /// Future produced by [`Connection::open_uni`] +987 pub struct OpenUni<'a> { +988 conn: &'a ConnectionRef, +989 #[pin] +990 notify: Notified<'a>, +991 } +992} +993 +994impl Future for OpenUni<'_> { +995 type Output = Result<SendStream, ConnectionError>; +996 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +997 let this = self.project(); +998 let (conn, id, is_0rtt) = ready!(poll_open(ctx, this.conn, this.notify, Dir::Uni))?; +999 Poll::Ready(Ok(SendStream::new(conn, id, is_0rtt))) +1000 } +1001} +1002 +1003pin_project! { +1004 /// Future produced by [`Connection::open_bi`] +1005 pub struct OpenBi<'a> { +1006 conn: &'a ConnectionRef, +1007 #[pin] +1008 notify: Notified<'a>, +1009 } +1010} +1011 +1012impl Future for OpenBi<'_> { +1013 type Output = Result<(SendStream, RecvStream), ConnectionError>; +1014 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +1015 let this = self.project(); +1016 let (conn, id, is_0rtt) = ready!(poll_open(ctx, this.conn, this.notify, Dir::Bi))?; +1017 +1018 Poll::Ready(Ok(( +1019 SendStream::new(conn.clone(), id, is_0rtt), +1020 RecvStream::new(conn, id, is_0rtt), +1021 ))) +1022 } +1023} +1024 +1025fn poll_open<'a>( +1026 ctx: &mut Context<'_>, +1027 conn: &'a ConnectionRef, +1028 mut notify: Pin<&mut Notified<'a>>, +1029 dir: Dir, +1030) -> Poll<Result<(ConnectionRef, StreamId, bool), ConnectionError>> { +1031 let mut state = conn.lock_without_waking("poll_open"); +1032 if let Some(ref e) = state.error { +1033 return Poll::Ready(Err(e.clone())); +1034 } else if let Some(id) = state.inner.streams().open(dir) { +1035 let is_0rtt = state.inner.side().is_client() && state.inner.is_handshaking(); +1036 drop(state); // Release the lock so clone can take it +1037 return Poll::Ready(Ok((conn.clone(), id, is_0rtt))); +1038 } +1039 loop { +1040 match notify.as_mut().poll(ctx) { +1041 // `state` lock ensures we didn't race with readiness +1042 Poll::Pending => return Poll::Pending, +1043 // Spurious wakeup, get a new future +1044 Poll::Ready(()) => { +1045 notify.set(conn.shared.stream_budget_available[dir as usize].notified()) +1046 } +1047 } +1048 } +1049} +1050 +1051pin_project! { +1052 /// Future produced by [`Connection::accept_uni`] +1053 pub struct AcceptUni<'a> { +1054 conn: &'a ConnectionRef, +1055 #[pin] +1056 notify: Notified<'a>, +1057 } +1058} +1059 +1060impl Future for AcceptUni<'_> { +1061 type Output = Result<RecvStream, ConnectionError>; +1062 +1063 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +1064 let this = self.project(); +1065 let (conn, id, is_0rtt) = ready!(poll_accept(ctx, this.conn, this.notify, Dir::Uni))?; +1066 Poll::Ready(Ok(RecvStream::new(conn, id, is_0rtt))) +1067 } +1068} +1069 +1070pin_project! { +1071 /// Future produced by [`Connection::accept_bi`] +1072 pub struct AcceptBi<'a> { +1073 conn: &'a ConnectionRef, +1074 #[pin] +1075 notify: Notified<'a>, +1076 } +1077} +1078 +1079impl Future for AcceptBi<'_> { +1080 type Output = Result<(SendStream, RecvStream), ConnectionError>; +1081 +1082 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +1083 let this = self.project(); +1084 let (conn, id, is_0rtt) = ready!(poll_accept(ctx, this.conn, this.notify, Dir::Bi))?; +1085 Poll::Ready(Ok(( +1086 SendStream::new(conn.clone(), id, is_0rtt), +1087 RecvStream::new(conn, id, is_0rtt), +1088 ))) +1089 } +1090} +1091 +1092fn poll_accept<'a>( +1093 ctx: &mut Context<'_>, +1094 conn: &'a ConnectionRef, +1095 mut notify: Pin<&mut Notified<'a>>, +1096 dir: Dir, +1097) -> Poll<Result<(ConnectionRef, StreamId, bool), ConnectionError>> { +1098 let mut state = conn.lock_and_wake("poll_accept"); +1099 // Check for incoming streams before checking `state.error` so that already-received streams, +1100 // which are necessarily finite, can be drained from a closed connection. +1101 if let Some(id) = state.inner.streams().accept(dir) { +1102 let is_0rtt = state.inner.is_handshaking(); +1103 drop(state); // Release the lock (wake on drop) so clone can take it +1104 return Poll::Ready(Ok((conn.clone(), id, is_0rtt))); +1105 } else if let Some(ref e) = state.error { +1106 return Poll::Ready(Err(e.clone())); +1107 } +1108 loop { +1109 match notify.as_mut().poll(ctx) { +1110 // `state` lock ensures we didn't race with readiness +1111 Poll::Pending => return Poll::Pending, +1112 // Spurious wakeup, get a new future +1113 Poll::Ready(()) => notify.set(conn.shared.stream_incoming[dir as usize].notified()), +1114 } +1115 } +1116} +1117 +1118pin_project! { +1119 /// Future produced by [`Connection::read_datagram`] +1120 pub struct ReadDatagram<'a> { +1121 conn: &'a ConnectionRef, +1122 #[pin] +1123 notify: Notified<'a>, +1124 } +1125} +1126 +1127impl Future for ReadDatagram<'_> { +1128 type Output = Result<Bytes, ConnectionError>; +1129 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +1130 let mut this = self.project(); +1131 let mut state = this.conn.lock_without_waking("ReadDatagram::poll"); +1132 // Check for buffered datagrams before checking `state.error` so that already-received +1133 // datagrams, which are necessarily finite, can be drained from a closed connection. +1134 if let Some(x) = state.inner.datagrams().recv() { +1135 return Poll::Ready(Ok(x)); +1136 } else if let Some(ref e) = state.error { +1137 return Poll::Ready(Err(e.clone())); +1138 } +1139 loop { +1140 match this.notify.as_mut().poll(ctx) { +1141 // `state` lock ensures we didn't race with readiness +1142 Poll::Pending => return Poll::Pending, +1143 // Spurious wakeup, get a new future +1144 Poll::Ready(()) => this +1145 .notify +1146 .set(this.conn.shared.datagram_received.notified()), +1147 } +1148 } +1149 } +1150} +1151 +1152pin_project! { +1153 /// Future produced by [`Connection::send_datagram_wait`] +1154 pub struct SendDatagram<'a> { +1155 conn: &'a ConnectionRef, +1156 data: Option<Bytes>, +1157 #[pin] +1158 notify: Notified<'a>, +1159 } +1160} +1161 +1162impl Future for SendDatagram<'_> { +1163 type Output = Result<(), SendDatagramError>; +1164 fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output> { +1165 let mut this = self.project(); +1166 let mut state = this.conn.lock_and_wake("SendDatagram::poll"); +1167 if let Some(ref e) = state.error { +1168 return Poll::Ready(Err(SendDatagramError::ConnectionLost(e.clone()))); +1169 } +1170 use proto::SendDatagramError::*; +1171 match state +1172 .inner +1173 .datagrams() +1174 .send(this.data.take().unwrap(), false) +1175 { +1176 Ok(()) => Poll::Ready(Ok(())), +1177 Err(e) => Poll::Ready(Err(match e { +1178 Blocked(data) => { +1179 this.data.replace(data); +1180 loop { +1181 match this.notify.as_mut().poll(ctx) { +1182 Poll::Pending => return Poll::Pending, +1183 // Spurious wakeup, get a new future +1184 Poll::Ready(()) => this +1185 .notify +1186 .set(this.conn.shared.datagrams_unblocked.notified()), +1187 } +1188 } +1189 } +1190 UnsupportedByPeer => SendDatagramError::UnsupportedByPeer, +1191 Disabled => SendDatagramError::Disabled, +1192 TooLarge => SendDatagramError::TooLarge, +1193 })), +1194 } +1195 } +1196} +1197 +1198/// Future returned by [`Connection::on_closed`] +1199/// +1200/// Resolves to a tuple of ([`ConnectionError`], [`ConnectionStats`]). +1201pub struct OnClosed { +1202 rx: oneshot::Receiver<(ConnectionError, ConnectionStats)>, +1203 conn: WeakConnectionHandle, +1204} +1205 +1206impl Drop for OnClosed { +1207 fn drop(&mut self) { +1208 if self.rx.is_terminated() { +1209 return; +1210 }; +1211 if let Some(conn) = self.conn.upgrade() { +1212 self.rx.close(); +1213 conn.0 +1214 .lock_without_waking("OnClosed::drop") +1215 .on_closed +1216 .retain(|tx| !tx.is_closed()); +1217 } +1218 } +1219} +1220 +1221impl Future for OnClosed { +1222 type Output = (ConnectionError, ConnectionStats); +1223 +1224 fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { +1225 let this = self.get_mut(); +1226 // The `expect` is safe because `State::drop` ensures that all senders are triggered +1227 // before being dropped. +1228 Pin::new(&mut this.rx) +1229 .poll(cx) +1230 .map(|x| x.expect("on_close sender is never dropped before sending")) +1231 } +1232} +1233 +1234#[derive(Debug)] +1235#[allow(clippy::redundant_allocation)] +1236pub(crate) struct ConnectionRef(Arc<Arc<ConnectionInner>>); +1237 +1238impl ConnectionRef { +1239 #[allow(clippy::redundant_allocation)] +1240 fn from_arc(inner: Arc<Arc<ConnectionInner>>) -> Self { +1241 inner.lock_without_waking("from_arc").ref_count += 1; +1242 Self(inner) +1243 } +1244 +1245 pub(crate) fn stable_id(&self) -> usize { +1246 &*self.0 as *const _ as usize +1247 } +1248 +1249 pub(crate) fn weak_handle(&self) -> WeakConnectionHandle { +1250 WeakConnectionHandle(Arc::downgrade(&self.0)) +1251 } +1252} +1253 +1254impl Clone for ConnectionRef { +1255 fn clone(&self) -> Self { +1256 Self::from_arc(Arc::clone(&self.0)) +1257 } +1258} +1259 +1260impl Drop for ConnectionRef { +1261 fn drop(&mut self) { +1262 let conn = &mut *self.lock_without_waking("drop"); +1263 if let Some(x) = conn.ref_count.checked_sub(1) { +1264 conn.ref_count = x; +1265 if x == 0 && !conn.inner.is_closed() { +1266 // If the driver is alive, it's just it and us, so we'd better shut it down. If it's +1267 // not, we can't do any harm. If there were any streams being opened, then either +1268 // the connection will be closed for an unrelated reason or a fresh reference will +1269 // be constructed for the newly opened stream. +1270 conn.implicit_close(&self.shared); +1271 } +1272 } +1273 } +1274} +1275 +1276impl std::ops::Deref for ConnectionRef { +1277 type Target = ConnectionInner; +1278 fn deref(&self) -> &Self::Target { +1279 &self.0 +1280 } +1281} +1282 +1283#[derive(Debug)] +1284pub(crate) struct ConnectionInner { +1285 /// Kept private intentionally, use [`Self::lock_and_wake`]. +1286 state: Mutex<State>, +1287 pub(crate) shared: Shared, +1288} +1289 +1290impl ConnectionInner { +1291 /// Lock the state and return a guard that wakes the connection driver on drop. +1292 /// +1293 /// Use this for operations that may queue frames. The wake ensures the driver sends queued frames. +1294 /// If that's not needed, use [`Self::lock_without_waking`]. +1295 pub(crate) fn lock_and_wake(&self, purpose: &'static str) -> WakeGuard<'_> { +1296 WakeGuard { +1297 guard: self.state.lock(purpose), +1298 wake: true, +1299 } +1300 } +1301 +1302 /// Lock the state and return a guard that unlocks once dropped. +1303 /// +1304 /// Use this for operations that don't require any action from the connection driver. +1305 /// Otherwise, use [`Self::lock_and_wake`] instead. +1306 pub(crate) fn lock_without_waking(&self, purpose: &'static str) -> WakeGuard<'_> { +1307 WakeGuard { +1308 guard: self.state.lock(purpose), +1309 wake: false, +1310 } +1311 } +1312} +1313 +1314/// [`MutexGuard`] wrapper that calls [`State::wake`] on drop. +1315#[derive(derive_more::Deref, derive_more::DerefMut)] +1316pub(crate) struct WakeGuard<'a> { +1317 #[deref] +1318 #[deref_mut] +1319 guard: MutexGuard<'a, State>, +1320 wake: bool, +1321} +1322 +1323impl WakeGuard<'_> { +1324 pub(crate) fn skip_waking(&mut self) { +1325 self.wake = false; +1326 } +1327} +1328 +1329impl Drop for WakeGuard<'_> { +1330 fn drop(&mut self) { +1331 if self.wake { +1332 self.guard.wake(); +1333 } +1334 } +1335} +1336 +1337/// A handle to some connection internals, use with care. +1338/// +1339/// This contains a weak reference to the connection so will not itself keep the connection +1340/// alive. +1341#[derive(Debug, Clone)] +1342pub struct WeakConnectionHandle(Weak<Arc<ConnectionInner>>); +1343 +1344impl WeakConnectionHandle { +1345 /// Returns `true` if the [`Connection`] associated with this handle is still alive. +1346 pub fn is_alive(&self) -> bool { +1347 self.0.upgrade().is_some() +1348 } +1349 +1350 /// Upgrade the handle to a full `Connection` +1351 pub fn upgrade(&self) -> Option<Connection> { +1352 self.upgrade_to_ref().map(Connection) +1353 } +1354 +1355 pub(crate) fn upgrade_to_ref(&self) -> Option<ConnectionRef> { +1356 self.0.upgrade().map(ConnectionRef::from_arc) +1357 } +1358 +1359 /// Returns `true` if the two [`WeakConnectionHandle`] point at the same connection. +1360 pub fn is_same_connection(&self, other: &Self) -> bool { +1361 self.0.ptr_eq(&other.0) +1362 } +1363} +1364 +1365#[derive(Debug, Default)] +1366pub(crate) struct Shared { +1367 handshake_confirmed: Notify, +1368 /// Notified when new streams may be locally initiated due to an increase in stream ID flow +1369 /// control budget +1370 stream_budget_available: [Notify; 2], +1371 /// Notified when the peer has initiated a new stream +1372 stream_incoming: [Notify; 2], +1373 datagram_received: Notify, +1374 datagrams_unblocked: Notify, +1375 closed: Notify, +1376} +1377 +1378pub(crate) struct State { +1379 pub(crate) inner: proto::Connection, +1380 driver: Option<Waker>, +1381 handle: ConnectionHandle, +1382 on_handshake_data: Option<oneshot::Sender<()>>, +1383 on_connected: Option<oneshot::Sender<bool>>, +1384 connected: bool, +1385 handshake_confirmed: bool, +1386 timer: Option<Pin<Box<dyn AsyncTimer>>>, +1387 timer_deadline: Option<Instant>, +1388 conn_events: mpsc::UnboundedReceiver<ConnectionEvent>, +1389 endpoint_events: mpsc::UnboundedSender<(ConnectionHandle, EndpointEvent)>, +1390 pub(crate) blocked_writers: FxHashMap<StreamId, Waker>, +1391 pub(crate) blocked_readers: FxHashMap<StreamId, Waker>, +1392 pub(crate) stopped: FxHashMap<StreamId, Arc<Notify>>, +1393 /// Always set to Some before the connection becomes drained +1394 pub(crate) error: Option<ConnectionError>, +1395 /// Tracks paths being opened +1396 open_path: FxHashMap<PathId, watch::Sender<Result<(), PathError>>>, +1397 /// Tracks reference counts for paths. +1398 /// +1399 /// I.e. how many [`Path`] and [`WeakPathHandle`] structs are alive for a path. +1400 /// +1401 /// [`WeakPathHandle`]: crate::path::WeakPathHandle +1402 pub(crate) path_refs: FxHashMap<PathId, usize>, +1403 /// Final path stats for discarded paths. +1404 /// +1405 /// We only insert entries if the discarded path has a non-zero reference count in [`Self::path_refs`]. +1406 /// When the last reference to a path is dropped via [`Self::decrement_path_refs`] its value is cleared. +1407 pub(crate) final_path_stats: FxHashMap<PathId, PathStats>, +1408 pub(crate) path_events: tokio::sync::broadcast::Sender<PathEvent>, +1409 /// Number of live handles that can be used to initiate or handle I/O; excludes the driver +1410 ref_count: usize, +1411 sender: Pin<Box<dyn UdpSender>>, +1412 pub(crate) runtime: Arc<dyn Runtime>, +1413 send_buffer: Vec<u8>, +1414 /// We buffer a transmit when the underlying I/O would block +1415 buffered_transmit: Option<proto::Transmit>, +1416 /// Our last external address reported by the peer. When multipath is enabled, this will be the +1417 /// last report across all paths. +1418 pub(crate) observed_external_addr: watch::Sender<Option<SocketAddr>>, +1419 pub(crate) nat_traversal_updates: tokio::sync::broadcast::Sender<n0_nat_traversal::Event>, +1420 on_closed: Vec<oneshot::Sender<(ConnectionError, ConnectionStats)>>, +1421} +1422 +1423impl State { +1424 #[allow(clippy::too_many_arguments)] +1425 fn new( +1426 inner: proto::Connection, +1427 handle: ConnectionHandle, +1428 endpoint_events: mpsc::UnboundedSender<(ConnectionHandle, EndpointEvent)>, +1429 conn_events: mpsc::UnboundedReceiver<ConnectionEvent>, +1430 on_handshake_data: oneshot::Sender<()>, +1431 on_connected: oneshot::Sender<bool>, +1432 sender: Pin<Box<dyn UdpSender>>, +1433 runtime: Arc<dyn Runtime>, +1434 ) -> Self { +1435 Self { +1436 inner, +1437 driver: None, +1438 handle, +1439 on_handshake_data: Some(on_handshake_data), +1440 on_connected: Some(on_connected), +1441 connected: false, +1442 handshake_confirmed: false, +1443 timer: None, +1444 timer_deadline: None, +1445 conn_events, +1446 endpoint_events, +1447 blocked_writers: FxHashMap::default(), +1448 blocked_readers: FxHashMap::default(), +1449 stopped: FxHashMap::default(), +1450 open_path: FxHashMap::default(), +1451 error: None, +1452 ref_count: 0, +1453 sender, +1454 runtime, +1455 send_buffer: Vec::new(), +1456 buffered_transmit: None, +1457 path_events: tokio::sync::broadcast::channel(32).0, +1458 observed_external_addr: watch::Sender::new(None), +1459 nat_traversal_updates: tokio::sync::broadcast::channel(32).0, +1460 on_closed: Vec::new(), +1461 final_path_stats: Default::default(), +1462 path_refs: Default::default(), +1463 } +1464 } +1465 +1466 fn drive_transmit(&mut self, cx: &mut Context<'_>) -> io::Result<bool> { +1467 let now = self.runtime.now(); +1468 let mut transmits = 0; +1469 +1470 let max_datagrams = self +1471 .sender +1472 .max_transmit_segments() +1473 .min(MAX_TRANSMIT_SEGMENTS); +1474 +1475 loop { +1476 // Retry the last transmit, or get a new one. +1477 let t = match self.buffered_transmit.take() { +1478 Some(t) => t, +1479 None => { +1480 self.send_buffer.clear(); +1481 match self +1482 .inner +1483 .poll_transmit(now, max_datagrams, &mut self.send_buffer) +1484 { +1485 Some(t) => { +1486 transmits += match t.segment_size { +1487 None => 1, +1488 Some(s) => t.size.div_ceil(s), // round up +1489 }; +1490 t +1491 } +1492 None => break, +1493 } +1494 } +1495 }; +1496 +1497 let len = t.size; +1498 match self +1499 .sender +1500 .as_mut() +1501 .poll_send(&udp_transmit(&t, &self.send_buffer[..len]), cx) +1502 { +1503 Poll::Pending => { +1504 self.buffered_transmit = Some(t); +1505 return Ok(false); +1506 } +1507 Poll::Ready(Err(e)) => return Err(e), +1508 Poll::Ready(Ok(())) => {} +1509 } +1510 +1511 if transmits >= MAX_TRANSMIT_DATAGRAMS { +1512 // TODO: What isn't ideal here yet is that if we don't poll all +1513 // datagrams that could be sent we don't go into the `app_limited` +1514 // state and CWND continues to grow until we get here the next time. +1515 // See https://github.com/quinn-rs/quinn/issues/1126 +1516 return Ok(true); +1517 } +1518 } +1519 +1520 Ok(false) +1521 } +1522 +1523 fn forward_endpoint_events(&mut self) { +1524 while let Some(event) = self.inner.poll_endpoint_events() { +1525 // If the endpoint driver is gone, noop. +1526 let _ = self.endpoint_events.send((self.handle, event)); +1527 } +1528 } +1529 +1530 /// If this returns `Err`, the endpoint is dead, so the driver should exit immediately. +1531 fn process_conn_events( +1532 &mut self, +1533 shared: &Shared, +1534 cx: &mut Context<'_>, +1535 ) -> Result<(), ConnectionError> { +1536 loop { +1537 match self.conn_events.poll_recv(cx) { +1538 Poll::Ready(Some(ConnectionEvent::Rebind(sender))) => { +1539 self.sender = sender; +1540 self.inner.handle_network_change(None, self.runtime.now()); +1541 } +1542 Poll::Ready(Some(ConnectionEvent::LocalAddressChanged(hint))) => { +1543 self.inner +1544 .handle_network_change(hint.as_deref().map(|x| x as _), self.runtime.now()); +1545 } +1546 Poll::Ready(Some(ConnectionEvent::Proto(event))) => { +1547 self.inner.handle_event(event); +1548 } +1549 Poll::Ready(Some(ConnectionEvent::Close { reason, error_code })) => { +1550 self.close(error_code, reason, shared); +1551 } +1552 Poll::Ready(None) => { +1553 return Err(ConnectionError::TransportError(TransportError::new( +1554 TransportErrorCode::INTERNAL_ERROR, +1555 "endpoint driver future was dropped".to_string(), +1556 ))); +1557 } +1558 Poll::Pending => { +1559 return Ok(()); +1560 } +1561 } +1562 } +1563 } +1564 +1565 fn forward_app_events(&mut self, shared: &Shared) { +1566 while let Some(event) = self.inner.poll() { +1567 use proto::Event::*; +1568 match event { +1569 HandshakeDataReady => { +1570 if let Some(x) = self.on_handshake_data.take() { +1571 let _ = x.send(()); +1572 } +1573 } +1574 Connected => { +1575 self.connected = true; +1576 if let Some(x) = self.on_connected.take() { +1577 // We don't care if the on-connected future was dropped +1578 let _ = x.send(self.inner.accepted_0rtt()); +1579 } +1580 if self.inner.side().is_client() && !self.inner.accepted_0rtt() { +1581 // Wake up rejected 0-RTT streams so they can fail immediately with +1582 // `ZeroRttRejected` errors. +1583 wake_all(&mut self.blocked_writers); +1584 wake_all(&mut self.blocked_readers); +1585 wake_all_notify(&mut self.stopped); +1586 } +1587 } +1588 HandshakeConfirmed => { +1589 self.handshake_confirmed = true; +1590 shared.handshake_confirmed.notify_waiters(); +1591 } +1592 ConnectionLost { reason } => { +1593 self.terminate(reason, shared); +1594 } +1595 Stream(StreamEvent::Writable { id }) => wake_stream(id, &mut self.blocked_writers), +1596 Stream(StreamEvent::Opened { dir: Dir::Uni }) => { +1597 shared.stream_incoming[Dir::Uni as usize].notify_waiters(); +1598 } +1599 Stream(StreamEvent::Opened { dir: Dir::Bi }) => { +1600 shared.stream_incoming[Dir::Bi as usize].notify_waiters(); +1601 } +1602 DatagramReceived => { +1603 shared.datagram_received.notify_waiters(); +1604 } +1605 DatagramsUnblocked => { +1606 shared.datagrams_unblocked.notify_waiters(); +1607 } +1608 Stream(StreamEvent::Readable { id }) => wake_stream(id, &mut self.blocked_readers), +1609 Stream(StreamEvent::Available { dir }) => { +1610 // Might mean any number of streams are ready, so we wake up everyone +1611 shared.stream_budget_available[dir as usize].notify_waiters(); +1612 } +1613 Stream(StreamEvent::Finished { id }) => wake_stream_notify(id, &mut self.stopped), +1614 Stream(StreamEvent::Stopped { id, .. }) => { +1615 wake_stream_notify(id, &mut self.stopped); +1616 wake_stream(id, &mut self.blocked_writers); +1617 } +1618 Path(ref evt @ PathEvent::ObservedAddr { addr: observed, .. }) => { +1619 self.path_events.send(evt.clone()).ok(); +1620 self.observed_external_addr.send_if_modified(|addr| { +1621 let old = addr.replace(observed); +1622 old != *addr +1623 }); +1624 } +1625 Path(ref evt @ PathEvent::Opened { id }) => { +1626 self.path_events.send(evt.clone()).ok(); +1627 if let Some(sender) = self.open_path.remove(&id) { +1628 sender.send_modify(|value| *value = Ok(())); +1629 } +1630 } +1631 Path(ref evt @ PathEvent::Discarded { id, ref path_stats }) => { +1632 if self.path_refs.contains_key(&id) { +1633 self.final_path_stats.insert(id, *path_stats.clone()); +1634 } +1635 self.path_events.send(evt.clone()).ok(); +1636 } +1637 Path(ref evt @ PathEvent::Abandoned { id, .. }) => { +1638 if let Some(sender) = self.open_path.remove(&id) { +1639 // We don't care for the reason why this path was closed here, because semantically +1640 // all close reasons for a path that has not yet been opened equals to `ValidationFailed`. +1641 // With the noq API, there is no way to application-close a not-yet-opened path, so +1642 // `ApplicationClosed` cannot occur. And all other variants will only occur for paths +1643 // that have already been opened. +1644 // The previous iteration of this code had another event `PathEvent::LocallyClosed` which +1645 // contained a `PathError`, but that was only ever set to `ValidationFailed`. +1646 let error = PathError::ValidationFailed; +1647 sender.send_modify(|value| *value = Err(error)); +1648 } +1649 // this will happen also for already opened paths +1650 self.path_events.send(evt.clone()).ok(); +1651 } +1652 Path(evt @ PathEvent::RemoteStatus { .. }) => { +1653 self.path_events.send(evt).ok(); +1654 } +1655 NatTraversal(update) => { +1656 self.nat_traversal_updates.send(update).ok(); +1657 } +1658 } +1659 } +1660 } +1661 +1662 fn drive_timer(&mut self, cx: &mut Context<'_>) -> bool { +1663 // Check whether we need to (re)set the timer. If so, we must poll again to ensure the +1664 // timer is registered with the runtime (and check whether it's already +1665 // expired). +1666 match self.inner.poll_timeout() { +1667 Some(deadline) => { +1668 if let Some(delay) = &mut self.timer { +1669 // There is no need to reset the tokio timer if the deadline +1670 // did not change +1671 if self +1672 .timer_deadline +1673 .map(|current_deadline| current_deadline != deadline) +1674 .unwrap_or(true) +1675 { +1676 delay.as_mut().reset(deadline); +1677 } +1678 } else { +1679 self.timer = Some(self.runtime.new_timer(deadline)); +1680 } +1681 // Store the actual expiration time of the timer +1682 self.timer_deadline = Some(deadline); +1683 } +1684 None => { +1685 self.timer_deadline = None; +1686 return false; +1687 } +1688 } +1689 +1690 if self.timer_deadline.is_none() { +1691 return false; +1692 } +1693 +1694 let delay = self +1695 .timer +1696 .as_mut() +1697 .expect("timer must exist in this state") +1698 .as_mut(); +1699 if delay.poll(cx).is_pending() { +1700 // Since there wasn't a timeout event, there is nothing new +1701 // for the connection to do +1702 return false; +1703 } +1704 +1705 // A timer expired, so the caller needs to check for +1706 // new transmits, which might cause new timers to be set. +1707 self.inner.handle_timeout(self.runtime.now()); +1708 self.timer_deadline = None; +1709 true +1710 } +1711 +1712 /// Wake up a blocked `Driver` task to process I/O +1713 pub(crate) fn wake(&mut self) { +1714 if let Some(x) = self.driver.take() { +1715 x.wake(); +1716 } +1717 } +1718 +1719 /// Used to wake up all blocked futures when the connection becomes closed for any reason +1720 fn terminate(&mut self, reason: ConnectionError, shared: &Shared) { +1721 self.error = Some(reason.clone()); +1722 if let Some(x) = self.on_handshake_data.take() { +1723 let _ = x.send(()); +1724 } +1725 wake_all(&mut self.blocked_writers); +1726 wake_all(&mut self.blocked_readers); +1727 shared.stream_budget_available[Dir::Uni as usize].notify_waiters(); +1728 shared.stream_budget_available[Dir::Bi as usize].notify_waiters(); +1729 shared.stream_incoming[Dir::Uni as usize].notify_waiters(); +1730 shared.stream_incoming[Dir::Bi as usize].notify_waiters(); +1731 shared.datagram_received.notify_waiters(); +1732 shared.datagrams_unblocked.notify_waiters(); +1733 if let Some(x) = self.on_connected.take() { +1734 let _ = x.send(false); +1735 } +1736 shared.handshake_confirmed.notify_waiters(); +1737 wake_all_notify(&mut self.stopped); +1738 shared.closed.notify_waiters(); +1739 +1740 // Send to the registered on_closed futures. +1741 let stats = self.inner.stats(); +1742 for tx in self.on_closed.drain(..) { +1743 tx.send((reason.clone(), stats.clone())).ok(); +1744 } +1745 } +1746 +1747 fn close(&mut self, error_code: VarInt, reason: Bytes, shared: &Shared) { +1748 self.inner.close(self.runtime.now(), error_code, reason); +1749 self.terminate(ConnectionError::LocallyClosed, shared); +1750 self.wake(); +1751 } +1752 +1753 /// Close for a reason other than the application's explicit request +1754 pub(crate) fn implicit_close(&mut self, shared: &Shared) { +1755 self.close(0u32.into(), Bytes::new(), shared); +1756 } +1757 +1758 pub(crate) fn check_0rtt(&self) -> Result<(), ()> { +1759 if self.inner.is_handshaking() +1760 || self.inner.accepted_0rtt() +1761 || self.inner.side().is_server() +1762 { +1763 Ok(()) +1764 } else { +1765 Err(()) +1766 } +1767 } +1768 +1769 /// Returns [`PathStats`] for a path, if available. +1770 /// +1771 /// This gets the stats from [`proto::Connection`]. If that returns `None` +1772 /// it gets them from `Self::final_path_stats` instead. +1773 pub(crate) fn path_stats(&mut self, path_id: PathId) -> Option<PathStats> { +1774 self.inner +1775 .path_stats(path_id) +1776 .or_else(|| self.final_path_stats.get(&path_id).copied()) +1777 } +1778 +1779 /// Increment the reference counter for a path in this connection. +1780 /// +1781 /// This counts how many [`Path`] or [`WeakPathHandle`] structs exist for a path. +1782 /// Currently this is used to determine whether to store the final stats after a path is +1783 /// abandoned. +1784 /// +1785 /// [`WeakPathHandle`]: crate::path::WeakPathHandle +1786 pub(crate) fn increment_path_refs(&mut self, path_id: PathId) { +1787 *self.path_refs.entry(path_id).or_default() += 1; +1788 } +1789 +1790 /// Decrement the reference counter for a path in this connection. +1791 pub(crate) fn decrement_path_refs(&mut self, path_id: PathId) { +1792 if let Some(refs) = self.path_refs.get_mut(&path_id) { +1793 *refs = refs.saturating_sub(1); +1794 if *refs == 0 { +1795 self.path_refs.remove(&path_id); +1796 self.final_path_stats.remove(&path_id); +1797 } +1798 } +1799 } +1800} +1801 +1802impl Drop for State { +1803 fn drop(&mut self) { +1804 if !self.inner.is_drained() { +1805 // Ensure the endpoint can tidy up +1806 let _ = self +1807 .endpoint_events +1808 .send((self.handle, proto::EndpointEvent::drained())); +1809 } +1810 +1811 if !self.on_closed.is_empty() { +1812 // Ensure that all on_closed oneshot senders are triggered before dropping. +1813 let reason = self.error.as_ref().expect("closed without error reason"); +1814 let stats = self.inner.stats(); +1815 for tx in self.on_closed.drain(..) { +1816 tx.send((reason.clone(), stats.clone())).ok(); +1817 } +1818 } +1819 } +1820} +1821 +1822impl fmt::Debug for State { +1823 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +1824 f.debug_struct("State").field("inner", &self.inner).finish() +1825 } +1826} +1827 +1828fn wake_stream(stream_id: StreamId, wakers: &mut FxHashMap<StreamId, Waker>) { +1829 if let Some(waker) = wakers.remove(&stream_id) { +1830 waker.wake(); +1831 } +1832} +1833 +1834fn wake_all(wakers: &mut FxHashMap<StreamId, Waker>) { +1835 wakers.drain().for_each(|(_, waker)| waker.wake()) +1836} +1837 +1838fn wake_stream_notify(stream_id: StreamId, wakers: &mut FxHashMap<StreamId, Arc<Notify>>) { +1839 if let Some(notify) = wakers.remove(&stream_id) { +1840 notify.notify_waiters() +1841 } +1842} +1843 +1844fn wake_all_notify(wakers: &mut FxHashMap<StreamId, Arc<Notify>>) { +1845 wakers +1846 .drain() +1847 .for_each(|(_, notify)| notify.notify_waiters()) +1848} +1849 +1850/// Errors that can arise when sending a datagram +1851#[derive(Debug, Error, Clone, Eq, PartialEq)] +1852pub enum SendDatagramError { +1853 /// The peer does not support receiving datagram frames +1854 #[error("datagrams not supported by peer")] +1855 UnsupportedByPeer, +1856 /// Datagram support is disabled locally +1857 #[error("datagram support disabled")] +1858 Disabled, +1859 /// The datagram is larger than the connection can currently accommodate +1860 /// +1861 /// Indicates that the path MTU minus overhead or the limit advertised by the peer has been +1862 /// exceeded. +1863 #[error("datagram too large")] +1864 TooLarge, +1865 /// The connection was lost +1866 #[error("connection lost")] +1867 ConnectionLost(#[from] ConnectionError), +1868} +1869 +1870/// The maximum amount of datagrams which will be produced in a single `drive_transmit` call +1871/// +1872/// This limits the amount of CPU resources consumed by datagram generation, +1873/// and allows other tasks (like receiving ACKs) to run in between. +1874const MAX_TRANSMIT_DATAGRAMS: usize = 20; +1875 +1876/// The maximum amount of datagrams that are sent in a single transmit +1877/// +1878/// This can be lower than the maximum platform capabilities, to avoid excessive +1879/// memory allocations when calling `poll_transmit()`. Benchmarks have shown +1880/// that numbers around 10 are a good compromise. +1881const MAX_TRANSMIT_SEGMENTS: NonZeroUsize = NonZeroUsize::new(10).expect("known");

\ No newline at end of file diff --git a/pr/571/docs/src/noq_proto/connection/mod.rs.html b/pr/571/docs/src/noq_proto/connection/mod.rs.html index eb3264548..2d39a8638 100644 --- a/pr/571/docs/src/noq_proto/connection/mod.rs.html +++ b/pr/571/docs/src/noq_proto/connection/mod.rs.html @@ -6883,754 +6883,755 @@ 6883 pub fn add_nat_traversal_address( 6884 &mut self, 6885 address: SocketAddr, -6886 ) -> Result<(), n0_nat_traversal::Error> { -6887 if let Some(added) = self.n0_nat_traversal.add_local_address(address)? { -6888 self.spaces[SpaceId::Data].pending.add_address.insert(added); -6889 }; -6890 Ok(()) -6891 } -6892 -6893 /// Removes an address the endpoing no longer considers reachable for nat traversal -6894 /// -6895 /// Addresses not present in the set will be silently ignored. -6896 pub fn remove_nat_traversal_address( -6897 &mut self, -6898 address: SocketAddr, -6899 ) -> Result<(), n0_nat_traversal::Error> { -6900 if let Some(removed) = self.n0_nat_traversal.remove_local_address(address)? { -6901 self.spaces[SpaceId::Data] -6902 .pending -6903 .remove_address -6904 .insert(removed); -6905 } -6906 Ok(()) -6907 } -6908 -6909 /// Get the current local nat traversal addresses -6910 pub fn get_local_nat_traversal_addresses( -6911 &self, -6912 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6913 self.n0_nat_traversal.get_local_nat_traversal_addresses() -6914 } -6915 -6916 /// Get the currently advertised nat traversal addresses by the server -6917 pub fn get_remote_nat_traversal_addresses( -6918 &self, -6919 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6920 Ok(self -6921 .n0_nat_traversal -6922 .client_side()? -6923 .get_remote_nat_traversal_addresses()) -6924 } -6925 -6926 /// Attempts to open a path for nat traversal. -6927 /// -6928 /// On success returns the [`PathId`] and remote address of the path. -6929 fn open_nat_traversal_path( -6930 &mut self, -6931 now: Instant, -6932 ip_port: (IpAddr, u16), -6933 ) -> Result<Option<(PathId, SocketAddr)>, PathError> { -6934 let remote = ip_port.into(); -6935 // TODO(matheus23): Probe the correct 4-tuple, instead of only a remote address? -6936 // By specifying None for `local_ip`, we do two things: 1. open_path_ensure won't -6937 // generate two paths to the same remote and 2. we let the OS choose which -6938 // interface to use for sending on that path. -6939 let network_path = FourTuple { -6940 remote, -6941 local_ip: None, -6942 }; -6943 match self.open_path_ensure(network_path, PathStatus::Backup, now) { -6944 Ok((path_id, path_was_known)) => { -6945 if path_was_known { -6946 trace!(%path_id, %remote, "nat traversal: path existed for remote, revalidating"); -6947 if let Some(path) = self.paths.get_mut(&path_id) { -6948 path.data.pending_on_path_challenge = true; -6949 } -6950 } -6951 Ok(Some((path_id, remote))) -6952 } -6953 Err(e) => { -6954 debug!(%remote, %e, "nat traversal: failed to probe remote"); -6955 Err(e) -6956 } -6957 } -6958 } -6959 -6960 /// Initiates a new nat traversal round -6961 /// -6962 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` -6963 /// frames, and initiating probing of the known remote addresses. When a new round is -6964 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. -6965 /// -6966 /// Returns the server addresses that are now being probed. -6967 /// If addresses fail due to spurious errors, these might succeed later and not be returned in -6968 /// this set. -6969 pub fn initiate_nat_traversal_round( -6970 &mut self, -6971 now: Instant, -6972 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6973 if self.state.is_closed() { -6974 return Err(n0_nat_traversal::Error::Closed); -6975 } -6976 -6977 let ipv6 = self.is_ipv6(); -6978 let client_state = self.n0_nat_traversal.client_side_mut()?; -6979 let n0_nat_traversal::NatTraversalRound { -6980 new_round, -6981 reach_out_at, -6982 addresses_to_probe, -6983 prev_round_path_ids, -6984 } = client_state.initiate_nat_traversal_round(ipv6)?; -6985 -6986 trace!(%new_round, reach_out=reach_out_at.len(), to_probe=addresses_to_probe.len(), -6987 "initiating nat traversal round"); -6988 -6989 self.spaces[SpaceId::Data].pending.reach_out = Some((new_round, reach_out_at)); -6990 -6991 for path_id in prev_round_path_ids { -6992 let Some(path) = self.path(path_id) else { -6993 continue; -6994 }; -6995 let ip = path.network_path.remote.ip(); -6996 let port = path.network_path.remote.port(); -6997 -6998 // We only close paths that aren't validated (thus are working) that we opened -6999 // in a previous round. -7000 // And we only close paths that we don't want to probe anyways. -7001 if !addresses_to_probe -7002 .iter() -7003 .any(|(_, probe)| *probe == (ip, port)) -7004 && !path.validated -7005 && !self.abandoned_paths.contains(&path_id) -7006 { -7007 trace!(%path_id, "closing path from previous round"); -7008 let _ = -7009 self.close_path_inner(now, path_id, PathAbandonReason::NatTraversalRoundEnded); -7010 } -7011 } -7012 -7013 let mut err = None; -7014 -7015 let mut path_ids = Vec::with_capacity(addresses_to_probe.len()); -7016 let mut probed_addresses = Vec::with_capacity(addresses_to_probe.len()); -7017 -7018 for (id, address) in addresses_to_probe { -7019 match self.open_nat_traversal_path(now, address) { -7020 Ok(None) => {} -7021 Ok(Some((path_id, remote))) => { -7022 path_ids.push(path_id); -7023 probed_addresses.push(remote); -7024 } -7025 Err(e) => { -7026 self.n0_nat_traversal -7027 .client_side_mut() -7028 .expect("validated") -7029 .report_in_continuation(id, e); -7030 err.get_or_insert(e); -7031 } -7032 } -7033 } -7034 -7035 if let Some(err) = err { -7036 // We failed to probe any addresses, bail out -7037 if probed_addresses.is_empty() { -7038 return Err(n0_nat_traversal::Error::Multipath(err)); -7039 } -7040 } -7041 -7042 self.n0_nat_traversal -7043 .client_side_mut() -7044 .expect("connection side validated") -7045 .set_round_path_ids(path_ids); -7046 -7047 Ok(probed_addresses) -7048 } -7049 -7050 /// Attempts to continue a nat traversal round by trying to open paths for pending client probes. -7051 /// -7052 /// If there was nothing to do, it returns `None`. Otherwise it returns whether the path was -7053 /// successfully open. -7054 fn continue_nat_traversal_round(&mut self, now: Instant) -> Option<bool> { -7055 let ipv6 = self.is_ipv6(); -7056 let client_state = self.n0_nat_traversal.client_side_mut().ok()?; -7057 let (id, address) = client_state.continue_nat_traversal_round(ipv6)?; -7058 let open_result = self.open_nat_traversal_path(now, address); -7059 let client_state = self.n0_nat_traversal.client_side_mut().expect("validated"); -7060 match open_result { -7061 Ok(None) => Some(true), -7062 Ok(Some((path_id, _remote))) => { -7063 client_state.add_round_path_id(path_id); -7064 Some(true) -7065 } -7066 Err(e) => { -7067 client_state.report_in_continuation(id, e); -7068 Some(false) -7069 } -7070 } -7071 } -7072} -7073 -7074impl fmt::Debug for Connection { -7075 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -7076 f.debug_struct("Connection") -7077 .field("handshake_cid", &self.handshake_cid) -7078 .finish() -7079 } -7080} -7081 -7082/// Hints when the caller identifies a network change. -7083pub trait NetworkChangeHint: std::fmt::Debug + 'static { -7084 /// Inform the connection if a path may recover after a network change. -7085 /// -7086 /// After network changes, paths may not be recoverable. In this case, waiting for the path to -7087 /// become idle may take longer than what is desirable. If [`Self::is_path_recoverable`] -7088 /// returns `false`, a multipath-enabled, client-side connection will establish a new path to -7089 /// the same remote, closing the current one, instead of migrating the path. -7090 /// -7091 /// Paths that are deemed recoverable will simply be sent a PING for a liveness check. -7092 fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool; -7093} -7094 -7095/// Return value for [`Connection::poll_transmit_on_path`]. -7096#[derive(Debug)] -7097enum PollPathStatus { -7098 /// Nothing to send on the path, nothing was written into the [`TransmitBuf`]. -7099 NothingToSend { -7100 /// If true there was data to send but congestion control did not allow so. -7101 congestion_blocked: bool, -7102 }, -7103 /// The transmit is ready to be sent. -7104 Send(Transmit), -7105} -7106 -7107/// Return value for [`Connection::poll_transmit_path_space`]. -7108#[derive(Debug)] -7109enum PollPathSpaceStatus { -7110 /// Nothing to send in the space, nothing was written into the [`TransmitBuf`]. -7111 NothingToSend { -7112 /// If true there was data to send but congestion control did not allow so. -7113 congestion_blocked: bool, -7114 }, -7115 /// One or more packets have been written into the [`TransmitBuf`]. -7116 WrotePacket { -7117 /// The highest packet number. -7118 last_packet_number: u64, -7119 /// Whether to pad an already started datagram in the next packet. -7120 /// -7121 /// When packets in Initial, 0-RTT or Handshake packet do not fill the entire -7122 /// datagram they may decide to coalesce with the next packet from a higher -7123 /// encryption level on the same path. But the earlier packet may require specific -7124 /// size requirements for the datagram they are sent in. -7125 /// -7126 /// If a space did not complete the datagram, they use this to request the correct -7127 /// padding in the final packet of the datagram so that the final datagram will have -7128 /// the correct size. -7129 /// -7130 /// If a space did fill an entire datagram, it leaves this to the default of -7131 /// [`PadDatagram::No`]. -7132 pad_datagram: PadDatagram, -7133 }, -7134 /// Send the contents of the transmit immediately. -7135 /// -7136 /// Packets were written and the GSO batch must end now, regardless from whether higher -7137 /// spaces still have frames to write. This is used when the last datagram written would -7138 /// require too much padding to continue a GSO batch, which would waste space on the -7139 /// wire. -7140 Send { -7141 /// The highest packet number written into the transmit. -7142 last_packet_number: u64, -7143 }, -7144} -7145 -7146/// Information used to decide what frames to schedule into which packets. -7147/// -7148/// Primarily used by [`Connection::poll_transmit_on_path`] and the functions that help -7149/// building packets for it: [`Connection::poll_transmit_path_space`] and -7150/// [`Connection::populate_packet`]. -7151#[derive(Debug, Copy, Clone)] -7152struct PathSchedulingInfo { -7153 /// Whether the path is abandoned. -7154 /// -7155 /// Note that a path that is abandoned but still has CIDs can still send a packet. After -7156 /// sending that packet the CIDs issued by the remote have to be considered retired as -7157 /// well. -7158 is_abandoned: bool, -7159 /// Whether the path may send [`SpaceKind::Data`] frames. -7160 /// -7161 /// Some paths should only send frames from [`SendableFrames::space_specific`]. All other -7162 /// frames are essentially frames that can be sent on any [`SpaceKind::Data`] space. For -7163 /// those we want to respect packet scheduling rules however. -7164 /// -7165 /// Roughly speaking data frames are only sent on spaces that have CIDs, are not -7166 /// abandoned and have no *better* spaces. However see to comments where this is -7167 /// populated for the exact packet scheduling implementation. -7168 /// -7169 /// This essentially marks this paths as the best validated space ID. Except during -7170 /// the handshake in which case it does not need to be validated. Several paths could be -7171 /// equally good and all have this set to `true`, in that case packet scheduling can -7172 /// choose which path to use. Currently it chooses the lowest path that is not -7173 /// congestion blocked. -7174 /// -7175 /// Note that once in the closed or draining states this will never be true. -7176 may_send_data: bool, -7177 /// Whether the path may send a CONNECTION_CLOSE frame. -7178 /// -7179 /// This essentially marks this path as the best validated space ID with a fallback -7180 /// to unvalidated spaces if there are no validated spaces. Like for -7181 /// [`Self::may_send_data`] other paths could be equally good. -7182 may_send_close: bool, -7183 may_self_abandon: bool, -7184} -7185 -7186#[derive(Debug, Copy, Clone, PartialEq, Eq)] -7187enum PathBlocked { -7188 No, -7189 AntiAmplification, -7190 Congestion, -7191 Pacing, -7192} -7193 -7194/// Fields of `Connection` specific to it being client-side or server-side -7195enum ConnectionSide { -7196 Client { -7197 /// Sent in every outgoing Initial packet. Always empty after Initial keys are discarded -7198 token: Bytes, -7199 token_store: Arc<dyn TokenStore>, -7200 server_name: String, -7201 }, -7202 Server { -7203 server_config: Arc<ServerConfig>, -7204 }, -7205} -7206 -7207impl ConnectionSide { -7208 fn remote_may_migrate(&self, state: &State) -> bool { -7209 match self { -7210 Self::Server { server_config } => server_config.migration, -7211 Self::Client { .. } => { -7212 if let Some(hs) = state.as_handshake() { -7213 hs.allow_server_migration -7214 } else { -7215 false -7216 } -7217 } -7218 } -7219 } -7220 -7221 fn is_client(&self) -> bool { -7222 self.side().is_client() -7223 } -7224 -7225 fn is_server(&self) -> bool { -7226 self.side().is_server() -7227 } -7228 -7229 fn side(&self) -> Side { -7230 match *self { -7231 Self::Client { .. } => Side::Client, -7232 Self::Server { .. } => Side::Server, -7233 } -7234 } -7235} -7236 -7237impl From<SideArgs> for ConnectionSide { -7238 fn from(side: SideArgs) -> Self { -7239 match side { -7240 SideArgs::Client { -7241 token_store, -7242 server_name, -7243 } => Self::Client { -7244 token: token_store.take(&server_name).unwrap_or_default(), -7245 token_store, -7246 server_name, -7247 }, -7248 SideArgs::Server { -7249 server_config, -7250 pref_addr_cid: _, -7251 path_validated: _, -7252 } => Self::Server { server_config }, -7253 } -7254 } -7255} -7256 -7257/// Parameters to `Connection::new` specific to it being client-side or server-side -7258pub(crate) enum SideArgs { -7259 Client { -7260 token_store: Arc<dyn TokenStore>, -7261 server_name: String, -7262 }, -7263 Server { -7264 server_config: Arc<ServerConfig>, -7265 pref_addr_cid: Option<ConnectionId>, -7266 path_validated: bool, -7267 }, -7268} -7269 -7270impl SideArgs { -7271 pub(crate) fn pref_addr_cid(&self) -> Option<ConnectionId> { -7272 match *self { -7273 Self::Client { .. } => None, -7274 Self::Server { pref_addr_cid, .. } => pref_addr_cid, -7275 } -7276 } -7277 -7278 pub(crate) fn path_validated(&self) -> bool { -7279 match *self { -7280 Self::Client { .. } => true, -7281 Self::Server { path_validated, .. } => path_validated, -7282 } -7283 } -7284 -7285 pub(crate) fn side(&self) -> Side { -7286 match *self { -7287 Self::Client { .. } => Side::Client, -7288 Self::Server { .. } => Side::Server, -7289 } -7290 } -7291} -7292 -7293/// Reasons why a connection might be lost -7294#[derive(Debug, Error, Clone, PartialEq, Eq)] -7295pub enum ConnectionError { -7296 /// The peer doesn't implement any supported version -7297 #[error("peer doesn't implement any supported version")] -7298 VersionMismatch, -7299 /// The peer violated the QUIC specification as understood by this implementation -7300 #[error(transparent)] -7301 TransportError(#[from] TransportError), -7302 /// The peer's QUIC stack aborted the connection automatically -7303 #[error("aborted by peer: {0}")] -7304 ConnectionClosed(frame::ConnectionClose), -7305 /// The peer closed the connection -7306 #[error("closed by peer: {0}")] -7307 ApplicationClosed(frame::ApplicationClose), -7308 /// The peer is unable to continue processing this connection, usually due to having restarted -7309 #[error("reset by peer")] -7310 Reset, -7311 /// Communication with the peer has lapsed for longer than the negotiated idle timeout -7312 /// -7313 /// If neither side is sending keep-alives, a connection will time out after a long enough idle -7314 /// period even if the peer is still reachable. See also [`TransportConfig::max_idle_timeout()`] -7315 /// and [`TransportConfig::keep_alive_interval()`]. -7316 #[error("timed out")] -7317 TimedOut, -7318 /// The local application closed the connection -7319 #[error("closed")] -7320 LocallyClosed, -7321 /// The connection could not be created because not enough of the CID space is available -7322 /// -7323 /// Try using longer connection IDs. -7324 #[error("CIDs exhausted")] -7325 CidsExhausted, -7326} -7327 -7328impl From<Close> for ConnectionError { -7329 fn from(x: Close) -> Self { -7330 match x { -7331 Close::Connection(reason) => Self::ConnectionClosed(reason), -7332 Close::Application(reason) => Self::ApplicationClosed(reason), -7333 } -7334 } -7335} -7336 -7337// For compatibility with API consumers -7338impl From<ConnectionError> for io::Error { -7339 fn from(x: ConnectionError) -> Self { -7340 use ConnectionError::*; -7341 let kind = match x { -7342 TimedOut => io::ErrorKind::TimedOut, -7343 Reset => io::ErrorKind::ConnectionReset, -7344 ApplicationClosed(_) | ConnectionClosed(_) => io::ErrorKind::ConnectionAborted, -7345 TransportError(_) | VersionMismatch | LocallyClosed | CidsExhausted => { -7346 io::ErrorKind::Other -7347 } -7348 }; -7349 Self::new(kind, x) -7350 } -7351} -7352 -7353/// Errors that might trigger a path being closed -7354// TODO(@divma): maybe needs to be reworked based on what we want to do with the public API -7355#[derive(Debug, Error, PartialEq, Eq, Clone, Copy)] -7356pub enum PathError { -7357 /// The extension was not negotiated with the peer -7358 #[error("multipath extension not negotiated")] -7359 MultipathNotNegotiated, -7360 /// Paths can only be opened client-side -7361 #[error("the server side may not open a path")] -7362 ServerSideNotAllowed, -7363 /// Current limits do not allow us to open more paths -7364 #[error("maximum number of concurrent paths reached")] -7365 MaxPathIdReached, -7366 /// No remote CIDs available to open a new path -7367 #[error("remoted CIDs exhausted")] -7368 RemoteCidsExhausted, -7369 /// Path could not be validated and will be abandoned -7370 #[error("path validation failed")] -7371 ValidationFailed, -7372 /// The remote address for the path is not supported by the endpoint -7373 #[error("invalid remote address")] -7374 InvalidRemoteAddress(SocketAddr), -7375} -7376 -7377/// Errors triggered when abandoning a path -7378#[derive(Debug, Error, Clone, Eq, PartialEq)] -7379pub enum ClosePathError { -7380 /// Multipath is not negotiated -7381 #[error("Multipath extension not negotiated")] -7382 MultipathNotNegotiated, -7383 /// The path is already closed or was never opened -7384 #[error("closed path")] -7385 ClosedPath, -7386 /// Cannot close the last remaining open path via the local API. -7387 /// -7388 /// Use [`Connection::close`] to end the connection instead. -7389 #[error("last open path")] -7390 LastOpenPath, -7391} -7392 -7393/// Error when the multipath extension was not negotiated, but attempted to be used. -7394#[derive(Debug, Error, Clone, Copy)] -7395#[error("Multipath extension not negotiated")] -7396pub struct MultipathNotNegotiated { -7397 _private: (), -7398} -7399 -7400/// Events of interest to the application -7401#[derive(Debug)] -7402pub enum Event { -7403 /// The connection's handshake data is ready -7404 HandshakeDataReady, -7405 /// The connection was successfully established -7406 Connected, -7407 /// The TLS handshake was confirmed -7408 HandshakeConfirmed, -7409 /// The connection was lost -7410 /// -7411 /// Emitted if the peer closes the connection or an error is encountered. -7412 ConnectionLost { -7413 /// Reason that the connection was closed -7414 reason: ConnectionError, -7415 }, -7416 /// Stream events -7417 Stream(StreamEvent), -7418 /// One or more application datagrams have been received -7419 DatagramReceived, -7420 /// One or more application datagrams have been sent after blocking -7421 DatagramsUnblocked, -7422 /// (Multi)Path events -7423 Path(PathEvent), -7424 /// n0's nat traversal events -7425 NatTraversal(n0_nat_traversal::Event), -7426} -7427 -7428impl From<PathEvent> for Event { -7429 fn from(source: PathEvent) -> Self { -7430 Self::Path(source) -7431 } -7432} -7433 -7434fn get_max_ack_delay(params: &TransportParameters) -> Duration { -7435 Duration::from_micros(params.max_ack_delay.0 * 1000) -7436} -7437 -7438/// Prevents overflow and improves behavior in extreme circumstances. -7439const MAX_BACKOFF_EXPONENT: u32 = 16; -7440 -7441/// The max interval between successive tail-loss probes. -7442/// -7443/// This is the "normal" value we use. -7444const MAX_PTO_INTERVAL: Duration = Duration::from_secs(2); -7445 -7446/// The idle time, below which we use the shorter [`MAX_PTO_FAST_INTERVAL`]. -7447const MIN_IDLE_FOR_FAST_PTO: Duration = Duration::from_secs(25); -7448 -7449/// The max interval between successive tail-loss probes with short idle times. -7450/// -7451/// If the path or connection idle time is less than [`MIN_IDLE_FOR_FAST_PTO`] then we use -7452/// this value to ensure we have plenty of retransmits before we reach the idle time. -7453const MAX_PTO_FAST_INTERVAL: Duration = Duration::from_secs(1); -7454 -7455/// The RTT threshold above which we cap the PTO interval to 1.5 * smoothed_rtt -7456/// -7457/// This is RTT time above which 1.5 * RTT > [`MAX_PTO_INTERVAL`], for these links we want -7458/// to extend the interval between tail-loss probes to not fill the entire pipe with them. -7459const SLOW_RTT_THRESHOLD: Duration = -7460 Duration::from_millis((MAX_PTO_INTERVAL.as_millis() as u64 * 2) / 3); -7461 -7462/// Minimal remaining size to allow packet coalescing, excluding cryptographic tag -7463/// -7464/// This must be at least as large as the header for a well-formed empty packet to be coalesced, -7465/// plus some space for frames. We only care about handshake headers because short header packets -7466/// necessarily have smaller headers, and initial packets are only ever the first packet in a -7467/// datagram (because we coalesce in ascending packet space order and the only reason to split a -7468/// packet is when packet space changes). -7469const MIN_PACKET_SPACE: usize = MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE + 32; -7470 -7471/// Largest amount of space that could be occupied by a Handshake or 0-RTT packet's header -7472/// -7473/// Excludes packet-type-specific fields such as packet number or Initial token -7474// https://www.rfc-editor.org/rfc/rfc9000.html#name-0-rtt: flags + version + dcid len + dcid + -7475// scid len + scid + length + pn -7476const MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE: usize = -7477 1 + 4 + 1 + MAX_CID_SIZE + 1 + MAX_CID_SIZE + VarInt::from_u32(u16::MAX as u32).size() + 4; -7478 -7479#[derive(Default)] -7480struct SentFrames { -7481 retransmits: ThinRetransmits, -7482 /// The packet number of the largest acknowledged packet for each path -7483 largest_acked: FxHashMap<PathId, u64>, -7484 stream_frames: StreamMetaVec, -7485 /// Whether the packet contains non-retransmittable frames (like datagrams) -7486 non_retransmits: bool, -7487 /// If the datagram containing these frames should be padded to the min MTU -7488 requires_padding: bool, -7489} -7490 -7491impl SentFrames { -7492 /// Returns whether the packet contains only ACKs -7493 fn is_ack_only(&self, streams: &StreamsState) -> bool { -7494 !self.largest_acked.is_empty() -7495 && !self.non_retransmits -7496 && self.stream_frames.is_empty() -7497 && self.retransmits.is_empty(streams) -7498 } -7499 -7500 fn retransmits_mut(&mut self) -> &mut Retransmits { -7501 self.retransmits.get_or_create() -7502 } -7503 -7504 fn record_sent_frame(&mut self, frame: frame::EncodableFrame<'_>) { -7505 use frame::EncodableFrame::*; -7506 match frame { -7507 PathAck(path_ack_encoder) => { -7508 if let Some(max) = path_ack_encoder.ranges.max() { -7509 self.largest_acked.insert(path_ack_encoder.path_id, max); -7510 } -7511 } -7512 Ack(ack_encoder) => { -7513 if let Some(max) = ack_encoder.ranges.max() { -7514 self.largest_acked.insert(PathId::ZERO, max); -7515 } -7516 } -7517 Close(_) => { /* non retransmittable, but after this we don't really care */ } -7518 PathResponse(_) => self.non_retransmits = true, -7519 HandshakeDone(_) => self.retransmits_mut().handshake_done = true, -7520 ReachOut(frame::ReachOut { round, ip, port }) => { -7521 let (recorded_round, reach_outs) = self -7522 .retransmits_mut() -7523 .reach_out -7524 .get_or_insert_with(|| (round, FxIndexSet::default())); -7525 // Only record reach outs for the current round or a newer than the recorded one. -7526 if *recorded_round == round { -7527 // Same round, simply append. -7528 reach_outs.insert((ip, port)); -7529 } else if *recorded_round < round { -7530 // New round. -7531 *recorded_round = round; -7532 reach_outs.clear(); -7533 reach_outs.insert((ip, port)); -7534 } else { -7535 // ignore old reach out that was sent -7536 } -7537 } -7538 -7539 ObservedAddr(_) => self.retransmits_mut().observed_addr = true, -7540 Ping(_) => self.non_retransmits = true, -7541 ImmediateAck(_) => self.non_retransmits = true, -7542 AckFrequency(_) => self.retransmits_mut().ack_frequency = true, -7543 PathChallenge(_) => self.non_retransmits = true, -7544 Crypto(crypto) => self.retransmits_mut().crypto.push_back(crypto), -7545 PathAbandon(path_abandon) => { -7546 self.retransmits_mut() -7547 .path_abandon -7548 .entry(path_abandon.path_id) -7549 .or_insert(path_abandon.error_code); -7550 } -7551 PathStatusAvailable(frame::PathStatusAvailable { path_id, .. }) -7552 | PathStatusBackup(frame::PathStatusBackup { path_id, .. }) => { -7553 self.retransmits_mut().path_status.insert(path_id); -7554 } -7555 MaxPathId(_) => self.retransmits_mut().max_path_id = true, -7556 PathsBlocked(_) => self.retransmits_mut().paths_blocked = true, -7557 PathCidsBlocked(path_cids_blocked) => { -7558 self.retransmits_mut() -7559 .path_cids_blocked -7560 .insert(path_cids_blocked.path_id); -7561 } -7562 ResetStream(reset) => self -7563 .retransmits_mut() -7564 .reset_stream -7565 .push((reset.id, reset.error_code)), -7566 StopSending(stop_sending) => self.retransmits_mut().stop_sending.push(stop_sending), -7567 NewConnectionId(new_cid) => self.retransmits_mut().new_cids.push(new_cid.issued()), -7568 RetireConnectionId(retire_cid) => self -7569 .retransmits_mut() -7570 .retire_cids -7571 .push((retire_cid.path_id.unwrap_or_default(), retire_cid.sequence)), -7572 Datagram(_) => self.non_retransmits = true, -7573 NewToken(_) => {} -7574 AddAddress(add_address) => { -7575 self.retransmits_mut().add_address.insert(add_address); -7576 } -7577 RemoveAddress(remove_address) => { -7578 self.retransmits_mut().remove_address.insert(remove_address); -7579 } -7580 StreamMeta(stream_meta_encoder) => self.stream_frames.push(stream_meta_encoder.meta), -7581 MaxData(_) => self.retransmits_mut().max_data = true, -7582 MaxStreamData(max) => { -7583 self.retransmits_mut().max_stream_data.insert(max.id); -7584 } -7585 MaxStreams(max_streams) => { -7586 self.retransmits_mut().max_stream_id[max_streams.dir as usize] = true -7587 } -7588 } -7589 } -7590} -7591 -7592/// Compute the negotiated idle timeout based on local and remote max_idle_timeout transport parameters. -7593/// -7594/// According to the definition of max_idle_timeout, a value of `0` means the timeout is disabled; see <https://www.rfc-editor.org/rfc/rfc9000#section-18.2-4.4.1.> -7595/// -7596/// According to the negotiation procedure, either the minimum of the timeouts or one specified is used as the negotiated value; see <https://www.rfc-editor.org/rfc/rfc9000#section-10.1-2.> -7597/// -7598/// Returns the negotiated idle timeout as a `Duration`, or `None` when both endpoints have opted out of idle timeout. -7599fn negotiate_max_idle_timeout(x: Option<VarInt>, y: Option<VarInt>) -> Option<Duration> { -7600 match (x, y) { -7601 (Some(VarInt(0)) | None, Some(VarInt(0)) | None) => None, -7602 (Some(VarInt(0)) | None, Some(y)) => Some(Duration::from_millis(y.0)), -7603 (Some(x), Some(VarInt(0)) | None) => Some(Duration::from_millis(x.0)), -7604 (Some(x), Some(y)) => Some(Duration::from_millis(cmp::min(x, y).0)), -7605 } -7606} -7607 -7608#[cfg(test)] -7609mod tests { -7610 use super::*; -7611 -7612 #[test] -7613 fn negotiate_max_idle_timeout_commutative() { -7614 let test_params = [ -7615 (None, None, None), -7616 (None, Some(VarInt(0)), None), -7617 (None, Some(VarInt(2)), Some(Duration::from_millis(2))), -7618 (Some(VarInt(0)), Some(VarInt(0)), None), -7619 ( -7620 Some(VarInt(2)), -7621 Some(VarInt(0)), -7622 Some(Duration::from_millis(2)), -7623 ), -7624 ( -7625 Some(VarInt(1)), -7626 Some(VarInt(4)), -7627 Some(Duration::from_millis(1)), -7628 ), -7629 ]; -7630 -7631 for (left, right, result) in test_params { -7632 assert_eq!(negotiate_max_idle_timeout(left, right), result); -7633 assert_eq!(negotiate_max_idle_timeout(right, left), result); -7634 } -7635 } -7636}

\ No newline at end of file +6886 priority: u8, +6887 ) -> Result<(), n0_nat_traversal::Error> { +6888 if let Some(added) = self.n0_nat_traversal.add_local_address(address, priority)? { +6889 self.spaces[SpaceId::Data].pending.add_address.insert(added); +6890 }; +6891 Ok(()) +6892 } +6893 +6894 /// Removes an address the endpoing no longer considers reachable for nat traversal +6895 /// +6896 /// Addresses not present in the set will be silently ignored. +6897 pub fn remove_nat_traversal_address( +6898 &mut self, +6899 address: SocketAddr, +6900 ) -> Result<(), n0_nat_traversal::Error> { +6901 if let Some(removed) = self.n0_nat_traversal.remove_local_address(address)? { +6902 self.spaces[SpaceId::Data] +6903 .pending +6904 .remove_address +6905 .insert(removed); +6906 } +6907 Ok(()) +6908 } +6909 +6910 /// Get the current local nat traversal addresses +6911 pub fn get_local_nat_traversal_addresses( +6912 &self, +6913 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6914 self.n0_nat_traversal.get_local_nat_traversal_addresses() +6915 } +6916 +6917 /// Get the currently advertised nat traversal addresses by the server +6918 pub fn get_remote_nat_traversal_addresses( +6919 &self, +6920 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6921 Ok(self +6922 .n0_nat_traversal +6923 .client_side()? +6924 .get_remote_nat_traversal_addresses()) +6925 } +6926 +6927 /// Attempts to open a path for nat traversal. +6928 /// +6929 /// On success returns the [`PathId`] and remote address of the path. +6930 fn open_nat_traversal_path( +6931 &mut self, +6932 now: Instant, +6933 ip_port: (IpAddr, u16), +6934 ) -> Result<Option<(PathId, SocketAddr)>, PathError> { +6935 let remote = ip_port.into(); +6936 // TODO(matheus23): Probe the correct 4-tuple, instead of only a remote address? +6937 // By specifying None for `local_ip`, we do two things: 1. open_path_ensure won't +6938 // generate two paths to the same remote and 2. we let the OS choose which +6939 // interface to use for sending on that path. +6940 let network_path = FourTuple { +6941 remote, +6942 local_ip: None, +6943 }; +6944 match self.open_path_ensure(network_path, PathStatus::Backup, now) { +6945 Ok((path_id, path_was_known)) => { +6946 if path_was_known { +6947 trace!(%path_id, %remote, "nat traversal: path existed for remote, revalidating"); +6948 if let Some(path) = self.paths.get_mut(&path_id) { +6949 path.data.pending_on_path_challenge = true; +6950 } +6951 } +6952 Ok(Some((path_id, remote))) +6953 } +6954 Err(e) => { +6955 debug!(%remote, %e, "nat traversal: failed to probe remote"); +6956 Err(e) +6957 } +6958 } +6959 } +6960 +6961 /// Initiates a new nat traversal round +6962 /// +6963 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` +6964 /// frames, and initiating probing of the known remote addresses. When a new round is +6965 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. +6966 /// +6967 /// Returns the server addresses that are now being probed. +6968 /// If addresses fail due to spurious errors, these might succeed later and not be returned in +6969 /// this set. +6970 pub fn initiate_nat_traversal_round( +6971 &mut self, +6972 now: Instant, +6973 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6974 if self.state.is_closed() { +6975 return Err(n0_nat_traversal::Error::Closed); +6976 } +6977 +6978 let ipv6 = self.is_ipv6(); +6979 let client_state = self.n0_nat_traversal.client_side_mut()?; +6980 let n0_nat_traversal::NatTraversalRound { +6981 new_round, +6982 reach_out_at, +6983 addresses_to_probe, +6984 prev_round_path_ids, +6985 } = client_state.initiate_nat_traversal_round(ipv6)?; +6986 +6987 trace!(%new_round, reach_out=reach_out_at.len(), to_probe=addresses_to_probe.len(), +6988 "initiating nat traversal round"); +6989 +6990 self.spaces[SpaceId::Data].pending.reach_out = Some((new_round, reach_out_at)); +6991 +6992 for path_id in prev_round_path_ids { +6993 let Some(path) = self.path(path_id) else { +6994 continue; +6995 }; +6996 let ip = path.network_path.remote.ip(); +6997 let port = path.network_path.remote.port(); +6998 +6999 // We only close paths that aren't validated (thus are working) that we opened +7000 // in a previous round. +7001 // And we only close paths that we don't want to probe anyways. +7002 if !addresses_to_probe +7003 .iter() +7004 .any(|(_, probe)| *probe == (ip, port)) +7005 && !path.validated +7006 && !self.abandoned_paths.contains(&path_id) +7007 { +7008 trace!(%path_id, "closing path from previous round"); +7009 let _ = +7010 self.close_path_inner(now, path_id, PathAbandonReason::NatTraversalRoundEnded); +7011 } +7012 } +7013 +7014 let mut err = None; +7015 +7016 let mut path_ids = Vec::with_capacity(addresses_to_probe.len()); +7017 let mut probed_addresses = Vec::with_capacity(addresses_to_probe.len()); +7018 +7019 for (id, address) in addresses_to_probe { +7020 match self.open_nat_traversal_path(now, address) { +7021 Ok(None) => {} +7022 Ok(Some((path_id, remote))) => { +7023 path_ids.push(path_id); +7024 probed_addresses.push(remote); +7025 } +7026 Err(e) => { +7027 self.n0_nat_traversal +7028 .client_side_mut() +7029 .expect("validated") +7030 .report_in_continuation(id, e); +7031 err.get_or_insert(e); +7032 } +7033 } +7034 } +7035 +7036 if let Some(err) = err { +7037 // We failed to probe any addresses, bail out +7038 if probed_addresses.is_empty() { +7039 return Err(n0_nat_traversal::Error::Multipath(err)); +7040 } +7041 } +7042 +7043 self.n0_nat_traversal +7044 .client_side_mut() +7045 .expect("connection side validated") +7046 .set_round_path_ids(path_ids); +7047 +7048 Ok(probed_addresses) +7049 } +7050 +7051 /// Attempts to continue a nat traversal round by trying to open paths for pending client probes. +7052 /// +7053 /// If there was nothing to do, it returns `None`. Otherwise it returns whether the path was +7054 /// successfully open. +7055 fn continue_nat_traversal_round(&mut self, now: Instant) -> Option<bool> { +7056 let ipv6 = self.is_ipv6(); +7057 let client_state = self.n0_nat_traversal.client_side_mut().ok()?; +7058 let (id, address) = client_state.continue_nat_traversal_round(ipv6)?; +7059 let open_result = self.open_nat_traversal_path(now, address); +7060 let client_state = self.n0_nat_traversal.client_side_mut().expect("validated"); +7061 match open_result { +7062 Ok(None) => Some(true), +7063 Ok(Some((path_id, _remote))) => { +7064 client_state.add_round_path_id(path_id); +7065 Some(true) +7066 } +7067 Err(e) => { +7068 client_state.report_in_continuation(id, e); +7069 Some(false) +7070 } +7071 } +7072 } +7073} +7074 +7075impl fmt::Debug for Connection { +7076 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +7077 f.debug_struct("Connection") +7078 .field("handshake_cid", &self.handshake_cid) +7079 .finish() +7080 } +7081} +7082 +7083/// Hints when the caller identifies a network change. +7084pub trait NetworkChangeHint: std::fmt::Debug + 'static { +7085 /// Inform the connection if a path may recover after a network change. +7086 /// +7087 /// After network changes, paths may not be recoverable. In this case, waiting for the path to +7088 /// become idle may take longer than what is desirable. If [`Self::is_path_recoverable`] +7089 /// returns `false`, a multipath-enabled, client-side connection will establish a new path to +7090 /// the same remote, closing the current one, instead of migrating the path. +7091 /// +7092 /// Paths that are deemed recoverable will simply be sent a PING for a liveness check. +7093 fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool; +7094} +7095 +7096/// Return value for [`Connection::poll_transmit_on_path`]. +7097#[derive(Debug)] +7098enum PollPathStatus { +7099 /// Nothing to send on the path, nothing was written into the [`TransmitBuf`]. +7100 NothingToSend { +7101 /// If true there was data to send but congestion control did not allow so. +7102 congestion_blocked: bool, +7103 }, +7104 /// The transmit is ready to be sent. +7105 Send(Transmit), +7106} +7107 +7108/// Return value for [`Connection::poll_transmit_path_space`]. +7109#[derive(Debug)] +7110enum PollPathSpaceStatus { +7111 /// Nothing to send in the space, nothing was written into the [`TransmitBuf`]. +7112 NothingToSend { +7113 /// If true there was data to send but congestion control did not allow so. +7114 congestion_blocked: bool, +7115 }, +7116 /// One or more packets have been written into the [`TransmitBuf`]. +7117 WrotePacket { +7118 /// The highest packet number. +7119 last_packet_number: u64, +7120 /// Whether to pad an already started datagram in the next packet. +7121 /// +7122 /// When packets in Initial, 0-RTT or Handshake packet do not fill the entire +7123 /// datagram they may decide to coalesce with the next packet from a higher +7124 /// encryption level on the same path. But the earlier packet may require specific +7125 /// size requirements for the datagram they are sent in. +7126 /// +7127 /// If a space did not complete the datagram, they use this to request the correct +7128 /// padding in the final packet of the datagram so that the final datagram will have +7129 /// the correct size. +7130 /// +7131 /// If a space did fill an entire datagram, it leaves this to the default of +7132 /// [`PadDatagram::No`]. +7133 pad_datagram: PadDatagram, +7134 }, +7135 /// Send the contents of the transmit immediately. +7136 /// +7137 /// Packets were written and the GSO batch must end now, regardless from whether higher +7138 /// spaces still have frames to write. This is used when the last datagram written would +7139 /// require too much padding to continue a GSO batch, which would waste space on the +7140 /// wire. +7141 Send { +7142 /// The highest packet number written into the transmit. +7143 last_packet_number: u64, +7144 }, +7145} +7146 +7147/// Information used to decide what frames to schedule into which packets. +7148/// +7149/// Primarily used by [`Connection::poll_transmit_on_path`] and the functions that help +7150/// building packets for it: [`Connection::poll_transmit_path_space`] and +7151/// [`Connection::populate_packet`]. +7152#[derive(Debug, Copy, Clone)] +7153struct PathSchedulingInfo { +7154 /// Whether the path is abandoned. +7155 /// +7156 /// Note that a path that is abandoned but still has CIDs can still send a packet. After +7157 /// sending that packet the CIDs issued by the remote have to be considered retired as +7158 /// well. +7159 is_abandoned: bool, +7160 /// Whether the path may send [`SpaceKind::Data`] frames. +7161 /// +7162 /// Some paths should only send frames from [`SendableFrames::space_specific`]. All other +7163 /// frames are essentially frames that can be sent on any [`SpaceKind::Data`] space. For +7164 /// those we want to respect packet scheduling rules however. +7165 /// +7166 /// Roughly speaking data frames are only sent on spaces that have CIDs, are not +7167 /// abandoned and have no *better* spaces. However see to comments where this is +7168 /// populated for the exact packet scheduling implementation. +7169 /// +7170 /// This essentially marks this paths as the best validated space ID. Except during +7171 /// the handshake in which case it does not need to be validated. Several paths could be +7172 /// equally good and all have this set to `true`, in that case packet scheduling can +7173 /// choose which path to use. Currently it chooses the lowest path that is not +7174 /// congestion blocked. +7175 /// +7176 /// Note that once in the closed or draining states this will never be true. +7177 may_send_data: bool, +7178 /// Whether the path may send a CONNECTION_CLOSE frame. +7179 /// +7180 /// This essentially marks this path as the best validated space ID with a fallback +7181 /// to unvalidated spaces if there are no validated spaces. Like for +7182 /// [`Self::may_send_data`] other paths could be equally good. +7183 may_send_close: bool, +7184 may_self_abandon: bool, +7185} +7186 +7187#[derive(Debug, Copy, Clone, PartialEq, Eq)] +7188enum PathBlocked { +7189 No, +7190 AntiAmplification, +7191 Congestion, +7192 Pacing, +7193} +7194 +7195/// Fields of `Connection` specific to it being client-side or server-side +7196enum ConnectionSide { +7197 Client { +7198 /// Sent in every outgoing Initial packet. Always empty after Initial keys are discarded +7199 token: Bytes, +7200 token_store: Arc<dyn TokenStore>, +7201 server_name: String, +7202 }, +7203 Server { +7204 server_config: Arc<ServerConfig>, +7205 }, +7206} +7207 +7208impl ConnectionSide { +7209 fn remote_may_migrate(&self, state: &State) -> bool { +7210 match self { +7211 Self::Server { server_config } => server_config.migration, +7212 Self::Client { .. } => { +7213 if let Some(hs) = state.as_handshake() { +7214 hs.allow_server_migration +7215 } else { +7216 false +7217 } +7218 } +7219 } +7220 } +7221 +7222 fn is_client(&self) -> bool { +7223 self.side().is_client() +7224 } +7225 +7226 fn is_server(&self) -> bool { +7227 self.side().is_server() +7228 } +7229 +7230 fn side(&self) -> Side { +7231 match *self { +7232 Self::Client { .. } => Side::Client, +7233 Self::Server { .. } => Side::Server, +7234 } +7235 } +7236} +7237 +7238impl From<SideArgs> for ConnectionSide { +7239 fn from(side: SideArgs) -> Self { +7240 match side { +7241 SideArgs::Client { +7242 token_store, +7243 server_name, +7244 } => Self::Client { +7245 token: token_store.take(&server_name).unwrap_or_default(), +7246 token_store, +7247 server_name, +7248 }, +7249 SideArgs::Server { +7250 server_config, +7251 pref_addr_cid: _, +7252 path_validated: _, +7253 } => Self::Server { server_config }, +7254 } +7255 } +7256} +7257 +7258/// Parameters to `Connection::new` specific to it being client-side or server-side +7259pub(crate) enum SideArgs { +7260 Client { +7261 token_store: Arc<dyn TokenStore>, +7262 server_name: String, +7263 }, +7264 Server { +7265 server_config: Arc<ServerConfig>, +7266 pref_addr_cid: Option<ConnectionId>, +7267 path_validated: bool, +7268 }, +7269} +7270 +7271impl SideArgs { +7272 pub(crate) fn pref_addr_cid(&self) -> Option<ConnectionId> { +7273 match *self { +7274 Self::Client { .. } => None, +7275 Self::Server { pref_addr_cid, .. } => pref_addr_cid, +7276 } +7277 } +7278 +7279 pub(crate) fn path_validated(&self) -> bool { +7280 match *self { +7281 Self::Client { .. } => true, +7282 Self::Server { path_validated, .. } => path_validated, +7283 } +7284 } +7285 +7286 pub(crate) fn side(&self) -> Side { +7287 match *self { +7288 Self::Client { .. } => Side::Client, +7289 Self::Server { .. } => Side::Server, +7290 } +7291 } +7292} +7293 +7294/// Reasons why a connection might be lost +7295#[derive(Debug, Error, Clone, PartialEq, Eq)] +7296pub enum ConnectionError { +7297 /// The peer doesn't implement any supported version +7298 #[error("peer doesn't implement any supported version")] +7299 VersionMismatch, +7300 /// The peer violated the QUIC specification as understood by this implementation +7301 #[error(transparent)] +7302 TransportError(#[from] TransportError), +7303 /// The peer's QUIC stack aborted the connection automatically +7304 #[error("aborted by peer: {0}")] +7305 ConnectionClosed(frame::ConnectionClose), +7306 /// The peer closed the connection +7307 #[error("closed by peer: {0}")] +7308 ApplicationClosed(frame::ApplicationClose), +7309 /// The peer is unable to continue processing this connection, usually due to having restarted +7310 #[error("reset by peer")] +7311 Reset, +7312 /// Communication with the peer has lapsed for longer than the negotiated idle timeout +7313 /// +7314 /// If neither side is sending keep-alives, a connection will time out after a long enough idle +7315 /// period even if the peer is still reachable. See also [`TransportConfig::max_idle_timeout()`] +7316 /// and [`TransportConfig::keep_alive_interval()`]. +7317 #[error("timed out")] +7318 TimedOut, +7319 /// The local application closed the connection +7320 #[error("closed")] +7321 LocallyClosed, +7322 /// The connection could not be created because not enough of the CID space is available +7323 /// +7324 /// Try using longer connection IDs. +7325 #[error("CIDs exhausted")] +7326 CidsExhausted, +7327} +7328 +7329impl From<Close> for ConnectionError { +7330 fn from(x: Close) -> Self { +7331 match x { +7332 Close::Connection(reason) => Self::ConnectionClosed(reason), +7333 Close::Application(reason) => Self::ApplicationClosed(reason), +7334 } +7335 } +7336} +7337 +7338// For compatibility with API consumers +7339impl From<ConnectionError> for io::Error { +7340 fn from(x: ConnectionError) -> Self { +7341 use ConnectionError::*; +7342 let kind = match x { +7343 TimedOut => io::ErrorKind::TimedOut, +7344 Reset => io::ErrorKind::ConnectionReset, +7345 ApplicationClosed(_) | ConnectionClosed(_) => io::ErrorKind::ConnectionAborted, +7346 TransportError(_) | VersionMismatch | LocallyClosed | CidsExhausted => { +7347 io::ErrorKind::Other +7348 } +7349 }; +7350 Self::new(kind, x) +7351 } +7352} +7353 +7354/// Errors that might trigger a path being closed +7355// TODO(@divma): maybe needs to be reworked based on what we want to do with the public API +7356#[derive(Debug, Error, PartialEq, Eq, Clone, Copy)] +7357pub enum PathError { +7358 /// The extension was not negotiated with the peer +7359 #[error("multipath extension not negotiated")] +7360 MultipathNotNegotiated, +7361 /// Paths can only be opened client-side +7362 #[error("the server side may not open a path")] +7363 ServerSideNotAllowed, +7364 /// Current limits do not allow us to open more paths +7365 #[error("maximum number of concurrent paths reached")] +7366 MaxPathIdReached, +7367 /// No remote CIDs available to open a new path +7368 #[error("remoted CIDs exhausted")] +7369 RemoteCidsExhausted, +7370 /// Path could not be validated and will be abandoned +7371 #[error("path validation failed")] +7372 ValidationFailed, +7373 /// The remote address for the path is not supported by the endpoint +7374 #[error("invalid remote address")] +7375 InvalidRemoteAddress(SocketAddr), +7376} +7377 +7378/// Errors triggered when abandoning a path +7379#[derive(Debug, Error, Clone, Eq, PartialEq)] +7380pub enum ClosePathError { +7381 /// Multipath is not negotiated +7382 #[error("Multipath extension not negotiated")] +7383 MultipathNotNegotiated, +7384 /// The path is already closed or was never opened +7385 #[error("closed path")] +7386 ClosedPath, +7387 /// Cannot close the last remaining open path via the local API. +7388 /// +7389 /// Use [`Connection::close`] to end the connection instead. +7390 #[error("last open path")] +7391 LastOpenPath, +7392} +7393 +7394/// Error when the multipath extension was not negotiated, but attempted to be used. +7395#[derive(Debug, Error, Clone, Copy)] +7396#[error("Multipath extension not negotiated")] +7397pub struct MultipathNotNegotiated { +7398 _private: (), +7399} +7400 +7401/// Events of interest to the application +7402#[derive(Debug)] +7403pub enum Event { +7404 /// The connection's handshake data is ready +7405 HandshakeDataReady, +7406 /// The connection was successfully established +7407 Connected, +7408 /// The TLS handshake was confirmed +7409 HandshakeConfirmed, +7410 /// The connection was lost +7411 /// +7412 /// Emitted if the peer closes the connection or an error is encountered. +7413 ConnectionLost { +7414 /// Reason that the connection was closed +7415 reason: ConnectionError, +7416 }, +7417 /// Stream events +7418 Stream(StreamEvent), +7419 /// One or more application datagrams have been received +7420 DatagramReceived, +7421 /// One or more application datagrams have been sent after blocking +7422 DatagramsUnblocked, +7423 /// (Multi)Path events +7424 Path(PathEvent), +7425 /// n0's nat traversal events +7426 NatTraversal(n0_nat_traversal::Event), +7427} +7428 +7429impl From<PathEvent> for Event { +7430 fn from(source: PathEvent) -> Self { +7431 Self::Path(source) +7432 } +7433} +7434 +7435fn get_max_ack_delay(params: &TransportParameters) -> Duration { +7436 Duration::from_micros(params.max_ack_delay.0 * 1000) +7437} +7438 +7439/// Prevents overflow and improves behavior in extreme circumstances. +7440const MAX_BACKOFF_EXPONENT: u32 = 16; +7441 +7442/// The max interval between successive tail-loss probes. +7443/// +7444/// This is the "normal" value we use. +7445const MAX_PTO_INTERVAL: Duration = Duration::from_secs(2); +7446 +7447/// The idle time, below which we use the shorter [`MAX_PTO_FAST_INTERVAL`]. +7448const MIN_IDLE_FOR_FAST_PTO: Duration = Duration::from_secs(25); +7449 +7450/// The max interval between successive tail-loss probes with short idle times. +7451/// +7452/// If the path or connection idle time is less than [`MIN_IDLE_FOR_FAST_PTO`] then we use +7453/// this value to ensure we have plenty of retransmits before we reach the idle time. +7454const MAX_PTO_FAST_INTERVAL: Duration = Duration::from_secs(1); +7455 +7456/// The RTT threshold above which we cap the PTO interval to 1.5 * smoothed_rtt +7457/// +7458/// This is RTT time above which 1.5 * RTT > [`MAX_PTO_INTERVAL`], for these links we want +7459/// to extend the interval between tail-loss probes to not fill the entire pipe with them. +7460const SLOW_RTT_THRESHOLD: Duration = +7461 Duration::from_millis((MAX_PTO_INTERVAL.as_millis() as u64 * 2) / 3); +7462 +7463/// Minimal remaining size to allow packet coalescing, excluding cryptographic tag +7464/// +7465/// This must be at least as large as the header for a well-formed empty packet to be coalesced, +7466/// plus some space for frames. We only care about handshake headers because short header packets +7467/// necessarily have smaller headers, and initial packets are only ever the first packet in a +7468/// datagram (because we coalesce in ascending packet space order and the only reason to split a +7469/// packet is when packet space changes). +7470const MIN_PACKET_SPACE: usize = MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE + 32; +7471 +7472/// Largest amount of space that could be occupied by a Handshake or 0-RTT packet's header +7473/// +7474/// Excludes packet-type-specific fields such as packet number or Initial token +7475// https://www.rfc-editor.org/rfc/rfc9000.html#name-0-rtt: flags + version + dcid len + dcid + +7476// scid len + scid + length + pn +7477const MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE: usize = +7478 1 + 4 + 1 + MAX_CID_SIZE + 1 + MAX_CID_SIZE + VarInt::from_u32(u16::MAX as u32).size() + 4; +7479 +7480#[derive(Default)] +7481struct SentFrames { +7482 retransmits: ThinRetransmits, +7483 /// The packet number of the largest acknowledged packet for each path +7484 largest_acked: FxHashMap<PathId, u64>, +7485 stream_frames: StreamMetaVec, +7486 /// Whether the packet contains non-retransmittable frames (like datagrams) +7487 non_retransmits: bool, +7488 /// If the datagram containing these frames should be padded to the min MTU +7489 requires_padding: bool, +7490} +7491 +7492impl SentFrames { +7493 /// Returns whether the packet contains only ACKs +7494 fn is_ack_only(&self, streams: &StreamsState) -> bool { +7495 !self.largest_acked.is_empty() +7496 && !self.non_retransmits +7497 && self.stream_frames.is_empty() +7498 && self.retransmits.is_empty(streams) +7499 } +7500 +7501 fn retransmits_mut(&mut self) -> &mut Retransmits { +7502 self.retransmits.get_or_create() +7503 } +7504 +7505 fn record_sent_frame(&mut self, frame: frame::EncodableFrame<'_>) { +7506 use frame::EncodableFrame::*; +7507 match frame { +7508 PathAck(path_ack_encoder) => { +7509 if let Some(max) = path_ack_encoder.ranges.max() { +7510 self.largest_acked.insert(path_ack_encoder.path_id, max); +7511 } +7512 } +7513 Ack(ack_encoder) => { +7514 if let Some(max) = ack_encoder.ranges.max() { +7515 self.largest_acked.insert(PathId::ZERO, max); +7516 } +7517 } +7518 Close(_) => { /* non retransmittable, but after this we don't really care */ } +7519 PathResponse(_) => self.non_retransmits = true, +7520 HandshakeDone(_) => self.retransmits_mut().handshake_done = true, +7521 ReachOut(frame::ReachOut { round, ip, port }) => { +7522 let (recorded_round, reach_outs) = self +7523 .retransmits_mut() +7524 .reach_out +7525 .get_or_insert_with(|| (round, FxIndexSet::default())); +7526 // Only record reach outs for the current round or a newer than the recorded one. +7527 if *recorded_round == round { +7528 // Same round, simply append. +7529 reach_outs.insert((ip, port)); +7530 } else if *recorded_round < round { +7531 // New round. +7532 *recorded_round = round; +7533 reach_outs.clear(); +7534 reach_outs.insert((ip, port)); +7535 } else { +7536 // ignore old reach out that was sent +7537 } +7538 } +7539 +7540 ObservedAddr(_) => self.retransmits_mut().observed_addr = true, +7541 Ping(_) => self.non_retransmits = true, +7542 ImmediateAck(_) => self.non_retransmits = true, +7543 AckFrequency(_) => self.retransmits_mut().ack_frequency = true, +7544 PathChallenge(_) => self.non_retransmits = true, +7545 Crypto(crypto) => self.retransmits_mut().crypto.push_back(crypto), +7546 PathAbandon(path_abandon) => { +7547 self.retransmits_mut() +7548 .path_abandon +7549 .entry(path_abandon.path_id) +7550 .or_insert(path_abandon.error_code); +7551 } +7552 PathStatusAvailable(frame::PathStatusAvailable { path_id, .. }) +7553 | PathStatusBackup(frame::PathStatusBackup { path_id, .. }) => { +7554 self.retransmits_mut().path_status.insert(path_id); +7555 } +7556 MaxPathId(_) => self.retransmits_mut().max_path_id = true, +7557 PathsBlocked(_) => self.retransmits_mut().paths_blocked = true, +7558 PathCidsBlocked(path_cids_blocked) => { +7559 self.retransmits_mut() +7560 .path_cids_blocked +7561 .insert(path_cids_blocked.path_id); +7562 } +7563 ResetStream(reset) => self +7564 .retransmits_mut() +7565 .reset_stream +7566 .push((reset.id, reset.error_code)), +7567 StopSending(stop_sending) => self.retransmits_mut().stop_sending.push(stop_sending), +7568 NewConnectionId(new_cid) => self.retransmits_mut().new_cids.push(new_cid.issued()), +7569 RetireConnectionId(retire_cid) => self +7570 .retransmits_mut() +7571 .retire_cids +7572 .push((retire_cid.path_id.unwrap_or_default(), retire_cid.sequence)), +7573 Datagram(_) => self.non_retransmits = true, +7574 NewToken(_) => {} +7575 AddAddress(add_address) => { +7576 self.retransmits_mut().add_address.insert(add_address); +7577 } +7578 RemoveAddress(remove_address) => { +7579 self.retransmits_mut().remove_address.insert(remove_address); +7580 } +7581 StreamMeta(stream_meta_encoder) => self.stream_frames.push(stream_meta_encoder.meta), +7582 MaxData(_) => self.retransmits_mut().max_data = true, +7583 MaxStreamData(max) => { +7584 self.retransmits_mut().max_stream_data.insert(max.id); +7585 } +7586 MaxStreams(max_streams) => { +7587 self.retransmits_mut().max_stream_id[max_streams.dir as usize] = true +7588 } +7589 } +7590 } +7591} +7592 +7593/// Compute the negotiated idle timeout based on local and remote max_idle_timeout transport parameters. +7594/// +7595/// According to the definition of max_idle_timeout, a value of `0` means the timeout is disabled; see <https://www.rfc-editor.org/rfc/rfc9000#section-18.2-4.4.1.> +7596/// +7597/// According to the negotiation procedure, either the minimum of the timeouts or one specified is used as the negotiated value; see <https://www.rfc-editor.org/rfc/rfc9000#section-10.1-2.> +7598/// +7599/// Returns the negotiated idle timeout as a `Duration`, or `None` when both endpoints have opted out of idle timeout. +7600fn negotiate_max_idle_timeout(x: Option<VarInt>, y: Option<VarInt>) -> Option<Duration> { +7601 match (x, y) { +7602 (Some(VarInt(0)) | None, Some(VarInt(0)) | None) => None, +7603 (Some(VarInt(0)) | None, Some(y)) => Some(Duration::from_millis(y.0)), +7604 (Some(x), Some(VarInt(0)) | None) => Some(Duration::from_millis(x.0)), +7605 (Some(x), Some(y)) => Some(Duration::from_millis(cmp::min(x, y).0)), +7606 } +7607} +7608 +7609#[cfg(test)] +7610mod tests { +7611 use super::*; +7612 +7613 #[test] +7614 fn negotiate_max_idle_timeout_commutative() { +7615 let test_params = [ +7616 (None, None, None), +7617 (None, Some(VarInt(0)), None), +7618 (None, Some(VarInt(2)), Some(Duration::from_millis(2))), +7619 (Some(VarInt(0)), Some(VarInt(0)), None), +7620 ( +7621 Some(VarInt(2)), +7622 Some(VarInt(0)), +7623 Some(Duration::from_millis(2)), +7624 ), +7625 ( +7626 Some(VarInt(1)), +7627 Some(VarInt(4)), +7628 Some(Duration::from_millis(1)), +7629 ), +7630 ]; +7631 +7632 for (left, right, result) in test_params { +7633 assert_eq!(negotiate_max_idle_timeout(left, right), result); +7634 assert_eq!(negotiate_max_idle_timeout(right, left), result); +7635 } +7636 } +7637} \ No newline at end of file diff --git a/pr/571/docs/src/noq_proto/n0_nat_traversal.rs.html b/pr/571/docs/src/noq_proto/n0_nat_traversal.rs.html index 03aedb773..97c874503 100644 --- a/pr/571/docs/src/noq_proto/n0_nat_traversal.rs.html +++ b/pr/571/docs/src/noq_proto/n0_nat_traversal.rs.html @@ -92,8 +92,8 @@ 92 /// These are indexed by their advertised Id. For each address, whether the address should be 93 /// reported in nat traversal continuations is kept. 94 remote_addresses: FxHashMap<VarInt, (IpPort, bool)>, -95 /// Local candidate addresses, in insertion order. -96 local_addresses: FxIndexSet<IpPort>, +95 /// Local candidate addresses with their priority (lower = more important). +96 local_addresses: FxHashMap<IpPort, u8>, 97 /// Current nat traversal round. 98 round: VarInt, 99 /// [`PathId`]s used to probe remotes assigned to this round. @@ -112,598 +112,617 @@ 112 } 113 } 114 -115 fn add_local_address(&mut self, address: IpPort) -> Result<(), Error> { +115 fn add_local_address(&mut self, address: IpPort, priority: u8) -> Result<(), Error> { 116 if self.local_addresses.len() < self.max_local_addresses { -117 self.local_addresses.insert(address); +117 self.local_addresses.insert(address, priority); 118 Ok(()) -119 } else if self.local_addresses.contains(&address) { -120 // at capacity, but the address is known, no issues here -121 Ok(()) -122 } else { -123 // at capacity and the address is new -124 Err(Error::TooManyAddresses) -125 } -126 } -127 -128 fn remove_local_address(&mut self, address: &IpPort) { -129 self.local_addresses.shift_remove(address); -130 } -131 -132 /// Initiates a new nat traversal round. -133 /// -134 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` -135 /// frames, and initiating probing of the known remote addresses. When a new round is -136 /// initiated, the previous one is cancelled, and paths that have not been opened should be -137 /// closed. -138 /// -139 /// `ipv6` indicates if the connection runs on a socket that supports IPv6. If so, then all -140 /// addresses returned in [`NatTraversalRound`] will be IPv6 addresses (and IPv4-mapped IPv6 -141 /// addresses if necessary). Otherwise they're all IPv4 addresses. -142 /// See also [`map_to_local_socket_family`]. -143 pub(crate) fn initiate_nat_traversal_round( -144 &mut self, -145 ipv6: bool, -146 ) -> Result<NatTraversalRound, Error> { -147 if self.local_addresses.is_empty() { -148 return Err(Error::NotEnoughAddresses); -149 } -150 -151 let prev_round_path_ids = std::mem::take(&mut self.round_path_ids); -152 self.round = self.round.saturating_add(1u8); -153 let mut addresses_to_probe = Vec::with_capacity(self.remote_addresses.len()); -154 for (id, ((ip, port), report_in_continuation)) in self.remote_addresses.iter_mut() { -155 *report_in_continuation = false; -156 -157 if let Some(ip) = map_to_local_socket_family(*ip, ipv6) { -158 addresses_to_probe.push((*id, (ip, *port))); -159 } else { -160 trace!(?ip, "not using IPv6 nat candidate for IPv4 socket"); -161 } -162 } -163 -164 Ok(NatTraversalRound { -165 new_round: self.round, -166 reach_out_at: self.local_addresses.iter().copied().collect(), -167 addresses_to_probe, -168 prev_round_path_ids, -169 }) -170 } -171 -172 /// Mark a remote address to be reported back in a nat traversal continuation if the error is -173 /// considered spurious from a nat traversal point of view. -174 /// -175 /// Ids not present are silently ignored. -176 pub(crate) fn report_in_continuation(&mut self, id: VarInt, e: crate::PathError) { -177 match e { -178 crate::PathError::MaxPathIdReached | crate::PathError::RemoteCidsExhausted => { -179 if let Some((_address, report_in_continuation)) = self.remote_addresses.get_mut(&id) -180 { -181 *report_in_continuation = true; -182 } -183 } -184 _ => {} -185 } -186 } -187 -188 /// Returns an address that needs to be probed, if any. -189 /// -190 /// The address will not be returned twice unless marked as such again with -191 /// [`Self::report_in_continuation`]. -192 /// -193 /// `ipv6` indicates if the connection runs on a socket that supports IPv6. If so, then all -194 /// addresses returned in [`NatTraversalRound`] will be IPv6 addresses (and IPv4-mapped IPv6 -195 /// addresses if necessary). Otherwise they're all IPv4 addresses. -196 /// See also [`map_to_local_socket_family`]. -197 pub(crate) fn continue_nat_traversal_round(&mut self, ipv6: bool) -> Option<(VarInt, IpPort)> { -198 // this being random depends on iteration not returning always on the same order -199 let (id, (address, report_in_continuation)) = self -200 .remote_addresses -201 .iter_mut() -202 .filter(|(_id, (_addr, report))| *report) -203 .filter_map(|(id, ((ip, port), report))| { -204 // only continue with addresses we can send on our local socket -205 let Some(ip) = map_to_local_socket_family(*ip, ipv6) else { -206 trace!(?ip, "not using IPv6 nat candidate for IPv4 socket"); -207 return None; -208 }; -209 Some((*id, ((ip, *port), report))) -210 }) -211 .next()?; -212 *report_in_continuation = false; -213 Some((id, address)) -214 } -215 -216 /// Add a [`PathId`] as part of the current attempts to create paths based on the server's -217 /// advertised addresses. -218 pub(crate) fn set_round_path_ids(&mut self, path_ids: Vec<PathId>) { -219 self.round_path_ids = path_ids; -220 } -221 -222 /// Add a [`PathId`] as part of the current attempts to create paths based on the server's -223 /// advertised addresses. -224 pub(crate) fn add_round_path_id(&mut self, path_id: PathId) { -225 self.round_path_ids.push(path_id); -226 } -227 -228 /// Adds an address to the remote set -229 /// -230 /// On success returns the address if it was new to the set. It will error when the set has no -231 /// capacity for the address. -232 pub(crate) fn add_remote_address( -233 &mut self, -234 add_addr: AddAddress, -235 ) -> Result<Option<SocketAddr>, Error> { -236 let AddAddress { seq_no, ip, port } = add_addr; -237 let address = (ip, port); -238 let allow_new = self.remote_addresses.len() < self.max_remote_addresses; -239 match self.remote_addresses.entry(seq_no) { -240 Entry::Occupied(mut occupied_entry) => { -241 let is_update = occupied_entry.get().0 != address; -242 if is_update { -243 occupied_entry.insert((address, false)); -244 } -245 // The value might be different. This should not happen, but we assume that the new -246 // address is more recent than the previous, and thus worth updating -247 Ok(is_update.then_some(address.into())) -248 } -249 Entry::Vacant(vacant_entry) if allow_new => { -250 vacant_entry.insert((address, false)); -251 Ok(Some(address.into())) -252 } -253 _ => Err(Error::TooManyAddresses), -254 } -255 } -256 -257 /// Removes an address from the remote set -258 /// -259 /// Returns whether the address was present. -260 pub(crate) fn remove_remote_address( -261 &mut self, -262 remove_addr: RemoveAddress, -263 ) -> Option<SocketAddr> { -264 self.remote_addresses -265 .remove(&remove_addr.seq_no) -266 .map(|(address, _report_in_continuation)| address.into()) -267 } -268 -269 /// Checks that a received remote address is valid -270 /// -271 /// An address is valid as long as it does not change the value of a known address id. -272 pub(crate) fn check_remote_address(&self, add_addr: &AddAddress) -> bool { -273 match self.remote_addresses.get(&add_addr.seq_no) { -274 None => true, -275 Some((existing, _)) => existing == &add_addr.ip_port(), -276 } -277 } -278 -279 pub(crate) fn get_remote_nat_traversal_addresses(&self) -> Vec<SocketAddr> { -280 self.remote_addresses -281 .values() -282 .map(|(address, _report_in_continuation)| (*address).into()) -283 .collect() -284 } -285} -286 -287/// Maximum number of times an off-path probe is sent before giving up. -288pub(crate) const MAX_OFF_PATH_PROBE_ATTEMPTS: u8 = 10; -289 -290/// State of an off-path probe to a client address. -291#[derive(Debug)] -292pub(crate) struct ProbeState { -293 /// Number of times this probe has been sent (0 = not yet sent). -294 pub(crate) attempts: u8, -295 /// Whether this probe is ready to be sent. -296 pub(crate) ready_to_send: bool, -297} -298 -299#[derive(Debug)] -300pub(crate) struct ServerState { -301 /// Max number of remote addresses we allow. -302 /// -303 /// This is set by the local endpoint. -304 max_remote_addresses: usize, -305 /// Max number of local addresses allowed. -306 /// -307 /// This is set by the remote endpoint. -308 max_local_addresses: usize, -309 /// Candidate addresses the server reports as potentially reachable, to use for nat -310 /// traversal attempts. -311 local_addresses: FxHashMap<IpPort, VarInt>, -312 /// The next id to use for local addresses sent to the client. -313 next_local_addr_id: VarInt, -314 /// Current nat traversal round -315 /// -316 /// Servers keep track of the client's most recent round and cancel probing related to previous -317 /// rounds. -318 round: VarInt, -319 /// Addresses to probe via PATH_CHALLENGE, in insertion order. -320 /// -321 /// Retransmitted up to [`MAX_OFF_PATH_PROBE_ATTEMPTS`] times. -322 pending_probes: FxIndexMap<IpPort, ProbeState>, -323} -324 -325impl ServerState { -326 fn new(max_remote_addresses: usize, max_local_addresses: usize) -> Self { -327 Self { -328 max_remote_addresses, -329 max_local_addresses, -330 local_addresses: Default::default(), -331 next_local_addr_id: Default::default(), -332 round: Default::default(), -333 pending_probes: Default::default(), -334 } -335 } -336 -337 fn add_local_address(&mut self, address: IpPort) -> Result<Option<AddAddress>, Error> { -338 let allow_new = self.local_addresses.len() < self.max_local_addresses; -339 match self.local_addresses.entry(address) { -340 Entry::Occupied(_) => Ok(None), -341 Entry::Vacant(vacant_entry) if allow_new => { -342 let id = self.next_local_addr_id; -343 self.next_local_addr_id = self.next_local_addr_id.saturating_add(1u8); -344 vacant_entry.insert(id); -345 Ok(Some(AddAddress::new(address, id))) -346 } -347 _ => Err(Error::TooManyAddresses), -348 } -349 } -350 -351 fn remove_local_address(&mut self, address: &IpPort) -> Option<RemoveAddress> { -352 self.local_addresses.remove(address).map(RemoveAddress::new) -353 } -354 -355 /// Returns the current NAT traversal round number. -356 pub(crate) fn current_round(&self) -> VarInt { -357 self.round -358 } -359 -360 /// Handles a received [`ReachOut`]. -361 /// -362 /// This might ignore the reach out frame if it belongs to an older round or if -363 /// the reach out can't be handled by an ipv4-only local socket. -364 pub(crate) fn handle_reach_out( -365 &mut self, -366 reach_out: ReachOut, -367 ipv6: bool, -368 ) -> Result<(), Error> { -369 let ReachOut { round, ip, port } = reach_out; -370 -371 if round < self.round { -372 trace!(current_round=%self.round, "ignoring REACH_OUT for previous round"); -373 return Ok(()); -374 } -375 let Some(ip) = map_to_local_socket_family(ip, ipv6) else { -376 trace!("Ignoring IPv6 REACH_OUT frame due to not supporting IPv6 locally"); -377 return Ok(()); -378 }; -379 -380 if round > self.round { -381 self.round = round; -382 self.pending_probes.clear(); -383 } else if self.pending_probes.len() >= self.max_remote_addresses -384 && !self.pending_probes.contains_key(&(ip, port)) -385 { -386 return Err(Error::TooManyAddresses); -387 } -388 self.pending_probes.entry((ip, port)).or_insert(ProbeState { -389 attempts: 0, -390 ready_to_send: true, -391 }); -392 Ok(()) -393 } -394 -395 /// Re-queue all sent probes that haven't exceeded [`MAX_OFF_PATH_PROBE_ATTEMPTS`] -396 /// for retransmission. Called when the off-path probe retry timer fires. -397 /// -398 /// Returns whether any probes were re-queued. -399 pub(crate) fn queue_retries(&mut self) -> bool { -400 let mut any_requeued = false; -401 self.pending_probes.retain(|_, state| { -402 if state.attempts > 0 && state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS { -403 state.ready_to_send = true; -404 any_requeued = true; -405 true -406 } else { -407 state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS -408 } -409 }); -410 any_requeued -411 } -412 -413 /// Returns whether there are any probes that have been sent but are waiting -414 /// for retry (i.e., sent at least once but under the max attempt limit). -415 pub(crate) fn has_pending_retries(&self) -> bool { -416 self.pending_probes -417 .values() -418 .any(|state| state.attempts > 0 && state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS) -419 } -420 -421 /// Returns the next ready probe's address. -422 pub(crate) fn next_probe_addr(&self) -> Option<SocketAddr> { -423 self.pending_probes -424 .iter() -425 .find(|(_, state)| state.ready_to_send) -426 .map(|(addr, _)| (*addr).into()) -427 } -428 -429 /// Mark a probe as sent by address. -430 pub(crate) fn mark_probe_sent(&mut self, remote: IpPort) { -431 if let Some(state) = self.pending_probes.get_mut(&remote) { -432 state.attempts += 1; -433 state.ready_to_send = false; -434 } -435 } -436} -437 -438impl State { -439 pub(crate) fn new(max_remote_addresses: u8, max_local_addresses: u8, side: Side) -> Self { -440 match side { -441 Side::Client => Self::ClientSide(ClientState::new( -442 max_remote_addresses.into(), -443 max_local_addresses.into(), -444 )), -445 Side::Server => Self::ServerSide(ServerState::new( -446 max_remote_addresses.into(), -447 max_local_addresses.into(), -448 )), -449 } -450 } -451 -452 pub(crate) fn client_side(&self) -> Result<&ClientState, Error> { -453 match self { -454 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -455 Self::ClientSide(client_side) => Ok(client_side), -456 Self::ServerSide(_) => Err(Error::WrongConnectionSide), -457 } -458 } -459 -460 pub(crate) fn client_side_mut(&mut self) -> Result<&mut ClientState, Error> { -461 match self { -462 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -463 Self::ClientSide(client_side) => Ok(client_side), -464 Self::ServerSide(_) => Err(Error::WrongConnectionSide), -465 } -466 } -467 -468 pub(crate) fn server_side_mut(&mut self) -> Result<&mut ServerState, Error> { -469 match self { -470 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -471 Self::ClientSide(_) => Err(Error::WrongConnectionSide), -472 Self::ServerSide(server_side) => Ok(server_side), -473 } -474 } -475 -476 /// Adds a local address to use for nat traversal. -477 /// -478 /// When this endpoint is the server within the connection, these addresses will be sent to the -479 /// client in add address frames. For clients, these addresses will be sent in reach out frames -480 /// when nat traversal attempts are initiated. -481 /// -482 /// If a frame should be sent, it is returned. -483 pub(crate) fn add_local_address( -484 &mut self, -485 address: SocketAddr, -486 ) -> Result<Option<AddAddress>, Error> { -487 let ip_port = IpPort::from((address.ip(), address.port())); -488 match self { -489 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -490 Self::ClientSide(client_state) => { -491 client_state.add_local_address(ip_port)?; -492 Ok(None) -493 } -494 Self::ServerSide(server_state) => server_state.add_local_address(ip_port), -495 } -496 } -497 -498 /// Removes a local address from the advertised set for nat traversal. -499 /// -500 /// When this endpoint is the server, removed addresses must be reported with remove address -501 /// frames. Clients will simply stop reporting these addresses in reach out frames. -502 /// -503 /// If a frame should be sent, it is returned. -504 pub(crate) fn remove_local_address( -505 &mut self, -506 address: SocketAddr, -507 ) -> Result<Option<RemoveAddress>, Error> { -508 let address = IpPort::from((address.ip(), address.port())); -509 match self { -510 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -511 Self::ClientSide(client_state) => { -512 client_state.remove_local_address(&address); -513 Ok(None) -514 } -515 Self::ServerSide(server_state) => Ok(server_state.remove_local_address(&address)), -516 } -517 } -518 -519 pub(crate) fn get_local_nat_traversal_addresses(&self) -> Result<Vec<SocketAddr>, Error> { -520 match self { -521 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), -522 Self::ClientSide(client_state) => Ok(client_state -523 .local_addresses -524 .iter() -525 .copied() -526 .map(Into::into) -527 .collect()), -528 Self::ServerSide(server_state) => Ok(server_state -529 .local_addresses -530 .keys() -531 .copied() -532 .map(Into::into) -533 .collect()), -534 } -535 } -536} -537 -538/// Returns the given address as canonicalized IP address. -539/// -540/// This checks that the address family is supported by our local socket. -541/// If it is supported, then the address is mapped to the respective IP address. -542/// If the given address is an IPv6 address, but our local socket doesn't support -543/// IPv6, then this returns `None`. -544pub(crate) fn map_to_local_socket_family(address: IpAddr, ipv6: bool) -> Option<IpAddr> { -545 let ip = match address { -546 IpAddr::V4(addr) if ipv6 => IpAddr::V6(addr.to_ipv6_mapped()), -547 IpAddr::V4(_) => address, -548 IpAddr::V6(_) if ipv6 => address, -549 IpAddr::V6(addr) => IpAddr::V4(addr.to_ipv4_mapped()?), -550 }; -551 Some(ip) -552} -553 -554#[cfg(test)] -555mod tests { -556 use super::*; -557 -558 #[test] -559 fn test_basic_server_state() { -560 let mut state = ServerState::new(2, 2); -561 -562 state -563 .handle_reach_out( -564 ReachOut { -565 round: 1u32.into(), -566 ip: std::net::Ipv4Addr::LOCALHOST.into(), -567 port: 1, -568 }, -569 true, -570 ) -571 .unwrap(); -572 -573 state -574 .handle_reach_out( -575 ReachOut { -576 round: 1u32.into(), -577 ip: "1.1.1.1".parse().unwrap(), //std::net::Ipv4Addr::LOCALHOST.into(), -578 port: 2, -579 }, -580 true, -581 ) -582 .unwrap(); -583 -584 dbg!(&state); -585 assert_eq!(state.pending_probes.len(), 2); -586 -587 // Helper: send next ready probe -588 let send_probe = |state: &mut ServerState| { -589 let remote = state.next_probe_addr().unwrap(); -590 state.mark_probe_sent((remote.ip(), remote.port())); -591 }; -592 -593 send_probe(&mut state); -594 send_probe(&mut state); -595 -596 // After sending both probes, no ready probes remain but they're still tracked. -597 assert!(state.next_probe_addr().is_none()); -598 assert_eq!(state.pending_probes.len(), 2); -599 assert!(state.has_pending_retries()); +119 } else if self.local_addresses.contains_key(&address) { +120 Ok(()) +121 } else { +122 Err(Error::TooManyAddresses) +123 } +124 } +125 +126 fn remove_local_address(&mut self, address: &IpPort) { +127 self.local_addresses.remove(address); +128 } +129 +130 /// Initiates a new nat traversal round. +131 /// +132 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` +133 /// frames, and initiating probing of the known remote addresses. When a new round is +134 /// initiated, the previous one is cancelled, and paths that have not been opened should be +135 /// closed. +136 /// +137 /// `ipv6` indicates if the connection runs on a socket that supports IPv6. If so, then all +138 /// addresses returned in [`NatTraversalRound`] will be IPv6 addresses (and IPv4-mapped IPv6 +139 /// addresses if necessary). Otherwise they're all IPv4 addresses. +140 /// See also [`map_to_local_socket_family`]. +141 pub(crate) fn initiate_nat_traversal_round( +142 &mut self, +143 ipv6: bool, +144 ) -> Result<NatTraversalRound, Error> { +145 if self.local_addresses.is_empty() { +146 return Err(Error::NotEnoughAddresses); +147 } +148 +149 let prev_round_path_ids = std::mem::take(&mut self.round_path_ids); +150 self.round = self.round.saturating_add(1u8); +151 let mut addresses_to_probe = Vec::with_capacity(self.remote_addresses.len()); +152 for (id, ((ip, port), report_in_continuation)) in self.remote_addresses.iter_mut() { +153 *report_in_continuation = false; +154 +155 if let Some(ip) = map_to_local_socket_family(*ip, ipv6) { +156 addresses_to_probe.push((*id, (ip, *port))); +157 } else { +158 trace!(?ip, "not using IPv6 nat candidate for IPv4 socket"); +159 } +160 } +161 +162 Ok(NatTraversalRound { +163 new_round: self.round, +164 reach_out_at: sorted_by_priority(&self.local_addresses), +165 addresses_to_probe, +166 prev_round_path_ids, +167 }) +168 } +169 +170 /// Mark a remote address to be reported back in a nat traversal continuation if the error is +171 /// considered spurious from a nat traversal point of view. +172 /// +173 /// Ids not present are silently ignored. +174 pub(crate) fn report_in_continuation(&mut self, id: VarInt, e: crate::PathError) { +175 match e { +176 crate::PathError::MaxPathIdReached | crate::PathError::RemoteCidsExhausted => { +177 if let Some((_address, report_in_continuation)) = self.remote_addresses.get_mut(&id) +178 { +179 *report_in_continuation = true; +180 } +181 } +182 _ => {} +183 } +184 } +185 +186 /// Returns an address that needs to be probed, if any. +187 /// +188 /// The address will not be returned twice unless marked as such again with +189 /// [`Self::report_in_continuation`]. +190 /// +191 /// `ipv6` indicates if the connection runs on a socket that supports IPv6. If so, then all +192 /// addresses returned in [`NatTraversalRound`] will be IPv6 addresses (and IPv4-mapped IPv6 +193 /// addresses if necessary). Otherwise they're all IPv4 addresses. +194 /// See also [`map_to_local_socket_family`]. +195 pub(crate) fn continue_nat_traversal_round(&mut self, ipv6: bool) -> Option<(VarInt, IpPort)> { +196 // this being random depends on iteration not returning always on the same order +197 let (id, (address, report_in_continuation)) = self +198 .remote_addresses +199 .iter_mut() +200 .filter(|(_id, (_addr, report))| *report) +201 .filter_map(|(id, ((ip, port), report))| { +202 // only continue with addresses we can send on our local socket +203 let Some(ip) = map_to_local_socket_family(*ip, ipv6) else { +204 trace!(?ip, "not using IPv6 nat candidate for IPv4 socket"); +205 return None; +206 }; +207 Some((*id, ((ip, *port), report))) +208 }) +209 .next()?; +210 *report_in_continuation = false; +211 Some((id, address)) +212 } +213 +214 /// Add a [`PathId`] as part of the current attempts to create paths based on the server's +215 /// advertised addresses. +216 pub(crate) fn set_round_path_ids(&mut self, path_ids: Vec<PathId>) { +217 self.round_path_ids = path_ids; +218 } +219 +220 /// Add a [`PathId`] as part of the current attempts to create paths based on the server's +221 /// advertised addresses. +222 pub(crate) fn add_round_path_id(&mut self, path_id: PathId) { +223 self.round_path_ids.push(path_id); +224 } +225 +226 /// Adds an address to the remote set +227 /// +228 /// On success returns the address if it was new to the set. It will error when the set has no +229 /// capacity for the address. +230 pub(crate) fn add_remote_address( +231 &mut self, +232 add_addr: AddAddress, +233 ) -> Result<Option<SocketAddr>, Error> { +234 let AddAddress { seq_no, ip, port } = add_addr; +235 let address = (ip, port); +236 let allow_new = self.remote_addresses.len() < self.max_remote_addresses; +237 match self.remote_addresses.entry(seq_no) { +238 Entry::Occupied(mut occupied_entry) => { +239 let is_update = occupied_entry.get().0 != address; +240 if is_update { +241 occupied_entry.insert((address, false)); +242 } +243 // The value might be different. This should not happen, but we assume that the new +244 // address is more recent than the previous, and thus worth updating +245 Ok(is_update.then_some(address.into())) +246 } +247 Entry::Vacant(vacant_entry) if allow_new => { +248 vacant_entry.insert((address, false)); +249 Ok(Some(address.into())) +250 } +251 _ => Err(Error::TooManyAddresses), +252 } +253 } +254 +255 /// Removes an address from the remote set +256 /// +257 /// Returns whether the address was present. +258 pub(crate) fn remove_remote_address( +259 &mut self, +260 remove_addr: RemoveAddress, +261 ) -> Option<SocketAddr> { +262 self.remote_addresses +263 .remove(&remove_addr.seq_no) +264 .map(|(address, _report_in_continuation)| address.into()) +265 } +266 +267 /// Checks that a received remote address is valid +268 /// +269 /// An address is valid as long as it does not change the value of a known address id. +270 pub(crate) fn check_remote_address(&self, add_addr: &AddAddress) -> bool { +271 match self.remote_addresses.get(&add_addr.seq_no) { +272 None => true, +273 Some((existing, _)) => existing == &add_addr.ip_port(), +274 } +275 } +276 +277 pub(crate) fn get_remote_nat_traversal_addresses(&self) -> Vec<SocketAddr> { +278 self.remote_addresses +279 .values() +280 .map(|(address, _report_in_continuation)| (*address).into()) +281 .collect() +282 } +283} +284 +285/// Maximum number of times an off-path probe is sent before giving up. +286pub(crate) const MAX_OFF_PATH_PROBE_ATTEMPTS: u8 = 10; +287 +288/// State of an off-path probe to a client address. +289#[derive(Debug)] +290pub(crate) struct ProbeState { +291 /// Number of times this probe has been sent (0 = not yet sent). +292 pub(crate) attempts: u8, +293 /// Whether this probe is ready to be sent. +294 pub(crate) ready_to_send: bool, +295} +296 +297#[derive(Debug)] +298pub(crate) struct ServerState { +299 /// Max number of remote addresses we allow. +300 /// +301 /// This is set by the local endpoint. +302 max_remote_addresses: usize, +303 /// Max number of local addresses allowed. +304 /// +305 /// This is set by the remote endpoint. +306 max_local_addresses: usize, +307 /// Candidate addresses the server reports as potentially reachable, to use for nat +308 /// traversal attempts. +309 local_addresses: FxHashMap<IpPort, VarInt>, +310 /// The next id to use for local addresses sent to the client. +311 next_local_addr_id: VarInt, +312 /// Current nat traversal round +313 /// +314 /// Servers keep track of the client's most recent round and cancel probing related to previous +315 /// rounds. +316 round: VarInt, +317 /// Addresses to probe via PATH_CHALLENGE, in insertion order. +318 /// +319 /// Retransmitted up to [`MAX_OFF_PATH_PROBE_ATTEMPTS`] times. +320 pending_probes: FxIndexMap<IpPort, ProbeState>, +321} +322 +323impl ServerState { +324 fn new(max_remote_addresses: usize, max_local_addresses: usize) -> Self { +325 Self { +326 max_remote_addresses, +327 max_local_addresses, +328 local_addresses: Default::default(), +329 next_local_addr_id: Default::default(), +330 round: Default::default(), +331 pending_probes: Default::default(), +332 } +333 } +334 +335 fn add_local_address(&mut self, address: IpPort) -> Result<Option<AddAddress>, Error> { +336 let allow_new = self.local_addresses.len() < self.max_local_addresses; +337 match self.local_addresses.entry(address) { +338 Entry::Occupied(_) => Ok(None), +339 Entry::Vacant(vacant_entry) if allow_new => { +340 let id = self.next_local_addr_id; +341 self.next_local_addr_id = self.next_local_addr_id.saturating_add(1u8); +342 vacant_entry.insert(id); +343 Ok(Some(AddAddress::new(address, id))) +344 } +345 _ => Err(Error::TooManyAddresses), +346 } +347 } +348 +349 fn remove_local_address(&mut self, address: &IpPort) -> Option<RemoveAddress> { +350 self.local_addresses.remove(address).map(RemoveAddress::new) +351 } +352 +353 /// Returns the current NAT traversal round number. +354 pub(crate) fn current_round(&self) -> VarInt { +355 self.round +356 } +357 +358 /// Handles a received [`ReachOut`]. +359 /// +360 /// This might ignore the reach out frame if it belongs to an older round or if +361 /// the reach out can't be handled by an ipv4-only local socket. +362 pub(crate) fn handle_reach_out( +363 &mut self, +364 reach_out: ReachOut, +365 ipv6: bool, +366 ) -> Result<(), Error> { +367 let ReachOut { round, ip, port } = reach_out; +368 +369 if round < self.round { +370 trace!(current_round=%self.round, "ignoring REACH_OUT for previous round"); +371 return Ok(()); +372 } +373 let Some(ip) = map_to_local_socket_family(ip, ipv6) else { +374 trace!("Ignoring IPv6 REACH_OUT frame due to not supporting IPv6 locally"); +375 return Ok(()); +376 }; +377 +378 if round > self.round { +379 self.round = round; +380 self.pending_probes.clear(); +381 } else if self.pending_probes.len() >= self.max_remote_addresses +382 && !self.pending_probes.contains_key(&(ip, port)) +383 { +384 return Err(Error::TooManyAddresses); +385 } +386 self.pending_probes.entry((ip, port)).or_insert(ProbeState { +387 attempts: 0, +388 ready_to_send: true, +389 }); +390 Ok(()) +391 } +392 +393 /// Re-queue all sent probes that haven't exceeded [`MAX_OFF_PATH_PROBE_ATTEMPTS`] +394 /// for retransmission. Called when the off-path probe retry timer fires. +395 /// +396 /// Returns whether any probes were re-queued. +397 pub(crate) fn queue_retries(&mut self) -> bool { +398 let mut any_requeued = false; +399 self.pending_probes.retain(|_, state| { +400 if state.attempts > 0 && state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS { +401 state.ready_to_send = true; +402 any_requeued = true; +403 true +404 } else { +405 state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS +406 } +407 }); +408 any_requeued +409 } +410 +411 /// Returns whether there are any probes that have been sent but are waiting +412 /// for retry (i.e., sent at least once but under the max attempt limit). +413 pub(crate) fn has_pending_retries(&self) -> bool { +414 self.pending_probes +415 .values() +416 .any(|state| state.attempts > 0 && state.attempts < MAX_OFF_PATH_PROBE_ATTEMPTS) +417 } +418 +419 /// Returns the next ready probe's address. +420 pub(crate) fn next_probe_addr(&self) -> Option<SocketAddr> { +421 self.pending_probes +422 .iter() +423 .find(|(_, state)| state.ready_to_send) +424 .map(|(addr, _)| (*addr).into()) +425 } +426 +427 /// Mark a probe as sent by address. +428 pub(crate) fn mark_probe_sent(&mut self, remote: IpPort) { +429 if let Some(state) = self.pending_probes.get_mut(&remote) { +430 state.attempts += 1; +431 state.ready_to_send = false; +432 } +433 } +434} +435 +436impl State { +437 pub(crate) fn new(max_remote_addresses: u8, max_local_addresses: u8, side: Side) -> Self { +438 match side { +439 Side::Client => Self::ClientSide(ClientState::new( +440 max_remote_addresses.into(), +441 max_local_addresses.into(), +442 )), +443 Side::Server => Self::ServerSide(ServerState::new( +444 max_remote_addresses.into(), +445 max_local_addresses.into(), +446 )), +447 } +448 } +449 +450 pub(crate) fn client_side(&self) -> Result<&ClientState, Error> { +451 match self { +452 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +453 Self::ClientSide(client_side) => Ok(client_side), +454 Self::ServerSide(_) => Err(Error::WrongConnectionSide), +455 } +456 } +457 +458 pub(crate) fn client_side_mut(&mut self) -> Result<&mut ClientState, Error> { +459 match self { +460 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +461 Self::ClientSide(client_side) => Ok(client_side), +462 Self::ServerSide(_) => Err(Error::WrongConnectionSide), +463 } +464 } +465 +466 pub(crate) fn server_side_mut(&mut self) -> Result<&mut ServerState, Error> { +467 match self { +468 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +469 Self::ClientSide(_) => Err(Error::WrongConnectionSide), +470 Self::ServerSide(server_side) => Ok(server_side), +471 } +472 } +473 +474 /// Adds a local address to use for nat traversal. +475 /// +476 /// When this endpoint is the server within the connection, these addresses will be sent to the +477 /// client in add address frames. For clients, these addresses will be sent in reach out frames +478 /// when nat traversal attempts are initiated. +479 /// +480 /// If a frame should be sent, it is returned. +481 pub(crate) fn add_local_address( +482 &mut self, +483 address: SocketAddr, +484 priority: u8, +485 ) -> Result<Option<AddAddress>, Error> { +486 let ip_port = IpPort::from((address.ip(), address.port())); +487 match self { +488 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +489 Self::ClientSide(client_state) => { +490 client_state.add_local_address(ip_port, priority)?; +491 Ok(None) +492 } +493 Self::ServerSide(server_state) => server_state.add_local_address(ip_port), +494 } +495 } +496 +497 /// Removes a local address from the advertised set for nat traversal. +498 /// +499 /// When this endpoint is the server, removed addresses must be reported with remove address +500 /// frames. Clients will simply stop reporting these addresses in reach out frames. +501 /// +502 /// If a frame should be sent, it is returned. +503 pub(crate) fn remove_local_address( +504 &mut self, +505 address: SocketAddr, +506 ) -> Result<Option<RemoveAddress>, Error> { +507 let address = IpPort::from((address.ip(), address.port())); +508 match self { +509 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +510 Self::ClientSide(client_state) => { +511 client_state.remove_local_address(&address); +512 Ok(None) +513 } +514 Self::ServerSide(server_state) => Ok(server_state.remove_local_address(&address)), +515 } +516 } +517 +518 pub(crate) fn get_local_nat_traversal_addresses(&self) -> Result<Vec<SocketAddr>, Error> { +519 match self { +520 Self::NotNegotiated => Err(Error::ExtensionNotNegotiated), +521 Self::ClientSide(client_state) => Ok(client_state +522 .local_addresses +523 .keys() +524 .map(|addr| SocketAddr::from(*addr)) +525 .collect()), +526 Self::ServerSide(server_state) => Ok(server_state +527 .local_addresses +528 .keys() +529 .copied() +530 .map(Into::into) +531 .collect()), +532 } +533 } +534} +535 +536/// Returns the given address as canonicalized IP address. +537/// +538/// This checks that the address family is supported by our local socket. +539/// If it is supported, then the address is mapped to the respective IP address. +540/// Returns addresses sorted by priority (lower = first). +541fn sorted_by_priority(addrs: &FxHashMap<IpPort, u8>) -> FxIndexSet<IpPort> { +542 let mut set: FxIndexSet<IpPort> = addrs.keys().copied().collect(); +543 set.sort_by(|a, b| addrs[a].cmp(&addrs[b])); +544 set +545} +546 +547/// If the given address is an IPv6 address, but our local socket doesn't support +548/// IPv6, then this returns `None`. +549pub(crate) fn map_to_local_socket_family(address: IpAddr, ipv6: bool) -> Option<IpAddr> { +550 let ip = match address { +551 IpAddr::V4(addr) if ipv6 => IpAddr::V6(addr.to_ipv6_mapped()), +552 IpAddr::V4(_) => address, +553 IpAddr::V6(_) if ipv6 => address, +554 IpAddr::V6(addr) => IpAddr::V4(addr.to_ipv4_mapped()?), +555 }; +556 Some(ip) +557} +558 +559#[cfg(test)] +560mod tests { +561 use super::*; +562 +563 #[test] +564 fn test_basic_server_state() { +565 let mut state = ServerState::new(2, 2); +566 +567 state +568 .handle_reach_out( +569 ReachOut { +570 round: 1u32.into(), +571 ip: std::net::Ipv4Addr::LOCALHOST.into(), +572 port: 1, +573 }, +574 true, +575 ) +576 .unwrap(); +577 +578 state +579 .handle_reach_out( +580 ReachOut { +581 round: 1u32.into(), +582 ip: "1.1.1.1".parse().unwrap(), //std::net::Ipv4Addr::LOCALHOST.into(), +583 port: 2, +584 }, +585 true, +586 ) +587 .unwrap(); +588 +589 dbg!(&state); +590 assert_eq!(state.pending_probes.len(), 2); +591 +592 // Helper: send next ready probe +593 let send_probe = |state: &mut ServerState| { +594 let remote = state.next_probe_addr().unwrap(); +595 state.mark_probe_sent((remote.ip(), remote.port())); +596 }; +597 +598 send_probe(&mut state); +599 send_probe(&mut state); 600 -601 // After queuing retries, probes become available again -602 assert!(state.queue_retries()); -603 send_probe(&mut state); -604 send_probe(&mut state); +601 // After sending both probes, no ready probes remain but they're still tracked. +602 assert!(state.next_probe_addr().is_none()); +603 assert_eq!(state.pending_probes.len(), 2); +604 assert!(state.has_pending_retries()); 605 -606 // After 2 attempts each, retries still available (max is 10) +606 // After queuing retries, probes become available again 607 assert!(state.queue_retries()); 608 send_probe(&mut state); 609 send_probe(&mut state); 610 -611 // Exhaust remaining attempts -612 for _ in 3..MAX_OFF_PATH_PROBE_ATTEMPTS { -613 assert!(state.queue_retries()); -614 send_probe(&mut state); -615 send_probe(&mut state); -616 } -617 -618 // After max attempts, probes are removed -619 assert!(!state.queue_retries()); -620 assert!(state.next_probe_addr().is_none()); -621 assert_eq!(state.pending_probes.len(), 0); -622 } -623 -624 #[test] -625 fn test_map_to_local_socket() { -626 assert_eq!( -627 map_to_local_socket_family("1.1.1.1".parse().unwrap(), false), -628 Some("1.1.1.1".parse().unwrap()) -629 ); -630 assert_eq!( -631 map_to_local_socket_family("1.1.1.1".parse().unwrap(), true), -632 Some("::ffff:1.1.1.1".parse().unwrap()) -633 ); -634 assert_eq!( -635 map_to_local_socket_family("::1".parse().unwrap(), true), -636 Some("::1".parse().unwrap()) -637 ); -638 assert_eq!( -639 map_to_local_socket_family("::1".parse().unwrap(), false), -640 None -641 ); -642 assert_eq!( -643 map_to_local_socket_family("::ffff:1.1.1.1".parse().unwrap(), false), -644 Some("1.1.1.1".parse().unwrap()) -645 ) -646 } -647 -648 #[test] -649 fn server_probes_in_insertion_order() { -650 let mut state = ServerState::new(10, 10); -651 -652 // Deliberately not sorted by IP to catch ordering bugs. -653 let addrs: Vec<SocketAddr> = vec![ -654 "203.0.113.5:4000".parse().unwrap(), -655 "10.0.0.1:3000".parse().unwrap(), -656 "192.168.1.1:5000".parse().unwrap(), -657 "172.17.0.1:6000".parse().unwrap(), -658 "8.8.8.8:7000".parse().unwrap(), -659 ]; -660 -661 for addr in &addrs { -662 state -663 .handle_reach_out( -664 ReachOut { -665 round: 1u32.into(), -666 ip: addr.ip(), -667 port: addr.port(), -668 }, -669 false, -670 ) -671 .unwrap(); -672 } -673 -674 let mut probe_order = Vec::new(); -675 while let Some(addr) = state.next_probe_addr() { -676 probe_order.push(addr); -677 state.mark_probe_sent((addr.ip(), addr.port())); -678 } -679 -680 assert_eq!(probe_order, addrs); -681 } -682 -683 #[test] -684 fn client_reach_out_in_insertion_order() { -685 let mut state = ClientState::new(10, 10); -686 -687 // Deliberately not sorted by IP. -688 let addrs: Vec<SocketAddr> = vec![ -689 "203.0.113.5:4000".parse().unwrap(), -690 "10.0.0.1:3000".parse().unwrap(), -691 "192.168.1.1:5000".parse().unwrap(), -692 "172.17.0.1:6000".parse().unwrap(), -693 "8.8.8.8:7000".parse().unwrap(), -694 ]; -695 -696 for addr in &addrs { -697 state.add_local_address((addr.ip(), addr.port())).unwrap(); -698 } -699 -700 let round = state.initiate_nat_traversal_round(false).unwrap(); -701 let reach_out: Vec<SocketAddr> = round -702 .reach_out_at -703 .into_iter() -704 .map(SocketAddr::from) -705 .collect(); -706 -707 assert_eq!(reach_out, addrs); -708 } -709} \ No newline at end of file +611 // After 2 attempts each, retries still available (max is 10) +612 assert!(state.queue_retries()); +613 send_probe(&mut state); +614 send_probe(&mut state); +615 +616 // Exhaust remaining attempts +617 for _ in 3..MAX_OFF_PATH_PROBE_ATTEMPTS { +618 assert!(state.queue_retries()); +619 send_probe(&mut state); +620 send_probe(&mut state); +621 } +622 +623 // After max attempts, probes are removed +624 assert!(!state.queue_retries()); +625 assert!(state.next_probe_addr().is_none()); +626 assert_eq!(state.pending_probes.len(), 0); +627 } +628 +629 #[test] +630 fn test_map_to_local_socket() { +631 assert_eq!( +632 map_to_local_socket_family("1.1.1.1".parse().unwrap(), false), +633 Some("1.1.1.1".parse().unwrap()) +634 ); +635 assert_eq!( +636 map_to_local_socket_family("1.1.1.1".parse().unwrap(), true), +637 Some("::ffff:1.1.1.1".parse().unwrap()) +638 ); +639 assert_eq!( +640 map_to_local_socket_family("::1".parse().unwrap(), true), +641 Some("::1".parse().unwrap()) +642 ); +643 assert_eq!( +644 map_to_local_socket_family("::1".parse().unwrap(), false), +645 None +646 ); +647 assert_eq!( +648 map_to_local_socket_family("::ffff:1.1.1.1".parse().unwrap(), false), +649 Some("1.1.1.1".parse().unwrap()) +650 ) +651 } +652 +653 #[test] +654 fn server_probes_in_insertion_order() { +655 let mut state = ServerState::new(10, 10); +656 +657 // Deliberately not sorted by IP to catch ordering bugs. +658 let addrs: Vec<SocketAddr> = vec![ +659 "203.0.113.5:4000".parse().unwrap(), +660 "10.0.0.1:3000".parse().unwrap(), +661 "192.168.1.1:5000".parse().unwrap(), +662 "172.17.0.1:6000".parse().unwrap(), +663 "8.8.8.8:7000".parse().unwrap(), +664 ]; +665 +666 for addr in &addrs { +667 state +668 .handle_reach_out( +669 ReachOut { +670 round: 1u32.into(), +671 ip: addr.ip(), +672 port: addr.port(), +673 }, +674 false, +675 ) +676 .unwrap(); +677 } +678 +679 let mut probe_order = Vec::new(); +680 while let Some(addr) = state.next_probe_addr() { +681 probe_order.push(addr); +682 state.mark_probe_sent((addr.ip(), addr.port())); +683 } +684 +685 assert_eq!(probe_order, addrs); +686 } +687 +688 #[test] +689 fn client_reach_out_sorted_by_priority() { +690 let mut state = ClientState::new(10, 10); +691 +692 // Add addresses with priorities in non-sorted IP order. +693 // Priority 0 = most important, should appear first in REACH_OUT. +694 state +695 .add_local_address(("10.0.0.1".parse().unwrap(), 3000), 3) +696 .unwrap(); +697 state +698 .add_local_address(("203.0.113.5".parse().unwrap(), 4000), 0) +699 .unwrap(); +700 state +701 .add_local_address(("172.17.0.1".parse().unwrap(), 6000), 2) +702 .unwrap(); +703 state +704 .add_local_address(("8.8.8.8".parse().unwrap(), 7000), 1) +705 .unwrap(); +706 state +707 .add_local_address(("192.168.1.1".parse().unwrap(), 5000), 4) +708 .unwrap(); +709 +710 let round = state.initiate_nat_traversal_round(false).unwrap(); +711 let reach_out: Vec<SocketAddr> = round +712 .reach_out_at +713 .into_iter() +714 .map(SocketAddr::from) +715 .collect(); +716 +717 assert_eq!( +718 reach_out, +719 vec![ +720 "203.0.113.5:4000".parse::<SocketAddr>().unwrap(), +721 "8.8.8.8:7000".parse().unwrap(), +722 "172.17.0.1:6000".parse().unwrap(), +723 "10.0.0.1:3000".parse().unwrap(), +724 "192.168.1.1:5000".parse().unwrap(), +725 ] +726 ); +727 } +728} \ No newline at end of file