diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 78c8b805..935428b1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -86,6 +86,12 @@ jobs: for san in address leak; do RUSTFLAGS="$RUSTFLAGS -Z sanitizer=$san" cargo test --features test_with_native_code --target x86_64-unknown-linux-gnu done + - name: Run signature tests with test_with_native_code + env: + RUST_TEST_THREADS: 1 + run: | + # Temporary solution until signatures works: it depends on other PRs + cargo test --features test_with_native_code,gen_signatures,check_signatures --target x86_64-unknown-linux-gnu features::signatures - name: Check native aquavm-air-cli run: cargo check --package aquavm-air-cli --no-default-features diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..1fd66074 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "benches/performance_metering"] + path = benches/performance_metering + url = git@github.com:fluencelabs/aquavm-benchmark-data.git + branch = feat/VM-221-signature-checking diff --git a/Cargo.lock b/Cargo.lock index f555c727..c1e42624 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,6 +100,7 @@ dependencies = [ "multihash 0.18.1", "serde", "serde_json", + "sha2 0.10.7", ] [[package]] @@ -110,6 +111,7 @@ dependencies = [ "air-interpreter-signatures", "air-utils", "aquavm-air-parser", + "fluence-keypair", "newtype_derive", "num-traits", "once_cell", @@ -117,6 +119,7 @@ dependencies = [ "semver 1.0.18", "serde", "serde_json", + "thiserror", "tracing", ] @@ -135,10 +138,11 @@ name = "air-interpreter-signatures" version = "0.1.1" dependencies = [ "air-interpreter-cid", + "borsh 0.10.3", + "borsh-derive 0.10.3", "bs58 0.5.0", "fluence-keypair", "serde", - "serde_json", ] [[package]] @@ -194,6 +198,7 @@ dependencies = [ name = "air-testing-framework" version = "0.6.1" dependencies = [ + "air-interpreter-signatures", "air-test-utils", "aquavm-air-parser", "itertools", @@ -201,6 +206,7 @@ dependencies = [ "nom", "nom_locate", "pretty_assertions 1.4.0", + "regex", "serde_json", "strum", ] @@ -333,9 +339,11 @@ dependencies = [ "air-trace-handler", "air-utils", "aquavm-air-parser", + "borsh 0.10.3", "concat-idents", "criterion 0.3.6", "csv", + "ed25519-dalek", "env_logger 0.7.1", "fluence-app-service", "fluence-keypair", @@ -806,7 +814,17 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" dependencies = [ - "borsh-derive", + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", "hashbrown 0.11.2", ] @@ -816,8 +834,21 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", @@ -834,6 +865,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "borsh-schema-derive-internal" version = "0.9.3" @@ -845,6 +887,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bs58" version = "0.4.0" @@ -3332,7 +3385,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "885db39b08518fa700b73fa2214e8adbbfba316ba82dd510f50519173eadaf73" dependencies = [ - "borsh", + "borsh 0.9.3", "schemars", "semver 1.0.18", "serde", @@ -3344,7 +3397,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d258582a1878e6db67400b0504a5099db85718d22c2e07f747fe1706ae7150" dependencies = [ - "borsh", + "borsh 0.9.3", "serde", ] @@ -3354,7 +3407,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d924011380de759c3dc6fdbcda37a19a5c061f56dab69d28a34ecee765e23e4" dependencies = [ - "borsh", + "borsh 0.9.3", "serde", ] @@ -3385,7 +3438,7 @@ checksum = "1e75673d69fd7365508f3d32483669fe45b03bfb34e4d9363e90adae9dfb416c" dependencies = [ "arrayref", "blake2", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "c2-chacha", "curve25519-dalek", @@ -3411,7 +3464,7 @@ checksum = "7754612b47737d277fb818e9fdbb1406e90f9e57151c55c3584d714421976cb6" dependencies = [ "arrayref", "blake2", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "c2-chacha", "curve25519-dalek", @@ -3434,7 +3487,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1335ffce1476da6516dcd22b26cece1a495fc725c0e8fec1879073752ac068d" dependencies = [ - "borsh", + "borsh 0.9.3", "lazy_static", "log", "near-chain-configs", @@ -3469,7 +3522,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ad1a9a1640539c81f065425c31bffcfbf6b31ef1aeaade59ce905f5df6ac860" dependencies = [ - "borsh", + "borsh 0.9.3", "byteorder", "bytesize", "chrono", @@ -3498,7 +3551,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97670b302dce15f09bba50f24c67aa08130fd01528cc61d4415892401e88e974" dependencies = [ - "borsh", + "borsh 0.9.3", "byteorder", "bytesize", "cfg-if 1.0.0", @@ -3529,7 +3582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91d508f0fc340f6461e4e256417685720d3c4c00bb5a939b105160e49137caba" dependencies = [ "base64 0.11.0", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "derive_more", "near-account-id 0.14.0", @@ -3546,7 +3599,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7929e19d862221949734c4a0063a8f55e7069de3a2ebc2d4f4c13497a5e953cb" dependencies = [ "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "derive_more", "near-account-id 0.15.0", @@ -3623,7 +3676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15eb3de2defe3626260cc209a6cdb985c6b27b0bd4619fad97dcfae002c3c5bd" dependencies = [ "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "near-abi", "near-crypto 0.14.0", @@ -3663,7 +3716,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0da466a30f0446639cbd788c30865086fac3e8dcb07a79e51d2b0775ed4261e" dependencies = [ - "borsh", + "borsh 0.9.3", "near-account-id 0.14.0", "near-rpc-error-macro 0.14.0", "serde", @@ -3675,7 +3728,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5591c9c8afa83a040cb5c3f29bc52b2efae2c32d4bcaee1bba723738da1a5cf6" dependencies = [ - "borsh", + "borsh 0.9.3", "near-account-id 0.15.0", "near-rpc-error-macro 0.15.0", "serde", @@ -3689,7 +3742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81b534828419bacbf1f7b11ef7b00420f248c548c485d3f0cfda8bb6931152f2" dependencies = [ "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "byteorder", "near-account-id 0.14.0", @@ -6370,7 +6423,7 @@ dependencies = [ "async-process", "async-trait", "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "chrono", "dirs 3.0.2", @@ -6441,7 +6494,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e61de68ede9ffdd69c01664f65a178c5188b73f78faa21f0936016a888ff7c" dependencies = [ - "borsh", + "borsh 0.9.3", "byteorder", "crunchy", "lazy_static", diff --git a/air-interpreter/Cargo.toml b/air-interpreter/Cargo.toml index 255d41c8..c3672edf 100644 --- a/air-interpreter/Cargo.toml +++ b/air-interpreter/Cargo.toml @@ -37,3 +37,6 @@ tracing-subscriber = { version = "0.3.17", default-features = false, features = # indicates that this library should be compiled for the marine target, # otherwise it will be compiled for the wasm bindgen target marine = [] +gen_signatures = ["aquavm-air/gen_signatures"] +check_signatures = ["aquavm-air/check_signatures"] + diff --git a/air/Cargo.toml b/air/Cargo.toml index 7074c543..2d5e0943 100644 --- a/air/Cargo.toml +++ b/air/Cargo.toml @@ -51,14 +51,20 @@ air-testing-framework = { path = "../crates/testing-framework" } fluence-app-service = "0.29.0" marine-rs-sdk = { version = "0.10.0", features = ["logger"] } +borsh = "0.10.3" # the feature just silence a warning in the criterion 0.3.x. criterion = { version = "0.3.3", features = ["html_reports"] } csv = "1.1.5" -once_cell = "1.4.1" +ed25519-dalek = "1.0.1" env_logger = "0.7.1" +once_cell = "1.4.1" pretty_assertions = "0.6.1" serde_json = "1.0.61" +[features] +check_signatures = [] +gen_signatures = [] + [[bench]] name = "call_benchmark" harness = false diff --git a/air/src/execution_step/errors/uncatchable_errors.rs b/air/src/execution_step/errors/uncatchable_errors.rs index e8baca5b..511d993e 100644 --- a/air/src/execution_step/errors/uncatchable_errors.rs +++ b/air/src/execution_step/errors/uncatchable_errors.rs @@ -117,6 +117,17 @@ pub enum UncatchableError { /// CanonStreamMap related errors. #[error(transparent)] CanonStreamMapError(#[from] CanonStreamMapError), + + /// Argument hash or tetraplet mismatch in a call/canon merged from current_data with an evaluated value. + #[error("{param} doesn't match expected parameters: expected {expected_value}, got {stored_value} ")] + InstructionParametersMismatch { + param: &'static str, + expected_value: String, + stored_value: String, + }, + + #[error("failed to sign data: {0}")] + SigningError(#[from] fluence_keypair::error::SigningError), } impl ToErrorCode for UncatchableError { diff --git a/air/src/execution_step/execution_context/cid_state.rs b/air/src/execution_step/execution_context/cid_state.rs index 489203da..0dd5c91e 100644 --- a/air/src/execution_step/execution_context/cid_state.rs +++ b/air/src/execution_step/execution_context/cid_state.rs @@ -147,15 +147,28 @@ impl ExecutionCidState { .ok_or_else(|| UncatchableError::ValueForCidNotFound("service result aggregate", cid.clone().into())) } - pub(crate) fn resolve_service_value( + pub(crate) fn resolve_service_info( &self, service_result_agg_cid: &CID, - ) -> Result, UncatchableError> { + ) -> Result { let service_result_aggregate = self.get_service_result_agg_by_cid(service_result_agg_cid)?; - self.get_value_by_cid(&service_result_aggregate.value_cid) + let value = self.get_value_by_cid(&service_result_aggregate.value_cid)?; + let tetraplet = self.get_tetraplet_by_cid(&service_result_aggregate.tetraplet_cid)?; + + Ok(ResolvedServiceInfo { + value, + tetraplet, + service_result_aggregate, + }) } } +pub(crate) struct ResolvedServiceInfo { + pub(crate) value: Rc, + pub(crate) tetraplet: RcSecurityTetraplet, + pub(crate) service_result_aggregate: Rc, +} + impl From for CidInfo { fn from(value: ExecutionCidState) -> Self { Self { diff --git a/air/src/execution_step/execution_context/context.rs b/air/src/execution_step/execution_context/context.rs index ee91eb59..d8a9f994 100644 --- a/air/src/execution_step/execution_context/context.rs +++ b/air/src/execution_step/execution_context/context.rs @@ -31,13 +31,12 @@ use air_interpreter_data::CanonResultCidAggregate; use air_interpreter_data::CidInfo; use air_interpreter_data::ServiceResultCidAggregate; use air_interpreter_interface::*; +use air_interpreter_signatures::PeerCidTracker; use air_interpreter_signatures::SignatureStore; -use air_interpreter_signatures::SignatureTracker; use std::rc::Rc; /// Contains all necessary state needed to execute AIR script. -#[derive(Default)] pub(crate) struct ExecutionCtx<'i> { /// Contains all scalars. pub(crate) scalars: Scalars<'i>, @@ -89,11 +88,10 @@ pub(crate) struct ExecutionCtx<'i> { /// It contains peers' signatures for verification. pub(crate) signature_store: SignatureStore, - /// Local signatures tracker. + /// Current peer's CID tracker. /// - /// It gathers peers' CIDs (call results and canon results) stored in the trace either for signing (current peer's - /// CIDs) or sign verification (other peers). - pub(crate) signature_tracker: SignatureTracker, + /// It gathers current peer's CIDs (call results and canon results) for further signing. + pub(crate) peer_cid_tracker: PeerCidTracker, } impl<'i> ExecutionCtx<'i> { @@ -101,15 +99,15 @@ impl<'i> ExecutionCtx<'i> { prev_ingredients: ExecCtxIngredients, current_ingredients: ExecCtxIngredients, call_results: CallResults, + signature_store: SignatureStore, run_parameters: &RunParameters, ) -> Self { let run_parameters = RcRunParameters::from_run_parameters(run_parameters); let streams = Streams::new(); let cid_state = ExecutionCidState::from_cid_info(prev_ingredients.cid_info, current_ingredients.cid_info); - // TODO we might keep both stores and merge them only with signature info collected into SignatureTracker - let signature_store = - SignatureStore::merge(prev_ingredients.signature_store, current_ingredients.signature_store); + + let peer_cid_tracker = PeerCidTracker::new(run_parameters.current_peer_id.clone()); Self { run_parameters, @@ -117,9 +115,16 @@ impl<'i> ExecutionCtx<'i> { last_call_request_id: prev_ingredients.last_call_request_id, call_results, streams, + stream_maps: <_>::default(), cid_state, signature_store, - ..<_>::default() + peer_cid_tracker, + scalars: <_>::default(), + next_peer_pks: <_>::default(), + last_error_descriptor: <_>::default(), + error_descriptor: <_>::default(), + tracker: <_>::default(), + call_requests: <_>::default(), } } @@ -136,12 +141,12 @@ impl<'i> ExecutionCtx<'i> { self.last_call_request_id } - pub(crate) fn record_call_cid(&mut self, peer_id: impl Into>, cid: &CID) { - self.signature_tracker.register(peer_id, cid); + pub(crate) fn record_call_cid(&mut self, peer_id: &str, cid: &CID) { + self.peer_cid_tracker.register(peer_id, cid); } - pub(crate) fn record_canon_cid(&mut self, peer_id: impl Into>, cid: &CID) { - self.signature_tracker.register(peer_id, cid); + pub(crate) fn record_canon_cid(&mut self, peer_id: &str, cid: &CID) { + self.peer_cid_tracker.register(peer_id, cid); } } @@ -205,7 +210,6 @@ impl ExecutionCtx<'_> { pub(crate) struct ExecCtxIngredients { pub(crate) last_call_request_id: u32, pub(crate) cid_info: CidInfo, - pub(crate) signature_store: SignatureStore, } use serde::Deserialize; @@ -218,6 +222,8 @@ use std::fmt::Formatter; pub(crate) struct RcRunParameters { pub(crate) init_peer_id: Rc, pub(crate) current_peer_id: Rc, + // TODO use [u8] + pub(crate) salt: Rc, pub(crate) timestamp: u64, pub(crate) ttl: u32, } @@ -227,23 +233,13 @@ impl RcRunParameters { Self { init_peer_id: run_parameters.init_peer_id.as_str().into(), current_peer_id: Rc::new(run_parameters.current_peer_id.clone()), + salt: run_parameters.particle_id.as_str().into(), timestamp: run_parameters.timestamp, ttl: run_parameters.ttl, } } } -impl Default for RcRunParameters { - fn default() -> Self { - Self { - init_peer_id: "".into(), - current_peer_id: Default::default(), - timestamp: Default::default(), - ttl: Default::default(), - } - } -} - impl<'i> Display for ExecutionCtx<'i> { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { writeln!(f, "scalars:")?; diff --git a/air/src/execution_step/execution_context/mod.rs b/air/src/execution_step/execution_context/mod.rs index d9d3f2c3..464bd208 100644 --- a/air/src/execution_step/execution_context/mod.rs +++ b/air/src/execution_step/execution_context/mod.rs @@ -24,6 +24,7 @@ mod streams_variables; pub use instruction_error::*; pub use cid_state::ExecutionCidState; +pub(crate) use cid_state::ResolvedServiceInfo; pub(crate) use context::*; pub(crate) use scalar_variables::*; pub(crate) use stream_maps_variables::*; diff --git a/air/src/execution_step/instructions/call.rs b/air/src/execution_step/instructions/call.rs index 0fecaa19..e7903604 100644 --- a/air/src/execution_step/instructions/call.rs +++ b/air/src/execution_step/instructions/call.rs @@ -18,6 +18,7 @@ pub(crate) mod call_result_setter; mod prev_result_handler; mod resolved_call; pub(crate) mod triplet; +mod verifier; use resolved_call::ResolvedCall; diff --git a/air/src/execution_step/instructions/call/call_result_setter.rs b/air/src/execution_step/instructions/call/call_result_setter.rs index 0ea724f4..f95d6d5e 100644 --- a/air/src/execution_step/instructions/call/call_result_setter.rs +++ b/air/src/execution_step/instructions/call/call_result_setter.rs @@ -38,7 +38,7 @@ pub(crate) fn populate_context_from_peer_service_result<'i>( ) -> ExecutionResult { match output { CallOutputValue::Scalar(scalar) => { - let peer_id: Box = tetraplet.peer_pk.as_str().into(); + let peer_id = tetraplet.peer_pk.clone(); let service_result_agg_cid = exec_ctx .cid_state @@ -46,11 +46,11 @@ pub(crate) fn populate_context_from_peer_service_result<'i>( let executed_result = ValueAggregate::from_service_result(executed_result, service_result_agg_cid.clone()); exec_ctx.scalars.set_scalar_value(scalar.name, executed_result)?; - exec_ctx.record_call_cid(peer_id, &service_result_agg_cid); + exec_ctx.record_call_cid(&peer_id, &service_result_agg_cid); Ok(CallResult::executed_scalar(service_result_agg_cid)) } CallOutputValue::Stream(stream) => { - let peer_id: Box = tetraplet.peer_pk.as_str().into(); + let peer_id = tetraplet.peer_pk.clone(); let service_result_agg_cid = exec_ctx .cid_state @@ -61,7 +61,7 @@ pub(crate) fn populate_context_from_peer_service_result<'i>( let value_descriptor = StreamValueDescriptor::new(executed_result, stream.name, Generation::New, stream.position); exec_ctx.streams.add_stream_value(value_descriptor)?; - exec_ctx.record_call_cid(&*peer_id, &service_result_agg_cid); + exec_ctx.record_call_cid(&peer_id, &service_result_agg_cid); Ok(CallResult::executed_stream_stub(service_result_agg_cid)) } CallOutputValue::None => { @@ -76,6 +76,7 @@ pub(crate) fn populate_context_from_peer_service_result<'i>( pub(crate) fn populate_context_from_data<'i>( value: ValueRef, + argument_hash: &str, tetraplet: RcSecurityTetraplet, trace_pos: TracePos, value_source: ValueSource, @@ -84,13 +85,37 @@ pub(crate) fn populate_context_from_data<'i>( ) -> ExecutionResult<()> { match (output, value) { (CallOutputValue::Scalar(scalar), ValueRef::Scalar(cid)) => { - let value = exec_ctx.cid_state.resolve_service_value(&cid)?; + let ResolvedServiceInfo { + value, + tetraplet: current_tetraplet, + service_result_aggregate, + } = exec_ctx.cid_state.resolve_service_info(&cid)?; + + verifier::verify_call( + argument_hash, + &tetraplet, + &service_result_aggregate.argument_hash, + ¤t_tetraplet, + )?; + let result = ServiceResultAggregate::new(value, tetraplet, trace_pos); let result = ValueAggregate::from_service_result(result, cid); exec_ctx.scalars.set_scalar_value(scalar.name, result)?; } (CallOutputValue::Stream(stream), ValueRef::Stream { cid, generation }) => { - let value = exec_ctx.cid_state.resolve_service_value(&cid)?; + let ResolvedServiceInfo { + value, + tetraplet: current_tetraplet, + service_result_aggregate, + } = exec_ctx.cid_state.resolve_service_info(&cid)?; + + verifier::verify_call( + argument_hash, + &tetraplet, + &service_result_aggregate.argument_hash, + ¤t_tetraplet, + )?; + let result = ServiceResultAggregate::new(value, tetraplet, trace_pos); let result = ValueAggregate::from_service_result(result, cid); let generation = Generation::from_data(value_source, generation); diff --git a/air/src/execution_step/instructions/call/prev_result_handler.rs b/air/src/execution_step/instructions/call/prev_result_handler.rs index 7eb96733..bb96debf 100644 --- a/air/src/execution_step/instructions/call/prev_result_handler.rs +++ b/air/src/execution_step/instructions/call/prev_result_handler.rs @@ -15,6 +15,7 @@ */ use super::*; +use crate::execution_step::execution_context::ResolvedServiceInfo; use crate::execution_step::instructions::call::call_result_setter::populate_context_from_data; use crate::execution_step::CatchableError; use crate::execution_step::RcSecurityTetraplet; @@ -50,15 +51,27 @@ pub(super) fn handle_prev_state<'i>( // this call was failed on one of the previous executions, // here it's needed to bubble this special error up Failed(ref failed_cid) => { - let err_value = exec_ctx + let ResolvedServiceInfo { + value: err_value, + tetraplet: current_tetraplet, + service_result_aggregate, + } = exec_ctx .cid_state - .resolve_service_value(failed_cid) + .resolve_service_info(failed_cid) .map_err(UncatchableError::from)?; + + verifier::verify_call( + argument_hash.as_ref().unwrap(), + tetraplet, + &service_result_aggregate.argument_hash, + ¤t_tetraplet, + )?; + let call_service_failed: CallServiceFailed = serde_json::from_value((*err_value).clone()).map_err(UncatchableError::MalformedCallServiceFailed)?; exec_ctx.make_subgraph_incomplete(); - exec_ctx.record_call_cid(&*tetraplet.peer_pk, failed_cid); + exec_ctx.record_call_cid(&tetraplet.peer_pk, failed_cid); trace_ctx.meet_call_end(met_result.result); let err_msg = call_service_failed.message; @@ -103,6 +116,7 @@ pub(super) fn handle_prev_state<'i>( populate_context_from_data( value.clone(), + argument_hash.as_ref().unwrap(), tetraplet.clone(), met_result.trace_pos, met_result.source, @@ -112,7 +126,7 @@ pub(super) fn handle_prev_state<'i>( match &value { ValueRef::Scalar(ref cid) | ValueRef::Stream { ref cid, .. } => { - exec_ctx.record_call_cid(&*tetraplet.peer_pk, cid); + exec_ctx.record_call_cid(&tetraplet.peer_pk, cid); } ValueRef::Unused(_) => {} } @@ -178,13 +192,13 @@ fn handle_service_error( let failed_value = CallServiceFailed::new(service_result.ret_code, error_message).to_value(); - let peer_id: Box = tetraplet.peer_pk.as_str().into(); + let peer_id = tetraplet.peer_pk.clone(); let service_result_agg_cid = exec_ctx .cid_state .track_service_result(failed_value.into(), tetraplet, argument_hash)?; - exec_ctx.record_call_cid(peer_id, &service_result_agg_cid); + exec_ctx.record_call_cid(&peer_id, &service_result_agg_cid); trace_ctx.meet_call_end(Failed(service_result_agg_cid)); Err(error.into()) diff --git a/air/src/execution_step/instructions/call/verifier.rs b/air/src/execution_step/instructions/call/verifier.rs new file mode 100644 index 00000000..34bea98b --- /dev/null +++ b/air/src/execution_step/instructions/call/verifier.rs @@ -0,0 +1,43 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::UncatchableError; + +use polyplets::SecurityTetraplet; + +/// Check that computed call parameters match the parameters from current data. +pub(crate) fn verify_call( + expected_argument_hash: &str, + expected_tetraplet: &SecurityTetraplet, + stored_argument_hash: &str, + stored_tetraplet: &SecurityTetraplet, +) -> Result<(), UncatchableError> { + if expected_argument_hash != stored_argument_hash { + return Err(UncatchableError::InstructionParametersMismatch { + param: "call argument_hash", + expected_value: expected_argument_hash.to_owned(), + stored_value: stored_argument_hash.to_owned(), + }); + } + if expected_tetraplet != stored_tetraplet { + return Err(UncatchableError::InstructionParametersMismatch { + param: "call tetraplet", + expected_value: format!("{expected_tetraplet:?}"), + stored_value: format!("{stored_tetraplet:?}"), + }); + } + Ok(()) +} diff --git a/air/src/execution_step/instructions/canon.rs b/air/src/execution_step/instructions/canon.rs index d4d1adb1..28d23831 100644 --- a/air/src/execution_step/instructions/canon.rs +++ b/air/src/execution_step/instructions/canon.rs @@ -47,6 +47,7 @@ impl<'i> super::ExecutableInstruction<'i> for ast::Canon<'i> { let create_canon_producer = create_canon_stream_producer(self.stream.name, self.stream.position); match canon_result { MergerCanonResult::CanonResult(canon_result) => handle_seen_canon( + &self.peer_id, epilog, &create_canon_producer, canon_result, diff --git a/air/src/execution_step/instructions/canon_map.rs b/air/src/execution_step/instructions/canon_map.rs index ce320b40..ab129320 100644 --- a/air/src/execution_step/instructions/canon_map.rs +++ b/air/src/execution_step/instructions/canon_map.rs @@ -47,6 +47,7 @@ impl<'i> super::ExecutableInstruction<'i> for ast::CanonMap<'i> { let create_canon_producer = create_canon_stream_producer(self.stream_map.name, self.stream_map.position); match canon_result { MergerCanonResult::CanonResult(canon_result) => handle_seen_canon( + &self.peer_id, epilog, &create_canon_producer, canon_result, diff --git a/air/src/execution_step/instructions/canon_stream_map_scalar.rs b/air/src/execution_step/instructions/canon_stream_map_scalar.rs index 5f218cf2..59631cae 100644 --- a/air/src/execution_step/instructions/canon_stream_map_scalar.rs +++ b/air/src/execution_step/instructions/canon_stream_map_scalar.rs @@ -50,6 +50,7 @@ impl<'i> super::ExecutableInstruction<'i> for ast::CanonStreamMapScalar<'i> { let create_canon_producer = create_canon_stream_producer(self.stream_map.name, self.stream_map.position); match canon_result { MergerCanonResult::CanonResult(canon_result) => handle_seen_canon( + &self.peer_id, epilog, &create_canon_producer, canon_result, diff --git a/air/src/execution_step/instructions/canon_utils/mod.rs b/air/src/execution_step/instructions/canon_utils/mod.rs index 71b283d8..434f4d37 100644 --- a/air/src/execution_step/instructions/canon_utils/mod.rs +++ b/air/src/execution_step/instructions/canon_utils/mod.rs @@ -25,6 +25,7 @@ use air_interpreter_cid::CID; use air_interpreter_data::CanonResult; use air_interpreter_data::CanonResultCidAggregate; use air_parser::ast::ResolvableToPeerIdVariable; +use polyplets::SecurityTetraplet; use std::rc::Rc; @@ -34,6 +35,7 @@ pub(crate) type CanonEpilogClosure<'closure> = dyn Fn(CanonStream, Rc = dyn Fn(&mut ExecutionCtx<'_>, String) -> CanonStream + 'closure; pub(crate) fn handle_seen_canon( + peer_id_var: &ResolvableToPeerIdVariable<'_>, epilog: &CanonEpilogClosure<'_>, create_canon_stream: &CreateCanonStreamClosure<'_>, canon_result: CanonResult, @@ -45,7 +47,9 @@ pub(crate) fn handle_seen_canon( CanonResult::RequestSentBy(..) => { handle_canon_request_sent_by(epilog, create_canon_stream, peer_id, canon_result, exec_ctx, trace_ctx) } - CanonResult::Executed(canon_result_cid) => handle_canon_executed(epilog, canon_result_cid, exec_ctx, trace_ctx), + CanonResult::Executed(canon_result_cid) => { + handle_canon_executed(peer_id_var, epilog, canon_result_cid, exec_ctx, trace_ctx) + } } } @@ -72,21 +76,29 @@ pub(crate) fn handle_canon_request_sent_by( } pub(crate) fn handle_canon_executed( + peer_id_var: &ResolvableToPeerIdVariable<'_>, epilog: &CanonEpilogClosure<'_>, canon_result_cid: Rc>, exec_ctx: &mut ExecutionCtx<'_>, trace_ctx: &mut TraceHandler, ) -> ExecutionResult<()> { - let canon_result_agg = exec_ctx.cid_state.get_canon_result_by_cid(&canon_result_cid)?; - let tetraplet = exec_ctx.cid_state.get_tetraplet_by_cid(&canon_result_agg.tetraplet)?; + let peer_id = crate::execution_step::instructions::resolve_peer_id_to_string(peer_id_var, exec_ctx)?; + let expected_tetraplet = SecurityTetraplet::new(peer_id, "", "", ""); - exec_ctx.record_canon_cid(&*tetraplet.peer_pk, &canon_result_cid); + let canon_result_agg = exec_ctx.cid_state.get_canon_result_by_cid(&canon_result_cid)?; + let tetraplet_cid = canon_result_agg.tetraplet.clone(); + let tetraplet = exec_ctx.cid_state.get_tetraplet_by_cid(&tetraplet_cid)?; + + verify_canon(&expected_tetraplet, &tetraplet)?; let value_cids = canon_result_agg.values.clone(); let values = value_cids .iter() .map(|canon_value_cid| exec_ctx.cid_state.get_canon_value_by_cid(canon_value_cid)) .collect::, _>>()?; + + populate_seen_cid_context(exec_ctx, &tetraplet.peer_pk, &canon_result_cid); + let canon_stream = CanonStream::new(values, tetraplet); epilog(canon_stream, canon_result_cid, exec_ctx, trace_ctx) @@ -124,11 +136,19 @@ fn create_canon_stream_for_first_time( trace_ctx: &mut TraceHandler, ) -> ExecutionResult<()> { let canon_stream = create_canon_stream(exec_ctx, peer_id); - let canon_result_cid = populate_cid_context(exec_ctx, &canon_stream)?; + let canon_result_cid = populate_unseen_cid_context(exec_ctx, &canon_stream)?; epilog(canon_stream, canon_result_cid, exec_ctx, trace_ctx) } -fn populate_cid_context( +fn populate_seen_cid_context( + exec_ctx: &mut ExecutionCtx<'_>, + peer_id: &str, + canon_result_cid: &Rc>, +) { + exec_ctx.record_canon_cid(peer_id, canon_result_cid) +} + +fn populate_unseen_cid_context( exec_ctx: &mut ExecutionCtx<'_>, canon_stream: &CanonStream, ) -> ExecutionResult>> { @@ -151,6 +171,20 @@ fn populate_cid_context( .track_value(canon_result) .map_err(UncatchableError::from)?; - exec_ctx.record_canon_cid(&*tetraplet.peer_pk, &canon_result_cid); + exec_ctx.record_canon_cid(&tetraplet.peer_pk, &canon_result_cid); Ok(canon_result_cid) } + +pub(crate) fn verify_canon( + expected_tetraplet: &SecurityTetraplet, + stored_tetraplet: &SecurityTetraplet, +) -> Result<(), UncatchableError> { + if expected_tetraplet != stored_tetraplet { + return Err(UncatchableError::InstructionParametersMismatch { + param: "canon tetraplet", + expected_value: format!("{expected_tetraplet:?}"), + stored_value: format!("{stored_tetraplet:?}"), + }); + } + Ok(()) +} diff --git a/air/src/farewell_step/outcome.rs b/air/src/farewell_step/outcome.rs index beef9e74..14369319 100644 --- a/air/src/farewell_step/outcome.rs +++ b/air/src/farewell_step/outcome.rs @@ -133,8 +133,8 @@ fn compactify_streams(exec_ctx: &mut ExecutionCtx<'_>, trace_ctx: &mut TraceHand fn sign_result(exec_ctx: &mut ExecutionCtx<'_>, keypair: &KeyPair) -> Result<(), InterpreterOutcome> { let current_signature = exec_ctx - .signature_tracker - .into_signature(&exec_ctx.run_parameters.current_peer_id, keypair) + .peer_cid_tracker + .gen_signature(&exec_ctx.run_parameters.salt, keypair) .map_err(signing_error_into_outcome)?; let current_pubkey = keypair.public(); diff --git a/air/src/lib.rs b/air/src/lib.rs index bdc44e0a..e3636cc7 100644 --- a/air/src/lib.rs +++ b/air/src/lib.rs @@ -30,7 +30,9 @@ mod execution_step; mod farewell_step; mod preparation_step; mod runner; +mod signing_step; mod utils; +mod verification_step; pub use air_interpreter_interface::InterpreterOutcome; pub use air_interpreter_interface::RunParameters; diff --git a/air/src/preparation_step/errors.rs b/air/src/preparation_step/errors.rs index b6bc15f8..23661b53 100644 --- a/air/src/preparation_step/errors.rs +++ b/air/src/preparation_step/errors.rs @@ -16,6 +16,8 @@ use crate::ToErrorCode; use air_interpreter_data::data_version; +use air_interpreter_data::verification::DataVerifierError; +use air_interpreter_data::CidStoreVerificationError; use air_interpreter_data::Versions; use serde_json::Error as SerdeJsonError; @@ -84,6 +86,14 @@ pub enum PreparationError { #[from] error: fluence_keypair::error::DecodingError, }, + + /// Failed to verify CidStore contents of the current data. + #[error(transparent)] + CidStoreVerificationError(#[from] CidStoreVerificationError), + + /// Failed to check peers' signatures. + #[error(transparent)] + DataSignatureCheckError(#[from] DataVerifierError), } impl ToErrorCode for PreparationError { diff --git a/air/src/preparation_step/mod.rs b/air/src/preparation_step/mod.rs index 5488de3b..b5c61f16 100644 --- a/air/src/preparation_step/mod.rs +++ b/air/src/preparation_step/mod.rs @@ -22,5 +22,7 @@ pub use errors::PreparationError; pub use interpreter_versions::interpreter_version; pub use interpreter_versions::min_supported_version; +pub(crate) use preparation::parse_data; pub(crate) use preparation::prepare; +pub(crate) use preparation::ParsedDataPair; pub(crate) use preparation::PreparationDescriptor; diff --git a/air/src/preparation_step/preparation.rs b/air/src/preparation_step/preparation.rs index 99d03955..c0709579 100644 --- a/air/src/preparation_step/preparation.rs +++ b/air/src/preparation_step/preparation.rs @@ -21,6 +21,7 @@ use crate::execution_step::TraceHandler; use air_interpreter_data::InterpreterData; use air_interpreter_interface::RunParameters; +use air_interpreter_signatures::SignatureStore; use air_parser::ast::Instruction; use fluence_keypair::KeyFormat; use fluence_keypair::KeyPair; @@ -37,35 +38,54 @@ pub(crate) struct PreparationDescriptor<'ctx, 'i> { pub(crate) keypair: KeyPair, } -/// Parse and prepare supplied data and AIR script. +pub(crate) struct ParsedDataPair { + pub(crate) prev_data: InterpreterData, + pub(crate) current_data: InterpreterData, +} + +/// Parse data and check its version. #[tracing::instrument(skip_all)] -pub(crate) fn prepare<'i>( - prev_data: &[u8], - current_data: &[u8], - raw_air: &'i str, - call_results: &[u8], - run_parameters: RunParameters, -) -> PreparationResult> { +pub(crate) fn parse_data(prev_data: &[u8], current_data: &[u8]) -> PreparationResult { let prev_data = try_to_data(prev_data)?; let current_data = try_to_data(current_data)?; check_version_compatibility(¤t_data)?; + Ok(ParsedDataPair { + prev_data, + current_data, + }) +} + +/// Parse and prepare supplied data and AIR script. +#[tracing::instrument(skip_all)] +pub(crate) fn prepare<'i>( + prev_data: InterpreterData, + current_data: InterpreterData, + raw_air: &'i str, + call_results: &[u8], + run_parameters: RunParameters, + signature_store: SignatureStore, +) -> PreparationResult> { let air: Instruction<'i> = *air_parser::parse(raw_air).map_err(PreparationError::AIRParseError)?; let prev_ingredients = ExecCtxIngredients { last_call_request_id: prev_data.last_call_request_id, cid_info: prev_data.cid_info, - signature_store: prev_data.signatures, }; let current_ingredients = ExecCtxIngredients { last_call_request_id: current_data.last_call_request_id, cid_info: current_data.cid_info, - signature_store: current_data.signatures, }; - let exec_ctx = make_exec_ctx(prev_ingredients, current_ingredients, call_results, &run_parameters)?; + let exec_ctx = make_exec_ctx( + prev_ingredients, + current_ingredients, + call_results, + signature_store, + &run_parameters, + )?; let trace_handler = TraceHandler::from_trace(prev_data.trace, current_data.trace); let key_format = KeyFormat::try_from(run_parameters.key_format)?; @@ -81,7 +101,7 @@ pub(crate) fn prepare<'i>( Ok(result) } -fn try_to_data(raw_data: &[u8]) -> PreparationResult { +pub(crate) fn try_to_data(raw_data: &[u8]) -> PreparationResult { // treat empty slice as an empty data, // it allows abstracting from an internal format for an empty data if raw_data.is_empty() { @@ -103,16 +123,23 @@ fn make_exec_ctx( prev_ingredients: ExecCtxIngredients, current_ingredients: ExecCtxIngredients, call_results: &[u8], + signature_store: SignatureStore, run_parameters: &RunParameters, ) -> PreparationResult> { let call_results = serde_json::from_slice(call_results) .map_err(|e| PreparationError::call_results_de_failed(call_results.to_vec(), e))?; - let ctx = ExecutionCtx::new(prev_ingredients, current_ingredients, call_results, run_parameters); + let ctx = ExecutionCtx::new( + prev_ingredients, + current_ingredients, + call_results, + signature_store, + run_parameters, + ); Ok(ctx) } -fn check_version_compatibility(data: &InterpreterData) -> PreparationResult<()> { +pub(crate) fn check_version_compatibility(data: &InterpreterData) -> PreparationResult<()> { if &data.versions.interpreter_version < super::min_supported_version() { return Err(PreparationError::UnsupportedInterpreterVersion { actual_version: data.versions.interpreter_version.clone(), diff --git a/air/src/runner.rs b/air/src/runner.rs index a147bbf8..d7c81d8a 100644 --- a/air/src/runner.rs +++ b/air/src/runner.rs @@ -16,8 +16,12 @@ use crate::execution_step::ExecutableInstruction; use crate::farewell_step as farewell; +use crate::preparation_step::parse_data; use crate::preparation_step::prepare; +use crate::preparation_step::ParsedDataPair; use crate::preparation_step::PreparationDescriptor; +use crate::signing_step::sign_produced_cids; +use crate::verification_step::verify; use air_interpreter_interface::InterpreterOutcome; use air_interpreter_interface::RunParameters; @@ -50,20 +54,45 @@ pub fn execute_air( #[allow(clippy::result_large_err)] fn execute_air_impl( air: String, - prev_data: Vec, - data: Vec, + raw_prev_data: Vec, + raw_current_data: Vec, params: RunParameters, call_results: Vec, ) -> Result { + let ParsedDataPair { + prev_data, + current_data, + } = match parse_data(&raw_prev_data, &raw_current_data) { + Ok(parsed_datas) => parsed_datas, + // return the prev data in case of errors + Err(error) => return Err(farewell::from_uncatchable_error(raw_prev_data, error)), + }; + + // TODO currently we use particle ID, but it should be changed to signature, + // as partical ID can be equally replayed + let salt = params.particle_id.clone(); + let signature_store = match verify(&prev_data, ¤t_data, &salt) { + Ok(signature_store) => signature_store, + // return the prev data in case of errors + Err(error) => return Err(farewell::from_uncatchable_error(raw_prev_data, error)), + }; + let PreparationDescriptor { mut exec_ctx, mut trace_handler, air, keypair, - } = match prepare(&prev_data, &data, air.as_str(), &call_results, params) { + } = match prepare( + prev_data, + current_data, + air.as_str(), + &call_results, + params, + signature_store, + ) { Ok(descriptor) => descriptor, // return the prev data in case of errors - Err(error) => return Err(farewell::from_uncatchable_error(prev_data, error)), + Err(error) => return Err(farewell::from_uncatchable_error(raw_prev_data, error)), }; // match here is used instead of map_err, because the compiler can't determine that @@ -73,6 +102,17 @@ fn execute_air_impl( tracing::Level::INFO, "execute", ); + + match sign_produced_cids( + &mut exec_ctx.peer_cid_tracker, + &mut exec_ctx.signature_store, + &salt, + &keypair, + ) { + Ok(()) => {} + Err(error) => return Err(farewell::from_uncatchable_error(raw_prev_data, error)), + } + measure!( match exec_result { Ok(_) => farewell::from_success_result(exec_ctx, trace_handler, &keypair), @@ -81,7 +121,7 @@ fn execute_air_impl( Err(farewell::from_execution_error(exec_ctx, trace_handler, error, &keypair)) } // return the prev data in case of any trace errors - Err(error) => Err(farewell::from_uncatchable_error(prev_data, error)), + Err(error) => Err(farewell::from_uncatchable_error(raw_prev_data, error)), }, tracing::Level::INFO, "farewell", diff --git a/air/src/signing_step.rs b/air/src/signing_step.rs new file mode 100644 index 00000000..2804a0c8 --- /dev/null +++ b/air/src/signing_step.rs @@ -0,0 +1,48 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::ExecutionError; + +use air_interpreter_signatures::{PeerCidTracker, SignatureStore}; + +#[cfg(feature = "gen_signatures")] +#[tracing::instrument(skip_all)] +pub(crate) fn sign_produced_cids( + signature_tracker: &mut PeerCidTracker, + signature_store: &mut SignatureStore, + salt: &str, + keypair: &fluence_keypair::KeyPair, +) -> Result<(), ExecutionError> { + use crate::UncatchableError; + + let signature = signature_tracker + .gen_signature(salt, keypair) + .map_err(UncatchableError::SigningError)?; + let public_key = keypair.public().into(); + signature_store.put(public_key, signature); + Ok(()) +} + +#[cfg(not(feature = "gen_signatures"))] +#[tracing::instrument(skip_all)] +pub(crate) fn sign_produced_cids( + _signature_tracker: &mut PeerCidTracker, + _signature_store: &mut SignatureStore, + _salt: &str, + _keypair: &fluence_keypair::KeyPair, +) -> Result<(), ExecutionError> { + Ok(()) +} diff --git a/air/src/verification_step.rs b/air/src/verification_step.rs new file mode 100644 index 00000000..78f4ccf2 --- /dev/null +++ b/air/src/verification_step.rs @@ -0,0 +1,51 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use air_interpreter_data::InterpreterData; +use air_interpreter_signatures::SignatureStore; + +// TODO replace with VerificationError +use crate::PreparationError; + +#[cfg(feature = "check_signatures")] +#[tracing::instrument(skip_all)] +pub(crate) fn verify( + prev_data: &InterpreterData, + current_data: &InterpreterData, + salt: &str, +) -> Result { + use air_interpreter_data::verification; + + current_data.cid_info.verify()?; + + let prev_data_verifier = verification::DataVerifier::new(prev_data, salt)?; + let current_data_verifier = verification::DataVerifier::new(current_data, salt)?; + // prev_data is always correct, check only current_data + current_data_verifier.verify()?; + + let signature_store = prev_data_verifier.merge(current_data_verifier)?; + Ok(signature_store) +} + +#[cfg(not(feature = "check_signatures"))] +#[tracing::instrument(skip_all)] +pub(crate) fn verify( + _prev_data: &InterpreterData, + _current_data: &InterpreterData, + _salt: &str, +) -> Result { + Ok(<_>::default()) +} diff --git a/air/tests/test_module/features/cid/canon.rs b/air/tests/test_module/features/cid/canon.rs index 0597b9b9..74d56c55 100644 --- a/air/tests/test_module/features/cid/canon.rs +++ b/air/tests/test_module/features/cid/canon.rs @@ -19,34 +19,37 @@ use air::UncatchableError::ValueForCidNotFound; use air_interpreter_cid::CID; use air_interpreter_data::{CidStore, CidTracker}; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; use pretty_assertions::assert_eq; #[test] fn test_canon_ok() { - let init_peer_id = "init_peer_id"; + let init_peer_name = "init_peer_id"; let script = format!( r#"(seq (seq (ap 42 $stream) - (call "{init_peer_id}" ("serv" "func") [] $stream)) ; ok = "to canon" - (canon "{init_peer_id}" $stream #canon) + (call "{init_peer_name}" ("serv" "func") [] $stream)) ; ok = "to canon" + (canon "{init_peer_name}" $stream #canon) )"# ); let executor = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap(); - let result = executor.execute_one(init_peer_id).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &script).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let data = data_from_result(&result); let mut cid_state = ExecutionCidState::new(); + let init_peer_id = at(init_peer_name); + let stream_exec_state = stream_tracked!( "to canon", 1, cid_state, - peer = init_peer_id, + peer_name = init_peer_name, service = "serv..0", function = "func" ); @@ -98,33 +101,36 @@ fn test_canon_ok() { #[test] fn test_canon_ok_multi() { - let init_peer_id = "init_peer_id"; - let other_peer_id = "other_peer_id"; + let init_peer_name = "init_peer_id"; + let other_peer_name = "other_peer_id"; let script = format!( r#"(seq (seq - (call "{init_peer_id}" ("serv" "func") [] $stream) ; ok = "to canon" - (call "{other_peer_id}" ("other_serv" "other_func") [] $stream) ; ok = "other" + (call "{init_peer_name}" ("serv" "func") [] $stream) ; ok = "to canon" + (call "{other_peer_name}" ("other_serv" "other_func") [] $stream) ; ok = "other" ) - (canon "{init_peer_id}" $stream #canon) + (canon "{init_peer_name}" $stream #canon) )"# ); let executor = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap(); - let _result1 = executor.execute_one(init_peer_id).unwrap(); - let _result2 = executor.execute_one(other_peer_id).unwrap(); - let result3 = executor.execute_one(init_peer_id).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &script).unwrap(); + let _result1 = executor.execute_one(init_peer_name).unwrap(); + let _result2 = executor.execute_one(other_peer_name).unwrap(); + let result3 = executor.execute_one(init_peer_name).unwrap(); let data = data_from_result(&result3); + let init_peer_id = at(init_peer_name); + let other_peer_id = at(other_peer_name); + let mut cid_state = ExecutionCidState::new(); let stream_state_1 = stream_tracked!( "to canon", 0, cid_state, - peer = init_peer_id, + peer_name = init_peer_name, service = "serv..0", function = "func" ); @@ -134,7 +140,7 @@ fn test_canon_ok_multi() { "other", 1, cid_state, - peer = other_peer_id, + peer_name = other_peer_name, service = "other_serv..1", function = "other_func" ); @@ -310,7 +316,7 @@ fn test_canon_tetraplet_not_found() { "function_name": "func", "json_path": "", "peer_pk": "peer_1", - "service_id": "serv", + "service_id": "serv..0", }, }] }), @@ -318,7 +324,7 @@ fn test_canon_tetraplet_not_found() { ), ]; - let missing_cid = "bagaaieracu6twiik6az3cosyzlplrscon3ek6rnu3lkjnflibphqkw6kcdiq"; + let missing_cid = "bagaaierawgvzxeomczgjfgaf7jhbap27kqihlzm4i4na42uoi36lgzfrzwdq"; let tetraplet_store: CidStore<_> = cid_state.tetraplet_tracker.into(); assert!(tetraplet_store.get(&CID::<_>::new(missing_cid)).is_some()); @@ -332,7 +338,7 @@ fn test_canon_tetraplet_not_found() { let result = call_vm!(vm, <_>::default(), air_script, vec![], cur_data); let expected_error = ValueForCidNotFound("tetraplet", String::from(missing_cid)); - assert!(check_error(&result, expected_error)); + assert!(check_error(&result, expected_error), "{}", result.error_message); } #[test] diff --git a/air/tests/test_module/features/cid/mod.rs b/air/tests/test_module/features/cid/mod.rs index a4ea6024..02285b43 100644 --- a/air/tests/test_module/features/cid/mod.rs +++ b/air/tests/test_module/features/cid/mod.rs @@ -69,34 +69,36 @@ fn test_correct_cid() { #[test] fn test_scalar_cid() { - let vm_peer_id = "vm_peer_id"; + let vm_peer_name = "vm_peer_id"; let annotated_air_script = format!( r#" (seq - (call "{vm_peer_id}" ("service" "call1") [] x) ; ok="hi" - (call "{vm_peer_id}" ("service" "call2") [] y) ; ok="ipld" + (call "{vm_peer_name}" ("service" "call1") [] x) ; ok="hi" + (call "{vm_peer_name}" ("service" "call2") [] y) ; ok="ipld" )"# ); - let executor = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id), &annotated_air_script) - .unwrap(); + let executor = AirScriptExecutor::from_annotated( + TestRunParameters::from_init_peer_id(vm_peer_name), + &annotated_air_script, + ) + .unwrap(); - let result = executor.execute_one(vm_peer_id).unwrap(); + let result = executor.execute_one(vm_peer_name).unwrap(); let data = data_from_result(&result); let mut cid_state = ExecutionCidState::new(); let expected_trace = vec![ scalar_tracked!( "hi", cid_state, - peer = vm_peer_id, + peer_name = vm_peer_name, service = "service..0", function = "call1" ), scalar_tracked!( "ipld", cid_state, - peer = vm_peer_id, + peer_name = vm_peer_name, service = "service..1", function = "call2" ), @@ -114,20 +116,22 @@ fn test_scalar_cid() { #[test] fn test_stream_cid() { - let vm_peer_id = "vm_peer_id"; + let vm_peer_name = "vm_peer_id"; let annotated_air_script = format!( r#" (seq - (call "{vm_peer_id}" ("service" "call1") [] $x) ; ok="hi" - (call "{vm_peer_id}" ("service" "call2") [] $x) ; ok="ipld" + (call "{vm_peer_name}" ("service" "call1") [] $x) ; ok="hi" + (call "{vm_peer_name}" ("service" "call2") [] $x) ; ok="ipld" )"# ); - let executor = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id), &annotated_air_script) - .unwrap(); + let executor = AirScriptExecutor::from_annotated( + TestRunParameters::from_init_peer_id(vm_peer_name), + &annotated_air_script, + ) + .unwrap(); - let result = executor.execute_one(vm_peer_id).unwrap(); + let result = executor.execute_one(vm_peer_name).unwrap(); let data = data_from_result(&result); let mut cid_state = ExecutionCidState::new(); let expected_trace = vec![ @@ -135,7 +139,7 @@ fn test_stream_cid() { "hi", 0, cid_state, - peer = vm_peer_id, + peer_name = vm_peer_name, service = "service..0", function = "call1" ), @@ -143,7 +147,7 @@ fn test_stream_cid() { "ipld", 1, cid_state, - peer = vm_peer_id, + peer_name = vm_peer_name, service = "service..1", function = "call2" ), diff --git a/air/tests/test_module/features/errors/error.rs b/air/tests/test_module/features/errors/error.rs index 90a69fbd..5f264e41 100644 --- a/air/tests/test_module/features/errors/error.rs +++ b/air/tests/test_module/features/errors/error.rs @@ -54,7 +54,7 @@ fn fail_with_rebubble_error() { scalar_tracked!( expected_error_json.clone(), cid_tracker, - peer = peer_id, + peer_name = peer_id, service = "m..0", function = "f1", args = [expected_error_json] @@ -62,7 +62,7 @@ fn fail_with_rebubble_error() { scalar_tracked!( no_error_object(), cid_tracker, - peer = peer_id, + peer_name = peer_id, service = "m..1", function = "f2", args = [no_error_object()] @@ -120,7 +120,7 @@ fn rebubble_error_from_xor_right_branch() { scalar_tracked!( inner_expected_error_json.clone(), cid_tracker, - peer = peer_id, + peer_name = peer_id, service = "m..0", function = "f1", args = [inner_expected_error_json] @@ -128,7 +128,7 @@ fn rebubble_error_from_xor_right_branch() { scalar_tracked!( outer_expected_error_json.clone(), cid_tracker, - peer = peer_id, + peer_name = peer_id, service = "m..1", function = "f2", args = [outer_expected_error_json] @@ -136,12 +136,14 @@ fn rebubble_error_from_xor_right_branch() { scalar_tracked!( no_error_object(), cid_tracker, - peer = peer_id, + peer_name = peer_id, service = "m..2", function = "f3", args = [no_error_object()] ), ]; - assert_eq!(actual_trace, expected_trace,); + print_trace(&result.last().unwrap(), ""); + + assert_eq!(actual_trace, expected_trace); } diff --git a/air/tests/test_module/features/errors/last_error.rs b/air/tests/test_module/features/errors/last_error.rs index 931bd83b..f4b27ed3 100644 --- a/air/tests/test_module/features/errors/last_error.rs +++ b/air/tests/test_module/features/errors/last_error.rs @@ -517,7 +517,7 @@ fn undefined_last_error_errcode() { let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( errcode_lambda_output.clone(), cid_state, - peer = local_peer_id, + peer_name = local_peer_id, service = "test..0", function = "error_code", args = vec![errcode_lambda_output] @@ -545,7 +545,7 @@ fn undefined_last_error_msg_errcode() { let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( message_lambda_output.clone(), cid_state, - peer = local_peer_id, + peer_name = local_peer_id, service = "test..0", function = "message", args = vec![message_lambda_output] diff --git a/air/tests/test_module/features/lambda/functors.rs b/air/tests/test_module/features/lambda/functors.rs index 6ebf8237..2026eaa9 100644 --- a/air/tests/test_module/features/lambda/functors.rs +++ b/air/tests/test_module/features/lambda/functors.rs @@ -30,16 +30,16 @@ fn length_functor_for_array_scalar() { ) "#; - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let actual_trace = trace_from_result(&result); let expected_trace = vec![ - scalar!(json!([1, 1, 1]), peer = init_peer_id, service = "..0"), - unused!(3, peer = init_peer_id, args = vec![3], service = "..1"), + scalar!(json!([1, 1, 1]), peer_name = init_peer_name, service = "..0"), + unused!(3, peer_name = init_peer_name, args = vec![3], service = "..1"), ]; assert_eq!(actual_trace, expected_trace); } @@ -56,11 +56,11 @@ fn length_functor_for_non_array_scalar() { "# ); - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); check_error( &result, CatchableError::LengthFunctorAppliedToNotArray(json!(result_jvalue)), @@ -81,27 +81,29 @@ fn length_functor_for_stream() { ) "#; - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let actual_trace = trace_from_result(&result); + let init_peer_id = executor.resolve_name(init_peer_name).to_string(); + let expected_trace = vec![ executed_state::ap(0), executed_state::ap(0), executed_state::canon(json!({ - "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "values": [ { "result": 1, - "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "trace_pos": 0, }, { "result": 1, - "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "trace_pos": 1, }, ] @@ -122,16 +124,18 @@ fn length_functor_for_empty_stream() { ) "#; - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let actual_trace = trace_from_result(&result); + let init_peer_id = executor.resolve_name(init_peer_name).to_string(); + let expected_trace = vec![ executed_state::canon( - json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, + json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "values": []} ), ), unused!(0, peer = init_peer_id, service = "..0", args = vec![0]), @@ -153,20 +157,22 @@ fn length_functor_for_canon_stream() { ) "#; - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let actual_trace = trace_from_result(&result); + let init_peer_id = executor.resolve_name(init_peer_name).to_string(); + let expected_trace = vec![ executed_state::ap(0), executed_state::ap(0), executed_state::canon( - json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, - "values": [{"result": 1, "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, "trace_pos": 0}, - {"result": 1, "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, "trace_pos": 1} + json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, + "values": [{"result": 1, "tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "trace_pos": 0}, + {"result": 1, "tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "trace_pos": 1} ]} ), ), unused!(2, peer = init_peer_id, service = "..0", args = vec![2]), @@ -185,16 +191,18 @@ fn length_functor_for_empty_canon_stream() { ) "#; - let init_peer_id = "init_peer_id"; - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script) + let init_peer_name = "init_peer_id"; + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), script) .expect("invalid test AIR script"); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); let actual_trace = trace_from_result(&result); + let init_peer_id = executor.resolve_name(init_peer_name).to_string(); + let expected_trace = vec![ executed_state::canon( - json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": "init_peer_id", "service_id": ""}, "values": []} ), + json!({"tetraplet": {"function_name": "", "json_path": "", "peer_pk": init_peer_id, "service_id": ""}, "values": []} ), ), unused!(0, peer = init_peer_id, service = "..0", args = vec![0]), ]; diff --git a/air/tests/test_module/features/signatures.rs b/air/tests/test_module/features/signatures.rs index ae9f0c5b..0192440a 100644 --- a/air/tests/test_module/features/signatures.rs +++ b/air/tests/test_module/features/signatures.rs @@ -14,441 +14,12 @@ * limitations under the License. */ -use air_interpreter_signatures::SignatureTracker; -use air_test_framework::ephemeral::PeerId; -use air_test_framework::AirScriptExecutor; -use air_test_utils::key_utils::derive_dummy_keypair; -use air_test_utils::prelude::*; -use air_test_utils::test_runner::TestRunParameters; +#[cfg(feature = "check_signatures")] +mod attacks; +#[cfg(feature = "check_signatures")] +mod corruption; -#[test] -fn test_signature_empty() { - let script = "(null)"; - let init_peer_id = "init_peer_id"; - let (keypair, _) = derive_dummy_keypair(init_peer_id); +mod runtime; - let exec = ::new( - TestRunParameters::from_init_peer_id(init_peer_id), - vec![], - vec![PeerId::from(init_peer_id)].into_iter(), - script, - ) - .unwrap(); - let res = exec.execute_one(init_peer_id).unwrap(); - assert_eq!(res.ret_code, 0, "{:?}", res); - - let expected_signature: air_interpreter_signatures::Signature = keypair.sign(b"[]").unwrap().into(); - - let data = data_from_result(&res); - let signature = data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); -} - -#[test] -fn test_signature_call_var() { - let init_peer_id = "init_peer_id"; - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let air_script = format!( - r#" - (call "{init_peer_id}" ("" "") [] var) ; ok = "ok" - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - assert_eq!(res.ret_code, 0, "{:?}", res); - let data = data_from_result(&res); - - let expected_call_state = scalar!("ok", peer = init_peer_id, service = "..0"); - let expected_cid = extract_service_result_cid(&expected_call_state); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); -} - -#[test] -fn test_signature_call_stream() { - let init_peer_id = "init_peer_id"; - let air_script = format!( - r#" - (call "{init_peer_id}" ("" "") [] $var) ; ok = "ok" - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - assert_eq!(res.ret_code, 0, "{:?}", res); - let data = data_from_result(&res); - - let expected_call_state = stream!("ok", 0, peer = init_peer_id, service = "..0"); - let expected_cid = extract_service_result_cid(&expected_call_state); - - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); -} - -#[test] -fn test_signature_call_ununsed() { - let init_peer_id = "init_peer_id"; - let air_script = format!( - r#" - (call "{init_peer_id}" ("" "") []) ; ok = "ok" - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - assert_eq!(res.ret_code, 0, "{:?}", res); - let data = data_from_result(&res); - - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let mut expected_tracker = SignatureTracker::new(); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); -} - -#[test] -fn test_signature_call_merged() { - let init_peer_id = "init_peer_id"; - let other_peer_id = "other_peer_id"; - - let air_script = format!( - r#" - (seq - (call "{init_peer_id}" ("" "") [] x) ; ok = "res0" - (seq - (call "{other_peer_id}" ("" "") [] y) ; ok = "res1" - (call "{init_peer_id}" ("" "") [] z) ; ok = "res2" - )) - "# - ); - - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - let _ = exec.execute_one(init_peer_id).unwrap(); - let _ = exec.execute_one(other_peer_id).unwrap(); - let res2 = exec.execute_one(init_peer_id).unwrap(); - let data2 = data_from_result(&res2); - - let expected_call_state0 = scalar!("res0", peer = init_peer_id, service = "..0"); - let expected_cid0 = extract_service_result_cid(&expected_call_state0); - let expected_call_state2 = scalar!("res2", peer = init_peer_id, service = "..2"); - let expected_cid2 = extract_service_result_cid(&expected_call_state2); - - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_cid0); - expected_tracker.register(init_peer_id, &expected_cid2); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = data2.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data2.signatures); -} - -#[test] -fn test_signature_call_double() { - // Test that if some CID appears twice in the call result, it is accounted twice. - let init_peer_id = "init_peer_id"; - let air_script = format!( - r#" - (seq - (seq (ap 1 $s) (ap 2 $s)) - (fold $s i - (seq - (call "{init_peer_id}" ("" "") [] var) ; ok = "ok" - (next i)))) - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - assert_eq!(res.ret_code, 0, "{:?}", res); - let data = data_from_result(&res); - - let expected_call_state = scalar!("ok", peer = init_peer_id, service = "..0"); - let expected_cid = extract_service_result_cid(&expected_call_state); - - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let mut unexpected_tracker = SignatureTracker::new(); - unexpected_tracker.register(init_peer_id, &expected_cid); - let unexpected_signature = unexpected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_cid); - expected_tracker.register(init_peer_id, &expected_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - assert_ne!(expected_signature, unexpected_signature, "test is incorrect"); - - let signature = data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); -} - -#[test] -fn test_signature_canon_basic() { - let init_peer_id = "init_peer_id"; - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let air_script = format!( - r#" - (seq - (call "{init_peer_id}" ("serv" "func") [] items) ; ok = [1, 2, 3] - (seq - (fold items i - (seq - (ap i $stream) - (next i))) - (canon "{init_peer_id}" $stream #canon))) - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let last_result = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - let last_data = data_from_result(&last_result); - - let expected_call_result = scalar!( - json!([1, 2, 3]), - peer = init_peer_id, - service = "serv..0", - function = "func" - ); - let expected_call_result_cid = extract_service_result_cid(&expected_call_result); - - let expected_canon_state = canon(json!({ - "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, - "values": [{ - "result": 1, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[0]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }, { - "result": 2, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[1]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }, { - "result": 3, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[2]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }] - })); - let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_canon_cid); - expected_tracker.register(init_peer_id.to_owned(), &expected_call_result_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = last_data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); -} - -#[test] -fn test_signature_canon_merge() { - let init_peer_id = "init_peer_id"; - let other_peer_id = "other_peer_id"; - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let air_script = format!( - r#" - (seq - (seq - (call "{init_peer_id}" ("serv" "func") [] items) ; ok = [1, 2, 3] - (seq - (fold items i - (seq - (ap i $stream) - (next i))) - (canon "{init_peer_id}" $stream #canon))) - (seq - (call "{other_peer_id}" ("" "") []) ; ok = "ok" - (call "{init_peer_id}" ("" "") []))) ; ok = "ok" - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - exec.execute_all(init_peer_id); - exec.execute_one(other_peer_id); - - let last_result = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - let last_data = data_from_result(&last_result); - - let expected_call_result = scalar!( - json!([1, 2, 3]), - peer = init_peer_id, - service = "serv..0", - function = "func" - ); - let expected_call_result_cid = extract_service_result_cid(&expected_call_result); - - let expected_canon_state = canon(json!({ - "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, - "values": [{ - "result": 1, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[0]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }, { - "result": 2, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[1]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }, { - "result": 3, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[2]", - }, - "provenance": Provenance::service_result(expected_call_result_cid.clone()), - }] - })); - let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_canon_cid); - expected_tracker.register(init_peer_id, &expected_call_result_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = last_data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); -} - -#[test] -fn test_signature_canon_result() { - // this test checks that call result in canon doesn't lead to repeadted accounting of the call result - let init_peer_id = "init_peer_id"; - let (keypair, _) = derive_dummy_keypair(init_peer_id); - - let air_script = format!( - r#" - (seq - (seq - (call "{init_peer_id}" ("serv" "func") [] items) ; ok = [1, 2, 3] - (fold items i - (seq - (ap i $stream) - (next i)))) - (seq - (call "{init_peer_id}" ("serv" "func2") [] $stream) ; ok = 42 - (canon "{init_peer_id}" $stream #canon))) - "# - ); - let exec = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap(); - - let last_result = exec.execution_iter(init_peer_id).unwrap().last().unwrap(); - let last_data = data_from_result(&last_result); - - let expected_call_result1 = scalar!( - json!([1, 2, 3]), - peer = init_peer_id, - service = "serv..0", - function = "func" - ); - let expected_call_result_cid1 = extract_service_result_cid(&expected_call_result1); - - let expected_call_result2 = stream!( - json!(42), - 1, - peer = init_peer_id, - service = "serv..1", - function = "func2" - ); - let expected_call_result_cid2 = extract_service_result_cid(&expected_call_result2); - - let expected_canon_state = canon(json!({ - "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, - "values": [{ - "result": 1, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[0]", - }, - "provenance": Provenance::service_result(expected_call_result_cid1.clone()), - }, { - "result": 2, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[1]", - }, - "provenance": Provenance::service_result(expected_call_result_cid1.clone()), - }, { - "result": 3, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..0", - "function_name": "func", - "json_path": ".$.[2]", - }, - "provenance": Provenance::service_result(expected_call_result_cid1.clone()), - }, { - "result": 42, - "tetraplet": { - "peer_pk": init_peer_id, - "service_id": "serv..1", - "function_name": "func2", - "json_path": "", - }, - "provenance": Provenance::service_result(expected_call_result_cid2.clone()), - }] - })); - let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); - - let mut expected_tracker = SignatureTracker::new(); - expected_tracker.register(init_peer_id, &expected_call_result_cid1); - expected_tracker.register(init_peer_id, &expected_call_result_cid2); - expected_tracker.register(init_peer_id, &expected_canon_cid); - let expected_signature = expected_tracker.into_signature(init_peer_id, &keypair).unwrap(); - - let signature = last_data.signatures.get(&keypair.public().into()); - assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); -} +#[cfg(feature = "gen_signatures")] +mod signing; diff --git a/air/tests/test_module/features/signatures/attacks.rs b/air/tests/test_module/features/signatures/attacks.rs new file mode 100644 index 00000000..ca9822ef --- /dev/null +++ b/air/tests/test_module/features/signatures/attacks.rs @@ -0,0 +1,457 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use air::{ExecutionCidState, PreparationError}; +use air_interpreter_signatures::{PeerCidTracker, PublicKey, SignatureStore}; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; +use semver::Version; + +/// This testing modules assert AquaVM resistance to various attacks. +/// +/// CID store manipulations are checked in the `corruption` module. + +#[test] +fn test_attack_injection_current_peer_scalar() { + // injecting a value that arrives to peer who does the next step + let (alice_keypair, alice_peer_id) = derive_dummy_keypair("alice_peer"); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair("mallory_peer"); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{alice_peer_id}" ("" "") [] z)) + "# + ); + + let mut alice_cid_state = ExecutionCidState::new(); + let mut alice_signature_tracker = PeerCidTracker::new(alice_peer_id.clone()); + let mut alice_signature_store = SignatureStore::new(); + + let alice_call_1 = scalar_tracked!("good result", &mut alice_cid_state, peer = &alice_peer_id); + alice_signature_tracker.register(&*alice_peer_id, &extract_service_result_cid(&alice_call_1)); + let alice_trace = vec![alice_call_1.clone()]; + let alice_signature = alice_signature_tracker.gen_signature("", &alice_keypair).unwrap(); + alice_signature_store.put(alice_keypair.public().into(), alice_signature); + + let mut mallory_cid_state = alice_cid_state.clone(); + let mut mallory_signature_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + let mut mallory_signature_store = alice_signature_store.clone(); + + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = scalar_tracked!("fake result", &mut mallory_cid_state, peer = &alice_peer_id); + mallory_signature_tracker.register(&*mallory_peer_id, &extract_service_result_cid(&mallory_call_2)); + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + let mallory_signature = mallory_signature_tracker.gen_signature("", &mallory_keypair).unwrap(); + mallory_signature_store.put(mallory_keypair.public().into(), mallory_signature); + + let alice_data = InterpreterData::from_execution_result( + alice_trace.into(), + alice_cid_state.into(), + alice_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + mallory_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = serde_json::to_vec(&alice_data).unwrap(); + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = alice_avm + .call(&air_script, prev_data, cur_data, test_run_params) + .unwrap(); + assert_ne!(res.ret_code, 0); +} + +#[test] +fn test_attack_injection_current_peer_stream() { + // injecting a value that arrives to peer who does the next step + let alice_peer_id = "alice_peer"; + let mallory_peer_id = "mallory_peer"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{alice_peer_id}" ("" "") [] $z)) + "# + ); + + let mut alice_cid_state = ExecutionCidState::default(); + + let alice_call_1 = scalar_tracked!("good result", &mut alice_cid_state, peer = &alice_peer_id); + + let mut alice_signature_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_signature_tracker.register(&*alice_peer_id, &extract_service_result_cid(&alice_call_1)); + let mut alice_signature_store = SignatureStore::new(); + let alice_signature = alice_signature_tracker.gen_signature("", &alice_keypair).unwrap(); + alice_signature_store.put(alice_pk, alice_signature); + + let alice_trace = vec![alice_call_1.clone()]; + + let mut mallory_cid_state = alice_cid_state.clone(); + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = stream_tracked!("fake result", 0, &mut mallory_cid_state, peer = &alice_peer_id); + + let mut mallory_signature_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_signature_tracker.register(&*mallory_peer_id, &extract_service_result_cid(&mallory_call_2)); + let mut mallory_signature_store = SignatureStore::new(); + let mallory_signature = mallory_signature_tracker.gen_signature("", &mallory_keypair).unwrap(); + mallory_signature_store.put(mallory_pk, mallory_signature); + + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + + let alice_data = InterpreterData::from_execution_result( + alice_trace.into(), + alice_cid_state.into(), + alice_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + mallory_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = serde_json::to_vec(&alice_data).unwrap(); + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = alice_avm + .call(&air_script, prev_data, cur_data, test_run_params) + .unwrap(); + assert_ne!(res.ret_code, 0, "{}", res.error_message); +} + +#[test] +fn test_attack_injection_current_injection_unused() { + // injecting a value that arrives to peer who does the next step + let alice_peer_id = "alice_peer"; + let mallory_peer_id = "mallory_peer"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{alice_peer_id}" ("" "") [])) + "# + ); + + let mut alice_cid_state = ExecutionCidState::default(); + let alice_call_1 = scalar_tracked!("good result", &mut alice_cid_state, peer = &alice_peer_id); + let alice_trace = vec![alice_call_1.clone()]; + + let mut mallory_cid_state = alice_cid_state.clone(); + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = unused!("fake result", peer = &alice_peer_id); + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + + let mut alice_signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_service_result_cid(&mallory_trace[0])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + alice_signature_store.put(alice_pk, alice_signature); + + let mallory_signature_store = alice_signature_store.clone(); + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[1])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + alice_signature_store.put(mallory_pk, mallory_signature); + + let alice_data = InterpreterData::from_execution_result( + alice_trace.into(), + alice_cid_state.into(), + alice_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + mallory_signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = serde_json::to_vec(&alice_data).unwrap(); + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = alice_avm + .call(&air_script, prev_data, cur_data, test_run_params) + .unwrap(); + + assert_ne!(res.ret_code, 0, "{}", res.error_message); +} + +#[test] +fn test_attack_injection_other_peer_scalar() { + // injecting a value that arrives to peer who does the next step + let alice_peer_id = "alice_peer"; + let bob_peer_id = "bob_peer"; + let mallory_peer_id = "mallory_peer"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [] z)) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::default(); + + let alice_call_1 = scalar_tracked!("good result", &mut mallory_cid_state, peer = &alice_peer_id); + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = scalar_tracked!("fake result", &mut mallory_cid_state, peer = &alice_peer_id); + + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_service_result_cid(&mallory_trace[0])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[1])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm_with_key::(bob_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + assert_ne!(res.ret_code, 0); +} + +#[test] +fn test_attack_injection_other_peer_stream() { + // injecting a value that arrives to peer who does the next step + let alice_peer_id = "alice_peer"; + let bob_peer_id = "bob_peer"; + let mallory_peer_id = "mallory_peer"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [] $z)) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::default(); + + let alice_call_1 = scalar_tracked!("good result", &mut mallory_cid_state, peer = &alice_peer_id); + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = stream_tracked!("fake result", 0, &mut mallory_cid_state, peer = &alice_peer_id); + + let mut signature_store = SignatureStore::new(); + let mut alice_signature_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_signature_tracker.register(&*alice_peer_id, &extract_service_result_cid(&alice_call_1)); + let alice_signature = alice_signature_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_signature_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_signature_tracker.register(&*mallory_peer_id, &extract_service_result_cid(&mallory_call_2)); + let mallory_signature = mallory_signature_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm_with_key::(bob_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + assert_ne!(res.ret_code, 0, "{}", res.error_message); +} + +#[test] +fn test_attack_injection_other_peer_unused() { + // injecting a value that arrives to peer who does the next step + let alice_peer_id = "alice_peer"; + let bob_peer_id = "bob_peer"; + let mallory_peer_id = "mallory_peer"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [])) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::default(); + + let alice_call_1 = scalar_tracked!("good result", &mut mallory_cid_state, peer = &alice_peer_id); + let mallory_call_2 = scalar_tracked!("valid result", &mut mallory_cid_state, peer = &mallory_peer_id); + let fake_call_3 = unused!("fake result", peer = &alice_peer_id); + + let mut signature_store = SignatureStore::new(); + let mut alice_signature_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_signature_tracker.register(&*alice_peer_id, &extract_service_result_cid(&alice_call_1)); + let alice_signature = alice_signature_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_signature_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_signature_tracker.register(&*mallory_peer_id, &extract_service_result_cid(&mallory_call_2)); + let mallory_signature = mallory_signature_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_trace = vec![alice_call_1, mallory_call_2, fake_call_3]; + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + mallory_cid_state.into(), + signature_store, + 2, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm_with_key::(bob_keypair, unit_call_service()); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + // please not that such injection is not caught + assert_eq!(res.ret_code, 0, "{}", res.error_message); +} + +#[test] +fn test_attack_replay() { + let alice_name = "alice_peer_id"; + let bob_name = "bob_peer_id"; + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, _) = derive_dummy_keypair(bob_name); + + let air_script = format!( + r#"(seq + (call "{alice_peer_id}" ("" "") [] y) + (call "bob" ("" "") [] z))"# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair.clone(), unit_call_service()); + let mut bob_avm = create_avm_with_key::(bob_keypair.clone(), unit_call_service()); + + let run_params1 = TestRunParameters::from_init_peer_id(&alice_peer_id).with_particle_id("first_particle"); + let run_params2 = run_params1.clone(); + + let res1 = alice_avm.call(&air_script, "", "", run_params1.clone()).unwrap(); + let res2 = alice_avm.call(&air_script, "", "", run_params2).unwrap(); + + assert_eq!(res1.ret_code, 0, "test validity check failed: {}", res1.error_message); + assert_eq!(res1, res2, "test validity check failed"); + + let res_bob = bob_avm.call(&air_script, "", res1.data.clone(), run_params1).unwrap(); + assert_eq!( + res_bob.ret_code, 0, + "test validity check failed: {}", + res_bob.error_message + ); + + let mallory_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id).with_particle_id("second_particle"); + + let res_replay = bob_avm.call(&air_script, "", res1.data, mallory_run_params).unwrap(); + + let dalek_error = ed25519_dalek::ed25519::Error::from_source("Verification equation was not satisfied"); + let nested_error = fluence_keypair::error::VerificationError::Ed25519( + dalek_error, + // will break if signed data format changes + "3eSuF5uvjQvmvSC6vu5Kmb8bJcswXhNUcqsSG9USEad1oNgnpAcBNm2maM4Tyk3BsLYnwdwNEj4KiJ4pqence7XF".to_owned(), + "6m3zmtymxDL56KBpNgKqc7QiGRuWuxr82bG2q7dF5xCD".to_owned(), + ); + let cids: Vec> = vec!["bagaaieraazcwm4lxybe4pwlisvcgpv4mii63nxouogvf4ihkmz762mnhea7a".into()]; + let expected = PreparationError::DataSignatureCheckError(verification::DataVerifierError::SignatureMismatch { + error: nested_error.into(), + cids, + peer_id: alice_peer_id, + }); + assert_error_eq!(&res_replay, expected); +} diff --git a/air/tests/test_module/features/signatures/corruption.rs b/air/tests/test_module/features/signatures/corruption.rs new file mode 100644 index 00000000..21940832 --- /dev/null +++ b/air/tests/test_module/features/signatures/corruption.rs @@ -0,0 +1,536 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/// This test module asserts CID store verification functionality: +/// values forged in the CID stores. +use air::ExecutionCidState; +use air::PreparationError; +use air_interpreter_signatures::PeerCidTracker; +use air_interpreter_signatures::PublicKey; +use air_interpreter_signatures::SignatureStore; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; +use pretty_assertions::assert_eq; +use semver::Version; + +#[test] +fn test_attack_replace_value() { + // Bob gets a trace where call result value is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [] z)) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let mallory_trace = vec![ + scalar_tracked!("alice", &mut mallory_cid_state, peer = &alice_peer_id), + scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id), + ]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + for (_cid, val) in mallory_cid_info["value_store"].as_object_mut().unwrap().iter_mut() { + if *val == "alice" { + *val = "evil".into(); + cnt += 1; + } + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_service_result_cid(&mallory_trace[0])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[1])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "serde_json::value::Value", + cid_repr: "bagaaierabjifaczkgq2745dsq57lelki2r5cfduunmfzsgvxiavi2ahwwmwq".to_owned(), + }) + ); +} + +#[test] +fn test_attack_replace_tetraplet() { + // Bob gets a trace where call result tetraplet is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [] z)) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let mallory_trace = vec![ + scalar_tracked!("alice", &mut mallory_cid_state, peer = &alice_peer_id), + scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id), + ]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + for (_cid, tetraplet_val) in mallory_cid_info["tetraplet_store"].as_object_mut().unwrap().iter_mut() { + if tetraplet_val["peer_pk"] == alice_peer_id { + tetraplet_val["service_id"] = json!("evil"); + cnt += 1; + } + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_service_result_cid(&mallory_trace[0])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[1])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "marine_call_parameters::SecurityTetraplet", + cid_repr: "bagaaierapisclqfeq36psuo6uxiazvcash32pndayqlwxrqchii2ykxerfba".to_owned(), + }) + ); +} + +#[test] +fn test_attack_replace_call_result() { + // Bob gets a trace where call result is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("" "") [] x) + (call "{mallory_peer_id}" ("" "") [] y)) + (call "{bob_peer_id}" ("" "") [] z)) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let alice_trace_1 = scalar_tracked!("alice", &mut mallory_cid_state, peer = &alice_peer_id); + let alice_trace_1_cid = (*extract_service_result_cid(&alice_trace_1)).clone().into_inner(); + + let mallory_trace = vec![ + alice_trace_1, + scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id), + ]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + for (cid, service_cid_val) in mallory_cid_info["service_result_store"] + .as_object_mut() + .unwrap() + .iter_mut() + { + if *cid == alice_trace_1_cid { + service_cid_val["argument_hash"] = "42".into(); + cnt += 1; + } + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_service_result_cid(&mallory_trace[0])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[1])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "air_interpreter_data::executed_state::ServiceResultCidAggregate", + cid_repr: "bagaaierarbji6ebokx3pantdp6xg2l57bhdj7pmlydwe2wnbd6fdkatg7xka".to_owned(), + }) + ); +} + +#[test] +fn test_attack_replace_canon_value() { + // Bob gets a trace where canon value is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (ap 1 $s) + (canon "{alice_peer_id}" $s #c)) + (seq + (call "{mallory_peer_id}" ("" "") [] x) + (call "{bob_peer_id}" ("" "") []))) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let alice_canon_cid = canon_tracked( + json!({ + "tetraplet": {"peer_pk": &alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "tetraplet": {"peer_pk": &alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "result": 1, + "provenance": Provenance::literal(), + }] + }), + &mut mallory_cid_state, + ); + let mallory_call_result_state = scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id); + let mallory_call_result_cid = extract_service_result_cid(&mallory_call_result_state); + let mallory_trace = vec![ap(0), ap(0), alice_canon_cid, mallory_call_result_state]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + for (_cid, canon_element) in mallory_cid_info["canon_element_store"] + .as_object_mut() + .unwrap() + .iter_mut() + { + canon_element["provenance"] = json!(Provenance::service_result(mallory_call_result_cid.clone())); + cnt += 1; + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_canon_result_cid(&mallory_trace[2])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[3])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "air_interpreter_data::executed_state::CanonCidAggregate", + cid_repr: "bagaaierayrb7yu6tvdofr3d7tvuzx7fb3uve27rqty4ckzy7ox66oicuhjjq".to_owned(), + }) + ); +} + +#[test] +fn test_attack_replace_canon_result_values() { + // Bob gets a trace where canon result is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (seq + (ap 1 $s) + (ap 2 $s)) + (canon "{alice_peer_id}" $s #c)) + (seq + (call "{mallory_peer_id}" ("" "") [] x) + (call "{bob_peer_id}" ("" "") []))) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let alice_canon_cid = canon_tracked( + json!({ + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "result": 1, + "provenance": Provenance::literal(), + }, { + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "result": 2, + "provenance": Provenance::literal(), + }] + }), + &mut mallory_cid_state, + ); + let mallory_trace = vec![ + ap(0), + ap(0), + alice_canon_cid, + scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id), + ]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + for (_cid, canon_result) in mallory_cid_info["canon_result_store"] + .as_object_mut() + .unwrap() + .iter_mut() + { + canon_result["values"].as_array_mut().unwrap().pop(); + cnt += 1; + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_canon_result_cid(&mallory_trace[2])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[3])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "air_interpreter_data::executed_state::CanonResultCidAggregate", + cid_repr: "bagaaieratezrhuyz2eprlmiidxywv6ir2tmswlxycad37noykg3p5oxhs5tq".to_owned(), + }) + ); +} + +#[test] +fn test_attack_replace_canon_result_tetraplet() { + // Bob gets a trace where canon result is edited by Mallory. + let alice_peer_id = "alice"; + let bob_peer_id = "bob"; + let mallory_peer_id = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_peer_id); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_peer_id); + let alice_pk: PublicKey = alice_keypair.public().into(); + let mallory_pk: PublicKey = mallory_keypair.public().into(); + + let air_script = format!( + r#" + (seq + (seq + (seq + (ap 1 $s) + (ap 2 $s)) + (canon "{alice_peer_id}" $s #c)) + (seq + (call "{mallory_peer_id}" ("" "") [] x) + (call "{bob_peer_id}" ("" "") []))) + "# + ); + + let mut mallory_cid_state = ExecutionCidState::new(); + let alice_canon_cid = canon_tracked( + json!({ + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "result": 1, + "provenance": Provenance::literal(), + }, { + "tetraplet": {"peer_pk": alice_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "result": 2, + "provenance": Provenance::literal(), + }] + }), + &mut mallory_cid_state, + ); + let mallory_trace = vec![ + ap(0), + ap(0), + alice_canon_cid, + scalar_tracked!("mallory", &mut mallory_cid_state, peer = &mallory_peer_id), + ]; + + let mut mallory_cid_info = serde_json::to_value::(mallory_cid_state.into()).unwrap(); + let mut cnt = 0; + + let mut fake_cid = None; + for (tetraplet_cid, tetraplet) in mallory_cid_info["tetraplet_store"].as_object().unwrap() { + if tetraplet["peer_pk"] == mallory_peer_id { + fake_cid = Some(tetraplet_cid.clone()); + } + } + assert!(fake_cid.is_some(), "test is invalid"); + for (_cid, canon_result) in mallory_cid_info["canon_result_store"].as_object_mut().unwrap() { + canon_result["tetraplet"] = json!(fake_cid.clone().unwrap()); + cnt += 1; + } + assert_eq!(cnt, 1, "test validity failed"); + + let mut signature_store = SignatureStore::new(); + + let mut alice_cid_tracker = PeerCidTracker::new(alice_peer_id.clone()); + alice_cid_tracker.register(&alice_peer_id, &extract_canon_result_cid(&mallory_trace[2])); + let alice_signature = alice_cid_tracker.gen_signature("", &alice_keypair).unwrap(); + signature_store.put(alice_pk, alice_signature); + + let mut mallory_cid_tracker = PeerCidTracker::new(mallory_peer_id.clone()); + mallory_cid_tracker.register(&mallory_peer_id, &extract_service_result_cid(&mallory_trace[3])); + let mallory_signature = mallory_cid_tracker.gen_signature("", &mallory_keypair).unwrap(); + signature_store.put(mallory_pk, mallory_signature); + + let mallory_data = InterpreterData::from_execution_result( + mallory_trace.into(), + serde_json::from_value(mallory_cid_info).unwrap(), + signature_store, + 0, + Version::new(1, 1, 1), + ); + + let mut bob_avm = create_avm(unit_call_service(), bob_peer_id); + let test_run_params = TestRunParameters::from_init_peer_id(alice_peer_id); + let prev_data = ""; + let cur_data = serde_json::to_vec(&mallory_data).unwrap(); + let res = bob_avm.call(&air_script, prev_data, cur_data, test_run_params).unwrap(); + + assert_error_eq!( + &res, + PreparationError::CidStoreVerificationError(CidStoreVerificationError::MismatchError { + type_name: "air_interpreter_data::executed_state::CanonResultCidAggregate", + cid_repr: "bagaaieratezrhuyz2eprlmiidxywv6ir2tmswlxycad37noykg3p5oxhs5tq".to_owned(), + }) + ); +} diff --git a/air/tests/test_module/features/signatures/runtime.rs b/air/tests/test_module/features/signatures/runtime.rs new file mode 100644 index 00000000..80be564e --- /dev/null +++ b/air/tests/test_module/features/signatures/runtime.rs @@ -0,0 +1,334 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use air::UncatchableError; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; + +/// This test module asserts various runtime safety checks, for example, +/// that actual calls' tetraplets are compared to stored one. + +#[test] +fn test_runtime_executed_call_argument_hash() { + // Mallory gets a trace where there are two calls that differ only by argument_hash. + // Can it swap them successfully? + let alice_name = "alice"; + let bob_name = "bob"; + let mallory_name = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_name); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_name); + + let test_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("service" "func") [42] x) + (call "{alice_peer_id}" ("service" "func") [43] y)) + (seq + (call "{mallory_peer_id}" ("" "") [42] z) + (call "{bob_peer_id}" ("service" "secret") [x y z] w))) + "# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, echo_call_service()); + let mut bob_avm = create_avm_with_key::(bob_keypair, echo_call_service()); + let mut mallory_avm = create_avm_with_key::(mallory_keypair, echo_call_service()); + + let alice_res = alice_avm.call(&air_script, "", "", test_run_params.clone()).unwrap(); + let mallory_res = mallory_avm + .call(&air_script, "", alice_res.data, test_run_params.clone()) + .unwrap(); + let mut mallory_data = data_from_result(&mallory_res); + let mut mallory_raw_trace: Vec<_> = mallory_data.trace.iter().cloned().collect(); + mallory_raw_trace.swap(0, 1); + mallory_data.trace = ExecutionTrace::from(mallory_raw_trace); + + let mallory_data = serde_json::to_vec(&mallory_data).unwrap(); + + let bob_res = bob_avm.call(air_script, "", mallory_data, test_run_params).unwrap(); + assert_error_eq!( + &bob_res, + UncatchableError::InstructionParametersMismatch { + param: "call argument_hash", + expected_value: "bagaaieraxbvr5ii3fajw7zjcjoor4maxw7x3ndkpvyfzbreubyga7cntsb5a".to_owned(), + stored_value: "bagaaieralq23ubl3bxyggvynq44g6p5233fla7hrr2jrspeamml4zu2iapvq".to_owned(), + } + ); +} + +#[test] +fn test_runtime_executed_call_tetraplet() { + // Mallory gets a trace where there are two calls that differ only by argument_hash. + // Can it swap them successfully? + let alice_name = "alice"; + let bob_name = "bob"; + let mallory_name = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_name); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_name); + + let test_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id); + + let air_script = format!( + r#" + (seq + (seq + (call "{alice_peer_id}" ("service1" "func") [42] x) + (call "{alice_peer_id}" ("service2" "func") [42] y)) + (seq + (call "{mallory_peer_id}" ("" "") [42] z) + (call "{bob_peer_id}" ("service" "secret") [x y z] w))) + "# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, echo_call_service()); + let mut bob_avm = create_avm_with_key::(bob_keypair, echo_call_service()); + let mut mallory_avm = create_avm_with_key::(mallory_keypair, echo_call_service()); + + let alice_res = alice_avm.call(&air_script, "", "", test_run_params.clone()).unwrap(); + let mallory_res = mallory_avm + .call(&air_script, "", alice_res.data, test_run_params.clone()) + .unwrap(); + let mut mallory_data = data_from_result(&mallory_res); + let mut mallory_raw_trace: Vec<_> = mallory_data.trace.iter().cloned().collect(); + mallory_raw_trace.swap(0, 1); + mallory_data.trace = ExecutionTrace::from(mallory_raw_trace); + + let mallory_data = serde_json::to_vec(&mallory_data).unwrap(); + + let bob_res = bob_avm.call(air_script, "", mallory_data, test_run_params).unwrap(); + let expected_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{alice_peer_id}","#, + r#" service_id: "service1", function_name: "func", json_path: "" }}"# + ), + alice_peer_id = alice_peer_id, + ); + let stored_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{alice_peer_id}","#, + r#" service_id: "service2", function_name: "func", json_path: "" }}"#, + ), + alice_peer_id = alice_peer_id, + ); + assert_error_eq!( + &bob_res, + UncatchableError::InstructionParametersMismatch { + param: "call tetraplet", + // please note that order is important here: if values are swapped, then the error is + // handled by Executed branch, not Failed branch + expected_value, + stored_value, + } + ); +} + +#[test] +fn test_runtime_executed_failed_argument_hash() { + // Mallory gets a trace where there are two calls that differ only by argument_hash. + // Can it swap them successfully? + let alice_name = "alice"; + let bob_name = "bob"; + let mallory_name = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_name); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_name); + + let test_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id); + + let air_script = format!( + r#" + (seq + (seq + (xor + (call "{alice_peer_id}" ("service" "func") [42] x) + (null)) + (call "{alice_peer_id}" ("service" "func") [43] y)) + (seq + (call "{mallory_peer_id}" ("" "") [42] z) + (call "{bob_peer_id}" ("service" "secret") [x y z] w))) + "# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, fallible_call_service_by_arg(43)); + let mut bob_avm = create_avm_with_key::(bob_keypair, echo_call_service()); + let mut mallory_avm = create_avm_with_key::(mallory_keypair, echo_call_service()); + + let alice_res = alice_avm.call(&air_script, "", "", test_run_params.clone()).unwrap(); + let mallory_res = mallory_avm + .call(&air_script, "", alice_res.data, test_run_params.clone()) + .unwrap(); + let mut mallory_data = data_from_result(&mallory_res); + let mut mallory_raw_trace: Vec<_> = mallory_data.trace.iter().cloned().collect(); + mallory_raw_trace.swap(0, 1); + mallory_data.trace = ExecutionTrace::from(mallory_raw_trace); + + let mallory_data = serde_json::to_vec(&mallory_data).unwrap(); + + let bob_res = bob_avm.call(air_script, "", mallory_data, test_run_params).unwrap(); + assert_error_eq!( + &bob_res, + UncatchableError::InstructionParametersMismatch { + param: "call argument_hash", + // please note that order is important here: if values are swapped, then the error is + // handled by Executed branch, not Failed branch + expected_value: "bagaaieraxbvr5ii3fajw7zjcjoor4maxw7x3ndkpvyfzbreubyga7cntsb5a".to_owned(), + stored_value: "bagaaieralq23ubl3bxyggvynq44g6p5233fla7hrr2jrspeamml4zu2iapvq".to_owned(), + } + ); +} + +#[test] +fn test_runtime_failed_call_tetraplet() { + // Mallory gets a trace where there are two calls that differ only by argument_hash. + // Can it swap them successfully? + let alice_name = "alice"; + let bob_name = "bob"; + let mallory_name = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_name); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_name); + + let test_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id); + + let air_script = format!( + r#" + (seq + (seq + (xor + (call "{alice_peer_id}" ("service1" "func") [42] x) + (null)) + (call "{alice_peer_id}" ("service2" "func") [42] y)) + (seq + (call "{mallory_peer_id}" ("" "") [42] z) + (call "{bob_peer_id}" ("service" "secret") [x y z] w))) + "# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, fallible_call_service("service1")); + let mut bob_avm = create_avm_with_key::(bob_keypair, echo_call_service()); + let mut mallory_avm = create_avm_with_key::(mallory_keypair, echo_call_service()); + + let alice_res = alice_avm.call(&air_script, "", "", test_run_params.clone()).unwrap(); + let mallory_res = mallory_avm + .call(&air_script, "", alice_res.data, test_run_params.clone()) + .unwrap(); + let mut mallory_data = data_from_result(&mallory_res); + let mut mallory_raw_trace: Vec<_> = mallory_data.trace.iter().cloned().collect(); + mallory_raw_trace.swap(0, 1); + mallory_data.trace = ExecutionTrace::from(mallory_raw_trace); + + let mallory_data = serde_json::to_vec(&mallory_data).unwrap(); + + let bob_res = bob_avm.call(air_script, "", mallory_data, test_run_params).unwrap(); + let expected_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{alice_peer_id}","#, + r#" service_id: "service1", function_name: "func", json_path: "" }}"# + ), + alice_peer_id = alice_peer_id, + ); + let stored_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{alice_peer_id}","#, + r#" service_id: "service2", function_name: "func", json_path: "" }}"#, + ), + alice_peer_id = alice_peer_id, + ); + assert_error_eq!( + &bob_res, + UncatchableError::InstructionParametersMismatch { + param: "call tetraplet", + // please note that order is important here: if values are swapped, then the error is + // handled by Executed branch, not Failed branch + expected_value, + stored_value, + } + ); +} + +#[test] +fn test_runtime_canon_tetraplet() { + let alice_name = "alice"; + let bob_name = "bob"; + let mallory_name = "mallory"; + + let (alice_keypair, alice_peer_id) = derive_dummy_keypair(alice_name); + let (bob_keypair, bob_peer_id) = derive_dummy_keypair(bob_name); + let (mallory_keypair, mallory_peer_id) = derive_dummy_keypair(mallory_name); + + let test_run_params = TestRunParameters::from_init_peer_id(&alice_peer_id); + + let air_script = format!( + r#" + (seq + (seq + (ap 42 $x) + (ap 43 $x)) + (seq + (seq + (canon "{alice_peer_id}" $x #xa) + (canon "{mallory_peer_id}" $x #xm)) + (call "{bob_peer_id}" ("" "") [#xa #xm] z))) + "# + ); + + let mut alice_avm = create_avm_with_key::(alice_keypair, fallible_call_service("service1")); + let mut bob_avm = create_avm_with_key::(bob_keypair, echo_call_service()); + let mut mallory_avm = create_avm_with_key::(mallory_keypair, echo_call_service()); + + let alice_res = alice_avm.call(&air_script, "", "", test_run_params.clone()).unwrap(); + let mallory_res = mallory_avm + .call(&air_script, "", alice_res.data, test_run_params.clone()) + .unwrap(); + let mut mallory_data = data_from_result(&mallory_res); + let mut mallory_raw_trace: Vec<_> = mallory_data.trace.iter().cloned().collect(); + mallory_raw_trace.swap(2, 3); + mallory_data.trace = ExecutionTrace::from(mallory_raw_trace); + + let mallory_data = serde_json::to_vec(&mallory_data).unwrap(); + + let bob_res = bob_avm.call(air_script, "", mallory_data, test_run_params).unwrap(); + let expected_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{alice_peer_id}","#, + r#" service_id: "", function_name: "", json_path: "" }}"# + ), + alice_peer_id = alice_peer_id, + ); + let stored_value = format!( + concat!( + r#"SecurityTetraplet {{ peer_pk: "{mallory_peer_id}","#, + r#" service_id: "", function_name: "", json_path: "" }}"#, + ), + mallory_peer_id = mallory_peer_id, + ); + assert_error_eq!( + &bob_res, + UncatchableError::InstructionParametersMismatch { + param: "canon tetraplet", + expected_value, + stored_value, + } + ); +} diff --git a/air/tests/test_module/features/signatures/signing.rs b/air/tests/test_module/features/signatures/signing.rs new file mode 100644 index 00000000..1aa6035c --- /dev/null +++ b/air/tests/test_module/features/signatures/signing.rs @@ -0,0 +1,455 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use air_interpreter_signatures::PeerCidTracker; +use air_test_framework::{ephemeral::PeerId, AirScriptExecutor}; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; +use air_test_utils::test_runner::TestRunParameters; + +#[test] +fn test_signature_empty() { + let script = "(null)"; + let init_peer_name = "init_peer_id"; + let (keypair, _) = derive_dummy_keypair(init_peer_name); + + let exec = ::new( + TestRunParameters::from_init_peer_id(init_peer_name), + vec![], + vec![PeerId::from(init_peer_name)].into_iter(), + script, + ) + .unwrap(); + let res = exec.execute_one(init_peer_name).unwrap(); + assert_eq!(res.ret_code, 0, "{:?}", res); + + let data = borsh::to_vec(&(vec![""; 0], "")).unwrap(); + let expected_signature: air_interpreter_signatures::Signature = keypair.sign(&data).unwrap().into(); + + let data = data_from_result(&res); + let signature = data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); +} + +#[test] +fn test_signature_call_var() { + let init_peer_name = "init_peer_id"; + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let air_script = format!( + r#" + (call "{init_peer_name}" ("" "") [] var) ; ok = "ok" + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let res = exec.execution_iter(init_peer_id.as_str()).unwrap().last().unwrap(); + assert_eq!(res.ret_code, 0, "{:?}", res); + let data = data_from_result(&res); + + let expected_call_state = scalar!("ok", peer = &init_peer_id, service = "..0"); + let expected_cid = extract_service_result_cid(&expected_call_state); + + let mut expected_tracker = PeerCidTracker::new(init_peer_id.clone()); + expected_tracker.register(&init_peer_id, &expected_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); +} + +#[test] +fn test_signature_call_stream() { + let init_peer_name = "init_peer_id"; + let air_script = format!( + r#" + (call "{init_peer_name}" ("" "") [] $var) ; ok = "ok" + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let res = exec.execution_iter(init_peer_name).unwrap().last().unwrap(); + assert_eq!(res.ret_code, 0, "{:?}", res); + let data = data_from_result(&res); + + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let expected_call_state = stream!("ok", 0, peer = &init_peer_id, service = "..0"); + let expected_cid = extract_service_result_cid(&expected_call_state); + + let mut expected_tracker = PeerCidTracker::new(init_peer_id.clone()); + expected_tracker.register(&init_peer_id, &expected_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); +} + +#[test] +fn test_signature_call_unused() { + let init_peer_name = "init_peer_id"; + let air_script = format!( + r#" + (call "{init_peer_name}" ("" "") []) ; ok = "ok" + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let res = exec.execution_iter(init_peer_name).unwrap().last().unwrap(); + assert_eq!(res.ret_code, 0, "{:?}", res); + let data = data_from_result(&res); + + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let expected_tracker = PeerCidTracker::new(init_peer_id.to_owned()); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); +} + +#[test] +fn test_signature_call_merged() { + let init_peer_name = "init_peer_id"; + let other_peer_name = "other_peer_id"; + + let air_script = format!( + r#" + (seq + (call "{init_peer_name}" ("" "") [] x) ; ok = "res0" + (seq + (call "{other_peer_name}" ("" "") [] y) ; ok = "res1" + (call "{init_peer_name}" ("" "") [] z) ; ok = "res2" + )) + "# + ); + + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + let _ = exec.execute_one(init_peer_name).unwrap(); + let _ = exec.execute_one(other_peer_name).unwrap(); + let res2 = exec.execute_one(init_peer_name).unwrap(); + let data2 = data_from_result(&res2); + + let expected_call_state0 = scalar!("res0", peer_name = init_peer_name, service = "..0"); + let expected_cid0 = extract_service_result_cid(&expected_call_state0); + let expected_call_state2 = scalar!("res2", peer_name = init_peer_name, service = "..2"); + let expected_cid2 = extract_service_result_cid(&expected_call_state2); + + let (keypair, _) = derive_dummy_keypair(init_peer_name); + + let mut expected_tracker = PeerCidTracker::new(init_peer_name.to_owned()); + expected_tracker.register(init_peer_name, &expected_cid0); + expected_tracker.register(init_peer_name, &expected_cid2); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = data2.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data2.signatures); +} + +#[test] +fn test_signature_call_twice() { + // Test that if some CID appears twice in the call result, it is accounted twice. + let init_peer_name = "init_peer_id"; + + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let air_script = format!( + r#" + (seq + (seq (ap 1 $s) (ap 2 $s)) + (fold $s i + (seq + (call "{init_peer_name}" ("" "") [] var) ; ok = "ok" + (next i)))) + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let res = exec.execution_iter(init_peer_id.as_str()).unwrap().last().unwrap(); + assert_eq!(res.ret_code, 0, "{:?}", res); + let data = data_from_result(&res); + + let expected_call_state = scalar!("ok", peer = &init_peer_id, service = "..0"); + let expected_cid = extract_service_result_cid(&expected_call_state); + + let mut unexpected_tracker = PeerCidTracker::new(init_peer_id.to_owned()); + unexpected_tracker.register(&init_peer_id, &expected_cid); + let unexpected_signature = unexpected_tracker.gen_signature("", &keypair).unwrap(); + + let mut expected_tracker = PeerCidTracker::new(init_peer_id.to_owned()); + expected_tracker.register(&init_peer_id, &expected_cid); + expected_tracker.register(&init_peer_id, &expected_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + assert_ne!(expected_signature, unexpected_signature, "test is incorrect"); + + let signature = data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", data.signatures); +} + +#[test] +fn test_signature_canon_basic() { + let init_peer_name = "init_peer_id"; + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let air_script = format!( + r#" + (seq + (call "{init_peer_name}" ("serv" "func") [] items) ; ok = [1, 2, 3] + (seq + (fold items i + (seq + (ap i $stream) + (next i))) + (canon "{init_peer_name}" $stream #canon))) + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let last_result = exec.execution_iter(init_peer_name).unwrap().last().unwrap(); + let last_data = data_from_result(&last_result); + + let expected_call_result = scalar!( + json!([1, 2, 3]), + peer = &init_peer_id, + service = "serv..0", + function = "func" + ); + let expected_call_result_cid = extract_service_result_cid(&expected_call_result); + + let expected_canon_state = canon(json!({ + "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "result": 1, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[0]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }, { + "result": 2, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[1]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }, { + "result": 3, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[2]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }] + })); + let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); + + let mut expected_tracker = PeerCidTracker::new(init_peer_name.to_owned()); + expected_tracker.register(init_peer_name, &expected_canon_cid); + expected_tracker.register(init_peer_name, &expected_call_result_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = last_data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); +} + +#[test] +fn test_signature_canon_merge() { + let init_peer_name = "init_peer_id"; + let other_peer_name = "other_peer_id"; + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let air_script = format!( + r#" + (seq + (seq + (call "{init_peer_name}" ("serv" "func") [] items) ; ok = [1, 2, 3] + (seq + (fold items i + (seq + (ap i $stream) + (next i))) + (canon "{init_peer_name}" $stream #canon))) + (seq + (call "{other_peer_name}" ("" "") []) ; ok = "ok" + (call "{init_peer_name}" ("" "") []))) ; ok = "ok" + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + exec.execute_all(init_peer_name); + exec.execute_one(other_peer_name); + + let last_result = exec.execution_iter(init_peer_name).unwrap().last().unwrap(); + let last_data = data_from_result(&last_result); + + let expected_call_result = scalar!( + json!([1, 2, 3]), + peer = &init_peer_id, + service = "serv..0", + function = "func" + ); + let expected_call_result_cid = extract_service_result_cid(&expected_call_result); + + let expected_canon_state = canon(json!({ + "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "result": 1, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[0]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }, { + "result": 2, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[1]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }, { + "result": 3, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[2]", + }, + "provenance": Provenance::service_result(expected_call_result_cid.clone()), + }] + })); + let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); + + let mut expected_tracker = PeerCidTracker::new(init_peer_name.to_owned()); + expected_tracker.register(init_peer_name, &expected_canon_cid); + expected_tracker.register(init_peer_name, &expected_call_result_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = last_data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); +} + +#[test] +fn test_signature_canon_result() { + // this test checks that call result in canon doesn't lead to repeadted accounting of the call result + let init_peer_name = "init_peer_id"; + let (keypair, init_peer_id) = derive_dummy_keypair(init_peer_name); + + let air_script = format!( + r#" + (seq + (seq + (call "{init_peer_name}" ("serv" "func") [] items) ; ok = [1, 2, 3] + (fold items i + (seq + (ap i $stream) + (next i)))) + (seq + (call "{init_peer_name}" ("serv" "func2") [] $stream) ; ok = 42 + (canon "{init_peer_name}" $stream #canon))) + "# + ); + let exec = + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), &air_script).unwrap(); + + let last_result = exec.execution_iter(init_peer_name).unwrap().last().unwrap(); + let last_data = data_from_result(&last_result); + + let expected_call_result1 = scalar!( + json!([1, 2, 3]), + peer = &init_peer_id, + service = "serv..0", + function = "func" + ); + let expected_call_result_cid1 = extract_service_result_cid(&expected_call_result1); + + let expected_call_result2 = stream!( + json!(42), + 1, + peer = &init_peer_id, + service = "serv..1", + function = "func2" + ); + let expected_call_result_cid2 = extract_service_result_cid(&expected_call_result2); + + let expected_canon_state = canon(json!({ + "tetraplet": {"peer_pk": init_peer_id, "service_id": "", "function_name": "", "json_path": ""}, + "values": [{ + "result": 1, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[0]", + }, + "provenance": Provenance::service_result(expected_call_result_cid1.clone()), + }, { + "result": 2, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[1]", + }, + "provenance": Provenance::service_result(expected_call_result_cid1.clone()), + }, { + "result": 3, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..0", + "function_name": "func", + "json_path": ".$.[2]", + }, + "provenance": Provenance::service_result(expected_call_result_cid1.clone()), + }, { + "result": 42, + "tetraplet": { + "peer_pk": init_peer_id, + "service_id": "serv..1", + "function_name": "func2", + "json_path": "", + }, + "provenance": Provenance::service_result(expected_call_result_cid2.clone()), + }] + })); + let expected_canon_cid = extract_canon_result_cid(&expected_canon_state); + + let mut expected_tracker = PeerCidTracker::new(init_peer_name.to_owned()); + expected_tracker.register(init_peer_name, &expected_call_result_cid1); + expected_tracker.register(init_peer_name, &expected_call_result_cid2); + expected_tracker.register(init_peer_name, &expected_canon_cid); + let expected_signature = expected_tracker.gen_signature("", &keypair).unwrap(); + + let signature = last_data.signatures.get(&keypair.public().into()); + assert_eq!(signature, Some(&expected_signature), "{:?}", last_data); +} diff --git a/air/tests/test_module/features/streams/compactification.rs b/air/tests/test_module/features/streams/compactification.rs index b2ea8b97..2f1875f7 100644 --- a/air/tests/test_module/features/streams/compactification.rs +++ b/air/tests/test_module/features/streams/compactification.rs @@ -21,19 +21,19 @@ use air_test_utils::*; #[test] fn global_streams_are_compactified() { - let peer_id = "peer_id"; + let peer_name = "peer_id"; let service_result = "service_result"; let script = format!( r#" (seq (ap 1 $stream) - (call "{peer_id}" ("" "") [] $stream) ; ok = "{service_result}" + (call "{peer_name}" ("" "") [] $stream) ; ok = "{service_result}" ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_id), &script).unwrap(); - let result = executor.execute_all(peer_id).unwrap(); + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_name), &script).unwrap(); + let result = executor.execute_all(peer_name).unwrap(); let actual_trace = trace_from_result(result.last().unwrap()); let mut cid_state = ExecutionCidState::new(); @@ -43,7 +43,7 @@ fn global_streams_are_compactified() { service_result, 1, cid_state, - peer = peer_id, + peer_name = peer_name, service = "..0", function = "" ), @@ -54,22 +54,22 @@ fn global_streams_are_compactified() { #[test] fn global_stream_maps_are_compactified() { - let peer_id = "peer_id"; + let peer_name = "peer_id"; let service_result = "service_result"; let script = format!( r#" (seq (ap (1 1) %stream_map) (seq - (call "{peer_id}" ("" "") [] $stream) ; ok = "{service_result}" + (call "{peer_name}" ("" "") [] $stream) ; ok = "{service_result}" (ap (1 1) %stream_map) ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_id), &script).unwrap(); - let result = executor.execute_all(peer_id).unwrap(); + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_name), &script).unwrap(); + let result = executor.execute_all(peer_name).unwrap(); let actual_trace = trace_from_result(result.last().unwrap()); let mut cid_state = ExecutionCidState::new(); @@ -79,7 +79,7 @@ fn global_stream_maps_are_compactified() { service_result, 0, cid_state, - peer = peer_id, + peer_name = peer_name, service = "..0", function = "" ), @@ -91,21 +91,21 @@ fn global_stream_maps_are_compactified() { #[test] fn local_streams_are_compactified() { - let peer_id = "peer_id"; + let peer_name = "peer_id"; let service_result = "service_result"; let script = format!( r#" (new $stream (seq (ap 1 $stream) - (call "{peer_id}" ("" "") [] $stream) ; ok = "{service_result}" + (call "{peer_name}" ("" "") [] $stream) ; ok = "{service_result}" ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_id), &script).unwrap(); - let result = executor.execute_all(peer_id).unwrap(); + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_name), &script).unwrap(); + let result = executor.execute_all(peer_name).unwrap(); let actual_trace = trace_from_result(result.last().unwrap()); let mut cid_state = ExecutionCidState::new(); @@ -115,7 +115,7 @@ fn local_streams_are_compactified() { service_result, 1, cid_state, - peer = peer_id, + peer_name = peer_name, service = "..0", function = "" ), @@ -126,7 +126,7 @@ fn local_streams_are_compactified() { #[test] fn local_stream_maps_are_compactified() { - let peer_id = "peer_id"; + let peer_name = "peer_id"; let service_result = "service_result"; let script = format!( r#" @@ -134,7 +134,7 @@ fn local_stream_maps_are_compactified() { (seq (ap (1 1) %stream_map) (seq - (call "{peer_id}" ("" "") [] $stream) ; ok = "{service_result}" + (call "{peer_name}" ("" "") [] $stream) ; ok = "{service_result}" (ap (1 1) %stream_map) ) ) @@ -142,8 +142,8 @@ fn local_stream_maps_are_compactified() { "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_id), &script).unwrap(); - let result = executor.execute_all(peer_id).unwrap(); + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(peer_name), &script).unwrap(); + let result = executor.execute_all(peer_name).unwrap(); let actual_trace = trace_from_result(result.last().unwrap()); let mut cid_state = ExecutionCidState::new(); @@ -153,7 +153,7 @@ fn local_stream_maps_are_compactified() { service_result, 0, cid_state, - peer = peer_id, + peer_name = peer_name, service = "..0", function = "" ), diff --git a/air/tests/test_module/features/streams/merging.rs b/air/tests/test_module/features/streams/merging.rs index 1515a04a..4cc5dab3 100644 --- a/air/tests/test_module/features/streams/merging.rs +++ b/air/tests/test_module/features/streams/merging.rs @@ -15,14 +15,14 @@ */ use air_test_framework::AirScriptExecutor; -use air_test_utils::prelude::*; +use air_test_utils::{key_utils::at, prelude::*}; #[test] fn merging_fold_iterations_extensively() { let script = r#" (seq (seq - (call "client" ("get" "data") [] permutations) ; ok = [["p1",[[["p1",1],["p2",2],["p3",3]],[["p1",4],["p3",5],["p2",6]]]],["p2",[[["p2",7],["p1",8],["p3",9]],[["p2",10],["p3",11],["p1",12]]]],["p3",[[["p3",13],["p1",14],["p2",15]],[["p3",16],["p2",17],["p1",18]]]]] + (call "client" ("get" "data") [] permutations) ; ok = [[@"p1",[[[@"p1",1],[@"p2",2],[@"p3",3]],[[@"p1",4],[@"p3",5],[@"p2",6]]]],[@"p2",[[[@"p2",7],[@"p1",8],[@"p3",9]],[[@"p2",10],[@"p3",11],[@"p1",12]]]],[@"p3",[[[@"p3",13],[@"p1",14],[@"p2",15]],[[@"p3",16],[@"p2",17],[@"p1",18]]]]] (seq (fold permutations pair (seq @@ -103,7 +103,7 @@ fn merging_fold_iterations_extensively() { queue.push_back(peer.clone()); } - if peer == "relay" { + if peer == at("relay") { relay_outcomes.push(outcome); } } @@ -131,7 +131,7 @@ fn merging_fold_iterations_extensively_2() { let script = r#" (seq (seq - (call "client" ("get" "data") [] permutations) ; ok = [["p1",[[["p1",1],["p2",2],["p3",3]],[["p1",4],["p3",5],["p2",6]]]],["p2",[[["p2",7],["p1",8],["p3",9]],[["p2",10],["p3",11],["p1",12]]]],["p3",[[["p3",13],["p1",14],["p2",15]],[["p3",16],["p2",17],["p1",18]]]]] + (call "client" ("get" "data") [] permutations) ; ok = [[@"p1",[[[@"p1",1],[@"p2",2],[@"p3",3]],[[@"p1",4],[@"p3",5],[@"p2",6]]]],[@"p2",[[[@"p2",7],[@"p1",8],[@"p3",9]],[[@"p2",10],[@"p3",11],[@"p1",12]]]],[@"p3",[[[@"p3",13],[@"p1",14],[@"p2",15]],[[@"p3",16],[@"p2",17],[@"p1",18]]]]] (seq (seq (fold permutations pair @@ -243,7 +243,7 @@ fn merging_fold_iterations_extensively_2() { } } - if peer == "p1" { + if peer == at("p1") { p1_outcomes.push(outcome); } } diff --git a/air/tests/test_module/features/tetraplets/provenance.rs b/air/tests/test_module/features/tetraplets/provenance.rs index 01ebca66..d0aebb72 100644 --- a/air/tests/test_module/features/tetraplets/provenance.rs +++ b/air/tests/test_module/features/tetraplets/provenance.rs @@ -15,11 +15,11 @@ */ use air_test_framework::AirScriptExecutor; -use air_test_utils::prelude::*; +use air_test_utils::{key_utils::at, prelude::*}; #[test] fn call_result() { - let init_peer_id = "B"; + let init_peer_name = "B"; let air_script = r#" (seq @@ -27,9 +27,9 @@ fn call_result() { (canon "B" $s #c)) "#; let runner = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), air_script).unwrap(); - let result = runner.execute_one(init_peer_id).unwrap(); + let result = runner.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{:?}", result.error_message); let data = data_from_result(&result); @@ -37,12 +37,14 @@ fn call_result() { let val = scalar!( "some_data", - peer = init_peer_id, + peer_name = init_peer_name, service = "service..0", function = "func" ); let val_cid = extract_service_result_cid(&val); + let init_peer_id = at(init_peer_name); + let expected_state = canon(json!({ "tetraplet": { "peer_pk": init_peer_id, @@ -67,7 +69,7 @@ fn call_result() { #[test] fn call_result_iteration() { - let init_peer_id = "A"; + let init_peer_name = "A"; let air_script = r#" (seq @@ -80,17 +82,19 @@ fn call_result_iteration() { (canon "A" $s #c)) "#; let runner = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), air_script).unwrap(); - let result = runner.execute_one(init_peer_id).unwrap(); + let result = runner.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{:?}", result.error_message); let data = data_from_result(&result); let last_state = data.trace.last().unwrap(); + let init_peer_id = at(init_peer_name); + let val = scalar!( json!([10, 11, 12]), - peer = init_peer_id, + peer_name = init_peer_name, service = "service..0", function = "func" ); @@ -138,7 +142,7 @@ fn call_result_iteration() { #[test] fn literal() { - let init_peer_id = "B"; + let init_peer_name = "B"; let air_script = r#" (seq @@ -146,14 +150,16 @@ fn literal() { (canon "B" $s #c)) "#; let runner = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), air_script).unwrap(); - let result = runner.execute_one(init_peer_id).unwrap(); + let result = runner.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{:?}", result.error_message); let data = data_from_result(&result); let last_state = data.trace.last().unwrap(); + let init_peer_id = at(init_peer_name); + let expected_state = canon(json!({ "tetraplet": { "peer_pk": init_peer_id, @@ -178,7 +184,7 @@ fn literal() { #[test] fn canon_in_canon() { - let init_peer_id = "B"; + let init_peer_name = "B"; let air_script = r#" (seq @@ -190,15 +196,17 @@ fn canon_in_canon() { (canon "B" $s #d))) "#; let runner = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), air_script).unwrap(); - let result = runner.execute_one(init_peer_id).unwrap(); + let result = runner.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{:?}", result.error_message); let trace = trace_from_result(&result); let last_state = trace.last().unwrap(); - let val = scalar!(1, peer = init_peer_id, service = "service..0", function = "func"); + let init_peer_id = at(init_peer_name); + + let val = scalar!(1, peer_name = init_peer_name, service = "service..0", function = "func"); let val_cid = extract_service_result_cid(&val); let value_tetraplet = json!({ "peer_pk": init_peer_id, @@ -250,7 +258,7 @@ fn canon_in_canon() { #[test] fn lambda_result_iteration() { - let init_peer_id = "A"; + let init_peer_name = "A"; let air_script = r#" (seq @@ -266,17 +274,19 @@ fn lambda_result_iteration() { (canon "A" $s #c)) "#; let runner = - AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap(); + AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_name), air_script).unwrap(); - let result = runner.execute_one(init_peer_id).unwrap(); + let result = runner.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{:?}", result.error_message); let data = data_from_result(&result); let last_state = data.trace.last().unwrap(); + let init_peer_id = at(init_peer_name); + let val = scalar!( json!([{"field": [10, 11, 12]}]), - peer = init_peer_id, + peer_name = init_peer_name, service = "service..0", function = "func" ); diff --git a/air/tests/test_module/features/tetraplets/security_tetraplets.rs b/air/tests/test_module/features/tetraplets/security_tetraplets.rs index aea61944..47c2eb70 100644 --- a/air/tests/test_module/features/tetraplets/security_tetraplets.rs +++ b/air/tests/test_module/features/tetraplets/security_tetraplets.rs @@ -14,6 +14,7 @@ * limitations under the License. */ +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; use polyplets::SecurityTetraplet; use pretty_assertions::assert_eq; @@ -98,7 +99,7 @@ fn fold_with_inner_call() { #[test] fn fold_stream_with_inner_call() { - let init_peer_id = "init_peer_id"; + let init_peer_name = "init_peer_id"; let air_script = r#" (seq (seq @@ -112,20 +113,22 @@ fn fold_stream_with_inner_call() { (next i)))) "#; let executor = air_test_framework::AirScriptExecutor::from_annotated( - TestRunParameters::from_init_peer_id(init_peer_id), + TestRunParameters::from_init_peer_id(init_peer_name), &air_script, ) .unwrap(); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{}", result.error_message); let data = data_from_result(&result); + let init_peer_id = at(init_peer_name); + let expected_trace = vec![ stream!( json!([[{"peer_pk": init_peer_id, "service_id": "..0", "function_name": "", "json_path": ""}]]), 0, - peer = init_peer_id, + peer = &init_peer_id, service = "..2", args = [42] ), @@ -142,7 +145,7 @@ fn fold_stream_with_inner_call() { #[test] fn fold_canon_with_inner_call() { - let init_peer_id = "init_peer_id"; + let init_peer_name = "init_peer_id"; let air_script = r#" (seq (seq @@ -158,20 +161,22 @@ fn fold_canon_with_inner_call() { (next x))))) "#; let executor = air_test_framework::AirScriptExecutor::from_annotated( - TestRunParameters::from_init_peer_id(init_peer_id), + TestRunParameters::from_init_peer_id(init_peer_name), &air_script, ) .unwrap(); - let result = executor.execute_one(init_peer_id).unwrap(); + let result = executor.execute_one(init_peer_name).unwrap(); assert_eq!(result.ret_code, 0, "{}", result.error_message); let data = data_from_result(&result); + let init_peer_id = at(init_peer_name); + let expected_trace = vec![ stream!( json!([[{"peer_pk": init_peer_id, "service_id": "..0", "function_name": "", "json_path": ""}]]), 0, - peer = init_peer_id, + peer = &init_peer_id, service = "..2", args = [42] ), diff --git a/air/tests/test_module/instructions/ap.rs b/air/tests/test_module/instructions/ap.rs index ff428b2b..ed30337e 100644 --- a/air/tests/test_module/instructions/ap.rs +++ b/air/tests/test_module/instructions/ap.rs @@ -17,7 +17,9 @@ use air::no_error_object; use air::ExecutionCidState; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; +use pretty_assertions::assert_eq; use std::cell::RefCell; use std::rc::Rc; @@ -643,25 +645,27 @@ fn ap_stream_map_with_undefined_last_error() { #[test] fn ap_canon_stream_map_with_string_key_accessor_lambda() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); + let script = format!( r#" (seq (seq (ap ("key" "value1") %map) - (canon "{vm_1_peer_id}" %map #%canon_map) + (canon "{vm_1_peer_name}" %map #%canon_map) ) (seq (ap #%canon_map.$.key scalar) - (call "{vm_1_peer_id}" ("m" "f") [scalar] scalar1) ; behaviour = echo + (call "{vm_1_peer_name}" ("m" "f") [scalar] scalar1) ; behaviour = echo ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); let mut cid_tracker: ExecutionCidState = ExecutionCidState::new(); @@ -692,30 +696,32 @@ fn ap_canon_stream_map_with_string_key_accessor_lambda() { ), ]; - assert_eq!(actual_trace, expected_trace,); + assert_eq!(&*actual_trace, expected_trace,); } #[test] fn ap_canon_stream_map_with_numeric_key_accessor_lambda() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); + let script = format!( r#" (seq (seq (ap (42 "value1") %map) - (canon "{vm_1_peer_id}" %map #%canon_map) + (canon "{vm_1_peer_name}" %map #%canon_map) ) (seq (ap #%canon_map.$.[42] scalar) - (call "{vm_1_peer_id}" ("m" "f") [scalar] scalar1) ; behaviour = echo + (call "{vm_1_peer_name}" ("m" "f") [scalar] scalar1) ; behaviour = echo ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); let mut cid_tracker: ExecutionCidState = ExecutionCidState::new(); @@ -745,7 +751,7 @@ fn ap_canon_stream_map_with_numeric_key_accessor_lambda() { args = [call_arg] ), ]; - assert_eq!(actual_trace, expected_trace,); + assert_eq!(&*actual_trace, expected_trace,); } #[test] diff --git a/air/tests/test_module/instructions/call.rs b/air/tests/test_module/instructions/call.rs index c668ec1f..059c7180 100644 --- a/air/tests/test_module/instructions/call.rs +++ b/air/tests/test_module/instructions/call.rs @@ -17,7 +17,9 @@ use air::ExecutionCidState; use air::UncatchableError; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; +use pretty_assertions::assert_eq; // Check that %init_peer_id% alias works correctly (by comparing result with it and explicit peer id). // Additionally, check that empty string for data does the same as empty call path. @@ -199,7 +201,9 @@ fn string_parameters() { #[test] fn call_canon_stream_map_arg() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); + let script = format!( r#" (seq @@ -208,16 +212,16 @@ fn call_canon_stream_map_arg() { (ap (-42 "value2") %map) ) (seq - (canon "{vm_1_peer_id}" %map #%canon_map) - (call "{vm_1_peer_id}" ("m" "f") [#%canon_map] scalar) ; behaviour = echo + (canon "{vm_1_peer_name}" %map #%canon_map) + (call "{vm_1_peer_name}" ("m" "f") [#%canon_map] scalar) ; behaviour = echo ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); let mut cid_tracker: ExecutionCidState = ExecutionCidState::new(); @@ -260,35 +264,32 @@ fn call_canon_stream_map_arg() { ), ]; - assert_eq!( - actual_trace, expected_trace, - "{:#?}\n {:#?}", - actual_trace, expected_trace - ); + assert_eq!(&*actual_trace, expected_trace,); } // WIP add negative #[test] fn call_peer_id_from_canon_stream_map() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); let script = format!( r#" (seq (seq - (ap ("peerid" "{vm_1_peer_id}") %map) + (ap ("peerid" @"{vm_1_peer_name}") %map) (ap (-42 "value2") %map) ) (seq - (canon "{vm_1_peer_id}" %map #%canon_map) + (canon "{vm_1_peer_name}" %map #%canon_map) (call #%canon_map.$.peerid.[0] ("m" "f") [#%canon_map] scalar) ; behaviour = echo ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); let mut cid_tracker: ExecutionCidState = ExecutionCidState::new(); @@ -330,11 +331,7 @@ fn call_peer_id_from_canon_stream_map() { ), ]; - assert_eq!( - actual_trace, expected_trace, - "{:#?}\n {:#?}", - actual_trace, expected_trace - ); + assert_eq!(&*actual_trace, expected_trace,); } #[test] diff --git a/air/tests/test_module/instructions/canon.rs b/air/tests/test_module/instructions/canon.rs index 624c5895..f216754c 100644 --- a/air/tests/test_module/instructions/canon.rs +++ b/air/tests/test_module/instructions/canon.rs @@ -16,6 +16,7 @@ use air::ExecutionCidState; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; use pretty_assertions::assert_eq; @@ -695,29 +696,31 @@ fn test_merge_executed() { #[test] fn canon_stream_map() { - let vm_peer_id_1 = "vm_peer_id_1"; + let vm_peer_id_1_name = "vm_peer_id_1"; + let vm_peer_id_1_id = at(vm_peer_id_1_name); + let script = format!( r#" (seq (ap (42 "value2") %map) (seq (ap ("key" "value1") %map) - (canon "{vm_peer_id_1}" %map #%canon_map) + (canon "{vm_peer_id_1_name}" %map #%canon_map) ) ) "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id_1), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id_1_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_peer_id_1).unwrap(); + let result = executor.execute_all(vm_peer_id_1_name).unwrap(); - let actual_trace = trace_from_result(&result.last().unwrap()); + let actual_data = data_from_result(&result.last().unwrap()); let mut cid_state: ExecutionCidState = ExecutionCidState::new(); let map_value1 = json!({"key": 42, "value": "value2"}); let map_value2 = json!({"key": "key", "value": "value1"}); - let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": "vm_peer_id_1", "service_id": ""}); + let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": vm_peer_id_1_id, "service_id": ""}); let states_vec = vec![ executed_state::ap(0), @@ -741,11 +744,7 @@ fn canon_stream_map() { let expected_trace = ExecutionTrace::from(states_vec.clone()); - assert_eq!( - actual_trace, expected_trace, - "left {:#?} \n right {:#?}", - actual_trace, expected_trace - ); + assert_eq!(actual_data.trace, expected_trace, "{:#?}", actual_data.cid_info,); } #[test] @@ -1126,11 +1125,7 @@ fn canon_map_non_existing_index_tetraplet_check() { let expected_trace = ExecutionTrace::from(states_vec.clone()); let expected_tetraplet = RefCell::new(vec![vec![SecurityTetraplet::new(vm_peer_id_1, "", "", ".$.key")]]); - assert_eq!( - actual_trace, expected_trace, - "left {:#?} \n right {:#?}", - actual_trace, expected_trace - ); + assert_eq!(actual_trace, expected_trace,); assert_eq!(tetraplet_checker.as_ref(), &expected_tetraplet); } @@ -1221,11 +1216,7 @@ fn canon_map_non_existing_index_and_element_tetraplet_check() { ".$.[43].[2].some", )]]); - assert_eq!( - actual_trace, expected_trace, - "left {:#?} \n right {:#?}", - actual_trace, expected_trace - ); + assert_eq!(actual_trace, expected_trace,); assert_eq!(tetraplet_checker.as_ref(), &expected_tetraplet); } @@ -1264,13 +1255,13 @@ fn canon_map_2_scalar_tetraplet_check() { let result = checked_call_vm!(vm_1, <_>::default(), &script, "", ""); - let actual_trace = trace_from_result(&result); + let actual_data = data_from_result(&result); let mut cid_state: ExecutionCidState = ExecutionCidState::new(); let map_value1 = json!({"42": "value1", "key": "value1"}); let call_result = map_value1.clone(); - let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": "vm_peer_id_1", "service_id": ""}); + let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": vm_peer_id_1, "service_id": ""}); let states_vec = vec![ executed_state::ap(0), @@ -1302,11 +1293,7 @@ fn canon_map_2_scalar_tetraplet_check() { assert_eq!(tetraplet_checker.as_ref(), &expected_tetraplet); - assert_eq!( - actual_trace, expected_trace, - "left {:#?} \n right {:#?}", - actual_trace, expected_trace - ); + assert_eq!(actual_data.trace, expected_trace, "{:#?}", actual_data.cid_info,); } #[test] @@ -1343,13 +1330,13 @@ fn canon_map_2_scalar_with_lens_tetraplet_check() { ); let result = checked_call_vm!(vm_1, <_>::default(), &script, "", ""); - let actual_trace = trace_from_result(&result); + let actual_data = data_from_result(&result); let mut cid_state: ExecutionCidState = ExecutionCidState::new(); let map_value1 = json!({"42": "value1", "key": "value1"}); let call_result = json!("value1"); - let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": "vm_peer_id_1", "service_id": ""}); + let tetraplet = json!({"function_name": "", "json_path": "", "peer_pk": vm_peer_id_1, "service_id": ""}); let states_vec = vec![ executed_state::ap(0), @@ -1381,11 +1368,7 @@ fn canon_map_2_scalar_with_lens_tetraplet_check() { assert_eq!(tetraplet_checker.as_ref(), &expected_tetraplet); - assert_eq!( - actual_trace, expected_trace, - "left {:#?} \n right {:#?}", - actual_trace, expected_trace - ); + assert_eq!(actual_data.trace, expected_trace, "{:#?}", actual_data.cid_info,); } #[test] diff --git a/air/tests/test_module/instructions/fold.rs b/air/tests/test_module/instructions/fold.rs index 54256ba0..39f47a60 100644 --- a/air/tests/test_module/instructions/fold.rs +++ b/air/tests/test_module/instructions/fold.rs @@ -19,6 +19,7 @@ use air::PreparationError; use air::ToErrorCode; use air_interpreter_data::ExecutionTrace; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; use pretty_assertions::assert_eq; @@ -936,7 +937,9 @@ fn fold_stream_map() { #[test] fn fold_canon_stream_map() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); + let script = format!( r#" (seq @@ -945,10 +948,10 @@ fn fold_canon_stream_map() { (ap (-42 "value2") %map) ) (seq - (canon "{vm_1_peer_id}" %map #%canon_map) + (canon "{vm_1_peer_name}" %map #%canon_map) (fold #%canon_map iter (seq - (call "{vm_1_peer_id}" ("m" "f") [iter] scalar) ; behaviour = echo + (call "{vm_1_peer_name}" ("m" "f") [iter] scalar) ; behaviour = echo (next iter) ) ) @@ -957,9 +960,9 @@ fn fold_canon_stream_map() { "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); @@ -991,7 +994,7 @@ fn fold_canon_stream_map() { scalar_tracked!( map_value_1.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..0", function = "f", args = [map_value_1] @@ -1006,7 +1009,7 @@ fn fold_canon_stream_map() { ), ]; - assert_eq!(actual_trace, expected_trace,); + assert_eq!(&*actual_trace, expected_trace,); } /// This test checks that fold over map and fold over canon map both produce @@ -1015,7 +1018,8 @@ fn fold_canon_stream_map() { /// increments service name index for each call used. #[test] fn fold_map_and_canon_map_orders_are_same() { - let vm_1_peer_id = "vm_1_peer_id"; + let vm_1_peer_name = "vm_1_peer_id"; + let vm_1_peer_id = at(vm_1_peer_name); let script = format!( r#" @@ -1032,17 +1036,17 @@ fn fold_map_and_canon_map_orders_are_same() { ) (seq (seq - (canon "{vm_1_peer_id}" %map #%canon_map) + (canon "{vm_1_peer_name}" %map #%canon_map) (fold #%canon_map iter (seq - (call "{vm_1_peer_id}" ("m" "f") [iter] scalar) ; behaviour = echo + (call "{vm_1_peer_name}" ("m" "f") [iter] scalar) ; behaviour = echo (next iter) ) ) ) (fold %map iter (seq - (call "{vm_1_peer_id}" ("m" "f") [iter] scalar1) ; behaviour = echo + (call "{vm_1_peer_name}" ("m" "f") [iter] scalar1) ; behaviour = echo (next iter) ) ) @@ -1051,9 +1055,9 @@ fn fold_map_and_canon_map_orders_are_same() { "# ); - let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_id), &script) + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_1_peer_name), &script) .expect("invalid test AIR script"); - let result = executor.execute_all(vm_1_peer_id).unwrap(); + let result = executor.execute_all(vm_1_peer_name).unwrap(); let actual_trace = trace_from_result(&result.last().unwrap()); @@ -1099,7 +1103,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_1.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..0", function = "f", args = [map_value_1.clone()] @@ -1107,7 +1111,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_2.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..0", function = "f", args = [map_value_2.clone()] @@ -1115,7 +1119,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_3.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..0", function = "f", args = [map_value_3.clone()] @@ -1123,7 +1127,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_4.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..0", function = "f", args = [map_value_4.clone()] @@ -1137,7 +1141,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_1.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..1", function = "f", args = [map_value_1] @@ -1145,7 +1149,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_2.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..1", function = "f", args = [map_value_2] @@ -1153,7 +1157,7 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_3.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..1", function = "f", args = [map_value_3] @@ -1161,12 +1165,12 @@ fn fold_map_and_canon_map_orders_are_same() { scalar_tracked!( map_value_4.clone(), cid_tracker, - peer = vm_1_peer_id, + peer = &vm_1_peer_id, service = "m..1", function = "f", args = [map_value_4] ), ]; - assert_eq!(actual_trace, expected_trace,); + assert_eq!(&*actual_trace, expected_trace); } diff --git a/air/tests/test_module/instructions/match_.rs b/air/tests/test_module/instructions/match_.rs index a2368b42..d3d692e0 100644 --- a/air/tests/test_module/instructions/match_.rs +++ b/air/tests/test_module/instructions/match_.rs @@ -413,7 +413,7 @@ fn match_with_undefined_last_error_errcode() { let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( errcode_lambda_output.clone(), cid_state, - peer = local_peer_id, + peer_name = local_peer_id, service = "test..0", function = "error_code", args = vec![errcode_lambda_output] @@ -444,7 +444,7 @@ fn match_with_undefined_last_error_message() { let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( message_lambda_output.clone(), cid_state, - peer = local_peer_id, + peer_name = local_peer_id, service = "test..0", function = "message", args = vec![message_lambda_output] diff --git a/air/tests/test_module/issues/issue_178.rs b/air/tests/test_module/issues/issue_178.rs index 7fbea7c2..34136884 100644 --- a/air/tests/test_module/issues/issue_178.rs +++ b/air/tests/test_module/issues/issue_178.rs @@ -19,23 +19,23 @@ use air_test_utils::prelude::*; #[test] // https://github.com/fluencelabs/aquavm/issues/178 fn par_ap_behaviour() { - let client_id = "client_id"; - let relay_id = "relay_id"; - let variable_setter_id = "variable_setter_id"; + let client_name = "client_id"; + let relay_name = "relay_id"; + let variable_setter_name = "variable_setter_id"; // ap doesn't affect the subgraph_complete flag let script = format!( r#" (par - (call "{variable_setter_id}" ("peer" "timeout") [] join_it) ; behaviour=unit + (call "{variable_setter_name}" ("peer" "timeout") [] join_it) ; behaviour=unit (seq (par - (call "{relay_id}" ("peer" "timeout") [join_it] $result) ; behaviour=unit + (call "{relay_name}" ("peer" "timeout") [join_it] $result) ; behaviour=unit (ap "fast_result" $result) ) (seq - (canon "{client_id}" $result #result) - (call "{client_id}" ("op" "return") [#result.$[0]]) ; behaviour=unit + (canon "{client_name}" $result #result) + (call "{client_name}" ("op" "return") [#result.$[0]]) ; behaviour=unit ) ) ) @@ -43,15 +43,21 @@ fn par_ap_behaviour() { ); let engine = - air_test_framework::AirScriptExecutor::from_annotated(TestRunParameters::new("client_id", 0, 1, ""), &script) + air_test_framework::AirScriptExecutor::from_annotated(TestRunParameters::new(client_name, 0, 1, ""), &script) .expect("invalid test executor config"); - let client_result_1 = engine.execute_one(client_id).unwrap(); - assert_next_pks!(&client_result_1.next_peer_pks, [relay_id, variable_setter_id]); + let relay_id = engine.resolve_name(relay_name).to_string(); + let variable_setter_id = engine.resolve_name(variable_setter_name).to_string(); - let setter_result = engine.execute_one(variable_setter_id).unwrap(); + let client_result_1 = engine.execute_one(client_name).unwrap(); + assert_next_pks!( + &client_result_1.next_peer_pks, + [relay_id.as_str(), variable_setter_id.as_str()] + ); + + let setter_result = engine.execute_one(variable_setter_name).unwrap(); assert!(setter_result.next_peer_pks.is_empty()); - let relay_result = engine.execute_one(relay_id).unwrap(); + let relay_result = engine.execute_one(relay_name).unwrap(); assert!(relay_result.next_peer_pks.is_empty()); } diff --git a/air/tests/test_module/issues/issue_211.rs b/air/tests/test_module/issues/issue_211.rs index 401b8e67..1859b2b4 100644 --- a/air/tests/test_module/issues/issue_211.rs +++ b/air/tests/test_module/issues/issue_211.rs @@ -23,7 +23,7 @@ use pretty_assertions::assert_eq; // test for github.com/fluencelabs/aquavm/issues/211 // On the versions < 0.20.1 it just crashes fn issue_211() { - let peer_1_id = "peer_1_id"; + let peer_1_name = "peer_1_id"; let script = format!( r#" @@ -68,23 +68,25 @@ fn issue_211() { "# ); - let run_params = TestRunParameters::from_init_peer_id(peer_1_id); + let run_params = TestRunParameters::from_init_peer_id(peer_1_name); let engine = air_test_framework::AirScriptExecutor::from_annotated(run_params, &script) .expect("invalid test executor config"); + let peer_1_id = engine.resolve_name(peer_1_name).to_string(); + let peer_1_id = peer_1_id.as_str(); - let result = engine.execute_one(peer_1_id).unwrap(); + let result = engine.execute_one(peer_1_name).unwrap(); let scalar_2 = scalar!( json!([1, 2, 3]), - peer = peer_1_id, + peer_name = peer_1_name, service = "getdatasrv..1", function = "nodes" ); let cid_2 = extract_service_result_cid(&scalar_2); let expected_trace = ExecutionTrace::from(vec![ - scalar!(2, peer = peer_1_id, service = "getdatasrv..0", function = "idx"), + scalar!(2, peer_name = peer_1_name, service = "getdatasrv..0", function = "idx"), scalar_2, executed_state::par(6, 0), executed_state::par(1, 4), @@ -94,55 +96,55 @@ fn issue_211() { executed_state::par(1, 0), executed_state::ap(0), executed_state::canon(json!({ - "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "peer_1_id", "service_id": ""}, + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": peer_1_id, "service_id": ""}, "values": [ { "result": 1, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[0]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[0]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2.clone()), }, { "result": 2, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[1]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[1]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2.clone()), }, { "result": 3, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[2]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[2]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2.clone()), }, ] })), unused!( "expected result", - peer = peer_1_id, + peer_name = peer_1_name, service = "op..2", function = "noop", args = vec![json!(3), json!([1, 2, 3])] ), executed_state::canon(json!({ - "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "peer_1_id", "service_id": ""}, + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": peer_1_id, "service_id": ""}, "values": [ { "result": 1, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[0]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[0]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2.clone()), }, { "result": 2, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[1]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[1]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2.clone()), }, { "result": 3, - "tetraplet": {"function_name": "nodes", "json_path": ".$.[2]", "peer_pk": "peer_1_id", "service_id": "getdatasrv..1"}, + "tetraplet": {"function_name": "nodes", "json_path": ".$.[2]", "peer_pk": peer_1_id, "service_id": "getdatasrv..1"}, "provenance": Provenance::service_result(cid_2), }, ] })), scalar!( "expected result", - peer = peer_1_id, + peer_name = peer_1_name, service = "op..3", function = "identity", args = vec![json!([1, 2, 3])] diff --git a/air/tests/test_module/issues/issue_221.rs b/air/tests/test_module/issues/issue_221.rs index 4e1c2643..33b67d70 100644 --- a/air/tests/test_module/issues/issue_221.rs +++ b/air/tests/test_module/issues/issue_221.rs @@ -16,17 +16,18 @@ use air_interpreter_data::ExecutionTrace; use air_test_framework::AirScriptExecutor; +use air_test_utils::key_utils::at; use air_test_utils::prelude::*; use pretty_assertions::assert_eq; #[test] // test for github.com/fluencelabs/aquavm/issues/221 fn issue_221() { - let peer_1_id = "peer_1_id"; - let peer_2_id = "peer_2_id"; - let join_1_id = "join_1_id"; - let join_2_id = "join_2_id"; - let set_variable_id = "set_variable_id"; + let peer_1_name = "peer_1_id"; + let peer_2_name = "peer_2_id"; + let join_1_name = "join_1_id"; + let join_2_name = "join_2_id"; + let set_variable_name = "set_variable_id"; let peer_1_value = "peer_1_value"; let peer_2_value = "peer_2_value"; @@ -37,11 +38,11 @@ fn issue_221() { (seq (seq ;; let's peers be an array of two values [peer_1_id, peer_2_id] - (call "{set_variable_id}" ("" "") [] peers) ; ok = ["{peer_1_id}", "{peer_2_id}"] + (call "{set_variable_name}" ("" "") [] peers) ; ok = [@"{peer_1_name}", @"{peer_2_name}"] (fold peers peer (par (seq - (call peer ("" "") [peer] value) ; map = {{"{peer_1_id}": "{peer_1_value}", "{peer_2_id}": "{peer_2_value}"}} + (call peer ("" "") [peer] value) ; map = {{@"{peer_1_name}": "{peer_1_value}", @"{peer_2_name}": "{peer_2_value}"}} ;; it's crucial to reproduce this bug to add value to stream ;; with help of ap instruction (ap value $stream) @@ -58,14 +59,14 @@ fn issue_221() { ;; appropriate way and state for (1) is returned (par (par - (call "{join_1_id}" ("" "") [iterator]) ; behaviour = echo - (call "{join_2_id}" ("" "") [iterator]) ; behaviour = echo + (call "{join_1_name}" ("" "") [iterator]) ; behaviour = echo + (call "{join_2_name}" ("" "") [iterator]) ; behaviour = echo ) (next iterator) ) ) ) - (call "some_peer_id" ("" "") []) ;; (1) + (call "some_peer_name" ("" "") []) ;; (1) ) "# ); @@ -73,25 +74,43 @@ fn issue_221() { let executor = ::new( TestRunParameters::from_init_peer_id("set_variable_id"), vec![], - vec![peer_1_id, peer_2_id].into_iter().map(Into::into), + vec![peer_1_name, peer_2_name].into_iter().map(Into::into), &script, ) .expect("Invalid annotated AIR script"); - let _result = executor.execute_one(set_variable_id).unwrap(); - let _peer_1_result = executor.execute_one(peer_1_id).unwrap(); - let _peer_2_result = executor.execute_one(peer_2_id).unwrap(); + let peer_1_id = at(peer_1_name); + let peer_2_id = at(peer_2_name); + let join_1_id = at(join_1_name); - let _join_1_result = executor.execute_one(join_1_id).unwrap(); - let join_1_result = executor.execute_one(join_1_id).unwrap(); // before 0.20.9 it fails here + let _result = executor.execute_one(set_variable_name).unwrap(); + let _peer_1_result = executor.execute_one(peer_1_name).unwrap(); + let _peer_2_result = executor.execute_one(peer_2_name).unwrap(); + + let _join_1_result = executor.execute_one(join_1_name).unwrap(); + let join_1_result = executor.execute_one(join_1_name).unwrap(); // before 0.20.9 it fails here let actual_trace = trace_from_result(&join_1_result); let expected_trace = ExecutionTrace::from(vec![ - scalar!(json!([peer_1_id, peer_2_id]), peer = set_variable_id, service = "..0"), + scalar!( + json!([peer_1_id, peer_2_id]), + peer_name = set_variable_name, + service = "..0" + ), executed_state::par(2, 3), - scalar!(peer_1_value, peer = peer_1_id, service = "..1", args = vec![peer_1_id]), + scalar!( + peer_1_value, + peer_name = peer_1_name, + service = "..1", + args = vec![peer_1_id.as_str()] + ), executed_state::ap(0), executed_state::par(2, 0), - scalar!(peer_2_value, peer = peer_2_id, service = "..1", args = vec![peer_2_id]), + scalar!( + peer_2_value, + peer_name = peer_2_name, + service = "..1", + args = vec![peer_2_id.as_str()] + ), executed_state::ap(1), executed_state::fold(vec![ executed_state::subtrace_lore(3, SubTraceDesc::new(8.into(), 4), SubTraceDesc::new(12.into(), 0)), @@ -101,7 +120,7 @@ fn issue_221() { executed_state::par(1, 1), unused!( peer_1_value, - peer = join_1_id, + peer_name = join_1_name, service = "..2", args = vec![peer_1_value] ), @@ -110,7 +129,7 @@ fn issue_221() { executed_state::par(1, 1), unused!( peer_2_value, - peer = join_1_id, + peer_name = join_1_name, service = "..2", args = vec![peer_2_value] ), diff --git a/air/tests/test_module/issues/issue_356.rs b/air/tests/test_module/issues/issue_356.rs index e5279109..30510c2b 100644 --- a/air/tests/test_module/issues/issue_356.rs +++ b/air/tests/test_module/issues/issue_356.rs @@ -22,9 +22,9 @@ fn issue_356() { let script = r#" (seq (seq - (call "relay" ("kad" "neighborhood") ["relay"] neighs_top) ; ok = ["p1"] + (call "relay" ("kad" "neighborhood") ["relay"] neighs_top) ; ok = [@"p1"] (seq - (call "p1" ("kad" "neighborhood") ["p1"] neighs_inner) ; ok =["p1"] + (call "p1" ("kad" "neighborhood") ["p1"] neighs_inner) ; ok =[@"p1"] (par (call "relay" ("peer" "identify") ["relay"] $external_addresses) ; behaviour = echo (call "p1" ("peer" "identify") ["p1"] $external_addresses) ; behaviour = echo diff --git a/air/tests/test_module/negative_tests/uncatchable_trace_related.rs b/air/tests/test_module/negative_tests/uncatchable_trace_related.rs index 07dfe157..48aa9d41 100644 --- a/air/tests/test_module/negative_tests/uncatchable_trace_related.rs +++ b/air/tests/test_module/negative_tests/uncatchable_trace_related.rs @@ -145,7 +145,7 @@ fn set_subtrace_len_and_pos_failed() { let mut cid_state = ExecutionCidState::new(); let trace = vec![ executed_state::par(1, 2), - stream_tracked!(json!([42, 43]), 0, cid_state), + stream_tracked!(json!([42, 43]), 0, cid_state, peer = vm_peer_id_1), executed_state::fold(vec![executed_state::subtrace_lore( 1, subtrace_desc(5, 1), @@ -184,7 +184,7 @@ fn no_element_at_position() { let mut cid_state = ExecutionCidState::new(); let trace = vec![ executed_state::par(1, 2), - stream_tracked!(json!([42, 43]), 0, cid_state), + stream_tracked!(json!([42, 43]), 0, cid_state, peer = vm_peer_id_1), executed_state::fold(vec![executed_state::subtrace_lore( 42, subtrace_desc(3, 1), @@ -224,7 +224,7 @@ fn no_stream_state() { let wrong_state = request_sent_by("vm_peer_id_1"); let trace = vec![ executed_state::par(1, 2), - stream_tracked!(json!([42, 43]), 0, &mut tracker), + stream_tracked!(json!([42, 43]), 0, &mut tracker, peer = vm_peer_id_1), executed_state::fold(vec![executed_state::subtrace_lore( 3, subtrace_desc(3, 1), // try to change the number of elems to 3 @@ -444,7 +444,7 @@ fn several_records_with_same_pos() { let value_pos = 1; let trace = vec![ executed_state::par(1, 2), - stream_tracked!(json!([42, 43]), 0, cid_state), + stream_tracked!(json!([42, 43]), 0, &mut cid_state, peer = vm_peer_id_1), fold(vec![ subtrace_lore(value_pos, subtrace_desc(3, 1), subtrace_desc(4, 0)), subtrace_lore(value_pos, subtrace_desc(3, 1), subtrace_desc(4, 0)), @@ -543,7 +543,7 @@ fn fold_pos_overflow() { let wrong_after_subtrace_len = TraceLen::MAX - 1; let trace = vec![ executed_state::par(1, 2), - stream_tracked!(json!([42, 43]), 0, cid_state), + stream_tracked!(json!([42, 43]), 0, cid_state, peer = vm_peer_id_1), fold(vec![subtrace_lore( value_pos, subtrace_desc(before_subtrace_pos, 1), diff --git a/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs b/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs index ac478915..893d772a 100644 --- a/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs +++ b/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs @@ -143,7 +143,7 @@ fn malformed_call_service_failed() { let tetraplet_cid = cid_state.tetraplet_tracker.track_value(tetraplet).unwrap(); let service_result_agg = ServiceResultCidAggregate { value_cid, - argument_hash: "0000000000000".into(), + argument_hash: "bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq".into(), tetraplet_cid, }; let service_result_agg_cid = cid_state @@ -159,7 +159,7 @@ fn malformed_call_service_failed() { let result = vm.call(&air, vec![], data, TestRunParameters::default()).unwrap(); let expected_serde_error = serde_json::from_value::(value).unwrap_err(); let expected_error = MalformedCallServiceFailed(expected_serde_error); - assert!(check_error(&result, expected_error)); + assert_error_eq!(&result, expected_error); } #[test] diff --git a/benches/PERFORMANCE.json b/benches/PERFORMANCE.json index 07e1f5bf..8095eadc 100644 --- a/benches/PERFORMANCE.json +++ b/benches/PERFORMANCE.json @@ -1499,122 +1499,58 @@ "big_values_data": { "comment": "Loading a trace with huge values", "memory_sizes": [ - "57.875 MiB", - "57.875 MiB" + "59.062 MiB", + "59.062 MiB" ], "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "8.35ms", + "duration": "9.29ms", "nested": { - "preparation_step::preparation::prepare": { - "common_prefix": "", - "duration": "4.84ms", + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "4.90ms", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "19.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "4.63ms", - "air_parser::parser::air_parser::parse": "35.00µs" + "from_slice": "4.85ms" } }, - "runner::execute": "9.00µs", + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "176.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "19.00µs", + "air_parser::parser::air_parser::parse": "32.00µs" + } + }, + "runner::execute": "12.00µs", "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "3.36ms", + "duration": "3.86ms", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "3.34ms", + "duration": "3.84ms", "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "3.29ms", - "nested": { - "to_vec(call_results)": "16.00µs", - "to_vec(data)": "2.31ms" - } - } + "populate_outcome_from_contexts": "3.80ms" } } } + }, + "signing_step::sign_produced_cids": "110.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "83.00µs", + "nested": { + "verify": "10.00µs" + } } } } }, - "total_time": "8.35ms" + "total_time": "9.29ms" }, "dashboard": { "comment": "big dashboard test", - "memory_sizes": [ - "51.625 MiB", - "51.625 MiB" - ], - "stats": { - "air::runner::execute_air": { - "common_prefix": "air", - "duration": "28.07ms", - "nested": { - "preparation_step::preparation::prepare": { - "common_prefix": "", - "duration": "1.00ms", - "nested": { - "air::preparation_step::preparation::make_exec_ctx": "39.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "634.00µs", - "air_parser::parser::air_parser::parse": "169.00µs" - } - }, - "runner::execute": { - "common_prefix": "air::execution_step::instructions::call", - "duration": "26.41ms", - "nested": { - "execute": { - "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "20.77ms", - "nested": { - "execute": { - "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "4.26ms", - "nested": { - "prepare_request_params": { - "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", - "duration": "61.00µs", - "nested": { - "to_string(tetraplets)": "18.00µs" - } - } - } - }, - "new": "3.72ms" - } - } - } - }, - "runner::farewell": { - "common_prefix": "air::farewell_step::outcome", - "duration": "499.00µs", - "nested": { - "from_success_result": { - "common_prefix": "air::farewell_step::outcome", - "duration": "479.00µs", - "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "430.00µs", - "nested": { - "to_vec(call_results)": "18.00µs", - "to_vec(data)": "180.00µs" - } - } - } - } - } - } - } - } - }, - "total_time": "28.07ms" - }, - "long_data": { - "comment": "Long data trace", "memory_sizes": [ "52.750 MiB", "52.750 MiB" @@ -1622,399 +1558,1705 @@ "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "3.03ms", + "duration": "6.71ms", "nested": { - "preparation_step::preparation::prepare": { - "common_prefix": "", - "duration": "1.86ms", + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "1.00ms", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "38.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "1.62ms", - "air_parser::parser::air_parser::parse": "35.00µs" + "from_slice": "947.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "327.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "36.00µs", + "air_parser::parser::air_parser::parse": "170.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "1.70ms", + "nested": { + "to_string(tetraplets)": "369.00µs" } }, - "runner::execute": "8.00µs", "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "1.02ms", + "duration": "485.00µs", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "997.00µs", + "duration": "465.00µs", "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "957.00µs", - "nested": { - "to_vec(call_results)": "15.00µs", - "to_vec(data)": "428.00µs" - } - } + "populate_outcome_from_contexts": "417.00µs" } } } + }, + "signing_step::sign_produced_cids": "105.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "2.93ms", + "nested": { + "verify": "197.00µs" + } } } } }, - "total_time": "3.03ms" + "total_time": "6.71ms" + }, + "long_data": { + "comment": "Long data trace", + "memory_sizes": [ + "54.000 MiB", + "54.000 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "3.88ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "1.76ms", + "nested": { + "from_slice": "1.72ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "175.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "19.00µs", + "air_parser::parser::air_parser::parse": "30.00µs" + } + }, + "runner::execute": "11.00µs", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "1.06ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "1.04ms", + "nested": { + "populate_outcome_from_contexts": "1.00ms" + } + } + } + }, + "signing_step::sign_produced_cids": "108.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "612.00µs", + "nested": { + "verify": "10.00µs" + } + } + } + } + }, + "total_time": "3.88ms" }, "multiple-cids10": { "comment": "verifying multiple CIDs for single peer", "memory_sizes": [ - "51.500 MiB", - "51.500 MiB" + "52.625 MiB", + "52.625 MiB" ], "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "11.44ms", + "duration": "2.63ms", "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "418.00µs", + "nested": { + "from_slice": "364.00µs" + } + }, "preparation_step::preparation::prepare": { "common_prefix": "", - "duration": "667.00µs", + "duration": "216.00µs", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "36.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "400.00µs", - "air_parser::parser::air_parser::parse": "68.00µs" - } - }, - "runner::execute": { - "common_prefix": "air::execution_step::instructions::call", - "duration": "10.22ms", - "nested": { - "execute": { - "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "7.85ms", - "nested": { - "execute": "1.73ms", - "new": "1.28ms" - } - } - } - }, - "runner::farewell": { - "common_prefix": "air::farewell_step::outcome", - "duration": "427.00µs", - "nested": { - "from_success_result": { - "common_prefix": "air::farewell_step::outcome", - "duration": "407.00µs", - "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "339.00µs", - "nested": { - "to_vec(call_results)": "14.00µs", - "to_vec(data)": "145.00µs" - } - } - } - } - } - } - } - } - }, - "total_time": "11.44ms" - }, - "multiple-cids50": { - "comment": "verifying multiple CIDs for single peer", - "memory_sizes": [ - "59.875 MiB", - "59.875 MiB" - ], - "stats": { - "air::runner::execute_air": { - "common_prefix": "air", - "duration": "263.70ms", - "nested": { - "preparation_step::preparation::prepare": { - "common_prefix": "", - "duration": "6.70ms", - "nested": { - "air::preparation_step::preparation::make_exec_ctx": "507.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "5.96ms", - "air_parser::parser::air_parser::parse": "59.00µs" - } - }, - "runner::execute": { - "common_prefix": "air::execution_step::instructions::call", - "duration": "252.10ms", - "nested": { - "execute": { - "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "196.88ms", - "nested": { - "execute": "43.04ms", - "new": "36.00ms" - } - } - } - }, - "runner::farewell": { - "common_prefix": "air::farewell_step::outcome", - "duration": "4.47ms", - "nested": { - "from_success_result": { - "common_prefix": "air::farewell_step::outcome", - "duration": "4.45ms", - "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "4.36ms", - "nested": { - "to_vec(call_results)": "12.00µs", - "to_vec(data)": "2.89ms" - } - } - } - } - } - } - } - } - }, - "total_time": "263.70ms" - }, - "multiple-peers14": { - "comment": "verifying many CIDs for many peers", - "memory_sizes": [ - "61.125 MiB", - "61.125 MiB" - ], - "stats": { - "air::runner::execute_air": { - "common_prefix": "air", - "duration": "299.50ms", - "nested": { - "preparation_step::preparation::prepare": { - "common_prefix": "", - "duration": "8.63ms", - "nested": { - "air::preparation_step::preparation::make_exec_ctx": "532.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "7.86ms", + "air::preparation_step::preparation::make_exec_ctx": "33.00µs", "air_parser::parser::air_parser::parse": "63.00µs" } }, "runner::execute": { - "common_prefix": "air::execution_step::instructions::call", - "duration": "285.00ms", + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "452.00µs", "nested": { - "execute": { - "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "222.02ms", - "nested": { - "execute": "51.01ms", - "new": "39.04ms" - } - } + "to_string(tetraplets)": "10.00µs" } }, "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "5.71ms", + "duration": "342.00µs", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "5.69ms", + "duration": "322.00µs", "nested": { - "populate_outcome_from_contexts": { - "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "5.58ms", - "nested": { - "to_vec(call_results)": "12.00µs", - "to_vec(data)": "3.88ms" - } - } + "populate_outcome_from_contexts": "285.00µs" } } } + }, + "signing_step::sign_produced_cids": "103.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "944.00µs", + "nested": { + "verify": "227.00µs" + } } } } }, - "total_time": "299.50ms" + "total_time": "2.63ms" }, - "multiple-peers5": { - "comment": "verifying many CIDs for many peers", + "multiple-cids50": { + "comment": "verifying multiple CIDs for single peer", "memory_sizes": [ - "51.688 MiB", - "51.688 MiB" + "59.375 MiB", + "59.375 MiB" ], "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "15.14ms", + "duration": "24.68ms", "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "4.87ms", + "nested": { + "from_slice": "4.81ms" + } + }, "preparation_step::preparation::prepare": { "common_prefix": "", - "duration": "907.00µs", + "duration": "444.00µs", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "45.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "630.00µs", - "air_parser::parser::air_parser::parse": "71.00µs" + "air::preparation_step::preparation::make_exec_ctx": "255.00µs", + "air_parser::parser::air_parser::parse": "67.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "8.86ms", + "nested": { + "to_string(tetraplets)": "11.00µs" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "3.40ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "3.38ms", + "nested": { + "populate_outcome_from_contexts": "3.34ms" + } + } + } + }, + "signing_step::sign_produced_cids": "104.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "6.86ms", + "nested": { + "verify": "4.68ms" + } + } + } + } + }, + "total_time": "24.68ms" + }, + "multiple-peers14": { + "comment": "verifying many CIDs for many peers", + "memory_sizes": [ + "59.688 MiB", + "59.688 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "36.77ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "5.62ms", + "nested": { + "from_slice": "5.56ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "462.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "273.00µs", + "air_parser::parser::air_parser::parse": "70.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "15.29ms", + "nested": { + "to_string(tetraplets)": "11.00µs" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "3.80ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "3.77ms", + "nested": { + "populate_outcome_from_contexts": "3.74ms" + } + } + } + }, + "signing_step::sign_produced_cids": "105.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "11.32ms", + "nested": { + "verify": "5.12ms" + } + } + } + } + }, + "total_time": "36.77ms" + }, + "multiple-peers25": { + "comment": "verifying many CIDs for many peers", + "memory_sizes": [ + "86.000 MiB", + "86.000 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "188.40ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "30.22ms", + "nested": { + "from_slice": "30.15ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "2.17ms", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "1.97ms", + "air_parser::parser::air_parser::parse": "79.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "87.63ms", + "nested": { + "to_string(tetraplets)": "22.00µs" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "20.97ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "20.94ms", + "nested": { + "populate_outcome_from_contexts": "20.88ms" + } + } + } + }, + "signing_step::sign_produced_cids": "115.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "46.95ms", + "nested": { + "verify": "29.99ms" + } + } + } + } + }, + "total_time": "188.40ms" + }, + "multiple-peers5": { + "comment": "verifying many CIDs for many peers", + "memory_sizes": [ + "52.625 MiB", + "52.625 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "17.65ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "590.00µs", + "nested": { + "from_slice": "540.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "229.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "35.00µs", + "air_parser::parser::air_parser::parse": "67.00µs" } }, "runner::execute": { "common_prefix": "air::execution_step::instructions::call", - "duration": "13.60ms", + "duration": "13.61ms", "nested": { "execute": { "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "10.54ms", + "duration": "10.57ms", "nested": { - "execute": "2.40ms", - "new": "1.93ms" + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "2.47ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "44.00µs", + "nested": { + "to_string(tetraplets)": "13.00µs" + } + } + } + }, + "new": "1.83ms" } } } }, "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "508.00µs", + "duration": "483.00µs", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "489.00µs", + "duration": "463.00µs", "nested": { "populate_outcome_from_contexts": { "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "410.00µs", + "duration": "429.00µs", "nested": { - "to_vec(call_results)": "14.00µs", + "to_vec(call_results)": "12.00µs", "to_vec(data)": "209.00µs" } } } } } + }, + "signing_step::sign_produced_cids": "109.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "2.48ms", + "nested": { + "verify": "289.00µs" + } } } } }, - "total_time": "15.14ms" + "total_time": "17.65ms" + }, + "multiple-sigs10": { + "comment": "signing multiple CIDs", + "memory_sizes": [ + "52.875 MiB", + "52.875 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "13.63ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "653.00µs", + "nested": { + "from_slice": "602.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "224.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "37.00µs", + "air_parser::parser::air_parser::parse": "65.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions", + "duration": "10.85ms", + "nested": { + "call::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "7.94ms", + "nested": { + "execute": "1.77ms", + "new": "1.35ms" + } + }, + "canon::execute": "496.00µs" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "564.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "544.00µs", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "485.00µs", + "nested": { + "to_vec(call_results)": "12.00µs", + "to_vec(data)": "227.00µs" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "155.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "1.02ms", + "nested": { + "verify": "238.00µs" + } + } + } + } + }, + "total_time": "13.63ms" + }, + "multiple-sigs200": { + "comment": "signing multiple CIDs", + "memory_sizes": [ + "211.625 MiB", + "211.625 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "906.10ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "166.70ms", + "nested": { + "from_slice": "166.67ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "16.93ms", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "16.71ms", + "air_parser::parser::air_parser::parse": "80.00µs" + } + }, + "runner::execute": "381.00ms", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "165.40ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "165.40ms", + "nested": { + "populate_outcome_from_contexts": "153.70ms" + } + } + } + }, + "signing_step::sign_produced_cids": "22.05ms", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "153.40ms", + "nested": { + "verify": "84.07ms" + } + } + } + } + }, + "total_time": "906.10ms" + }, + "multiple-sigs50": { + "comment": "signing multiple CIDs", + "memory_sizes": [ + "62.625 MiB", + "62.625 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "49.64ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "10.52ms", + "nested": { + "from_slice": "10.46ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "615.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "428.00µs", + "air_parser::parser::air_parser::parse": "68.00µs" + } + }, + "runner::execute": "21.67ms", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.97ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.95ms", + "nested": { + "populate_outcome_from_contexts": "6.57ms" + } + } + } + }, + "signing_step::sign_produced_cids": "1.23ms", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "8.51ms", + "nested": { + "verify": "4.56ms" + } + } + } + } + }, + "total_time": "49.64ms" + }, + "network-explore": { + "comment": "5 peers of network are discovered", + "memory_sizes": [ + "52.500 MiB", + "52.500 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "3.12ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "478.00µs", + "nested": { + "from_slice": "423.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "233.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "27.00µs", + "air_parser::parser::air_parser::parse": "86.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "174.00µs", + "nested": { + "to_string(tetraplets)": "10.00µs" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "265.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "245.00µs", + "nested": { + "populate_outcome_from_contexts": "208.00µs" + } + } + } + }, + "signing_step::sign_produced_cids": "105.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "1.71ms", + "nested": { + "verify": "72.00µs" + } + } + } + } + }, + "total_time": "3.12ms" }, "network_explore": { "comment": "5 peers of network are discovered", "memory_sizes": [ - "51.375 MiB", - "51.375 MiB" + "52.500 MiB", + "52.500 MiB" ], "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "3.02ms", + "duration": "5.23ms", "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "480.00µs", + "nested": { + "from_slice": "429.00µs" + } + }, "preparation_step::preparation::prepare": { "common_prefix": "", - "duration": "510.00µs", + "duration": "236.00µs", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "24.00µs", - "air_interpreter_data::interpreter_data::serde_json::from_slice": "226.00µs", - "air_parser::parser::air_parser::parse": "95.00µs" + "air::preparation_step::preparation::make_exec_ctx": "25.00µs", + "air_parser::parser::air_parser::parse": "84.00µs" } }, "runner::execute": { "common_prefix": "air::execution_step::instructions::call", - "duration": "2.06ms", + "duration": "2.19ms", "nested": { "execute": { "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "1.57ms", + "duration": "1.67ms", "nested": { - "execute": "338.00µs", - "new": "280.00µs" + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "408.00µs", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "48.00µs", + "nested": { + "to_string(tetraplets)": "17.00µs" + } + } + } + }, + "new": "300.00µs" } } } }, "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "302.00µs", + "duration": "326.00µs", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "282.00µs", + "duration": "306.00µs", "nested": { "populate_outcome_from_contexts": { "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "239.00µs", + "duration": "270.00µs", "nested": { - "to_vec(call_results)": "14.00µs", - "to_vec(data)": "65.00µs" + "to_vec(call_results)": "12.00µs", + "to_vec(data)": "97.00µs" } } } } } + }, + "signing_step::sign_produced_cids": "112.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "1.73ms", + "nested": { + "verify": "76.00µs" + } } } } }, - "total_time": "3.02ms" + "total_time": "5.23ms" + }, + "null": { + "comment": "Empty data and null script", + "memory_sizes": [ + "52.500 MiB", + "52.500 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "725.00µs", + "nested": { + "preparation_step::preparation::parse_data": "20.00µs", + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "193.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "24.00µs", + "air_parser::parser::air_parser::parse": "39.00µs" + } + }, + "runner::execute": "11.00µs", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "189.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "170.00µs", + "nested": { + "populate_outcome_from_contexts": "133.00µs" + } + } + } + }, + "signing_step::sign_produced_cids": "112.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "38.00µs", + "nested": { + "verify": "12.00µs" + } + } + } + } + }, + "total_time": "725.00µs" }, "parser_10000_100": { "comment": "Running very long AIR script with lot of variables and assignments", "memory_sizes": [ - "56.625 MiB", - "56.625 MiB" + "57.812 MiB", + "57.812 MiB" ], "stats": { "air::runner::execute_air": { "common_prefix": "air", - "duration": "23.42ms", + "duration": "22.72ms", "nested": { + "preparation_step::preparation::parse_data": "20.00µs", "preparation_step::preparation::prepare": { "common_prefix": "", - "duration": "21.82ms", + "duration": "21.25ms", "nested": { - "air::preparation_step::preparation::make_exec_ctx": "22.00µs", - "air_parser::parser::air_parser::parse": "21.64ms" + "air::preparation_step::preparation::make_exec_ctx": "23.00µs", + "air_parser::parser::air_parser::parse": "21.11ms" + } + }, + "runner::execute": "47.00µs", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "192.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "173.00µs", + "nested": { + "populate_outcome_from_contexts": "137.00µs" + } + } + } + }, + "signing_step::sign_produced_cids": "110.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "39.00µs", + "nested": { + "verify": "11.00µs" + } + } + } + } + }, + "total_time": "22.72ms" + } + }, + "datetime": "2023-07-23 15:42:03.477661+00:00", + "features": "check_signatures,gen_signatures", + "platform": "macOS-13.4.1-arm64-arm-64bit", + "version": "0.42.0" + }, + "e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441": { + "benches": { + "big_values_data": { + "comment": "Loading a trace with huge values", + "memory_sizes": [ + "59.062 MiB", + "59.062 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "13.28ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "7.70ms", + "nested": { + "from_slice": "7.64ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "226.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "16.00µs", + "air_parser::parser::air_parser::parse": "21.00µs" + } + }, + "runner::execute": "10.00µs", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "4.97ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "4.94ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "4.90ms", + "nested": { + "to_vec(call_results)": "15.00µs", + "to_vec(data)": "3.93ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "154.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "90.00µs", + "nested": { + "verify": "12.00µs" + } + } + } + } + }, + "total_time": "13.28ms" + }, + "dashboard": { + "comment": "big dashboard test", + "memory_sizes": [ + "52.750 MiB", + "52.750 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "36.27ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "1.34ms", + "nested": { + "from_slice": "1.28ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "350.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "42.00µs", + "air_parser::parser::air_parser::parse": "130.00µs" } }, "runner::execute": { "common_prefix": "air::execution_step::instructions::call", - "duration": "148.00µs", + "duration": "29.00ms", "nested": { "execute": { "common_prefix": "air::execution_step::instructions::call::resolved_call", - "duration": "110.00µs", + "duration": "23.27ms", "nested": { - "execute": "31.00µs", - "new": "24.00µs" + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "6.94ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "1.86ms", + "nested": { + "to_string(tetraplets)": "573.00µs" + } + } + } + }, + "new": "3.79ms" } } } }, "runner::farewell": { "common_prefix": "air::farewell_step::outcome", - "duration": "260.00µs", + "duration": "746.00µs", "nested": { "from_success_result": { "common_prefix": "air::farewell_step::outcome", - "duration": "240.00µs", + "duration": "723.00µs", "nested": { "populate_outcome_from_contexts": { "common_prefix": "air::farewell_step::outcome::serde_json", - "duration": "206.00µs", + "duration": "678.00µs", "nested": { - "to_vec(call_results)": "16.00µs", - "to_vec(data)": "36.00µs" + "to_vec(call_results)": "31.00µs", + "to_vec(data)": "379.00µs" } } } } } + }, + "signing_step::sign_produced_cids": "159.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "4.55ms", + "nested": { + "verify": "273.00µs" + } } } } }, - "total_time": "23.42ms" + "total_time": "36.27ms" + }, + "long_data": { + "comment": "Long data trace", + "memory_sizes": [ + "54.000 MiB", + "54.000 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "5.23ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "2.57ms", + "nested": { + "from_slice": "2.53ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "223.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "16.00µs", + "air_parser::parser::air_parser::parse": "20.00µs" + } + }, + "runner::execute": "10.00µs", + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "1.27ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "1.25ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "1.21ms", + "nested": { + "to_vec(call_results)": "14.00µs", + "to_vec(data)": "658.00µs" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "156.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "858.00µs", + "nested": { + "verify": "12.00µs" + } + } + } + } + }, + "total_time": "5.23ms" + }, + "multiple-cids10": { + "comment": "verifying multiple CIDs for single peer", + "memory_sizes": [ + "52.625 MiB", + "52.625 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "15.18ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "486.00µs", + "nested": { + "from_slice": "432.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "256.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "34.00µs", + "air_parser::parser::air_parser::parse": "46.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "12.19ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "9.42ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "2.23ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "48.00µs", + "nested": { + "to_string(tetraplets)": "14.00µs" + } + } + } + }, + "new": "1.49ms" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "546.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "524.00µs", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "492.00µs", + "nested": { + "to_vec(call_results)": "14.00µs", + "to_vec(data)": "229.00µs" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "157.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "1.41ms", + "nested": { + "verify": "314.00µs" + } + } + } + } + }, + "total_time": "15.18ms" + }, + "multiple-cids50": { + "comment": "verifying multiple CIDs for single peer", + "memory_sizes": [ + "59.375 MiB", + "59.375 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "323.00ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "6.79ms", + "nested": { + "from_slice": "6.72ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "595.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "362.00µs", + "air_parser::parser::air_parser::parse": "49.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "299.20ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "232.19ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "53.08ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "54.00µs", + "nested": { + "to_string(tetraplets)": "16.00µs" + } + } + } + }, + "new": "36.44ms" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.07ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.05ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "6.01ms", + "nested": { + "to_vec(call_results)": "16.00µs", + "to_vec(data)": "4.77ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "180.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "10.09ms", + "nested": { + "verify": "6.97ms" + } + } + } + } + }, + "total_time": "323.00ms" + }, + "multiple-peers14": { + "comment": "verifying many CIDs for many peers", + "memory_sizes": [ + "59.750 MiB", + "59.812 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "383.60ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "7.75ms", + "nested": { + "from_slice": "7.68ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "607.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "374.00µs", + "air_parser::parser::air_parser::parse": "52.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "351.40ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "274.07ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "65.03ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "52.00µs", + "nested": { + "to_string(tetraplets)": "15.00µs" + } + } + } + }, + "new": "46.23ms" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.55ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "6.53ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "6.49ms", + "nested": { + "to_vec(call_results)": "16.00µs", + "to_vec(data)": "5.13ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "170.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "17.10ms", + "nested": { + "verify": "7.55ms" + } + } + } + } + }, + "total_time": "383.60ms" + }, + "multiple-peers25": { + "comment": "verifying many CIDs for many peers", + "memory_sizes": [ + "85.750 MiB", + "86.562 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "2.15s", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "40.88ms", + "nested": { + "from_slice": "40.76ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "3.70ms", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "3.40ms", + "air_parser::parser::air_parser::parse": "58.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "2.00s", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "1.56s", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "378.34ms", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "73.00µs", + "nested": { + "to_string(tetraplets)": "16.00µs" + } + } + } + }, + "new": "259.16ms" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "34.76ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "34.72ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "34.63ms", + "nested": { + "to_vec(call_results)": "18.00µs", + "to_vec(data)": "27.11ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "190.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "70.22ms", + "nested": { + "verify": "44.09ms" + } + } + } + } + }, + "total_time": "2.15s" + }, + "multiple-sigs200": { + "comment": "signing multiple CIDs", + "memory_sizes": [ + "214.375 MiB", + "214.375 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "6.04s", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "219.80ms", + "nested": { + "from_slice": "219.70ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "25.42ms", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "25.09ms", + "air_parser::parser::air_parser::parse": "58.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions", + "duration": "5.30s", + "nested": { + "call::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "3.83s", + "nested": { + "execute": "941.01ms", + "new": "604.96ms" + } + }, + "canon::execute": "308.30ms" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "253.30ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "253.30ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "233.40ms", + "nested": { + "to_vec(call_results)": "16.00µs", + "to_vec(data)": "145.70ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "30.84ms", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "214.00ms", + "nested": { + "verify": "119.20ms" + } + } + } + } + }, + "total_time": "6.04s" + }, + "multiple-sigs50": { + "comment": "signing multiple CIDs", + "memory_sizes": [ + "62.562 MiB", + "62.562 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "369.10ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "13.94ms", + "nested": { + "from_slice": "13.87ms" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "914.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "678.00µs", + "air_parser::parser::air_parser::parse": "52.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions", + "duration": "328.70ms", + "nested": { + "call::execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "238.69ms", + "nested": { + "execute": "56.21ms", + "new": "38.04ms" + } + }, + "canon::execute": "18.24ms" + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "11.01ms", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "11.01ms", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "10.57ms", + "nested": { + "to_vec(call_results)": "14.00µs", + "to_vec(data)": "7.77ms" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "1.77ms", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "12.49ms", + "nested": { + "verify": "6.96ms" + } + } + } + } + }, + "total_time": "369.10ms" + }, + "network-explore": { + "comment": "5 peers of network are discovered", + "memory_sizes": [ + "52.500 MiB", + "52.500 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "6.83ms", + "nested": { + "preparation_step::preparation::parse_data": { + "common_prefix": "air_interpreter_data::interpreter_data::serde_json", + "duration": "603.00µs", + "nested": { + "from_slice": "545.00µs" + } + }, + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "274.00µs", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "26.00µs", + "air_parser::parser::air_parser::parse": "68.00µs" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "2.55ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "1.98ms", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "490.00µs", + "nested": { + "prepare_request_params": { + "common_prefix": "air::execution_step::instructions::call::resolved_call::serde_json", + "duration": "52.00µs", + "nested": { + "to_string(tetraplets)": "16.00µs" + } + } + } + }, + "new": "339.00µs" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "429.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "406.00µs", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "372.00µs", + "nested": { + "to_vec(call_results)": "14.00µs", + "to_vec(data)": "140.00µs" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "157.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "2.67ms", + "nested": { + "verify": "81.00µs" + } + } + } + } + }, + "total_time": "6.83ms" + }, + "parser_10000_100": { + "comment": "Running very long AIR script with lot of variables and assignments", + "memory_sizes": [ + "57.812 MiB", + "57.812 MiB" + ], + "stats": { + "air::runner::execute_air": { + "common_prefix": "air", + "duration": "30.02ms", + "nested": { + "preparation_step::preparation::parse_data": "19.00µs", + "preparation_step::preparation::prepare": { + "common_prefix": "", + "duration": "28.02ms", + "nested": { + "air::preparation_step::preparation::make_exec_ctx": "18.00µs", + "air_parser::parser::air_parser::parse": "27.78ms" + } + }, + "runner::execute": { + "common_prefix": "air::execution_step::instructions::call", + "duration": "163.00µs", + "nested": { + "execute": { + "common_prefix": "air::execution_step::instructions::call::resolved_call", + "duration": "115.00µs", + "nested": { + "execute": "29.00µs", + "new": "21.00µs" + } + } + } + }, + "runner::farewell": { + "common_prefix": "air::farewell_step::outcome", + "duration": "328.00µs", + "nested": { + "from_success_result": { + "common_prefix": "air::farewell_step::outcome", + "duration": "304.00µs", + "nested": { + "populate_outcome_from_contexts": { + "common_prefix": "air::farewell_step::outcome::serde_json", + "duration": "270.00µs", + "nested": { + "to_vec(call_results)": "15.00µs", + "to_vec(data)": "44.00µs" + } + } + } + } + } + }, + "signing_step::sign_produced_cids": "161.00µs", + "verification_step::verify": { + "common_prefix": "air_interpreter_data::cid_info", + "duration": "40.00µs", + "nested": { + "verify": "13.00µs" + } + } + } + } + }, + "total_time": "30.02ms" } }, - "datetime": "2023-10-04 14:50:18.122679+00:00", - "platform": "macOS-14.0-arm64-arm-64bit", - "version": "0.48.0" + "datetime": "2023-07-14 15:53:40.260043+00:00", + "features": "check_signatures,gen_signatures", + "platform": "Linux-5.15.0-76-generic-x86_64-with-glibc2.29", + "version": "0.41.0" } } diff --git a/benches/PERFORMANCE.txt b/benches/PERFORMANCE.txt index 7b9abba3..9db66455 100644 --- a/benches/PERFORMANCE.txt +++ b/benches/PERFORMANCE.txt @@ -409,6 +409,469 @@ Machine c1f3ea5950db0a10b44da931c25774d64ab25084f47d504f72f311e694550ff1: execute: 29.00µs new: 38.00µs Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f: +<<<<<<< HEAD + Platform: macOS-13.4.1-arm64-arm-64bit + Timestamp: 2023-07-23 15:42:03.477661+00:00 + AquaVM version: 0.42.0 + Benches: + Features: check_signatures,gen_signatures + big_values_data (9.29ms; 59.062 MiB, 59.062 MiB): Loading a trace with huge values + air::runner::execute_air: 9.29ms + preparation_step::preparation::parse_data: 4.90ms + from_slice: 4.85ms + preparation_step::preparation::prepare: 176.00µs + air::preparation_step::preparation::make_exec_ctx: 19.00µs + air_parser::parser::air_parser::parse: 32.00µs + runner::execute: 12.00µs + runner::farewell: 3.86ms + from_success_result: 3.84ms + populate_outcome_from_contexts: 3.80ms + signing_step::sign_produced_cids: 110.00µs + verification_step::verify: 83.00µs + verify: 10.00µs + dashboard (6.71ms; 52.750 MiB, 52.750 MiB): big dashboard test + air::runner::execute_air: 6.71ms + preparation_step::preparation::parse_data: 1.00ms + from_slice: 947.00µs + preparation_step::preparation::prepare: 327.00µs + air::preparation_step::preparation::make_exec_ctx: 36.00µs + air_parser::parser::air_parser::parse: 170.00µs + runner::execute: 1.70ms + to_string(tetraplets): 369.00µs + runner::farewell: 485.00µs + from_success_result: 465.00µs + populate_outcome_from_contexts: 417.00µs + signing_step::sign_produced_cids: 105.00µs + verification_step::verify: 2.93ms + verify: 197.00µs + long_data (3.88ms; 54.000 MiB, 54.000 MiB): Long data trace + air::runner::execute_air: 3.88ms + preparation_step::preparation::parse_data: 1.76ms + from_slice: 1.72ms + preparation_step::preparation::prepare: 175.00µs + air::preparation_step::preparation::make_exec_ctx: 19.00µs + air_parser::parser::air_parser::parse: 30.00µs + runner::execute: 11.00µs + runner::farewell: 1.06ms + from_success_result: 1.04ms + populate_outcome_from_contexts: 1.00ms + signing_step::sign_produced_cids: 108.00µs + verification_step::verify: 612.00µs + verify: 10.00µs + multiple-cids10 (2.63ms; 52.625 MiB, 52.625 MiB): verifying multiple CIDs for single peer + air::runner::execute_air: 2.63ms + preparation_step::preparation::parse_data: 418.00µs + from_slice: 364.00µs + preparation_step::preparation::prepare: 216.00µs + air::preparation_step::preparation::make_exec_ctx: 33.00µs + air_parser::parser::air_parser::parse: 63.00µs + runner::execute: 452.00µs + to_string(tetraplets): 10.00µs + runner::farewell: 342.00µs + from_success_result: 322.00µs + populate_outcome_from_contexts: 285.00µs + signing_step::sign_produced_cids: 103.00µs + verification_step::verify: 944.00µs + verify: 227.00µs + multiple-cids50 (24.68ms; 59.375 MiB, 59.375 MiB): verifying multiple CIDs for single peer + air::runner::execute_air: 24.68ms + preparation_step::preparation::parse_data: 4.87ms + from_slice: 4.81ms + preparation_step::preparation::prepare: 444.00µs + air::preparation_step::preparation::make_exec_ctx: 255.00µs + air_parser::parser::air_parser::parse: 67.00µs + runner::execute: 8.86ms + to_string(tetraplets): 11.00µs + runner::farewell: 3.40ms + from_success_result: 3.38ms + populate_outcome_from_contexts: 3.34ms + signing_step::sign_produced_cids: 104.00µs + verification_step::verify: 6.86ms + verify: 4.68ms + multiple-peers14 (36.77ms; 59.688 MiB, 59.688 MiB): verifying many CIDs for many peers + air::runner::execute_air: 36.77ms + preparation_step::preparation::parse_data: 5.62ms + from_slice: 5.56ms + preparation_step::preparation::prepare: 462.00µs + air::preparation_step::preparation::make_exec_ctx: 273.00µs + air_parser::parser::air_parser::parse: 70.00µs + runner::execute: 15.29ms + to_string(tetraplets): 11.00µs + runner::farewell: 3.80ms + from_success_result: 3.77ms + populate_outcome_from_contexts: 3.74ms + signing_step::sign_produced_cids: 105.00µs + verification_step::verify: 11.32ms + verify: 5.12ms + multiple-peers25 (188.40ms; 86.000 MiB, 86.000 MiB): verifying many CIDs for many peers + air::runner::execute_air: 188.40ms + preparation_step::preparation::parse_data: 30.22ms + from_slice: 30.15ms + preparation_step::preparation::prepare: 2.17ms + air::preparation_step::preparation::make_exec_ctx: 1.97ms + air_parser::parser::air_parser::parse: 79.00µs + runner::execute: 87.63ms + to_string(tetraplets): 22.00µs + runner::farewell: 20.97ms + from_success_result: 20.94ms + populate_outcome_from_contexts: 20.88ms + signing_step::sign_produced_cids: 115.00µs + verification_step::verify: 46.95ms + verify: 29.99ms + multiple-peers5 (17.65ms; 52.625 MiB, 52.625 MiB): verifying many CIDs for many peers + air::runner::execute_air: 17.65ms + preparation_step::preparation::parse_data: 590.00µs + from_slice: 540.00µs + preparation_step::preparation::prepare: 229.00µs + air::preparation_step::preparation::make_exec_ctx: 35.00µs + air_parser::parser::air_parser::parse: 67.00µs + runner::execute: 13.61ms + execute: 10.57ms + execute: 2.47ms + prepare_request_params: 44.00µs + to_string(tetraplets): 13.00µs + new: 1.83ms + runner::farewell: 483.00µs + from_success_result: 463.00µs + populate_outcome_from_contexts: 429.00µs + to_vec(call_results): 12.00µs + to_vec(data): 209.00µs + signing_step::sign_produced_cids: 109.00µs + verification_step::verify: 2.48ms + verify: 289.00µs + multiple-sigs10 (13.63ms; 52.875 MiB, 52.875 MiB): signing multiple CIDs + air::runner::execute_air: 13.63ms + preparation_step::preparation::parse_data: 653.00µs + from_slice: 602.00µs + preparation_step::preparation::prepare: 224.00µs + air::preparation_step::preparation::make_exec_ctx: 37.00µs + air_parser::parser::air_parser::parse: 65.00µs + runner::execute: 10.85ms + call::execute: 7.94ms + execute: 1.77ms + new: 1.35ms + canon::execute: 496.00µs + runner::farewell: 564.00µs + from_success_result: 544.00µs + populate_outcome_from_contexts: 485.00µs + to_vec(call_results): 12.00µs + to_vec(data): 227.00µs + signing_step::sign_produced_cids: 155.00µs + verification_step::verify: 1.02ms + verify: 238.00µs + multiple-sigs200 (906.10ms; 211.625 MiB, 211.625 MiB): signing multiple CIDs + air::runner::execute_air: 906.10ms + preparation_step::preparation::parse_data: 166.70ms + from_slice: 166.67ms + preparation_step::preparation::prepare: 16.93ms + air::preparation_step::preparation::make_exec_ctx: 16.71ms + air_parser::parser::air_parser::parse: 80.00µs + runner::execute: 381.00ms + runner::farewell: 165.40ms + from_success_result: 165.40ms + populate_outcome_from_contexts: 153.70ms + signing_step::sign_produced_cids: 22.05ms + verification_step::verify: 153.40ms + verify: 84.07ms + multiple-sigs50 (49.64ms; 62.625 MiB, 62.625 MiB): signing multiple CIDs + air::runner::execute_air: 49.64ms + preparation_step::preparation::parse_data: 10.52ms + from_slice: 10.46ms + preparation_step::preparation::prepare: 615.00µs + air::preparation_step::preparation::make_exec_ctx: 428.00µs + air_parser::parser::air_parser::parse: 68.00µs + runner::execute: 21.67ms + runner::farewell: 6.97ms + from_success_result: 6.95ms + populate_outcome_from_contexts: 6.57ms + signing_step::sign_produced_cids: 1.23ms + verification_step::verify: 8.51ms + verify: 4.56ms + network-explore (3.12ms; 52.500 MiB, 52.500 MiB): 5 peers of network are discovered + air::runner::execute_air: 3.12ms + preparation_step::preparation::parse_data: 478.00µs + from_slice: 423.00µs + preparation_step::preparation::prepare: 233.00µs + air::preparation_step::preparation::make_exec_ctx: 27.00µs + air_parser::parser::air_parser::parse: 86.00µs + runner::execute: 174.00µs + to_string(tetraplets): 10.00µs + runner::farewell: 265.00µs + from_success_result: 245.00µs + populate_outcome_from_contexts: 208.00µs + signing_step::sign_produced_cids: 105.00µs + verification_step::verify: 1.71ms + verify: 72.00µs + network_explore (5.23ms; 52.500 MiB, 52.500 MiB): 5 peers of network are discovered + air::runner::execute_air: 5.23ms + preparation_step::preparation::parse_data: 480.00µs + from_slice: 429.00µs + preparation_step::preparation::prepare: 236.00µs + air::preparation_step::preparation::make_exec_ctx: 25.00µs + air_parser::parser::air_parser::parse: 84.00µs + runner::execute: 2.19ms + execute: 1.67ms + execute: 408.00µs + prepare_request_params: 48.00µs + to_string(tetraplets): 17.00µs + new: 300.00µs + runner::farewell: 326.00µs + from_success_result: 306.00µs + populate_outcome_from_contexts: 270.00µs + to_vec(call_results): 12.00µs + to_vec(data): 97.00µs + signing_step::sign_produced_cids: 112.00µs + verification_step::verify: 1.73ms + verify: 76.00µs + null (725.00µs; 52.500 MiB, 52.500 MiB): Empty data and null script + air::runner::execute_air: 725.00µs + preparation_step::preparation::parse_data: 20.00µs + preparation_step::preparation::prepare: 193.00µs + air::preparation_step::preparation::make_exec_ctx: 24.00µs + air_parser::parser::air_parser::parse: 39.00µs + runner::execute: 11.00µs + runner::farewell: 189.00µs + from_success_result: 170.00µs + populate_outcome_from_contexts: 133.00µs + signing_step::sign_produced_cids: 112.00µs + verification_step::verify: 38.00µs + verify: 12.00µs + parser_10000_100 (22.72ms; 57.812 MiB, 57.812 MiB): Running very long AIR script with lot of variables and assignments + air::runner::execute_air: 22.72ms + preparation_step::preparation::parse_data: 20.00µs + preparation_step::preparation::prepare: 21.25ms + air::preparation_step::preparation::make_exec_ctx: 23.00µs + air_parser::parser::air_parser::parse: 21.11ms + runner::execute: 47.00µs + runner::farewell: 192.00µs + from_success_result: 173.00µs + populate_outcome_from_contexts: 137.00µs + signing_step::sign_produced_cids: 110.00µs + verification_step::verify: 39.00µs + verify: 11.00µs +Machine e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441: + Platform: Linux-5.15.0-76-generic-x86_64-with-glibc2.29 + Timestamp: 2023-07-14 15:53:40.260043+00:00 + AquaVM version: 0.41.0 + Benches: + Features: check_signatures,gen_signatures + big_values_data (13.28ms; 59.062 MiB, 59.062 MiB): Loading a trace with huge values + air::runner::execute_air: 13.28ms + preparation_step::preparation::parse_data: 7.70ms + from_slice: 7.64ms + preparation_step::preparation::prepare: 226.00µs + air::preparation_step::preparation::make_exec_ctx: 16.00µs + air_parser::parser::air_parser::parse: 21.00µs + runner::execute: 10.00µs + runner::farewell: 4.97ms + from_success_result: 4.94ms + populate_outcome_from_contexts: 4.90ms + to_vec(call_results): 15.00µs + to_vec(data): 3.93ms + signing_step::sign_produced_cids: 154.00µs + verification_step::verify: 90.00µs + verify: 12.00µs + dashboard (36.27ms; 52.750 MiB, 52.750 MiB): big dashboard test + air::runner::execute_air: 36.27ms + preparation_step::preparation::parse_data: 1.34ms + from_slice: 1.28ms + preparation_step::preparation::prepare: 350.00µs + air::preparation_step::preparation::make_exec_ctx: 42.00µs + air_parser::parser::air_parser::parse: 130.00µs + runner::execute: 29.00ms + execute: 23.27ms + execute: 6.94ms + prepare_request_params: 1.86ms + to_string(tetraplets): 573.00µs + new: 3.79ms + runner::farewell: 746.00µs + from_success_result: 723.00µs + populate_outcome_from_contexts: 678.00µs + to_vec(call_results): 31.00µs + to_vec(data): 379.00µs + signing_step::sign_produced_cids: 159.00µs + verification_step::verify: 4.55ms + verify: 273.00µs + long_data (5.23ms; 54.000 MiB, 54.000 MiB): Long data trace + air::runner::execute_air: 5.23ms + preparation_step::preparation::parse_data: 2.57ms + from_slice: 2.53ms + preparation_step::preparation::prepare: 223.00µs + air::preparation_step::preparation::make_exec_ctx: 16.00µs + air_parser::parser::air_parser::parse: 20.00µs + runner::execute: 10.00µs + runner::farewell: 1.27ms + from_success_result: 1.25ms + populate_outcome_from_contexts: 1.21ms + to_vec(call_results): 14.00µs + to_vec(data): 658.00µs + signing_step::sign_produced_cids: 156.00µs + verification_step::verify: 858.00µs + verify: 12.00µs + multiple-cids10 (15.18ms; 52.625 MiB, 52.625 MiB): verifying multiple CIDs for single peer + air::runner::execute_air: 15.18ms + preparation_step::preparation::parse_data: 486.00µs + from_slice: 432.00µs + preparation_step::preparation::prepare: 256.00µs + air::preparation_step::preparation::make_exec_ctx: 34.00µs + air_parser::parser::air_parser::parse: 46.00µs + runner::execute: 12.19ms + execute: 9.42ms + execute: 2.23ms + prepare_request_params: 48.00µs + to_string(tetraplets): 14.00µs + new: 1.49ms + runner::farewell: 546.00µs + from_success_result: 524.00µs + populate_outcome_from_contexts: 492.00µs + to_vec(call_results): 14.00µs + to_vec(data): 229.00µs + signing_step::sign_produced_cids: 157.00µs + verification_step::verify: 1.41ms + verify: 314.00µs + multiple-cids50 (323.00ms; 59.375 MiB, 59.375 MiB): verifying multiple CIDs for single peer + air::runner::execute_air: 323.00ms + preparation_step::preparation::parse_data: 6.79ms + from_slice: 6.72ms + preparation_step::preparation::prepare: 595.00µs + air::preparation_step::preparation::make_exec_ctx: 362.00µs + air_parser::parser::air_parser::parse: 49.00µs + runner::execute: 299.20ms + execute: 232.19ms + execute: 53.08ms + prepare_request_params: 54.00µs + to_string(tetraplets): 16.00µs + new: 36.44ms + runner::farewell: 6.07ms + from_success_result: 6.05ms + populate_outcome_from_contexts: 6.01ms + to_vec(call_results): 16.00µs + to_vec(data): 4.77ms + signing_step::sign_produced_cids: 180.00µs + verification_step::verify: 10.09ms + verify: 6.97ms + multiple-peers14 (383.60ms; 59.750 MiB, 59.812 MiB): verifying many CIDs for many peers + air::runner::execute_air: 383.60ms + preparation_step::preparation::parse_data: 7.75ms + from_slice: 7.68ms + preparation_step::preparation::prepare: 607.00µs + air::preparation_step::preparation::make_exec_ctx: 374.00µs + air_parser::parser::air_parser::parse: 52.00µs + runner::execute: 351.40ms + execute: 274.07ms + execute: 65.03ms + prepare_request_params: 52.00µs + to_string(tetraplets): 15.00µs + new: 46.23ms + runner::farewell: 6.55ms + from_success_result: 6.53ms + populate_outcome_from_contexts: 6.49ms + to_vec(call_results): 16.00µs + to_vec(data): 5.13ms + signing_step::sign_produced_cids: 170.00µs + verification_step::verify: 17.10ms + verify: 7.55ms + multiple-peers25 (2.15s; 85.750 MiB, 86.562 MiB): verifying many CIDs for many peers + air::runner::execute_air: 2.15s + preparation_step::preparation::parse_data: 40.88ms + from_slice: 40.76ms + preparation_step::preparation::prepare: 3.70ms + air::preparation_step::preparation::make_exec_ctx: 3.40ms + air_parser::parser::air_parser::parse: 58.00µs + runner::execute: 2.00s + execute: 1.56s + execute: 378.34ms + prepare_request_params: 73.00µs + to_string(tetraplets): 16.00µs + new: 259.16ms + runner::farewell: 34.76ms + from_success_result: 34.72ms + populate_outcome_from_contexts: 34.63ms + to_vec(call_results): 18.00µs + to_vec(data): 27.11ms + signing_step::sign_produced_cids: 190.00µs + verification_step::verify: 70.22ms + verify: 44.09ms + multiple-sigs200 (6.04s; 214.375 MiB, 214.375 MiB): signing multiple CIDs + air::runner::execute_air: 6.04s + preparation_step::preparation::parse_data: 219.80ms + from_slice: 219.70ms + preparation_step::preparation::prepare: 25.42ms + air::preparation_step::preparation::make_exec_ctx: 25.09ms + air_parser::parser::air_parser::parse: 58.00µs + runner::execute: 5.30s + call::execute: 3.83s + execute: 941.01ms + new: 604.96ms + canon::execute: 308.30ms + runner::farewell: 253.30ms + from_success_result: 253.30ms + populate_outcome_from_contexts: 233.40ms + to_vec(call_results): 16.00µs + to_vec(data): 145.70ms + signing_step::sign_produced_cids: 30.84ms + verification_step::verify: 214.00ms + verify: 119.20ms + multiple-sigs50 (369.10ms; 62.562 MiB, 62.562 MiB): signing multiple CIDs + air::runner::execute_air: 369.10ms + preparation_step::preparation::parse_data: 13.94ms + from_slice: 13.87ms + preparation_step::preparation::prepare: 914.00µs + air::preparation_step::preparation::make_exec_ctx: 678.00µs + air_parser::parser::air_parser::parse: 52.00µs + runner::execute: 328.70ms + call::execute: 238.69ms + execute: 56.21ms + new: 38.04ms + canon::execute: 18.24ms + runner::farewell: 11.01ms + from_success_result: 11.01ms + populate_outcome_from_contexts: 10.57ms + to_vec(call_results): 14.00µs + to_vec(data): 7.77ms + signing_step::sign_produced_cids: 1.77ms + verification_step::verify: 12.49ms + verify: 6.96ms + network-explore (6.83ms; 52.500 MiB, 52.500 MiB): 5 peers of network are discovered + air::runner::execute_air: 6.83ms + preparation_step::preparation::parse_data: 603.00µs + from_slice: 545.00µs + preparation_step::preparation::prepare: 274.00µs + air::preparation_step::preparation::make_exec_ctx: 26.00µs + air_parser::parser::air_parser::parse: 68.00µs + runner::execute: 2.55ms + execute: 1.98ms + execute: 490.00µs + prepare_request_params: 52.00µs + to_string(tetraplets): 16.00µs + new: 339.00µs + runner::farewell: 429.00µs + from_success_result: 406.00µs + populate_outcome_from_contexts: 372.00µs + to_vec(call_results): 14.00µs + to_vec(data): 140.00µs + signing_step::sign_produced_cids: 157.00µs + verification_step::verify: 2.67ms + verify: 81.00µs + parser_10000_100 (30.02ms; 57.812 MiB, 57.812 MiB): Running very long AIR script with lot of variables and assignments + air::runner::execute_air: 30.02ms + preparation_step::preparation::parse_data: 19.00µs + preparation_step::preparation::prepare: 28.02ms + air::preparation_step::preparation::make_exec_ctx: 18.00µs + air_parser::parser::air_parser::parse: 27.78ms + runner::execute: 163.00µs + execute: 115.00µs + execute: 29.00µs + new: 21.00µs + runner::farewell: 328.00µs + from_success_result: 304.00µs + populate_outcome_from_contexts: 270.00µs + to_vec(call_results): 15.00µs + to_vec(data): 44.00µs + signing_step::sign_produced_cids: 161.00µs + verification_step::verify: 40.00µs + verify: 13.00µs +======= Platform: macOS-14.0-arm64-arm-64bit Timestamp: 2023-10-04 14:50:18.122679+00:00 AquaVM version: 0.48.0 diff --git a/benches/performance_metering/README.md b/benches/performance_metering/README.md deleted file mode 100644 index 87e1f2e0..00000000 --- a/benches/performance_metering/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Preparing data for the performance_metering - -One may need to regenerate data on changing data format. Here is the instruction for data regeneration. - -## `parser_10000_100` - -Data is empty, no regeneration required. - -## `dashboard` and `network_explore` - -Run `junk/gen_test_data`. No WASM binary required. It will generate prev and current data as JSON files -with prefixes `dashboard` and `explore`. - -## `big_data` and `long_data` - -In the `junk/cidify` directory, run - -``` sh -cargo run -- ./anomaly_big.json simple-calls-info.json > ../../air/benches/data/anomaly_big.json -cargo run -- ./anomaly_long.json simple-calls-info.json > ../../air/benches/data/anomaly_long.json -cp ../../air/benches/data/anomaly_big.json ../../benches/performance_metering/big_values_data/prev_data.json -cp ../../air/benches/data/anomaly_long.json ../../benches/performance_metering/long_data/cur_data.json -``` - -You may need update the `cidify` tool if you change data format again. diff --git a/benches/performance_metering/big_values_data/cur_data.json b/benches/performance_metering/big_values_data/cur_data.json deleted file mode 100644 index e69de29b..00000000 diff --git a/benches/performance_metering/big_values_data/keypair.ed25519 b/benches/performance_metering/big_values_data/keypair.ed25519 deleted file mode 100644 index 44206f1a..00000000 --- a/benches/performance_metering/big_values_data/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -4nWRt5MyWTEjBJEYaKokky9SS7T5Vms9v2VfiFwAwNaW1E9FVWAFV8sKxMy7yLCkm5zKhkV6cRKwWAGTcVMvvEac diff --git a/benches/performance_metering/big_values_data/params.json b/benches/performance_metering/big_values_data/params.json deleted file mode 100644 index 6df5f4e0..00000000 --- a/benches/performance_metering/big_values_data/params.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "comment": "Loading a trace with huge values" -} diff --git a/benches/performance_metering/big_values_data/script.air b/benches/performance_metering/big_values_data/script.air deleted file mode 100644 index f4a13ef7..00000000 --- a/benches/performance_metering/big_values_data/script.air +++ /dev/null @@ -1 +0,0 @@ -(null) diff --git a/benches/performance_metering/dashboard/keypair.ed25519 b/benches/performance_metering/dashboard/keypair.ed25519 deleted file mode 100644 index 44206f1a..00000000 --- a/benches/performance_metering/dashboard/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -4nWRt5MyWTEjBJEYaKokky9SS7T5Vms9v2VfiFwAwNaW1E9FVWAFV8sKxMy7yLCkm5zKhkV6cRKwWAGTcVMvvEac diff --git a/benches/performance_metering/dashboard/params.json b/benches/performance_metering/dashboard/params.json deleted file mode 100644 index 9f1e5138..00000000 --- a/benches/performance_metering/dashboard/params.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "comment": "big dashboard test" -} diff --git a/benches/performance_metering/long_data/keypair.ed25519 b/benches/performance_metering/long_data/keypair.ed25519 deleted file mode 100644 index 44206f1a..00000000 --- a/benches/performance_metering/long_data/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -4nWRt5MyWTEjBJEYaKokky9SS7T5Vms9v2VfiFwAwNaW1E9FVWAFV8sKxMy7yLCkm5zKhkV6cRKwWAGTcVMvvEac diff --git a/benches/performance_metering/long_data/params.json b/benches/performance_metering/long_data/params.json deleted file mode 100644 index 0a25f1f9..00000000 --- a/benches/performance_metering/long_data/params.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "comment": "Long data trace" -} diff --git a/benches/performance_metering/long_data/prev_data.json b/benches/performance_metering/long_data/prev_data.json deleted file mode 100644 index e69de29b..00000000 diff --git a/benches/performance_metering/long_data/script.air b/benches/performance_metering/long_data/script.air deleted file mode 100644 index f4a13ef7..00000000 --- a/benches/performance_metering/long_data/script.air +++ /dev/null @@ -1 +0,0 @@ -(null) diff --git a/benches/performance_metering/multiple-cids10/keypair.ed25519 b/benches/performance_metering/multiple-cids10/keypair.ed25519 deleted file mode 100644 index 939ffa85..00000000 --- a/benches/performance_metering/multiple-cids10/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -36gwouRjGormaTzTsyzx7cbuLbsTMk31VoZZ7LA2DaLNHQBqWND4ThNfJUUCnbBhMvRLCJrfr9zW68QURik7zPnT \ No newline at end of file diff --git a/benches/performance_metering/multiple-cids10/params.json b/benches/performance_metering/multiple-cids10/params.json deleted file mode 100644 index a20054c8..00000000 --- a/benches/performance_metering/multiple-cids10/params.json +++ /dev/null @@ -1 +0,0 @@ -{"comment":"verifying multiple CIDs for single peer"} diff --git a/benches/performance_metering/multiple-cids10/script.air b/benches/performance_metering/multiple-cids10/script.air deleted file mode 100644 index 1fe765d7..00000000 --- a/benches/performance_metering/multiple-cids10/script.air +++ /dev/null @@ -1 +0,0 @@ -(seq (seq (call "12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m" ("..0" "init") [] data) (fold data x (seq (fold data y (seq (call "12D3KooWHNgtEsSgAQukzihG36ErkNc9f58mjUeB8JcCRKNr1jQu" ("serv..1" "args") [x y] $stream) (next y))) (next x)))) (call "12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m" ("" "complete") [])) \ No newline at end of file diff --git a/benches/performance_metering/multiple-peers5/keypair.ed25519 b/benches/performance_metering/multiple-peers5/keypair.ed25519 deleted file mode 100644 index 939ffa85..00000000 --- a/benches/performance_metering/multiple-peers5/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -36gwouRjGormaTzTsyzx7cbuLbsTMk31VoZZ7LA2DaLNHQBqWND4ThNfJUUCnbBhMvRLCJrfr9zW68QURik7zPnT \ No newline at end of file diff --git a/benches/performance_metering/multiple-peers5/params.json b/benches/performance_metering/multiple-peers5/params.json deleted file mode 100644 index 70335724..00000000 --- a/benches/performance_metering/multiple-peers5/params.json +++ /dev/null @@ -1 +0,0 @@ -{"comment":"verifying many CIDs for many peers"} diff --git a/benches/performance_metering/multiple-peers5/script.air b/benches/performance_metering/multiple-peers5/script.air deleted file mode 100644 index 0ea69611..00000000 --- a/benches/performance_metering/multiple-peers5/script.air +++ /dev/null @@ -1 +0,0 @@ -(seq (seq (call "12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m" ("..0" "init") [] data) (fold data p (seq (fold data x (seq (fold data y (seq (call p ("serv..1" "args") [p x y] $stream) (next y))) (next x))) (next p)))) (seq (call "12D3KooWHNgtEsSgAQukzihG36ErkNc9f58mjUeB8JcCRKNr1jQu" ("..2" "collect") []) (call "12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m" ("" "complete") []))) \ No newline at end of file diff --git a/benches/performance_metering/network_explore/keypair.ed25519 b/benches/performance_metering/network_explore/keypair.ed25519 deleted file mode 100644 index 44206f1a..00000000 --- a/benches/performance_metering/network_explore/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -4nWRt5MyWTEjBJEYaKokky9SS7T5Vms9v2VfiFwAwNaW1E9FVWAFV8sKxMy7yLCkm5zKhkV6cRKwWAGTcVMvvEac diff --git a/benches/performance_metering/network_explore/params.json b/benches/performance_metering/network_explore/params.json deleted file mode 100644 index a9c97364..00000000 --- a/benches/performance_metering/network_explore/params.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "comment": "5 peers of network are discovered" -} diff --git a/benches/performance_metering/parser_10000_100/cur_data.json b/benches/performance_metering/parser_10000_100/cur_data.json deleted file mode 100644 index e69de29b..00000000 diff --git a/benches/performance_metering/parser_10000_100/keypair.ed25519 b/benches/performance_metering/parser_10000_100/keypair.ed25519 deleted file mode 100644 index 44206f1a..00000000 --- a/benches/performance_metering/parser_10000_100/keypair.ed25519 +++ /dev/null @@ -1 +0,0 @@ -4nWRt5MyWTEjBJEYaKokky9SS7T5Vms9v2VfiFwAwNaW1E9FVWAFV8sKxMy7yLCkm5zKhkV6cRKwWAGTcVMvvEac diff --git a/benches/performance_metering/parser_10000_100/params.json b/benches/performance_metering/parser_10000_100/params.json deleted file mode 100644 index ec25559d..00000000 --- a/benches/performance_metering/parser_10000_100/params.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "comment": "Running very long AIR script with lot of variables and assignments" -} diff --git a/benches/performance_metering/parser_10000_100/prev_data.json b/benches/performance_metering/parser_10000_100/prev_data.json deleted file mode 100644 index e69de29b..00000000 diff --git a/benches/performance_metering/parser_10000_100/script.air b/benches/performance_metering/parser_10000_100/script.air deleted file mode 100644 index 9325a18e..00000000 --- a/benches/performance_metering/parser_10000_100/script.air +++ /dev/null @@ -1 +0,0 @@ -(seq (call "peer" ("serv" "func") [] stream) (fold stream i (seq (seq (ap i BQtKCOpmWpJWOnixqRVeykHdtcVNweQkpPTinEXdIro) (seq (seq (ap i xdjmBWOqxfrFkm) (seq (seq (ap i rxftete) (seq (seq (ap i soddNVpizEWZndAICwHLIOUtaBYSlzBJKzeDTwgLYIjDgWqTBIHdgwqHYHolXfPkZWhxrlGrBSUvaVjnQwCJYBh) (seq (seq (ap i XnXasInWTklhTrEFmUAgU) (seq (seq (ap i RPvxaaaNizYSkZtKfEXRwuyYHdPMXlBhaNBbSbqCLDSPDDXCKKxPhbBKDNABktku) (seq (seq (ap i CzpgKyawODPTwikTSjMVIJURRpioVLWGmBoSyjFf) (seq (seq (ap i iUIwZtudqNAqYIxrbcuJVggNYMrIRcTwKDxoQNELrEmXQfDPjkfSnJwHPQtdPlhxiHAsUYfIlglwMZADWzJzCXCHoBVSHUFE) (seq (seq (ap i usbwjUsfFlOqQLIQsWuZXUJsbDhadRZqQoPdMjyPgDidlrKGKVsUenFD) (seq (seq (ap i cVDzxFmjkmQpYwrFauSRnb) (seq (seq (ap i WDqYnYaBycobsBGvqxcqCyjxGFxMdDHpgepmKiBtLBwKQWLbfsGPAzTpILBeAmbMfLLWgeoKadzSHLMtExnJNlF) (seq (seq (ap i BZbfmArhXltvzoIifXObTrbqLRiLszOvwINdGHHOyKMCvjZTAsBfSesO) (seq (seq (ap i ujFNcTIhNGOqblGugZPtASfEPrFjWiyrLbXmNkbqC) (seq (null) (null))) (seq (ap i dqIHJuHLENyEqQSGpKbj) (seq (null) (null))))) (seq (ap i etvrAABAbkADnQPWViaUuuuQENkkawITGmKqvbKwwjCFUpdYbjMjSyMvXlgTfFjQmpqBGkzjZALtvCbZTkRfH) (seq (seq (ap i oSsVFqKKFGOTmwsNuqQXfXRBrktWnYnILnwIzNDaRUKkMqQmkjeZSpGEkcnPEpyaJGSjnqrzXKOySpZdOeZvumdRNySGPsbY) (seq (null) (null))) (seq (ap i IKcluFEIbzotKIngPIrfRGWjGrJHdrjdWfmPDKPgWN) (seq (null) (seq (ap i AZhSVusKDphWGxuwugjiMBwyADzecigTVVlEPtRDQmSiOQOuKPqIXmGS) (seq (null) (null))))))))) (seq (ap i YCWyeOVqaSh) (seq (seq (ap i MBFvgTxjVndXnDVmGLQLBlZueHjDfmrezWlRvjwZRcnIZzGCHsTrDBbqvsWoRseViYyiOPRjbUrXunLbbJnmzOwdYuxQbkVkN) (seq (seq (ap i UhUMtrFqeLTFmopcNIuhtpyRaTZcqDyUUTIQWOSSlRzHulSxDelKHlYpR) (seq (null) (null))) (seq (ap i oRPiKxTQpelUmVckkuFpw) (seq (null) (seq (ap i jYBxASikRvNXYYMWw) (seq (null) (null))))))) (seq (ap i NVQHUdNcXgNrAseQjCgTmrDEdjXTUDmyIMcmBZZiccnajGhrXqjWWHeATvojOAJJVEtSDzzTNcPMbIznAsyZIXbEncKRcUfQ) (seq (seq (ap i UPeNzVwGbWVQuUdoazgcbqUufjahdzGMmYhrdQZYBhiKHlgADkWEVzRGYMcVyIDGiozIKpYaywqzbvNlsUSK) (seq (null) (null))) (seq (ap i EBiGwimjhFsgxUdvscwBztWfNKEYJAfNf) (seq (null) (seq (ap i jewYJyCfnOeKqJNrUdbCfJsGOEOTabROlCKeAepOjcBdLComoNIOdBgJsqjwYFiQjaHematcOqvTzZ) (seq (null) (null))))))))))) (seq (ap i cC) (seq (seq (ap i psjDeEwDtseNh) (seq (seq (ap i JUZcgTqfQDwXJZxPpuSOznOOYbBbfQsGOXJlBhsNiVCqwIxOJUFWWdNQxUGjNwRkPGyxaaaQfOyIpzbdhDplSFQxZ) (seq (seq (ap i WAyDbyoHojEqpbURhGg) (seq (null) (null))) (seq (ap i NFsZRiLfWLonD) (seq (null) (seq (ap i AMGzPaPjGDEJzEclnvjxKjHYEziZdLERxUihrgyjKuriMGvygOqn) (seq (null) (null))))))) (seq (ap i TcDUBvYiScTFISASrodTfOFWAmSHTNfyEtrMKEPaUXFddZVZLmozYDECectMaShQAOfSYzKvAykfLectltqr) (seq (seq (ap i nwzomAzoxRGplWpJdyGJbawWkcyJanCNmMADBjyljHXlaBGgSjzrxGQkvcPpDgaOoYrPNmmvnDLRUlRIEBmnHUUIVnp) (seq (null) (null))) (seq (ap i qAHlJXSeXmJgyObBqzdkQXwTFuqSguoTBIplySzaHpcSTGjkHNtSbJ) (seq (null) (seq (ap i GAFixJdiRZkqPqoOxTtSUjIsublw) (seq (null) (null))))))))) (seq (ap i nkoWhVqcIbXMuMN) (seq (seq (ap i IwPhqKfMlEQoXOORkPTxaJWJU) (seq (seq (ap i wnD) (seq (null) (null))) (seq (ap i QlfnqEhUVGAhOadadHO) (seq (null) (seq (ap i gFHNCqxnPDdTiqwxLxAoZpKqtKfDMSmMzUUSeeIJqtMcbAmasevBGfQrsEOkBmosXhqjFWemDmFfm) (seq (null) (null))))))) (seq (ap i meJmqSaBodGkQWTyPsaBM) (seq (seq (ap i QojvbdFwRncxHKRpJwusQUribtvMaizsTSAEjYbaFrKeBLGmdyifCBtCYcvkVdG) (seq (null) (null))) (seq (ap i sOuBrbQgazhhzCshjDtrNQDkcOFvOATlleFhfFtBZohRvIVZarcfEUggrsYtCPfa) (seq (null) (seq (ap i MhbytUfrXPxlYmUMeQZHwCmIpvYtRtqeqcuyqHgVwGXnNqxOy) (seq (null) (null))))))))))))) (seq (ap i AYPHLsbTdQdKnMhKRWQNmtoFPIWADuqVyIBZzEatDzgHHTckl) (seq (seq (ap i wrrgZDgFnvFCYPuZQbVWlampNnJZXcAkxWhHgeUcLHMIksrtFTphdMZuuazNKmUdxhjPwJOqpyJJcPr) (seq (seq (ap i OATajXxxANOIReEktGeDbGzqNtboTPnfbxugqwvruDFZMjfNhIaHFvKKkEFDAJchvtAlua) (seq (seq (ap i tjcnVDxkLgKjNSKrUTZXQQcVxMDJTYaAcNitUYUjDoyTZGRtfepQvMKbF) (seq (seq (ap i exGbCRoIxIkEiuDKJJpefDXXdbnrmougrVvIfSbDFDNSXyXepEmrtRTXAFSHYYYqSUREItHBZKimkAoOXAyfMpMoOu) (seq (null) (null))) (seq (ap i hDcGQKPIXlIxLehWvKiwcMfzPxhHmxrSKrFjdAyTsoRXajvGIzemq) (seq (null) (null))))) (seq (ap i xsvAAuijmxpVrbyWYefMbqPQIbXnKSUdwoDSxnwcGkVsz) (seq (seq (ap i VashzsJnJfubZnOGXxuMOlgPpJmeFAuYTsFMMVjHsTkJ) (seq (null) (null))) (seq (ap i nayqnWQVVbbaqGSGXiHssbbJqFbtsZqhFFjwCmVSfdNAqhTDxmGbnOyBkzs) (seq (null) (seq (ap i ewPCCRtAjHMwzBaRehfCShKjxGLZVMEZSvsUwACudcLVcTtrKsjeEosofWieYKthmWZOcxKqYntpYZzmjo) (seq (null) (null))))))))) (seq (ap i cgEqcfUSojgPbNMbEKaUcKhrXyJsbqjkYJXykSFBQEztGjdAGZtIqvqrMvfFnEqwTFjanRBtvmnmi) (seq (seq (ap i ohLZsFoKNutbXorVw) (seq (seq (ap i kIalTcjiFsQSUqoLTqEfxnmqljSt) (seq (null) (null))) (seq (ap i WyfyZNYoEpXjbICpuZVCtQzUFTXfKnxfzhVbGg) (seq (null) (seq (ap i zjwtPhvjAgDHlliDYZibUwSWEuwqqRkUKhXVOaGMjVytvmLSxnobWceNTtwzWgRKrvfKhFRaGYbnTfKldADUF) (seq (null) (null))))))) (seq (ap i KSadpVKzpiyZdyArwchhUnLYBnfmMHXzsWNiapKRLxtWAePLWqdPRTHZTuiTvsIJMuhxMxfS) (seq (seq (ap i sDxOWiaDIFPOBHlBkHJQfemmRIYbehYvTayomkGp) (seq (null) (null))) (seq (ap i XwADC) (seq (null) (seq (ap i CBDIWGZHVpNZDewUlDfkEPHBcxIWmiCObyvrgEHkiLcPQYRYFcczjFAUhYrIjsWjUkJDxmCzQkEpFYeaREJV) (seq (null) (null))))))))))) (seq (ap i rmQwVGpibxskYwWQxcxYmIgWblHJBxIq) (seq (seq (ap i VdlwMrkrRYnXRmIYTZLXFwpGndICncFHIGiSbrPLzzMIyiyVWpzAyBKwIJJxQE) (seq (seq (ap i vnXfmWWyiPlodiHACvkRcRAZhvdrgVOkQrVZanxspHaDzMvfCadFBaQiHpxXgIIVRzbnjqOqyxljDjUBtj) (seq (seq (ap i VaADBWoMLLYYWwNyoLOIZXdsNudwYWXmZqufpcccErUfnzMnx) (seq (null) (null))) (seq (ap i qqPKPueZcQvnkUMCgZSZqOleyxyvakgiWxXAiZSlFXimftKpNqfibd) (seq (null) (seq (ap i mpB) (seq (null) (null))))))) (seq (ap i XGJGcHDo) (seq (seq (ap i DHMyUrSOUEkZXKyrSFuXEinPZLjpJGQJIiQTYzmbTIRQDDTMPFZmFsAxGiovCyKwJAPAjHOcUzCuTlGCVggOyqWYhXZYp) (seq (null) (null))) (seq (ap i INqJXuiPinypsurIytrpEyLkdMSpbMdbHrDWbYoPphNdFtfyJqbNQCGssnkdeaSXrnltnKgsymr) (seq (null) (seq (ap i zJRsYsJWZQtNMKkONHImOkwqnM) (seq (null) (null))))))))) (seq (ap i NNEEWKWJzUZEjhjGLrhSPZ) (seq (seq (ap i bDSuZGgOIbiRiwsuYOwLG) (seq (seq (ap i OVpqWreDHFsxgJjGAKZXhcbNCrUFckdkrBbYeeMouRDpn) (seq (null) (null))) (seq (ap i WKHLRxkdiiytOzWBAVkwacPnIYFCwhyGfljUHEvlgEmBVHqIzckyWDMYPVomM) (seq (null) (seq (ap i gFFuEpSgEOrCmIdReGWBmASTgeJckynDGdNLRIRnFbWopXHWHBPHMHndFibXeRgVilXsCqJRRnvFfyTIpcn) (seq (null) (null))))))) (seq (ap i ndOGcVuXFmWnwxMjthGvwycTDWJbReFIdxXnhSkuXmgvnWnCcxNtrzRLklNQLDXgAH) (seq (seq (ap i WhhfBfjxBtJAptIMHVcaWUBqXMnz) (seq (null) (null))) (seq (ap i sdvXYAVAvuKVyMhGnQZjzdGPytiSdiUzvrmbaoXsOYzMMfAlLGfsCcLnHawP) (seq (null) (seq (ap i EQtgzLMxMKRwrLmsbSofNfFRkAxUVYBLzvzVuitjdqVvpKpIGbemUpbMtLlitjyBY) (seq (null) (null))))))))))))))) (seq (ap i CZnEBvWmOSejOFSfWHrvMEjilPFlIqidcROWllxeRxYjFJfHofSidalnASmyBeYqfNTp) (seq (seq (ap i zBGbARviNhHhQWrjflMOdmqUtWXdHBNUsyWiMiQOtDFwButEIrCQaluoEsEAsPwEZJGFMkFw) (seq (seq (ap i MUtSTcKDpYLLjhGZrkuOkjvYWMFMwaaata) (seq (seq (ap i WGjUOnyEsSrsmFLpN) (seq (seq (ap i kIpMfQiUEkJKJQQyREOzgTgKUijhyjyiQvksoufgsAtIkaYQpXwquwYhbxIclXqMErXVqskK) (seq (seq (ap i DrKFWNKvAUbEsPwDvlMaDAXl) (seq (null) (null))) (seq (ap i JtEbmggzeQGSVcEeyLkIJWxvVyYswAcXBrRDA) (seq (null) (null))))) (seq (ap i dpBUIxuCxzlMSDoMUabIiVpFlaqoORVTnxdAzuQQcVlguphSxsLVvdfDyOknBRiRALNoBTJiaNfJ) (seq (seq (ap i WbFOYEMESzjRJeitnTCRmkqEgQopQzsltiVFtEVd) (seq (null) (null))) (seq (ap i uqupbaXxFc) (seq (null) (seq (ap i ICePMPAsVKuKYkpdzZBNHqPAyUrMGOlEi) (seq (null) (null))))))))) (seq (ap i CkJAjKgOyKsPnQoZFwCwoWilzvPONHsmvVfXbYHIJYKnDfhQoPSmHKnMHgaCqDgIKFoaifLvaiqstlQsBURyUptFcXGthvNd) (seq (seq (ap i nz) (seq (seq (ap i uJnBpAmQHyrMwJJYOGmddpZkHBTAZgOzFPoiieEw) (seq (null) (null))) (seq (ap i IvVWmNvjIaFzAqyZoWwtfoEWEw) (seq (null) (seq (ap i oYJFXGCvkHLokJuuTPStwhyQMFItaJqSHRXhNRshmWNrkTWzvgasHXxXVFNSiGsnjasTLqeDtOEVXwDlakCnkcnBleyXHpWRI) (seq (null) (null))))))) (seq (ap i mDaadlkXwKegfy) (seq (seq (ap i UpiIoTnxYbCmspWJlHiSfXMAwdQLFZPXJrNkzWCbUkeubxR) (seq (null) (null))) (seq (ap i SXbEnpncmoYNqdQVKkzwTsQRQAMiETUUPziWMmBAyEatMdssYCqolLRkqW) (seq (null) (seq (ap i FYNjWhLmNRPlzAaVcuKrycNKzKmaLnpmClltjT) (seq (null) (null))))))))))) (seq (ap i bSmembIhbuRdWJighOieLmHpwwlVqDYwfeHtIgqjNRqlfCWrsPsovEugenamgcLwe) (seq (seq (ap i vooEdGtHcEgulTmFEGgXVYpMFx) (seq (seq (ap i TSaXQeHdPkVyuYZWbLOrjWPAeJuXgFtdYtyBGIRiYFqhBxdHGcnWiQRJNlQlBdOzHSURFtwHDaMgOoYgaay) (seq (seq (ap i SbNOsDYnvEoasNnttDVzaopAsJkuRdiyxtkeWfJrjtSBdAGSJDBujbmDZyPmaGVDCcNt) (seq (null) (null))) (seq (ap i dAMPTyaSdLrrTUtdw) (seq (null) (seq (ap i znFOGBKHDKBcegmXYSvWwZQKAPTGeNfvOCFYyHhmzGbqYZuFznsRfnPyggXOyfGozIgNMkgaKHOkpvJtfOOHeMzqqJprIJzPR) (seq (null) (null))))))) (seq (ap i XGXJiuoOcHpxwLEhKitpQZPFHJMNhHCQVUjsfEFlHtPLaxtTaTEMCWsqTieFuTwWWVPbVfAN) (seq (seq (ap i bVqUXaovVavDCYymDErpNBUFZa) (seq (null) (null))) (seq (ap i ZNQexQuYwoZLoKgmDxDDBmzkCawCHNYSalzMdEPdnToeTUBpzipSmxmcgSUfOvVqbEn) (seq (null) (seq (ap i vItutpHPzbqQkdsyXscolCIxRjAiQQARdxSQtYfDUPmTdqDdYOyGRQvBXZlfECMyWJpFVZpDGaOAFbWROQMkznxqcava) (seq (null) (null))))))))) (seq (ap i XbElQmyJGvFeaYWyGak) (seq (seq (ap i YgnBNeAihAaPurBPvJJYGMfzrXrCDGfkSqiPtEAQDceZVwvQibGy) (seq (seq (ap i DLNtvIAssRncUfYqvodcFylCbzuuMnJUXSHylDAXucvsBGmxCOzkvHshOFvaOPhQaZhSsvZcKsLlwCRPwLKJAjx) (seq (null) (null))) (seq (ap i jueccGLlQToeRKvEyIWvwSFZgrJnzJApLWXbmTyBCooChBaLwegjWImZdNpPWbalAbGTbROf) (seq (null) (seq (ap i ONEartReLhesuYQlsmWKeAmDuVjcKJECwbWaZGpORCDhsYQYwtdmMNmOf) (seq (null) (null))))))) (seq (ap i MmnFUqYmZMHyefKaLHNeejLnorNpBwzHLRUvedq) (seq (seq (ap i PLy) (seq (null) (null))) (seq (ap i pMtFnmfglLRwiRXAouMZCzHkawfDejLngKbZYvOvHMCqSxPIqRUwWLFH) (seq (null) (seq (ap i BpFtXIolzdQOziEROKTsXdytY) (seq (null) (null))))))))))))) (seq (ap i vYQLQwp) (seq (seq (ap i WIhAtnlgrYlPOdBJwb) (seq (seq (ap i sBhyiEoqDVRucMIdAkMtJEbGlrGqbnvxjaGkWxQuyadLrHGEXTrAjAAJPyMduXahMubZGxoNrAMnFkpbZLBQfuhCcDpYIeQvD) (seq (seq (ap i ojVTSpKnzkXNYQjq) (seq (seq (ap i dCxiEveWSFOWGmmvexVJOvnCQgmRkPoZHhnbBEFUnONtqjeBloiccBNCZPUIzicmZNJHvZtUDluPBYgUWui) (seq (null) (null))) (seq (ap i ioCqEywTNIXBHCHacIdWPWKFnsBAFvOhnDVLWTOgpsDORNpRaimIGTfxviaiOUIIpmuMbcvJRdhEyrMicuUua) (seq (null) (null))))) (seq (ap i zGvflDFUaNsnYPolJsHV) (seq (seq (ap i tTyCnsQasdEbjRnEnWbHowOeN) (seq (null) (null))) (seq (ap i EJCzmGiesSWLXA) (seq (null) (seq (ap i QfOpbsjAUANhZWIbnBgqoutmRRPzVOghmIDPxpKWjqjhvtGx) (seq (null) (null))))))))) (seq (ap i GWiogp) (seq (seq (ap i lElXMVofdWoKxGLkHOrfybnYtwmEfhJYvdipi) (seq (seq (ap i lwIUnEJiqTSRnenfQHlom) (seq (null) (null))) (seq (ap i PMLfgRKrVvSVMzaTjdEDkAiLhduNEaoVZhPBJQtZsnrFUmxdvtxgznXoUHxxLIkJjwnJiGpZf) (seq (null) (seq (ap i bxuOWAFKqbRjoAFxvHWdOTCrwJFItLLVNnaDwbvtpycXItYBmbEqTLQHChOvDElzQULcXBngIjFapuSkxrccdzevhO) (seq (null) (null))))))) (seq (ap i zVuBKPdjawJJjsgyw) (seq (seq (ap i MbkJWaDJmHbcZjfCDaufkfuKSULBfBMjzHSFKOHoXCXZJnhqKIhdFnuQgdyFLSHXLUxlJRGsaj) (seq (null) (null))) (seq (ap i iCerxWvwoavPAjyVjEPaZJQATBCzcWKqxNXAiFxyrVhxcdBnTXkfNJJDcENJSbOgq) (seq (null) (seq (ap i QdWNVLqCACBeagyZCsXeAMBjHYCPqwPQmqlthGmUHpwJvvRUpxQIKGbRvigkdyOPhAmgNYYohnhFxlGsOdkbaygprxFESzjgp) (seq (null) (null))))))))))) (seq (ap i xGwRs) (seq (seq (ap i PGTmuINdXvCnevSzBgcVpyQIoTzy) (seq (seq (ap i VrnyNckgHcKbFiNWkrNdBFzfUyBOhiPlUHIePDpyEjwZejcYTREiEQ) (seq (seq (ap i fcjroxecGuumrYKpwgfSzelwCeljrwJzbTkOGFJTKDvWKhrQUHuzErXmxfWzmTKJRSivfAYYajdzTlgcXEKFyQN) (seq (null) (null))) (seq (ap i REblaq) (seq (null) (seq (ap i woIFkvXUPwTZ) (seq (null) (null))))))) (seq (ap i zcNSCxLKioffcmgmKIRdJlawguZRwsrRJVoIMFzPIf) (seq (seq (ap i bUFSFgJXCHxKoKHCoWxrPmxcxLHLWeCWVXFuYuJuJxVtWaEmDhaCq) (seq (null) (null))) (seq (ap i ihMuLRTkUgpVvfVooYuIOmTpnkngEcalMMKuDIGnpXMSgukpWGhWLTLKhRTPRDfSYsq) (seq (null) (seq (ap i kDuLykTWpaLHrwVfEYQrLaxFDZijcFpYXsFaYWZsFeEDQgMMlAoNUtQquAgSCsVhxCknAiwSfhDJyacXhMCQyHyMEilCEFQMXm) (seq (null) (null))))))))) (seq (ap i zmbacgduXWsslrXyjsOQHsWEffXfnrFSPWDKKT) (seq (seq (ap i JFNxEwslopYtBZQuKUdrrLZREqhUETEiVOlFwkPDoAxJZHLBIudUnoweieuFKDnUpAXWJfoCpFupIRZUiTUw) (seq (seq (ap i hJpfkGArOQrFieGYphMHnmoCPNiKDqxBoynmEjwUWUQuwXYqTAdTlSKusDyybeGSPjshBQjuHzeaBOTuDfnlkBeT) (seq (null) (null))) (seq (ap i YpxJEOLwtNdQdrSZPOlzspnJbHzLPJAqrfKwHNwDxUOAZf) (seq (null) (seq (ap i wmkxYKfqTZdTQkOpMbNjYGvntGMUbXkJ) (seq (null) (null))))))) (seq (ap i AJdzRCMZDOaWQYuiWiNtNaktOPXBdScFPzUJtCUKjMrGOzFGYgTgkoWmQl) (seq (seq (ap i qOPvnqrXRDPSKxJxF) (seq (null) (null))) (seq (ap i qmOyCGYNBPCfXwYxicFTjSiJrcFxPMeemEnMIeKAAeBkALTfvJGnqrDvLVWlrAbmlADcrncsWnYKtoFivwWjDerKydpI) (seq (null) (seq (ap i awzJgTOEsPvPdjYIObEmYKIKBTEhvoFVYVWsksiKjfjraNRRPvcFguMryDnUxpaW) (seq (null) (null))))))))))))))))) (seq (ap i XiBEgDLHuYlyHRNIqYpOhPvKtzKejEyaPUaIXwQQxmGpsWIp) (seq (seq (ap i lhatJfBAgbeOKAuLSfxjnNalNwXHEQixxnCdGXPqrhToOroFQBrFhApFLeNQgBbR) (seq (seq (ap i ybWCxunAU) (seq (seq (ap i ZmxPlhUMQBKVnAozGygrmXeRXdaTSXqBhIpVayJpVAHi) (seq (seq (ap i xBILFDRAbefjvJaRPGJgzN) (seq (seq (ap i fyrqDrWofkbpGLXyBsCLlZjFsNhTmgWRFJTlmLxgBEHXXIBXxwkdCnBYGaEJzNAOWDdwwuNwbbaRxmtDMGjiLV) (seq (seq (ap i HShnzALblhWLGzEWWruOpiocnoiufzgqLYSGObP) (seq (null) (null))) (seq (ap i COFryhyCFHvBNDZeiqcyjjvU) (seq (null) (null))))) (seq (ap i wZfmyBMftZNHDHjXhWeQSNTNQdJYsjqXHkcdml) (seq (seq (ap i iycSckXQJQgQhRrepPHLZgtVsmakDawSEGZnZxpJdsuxUdJlBNmrEWHULLtixiaPXzCpegTmkiJRNBVoLmwLZLXo) (seq (null) (null))) (seq (ap i jKZVSfOLunjWYdtvQFvedvQvFauFgwHkALXnNGqRIGBqxBJRr) (seq (null) (seq (ap i JzFgpqfSocCbemNSoTSlfYCRErRJpoYMZteznAELmCiTuUnheXnNlKGePXqeNtJyIRmvlViMeMIbNTAspOClw) (seq (null) (null))))))))) (seq (ap i RxTqemuvEqdMXlxosdxCxUcIWRrzUYRwDAewfgmuaUNEbslxHDYfRLHWtftfeJVexZgQtwSbkFdxkLxMwTIW) (seq (seq (ap i AwewEiZnEVkQpHMjxSvdNWKsZJGq) (seq (seq (ap i dgBrQnYqadoXrY) (seq (null) (null))) (seq (ap i rUkqfYhGgvtBvBZWaewPfYjUmRebOGrNLBfcVEfUmdXKflWraxyDNfoZo) (seq (null) (seq (ap i LlzGdpyYdaUmfKeXeiqkSDkRaWGseDFrWN) (seq (null) (null))))))) (seq (ap i oezcjSftLzlIXZSPZZphXvsJLGsdMlaqdlKAqjrczHImQmYvoBPlPBJuCvFBxxxxXJSCTcANlIyXfmMcJZOTDoUpu) (seq (seq (ap i NdTUtTvFYRyyvhObZEHvLRhLiwxBZznklnxZitaoQRkKgqa) (seq (null) (null))) (seq (ap i UlavSJEgAisyWOgrrkQxiYvIeAOYpNbQoLdQeQoxiR) (seq (null) (seq (ap i ldOCroUAWdjmrmsErWyDzhaCiYinVrWLRGHlnSvizOkaEAaOBKbuSWnHWgjbkOhOlBaTpCwjVPeafJEHBAvnDwsiP) (seq (null) (null))))))))))) (seq (ap i bUjatSEUrmbrkAufgqJMJntaKIIONwMmwhHUTnuyfJRqa) (seq (seq (ap i izQUBFAsESRASrb) (seq (seq (ap i wlNIzaOCjHZzRfzvRjNRarIYD) (seq (seq (ap i kOOHeNIZMwVWJWxSQWjMtMWvzeReFrwdCvySLlQOobFWryMJCqBkMbCpx) (seq (null) (null))) (seq (ap i aizVbNQXLqeaiwysCXgTtIucymqyjsmNTEnvJitkVNWqzlIFTdFwJKKEjVXhYnAOJeZCEgFXidxgkWTfHD) (seq (null) (seq (ap i uICPmJnP) (seq (null) (null))))))) (seq (ap i CrMLltSQEfKBUTuuHZveUOaOfZvObJFHRxBlxaQnDItarylhcVHNkipqBbGYntX) (seq (seq (ap i NhuQylVeVdCuQaribapFfYfznTkMHskmlGDdHZUOo) (seq (null) (null))) (seq (ap i YvzwZPeIZeyDbtZqkQnpOhPCYDyrykWYylTkAmecIiBntqiwBDAxxevcjHZZkNznAhuGebmieOzYQUhVhAzAMNgJiyelyhIqQUm) (seq (null) (seq (ap i GJLfBnQtqQANUzVBTGfZ) (seq (null) (null))))))))) (seq (ap i LRcLiQROmtDEUceawyttOaAbeyJkutLlkWafSyWuYqqpiRweIwMKSqTYErfLXBNDxXtNxsaSaBWeJUYZfFXJ) (seq (seq (ap i oQvPksdd) (seq (seq (ap i xhYmDDkKrUqLREVDZkTvBgWDvSwJCDSYDANLRuTBeBKWWtnFlCqDhwRwlpY) (seq (null) (null))) (seq (ap i pGedrfpBFUWQgnQNDM) (seq (null) (seq (ap i lAdAbrMZRAgmoLIswrttCyeeJjAURqInWmwonCvRXQZSeZepBobaLYZjmKgCefnnwkb) (seq (null) (null))))))) (seq (ap i GVqVuiapjLTPpaUnNHuEuDfuuhDhndywXvXEJkgPnfUVILcdlMCFocZeegnLsueRfQoGARvAvZsKbz) (seq (seq (ap i OVWmxIqHjYTJsKkXpfgnHfoRgcPyMvlRhBByaxjQABPONME) (seq (null) (null))) (seq (ap i kBKWZcLsKogQgdnrnqxDfhCOzigdSGmajxtuVnONsdwlxKcufbVzYaewciZvHvIETJmVFXivPSCYP) (seq (null) (seq (ap i ygmlWxdymNBAteQmiioHCvtntpNBJO) (seq (null) (null))))))))))))) (seq (ap i dxdAkVldpJMmOuDhnoTSDLrXVfxNPOWyaskMwgbxHKStKiSUklMLIWKhcJaZTQRwYiWdHSQTAkSnCPsWqHwcNLOebSrHrkjLKisJ) (seq (seq (ap i HhMhiHKoarVgbYtVhlNZyCDPbUSZMTuIuTShhLjlqQOCZNtQgRQKmXGvEncOuNPBMujBvtJkbeDzyaxBoMWMfDTW) (seq (seq (ap i UjgMTDl) (seq (seq (ap i QbubPJpEholpahzyuDeYpsvN) (seq (seq (ap i BYoKshqsLENWgqLTWHEacF) (seq (null) (null))) (seq (ap i tqrfijKPZcXYkqOwdZxmKRyxkKbEzaQthvbAvGvVyGHvhVMxsNpMJsWGRplnNjgRjWyKqvOKeLKfZxPwHQYgRDqtPDTqOpXzdTaj) (seq (null) (null))))) (seq (ap i LZQB) (seq (seq (ap i ouQnQbUlsUMTSAKHIzMRBqbJAKHikGukHJCOfGFquslQLeObSgXAOoQmHDxAJogNpjqW) (seq (null) (null))) (seq (ap i aYLbxPLUlvYxByFgYZjYVkylROZoHSAXsPNXqHTIrorYyzpTdFErEWsrU) (seq (null) (seq (ap i MAMSWVPCVIpXHogWokgXhUtKBzQJSArzQlnQWgYBQSgJWGFbkPIFYZlTMqXZwXdgIzRpkUwQiNuaEhjgB) (seq (null) (null))))))))) (seq (ap i kwfHogtVnqIWWDCHtyqQNkxwoKJXJRItGsEaqBfXxqFaUWMDGxDSPneJngTieQLcefpRDmSfSVLp) (seq (seq (ap i fqSSfxKLpOBQTqiqPoNQguiaAlnWglttUmJCeJvE) (seq (seq (ap i qzgjDQDvPTVwhbxOb) (seq (null) (null))) (seq (ap i iesleSRlGtSlvSEXlGsqkdddhoElSUzOyNWCStiQIzRUEuTeiUYhWItwsqXesHtFTvFrxWFT) (seq (null) (seq (ap i kqfMrslKjkUNmkBANWKNCWHJvSyu) (seq (null) (null))))))) (seq (ap i bFUZo) (seq (seq (ap i qyzMVlRHrpfHTvrHoRkAXPYtKTpNOxCLlFgxGlZDsZCudnnkhogt) (seq (null) (null))) (seq (ap i miaAOlAqnHvosqYXWKTNFTnCZdoonBuiJwoJXdhhAV) (seq (null) (seq (ap i vOykhBcxlVKkMTSEIjTHIKnuxicCBGsYLQpvkiOotjavFaQTvpbpAqdwghySsbJvUzPFecEMFECxkGSz) (seq (null) (null))))))))))) (seq (ap i MWuwegMYsSQyVDCHJpJdwUsfSqXKNBMtCwMjvDBdLKkNkjyfbiOcBVQWLpbHXLrDInJekttUpWLBendIizWgmDbrsUfHpqKhJ) (seq (seq (ap i CbiEsnGKEzMIHmgfCXxMcVNIVjxTMrsYIBbQbDHKiAldVJygVokL) (seq (seq (ap i ImMLpdbs) (seq (seq (ap i RGozZuEnlgeiQLireOHenOceZHirdOHhEclxrbHHICqABPqDfVAkNAEpJawymSVVYNZcuHOuA) (seq (null) (null))) (seq (ap i aumBLELaoytItjioJvGZNnSGVmwYcQQmGfPzdSaIElaYwmboenWIxhiQggxqfkDIgTKQJZEGQTSU) (seq (null) (seq (ap i XkCgWFtaLZLMNkDbxpYjbjhUyCpFH) (seq (null) (null))))))) (seq (ap i mtbBOBXmyvKqajPZJJnTuAYciQRjtsaohnLDJgzFGoPdAjNLeGuHcZBPNrJdkIqIVXvPVhcRZamSJqwEtjBiqhhwvU) (seq (seq (ap i YKADoVCmrujybtovWcSVqHvkMyDhzVSXBABXwLaZvqupNAQBFcRADvtgNDcQRTPHLybdIGBXxaZKAQav) (seq (null) (null))) (seq (ap i ldYLfnHpMgvWmbuVsIhjujNWyCBasUeGlLbPYDOsWREcKBHJyGSqViRlOarJUsrefdAizeHgOBAgSlBcriDFmmvtxprNScoBqUz) (seq (null) (seq (ap i GePRNUtaGAdCVzpvRrDtLycCzOvQhIymiVFezbHWh) (seq (null) (null))))))))) (seq (ap i yVMNMnXBamcTAlaADPyUAzPpJHXqWBHzzhMambMhssZfPxjopyIaJSZeMzVzZEkuyyJSLofrDbOpbUAFBlWxtIGiCkZnGEayaf) (seq (seq (ap i CzFHWVTjsSxRqLuFcsbLrJpxQjQsq) (seq (seq (ap i geU) (seq (null) (null))) (seq (ap i BAREu) (seq (null) (seq (ap i iqLtiRSGLHtKyTMGaKrqMvVmmRUUqeiUqlMZSMbxAjOtViwDItNGcyGeCSnOpirwarNFclZcMryfBqeNjAGvG) (seq (null) (null))))))) (seq (ap i WPyeZLFYvSKUCMRbJFlGLDILaufBydUmwzpeMdCpYHewVxJKllhea) (seq (seq (ap i zrvHejbnjQSIpgLPtjMBYuhJQcPGOzVmIgYQCMNJdCrapKkioRGxqgeXrqxrLKSBnbjXLlmzDY) (seq (null) (null))) (seq (ap i OnmEKoiNldLixjXExGwabHwUpxjPGQUBzoQSAdOeEGGSdWCeikMVkjtDdVGbIZ) (seq (null) (seq (ap i lOpiknlXrowcvMylUJPGloGarxgpvdmlUwfFFWbaBgEztSMbtuesOTMSYLdA) (seq (null) (null))))))))))))))) (seq (ap i ZSdiTBZqqTFfxzwgiofqZRGYzYUNkKAlygMlSygKeGbbaSVhzooWhtKNARBbHzjUKgP) (seq (seq (ap i MDOPvlKqGbQbuyipLDDAKRuEClZRPtBoKrWoirzIfunUxVePOulGktALHznFzhdduRxdzRCDiyhHqbpTZVCdJGLtOthQOPkiCGXN) (seq (seq (ap i hmmgphARCzqYWuIgFFSnrZjPcvQXIhpAsluMRbFBuKHLKCLzVjQOSIcREfXfleLiakW) (seq (seq (ap i cLexYQxDtmSxXJqhRQOgpnPoyksPWMAcThVgZRWPpuujrfpW) (seq (seq (ap i XWgAuzcBfjsQOhRdXtLsgrjDDFWTrNqKwaSJzCCMR) (seq (seq (ap i kQmZaJFhEPeKQXWPRlSWm) (seq (null) (null))) (seq (ap i ymyanoUCYuBHuJSqRfItwaLFFednpDsqsCCXxKJwlIeOhpsiPqbKvyXtOKZ) (seq (null) (null))))) (seq (ap i ADt) (seq (seq (ap i TCvhHMCXAgLuTBYcoZYBbCesNCkqGnIvzgwZeReXuNLBAwOYWtnanGLdAW) (seq (null) (null))) (seq (ap i FuOIPvICPbrBqbpwwxCzETCIUpTBdGZFmCWxdcbJwSJesetGCbthfbYRlqfMoWlXrvkseGjAJgtvQmEETMddCqzfFGTA) (seq (null) (seq (ap i XKDxXoSlWlULqJBRsaNfCFKDSPhpNFynhYT) (seq (null) (null))))))))) (seq (ap i ppSCnmaQbWpVptGpTdAXqFEOoTFtejHutavMWslJBN) (seq (seq (ap i zjBQnKkpuxahKHjpSZhgXsxrfGdgxYHaYekSLAbaAOZJOTa) (seq (seq (ap i zVRuOTWyXMpyWbXSACjQlhnwNyZLVQuKzVVitvkJfAbWvcdTKNQxhjDGOJ) (seq (null) (null))) (seq (ap i EeFWJRyUjTcaKjXcfyvZItFbwqncaiFZEjsVJdrW) (seq (null) (seq (ap i OdDDxrSWVDWolCTNsOpdaJuKRvaKfYgJqJemclTvQxkjnXiCSYN) (seq (null) (null))))))) (seq (ap i DuZWwaIEzJW) (seq (seq (ap i eVnAFaY) (seq (null) (null))) (seq (ap i msvsTnUwwtBpWRIKCtpaJsReOJPmHFaYQfdpTvycQPqeGmleYhKukpbrKZwsNHSGtG) (seq (null) (seq (ap i fHfBqlttmwYmvKEankJjBEgpVCsRqTWbvXWDqQAZnkJLWMTxAJQIbOZbqJsLAmJLUpvsyXiliATikX) (seq (null) (null))))))))))) (seq (ap i lIattOBFwsFnlDWatOWsULIaWuVOJZPrMeCedyQIAMMMefzhfCqrOCOTo) (seq (seq (ap i epYxxHtNzxgGJJtHzYWYhQuzfFjgIY) (seq (seq (ap i CGREkmnWoQwyDgLUMpneqMGsHRbpqOAIqbbrB) (seq (seq (ap i CvmPbTSLAwwzelmIbMQRdauEHkvZhyUEJUAWbOVhkbJQXRqYpgyYRHLWY) (seq (null) (null))) (seq (ap i tcKrIwtuCgIFbbrIIhJhNRugDD) (seq (null) (seq (ap i QaxNpWTHrUfvYGjAuFqmSN) (seq (null) (null))))))) (seq (ap i BycSFluknoVjixbkJbTpejqRJxPLzHGQyggQywmcGnypuPmDeTDWkRefSXPoDAJdimbZhGQUCUbYBuzcXwWE) (seq (seq (ap i iVpSZBGkeaIrWnRLsXNaNyYAcBEXMvNcUGLFBzpgfMGPeblDagCUxIdSUB) (seq (null) (null))) (seq (ap i JMkvLquRRmlWwTpUzmcWnaVyJHvZqlaxKcrjnGnB) (seq (null) (seq (ap i zGAeSemgfMs) (seq (null) (null))))))))) (seq (ap i FwoSwjpvlOoxvNyVSvXpWUGMCTyDAVVdDFHnJEnizLJp) (seq (seq (ap i oKJjPakqRUvfZMKEWqAAnWtMhKdqeoadCTeKOAwWhQNNDPNLCKmTefkXjlILmNqUPRSQqSIWZWCtGJoMtxReABzqWfLHMLHlusqM) (seq (seq (ap i MSWzYTeshCCMAWsztFxUSCKMswvszktuXcb) (seq (null) (null))) (seq (ap i qZRfhQBYgVTbTveLdLkOhknsfTtXZSZFbtqXiOWDxwTgEwgwLeJXVcWAxAXzFSEGrpNjdBTHWALcDlNLlrGsGfzo) (seq (null) (seq (ap i RaFRUQhrJVSiBdzXSDLQuDmRcPCaDeBQhiXsIitJCP) (seq (null) (null))))))) (seq (ap i qA) (seq (seq (ap i RRWSvPtmYsdxBGpBjPxGVLNuUHgacKwAYkhmaFS) (seq (null) (null))) (seq (ap i hgkoRIUBPuyPLmtXkIlHkDYMApePwGGENv) (seq (null) (seq (ap i MVQjUhMmEKOPvnbfIv) (seq (null) (null))))))))))))) (seq (ap i OUzaqUZsxTw) (seq (seq (ap i lAMykMwPyxYwIatWkIoUSpKtwWtWXMnaSiHRonlkiAcvPXnsLwoctIUyOdoKKVzyeLDNRYGpCHuGuMNEeelVdKDNPhpWLfGQKD) (seq (seq (ap i cssCDwvEgJuPPVcZjZuzYUAyP) (seq (seq (ap i ceZIEXWNfwaxXlpGgeXEOgQKDCEYFDEaamQLCKMLvZQPNfqXiHORgQLlPpFQNpPEGlrdSCfslhsgboWcbvYOr) (seq (seq (ap i tFoZYxWEvrQtcgaGZKjGMMXicuZtBJKmKjrwlp) (seq (null) (null))) (seq (ap i lbTjoFJRQImuqurs) (seq (null) (null))))) (seq (ap i jQZZpSMfNNCksPvCZrzfbddOppqkQrPmkhztWeDHkiyJyNRpNxRZKxgZjVKmo) (seq (seq (ap i xxPtuwZMxWtOcjryYpsdPCqlCEvfgQKHEWEweyMxjgmIrKnYTYiykvcEGjAGqjZfFcfxzJBKQRWRtGKwZmKDAlBGQZYv) (seq (null) (null))) (seq (ap i NBVgzDmfkiCMhixpOrQVHTeMykbcLVTKEKOzMqSNVYkTjpUyghnAiXbkDVfmmkIuY) (seq (null) (seq (ap i bHJFBeWbDyYCUwUhuKsnlWSwPgUmM) (seq (null) (null))))))))) (seq (ap i eyKHGkqXwUVrBituwxJh) (seq (seq (ap i TMoKsxWKxKaYjQjsSJZvVsSdGrrIpDCVrBVeIODYxRuCTJgIVjXeDuKpfHPePGBDkpQrBhhZeMhWucRSeguX) (seq (seq (ap i ycnVlebmi) (seq (null) (null))) (seq (ap i ZUkxajlBHWCSrexmZojbFhJXmSKZtlPlAAPazxmuJQxUnJeVeeOngsczAyFPSaocRNHOob) (seq (null) (seq (ap i jUKFtoxqQcfdPzOzgzCYDrnzrpWSzVxzcbRURgsSaqJAkRtPXFbCKhFHwklrPQcScunHDxkmAXJZPnwSpwwfnLeOcv) (seq (null) (null))))))) (seq (ap i vrjxlgpEsswnTkGqZsTmbCHijFzOySscTEMCFNqkLrcIXDClgaZMnmFXQdIKgcJfroOFTjmDvB) (seq (seq (ap i XgkSrRUIq) (seq (null) (null))) (seq (ap i vhibmgtDTmzZzuFWnKXkqWnpkcoutkSJVVcNiIOhJPEguhtXAiGuxoBuxBADlswZBqcnVUgaIWwXshTDoewMgHDLaIoVofFPaUCC) (seq (null) (seq (ap i paHnrzveNAygrmSWzBXxICIoaWSlODaWEQIGYVOTOeStcODLCLdpxbGDBUFiCkAblJDpwgodvIDRpoiYEIWoOkgBvLYSc) (seq (null) (null))))))))))) (seq (ap i bjJ) (seq (seq (ap i RqafCTsWGQeKZcNfwlIiUildmU) (seq (seq (ap i STpPczmrddEdzUJnygDughmKKOYFYPKhYEgMfOcfNdvqDCKCqMpGDYjxcihrLVHCJIpyChiRLjjhsAqzDZryVGrPKbTshhLODGUX) (seq (seq (ap i xFyeRyYKyEPKWbrfzIUUqMqqyLYiYVYCNUVystGTFbIcMoYgdQkJivNlYohlwBCNtQxMoRHBMFTuSesduuSVLPE) (seq (null) (null))) (seq (ap i IJkKOZLwJZNDcdDiQKEZDkmGZHPGlvirLhLRKJMDiqVhUqtgrVpYmwXTcNVlXxt) (seq (null) (seq (ap i LSnzXGvyaqveHohYncjaRFliiqexsNxiGxdLJOcBsYWWUdVdxte) (seq (null) (null))))))) (seq (ap i QoyvuFwjORgyYfoEyisODojtYTXgmfbqrOnIVzJtdZqZmOXFLpWVtWDfitHgGITkfhbexeUlXjcRbFSYTxCcAVibHbAi) (seq (seq (ap i PrAoiozCSWGYHRvTpdmhYHQxKMIlkRhGDxFmiPEQFhboDdXWtvbziybtruCiJEZXnQtuTAUSkNwvTDsYzJplzDdYzJbKq) (seq (null) (null))) (seq (ap i IURyBQExDTKsMxMFkljdqLMAWLbbtEAHhdLRyPvDvQAnmSfyjPEZbOgSEccgxvqHNQAGVTlMjqeUYlsRXGqDxAcARScTjqkdXPo) (seq (null) (seq (ap i tWKFrJVKYxfxNrNXcdlwZGAvzNwKnlHfXSQkmHICfBeVmdWxdUvVkUTi) (seq (null) (null))))))))) (seq (ap i yBJztLukOhtTQ) (seq (seq (ap i YmQXBEkywheoHleTS) (seq (seq (ap i eMOwGxLmTOEOtjPCKepkTLiSSahGEfEeZvyWwjzhLqeNXLyDVUZdzBWksrXjpWpZomLJmTykLYOVaaiztQkWdv) (seq (null) (null))) (seq (ap i yUgLseNJdRqOTBRgfCWcMrMkDXZjVrAtYpmpNRKPNQTwMGZCFVcwwyU) (seq (null) (seq (ap i bziPTabBgvJfITszNrrlRNlQfGjulXysCAXJSHhYswRLCzjZfizPmZIWZIxwdzxbXkyzdAGIBma) (seq (null) (null))))))) (seq (ap i ujwDdGOvJVKfI) (seq (seq (ap i TXzpsJWekkBphBBzFyXnyJF) (seq (null) (null))) (seq (ap i veF) (seq (null) (seq (ap i aWWfbPxvcjtHJXkZyqNZtXpsgMFqoUbHeadywQGylVGydajrNVEdXEHAyoZKYiCYxFWGmmzVPKTRiD) (seq (null) (null))))))))))))))))))) (seq (ap i vfvKGtKKuZKJFeqgfFQaNhnJRcQKnMSnInhiXeGhmOSBYyZvNMyBYCGpGsbiAlopBjYCRTPwdcsuGNNLxzPrdiurPhnpEPGqNe) (seq (seq (ap i QtsNSJyobyddeeRxEmXbvpKYPaCuRAcGjcQdwaeKCRprPNODukBkVIcAHCwkqAGkMbJgbgBAZxp) (seq (seq (ap i HZHXUwG) (seq (seq (ap i owoZLStqeSDwSWRWMoICRihgAdDqgmyXaEQnNdLszmEOdvMlDD) (seq (seq (ap i LjLeHZshQjEQGQLKtWPj) (seq (seq (ap i PwHUAVDxnlXCMwtDCcZSiWir) (seq (seq (ap i BfDNKuqBdJzY) (seq (seq (ap i GpCmTkfLLrDvRhEyaaEICmZDQKqgFnsYwUsqnLStPMePifmiSJghSdfSxDNgnndJBeWpRtFKsWe) (seq (null) (null))) (seq (ap i UAyRmcKrRJDmSpuXAOZfllrMMnCMldgCcLVtP) (seq (null) (null))))) (seq (ap i GOwPAMegtrgeyyqQmOhgQCLyijBtmhYXmYWR) (seq (seq (ap i laLBksAbuWizoGtkAqpgTzWUCXAwSeCOlPlrdmYrsKTVBqwUuJuTLucovTHgiUNrpbUPZHuPiTjO) (seq (null) (null))) (seq (ap i OyPWRbhVUmTjGCFqNEluvdXCGFdBsFMBgiPIJQunnrasVWjTRyhyKW) (seq (null) (seq (ap i mAoFWItyLalDNqhDOyBdiCvIYHytgmXMzNBnhgIArWXMQxbOfMWjoRauThlu) (seq (null) (null))))))))) (seq (ap i FdPisEeowzdkpMtPKFMyFGoYQJpmiCxi) (seq (seq (ap i vvcAbTXcAPuyytkWgWxmBNJmjlHwlcPZuWTWzSRHJEpJkKPcdWRziygEeloaXTRsdzTwxT) (seq (seq (ap i rYJvcSCSzAWVSjTJftnFUPWyulefPILlwCyJJyIllnrLLBoxtrOeD) (seq (null) (null))) (seq (ap i njVjxiFobbIthlAhLGpGAOIdbKkxVuqnyF) (seq (null) (seq (ap i Tz) (seq (null) (null))))))) (seq (ap i Md) (seq (seq (ap i RtTGZZuvxVrncGmEVPJjCLMHWEHvRepikjHkjNVZQVeCMLlgBCHeWRHPbqXnumAlKBGOBTdOFqEVLyKMzrH) (seq (null) (null))) (seq (ap i JoAqbuxR) (seq (null) (seq (ap i cHYcrGiPGoadCHEhADjggc) (seq (null) (null))))))))))) (seq (ap i NRYdfxDzVbSzzKEgYMiVZFgIzgracHQIInwxrZNOWKCSiJUqTVBpfMwBdnXvQgiG) (seq (seq (ap i DsmgXmAKFwvznJzEU) (seq (seq (ap i oOMiNNojcNNUYHjxMqDZFbZyBYGhxPRPjrtcseoSuFOGtxj) (seq (seq (ap i TVUTVhrsxoIpDfWjSJZRbrMnUplUCtoeqwIA) (seq (null) (null))) (seq (ap i LDjJew) (seq (null) (seq (ap i GTidlOMmCjSvNXuyPcmitBdHGvRy) (seq (null) (null))))))) (seq (ap i wyBBCwJSDHmKpgLkAJugvNfWxZhxdfCAcKsPzKvlREWHKKhcxXqRJolLoQgsWzgxcxWWiKoiMldMLaIFeRNyMu) (seq (seq (ap i HxeODQmLdzYjdyNAuKqVINSElcYIgJkeabySqCexjznzIqwgvrdAmMxtwirFWdAUUwtzhVCZzE) (seq (null) (null))) (seq (ap i yHiAXCGyIoSObQVGWLGyZXLp) (seq (null) (seq (ap i RFjzboScUVQqOAkxrroCjWxYgETMvzmyOJMEXMAnYOBuYdkIrKDeILUgKfvEVhCyJSYZJVbVWmjppzI) (seq (null) (null))))))))) (seq (ap i xCMlsSmGzOiihzPeMoXtkNCsWWPcKxSZWjj) (seq (seq (ap i PPSHfkOIHBUOUhGVIOtdgPuVcVwsZpjzXxQOdqXYvusMTZmqJzLreBdXLcaBdzjzvQUgSoFKkeqzGgBMU) (seq (seq (ap i RxqTpsFB) (seq (null) (null))) (seq (ap i vXRfbYMlUsozKyRcLUozTbWQMcyXEhLNUcfReeQqHwJHZnt) (seq (null) (seq (ap i GvfJ) (seq (null) (null))))))) (seq (ap i HaYmIPlMpCrvnMYyJCzOxfqpGkOOqzHIiSHDySVAkaSQVcpMtyKWnAVoAeGYKneseAtZWbVVLnq) (seq (seq (ap i JVPEj) (seq (null) (null))) (seq (ap i AkpVZlIoaJyxhtUsNimGUibeQfBkLFGKxqODlVQRWcKIVmOZYhDFuU) (seq (null) (seq (ap i wsssPYXabEJTrIRIrxELkbGyxSMCoTlHiSzSIfGPAAPqjxTOaRDIAqPWSCXhpxLwPxUzckSMNRpuAuNiau) (seq (null) (null))))))))))))) (seq (ap i LcvVkayUGCToDisiCEmDBzzPArzQz) (seq (seq (ap i EkKLvKbvmgcpEfbJyPJnuXBBZHsqqjXomzNKsjzZRQWWDoRxQuLdrsVGMtnlBrXMuDphRtClFSCTOU) (seq (seq (ap i pHRonGhnynLaKwkIWW) (seq (seq (ap i JGbEmuAHcWOZhqJahwCQpaANHFxGkchlfpexgtJpNRjcGgBPdHiXcJZVSNFZUPRLewrfxNVNoDaUUi) (seq (seq (ap i rfqKrZTRCYrHtFDqUBITMNkZARukgWmZdZYAHoiyewJvBdzCjGbOxDmpubHRwtsMraKBpGnCKJUxZtQGVihkMfuZilHrLVprGSk) (seq (null) (null))) (seq (ap i putVnxIarMlRLOvrCSrsjRydDXggVufSLcertbrZZNTGzZbBaLEqSQxjUubrpOl) (seq (null) (null))))) (seq (ap i QRSiivPrRdgiXOqOGhVhzecSOyauHVqAO) (seq (seq (ap i ZAdGDtGPNHdtdEECIgLFtjCFbBLyZIlPxmQJCqPrYmCzOpOAzKnfjhOUvojXQqAsPgAhYsPkxfNSdQGikWbswbDFXooeszzl) (seq (null) (null))) (seq (ap i VxZnReGaWtNgnUaiypSAtfDGpooFxNhlavhklYnIrpVmTtLookpReyLwenhkySmAkW) (seq (null) (seq (ap i YPWNHrZVVClSnQOEqlCZTHepASOaiVmDiWEjXkZHjRvbpJNZdRPTwkAIniosgmxmvimWFbhYXqkzkZWoqHtykaOagFEQjAI) (seq (null) (null))))))))) (seq (ap i QMSkGSyyACpvAcePqKwFn) (seq (seq (ap i AseofJStdZWZGeiLyNRdDQZOMxRlwepWwkkRyZQagRDVfJeEKfeN) (seq (seq (ap i RaQqFlsqZksoamKEWhMPXZPTaItqwfCRYTLXJNMurlbvcevdAkXPgHxIbMNlAerAXaHbrNzLpYFHWDIyJuYitn) (seq (null) (null))) (seq (ap i hHbngpxsRWysoLPJcQbHgAzRlawprsficYYcvhptCwZOkXMKLpPpggyUSCASExneRpcgyfaGhROFFCuiydWfCrBaxSqbJmsBuq) (seq (null) (seq (ap i LeVknyEwYUYHKmjhaSvgiDwgZNmdvehfZJTtLrIdSaSEQginhxsxCdRzoqDgLcFkhiku) (seq (null) (null))))))) (seq (ap i lqGOMQGAMoLHeXlacMwF) (seq (seq (ap i QuWjnYYXjmUYTkVQDpQIpvYxVe) (seq (null) (null))) (seq (ap i wMBDCXcTsttzYIeFjSRmqzXljqYgfwCWmfNRZsFwYBlehrjhpBVrvIPgHYHLoXwTZQOLppGPsRrTYNY) (seq (null) (seq (ap i LRPZEWBIsYYdXOlCUbUSijBYhuTItmLEsQeaAJkbpvosnMS) (seq (null) (null))))))))))) (seq (ap i HvcYXMEnRRteKdPWhpexRMpwoZhhdFoHyrwmAYVMTgtcOijVLipfXEIpURhvm) (seq (seq (ap i ccibALUyzgmMENUoNQNKBeXFOJcUgDHKrZTBlhQhQTyODJHBpBujNVybEaxXIegWbNdSKVEpOolUZjjRMnVsI) (seq (seq (ap i gREfrYdGFIcRZIvkdOLRbRgBPOcDQkqFiAdshtlbDeVNGAnAet) (seq (seq (ap i fXTXlMjFjhSwoiSFtRakFCwyeyDcPKtleHtkKvzSI) (seq (null) (null))) (seq (ap i fDcypWAvXtUWzAPiFVQFOeLVvhsqjGUuNSXqeghmoxdXIveDtYszbutgVVknQSNycbuVcTqiwWyDBKEHHlqwESQxAYwuuq) (seq (null) (seq (ap i vsxFbeFpoJShgrqzAEOLSouGqvdQdldyVGovvUynQwb) (seq (null) (null))))))) (seq (ap i pnAAGvEexOiig) (seq (seq (ap i eGMwgOIkenWqmZFsxfmwaPVCYEMofGiYrOBpIpzKDLvoKdBrPJu) (seq (null) (null))) (seq (ap i ggXWVFxUruYFlqwVaRWuJNjRzohptWagBQdKLWretcaNMwuXVkhghozZvyBLsCXKTyuHSLSogQHgpmGnpnAQgfWqFYiBNoMbSJhl) (seq (null) (seq (ap i LUUTgCkNtPyQjOblzTsrvaJx) (seq (null) (null))))))))) (seq (ap i mtjeYcQkUyGgapspXnAEqHpVQsXrOArnlPsnDSOJDaHP) (seq (seq (ap i cbXTnLoEFckCvdZogUHeIDbCYrDehUKSFom) (seq (seq (ap i DYkZmuWrNpCwnRRGfDhaZxhXEYXlDvJELSLrmEGXuvRJyghshBEsSgRFoqLOzHPqmK) (seq (null) (null))) (seq (ap i XeWNBBvNjloBnuhGBOqeDrbHo) (seq (null) (seq (ap i cEvozpoLkUOOGFNBDLEAfZvMUfEuKlidGFCGhsrXwOKXhMPXYjbuQskuwrvYLgJDZAIyzBojYrGzbBvYrYJBZRv) (seq (null) (null))))))) (seq (ap i vyvIeRALVCgtRoTSCMLffSMrVNFfRJoGqlxitfmjFxxeyFNzbmuPjxMwShOVNWOXovMpbRofwWKCgufsnBsouz) (seq (seq (ap i ZyTpRREdlSnIchgddTZVYJwTQsSQaByaxoVQXyzlsiICmcpwkfjyGku) (seq (null) (null))) (seq (ap i BNnupSMgMvXhwruXEDUbkVpdGbePhagiWfqDWJJeMqhWjmLkhUkEmOgmzIlVffcFkJvZDUXmsCLW) (seq (null) (seq (ap i pBaRnlFimUcxXrZvzlulKdNoLZIZrbQcfUWEyuelNSDeCUvgEXzHFWzSXMDaTTRLE) (seq (null) (null))))))))))))))) (seq (ap i SaLpGsdscpGWCNIcfWebtUaaVeKQulFOiVJKJBiVLQgqFZyEvhIcmlBXFruGPoyhhZJtyfScGHbugoc) (seq (seq (ap i LKpgMJkFWsHudztvNZlcsqHToAxbzXEKiiXrvXEVCdebLzfbPefkmxxfmenPCfafOWrJOFynpEKSFEASJE) (seq (seq (ap i OYZmJBDuljobYyPIbJTPggPRCQXbfyHeBzKBtG) (seq (seq (ap i zlQaUKHlRg) (seq (seq (ap i cQARBnDGwWSXnDEJMkvDxPgcnvMaTLeisKrhWbYGbrGszagTs) (seq (seq (ap i iHiLVSGBsnhRMPtkhig) (seq (null) (null))) (seq (ap i IILHIJwatepPacXuSAcbFyxeAjobcCnodYePNyGAluKCQrtRRGEqtrNIRwWkRjFZFXRBYwavNTPXyKxaJnsHORqp) (seq (null) (null))))) (seq (ap i PEaJLINxjUIgykSVCTfVBTBTntidiELmXJmJqNEsIFQtllXiCDNOFTWvnIIGAtTGZmXUepmNrWFTrxPuYVThxZERXDJcJcZjKv) (seq (seq (ap i SkhNtrUgSGrjkZeLCoeSpFfEGJxfXzXfQlekoHJFmZOnOgegaphrEQZdfdqO) (seq (null) (null))) (seq (ap i MhoLclwgGFcgJcZlmhbEwwgAxGhnFvgNLxKQqCubl) (seq (null) (seq (ap i RrrYPdoXhAlgvKEzNPlDCWYDwLqCNqmhbzZKhVCysGnOgyYanBaGqi) (seq (null) (null))))))))) (seq (ap i dEunLtcfDqWycdnhpYNvWZkWHNfYotnXaDQnYbOCKtzBivNaqFObmAyefKNhrBdERcUaVQqTDPMXKhgUuhqRqx) (seq (seq (ap i dQrVZoFVbjLJtGMlwXVNuEDqJvhEkBsnXnyGLHc) (seq (seq (ap i wcfEyFFIsKakzTAvehixHHJUzMWarneirTThZEBJlqsOTNcmA) (seq (null) (null))) (seq (ap i HdwlMQeeBZJNRJvEFeuaPZPJlqshQndJSteUakDzdqHlEByfpPuJuopBRBcdEvdKRqWTRtiVz) (seq (null) (seq (ap i mRx) (seq (null) (null))))))) (seq (ap i aryjAsboNgxzIBtpQzoDBxxs) (seq (seq (ap i mHajUTUGuLRwNsSzNYkcIrEqbKgZPxgoakKDLIqudjtMIuBZlIkqkIqymTpMYweV) (seq (null) (null))) (seq (ap i MSoikbfAgxEgvpytENnq) (seq (null) (seq (ap i KNlGSYtAMuKkF) (seq (null) (null))))))))))) (seq (ap i ImqXrgwEDILaRInyuIVwiBoEVsIQIKKqG) (seq (seq (ap i XnThGWMAxcBpFaUbjHdDHJDaHxwErCqEaZqPhJRyPoJCTGHzeAaAcetWKaENJGtksJt) (seq (seq (ap i JJObktGINUslSOBAgqULZjcQfNClquQgMTrwBkAbCYUhLLB) (seq (seq (ap i XkPNZbjSZqITGxCaRtWzUaUhWekUXVOgRKszLlNqGSbOHDNOMnDrzNLwgGe) (seq (null) (null))) (seq (ap i QjcCapPlRMgqIzLBwegWIMPYvBCOlAFxZnwFRd) (seq (null) (seq (ap i ockcnjrilzfXngsGvBvqxrpiUUXUAPhCsXBGvahebFntLbaEewfLOUAwBcYokRaWjKURbNWwo) (seq (null) (null))))))) (seq (ap i KuxzcPbHCEFFAagugydGYSznStLIUySraNKGdyS) (seq (seq (ap i ccTiNFilBiqKeTjlEJTbmAeANwRtUGXfYiahdQO) (seq (null) (null))) (seq (ap i CgeDOXawfylCqoepRpdQkqdSSskNDgEiftfM) (seq (null) (seq (ap i apZuJLSBugmQOOWygWoieVBxHsYGiSfftFkOQfMjaAIEJAfuZAlPfTdcHR) (seq (null) (null))))))))) (seq (ap i KTcfZDNxnkalpQnzdzYeNPIaXjiNYRfFZvRzgeFjgSn) (seq (seq (ap i LXEJjYrhqJUlyqlDJEEtAIhGLMH) (seq (seq (ap i woOsZIUDGdrDjSuWdAIvaXTJVYrYxFveAyEBCzcUDiKrjIlJxVYfueKKDhpbMLrLSXpOLGXjOM) (seq (null) (null))) (seq (ap i roCHigeHIIeuWpqULmNMfzYrvUcTzcjpCYnxduAnAjmhQenFETIrOOlYVILttOcKWGwLfQZIHHACKpaDlDiES) (seq (null) (seq (ap i kZCRMOThnGCtQlspVO) (seq (null) (null))))))) (seq (ap i XRqTKjBqUByZChfCFKkTVCdilNlhpZsqxkzUhZARcRNcNUceNbKwrUtwrmWsazQokjXtAhSJAFBvUvxzhVGgSCwBXrh) (seq (seq (ap i DvbfIjWev) (seq (null) (null))) (seq (ap i SBXjthUwFmoczQtwgZXpYpKJmCHmXycZnEWTVoxUqAGXfDXAdumytVSwVAEduuomtxOUKmBHyaRWQzDeddMuV) (seq (null) (seq (ap i jiGGlNfuONpBUDAeBzQCvbrDzbeBg) (seq (null) (null))))))))))))) (seq (ap i mdhSKTMeLFgvInkmXkjyfqffmLrtPiCxlNIWHuViFhdwVoSiqDFMqHWKJUQQkarThnTZqWCTmieyrSak) (seq (seq (ap i UpSDimdKTfVVBkhEiftzyhDPYhJsHRMmpBvlrTLxbriENqSYooOxrQfmglgRURXadqnhDtpQSHIsLtZAzEXvXyAJHLMifTwl) (seq (seq (ap i EJmCJMrxlMVHcrelMVLlrfMzkqyfftwFEYJwy) (seq (seq (ap i wcQPVJerLdWHuZifhgnAvTavQRLedaZHuItFRXICbwDRBre) (seq (seq (ap i zlqPZAZkKOobZrKukNeyvedymNjKJod) (seq (null) (null))) (seq (ap i TFPoorobYOoLbPtwRaVtOXUcMviTfJBvGhLYnNlrmNqNvFZzZaDkKYnZSLJPYFsgZnrFkyeizJgDXk) (seq (null) (null))))) (seq (ap i wXHzmPkshBRHEEimK) (seq (seq (ap i dNVHUXKDizCDxv) (seq (null) (null))) (seq (ap i WHFYeTAQnRBKYUKhHvnQWidNnguNXTajSNUuJzy) (seq (null) (seq (ap i oSfeLwHjVwKCYOmcNtJDMzeihTkeJNUHTURViDAdNGLkcXililOSrowWmzdRJbjqgwNkHiURAYdam) (seq (null) (null))))))))) (seq (ap i HfvksgSqKogdpbxivgeglafqmThdmNqTxszToaeibcHvVlpMeBgJVtJimhtdIGZiivWEujsU) (seq (seq (ap i giZSJcgLoXGPIMhoyZDScpIMnYUrItrJHJflBdLRYnCIjBEvxFqbWeetnOSNEayfooDohUGGAGjueLzBm) (seq (seq (ap i WvRgWgUhxVFUIsELoOiggOlDhWBccFcCmRDrCyLBfPSBVuwEIc) (seq (null) (null))) (seq (ap i JZAaBrBFRJjU) (seq (null) (seq (ap i rYqziMqDJfdYrBndlZtPpSlTAVYIilOYCtmUKmZhmNViUERENGGAtxcBoNlnqjBP) (seq (null) (null))))))) (seq (ap i ytPadsfPzavSjpJMdAxsRDcnWphgksliYaKXlIEahdAGUMDtJquiuHFYxLsXRYFEDtbfIedjJtkyOvqMeUmJudsjURy) (seq (seq (ap i zNKMFlDdOfMcrRKW) (seq (null) (null))) (seq (ap i zWcrDnQosZEfvyGMrExeuOEIsLKTAIoruTGBAQrZlUUzajPSgTYPIqkBadHsTCbh) (seq (null) (seq (ap i yKiTdZpfNBxCihWsEZprparbnKxPqIisuFuZFLtzepyGolkCobD) (seq (null) (null))))))))))) (seq (ap i uzEooQxWwItNbVutMoRGVgTBPvlzdNZQYlJwBwGQljmnYuOijAaCTXmzNQfYRZgzaiddYkVbpzhJRPsUIJdZu) (seq (seq (ap i XLIutKetxMHLntlDDxWUdmViGqqih) (seq (seq (ap i bZWKRxFFEMExGrfOz) (seq (seq (ap i IIMhkzOVYrZTLzMXTYQhDFUFlABoUlvxBeucTjTKAyOFYrMQeIuxAkn) (seq (null) (null))) (seq (ap i XvxlmqRNFYDBVCGBmIzcbFSmeEVUBHVOx) (seq (null) (seq (ap i LIavWHPFAoSBivFgLYZQMFucmmeYpkffwsaOjLRmKBGHdgZjmHlnzyUGUjmWDQsmSdkzEHkxVyjEBotKr) (seq (null) (null))))))) (seq (ap i kpitTktNIsQlxHdgfjWHdmkOHIuvDvdtEIqQbOyMTWDpYHeYPJtoxEUc) (seq (seq (ap i DcrHxffmLtgWIPxHgZDZmFlGetujGGzqIrHjZorCnQuvndWprc) (seq (null) (null))) (seq (ap i qSoLhmKfNNSrfdFVwZSYjBzltrtESomFynumHeIjQzvclzZUCkwsLMqxLWupPqrQZlEhkl) (seq (null) (seq (ap i LMeWMfLdLbqeCBLiBKKkQlBIhAFThNvOTYLGSiP) (seq (null) (null))))))))) (seq (ap i zisIxStSeEoyMFlyBnSnZdualRWYozEwVodLWgFjYYgoJCiadtYoIaNLzMVrjpjNy) (seq (seq (ap i aosnHKkyQlgjKxoHHTSRXEvZGJNFzCSxoVNdXTZeQIqpzIDgqWodxfiLmXNQipavhRjrhCdbGOinHXU) (seq (seq (ap i dFcGXdAzLhhXznrAKAYOJzjEJekGYHfXDvRbNijyKDIiGXWWBiLIJKKYRskIALuOBsya) (seq (null) (null))) (seq (ap i IAOmLYgxYylrGKNPQoXbqUfjpdFKvctKrCTlLvrturOWgaSHTFnLSQozNcaGpohYpDOvwfbNmIOvUZJBvlHXfQDMNcwPPjTSREj) (seq (null) (seq (ap i anCQpRRIJxiRjDnnthRazFrbWXQXzWEGBAbJVMZcxiUvbBnwJpwqUIBeGTJmGpMlWYAhSDWbmXlPpIqCOdQZtZjIh) (seq (null) (null))))))) (seq (ap i pLFZUImdowEGoinyCrsFk) (seq (seq (ap i RNQTjHDF) (seq (null) (null))) (seq (ap i ZqkfZbMqzkLAbXsDIohNNunxiXvVGbXwOgJJGKunkURzEwezsjQuSOfdZKgNTjeniaNWXyqVybfBzoliUneGxqXzXKwmX) (seq (null) (seq (ap i JMduxbPASlhBLgOIsDbgRmDQWByrKWAeNPpwvEfJrDZvf) (seq (null) (null))))))))))))))))) (seq (ap i PsCBpjDnSzByYgQcxvtpFTGgSVXdLgdQqHQSuxQQTKUxgWkdBNcgyckvnvaa) (seq (seq (ap i WTKOjBLhdtZCnuxBNoDFLQvluWTUHvoxLQZPyayOujiwmOMjSvlbsYFXIHCDpNJpRJcnZkpzuUPAeAnAHPeVEsUPlqrZgEhx) (seq (seq (ap i WBSrszbEfsJPqzAUSdOzjK) (seq (seq (ap i ZpcSz) (seq (seq (ap i DhHwKBQuYwdOVZOJjJWbnBTqYaLwmMSBMaBdvNcdGSOuwtIXRU) (seq (seq (ap i tCbisILyffTfqSpUjtxBiWwqqrYnMvxBmyYfNoRZiLhmfTMVXZBFMACtglYhYKXUiTBNUqHtNtXgtKNI) (seq (seq (ap i QJKLlGKtVoiLqRmvmTvUXaemaPvVfhzvksHXBFLiVnQhOzpIcWkGGvPXCHHhXhbREvZloROqglPzTobmg) (seq (null) (null))) (seq (ap i RNxyOnlpNvYnIxqTfKFQdOsVIzTLgZOQNAZSsNYGSRmAtqdZLxecvcXRdvEqGycoDFvtdttuOAuTPrTGuhrZNaIeFKWDifwCuTR) (seq (null) (null))))) (seq (ap i odWPKZPjmcxAZLdfFBdjwLuXuxFJwnVoFHyLfNKsNbCDQFlsbdEVywpXQGDAzUGAcmbgPMFcuWBhzGVeKajmBNoNKNHcSx) (seq (seq (ap i KRnbsBJZanoeEjAMACkcnGuExiiaJcHKGOpR) (seq (null) (null))) (seq (ap i gKXyGUsapQqNheDXmRxepIlCCkGOjQgaBJRTpqYwKOExDmMHc) (seq (null) (seq (ap i jYvzLqLcAfggVkTZSe) (seq (null) (null))))))))) (seq (ap i DvXrVUaMrCbLxHHmZraXzDNIZqEnFdeODqlBwJVeLwyqtunuPDbkORxsusJxjyKblIqGvNYVmygFxBoWQTtXYSFcpDpyUN) (seq (seq (ap i ipiVMKteIklXCLZfjMvpPKqmWIeuqyzMzulQfVraNrAlYVtgzDCQWwBMJWTxerALscZtkHQnc) (seq (seq (ap i xEhumoUAByMTgLszHFlcbpcmAUIuNVpUMuRQRbffEwmTRUlOruHexuQhlruoFaojlLNIiFQOPdLjPslxavU) (seq (null) (null))) (seq (ap i axFelDctSfTGjRrINWQGlamHPuPaXXRZjrdcTwWkzCpVVTJSzIGMelCtQpZRLwIHEwqbpEUPiWjuIclkVAjywzlzPtlrX) (seq (null) (seq (ap i rzI) (seq (null) (null))))))) (seq (ap i WPrJlmGWcrtPkcvxgkIMUIYYDdtRzHwdSekrQkBYPlHLaHjsqkXeZWVzgRihGPrDZsWbbhEaZHzzWwgbPfxWiIADrCbl) (seq (seq (ap i UTeqnj) (seq (null) (null))) (seq (ap i wZGLcupvZPbBXrfOAvLJFEkGkAxjFqIAbggnJoGqESHuqeXHXvtoZK) (seq (null) (seq (ap i CbLjvAyqAWCTGOcSEjLfFOAoAfmCoRDVLzPSMGqlggQPYifrcIeJdvexrs) (seq (null) (null))))))))))) (seq (ap i dLdrARTJZZsTgYvuQwrIkiOBGxDhjsnWcRwPEIAhxmFFtRTOnxBrmYQMVcTZDiRhgPtzjpFvrGvabOTJ) (seq (seq (ap i iRClEGkeRqLJtDYxwGGxKLnHvzgdBIIfEzURz) (seq (seq (ap i NpyHWWakgXuOFSOrRjOFPpTAqwaGkJPVobfclFEYAsOMzqLCtHpdoXVBElePpDvlNqQNH) (seq (seq (ap i eHBWdWTtEIElWMMlXienrqolOHumUPenTAJHLYuKyiWxwRlMKsLafRixXOMbiepeLsVcEpkJamKaSjVHEPLhSzLwSsiQckilLH) (seq (null) (null))) (seq (ap i YFoRjRKONVICPPjiQKUWtBOCBEBh) (seq (null) (seq (ap i DdkaIkuVXVLKkvjTXQfQNIwwtDehrLAXFLhbonxxdWzwlGUfBmcYlYckvajmqvLEIrKvqbvYNyiUUdzgEDHUOFYvSUUDW) (seq (null) (null))))))) (seq (ap i iZwXbAkGsDPzkyITbP) (seq (seq (ap i WISAnQJkDkQHXPVRNFPywPxaoBAlRyKNNZAhlRdWhjKPYBLxSGWgvvt) (seq (null) (null))) (seq (ap i rHBvtRGgXCQGIKMn) (seq (null) (seq (ap i gNHDZwJrXRtAEoGkJnPRFKCabrIcfmTBaKbGPNmxlPXJXDPDWQraeibIPezhfCoXQMZxFGsOlPSfGSqmfB) (seq (null) (null))))))))) (seq (ap i qbDdgVhvqTpecHnRXccy) (seq (seq (ap i qLcJqlMxDPJQHQpyLcUJbmJZCuYOLsWCKCjiwffkKSacYOCNvjRdTaVZExepcpTLrsrhjRCtuqjkmqEpjhzKNRkdBwmwDbE) (seq (seq (ap i ZZlwvAoZYryUahNC) (seq (null) (null))) (seq (ap i QcceZtH) (seq (null) (seq (ap i JpcKaMyBivIkFRmzyBGEUcmIbesErLIwdkZdtcyFHKkGnrSXySzFxcwTCaNyK) (seq (null) (null))))))) (seq (ap i HSdHnHAsKOkkIpWuHYJbXFhtcvDvPPmIWWXVPZkTzxLwCjSVMEyTJHEgTWfcAIVpPCmCdbocDKvbUTGhXegAyGcjHeSOHpZcQzrC) (seq (seq (ap i fgSNTTXJHpfHCPwCBegJEhqfgUhyPUsVGUtYr) (seq (null) (null))) (seq (ap i dVeOyLlnFUbziEQB) (seq (null) (seq (ap i msjDiBvrKZMvFBneRqqUEThxFpJIHCWTmtStXPFXULiUzlQIdqTDcdUWzQLoVVCYYHqZkHqcsgqqXhWMiMGDfOHXatFvMWugadIl) (seq (null) (null))))))))))))) (seq (ap i MIfWtocFMZwTWkAbyFCVlPZUVzVtyKvggtDfyPPyRXWgkwKvaBmrtENpoYZHXdqsRjQNDwjksGUcnjpmPIxwTpWoC) (seq (seq (ap i vqtnvWZsziGnRbLryuCikTvbQSwyYHykBoVPCuvZVAZNOSLqurKEHAVjMgfPbMxbdCqugLZoHUHXXkartKGYzepTMDlpafBJnoWi) (seq (seq (ap i TeQFrzqFkJgaoyRzwQpmQkEZdQGRqHkLJPHkDkadbvfKhLMtiJAGTAuVhvXC) (seq (seq (ap i wJnTZIn) (seq (seq (ap i MeCtegCQfIWuSyIJkFdOggAzTpEqSPZohXSIEQhjZPJDmYUrSrzuyZOLkfuvCHpdctkZxQtC) (seq (null) (null))) (seq (ap i PgzOZkYdFMCMXyuTSOzwKEVXIGODjfkUhoBqHOJrdvDVQXmudOGooLbEzGjKHDTwCfttHvYlXFPCQGyZFBjKFudsRDIEDIq) (seq (null) (null))))) (seq (ap i oIxSmlwAQU) (seq (seq (ap i TuHGjTgjbnwxAmxbelWntWifETyXOcPlmzRWmrnPRTUKRmpuqRXpXAsmumBrGqgCveCvSHvIBOuVlIGirxjhLf) (seq (null) (null))) (seq (ap i zqMdxzAekxUtLjqv) (seq (null) (seq (ap i GeXKBLmrsjFUsopUyoBqAcIPdDJgUSdwqpquizujomEmcbtnzaVDYjrMblAqJFnIzwlaIg) (seq (null) (null))))))))) (seq (ap i jEbDpZpfpQiuwZtbxTrDPWTTEPyNyDBPMFlXkqYJQarzG) (seq (seq (ap i nVtPwPkPnCulKqmjOQJOjfzmSsraJgEdqJdqOdezhYJSfSSNgnBxUqizhZGGSoPXSpWBTPhzrelmeLBJgnorDneTwe) (seq (seq (ap i mOHQRnuKnCepyfAHNfwQgmDoQKfbOYMEGnudCPgPbEfcZJaAWEMuW) (seq (null) (null))) (seq (ap i MHYarOoqmvZBLOHoQHPNfBRrKAOIrOPHU) (seq (null) (seq (ap i qvnUdDbgvOVYLKQURTrodccUUBUQsFoxIDXELFyMDuhywFwEpJybRFoMC) (seq (null) (null))))))) (seq (ap i BYquRYlKPyFKTQRHUOCZOlZjvYTAVHquFYqUXGzkYTciqWKlqTNkuGuZgQnIHOviKoL) (seq (seq (ap i cdniXO) (seq (null) (null))) (seq (ap i zqLLycdZKSSasAHzwBhbzYWtIpKhrAlZVWbjMVKEgLDDSiXXSJMJvxIS) (seq (null) (seq (ap i bvGYJlbFrmZZsaHTadqEtWoUuNMZABWjXDujjAUOGQjfRxLsugBMVhQIahYWTVU) (seq (null) (null))))))))))) (seq (ap i gPySNXUfsRrEEuzZkNzoPtlFvkJPbrjulZUIrjyvtMjnafIWweCIxFYiEfYTWQjbHSgZbvNvXYvKJ) (seq (seq (ap i tywMqIGOVRIqoqBzZH) (seq (seq (ap i cHoWlQZLFSIQnvNCPsarSGDLRdSGrAbFPk) (seq (seq (ap i fdgXXVvVbZHcEOzRnfXyxmlqldnQwgZiiKlJUMZermahWvjgvU) (seq (null) (null))) (seq (ap i OgtCibhXQkDscAwPFzcNMyRCMrPay) (seq (null) (seq (ap i KCANVfPBsjeBwFCYPZFFogkWyeJqYurfCNYPTsvmmanQpLfafZURTsDzJoXwL) (seq (null) (null))))))) (seq (ap i UXSpOZcwcjxDCJlrxcHZVgGCewYePaOssldcWBryamNJJsaSglfINrdSerNPmywqmEyMrsxYITQNWLikOXlrBYFxMVwGUsOIuf) (seq (seq (ap i Hr) (seq (null) (null))) (seq (ap i BVGxr) (seq (null) (seq (ap i YtyHjCtQMbMJbiOAYEKyLIYlmAWOVMeWxxUgbTbVxEfUejsNSBoynDtmzNfqaIsjxqmGCc) (seq (null) (null))))))))) (seq (ap i EqWvDzuJjaGgL) (seq (seq (ap i QIRAUNDfrjwpqOUUHNslOIHlLjyjSuORQfqFfErnMxSf) (seq (seq (ap i KfFWzZpuRdacyjpsNbezmgaLKKPxaptylJPoocMgm) (seq (null) (null))) (seq (ap i IqwzjRuccdkvHflcqeXUjbyvgBWrnCYCSCeOHEMFocqduqXiZiYrbGUMTpzimrTDpbkJLWRZFXsQlLMKQaxyEjVzLfwsOpi) (seq (null) (seq (ap i aUKhrsAZkqYjawrzfnyHwiq) (seq (null) (null))))))) (seq (ap i xulEwYpKYgsbGboyZEkuU) (seq (seq (ap i cTNPNw) (seq (null) (null))) (seq (ap i xsAfUuIvJZLp) (seq (null) (seq (ap i yxJUALXJoGomtjILwcFNpVDTlOezJKjjzTbVTZ) (seq (null) (null))))))))))))))) (seq (ap i yAJVDLTaXWwNkzNN) (seq (seq (ap i eWYDLfTSjBwoCGmY) (seq (seq (ap i UsaBRRUzVwRtEbJQnWXNEtCKhRH) (seq (seq (ap i FenDIZAOfaXyfrgMUJOHIuIODNGBHEEaFbTNxRBCkuOhWPawAtEDnlraCDUXLexuRrIAcDaOBLPYoSttJtymDX) (seq (seq (ap i FwFtBmclZoQsQOWF) (seq (seq (ap i TUcznqTgaYKmRgIYNQGUvNJYScxD) (seq (null) (null))) (seq (ap i KqvxzopUxpgZSinjpjsSjAyxPdwVMBkIDHmycuIoMzdqswWPBRxXFnaSQghdmqmMHlZFwmbfGEIyPkmmdLa) (seq (null) (null))))) (seq (ap i ybQbBTps) (seq (seq (ap i snpAshQLPvBxkIzRsoQbJEIDCwrzZHKGrxjIUDNyCRnktfZGNRSKaFyEjo) (seq (null) (null))) (seq (ap i mAuDkaXlSBnTLGGcYVVFSJtlnIGpmLYCuhoJeVpfLIAJjEMDUgeiLXOiMgDfmy) (seq (null) (seq (ap i qDWxDMoUxGV) (seq (null) (null))))))))) (seq (ap i czWqeyRUMfywqNPGLBClinqn) (seq (seq (ap i zbboXfXRQJeLDVjgHGvwYcGSrncvrVXSYbrwfxHjMbGwYEpsBNuFLYYDbxwVUypWXezCqqRqYDnQqeqRmVhkHrbvKdRcy) (seq (seq (ap i NvQqvkuRoVzeqJOlKaahmgwCxbWvLdwnjTIUoABtydVmlBROLWlcVRWNdwTMTqAicCurzMWJWsVAqqDRMRBBDtHR) (seq (null) (null))) (seq (ap i HQzQyFYcYbQGLdzLHvueFzCJfbyXBtMkLDTYYcJipTrMzovXVXgyYZJRzl) (seq (null) (seq (ap i Rgee) (seq (null) (null))))))) (seq (ap i QfTHCnUmOrQRuavUuvMiqgPOyOxCXAFwFDlrSZpHogVapBv) (seq (seq (ap i qQDlCzvgJX) (seq (null) (null))) (seq (ap i LCvjnszcZqYjkPoVKXAxjDSaXkByTYLxMJioKuiEgRooIqwVPHxogzEUWwHnudjUdzaAmAytdwvBSu) (seq (null) (seq (ap i jhZYePaWSJFzWGnBODEMyEvFAyNFveOoqjtNAkIvWVpLYsbLPMuMNdBLYMTMCZiVJppmuhBQTOp) (seq (null) (null))))))))))) (seq (ap i IGGgKoRcRCvUCTkHWcJfyJgTSoRrlZwpPPIuhdCrosyurJaJrZsNxfmfW) (seq (seq (ap i scCGftOxcZuaVjBbcNZxtmpIcv) (seq (seq (ap i hJnAFEbyrPFzbsKjNyRqYpeICbaQXUhmsdKKYquXOlMrSnhMEtYFAOhfbcUGFZoyhJpTSAGPRfrsdfExYNzqlnPh) (seq (seq (ap i wgjlzqPKChOPnTAIVFNStDmvZCyUDwyHlMjxqhOHuZBozBzgbZhSAxOpiAwHaLHECBOZiMoHTYHVsXBlVQf) (seq (null) (null))) (seq (ap i fKDCSsDfiYaHJGeyjsMHssfwAMmGINeGAIsQOaprPANt) (seq (null) (seq (ap i jZNGCuPKusLQEbXMepomaNrelEDyuCdPKxtPSUdxOctefdEinM) (seq (null) (null))))))) (seq (ap i tGfannzcErUUjEkNpGmcDtw) (seq (seq (ap i YkYXYAoPKjfdnBvSNCQKQPPjcmkbavgcrZLXYkGtjkSwOrQXpXaiAsk) (seq (null) (null))) (seq (ap i OelQFIzbaoHLCwKuAeMDhlADdAXcwyEhEUOmGlNbOFAJSbkSGiscpWJAWTSbvaiWjYUAnaCuZfxAX) (seq (null) (seq (ap i mWdctuEqdwMyMIHspxcEHvUWtsbYNLAVFxYDTAnKtVNniUyYbgLanihYGeAV) (seq (null) (null))))))))) (seq (ap i hUnozPgVqLRqOWVIAsAtKgApsVYsQsKZypZlIumQIGyWrNfGPYQDPuXGWTYnoOAGpM) (seq (seq (ap i YeVqHswkyPZpeyEYAwvzsYLunuBvokcrxQriaYZjFuPAzDoMofKMcoXqjexdBpZDIFeDgbFfSSQmFMxvRdXNMecSCiHNrOrUMENF) (seq (seq (ap i KqURBKHQQInRFejrFFDKMxZYWgphbTMVHMJmgqhKzShVCrayIdOmrzLAQTRzyaHeJXOGCBuLgoHSXSaDTTxVDwvZXaFVLG) (seq (null) (null))) (seq (ap i uVHJgBizfRIsXapZdsDpoVYcwthiEJZtzSnyfgiwztbWZuXrJHcsoJptabq) (seq (null) (seq (ap i aCaGFUDmQAabxE) (seq (null) (null))))))) (seq (ap i GsSuVJRIrpMdKeFTbSJiwrNMrxtRKBahsPxWeQVUtCWrCiUKbnqyaTPMzrRgtHbanhv) (seq (seq (ap i ELUkghzaiUSmSrzlYiariOWiNTfFyZImSdXiiLBJafHINjpXYqtEBocVMaNY) (seq (null) (null))) (seq (ap i YsIiKRIJ) (seq (null) (seq (ap i scCtsJSMBAJtoVvOdqklZRCUXWYuItnbVOagTzUrYQyMShKEZZxMaesXKGSXwqGhQNo) (seq (null) (null))))))))))))) (seq (ap i UJSPBWNcwMfyEUCVldQucWuaNIyoMIgNPEGKpORavDSncyWhQbbdViKhZMjhrtVKHpcjhSmfwBXFrIcMcPuziDJJTZWtJXr) (seq (seq (ap i iebLbHegCSxcWDhHaVeTdRfxTVNqcuALednqkWzaCpkCmheqvLxOUpufshJuEtuEXfDaSeyOYVWYX) (seq (seq (ap i IYTDtoxbeOqekbwjFrsANBPfbMkLLERunqwQgQCPplPIRRUhLgJ) (seq (seq (ap i OxRJVDjbVbaBfyenEHrSwaCbVWYVUTsBprkzPFWphaYfjwGqZiEWTtvjZZrmFUUCtKcZTBeImrlZ) (seq (seq (ap i rXPKKLMjwDegBvGAKjxppTILKBhAytkXtRaJeiDBBLNeFjomwStLMmMNyKqgWwKHzxnwAxYBLFgoTsUEpgNmKznCsuwncVk) (seq (null) (null))) (seq (ap i ltVwKUJPfAzXnotxOUnaSEjUplCUKYoKmwwFHuKOWuyxlodOKTDFNZXfwQharepCwVXzcCVBwqgDLwUHMtXsvmjbUbAhecVvb) (seq (null) (seq (ap i imkZxDVcpDlzocrfLBYcwyMTEtBplGPEuPRmbOgr) (seq (null) (null))))))) (seq (ap i jaXpjQBicdrRuQYLUEzOgCWIfguMXVzWA) (seq (seq (ap i gmgoxlbSSmtlATSnDVOqSSQamaTSWTuZTbFWrRcOTEGaBFHAfyrHWMXvDTpnYnvLpomcjTqJXvHNtxskZLOFZbEliDWjCid) (seq (null) (null))) (seq (ap i zBecOISoCoRXVvVVdtQdkJsVjznFXiitzuWiesOxSnOKwhZnuOEeRHWpIWfbOveDRgIIxAtYfiNm) (seq (null) (seq (ap i RPBgXlMtidlsSkNKpFBAWLspJVRWNEJteuhZP) (seq (null) (null))))))))) (seq (ap i oWGFuVIrbkiVIVYldZUGhGNkwicwlocYIKRitcvhoLxrKtYPvCGBNGHAhiPeFwbzQPThrtolTRArAFofWFmKrFbOFRzYOfX) (seq (seq (ap i pBNvmjPJVrwnVWSRgnAcvFFmgWncrlgsNZpWxPuHiIoLZLIMNVBACYhEwmu) (seq (seq (ap i pSqSIQhBHRwbJzQJHBvjmnqyDNPtiPmAMOGneqzNGh) (seq (null) (null))) (seq (ap i CKrbfORChMHCffAYRfZUNyNfQxlslGIaYUfiVwsvYTZGPlFMX) (seq (null) (seq (ap i mEkQfDbBofyCBJzjHFoHKGOmOgCGcaOqhalVLQFxauXCJXmSejMDmnmdPOuyxNrOoXcHQbhlBqTOWAkLbgTxxJXOnlaxLihOC) (seq (null) (null))))))) (seq (ap i qsKwLnjzYYtXihNpEuyIfFpBNVddRKzoeVxHquLFBYYvuEaAvPqwaP) (seq (seq (ap i UtschXRBufercjWQcqTixmwoDUcTRUBpUNTxSudUwpZjYfTQTlUPCLLPXzbYfvw) (seq (null) (null))) (seq (ap i MVhEBHtaxKMeDopiKMpHeCdTYBFYfHiKZaxivwuobNSqtMnxRAiwQtXFOlMAztkwKPdJVR) (seq (null) (seq (ap i zfyvRVGQUpOaOQyzBNkoCszpWiizTZNddERFLqFWpxIdUiucxPvmR) (seq (null) (null))))))))))) (seq (ap i OXVQNT) (seq (seq (ap i DoTeUXHgcBFLkcqrhXmJpdmlUHTfpWJKCiwXMoxpEOkARfOidhfmekDPM) (seq (seq (ap i enavTccsXMVxUsebxRnuQnpMTLwKxaYMs) (seq (seq (ap i vixVDqDnEzWmDijqeNcNbrjjkOEOaSoUPLpETZtDxfkOjHKOXkuFwHFNBAkEKjjMZSXFq) (seq (null) (null))) (seq (ap i nSda) (seq (null) (seq (ap i tkGhLPfcpHmgMpukOrzeITzOhRdQbkXKoSKbiqMfHVjHhPBeFsr) (seq (null) (null))))))) (seq (ap i sftBGECyDCKaxbgqXkXZpAl) (seq (seq (ap i PjjkkuYoyXbthkIwcVHh) (seq (null) (null))) (seq (ap i pmONpTX) (seq (null) (seq (ap i pPqMPZBLIhzAXjYYuymDobfJeugImMfduE) (seq (null) (null))))))))) (seq (ap i QSNaQuFAUrlyjYUCbXwfagkvjkXuhLpBZoyWzwxnsZxBXNOmtuCBKFGRre) (seq (seq (ap i EhCItHQVrdYQwmPcKrEEcfzHgQNjffLxFrMf) (seq (seq (ap i CInJJtidWAPwfEHdwpdamFzgwKrlpovONukgYpubbFnfsAxiYGcGsmrOoDueFdtZQngfzNiFiFUBPxxG) (seq (null) (null))) (seq (ap i avQmop) (seq (null) (seq (ap i CndofYPBAdCFxSHijMsdMNCMQzLrExKlHsGNvzTqWSURxRiPOSycJNAFEvUQwvxkheHtLrGRQWUSM) (seq (null) (null))))))) (seq (ap i ukmyLOmzXYoKgIQeFjlcwXVPbOgwPbWxbnxRZhUojMeletXUZpDHhnFjiuUneUHEmpCBkK) (seq (seq (ap i aHTUuNOfnXAmDxLXiRIGoOlkjpPvLXCVTJXaHnLjpnKihnPJaleJNcfVKelQGVSojNOdrMr) (seq (null) (null))) (seq (ap i RdneRxuIoQtbTo) (seq (null) (seq (ap i lWqamgqfaAkcVrwKBzjfFhdViyailkeVpib) (seq (null) (null))))))))))))))))))))) (seq (ap i tlMEWpdANLMneYgcdyWqAGUZbrNthfbFiRyFleHXZspdEdfOpKOaUWTTKOYeJKplpjCyctwXZkoLVGgltVAzNUFxbdTwIrjAZL) (seq (seq (ap i rUelV) (seq (seq (ap i FLYSbtMMEitSQozGjhSehCwotFOKepLTHcmnloxKuvuFWGNyjydzzesieilWiptZYRmsTLGHPgaNAqNBIDafjD) (seq (seq (ap i ciLKpFsfSkzfuXBheUQZMVcHKeFkXPYAGRQAQOvalTeRWLNHLhaZNG) (seq (seq (ap i nuIrRcW) (seq (seq (ap i TssxgRpYJuGWixuGTFCBbJUQRvN) (seq (seq (ap i pNzJTSDiQpDhcgFTblaZGnGIlywneydOrDPXIqwjB) (seq (seq (ap i YAUgMsOpiYEaLdsg) (seq (seq (ap i ZFxmdmFDTCmHnCHJdxjlWNGElAMrXHSjBmbU) (seq (null) (null))) (seq (ap i bpTtmvllqjDZTGAJlnfsWXhmtUEQGjWHsMeewjNeNqlXEjq) (seq (null) (null))))) (seq (ap i HFKHVXygIJNfQu) (seq (seq (ap i GouVvizpMxnQtNuwPMJWaAfqwlzGlCDWoqbWAeylDWIGEgRVZLHTVfOswfduITOvGyXALvXIMUMuJQ) (seq (null) (null))) (seq (ap i kqSJY) (seq (null) (seq (ap i KZpYxHLAjIMie) (seq (null) (null))))))))) (seq (ap i wiUQDMlwmjgrqwxXQlrozRHWjqyFGkqnScbtKAlonfPOTgplRItrWFwQxoVjsYUQyokZnunsSIcbBsioonwwFrcVPfdKXqAXlx) (seq (seq (ap i FvpmAotwUCDpFqSAelmeYXBsYZHcrOxBlXouqWZoWOCglPWZwtQS) (seq (seq (ap i VFosQeuEFyEmLViDEpTmBvHk) (seq (null) (null))) (seq (ap i NiBkStetDYTvsaTa) (seq (null) (seq (ap i VmfcapyRNCNnK) (seq (null) (null))))))) (seq (ap i kSWzYvDSXsuSCWrfVvhixcUNEctNqNjMccflrLfYKRrXbynwwMNoYOqwXmOZOVxdXdqMHHiffjQWfuEWAYDNTy) (seq (seq (ap i tejordXnZwNXPYaiECIjXSIJRFAkGGLLXPAFRrbyyWkxPpEHrmEyzOGumxVkigNtqitrcZhiYqidqnkohGQnVWTqX) (seq (null) (null))) (seq (ap i MCbokNGwZeGzUkpfCzavJMOIhJGbtRasLqcMTXzluPpWqMWioQhgQtzPXYJsPSBwplJC) (seq (null) (seq (ap i FFLHIhLTOrOzTDeUwlxzQEebuQryYmHdBSUkWXYaiFjFDMUKaNWPhWETtVuoqiu) (seq (null) (null))))))))))) (seq (ap i hXLqOJIAoWEUBDvHqvLkrssUaHEjTORvAmJOPceHKDKnSQOLMZsdrweAksvATLTCZEgfIvyIOPHIPIsaYCcamYFBFLgTB) (seq (seq (ap i YOHXYwrOlXLreHZolJxpkhTjQvlbbtZhxQlyUSSeqtsrPmYBxAEBKTOjMMyJuPFWWVYMwZPAqhqdJazgKjd) (seq (seq (ap i JAhuqXgjElPRTgyCtiwQwqANzsKRGytlxXifRRWDYlTnsUYhqKZEXLybThrryGXxwGMnvvwqDwEHbKawXcng) (seq (seq (ap i zeXZbYjQXZY) (seq (null) (null))) (seq (ap i gpkZPrwvSwvPPOYARZlzLozmuMmMqnAHMWsfVqvLYrzuJJDUtbHEWRvacgVISktjppRJoqHWYbrHXyoMQAdOe) (seq (null) (seq (ap i bbjsTKkJExvsplkBmFMcQPaxzVJAiQWvcdvpivoSHpF) (seq (null) (null))))))) (seq (ap i cOeOMRsPgDnWzRSnRxPu) (seq (seq (ap i QytUTTjBkdfyiAgOIuxfcUobJFvKBnzTfvXKUFwUaKkWZnQZvEdlnuaFaXLUhjCZrdhSRMkjjLWlLzRmjfgD) (seq (null) (null))) (seq (ap i CzDNBvbAdqhYSIAOuUgsPBQqfFdGehBvOY) (seq (null) (seq (ap i JEoQfQPmUBlREOguPsJPEiIMuCcLTUrmOJRPMDPltAlSzhbKSRqWV) (seq (null) (null))))))))) (seq (ap i VhQkxtzgWaxyKUQIWrtqvzyRSFLPHNizdslrwhOUaLMqmWRnpjBfhWZhldrWVWvXYTqVEkgTaYpnMgTBaSzK) (seq (seq (ap i xytGPtyjyEmoJPeIlGePOWPBLaCGnBLYjMXCSYlOvKyFCrhfMm) (seq (seq (ap i RcacBCDEmhpOzXMAJEZNKiibSSbzabRVWlwtbNylWDvFGN) (seq (null) (null))) (seq (ap i kUdHaJEjnRrqlKsVylLrCZTHBVAsDVGNutRiJgjOYfGRdAwWkZt) (seq (null) (seq (ap i AGVHyoTfCuVMeedZteAefhYFklMO) (seq (null) (null))))))) (seq (ap i UfjBfikhCtvFSWPifvFljWJFdclgILPcTWbyvBZcOmTZxQqDeaChgaadixtMozgHduptZB) (seq (seq (ap i rHbsuAUVmtYikAehRheGGcHAdCZxJRVeOhcmjBQkRDaNmlcDiWSQjhyhpPbjTHDzCiLZAkNnvatNBXOeHZtKmuLNJ) (seq (null) (null))) (seq (ap i UxsGsOxy) (seq (null) (seq (ap i rz) (seq (null) (null))))))))))))) (seq (ap i QQMtHXCUnXPcBceeMCwQgRBQFmoEGzETNvMjvojKELR) (seq (seq (ap i ihjxgmEIyVBOqHMWpjJypLWyPHlLeXHRDGCVhOAUPtoQavAkFTQClhr) (seq (seq (ap i XkqEOVaFTHzREUATtGjQGNmKJoabaosugTRCFBJWmcPAllVbHJnceMFifsUtvbZDCrCjXK) (seq (seq (ap i TDVPDHsHKErjMBzvWjNXsmjFsewA) (seq (seq (ap i PbXOyiewYAJOoaibtY) (seq (null) (null))) (seq (ap i RysZPlTkQqPSQbHIwBEkFRCZ) (seq (null) (null))))) (seq (ap i mnHTykuJSLNfhcDpafhKZNWJawYwYPkiUbnGbkWNLfsgOnfsnSpGmimyYibFLeCLghXbgsDF) (seq (seq (ap i ZSELlevBEHdDsjQbQjUlOSnChYaGxkUKBiXDAEtQpRGybgimt) (seq (null) (null))) (seq (ap i urjtGUqoRUxttjSzBwaZbFhsNPykvyZgGNaCg) (seq (null) (seq (ap i rSCcAbFqQBZDgdLOKG) (seq (null) (null))))))))) (seq (ap i BDAoRmwixjwjVHiPRIs) (seq (seq (ap i BRIcfetoxQURJDaZfDTtsttOYMabdSsPYXwwsPywulRlNaMxShccqeZlYlsTkNXkzpchmLGnkV) (seq (seq (ap i vFTuMFyzTyEqJvUoesahzuoFIOFAFmKEkYrIWu) (seq (null) (null))) (seq (ap i fUNMtOa) (seq (null) (seq (ap i dvGoKqeprkXJzMWxgsYiTHvoxSpgChCyWiYGAfPSUPgJHWjzIlPHBPBPAwfGbSCBMoBbw) (seq (null) (null))))))) (seq (ap i oFcmP) (seq (seq (ap i SbMqhVPvCK) (seq (null) (null))) (seq (ap i oTNiIYdzgjcxkgeCasbGNqGButgzEPeaVCNpytbzVbQ) (seq (null) (seq (ap i BoEeVIygPvMHwBSyjwLoQTZjEvBSCrOeCqSCVOqzKEEpsCU) (seq (null) (null))))))))))) (seq (ap i EuVSqVRDxHiqMNmWEdIkXMzbbUrrAKCDAgqSraWNhisOXghEFsYFeEHauRZ) (seq (seq (ap i yDgbpKFvOrEmKzeGjnr) (seq (seq (ap i BONYWEDnppMKCCKmgDkFNLFdcrFPoelTKNuOpck) (seq (seq (ap i efmMjacVJeAOBxnYZPkTyOWOSPRSyhHBEPoEYgqaYlquIeKBaMzZXKkPqTNmiTcUWGXuDywiyLUMQTBwdDkixZxImrsU) (seq (null) (null))) (seq (ap i EZqmrYEkXxMbxMmZAmzLZqRzgVNAtZAEIKJoSijoAWnIejfAOogsOLWl) (seq (null) (seq (ap i iK) (seq (null) (null))))))) (seq (ap i hTBscSoogRYRdxkGFSPVxigtvXPUbNMvLuhUdxxGNSmvllJbDhNUllmkifMjDWQKNEbgfjfgnYAEiZbvOvwiXu) (seq (seq (ap i EEysIFXxICgmJWSpCBRiAocORKwTmZslOmjwbOvVjHottXIlHoNsrKgBTUubdREa) (seq (null) (null))) (seq (ap i yTdahSJpcGgSScSrVy) (seq (null) (seq (ap i sVjdjNQkXIjCWhEdaneBtGBAfwGDcjYHkLCubdhywZLWNxxVWCVYczyzQzitPCZcqudYDVoPIfmzIhRITmYIFzNodHPv) (seq (null) (null))))))))) (seq (ap i JDEpDdzVRKGPHAWKCrHzCL) (seq (seq (ap i djzLPsmEBGjXXruBxXWsEnygXMgwiIiDkqksuJuYUptGjKedasre) (seq (seq (ap i SIjDseyBfvxXmeDBHGwpYuSCHQvXKBJGUMGafMSNnRgkpvXEizvmLvBmdDUmLaoDpR) (seq (null) (null))) (seq (ap i SwdOjdqwqKyGafwVyHqlVbccQSOEEErXELOdHdFTwXWcgA) (seq (null) (seq (ap i zlqEQKOLBnpNzkWSUCyRZQOQUWUucyht) (seq (null) (null))))))) (seq (ap i qmaDnxuCdtdGVUZJOlbpHmgCppulJNoRxGqdIHxmNjVYiF) (seq (seq (ap i GsDpbStcjrOfmFmzxxVBfxpvpSZwUuVKaogsiMJTmEzoWsnOvIKNIosyBjUwKCiDbbWIzH) (seq (null) (null))) (seq (ap i ranVMKmwCleqbrmhneGEisrarjHSqCizLggiPZhIM) (seq (null) (seq (ap i XeIKZjIZbJtCGjKjiHCdlJbUVQQsogBfBBUTgegbVhPXmiF) (seq (null) (null))))))))))))))) (seq (ap i JdPHxWyaQDWcqhNuOcSumsSpFkFmsBZIC) (seq (seq (ap i yHWIQFyjjjGemokccyWJHhYvWKkuWRFEgqYAnHuUvXpjndaijeIiroUEZdoCeKLHQBZJkjAwsJG) (seq (seq (ap i kTFDhQliqZk) (seq (seq (ap i RvqhQNZLpNYKLBZPWlZMzmsxvRorpvvrsgLWkqyMliAIYEjxOnepEXpKQyAjFMiTeNqPBZgySnWO) (seq (seq (ap i uRKgetCPubdiTvpzdvMw) (seq (seq (ap i tTwlSJBDSlIgxdptOkCnGOOBNxdQWuTVfvYcHPQvFbonjPgONxBihPPVXTAwkcLJboKTVijJvP) (seq (null) (null))) (seq (ap i RUTenZkcxxxpSxjNyLQDXutqZofokakfGjfbXXCYamulCiiYNwKFR) (seq (null) (null))))) (seq (ap i wwavboQYkdQUUptnuyAhWUEVFzXQKiy) (seq (seq (ap i AqUYwJvfCtbmUeJwszTwojiVeAGyKuNJsfpRIIINTeKDfadbCReJMhHtawQGEzFsImKtWw) (seq (null) (null))) (seq (ap i oDafzb) (seq (null) (seq (ap i aHMiuAqKyarqaKoiMraKCatgNFvSua) (seq (null) (null))))))))) (seq (ap i eYINoAfQnCcozvLaZQpdYpeRelgWEGWUVtnuCUsmiwVNKWjLYIHFbXRIGriAzzOsTzNx) (seq (seq (ap i ffPBmpGkDzpJwQfHXbXQMtMXSLOQ) (seq (seq (ap i eSnqmTtRQjilnOKQrWysrbLDjDyVGSNfLNqbJKQcTFsQNgXqIMjzLEvcbQbmXfilAzSpgsjdaQYpp) (seq (null) (null))) (seq (ap i coPajDGGGkKDwyIcZFYejdSzltpCGcSARYZEZRBbYvLjaPPaIFxIolbVOJBLXxcKNynL) (seq (null) (seq (ap i rcWCMiyZvgdqkuXTtKzuFjEAKHUCLuacQmtBsuSvZMwkl) (seq (null) (null))))))) (seq (ap i EGmeCpIiNDAyhd) (seq (seq (ap i SGjUjPZyrqirBwccbJaYCcHDCJVDmNVoovadowCZnUdiuOYEXeq) (seq (null) (null))) (seq (ap i FZLtDHwusOrwnhjIpdLJZkOhIyWdFiQxBMfqGDkngZHFssigbRqQvyOfOTzOyPeMGLzpJXiVUdocCkylQXIYuAtPtPt) (seq (null) (seq (ap i eHDmDyXvyy) (seq (null) (null))))))))))) (seq (ap i nrepoAzvjsHQnWJ) (seq (seq (ap i TztPyIRoQIc) (seq (seq (ap i UTSwaBGsGwuRhSVSrWlrPsyMpuNgGgRQOadjkVYtieTQqGRyhcsLLmhmocGSqYOXlwtPrKOfqWGykVuFfNzxGiZCoJfCeUeix) (seq (seq (ap i NJnLfojfoMpjTsXmMTXMgWXgcGjlaJavaCMqxYJwiwQGcqeIeEHAtDmxPKMCjwQoIFiuMsg) (seq (null) (null))) (seq (ap i heGod) (seq (null) (seq (ap i FhAgJOzDYfSfJpuKjlNshbpFRTOMsJjjgingRCOeTtrjKhTPCOwvm) (seq (null) (null))))))) (seq (ap i wnaegrMnhtGYrvfpAkDgVKotdLmWHaPuNCUIXxFuXrnnfjyCCZmCq) (seq (seq (ap i EPYtPRSQUPSJFrwOJsJVx) (seq (null) (null))) (seq (ap i oqfSUwUXEIbmIPxeQGsAZMeisckCxJUUOkuxtEDuPIvENpjuNPErRimfhivFuWZWUkQUBvHxxctLYG) (seq (null) (seq (ap i ERqAgnghmNHOTAdziNnAZKOzIDycnOOezS) (seq (null) (null))))))))) (seq (ap i ZgYUnWJiftHibVMrxEGWNOnnAgfLpzBoskeIuoOyITIqjByAAqvcABgcBEmjWbwPhWkqZCQIHbiTQUJLmk) (seq (seq (ap i AEADKUIOZQjdxDMMHHSYGOqrQLmrNPVTMlKHeTQWyMESfsFvDDFehyIhvXMUjzRrYNJyTNjkBNFSIpvOOdxwJqinkhR) (seq (seq (ap i BEzSgTQIzqTDCQlBqiLqvZMJvWRTAJFIcDDeDwLLWntURYwpBzD) (seq (null) (null))) (seq (ap i NWpPlYqcCKdyXhBtduWrHbeXWpUiAUWtXJwOuvetafnWZjSyHqyPAQRmjeDOT) (seq (null) (seq (ap i KrmcSuLyOeqqrwqwpNCODwHZPovXmUQeDlyQJRSpeEoNwJmZLIqwyACWHVXWYBGOeeaaWIkCyEoJZIYbfjOGsrtXh) (seq (null) (null))))))) (seq (ap i XaRnEupwHLnMCGYQKUAyGbyYTuVsatqqzBduT) (seq (seq (ap i cdzPvxbPCiBQFvUY) (seq (null) (null))) (seq (ap i JkstbCwnCyTLtUROxqTmoDteIYjUnwyDQzThuQklbSUwviAjoSLrBgMdSxgJJJ) (seq (null) (seq (ap i jziWxHDkLMCScIVgIDhfnwRHwCfIBP) (seq (null) (null))))))))))))) (seq (ap i ipenojQCwDUEAxkXwLFfZjdTwtNmEbLPRmbaHxyDYKFaL) (seq (seq (ap i MfbizCxyID) (seq (seq (ap i YxUbavofvtxPMSgUJpxIDlhvgRatQRQspHaGLkdlUoLmRGOQEPJWvMRapxbOBQeEUipiMaCoYYKZWSQAljzgmkIoFAZK) (seq (seq (ap i yscWKTKYCFwbAMNHrDdrm) (seq (seq (ap i HoobLXVbTvexXOPSylgcYipSLqprNFKuuqKnaslSFaqlgxGUvRbccfFX) (seq (null) (null))) (seq (ap i NncGCGulHXZhbBnqdZVUFFQlAQGvyftntmvsDcLgIERcPzArpgSPEvFVxWXMyzdCzSuXKZrvkjoljF) (seq (null) (null))))) (seq (ap i juiadSMp) (seq (seq (ap i XKrakDeokdONnQh) (seq (null) (null))) (seq (ap i keoUURYBssoYBqNlgIHRxXOwyrbmRQdaUCRPTdxShMDpCDklgPgwGZDD) (seq (null) (seq (ap i cMYPsUsMJiTXqSiLWAZRmLzVhniVVMSngyjaZMTroyeGxIGfuKqXohTEZHSFNuMoDUCLtsaLeCJdLeCXRjAB) (seq (null) (null))))))))) (seq (ap i HhlXDnHnhdSsvjudwGG) (seq (seq (ap i kzgqVmBTDExyvBeVKXYfEQkmjVDqZgfBfZDIYPbZNokVbqhhXowWLuDytMEMfiPsPmEJrxkLksohbBqUBPbroVBtkqUCmOaK) (seq (seq (ap i aHUHDzFPSRHNgivwhNVYJynaMAZuMUDWkjQWwRRCTYgOnousaJxwWeHlKR) (seq (null) (null))) (seq (ap i cBXTlXZOHnzYUMlnFQLIWnLgdVxKmwqPrGsIQHXYMorAShDYjMjbcHqKlmUL) (seq (null) (seq (ap i hUyELePUejWihrBAUdpiqehxhyDeQSKzgFRhbUYaNxBNrXzTdersXBGQKgtOlDAPvnnPVnzolGep) (seq (null) (null))))))) (seq (ap i MxuTBVYcAsbwLsBEcbYFUwIcfsHgYprsIJXsGeVIqYiujtpHDFjTCJghpWPzOWDtDHpeXPYFL) (seq (seq (ap i rFEiCkjwEXNpeccuFs) (seq (null) (null))) (seq (ap i dbsTRZURVNPRaWoZyAPXKgmZlVxwrTtDpMPVfIFjFph) (seq (null) (seq (ap i lcJcCjYkuitrBCQHGdOZcfHfjasdEZGCjYNBvtcEFSLEGLrFQSOuYYaBNLjCwcabTCaYMGgsDfYzqbWAbTXdxbq) (seq (null) (null))))))))))) (seq (ap i kwPjjIYovrOqpHYaFEbuTTLEzCPpHpTItHSWSMyeOAxoAXEHMWXGSQoRIIELkNqTiNWHHplLTxokiyU) (seq (seq (ap i vPugwpkMaUPqoo) (seq (seq (ap i yUfkXiKBNvKQbqfbSxMaGYFzKm) (seq (seq (ap i PzVqayVHTTSVSjnGfNTVVkqOwOjEOxWdsCVnkNrbLFNXlxibkkeSNJMdTyuBGVePDIniOaGBuZJtHjvhguwUxq) (seq (null) (null))) (seq (ap i WlcuQVUFChacjNIosBoqlQcyLWCcEOaauPYWFyfvTIFXeaIoJWYkuNcSCPrpIfKXJLN) (seq (null) (seq (ap i RsjTwnxKyKOnMnbvIemWiQRVMtXKwahwQJaBuQWIPuhkfcBjSfalxElPjDwrHpaYLSJQcZdl) (seq (null) (null))))))) (seq (ap i ZNWcmCUmAIPEyvnapVbGNVVskqrEqKQFVlqSBysXvSqQOqkHfHQWorRFdheZRczUsCjJUBZtSqfJccjduIzmFoegpbEfgwPAcBGG) (seq (seq (ap i xqoXixqNOFP) (seq (null) (null))) (seq (ap i QNeXOAX) (seq (null) (seq (ap i RsJEhbWzexXxLBvapABfbDitszBxkemJSxBQdrhQsOOpeOfFPBdhoufCKmKIfsRGmNTZQtacyAsbPhqRkJlUjtwUvJvch) (seq (null) (null))))))))) (seq (ap i lGVyZIGHKSZKDYezqhUSbcOBiqWCzZMmAhLBgsbqUAeAtncIjBCmguOmNJvdYviP) (seq (seq (ap i ZOosAbGjnpFzPbMXVxjwNGrBZYVrWRQetpYlyXtkRAnVOdXxuREAOEKDNTqeYHkpYjJLLFYyuACPUuQQsROxAiOMcMQqAGid) (seq (seq (ap i pngZzpbtRWJvLePaJZDmbWjyUiJycfIMTfRHOgzm) (seq (null) (null))) (seq (ap i rUVDGrYDpaJXbZFATIGnUesOExFRTPIXdbKlaOPvyAEtJCxKFmHGKJEbQOaygsjhJmijNAPbnzcDKTHGXzklEazNivATQEqEqdjw) (seq (null) (seq (ap i aAhrJAfGYJWeDRSOwEeDpykpxQFCoRVxicbcQizlgMLpvwHZYolCPYUEGpXKUOsOwjexqiAXxgvGaupEZZMRgxmPJWVT) (seq (null) (null))))))) (seq (ap i SiXQNONK) (seq (seq (ap i VptduzbaNH) (seq (null) (null))) (seq (ap i pChbzHgdQberePauOppDTosmCXabngbceJYuXLyzjVtFOlCUDjosRLbQALHovvAMyJvedbgLv) (seq (null) (seq (ap i CqzfBazAqScoJYEsVNOxVjQinEtdZRkRIGKuWDpCSoqGdelVPlgaFyHbmIqmRWzcuj) (seq (null) (null))))))))))))))))) (seq (ap i fDZcuLjzOXUewzkDlEmWWgpHMkLHXXfxPdOrhuoTvYBtUNbytOMVMPAhnoDcKFkmAdOncIveJIeOythuKKhEVrwmEXfJm) (seq (seq (ap i LpOHfzzEEqDVmFEgJLyFkCzexNqc) (seq (seq (ap i yzNquFROEdlejLMCGijqcZKRTMSoGrXbBkcrpoKUuIAqSqNOfMRNtIldFAgEkNLWHvuSiLYs) (seq (seq (ap i BPkOUzsxwyTtAQXDCPnvzQTjYCfHLZGyHd) (seq (seq (ap i lEZzZazsBDrOGuVydzjcQOiZcqlGERcKaRsIYhDahKoYZesmuWPMNljfIIup) (seq (seq (ap i wRmoZdFUZomBkWNwdHcZmQpqgsTVShQMcpNjxkeAxsPPRJSPEwfbFiscQHvaWJZIUOnlnGx) (seq (seq (ap i jumRiqiOWINiLwXqqFyCCHyaEpOfqkzGQvJmjKYHncdQSElcejHfRldeMSbjCaydURtzAYHHvZhlzqZGjdsQ) (seq (null) (null))) (seq (ap i ayqXAbDMKQuhXoSWtCkivVNpovPgXeYoUNCwzdzQSjQCUkDGmOBxoFwZHyZbZwzduZGQIwYyJkrgdR) (seq (null) (null))))) (seq (ap i lOj) (seq (seq (ap i epoLXRBpVTxucCfDsPnVJqoSYJZxVcixBpfXpisjyZtFvVRHcxJsvNeMBLXtejKcxDwRzvdplcPNXwEOIFJjuF) (seq (null) (null))) (seq (ap i bqsrewIzdIMbNtz) (seq (null) (seq (ap i oOIzoCyblZSXdBDdSmBHfPAHTxzIuHQauKlMeMZJrRQvaFRTlKrbnBezpGrVzMelwTZdjXRgwFJOAYybtPypwgCssCAAegPpPxb) (seq (null) (null))))))))) (seq (ap i XRDymgpskrbFqGqaNBgHxiudOkmwWNBBjwirtOvggEtrGUFgHYlWCrrWatYZpBWXyFQUlFFtwelcXYaQalfmImoAiiwvuAsoGbZJ) (seq (seq (ap i fjLWmfIvjpBjjMzHStJzaXvinukEekxhntaqGQvuZqLjemDQmNbCMaKahRvmMitvTPMNLquyqpAJcereeww) (seq (seq (ap i zB) (seq (null) (null))) (seq (ap i ZMAEXedWsyolISwXllDoNNDAfzPGvtiuZIetfWiQHdMmbtBpRqWzPhMbQkWkit) (seq (null) (seq (ap i cgkqgPstfodtAEgfCXwSJHIlTXbRTuwgTmxXCGsBTICplghBrdUKfmftDJeuNLgyNnQcKuquycuKhIjeJPwJighoZzhxihCLS) (seq (null) (null))))))) (seq (ap i LDHvzuzeSXmoAMIpuUPJEMckCcwldPGerQb) (seq (seq (ap i MIltnmyYbJKXBcfLDIQKSqfMEDQdBJFOCxnEQlJoKbrYgvorwRWXRJGWpuT) (seq (null) (null))) (seq (ap i IaLSREIAHEiSsHFAZdcRgbHMWuKjojFAVnDilEKbzqqbGlEiyEcahMTSzDbDAeAQsA) (seq (null) (seq (ap i aHutHKnfLFtmhxUDeNYoABBpNVSgorMBaYGiWXabpdFBgFrmorSLVIulXpTk) (seq (null) (null))))))))))) (seq (ap i KwKdbFryn) (seq (seq (ap i KXqQqSVWikNjxmgMQitYeWhANQBmsoUdFZhxkJpSsADsWZNmhYsMqFfzmMVpslPpEyzFCdgzAFSL) (seq (seq (ap i hJWkAzgoonuQnLujbhKDnYgRgJUgpjloypToboqFgOLVcXehcGWocxMXKowmgliKYrFypQUFsWcV) (seq (seq (ap i ADZqpaDwnHWlHwbImuWvHgCYfncpohbHpUzSwWBqyaSncNfveRIOGjML) (seq (null) (null))) (seq (ap i GXVVdiNKNfUCYnNmRYXvxPzLdivziPiNDDMTgdoyAuAvobrYnaEcFMmTlqHKVDYutiWL) (seq (null) (seq (ap i BUMXOHrMelPyswvEEbZIdAcKFubONghpy) (seq (null) (null))))))) (seq (ap i mr) (seq (seq (ap i KIdyqNqvTUPVRqBstRKHWfcpjhWQyeuGzVuhhbdlwLNvnVduHFGniFyMANTBJOSGDJSQpcntBUHxDxxGmSscfwErQfrJYTlIehv) (seq (null) (null))) (seq (ap i EhFqNMyRBzDGNAmWkDuACVzMCjhnAEwJcNNzJvUqFTApqHVBZbTdILyLdpeoRizYWAEpKZSyQSUzbLdKmLylLhNOGKJnoVw) (seq (null) (seq (ap i AbFTIFjgaMldxbXuwIODsIjFDvtjrbEFkWBSkRISNbgfoJofUrYXAwvIaYLBaMqCqUq) (seq (null) (null))))))))) (seq (ap i xDZITmHlmNjbRkfEuFObqflzaGuOaIXYPpuTDguMYILjzeclUAWSysJyGGMP) (seq (seq (ap i GPHviYMrUCehEjBhvLTwQWoZMNGTfOEzAkZHNwYRNJiilnzAVQnRBAYYEWZKm) (seq (seq (ap i aucPCGHREtPzIUYdaGhIKUj) (seq (null) (null))) (seq (ap i bxxwHcODfVRmZZQrQQddJDVyVFXLvQfuBzAExLnGlagJvUkpNIwiSareliODqHRpSsMSmQZcUBHlBWrprqO) (seq (null) (seq (ap i aBsDKHTwiidEOfUSsvdQuFOuFnMtqAazkbfGIfpANrJXqLIivvacWcwlvviDJxtwSzYETfoRmGLXSEeHwCOLBFM) (seq (null) (null))))))) (seq (ap i fETzWdeGuZECiSLpVHUzCbsZIpUnxVnbMjqFzAunGgiRQZkhIZKR) (seq (seq (ap i sgSlsUoPphLNyWgJUAA) (seq (null) (null))) (seq (ap i HLdcTACOFTFKbEoTZFreAZgGfOiXGuCYwxbisACceEUAWGSQCcQzqXniEjQHBMvYqXyHJjxG) (seq (null) (seq (ap i MQOBUXzYgtTmrmuOpzOwPHXveuWsVaWFhApglsrwQdSHPGbJOqcqMmJvIszIIIvsSYr) (seq (null) (null))))))))))))) (seq (ap i hBMAgcKpoOmBwraUsnDkCbzNFljtDVHEiRXGYvhPRw) (seq (seq (ap i NgxSZqWrgwPhf) (seq (seq (ap i lyxcMOUOupbYcpeQYpEsNKefL) (seq (seq (ap i uLELbZtHpNvqaeYdSdvhbfWAWAGzlSiZdGBIFcCblSpXOD) (seq (seq (ap i gBZstzhBMUvnGgcvFmaSAZqAuSsDpJFufXrg) (seq (null) (null))) (seq (ap i MlbEJlnOwEDGXDWJvsxVayXCLQwsDeFERcAlrJwttQiVbYhOEcVXYAeJLLMXZKkBJVSjFURWswGfqjTuAyjlOmD) (seq (null) (null))))) (seq (ap i yqGemAManxSzpHGMCCNxnFzomxoGxmIhACaoyZkIPTXTTiWXEpaOmhiVYbbZjxwQJbdGRClXDAVmH) (seq (seq (ap i dwLfLOYbtJKpkwdTrjcqRmxMmudvP) (seq (null) (null))) (seq (ap i DMzf) (seq (null) (seq (ap i buzuctxhnoPueCYQqcmZLEdhfagOWPBfXDEmrcmXlJeMNOQeLkQBUpuNQwiDCWRhLCXQmzuGyiHawUMsNXYUpemwdAf) (seq (null) (null))))))))) (seq (ap i yqPMiYPvrZXPEkglhNOwlXNuUYhBPHrWohPOHvHa) (seq (seq (ap i IddWBTTgBtTHwqxbbeEONgpXiXKdbGyOtasBmCCCDwYAdcmrKJLIMZOirOaUfPHFTRshJLciwsMpQxfvBLC) (seq (seq (ap i aMrkBSKYLLodzYpRAilJdUKxZzoGLBvxshakoS) (seq (null) (null))) (seq (ap i nlrOGcgnQXxtVySv) (seq (null) (seq (ap i NufVKwOJmiDcBTTWaTHEA) (seq (null) (null))))))) (seq (ap i ickPAjdIzvQrtLHvgKTSInNsyaRNv) (seq (seq (ap i KqjkYXHalGHNPKPEodHNXEbdsmjrvWvWMOShAszXBARnZse) (seq (null) (null))) (seq (ap i gOxFkmhuVLgqipkHuUDigkfmEXkcPxeVZxscvYtCDQ) (seq (null) (seq (ap i TfcWihciteWAmRjrviFWsCOaeMUoVucvMsthEMuyni) (seq (null) (null))))))))))) (seq (ap i rKVTnWNVzhNwUaPoHxPtvfLhYNONKsdIKWxKenTswLKbOAuMnIeyIVPvlfWEynOscvkWKPwOYVDETkTMUKvrVB) (seq (seq (ap i KUxxKMTDNVmDBPRlZAT) (seq (seq (ap i qLfJYWKIiJ) (seq (seq (ap i hdzBsxJhIuqPbKWYjJkXPJnIqmxMAewzWGUIaWrDvjOniDjFCPGcvPvuFKqZlAfIj) (seq (null) (null))) (seq (ap i qSlEzNUYzQMTo) (seq (null) (seq (ap i fbqKYfyXmLwlyBbxlcTmSWdgMMqFCrmnSlUA) (seq (null) (null))))))) (seq (ap i eKYtUmudhtYgfxDjWZWYMbULoNRJrHZfNffTcUcybHegiFdlpPSRkxrYavYXSJuAMgrijyGnXyvoSrxNKxXRxEcQUrC) (seq (seq (ap i TqVxwOZoFwfoVOCoJBNRXdKCkFVLGglQcMRXyUeNUOzEOElWPabkhOEmumGvrqlxuf) (seq (null) (null))) (seq (ap i TSwIHAmEqOrLuBwMAOWXSGZCYbZpEEpQdDUTssWODPfgRpXDKQQXqqFDSNdJnCpzaTPnGtEHcBBYaRVdJAHRtLsaRJVyCxHZ) (seq (null) (seq (ap i yHMQWmgNqMYVSmiuRyo) (seq (null) (null))))))))) (seq (ap i HCDtEIVuCsQQQgiEuMYoyhCxfITzydKbrZDuhQLnTQudHOGEWDZrvpaMDYezUpMIlveEBapzqzmYFZBgYqGrHcAIt) (seq (seq (ap i qiflHQBASmqprEXlqNLvquKbGJyZfhRkvaZWjdzlEAdrJ) (seq (seq (ap i lXREmSybjzfsHNEQWIlCOOBlrpdyVcVRltwerQQlsqTZycotHrVhDTPVQGIANfjRYThALKEBrtbNSupYwfnjWgmqCJOmCyImLTH) (seq (null) (null))) (seq (ap i SnEw) (seq (null) (seq (ap i gFHkRBAnKKZpUcKSjXabndBSopWsjyVpZffaHZwLgXrNPtusdjsbylitAdzdCQt) (seq (null) (null))))))) (seq (ap i CWjLpMtsdaHgUJSePidPgbScPMrH) (seq (seq (ap i vkWvfjsecJRIzpfULLwzLvJomMLafVERJdVsAMyOpQWRpmcwdbOJINkWlYxjbSwucgWZPlZNZrTchAHCtDlEQFuRIrm) (seq (null) (null))) (seq (ap i ydrsOnrwAbkxznBJMBkxBinDlPybCMoGOsDGKhxauLxhQdIiJqHlTVfuKLuAXYUoCpPVjaPAuvMmgASzSWhd) (seq (null) (seq (ap i aFDaYIjhbqpSGSWIpovLUoWRaOygFszPCpwvXjTgu) (seq (null) (null))))))))))))))) (seq (ap i IFUEvqfjhfraWczayeuZdiD) (seq (seq (ap i vHkiVNjKrwGsnYCrfdoORTJUmxklnQkFwMrOCqjOLGfKzHjgZvLjxyuSvWWXSgopVXfqWZvWZSkHblVPzUXbAwDEcZtOjpW) (seq (seq (ap i sYrBwxLKlAPACYnUteiMcXvICVdlNFULYeTdDPCjEoDONjTPiup) (seq (seq (ap i AgkXiWSnmLFpvnGAbsvcLpWBKEjSavzsnSgfDdAZYidqPHbwChfCAiHwmGsCrBiZcXJBcYtcBKcPGOxiBoWXwIKNzwhAJ) (seq (seq (ap i TkwmLSaNUDKvXuuSllSAxJneINGYizjBczCInYIlgAjJmyMOiVoqBQeXhcjbDdEhdMrCKqDfJzfIlNeaIxOdXnoTbcOZgyVmjQI) (seq (seq (ap i TZayUiZWzCQEhoaNXSXjOATHExMwZyiTHsgIWhLjwXRsfgafsZksYOGPnrzpmYquoarLvHDdIlWqumanixIBulFDiMQm) (seq (null) (null))) (seq (ap i TMVYTHDqqAKkKiAlAlgJGTXEFkFPOWfUkmcNHvBnZBDngfkYi) (seq (null) (null))))) (seq (ap i nlWzrpsEfgyTOeduXMjoskmPftymxZBMqCgcsKfhKADjDfJwqGbTwkrIMYTcikwwbAUXVEIclprNuQ) (seq (seq (ap i wtrlITJDj) (seq (null) (null))) (seq (ap i SlZVlLzaRjnqVszv) (seq (null) (seq (ap i lqroetTYMfNAbbWnBlBIoTxAZqLBOpnZwEnaGinIWVAgGvrnVAFsxtWGEMTAgwIhUCWTJKv) (seq (null) (null))))))))) (seq (ap i QpxExkgXgCLzfzEDJUxGcmbNMZnxHmAUyWAovfkRbBeQsBbDHrBzyHYakkfNdmRIuPZXaHcECNgpJehlmjMRttWPf) (seq (seq (ap i uRmXcMzvIrn) (seq (seq (ap i liuJgKZCamMqGwBCoiPiNKNue) (seq (null) (null))) (seq (ap i zOtLFwOLfRpgDffTYFFaXrzzmrDkYNQfvMXYGKHcsfcgiifezrsbDEndfyvkKhaDENWBIqraAXkOVImyWWc) (seq (null) (seq (ap i UjkTyptqrBdFgzLsqSPvurobjVeJpzYQuW) (seq (null) (null))))))) (seq (ap i iuCObLMIbNGgohozorBHHWfcHonZxdxPOMYmNbxTDDGlzehbMcAQxwicgCxjaWfAGlWevREpJbkMTSCzs) (seq (seq (ap i UwrkzhSOUgyaLsjABdmiXQwRcaYpbjECzWvRmeoHnEinjMEhMJuAfzVwVcLEfChLjtFrdHBjVwnx) (seq (null) (null))) (seq (ap i mPJCtrMpjYnNSjHZmDataSjmrlSizdADKjLy) (seq (null) (seq (ap i QJseXOwfVDYKBshhHwhUYFDrQDZhMndDGNqFNC) (seq (null) (null))))))))))) (seq (ap i qGqBSFZNljB) (seq (seq (ap i UjXaWRsLPusxzUUBNZEUsymDKNBBmPUkjsUgjOTeeQnudrY) (seq (seq (ap i VscTNYZlaRiIsHIGjphKXsp) (seq (seq (ap i fnxQcJGAkfvSPDBHPtrKyLkMUOyavkUSQXyThfFTfwXXvghbyFEMxxWOHfysj) (seq (null) (null))) (seq (ap i QPf) (seq (null) (seq (ap i AflfUBWqWJzFgqgmpJQBgMAHhhrpoflxbtxxHnjmUeFRCrkzuINvRimBfOlr) (seq (null) (null))))))) (seq (ap i scyZkgldioRzLVynYmeRlbxoIjIANmjMkjTBrvNXeGhPuCp) (seq (seq (ap i FznekKbjelpQBfYmggbrFBXnZkOmbjMYDUBEljEwhCwyDkfbypbxMlAJCRLx) (seq (null) (null))) (seq (ap i GFWsJJIWuHODsgPJQeJkvjBRSSFsoSeDJBtsoLMjXciIYCoerOdkvVwOyDwuAwTJzcvdetaJaxBShzXFmzmDxD) (seq (null) (seq (ap i IOImcABQnmKoTvgyfEqvwJPpFGTJxGKixbtJXJYaMtybxCKWrgegvkmpqCbONDfLACkJwJibbGRvvHiZubwpVTFky) (seq (null) (null))))))))) (seq (ap i GOhDOxvNSrVkRPXHWOpBfSYWtHtXpQAS) (seq (seq (ap i ZIhzTjIngYFihvQFevGUUvvjSSisEptLJYqoduVZmZgrHFzaOBNSMKrtdHzdqGsNUTZoNGRzmbbYCXPlDKotQCkViKfSOmlykyQ) (seq (seq (ap i pAhWJoViAiloyweiYyEINaJbhGjR) (seq (null) (null))) (seq (ap i faJvVvMAvhnERfMpRNmverWnzrnZCBqOZpJHGDQOw) (seq (null) (seq (ap i rrSPttHyGqJWGleJhHuhbehLyvtpIdwTAdCV) (seq (null) (null))))))) (seq (ap i MQZIzUdwsLtYwltmKObhsKBRrOeEeRMWHXkqDzTWgNlOcuju) (seq (seq (ap i dgvwzNzCwxlBPKgXCFftuVwyFtwXukYWPRRZcOUkRqZAfwQhBYNmwVgGzZKGVcjMaZyvREAueq) (seq (null) (null))) (seq (ap i qkzNEoNiSRRlfDWHwMtpmE) (seq (null) (seq (ap i rbbeNgQptHEMffXsfPUVxmiWwDtqTpR) (seq (null) (null))))))))))))) (seq (ap i TPnIBjCEaLfovLvmKMPPwFOFEUvIAK) (seq (seq (ap i NnVjHDyLbTOHAfAvFPqwPsBstvpcOqWUgFiuuij) (seq (seq (ap i krFR) (seq (seq (ap i RLxzLWVnoqjPLeEgrHyVlNZJEjlHAZMlkvfpfcjoUtmefknPtmGwIIGuaw) (seq (seq (ap i amXzIzkRjPNmphKPcYKUiMdpkXuUczvomigDqNyPFfOheprZtcHmWqXXYqZEelQfkhsbwlKTzbEWQKiADTCtKpYHpkcn) (seq (null) (null))) (seq (ap i AkUjijlMVViXVisUeILDxVbcYpjZPavXgjvsRHqTeaRAmICPElvIVUzxwSxgHRWOaYmHMxoGvaUtzbZJkNbCUtqhpWIEsULWAQv) (seq (null) (null))))) (seq (ap i IZJpBPQDKLFIhnfoYinxJdKTUPCIGgDeqYBjCMDHVypirmuAEexMmUWkNziMaW) (seq (seq (ap i ECyVwIMKGNDcVCyIABZzBYscHOImBnLpHkhSvUeJegGxsDiupbXaEnTIGRIsmPkCrYDOUvVb) (seq (null) (null))) (seq (ap i mlOmWWKIXqMIVLAnQIeKIRVJIVYqTeQWxBQPLTNgsNGcTcnvBJkxhkicykcdvpTzYx) (seq (null) (seq (ap i NukUfYnUwEBboJhDINnlIBvtTCdkF) (seq (null) (null))))))))) (seq (ap i VziXxfSBBgWEPXHOTivyPGkpjmRLXYNCeTCvLeqbRFzkCUFQf) (seq (seq (ap i UCFcHHFaalQLkjsXSLhkDaNLfsAyACCCjMoIVDqWkOKPOcOlCrKUk) (seq (seq (ap i CptJnnwSOUZAFvTOPBSCAi) (seq (null) (null))) (seq (ap i bZCZnSxQWuMzICQexHfJQsEnbeXWdBRRRLNPDgKYDkZaGAUsYqiFyzPRsByQgQSuxitLrKlzLEtJKJzPwzjwMZIHxwBAWarNKsIW) (seq (null) (seq (ap i ADMmleoZJZYGSPiMnxgiLXeSUlFMUFrBgGquAwu) (seq (null) (null))))))) (seq (ap i FWMgLnBHlxbPIxextrMbScPHuUwqNUlBYgiGHyOPjcMyei) (seq (seq (ap i qxCtvDJBRQDYSJbEMDESSsfWlUAZWPUtheLksLHtG) (seq (null) (null))) (seq (ap i NLqEPWlbzbSkGioXcpswymXHcInQbPtbccFhoJlOYoktQBcAQqMWEcaoreMSMDTDtTRiOZKclNAWTJUSZqYnNHGqzNdq) (seq (null) (seq (ap i OkmlWL) (seq (null) (null))))))))))) (seq (ap i afDUeFLPlWBvhiLFZXtgFJHFeYLhrMbPMJMueEttFjaEiuLJSolEOlYGNORvnFQVoKnuAPwpVqHM) (seq (seq (ap i iMkTNqgFVPiIQMgWQeRJ) (seq (seq (ap i ZJCybzqTtKVWqVvSzTHXLOzRIPogSKSiHguY) (seq (seq (ap i AgGgSDoQvRgpXubvdLLdcUfmSsCaNqWofsqlqVutzIPVncxXxeUluzTmoojp) (seq (null) (null))) (seq (ap i LvUdPSlrWsRbclGDnscuKhJTWsGDWzMxhVplxscXHyHjwzQicBIbYCOnTkuNIxntOMUdMPzii) (seq (null) (seq (ap i KbJIBuDsWQDQaFtMFJBRpYyzRbVIdbdfMRCesvlqTwlGhyJRYrmMazsidXPZwdqmhaZtFzgiadMveuJHGhdgL) (seq (null) (null))))))) (seq (ap i EByukOltRmiKvrAKlEKuXwItbZYfNXyngJWFIpvgPAJvfMKuswAhFUEZc) (seq (seq (ap i OPDuvRCXYcLTxMKKmQdYnoxMYJFIbrFLUGZqHyrZE) (seq (null) (null))) (seq (ap i HuiCSSFXQIthDawkPtFjenphhtwTIPS) (seq (null) (seq (ap i gJVELPgnfvuxAkxMDAVOCmLYLieICYC) (seq (null) (null))))))))) (seq (ap i QjNThZpXIjNMFIoAzHmD) (seq (seq (ap i xjRpeRiTCzgzpwzjlytHABWLSYThTvklhdfiiYwjXkCIMVYVsjmEkkDeMBR) (seq (seq (ap i WWD) (seq (null) (null))) (seq (ap i QvbjHDOeQpLhHtIEvcOXgWkaxOqiWGnWsPNEuSMmZwDkrYyCuXOYyVRzLpnufGDdJFHUfZqCl) (seq (null) (seq (ap i GstvAHtriRapohfMEPCLzInMHOsKUjy) (seq (null) (null))))))) (seq (ap i GEAveWohgWrbnQMBkrAXkSqVFiDzCmrOlFlnzElXLrfynqWBO) (seq (seq (ap i TaqpvT) (seq (null) (null))) (seq (ap i ppDgdjoZRgcpWuaswXEkaBAFXQsFurVUgJBqchzspwfRMcTMduVXjmpdoqiymkALoMb) (seq (null) (seq (ap i klqmjWHrPCnpDGOBEdMHMHXUfEOctimLfGFFiZSrBUu) (seq (null) (null))))))))))))))))))) (seq (ap i ktSeqICFufJVYzlcLwpeuIlAI) (seq (seq (ap i sbdtufNFPWIgcYKKQPoXPrJjUNLmorycpGxpQYPdabsxaLlGJrVaZaNTRWlkRXqzPKk) (seq (seq (ap i XdSeAfdWPlPXboEHTWhqEdDsBuXcBbjSAtjMjYtOvJFHEfOkaflMxTjVtdNuAFj) (seq (seq (ap i RgDwhRvhVHEmL) (seq (seq (ap i RTuHJqDObHWTqWddaPMnxWYfANtsKhIkIDpUzBAjGPkVDnpJawohkrKwqEoWqwCXQGPom) (seq (seq (ap i czfqWuCDWbayTHYBqFLoRfPnrVlDLbfGkidsSLQEnE) (seq (seq (ap i QvSDWrlGJNfEkExXNlLUDGkcYwUNxDgxPwjtdPoldIvpKQGLVZmDUrdxZdTZJmraBBxeBYUzsOMreyewmLG) (seq (seq (ap i DGTLrfMHkxGUIeLRYWHqHyTnnyxHxIBPBaGvwSauzkCoulefFErNTTZiJQxgkiVg) (seq (null) (null))) (seq (ap i jkiqiTsBSGGTyonvIeIWvqgmhClWzDwYyHExOkqGeUvYMSQMHpKKXFVNCFhLSpEIXvuIRmiXVjdCUPjmLHx) (seq (null) (null))))) (seq (ap i edczbndzeaKbiaIMYPcEVrnzKhhukQi) (seq (seq (ap i MalpDrrEBcKKFAvAwBIGEPINzOtVNRmnxYasLSbAfCFsmeEzQOvnfGOmLMLSJGDSsKfvNhhKdVXVaWiwrLplcAVE) (seq (null) (null))) (seq (ap i VrnfbGsZGVOqonSmBhVpewrVvZsYAdUXKIULXdDQpAg) (seq (null) (seq (ap i aWSsFJsRsJWZoroslryLNIjaIpbpsIuSekkOyKxMjrbpDKnebLhIbGDJOrBQpCriWIUhbzAmoPFYA) (seq (null) (null))))))))) (seq (ap i ALCwkDkcGAWWPotWVUOaqvNpwLCGgZTXUnCZvfFJkaHgpSwGbEBZxEMybQqMWcNwEDCibvBFGAgoTZeqMDsuS) (seq (seq (ap i ZbtsrZApjUyaAXgUccDjbojrNdxCEYrFKactfxhbR) (seq (seq (ap i NwXWwQqbtSHNpoFYAHbtdWLAiBAuQjkVzhlxpaCCcwPRPDdPJyHxfLVQNHk) (seq (null) (null))) (seq (ap i GahBkhfChZRnRieIxoIFOiaCwpbHmNmhRQxPUYiQgXgMfIzYZhdDTmxxDHpzyhCNngfs) (seq (null) (seq (ap i RoskkMYJgcHPeuruleGZRpBkrjIntgifNuefKvyiEwMRGBvkfHL) (seq (null) (null))))))) (seq (ap i sKRkCIpXmUoWLydMCdLmyvGwMpEBbSYImQHwNEnfCjsMqHIavEyCQYFrFrHrOGDQTpERCFhFqqnqbQuhMR) (seq (seq (ap i FqmgNDzFBYRxu) (seq (null) (null))) (seq (ap i KGbouqlFlULptXajOQjCYjampsefzzUrBUjhYwoYxetITPWJFpIckXyhnszGmRzJInhJWxZojgqGUGLZqXlSYlbBsLPy) (seq (null) (seq (ap i gqgWsfEDqegUUiKVodysYFCcjfjegXvPCqxKbxMFmyfqUMwaAbCMTgjvGnRatabcVNqYGcTfBdVySFxjmlYkbcnjtDBs) (seq (null) (null))))))))))) (seq (ap i uCPYMctFbfzyGQVOihLsJhDYaIgXZJKXsCxlzAXsgnjNgN) (seq (seq (ap i EjmBtGosNyHijykmKzmmEUiBOqxxSsKwnjeCJwIlnEyOtUtcGJAWtZiYHlAlrGt) (seq (seq (ap i aBUIuQqEnKcgAOPNjnOQJjwYNmByNaxz) (seq (seq (ap i nidgdISkavKuLKzcrthVJJHMijmmzWIPcZSjCXPxvugENSvGVmBWJJvcAZjsWoatoLgkJbHlfbiBehmLOXDjUSGbDOEHt) (seq (null) (null))) (seq (ap i aKUrkjvcLbjGgtSpiPRjCfvAQSjOEIfRyqUCRypOiGvQWZgqqIoyyWGsMRpyxwVAKjkweWVSxGbxZIGTjAqisw) (seq (null) (seq (ap i XwkRXlGuobJXOQk) (seq (null) (null))))))) (seq (ap i dNlovX) (seq (seq (ap i cSSrRAmfnnSpnDyhreFoJwfZZXgoEswYVsfalZdjCYqVwBBRiqDGmpDL) (seq (null) (null))) (seq (ap i SXOjXLLccUOImk) (seq (null) (seq (ap i CbYiYdCAIMAwGrnxnzvSgUy) (seq (null) (null))))))))) (seq (ap i VvUixBbfoXZBfBBeZGZFyCcFPiWFbqmbjDDggovlBIaolcOYvvnufeuQAPwRMM) (seq (seq (ap i PgKkrSKuTsjZAx) (seq (seq (ap i HyrpxyDdOYaPP) (seq (null) (null))) (seq (ap i jRWfIQQvhxfJQhgMabumIBDTzZeUFAYInrlacVebUGbsdZzkmaViWdVFWYFTewKjjipAHAMNvwjYqNeVTrLneXaWudAAjFaC) (seq (null) (seq (ap i ziCGIRoLZkDJvVdAtnOAnHplixyYTSpVWgvEfhTIghMmEyj) (seq (null) (null))))))) (seq (ap i bmthXzkbcu) (seq (seq (ap i YBbHhDpTqfXNFDUImrRNkYkWpkjZikDOIJOzdGBjPdcrKrAnIPOgadYmUCNekyNfULANKRkAyOHNCkbEoSmZKWmfyyyjZzbvR) (seq (null) (null))) (seq (ap i ikZeBynMChBHQIccxjxhNLDtEYOdZmKJpjQNfkyNKPe) (seq (null) (seq (ap i VSCJpviVCMCdriorJvLmaeXsDjyjxZdxrmZigkNShHMcHcVhiAlNnRGyuQxthyJxeb) (seq (null) (null))))))))))))) (seq (ap i bktkkeq) (seq (seq (ap i PbuY) (seq (seq (ap i QVcgZnfTPSohNNoQYdSMmFpYRoRLTVEfBgNChgomsZwdcjSmyeeoTHTuukZqnkeTPFN) (seq (seq (ap i jMdovJyATwpnhyEvRmIvJyvBeceGFIVUjiTWZRMjYjpMpJxIcwMFoAMMSVRXiKLE) (seq (seq (ap i acHWqIWaTyNDNN) (seq (null) (null))) (seq (ap i SnKRNJzYplRwahsUMkwjiiDFYRkAvuCxQqIqrCEsjzOqCwDhbFqwxIevZQLokjQzKyQrzcKQSjtDbxVrQKMRDeahSx) (seq (null) (null))))) (seq (ap i bjAaCIioMEEsLVhQEXfXcPxDzsvrCcoDcjkXtCqqyEZjoFnmWzxSTW) (seq (seq (ap i HYVtOErMsJWrEZPXhQJrLxBbVLvrymNUiByXRAwbLJSXjNlbjYyXZceQuECgmbHsAgf) (seq (null) (null))) (seq (ap i AqxHVFItsldkmmmFSmWidUkxMLRUfctNLOITFfwqzijmzcbEqGbgoxtvBfydweuRQigVWGJmdjdCvObVqPhxvfDoHMuH) (seq (null) (seq (ap i kXImhlcoyWBEuCoy) (seq (null) (null))))))))) (seq (ap i NBHImUIcqjsXWVpUnvFMULfQvAOhXYvntPEYNZNqCQkKhXCzAtiZTKwLnYYigedAqlAbYrQcFwPMsErhStOp) (seq (seq (ap i zNehwIhectqfMLEymvHNZhqDuulJKZwzmgxrU) (seq (seq (ap i mLXJMNwSkxidfbjHsjklCUxkMMDhxFH) (seq (null) (null))) (seq (ap i vGmzlybaMlbwsAuHXKVyZJbwdbjLNJcSkPkfzhLhyifiQbjVSuwWkAZtyaBuTeyLnwNKnmsSTHjvYJeggCwjSrXBMfTZ) (seq (null) (seq (ap i rvThQ) (seq (null) (null))))))) (seq (ap i obvINbyDXGKXRhPFIVhoQEfhKKpWgvrsTaYiiHPusyMMxYqJzDqFZfeeAQQkzaViQd) (seq (seq (ap i QzFAROinyJoaLQNxBhWRDpbupOyYRMvkUGofSOfZovTmiUPwPFstqMAeavWESC) (seq (null) (null))) (seq (ap i CTuaGvCjrsSECZHYrrXOyWqyJfNWsoLjvEOIVRSvOyxjAPZdFeOqsoEiunRqpkDzuwDqmIaphENVvfoOrHX) (seq (null) (seq (ap i grEXudLaLeRdimnEGGCnfXPOMnadwonLeMuGMNtACDUIpEQQ) (seq (null) (null))))))))))) (seq (ap i BzzMIciQNKXdumuUsZyOEChMuKqwWwMjzzOjCuXerOOCsqgT) (seq (seq (ap i BjRwpKNilLtNRLDSoubfovHqtNEnPFoxiAXfjdndPSzsZdWdNNcQEvBevkjaeYKmltbhyqCAxlPzZvBPPBp) (seq (seq (ap i QqMhIoynyqpABgxlqTqvFouZEsvJTMA) (seq (seq (ap i LKzqhZ) (seq (null) (null))) (seq (ap i ZOwpFnpiLXEwWuiscKJlKBryANnIUCquqAVZQ) (seq (null) (seq (ap i rmjcQAkXDPPgxxywlGEeIfeRePpCFQVKzZSCPGoFLaKGFo) (seq (null) (null))))))) (seq (ap i IwlQfBHouVTyczSRleKJouAAynLSKxmIudIRICS) (seq (seq (ap i LvqySDyGxQ) (seq (null) (null))) (seq (ap i aqAkrjTKQCQKYBqFHqdJHUmc) (seq (null) (seq (ap i eXDZeeCXZQh) (seq (null) (null))))))))) (seq (ap i MACDqlxfegttAGxAgspFcjQbjfJSzSjfpWmdwMEnxcFitkHdEmvqBpbPtWXEvpuXaChQKmWrDmlAguUbqysAIO) (seq (seq (ap i ZemZGXZSnjcqm) (seq (seq (ap i NOWvIjoXqHhXbViZWWdeIhBZfQsWgHKvCHemPaChUMDEcwWTmzDakRePVQGOaoAfZanhEstjyVQIPDJyFMJsolvvoWlr) (seq (null) (null))) (seq (ap i CuM) (seq (null) (seq (ap i CzeFTyAmYjwDsoBNTeSSEDeIGBmHoxljALqnJtJyGnYdGEDfXtJUwoUfvwywviESIzvsUPePsPcTVQLhRfvNvbBRuQEMsWauMhfu) (seq (null) (null))))))) (seq (ap i QSvfDYCjBfpnQAFeRLFcVTXznhWMUQIrNoWgxqWSjLbdMAVOTHlaABnuclCumYSFhLSlQYSNEbpxquLjZQjVqKrdwHK) (seq (seq (ap i DLBSeVuRhMHKzuQaAj) (seq (null) (null))) (seq (ap i dzNJGpXGdlpWAxOIdtKCJfVhIbIJGtfXulSGDnEtKwyGCqVwyKMf) (seq (null) (seq (ap i dBLDkJFEQVfiEHRyHKvCkWpMhyRiVBaVnqLwpQezggwwxnLzAqDngGzdSGDTMdWDZaMrUxQENkzyycqNBnFIbuBNpChcgm) (seq (null) (null))))))))))))))) (seq (ap i DfXYVxfzPuzmjPffeBeIUQmyffyWvCVGMPImztCwgvoVLcOvY) (seq (seq (ap i pufOFqBKOdZGZVbpGTlwEjhGFphUjxX) (seq (seq (ap i iAyOmRymbyyqosvrMSbTEtuxpkfXyntRgoDqCywkgZpyAuePbcIKTCqqtvffJqMxcLLsWUxXAQxciIiQFkaf) (seq (seq (ap i YisjtxoWdJglxqihPFNxADLjEbfkRxsawFlsjLGkHgderLwnUwhWYjtvvmeZXzCywkmFZCi) (seq (seq (ap i jIjicqDcwcDxfOHfTXKEeaYCpmnHRzdtfvPfRlNDSjTICexOffgNCmOrclNskIGxfSyqrKo) (seq (seq (ap i rIGdkddhfmMqYzKxVzkZGGoAcZtNrWh) (seq (null) (null))) (seq (ap i alchUDFOEkgagItxUzvYjwvSZsRCNxwgwXkPobijxCnuGQJRfvTvzZoEdcqREAUzmJJcALyxRxjpHTSFvXplZZbqne) (seq (null) (null))))) (seq (ap i ohxWQnjCgTFlLJVkLoawTrdmfNlwyoFy) (seq (seq (ap i kIalBTKnPZteoOPlkvOCivxQlgBeIeVNMIZWsYtHSvFcFHFv) (seq (null) (null))) (seq (ap i FIrsuAmPonQwaeDJZytNeDpHmjhkzNhRjdpMPGmGgVgfdszEdXoCOyMILfGZG) (seq (null) (seq (ap i BztDklApYgIohDKhRGcV) (seq (null) (null))))))))) (seq (ap i oKFMloUHkVexDQNpmXWYWRaUDdBqCBoSAQFtKoDhYbDXnHSoNOCHNMqaIkUknvNWdyRmtVlbjmPAyB) (seq (seq (ap i nLdnMqKqKDJmWmlxpvtAoXuuxPQbwgabXobggVVSuIcBosDYRfSbprrEySOGftTVdsfgvGmh) (seq (seq (ap i xvuOGLIJwoitJeFodkkmNtPkpnjXUtLvuWVlKgkgvK) (seq (null) (null))) (seq (ap i oUWgdGqAoyg) (seq (null) (seq (ap i HxZzrErIlCfXHsiMgdBsBKkrtXVZwttzeniwOruWfFvOOGYnfVSzabsEzCNRocBbtsKSjofn) (seq (null) (null))))))) (seq (ap i IRFYcDEEu) (seq (seq (ap i XygweznLSlSBCEtHmzNUcDWpVggvnLWptDrUsaHhHxTuYf) (seq (null) (null))) (seq (ap i KrdLyDBRehYRhCgjffsmDCytMVSTExrMbcjwrZzvHHLQIeqBHTiY) (seq (null) (seq (ap i HfZkrqnTEAsdSyLnlgnORDpTRzqxTxYQhRZECbHZRCIhebfmKqCRDrhBXlflJfmHzbD) (seq (null) (null))))))))))) (seq (ap i csevrGp) (seq (seq (ap i lXTAYqXzpUCePVyx) (seq (seq (ap i XXRXVQdrVShLMFvROVPDIpGQLHXxtyzyiGyWXvKZedLQZBeGZmuLKgEOrhIlztYOigTLSRIKcpwnoOJ) (seq (seq (ap i ImYbAsolYvigddwIpDIaWOZcDwBMVmKArfUGjFBunCszlsbXPqroSlyyEteMwmJbaiOWTkTxYriyA) (seq (null) (null))) (seq (ap i WbuGvRmxw) (seq (null) (seq (ap i fwkBiKeNTFsHBvXESqRMWBCdACKmBmoyLlXsCdXkBgsUtdNdTBzKwQMeqpciKblZoCmILpjNIZiLRykBQYPmaKpwrUsVoEsxJT) (seq (null) (null))))))) (seq (ap i BLXDxkErQugoVqkaWqELGmyXYuhFOZwoy) (seq (seq (ap i xkAnZeyAbbSbnDefDIKVgPkOacsoTgNGAsALtnEd) (seq (null) (null))) (seq (ap i moxsqFIcHdbwKKhsMknYmkfdgtnqDYnCmHNMQfqHVmtMBIdLxWyMKNZIMCMzzcnFhKskyEHT) (seq (null) (seq (ap i APzthKVcpTznUwwNCNVMBliRvQn) (seq (null) (null))))))))) (seq (ap i NBFXx) (seq (seq (ap i HzlORcvWPzDG) (seq (seq (ap i TmnTzupvcjECTOjjPVTJqLlXZzSkgHtmtAoiMZgVJZIsGC) (seq (null) (null))) (seq (ap i NzssnTmiskMlIBHfvdXCAfntMyMKeFhtaqJlPMtijrVXVoqAPMpZulOIHwbpyUfeDWcUwo) (seq (null) (seq (ap i HSlfQtFcTYJpsLVMSzZzoeHDPjyPKKzSXQQRtJdJyfhj) (seq (null) (null))))))) (seq (ap i UZjrUVxChB) (seq (seq (ap i BHrxAeSSvmNcZZOkEBlzkQloLKRsqLRUWNToOIiEIORcOQGlZBYcCFVVddOIVICcRxEaSMeeiX) (seq (null) (null))) (seq (ap i trUvUsfbtnUeISCEfGtgsYYWBnXA) (seq (null) (seq (ap i vuRuVDXMULZkOgWoEmqoNVxajAvPjKnJqLeFfSzlNRFYrCXgKPUReNBpmhivxFcQfolqGFWWfCoGVs) (seq (null) (null))))))))))))) (seq (ap i SUcqPgwaRvsErccQxOLxYFHPkwMMMvueVUhbznWPCibAfqrBiOfeFdHqsXLZ) (seq (seq (ap i OgvXlRaWEiRbCAqQCoZcLfcAHbSiscEtvaCESaPxHpAAsuEYqRRBMmAFyIXhcIsEJSAphtKPSPAHjrGvYJLCjjVqbXWrJZKudb) (seq (seq (ap i xQwmbWAYeyDxPdRYFVjCNxYODo) (seq (seq (ap i FiBTSHbUVXaqdpgwbggFpIOKMhSsHCHcTpwHNdYnrkaPHTcJwDAzkhfNTaPFwruZVkuyamtmyOCGLoPSlSoGZEtGeDwvqmnzo) (seq (seq (ap i VJXBMgrPuVvk) (seq (null) (null))) (seq (ap i qozObeJwltgkibzHoWWxqzVJKmtbFShLdlGBNhHsUBCeRqxYTkCGPXutIIFBxfyDhrgNTTBGxEwhtelyB) (seq (null) (null))))) (seq (ap i NehfhYQgaYpFlzM) (seq (seq (ap i PCKKquEERGKmyLWXlWmHgzfoJCLBEstquVY) (seq (null) (null))) (seq (ap i WQFRgLGiLMJxgVoXlYYZrifXRI) (seq (null) (seq (ap i WdvZPESWX) (seq (null) (null))))))))) (seq (ap i MdHDGBGUjpAzfJIjscnSWqBAokkPvyaTFVhzLceBcsJrQvxynysEgegGrfbxTDFrHHNsdbhNKNGRyxspbpx) (seq (seq (ap i pxAdRYeTvIubWFovjfqTfICfUZFrxKnWrrl) (seq (seq (ap i DuGmVmdJQtpGaNdOVRoaRtpaZWRkRTQNTxfejzcrsaEMPmkfYlLEAUopxCrAkwmlhbnxyBDoKaQYHlbaXGgtfrA) (seq (null) (null))) (seq (ap i noxfvbqOHZJDeKzlUcDPQhUFmJLvVpI) (seq (null) (seq (ap i grWGfFPvMPHHGwoNkJtZiOouPDaTyPxDSFwyfXugZhW) (seq (null) (null))))))) (seq (ap i psANbaoUdDjTWqZsKREjuBvDPdMVfJwbfuRH) (seq (seq (ap i rFyxHQDwwbvFpUACepTrBRNOCVJNVzlxbdfqZIXcfLDvOQEYMpBvDarwUKYYUNyzRiHeplVEdJyaTDTZY) (seq (null) (null))) (seq (ap i xkhBEcnByvzPGxDqMafxBXPZOGMfEmtQV) (seq (null) (seq (ap i JhBsvVvVrYkbgrVuRfSOTXdsaSJoLofNoojzPNpagGxHdJEsZtwoHGAKuMbGsWDGHUwpAlfLAAFNhVFdpQgLBIxPW) (seq (null) (null))))))))))) (seq (ap i LOmnoWGWMXjhIVTTMWolXCSGJPnYSedrCctxbfLFKCfQEvhEybFzVhRIHXLhkOsUyGHXXFsSnxyLObxoPzZXwKDrRltnYm) (seq (seq (ap i iABlOhJhsCmVDIKKIAMnQqjxEGEUsWOpOAmsLlTxLDTjytsUbkFbCnqwHNbuMHIELwtWdfwmSEdFSdCRKlsoAEBJAQNkriYtPu) (seq (seq (ap i HwasAraFPALQHFzoxYkRfvUABOCFErQiKMEs) (seq (seq (ap i mRHEraRkMyCXJcYyrJgXdFPnxDgRtOxwYvkMkFbRZfiIl) (seq (null) (null))) (seq (ap i IsBGguJRCfQsoIiQdiemXSnfkuspZCFNPtBpBGlEfFd) (seq (null) (seq (ap i IpxrpPQGfWSJjFkkiUpcxRDXepzsaBfvZCrfcvhhUrXBclJoBueyX) (seq (null) (null))))))) (seq (ap i rmzdwEHbQFlGRKGEByirYryrteRqwACeeEwDKyEYklhV) (seq (seq (ap i OeldmpOCNezuIXmokjoANWtthfyVwq) (seq (null) (null))) (seq (ap i PagVfKwSGDYPUklwtBtgznaYx) (seq (null) (seq (ap i vEcWRBmikzBUCaHwcKSteUmmjGgMqNvyrmyGMMaWCUTDNwGsnOOVXQxZS) (seq (null) (null))))))))) (seq (ap i JmHfqDXwlzbOiG) (seq (seq (ap i SJUGfqNJtmbNWPIibScQOEzQpNirpnbYeXYAbGfVHpUUghikRbZVVeqjOgcpK) (seq (seq (ap i WqIxZLOWwcYHVusNHwVaPKYBdn) (seq (null) (null))) (seq (ap i AUDNpB) (seq (null) (seq (ap i wZUNCShNNbvUTmajaekVQTVUKOukKaKXZokqFUwrf) (seq (null) (null))))))) (seq (ap i gbAwLiZUkhfTjkmLBBbACdZFcEfCKyMxVrfiQnCtCSowwKzeXQTreyKXkNZBywRDixEhuloIWbqKIrwYxtrvAinGL) (seq (seq (ap i LSmAayqBgrXcYLMlVlNALYnkYZQZrkdVuPXBUWhOjNJoRVraukszOCDApbqaLQFjRwTheZZXLVzpuYkpIeKRHUiOqAlN) (seq (null) (null))) (seq (ap i uEDVKQCdFnPfjKrVgiIMIUzMCEEnxobCxbIegqqoUWHXVrMlNwveantTlNYHoVDaWHqsEEqZGOZzpRUudTPRkMh) (seq (null) (seq (ap i HLyLYlQTJYLQTEqwKZOqtJQKbEgqFTPkjncbjGemmhVOytUhbeiUrNwykgJAiXKvmyJl) (seq (null) (null))))))))))))))))) (seq (ap i sMNxXwjCaxCHcqbTwlCGuueTthVzcesBPfkPQzlwt) (seq (seq (ap i LzJiaxcaGusvYpaWSuFbdTknGmpoMqZXlsTAwAzSqNC) (seq (seq (ap i ihdOXgNGzcNnoCVcyGunMYkWmibhXVAPguyTsea) (seq (seq (ap i RTxDCGVsanWLlPdTfXZQlbGuoDJVsWRXWFJpvkOhnEJrtgAnDIFwFvlapYfnWdSGKFNxvryaILWB) (seq (seq (ap i hUjaHEseOMAUbhIkacUdoOXWZkMfLSQzXCXdoIJxjfxpXpuomSOUpTWeAOQMftuYtWKN) (seq (seq (ap i uZzgzADJwRNXtkRCSTKBcjkxKsxlPRGPIuaoEDLpfczHoCd) (seq (seq (ap i xLfygpQYGoEekiBLAINDIIbxQdFBaLiNqCTL) (seq (null) (null))) (seq (ap i SugAWrTKtgRzUmhQsnPARCGd) (seq (null) (null))))) (seq (ap i WFvaFVPAJFgAhLmHsggFABOFhRxhFEPivGaAOIgcgRvvrJQurlsMNINuMSAHGggmtfvKRMATk) (seq (seq (ap i uLttIxeMAWUXVd) (seq (null) (null))) (seq (ap i nriJZKXBjpsEcWDRFYRMjvUmkexFsoOCmIimDUxzRUgmBqumlPEkJsdByePYRIHiGkaPs) (seq (null) (seq (ap i MjtKtSjcaFJlsMznhKpubvjPayhTwhZuozFSGeKZWWjDcnXNoaJpUjcIj) (seq (null) (null))))))))) (seq (ap i OTWohwXyAmAguBXmqpasDKgMTgIerlSrzWZYGondmJSXbjyFWBfaHUvnpoSyjdwltSGF) (seq (seq (ap i msbfaxiSizctYFdsTmZ) (seq (seq (ap i kmvpyauUvCjAauVvxxWjIQgkxrTBfFYpPjltmsTOmgoGjTNyWJQiOl) (seq (null) (null))) (seq (ap i pgXGfMzpPYy) (seq (null) (seq (ap i DIxLxdHvJDid) (seq (null) (null))))))) (seq (ap i dhk) (seq (seq (ap i ifIMxXZsQxPlRuDfkUAAvZIZeHiTElxmWToF) (seq (null) (null))) (seq (ap i vGEKUfrKbsZBxxHSYFRZwnyQwXZHTBrXHFbTeBmjcfGrFrgKrWBVsbFPBfDJ) (seq (null) (seq (ap i BVaSljmMmsTntaAlcBhPtKDHDiEgqttfumjUpYanKd) (seq (null) (null))))))))))) (seq (ap i biVuhQcPOtmoZqWXbSguQcHTaUdFRWirMOegoMdaqlQIUOTmHqpKnQnMol) (seq (seq (ap i IWgnkIMFikdPNNZBlZxGVjGnHbRgXlJswEIzggPxsGSAHujfQagBLAXMGNcBzjUDsd) (seq (seq (ap i kTYXnzaVZVCpCGrywAGzkrSuXJcOjZHoUXGaXyoekJqoksDwyshbmMRHLvkQPNrjDyhXKvAylJZNpaWRJMFSMfJLIRR) (seq (seq (ap i xKkPIPGoaCAoNIsOMXTSvcgJErtavWcGZvueoeQbMLgAosSMbOExXgrrFTqCgYWpbISiDFIvnhXeVZAwyoMTi) (seq (null) (null))) (seq (ap i dengDnkfIEDxIlAyqlpxKUfLZFnTasCINmxhoCBMGdkznSFMuAPMFibVDdjmSJbzdxGplYsspMVXmKzEcoodEhwwkitQcpEID) (seq (null) (seq (ap i VwGJKiULtsEFMizhKanzinxLYEaDjCwXUkgAWtFtywEKJiElFRBkDBrXJwgUUDzlJzMUyA) (seq (null) (null))))))) (seq (ap i rb) (seq (seq (ap i wimOmuHKSkfElhLtihbxoCycKZOmurOQsnktOhwNidyPjPZGaujEgilEjlspDBIkKfnbpedGsGqufqbGOWvONjSdAfj) (seq (null) (null))) (seq (ap i FabnNkFBCWkvXLolKRPMPpnlwXUbfDLDJxqaRlnQeKpqrGvgAenOelqmhvjMdCZpnIvPTWXDBOYkrnasXihWddrHuiEnGHfiW) (seq (null) (seq (ap i ggGYngAseZIEBUaBHnTFqplYUuRcoWdzUbKdSzCxDiihaYrsDVctcTTNtCtKNQinIBngriBUFChLrhLZ) (seq (null) (null))))))))) (seq (ap i EJkhBAkcmCpKdm) (seq (seq (ap i xWGIGqfcBEUNYcJbnsDAkktLtbqUDyvuwnRyq) (seq (seq (ap i OAQdbGczFeDzAoBhfECPTwnpAd) (seq (null) (null))) (seq (ap i drTxZJkXYEYJYmS) (seq (null) (seq (ap i seGvFuuKxbYUgbl) (seq (null) (null))))))) (seq (ap i nIirTHEOkwMuSJpmsFdUVnZYktIXePGu) (seq (seq (ap i oYYotWONbTPlTddcurQvSXQpfhWfZjnFLbCKYZuWNzPsRfZMRCqHq) (seq (null) (null))) (seq (ap i cQBKNiXQJZsVDt) (seq (null) (seq (ap i gkiaAmUUGJi) (seq (null) (null))))))))))))) (seq (ap i aaEYvlKMTRlDcPfuRbnbxSwSzacRWjvNapLivusvLLlHg) (seq (seq (ap i bKBvx) (seq (seq (ap i Hd) (seq (seq (ap i JqygMKDMUgnfwifGdNuMJqqpqveUjB) (seq (seq (ap i dMf) (seq (null) (null))) (seq (ap i RznTDXdzoiXwKOwpcbguRctPmWAIKyB) (seq (null) (null))))) (seq (ap i JmBwiysNPpWeIUMqnMHbjqucF) (seq (seq (ap i ANFyt) (seq (null) (null))) (seq (ap i mdfbQnbqYfFjebHIUvEXoMfnsVrYW) (seq (null) (seq (ap i vrOvmsyGHyUwNCIrxYbBkTEQwsPYMkMWdsSwZlLVKzVwDzAAljsOBCBVdiYKTQ) (seq (null) (null))))))))) (seq (ap i MMHcdWGWkxhgTWzSjioSGSpKGCqYrijHNTAjbGHnqLeDGRvRFtIAKyrkVkGJJOIXKoYsoRdPnVTCMnmYQyr) (seq (seq (ap i ysLbDyeycBxiUWgHBtVAgjSfmUkPuyQTzBydRpDWOYjwdzloACUttSgbAKvjmT) (seq (seq (ap i uBAVwqbaLIKQXNvVxkiEdSQJOORynJrLXAQZdElqLCCUEgNryqnkAkrxNEJWWwuFuqyUJSBIhMtPbjETcpguOiYIlVRhNzOxX) (seq (null) (null))) (seq (ap i DBhvGBgXJraMVwGvStjayUPnNoWZyvxXIYnHnCtfLJcdldeAVzolZqVYCYkZMvJPcUBQsHiXlTRSRsNYrckltbrgFdswLpwVUg) (seq (null) (seq (ap i fxPgRsLyhCEPWQUQsQoeQYqbuglUoIBTMQAylUjpsJhbBRXDI) (seq (null) (null))))))) (seq (ap i TNndncdQJGWwWzsXtugNLrIhMlWpYggsKEPrWmxzFGkmhlhbhAZZRKUZDjcGlGsPgHMDfiZQfaEpwrhJFHpDXvOLgpwbxLR) (seq (seq (ap i COqeRmoonWCzSGnsleXWiEHnvgqgyRfSEsMUTprqqTvhHLEDPxPikZGnfr) (seq (null) (null))) (seq (ap i KShZLSganpChGHoGAsfNJaAVJuJmpi) (seq (null) (seq (ap i gHCsetzeSOQCDWmGI) (seq (null) (null))))))))))) (seq (ap i kqUkRpLARESKoEaTowJJHrbzEnbbsxBGYcRqwKKMOZMXrUReEuMNOERkxH) (seq (seq (ap i tvBOmpXxvBqBXEMrOYwdUqGWEikPIu) (seq (seq (ap i xunyaffSCMOBglGqAMpOSWjBBROKdmHYULNKTeeRZCScHPBebvnjnMLkzLLP) (seq (seq (ap i kuKbW) (seq (null) (null))) (seq (ap i CPcGkRKwnildxMHkvXVKMADDjCtiOgMhNwRLYlDXXkNCFYCAAYGTnQRfjgghGuKSCIMofYcxAKYsREPRQOMGUtOovKuuu) (seq (null) (seq (ap i qjDtEpEhlhCzhHVPkDQuojhfWBbcpTLrXSGrzCIt) (seq (null) (null))))))) (seq (ap i IMUGDfDXcDkegJL) (seq (seq (ap i QwiDEBuDTrLUqYyFNbUBhyIErTOJFgiOovaLrUQwuzsXfXDrPyk) (seq (null) (null))) (seq (ap i ZgshdFNXIijVJRwLdRBITPiCiCNOqUlAsZDFbdXXTJvTnwUzYujeBUMivWEjVHGMFsxNkdsJJOeKauFGCWmeYcnivvpADKbZj) (seq (null) (seq (ap i GPeeDZzdMbSJyBZuzFYN) (seq (null) (null))))))))) (seq (ap i iTJXqNYjBwMdDcNijCSVfpgeFZqokojQHUuHZO) (seq (seq (ap i YvQjGEujPfOmaDiNXCSOFiMfmuZuDcXsCyHDHPfayHsfjSoprg) (seq (seq (ap i RGnnXWIbcQDoMiXXTYSrpWxuSNzjXN) (seq (null) (null))) (seq (ap i hUhyOFtaLrHXTFjXdPLLzuhOivORySeOktloSUUozpcSRWXYbAnMhMYijadAaVlwAdhHNahGICvEUnsBECJyIlJta) (seq (null) (seq (ap i YLsrOzaEGzjjICztbjFSxKQDpTRKcuSwtWDGZFDzqGrhWJysrbucfvUXUcRJTPPUvUrECaBrhXkahBdvLRGOdJklM) (seq (null) (null))))))) (seq (ap i WxXggxBqXrjkgzRutWwfdr) (seq (seq (ap i bMhxmXYBtebRptMjPJsYvmIfcOfnCaiStduXQucNHFHeRfIzbGStKhvCWrtTJzZxSmtWnVnAmkTdUzN) (seq (null) (null))) (seq (ap i adJafIFuABdVsdCOIsnGbFQttYNbXogaugHCkBojNNKkUbMuBHmadfDoPYsPDqimIJVjisHb) (seq (null) (seq (ap i jABTikZjsbQxKiXIKlBILuKeaBIuSQHDaPSb) (seq (null) (null))))))))))))))) (seq (ap i oiOnfyLksOvMOxxa) (seq (seq (ap i NTrrXvkeNvDNBhKpGbqSnDznODjTnzRgliIipXrvZLkAXfJ) (seq (seq (ap i ghGDqkuKNXcXcRnmEvgkhhzYAhgTUZCzQeTi) (seq (seq (ap i QXMYgmxNxgTNPuaocSjoxFwlWHwwMEFJrUsHCYvXRdLsjTiIZWjFsZ) (seq (seq (ap i lzTBjTYFXsvbyGBdkVmcRmZVPdvlbzpTyoXVEZYTLNROjHxYADLZueDTLTNjCXrsVDchiMWtOajAe) (seq (seq (ap i LvvTMZwTUtpPuRCDbKshjlfYFRp) (seq (null) (null))) (seq (ap i EtdIRzqDqOaNmShaFVLXAfJPvmzEuFvRbWSPbpInsClNZPdunGCfbcLqlYgcZ) (seq (null) (null))))) (seq (ap i uadTWJYCOMyKG) (seq (seq (ap i pdPlpibVzdaehDWyTZKjGCxotYqelwcAwogrPaIrqG) (seq (null) (null))) (seq (ap i sfEqMsYXJaMEbsDLmUSVrjkGjCrieyimrdRNdAUUYZHDFmWnPmdwTLimEZDFFbpTTxULPyJEjnvj) (seq (null) (seq (ap i yjXmwzLCiQAWwrbPyllgtDehLBKEoMhpwWkJLSkHx) (seq (null) (null))))))))) (seq (ap i lQWMwmb) (seq (seq (ap i YKeoPqgtNHYGtqSQvpnhXGTqAUmMJiLUXcHjjCvsjxiRhcnMjaLOvsNEZGdWZeKa) (seq (seq (ap i NFfrLtZEuKNhWGDvPJIYOINnZlwCNbOmCZWnLwiAzXUrnSZraywyQVOMZYjQFV) (seq (null) (null))) (seq (ap i zWDUAQhADLaWdeJcgUeHdQNHRsNPzkOpcMqepLZGzDiyPd) (seq (null) (seq (ap i fmEBavLhNAJAQgIcbpLHsVZouTDriHRMfLbtQliFwERLYMNxphKfJSwvXULWOZIHgDFLyRfZwBJqQHlYLkNQxndchZjLipOerEEG) (seq (null) (null))))))) (seq (ap i WlowGgZuvKWSAdObWiwAoVuZMkgxBKsyyYviVQuMPtQWUJwozp) (seq (seq (ap i YIbsmuKhYQldrhegmgLRFboSppXUhOloSMFyMdxwUAEfbIZBUEJiXyFGMQESfRDXuTyEGtdjnQickZ) (seq (null) (null))) (seq (ap i XxZdsIiDLFGxKoTrwZPdvJyhUlfSiuRKtCEehWRbIWbDGwlslGKgJbuoVyqlWgpKhxVVXmAYsbGRLTHHjpXYdPCcLYetCgPdGY) (seq (null) (seq (ap i LvAwozBywpFjZORrgbshUoaFHJMZgPERLqEsDNRNXYUlwZpRczzthLFNVgPWrBFeBdiLzfEirmXCJlRALbIUNDhZVRTVa) (seq (null) (null))))))))))) (seq (ap i fOayAXjaNAqQYGUEOjIymvUHYiiGfLfAXmZUhJLBAZTKImckONXYwyDPOzKvfefyScOe) (seq (seq (ap i EYoUbGHkMgxclNWAGgyNDgMkEVtjNgaphzmjpmUojupYWrCxUCJjauTFhJqSkvOxCRhNfboIvbGolVfIihoytYkzC) (seq (seq (ap i IImzozDPseqVcVXmhRGdaHNdu) (seq (seq (ap i LQWiNn) (seq (null) (null))) (seq (ap i AhkblE) (seq (null) (seq (ap i gObxYusaZctcRDyagRxOVKkjLvCqLIVHUESdPgWoeXnonLQKGyvLCpUgr) (seq (null) (null))))))) (seq (ap i nFXFzjxtVhOogNyFafsoKYBcs) (seq (seq (ap i LMmecLCGaKggBClkqCFteSLqhXfUHj) (seq (null) (null))) (seq (ap i ZMYUxmDmFSzInNlYhlmjBQwjlsOvFUzStLwjxOtFHnZexF) (seq (null) (seq (ap i xjBYJnMSGnjLkfnHQkLyGbIiYeJvgfHKpifXvrXFPHWJaCoLCWfOZU) (seq (null) (null))))))))) (seq (ap i FEgnuBMjBjhsAXWlzLNLkQSXthdaeNljUmN) (seq (seq (ap i ldNZpNcZUFItMTxSCuCLixavlFBqiUHrovHxLmEJpzUJjPDBrJPhIEZaekUSOoUxokfYBXyzgRuHRAHdRpueJXCsZsjmd) (seq (seq (ap i VfZFJrAvbWGYDXkrayfWcuUGBSu) (seq (null) (null))) (seq (ap i XkMSMmIDKzIKJfUXDhOCdrH) (seq (null) (seq (ap i QHrUxVEaWtYaJTuGGkPewYZazealMOZrhCSBdpTJUXWSApcsLKqmGWjSwYdCaLWGnKyBXyhLuzgLmgkqElZNCel) (seq (null) (null))))))) (seq (ap i SDJyXWHAnfQNWAZrIoYWrIBKsdxStTonSQACfJFOyOKiNPyU) (seq (seq (ap i fEwpKVbzRUQZCIWKuKiWakwsaJdqlPsSlTEBezkMHypLRpAVceH) (seq (null) (null))) (seq (ap i vDcKptAjXnGwbLlwnAKdNqWCNtaYmLyApTNdvEKn) (seq (null) (seq (ap i KsCjegGfvzgICcEpBEuiHSqgheqc) (seq (null) (null))))))))))))) (seq (ap i gvJZjXigrKXCQUScIsatJJEHGNocnjWkrDPtaUGmErTplbMS) (seq (seq (ap i OYljLWASTsVMwijLJDUWFcSNyBfxqLLdGTrSLoXkbpBqaiHFQCJYOdbHxygQR) (seq (seq (ap i JFMRRMhpyThqajOSboCFzzNACHsVzrlHqgsekiyQmVZNUGdnYe) (seq (seq (ap i clmQfBJYlVpTeyWiWnKYIcNwbZUqafpqTYuoiWQhZhProNpmReDCOpEOpyNwySFNPTzFBHeowmKbReIFYfsZzc) (seq (seq (ap i bspuYATGGELtGzpYHIoi) (seq (null) (null))) (seq (ap i zpsryTTqlGIvxygDuwcGqIfgDBRxaHWiiBbXxTzccZ) (seq (null) (seq (ap i rponXxNetwgVdfkJVsPzbpzhWUqyPslkzqXFgHUIDGsyqKSfBHWJUiObfHlzyMRXmdRDKJzNWsCOi) (seq (null) (null))))))) (seq (ap i kxSKOaceGZUjtXINPUNjGdxOhezamoHJDaEJoTUwPJRxnTadyRidZzorhTV) (seq (seq (ap i GKqCTUFntYTzONOwOApsYKkzjYiNPoXvfnJLEKtohbpopEbyk) (seq (null) (null))) (seq (ap i IIBvyMbxhDkTlNPFNIljuTOkmOXzZYNdKtdFbe) (seq (null) (seq (ap i LlDplQpIZmdyeQscanDwqVMTzsAvfFygiUF) (seq (null) (null))))))))) (seq (ap i lBTnRDnErCFxaDOjJuMGROYrzBwFhRA) (seq (seq (ap i PmGpePdtnrUvXufjJUokaCCMrLIBNjcLCsAedDPdxbVyLBuf) (seq (seq (ap i JUNgqofPJOnuOhZGQjPDFTugTWXiOagfcbeiPNaioTPPwKNpftCgIIfDTfxzVuyXeJNRKLHkEcvKBoaYkjiwXBVk) (seq (null) (null))) (seq (ap i bkqZVXgTjpEeaiErasYKfRBKthRyXhEjKDvcJTPI) (seq (null) (seq (ap i zUjakCbOFWKfFAPEhZdqUi) (seq (null) (null))))))) (seq (ap i nNeGJKtlEWDAVNhUMUVHdSOXqzgKBvAdgEyxvYbAfVRhS) (seq (seq (ap i UiiDcdngyuSQpATdtGzVsJUubXVvtSaMWgdsGSxjrVvopJoLxbhGDnoTZDWZwyifjpoPirgnIufkilOY) (seq (null) (null))) (seq (ap i MkNiQobCAszVjZotnBqnbAueXGtQrFuRFpRDGakYCXRnD) (seq (null) (seq (ap i sGRGvjsUGXQqrlpunQrsUCPdRrFNqjaikKZWsBui) (seq (null) (null))))))))))) (seq (ap i oxpKDPQfPqnyxhQunVGemKQuIspXHECKJiHkIbJUWokcclkFjaLtxQwmb) (seq (seq (ap i WugoIwyaOVpBAjVampGLiAdMfAlYcrSTkBCLZFLqjorrGOLxFFYuoDecOXtEOpPHLcIYQzLUKgGVSgEnBarwraovcazURtKld) (seq (seq (ap i wCOOjibKyfmGXFHNkoO) (seq (seq (ap i lUAOwJaimwiTIJbLoxxKgxyevXClXnDrsZOWDQBjimNbdTrgWeHWNqrZkcjpctaQfyESQYWRfIpcdnepHigXsPQVrtWNjvUXU) (seq (null) (null))) (seq (ap i EabhjOBmnEoubNYINsmjmBnBxpjkZTciKhheb) (seq (null) (seq (ap i CGywOoQzqBalbjPZJcdCFmMoyTOBURVSJCkyYIbbhqJUfSeVcvzitGbfKLZZNZoRCpNiSV) (seq (null) (null))))))) (seq (ap i hdkWPFzYlcAfveeHAeSMmCN) (seq (seq (ap i tlaBkDlLuaresHtRRSctGkOnVbkFkhQbKEXHzovchpQoiEFlKZcChYeQSB) (seq (null) (null))) (seq (ap i QOzbvWUyIxKgwfOcK) (seq (null) (seq (ap i dxeQMbBFuEODBpBLCEnHPpXcMIYCxjgxQKFOxQEBaXtiUraOtDjiuyCuSJKcBRbKa) (seq (null) (null))))))))) (seq (ap i mkvntnAgPjOieTJnwJZbhhDw) (seq (seq (ap i ucHjTcLFhNCLZIrIMyQ) (seq (seq (ap i nEyhxerfWqHGddMmVOPuVbAIagdhEIkMFdCzYMJQrYrWFMuqWEoZMKFTmBkNnqAOQXvlJEOy) (seq (null) (null))) (seq (ap i QFQsNgzRrohiPvy) (seq (null) (seq (ap i wzJukMOBDAfBoDXbBtOqXogIqGsjJzvyBIAfGfIoJKUZHbFzymjOKxGCizhPpNAQLmjflsJrjWuFXNZYVbCThxNzUoalkAgHLhTg) (seq (null) (null))))))) (seq (ap i criEFhLqrqzUTCPXzhJvTmqWYZKdzSrenbTfnDmHa) (seq (seq (ap i IJlkhoHTKirmIoryjujGINZomuVXjYxHWYuqMpSpXfLhnmGvvSBrlsxZzJDFewp) (seq (null) (null))) (seq (ap i SFgcjQlnomXJSnzSDplKcbmSOelyNoQhmvBLrzkmlmRNXAaTYgBVAn) (seq (null) (seq (ap i VJtRCbRSW) (seq (null) (null))))))))))))))))))))))) (seq (ap i RQfoMLPYuAWIXCIBpdPRQpcxiCJlARqOznawxTmRuyUEfFsByVhcGRugWvtGifSgA) (seq (seq (ap i uplekAi) (seq (seq (ap i BLObDVOyjHiIFVGIOiAVutXrRHBqlmwaRKNSXtDTYPBHKMYBcKjAdYMBKAXUsgxuQTyJIdN) (seq (seq (ap i QIMmbyeswgISsbWLWdEIHpGbfwCjZlODcEEYSuVqnrDcUfforSHsagVNzpSfhjSP) (seq (seq (ap i VqnUgwvqLTedfvCmQDQjhIDfGMAbUVtpOmEFTkTmZQrZPDoQjNFp) (seq (seq (ap i OinQguVJijFqwoHeeBDDVESjVLlprMckZlNGKkwvidPcZenEBNMwDlgqVCXtwZscbUedLINDabTSgclGwp) (seq (seq (ap i dvJdTlzPigaPhzugTmuyucWxuexaQprBSevTXVRLWmhh) (seq (seq (ap i ePBWfLWCbPudDcWraNotWcFtWRygIhwtujeJnnvw) (seq (seq (ap i nOjvGrslSqAymALXhyyXGvTIKmDjYrIXiTXATnWsPgYlMlY) (seq (seq (ap i GZvdZiQoLMGLRkiqpsUcgxVoyAGXPKoGfDBDIoFKNtlZ) (seq (null) (null))) (seq (ap i LuaGjexybEZOzqiEpHvNbnUYGfvmSUudCxWFXHWsKNntSzObScfonORzR) (seq (null) (null))))) (seq (ap i LtUDLRiIEcsIuYRCVfsDRnEkPiurgjihGfAPryJEdPJChcwpzNFvWOKcUREBKwcxHp) (seq (seq (ap i twDEUTWkyHWhGtgOCVsGpJPjpFvXAVQuyIxrvVBePlfRtjhpqinsAeWcumLSiahHXDQbpXRlYpniqIHFdgJzUNpPFDmVxGhYpDWd) (seq (null) (null))) (seq (ap i euPztRCSkbvqrBqKdSYUHYZMcyyIEBrmfCfQlEzNxnwSBoVuApvVFIcIEScVQrcoSrXuphzeqHSkw) (seq (null) (seq (ap i POnzzXDhkMxVoQU) (seq (null) (null))))))))) (seq (ap i AqeXWeEftAPpdkXtGsjusRMhTvvPqhUMfMfeTfpTZcOLMIbwlCFkFzQQ) (seq (seq (ap i HlhCNYYttRrwACxoBH) (seq (seq (ap i tERdoMnWFWLqxQhG) (seq (null) (null))) (seq (ap i KglBFyvjxvdbXuhgYvvVqCflAmrSknRzATdQwSmrqHGIfJkonIGxWJRNHQKHXWTyWPiLONoIWsYgyLuhtRXP) (seq (null) (seq (ap i TOaGQBQoIgrhQUvbuQUfvNlsKZSRqIvpJkdgZREUYDJLBMgs) (seq (null) (null))))))) (seq (ap i PHFvM) (seq (seq (ap i WmdRhcuAaTL) (seq (null) (null))) (seq (ap i qrfKevCZDzaPSTBPlaeNQaDflGGdWMDRvvYzXtTZoQaPIUvlHcnshPgNZLuSUmIPfzCiU) (seq (null) (seq (ap i YLlhFlNEBPEUoHQ) (seq (null) (null))))))))))) (seq (ap i cFsNDAEbvdco) (seq (seq (ap i hePdRTzKfqEZgyhmvUURTtqoqKmWMIuDdwtYYvyGeoMIpUHfYtmbltBWCLKrHdZZEUhhUTLbRuxjqIrkQdaijZcFGFQlsqwblheg) (seq (seq (ap i BbJsBJnPbTYfexWaAceuJSQcIRUevyoOMSPOGECDnw) (seq (seq (ap i LPhfPdOxjYUatNubRFLBJXBMPMdKkSLgNhAgjXYcOfzyIAHlBxGBvY) (seq (null) (null))) (seq (ap i JuhtYhtPTIyAlkTgTAzbtarUeyBLHfeQLvTMptXKMrEIioxVP) (seq (null) (seq (ap i LpdkQJpkBRE) (seq (null) (null))))))) (seq (ap i rlNYHRBeZmiCWuraGtSLYfdyTIzPxwUovUuiTmVqIyVUwNyWlNULSKgRbcu) (seq (seq (ap i EnXixzFmScphp) (seq (null) (null))) (seq (ap i BQQuKdWWvMgabruqteYjBQtJob) (seq (null) (seq (ap i MzimE) (seq (null) (null))))))))) (seq (ap i cyWzSlvMgurXHoxlNRURTXJR) (seq (seq (ap i ifTKDDSZbDkGbaISReOYnuWWFetPK) (seq (seq (ap i kecUePq) (seq (null) (null))) (seq (ap i nPOvmiasYafxuuPpuoEtUGmDJhVNNrYPkxdcXgNRPcIQpDeBALxptRHruAIoECQzYTEhjkKWzbogBjK) (seq (null) (seq (ap i aFtJfRMAezAfcoLNKfdmYhlymPTpOYkNlHcsSeQFsVZIVdmtWJveMQTwc) (seq (null) (null))))))) (seq (ap i WSdoRxaPgKhuCXIXuSqlrEzaHi) (seq (seq (ap i NYxzojIQMWAuZDpfJSwQ) (seq (null) (null))) (seq (ap i uQNIhnFFPnnKkvTEmPuP) (seq (null) (seq (ap i qFHJWowRPOYeAssyHrPZPCQQbZdFygLWhGVdHNLCOhCIKPHOwOonaKtRlXXcDkO) (seq (null) (null))))))))))))) (seq (ap i kWcvGEkcRWUBgSgcHjDvbkalbMrClAyvjvNJdqZySCpyYBYbVpovcFFqbhWkqxsFhSPMxCmPLAVQmrXpSWlsbXkN) (seq (seq (ap i OQUNoqWEPmHdpcCtqzCHlBvvuxsZuHMOVFxcXxAQjwZzBoAcTlkwtYPbckgFQSKBJjzhnXCV) (seq (seq (ap i xteXhjiVWHHdmycHQmaiZegSAdndAXNrt) (seq (seq (ap i SunRWAiQoZCOcMWxrGvspbudnPUAwZTnoWxkfPGYXuSbCsVTwOVZUBjqdLGsVCHTbcLGwXjfZuoNTpIwFMnelWOzislDzIYpRy) (seq (seq (ap i uWjQCpqjoXHoTLdnCaEsnPglCwKbndjHjbkzYWPQGsCjPNCXaSZ) (seq (null) (null))) (seq (ap i reeTvrRjK) (seq (null) (null))))) (seq (ap i GxrOmNHwAYHfaHSbbSAmyOjrxTBuEEzFtVgsKXZiRRZv) (seq (seq (ap i ktegPgZd) (seq (null) (null))) (seq (ap i FiWiLbhXgzplRfBFKL) (seq (null) (seq (ap i aRCnCTwDFyoxXZQTyiRSybTyLGGBSMZTMNGJFNKtYsppGbUjtDQUfwDCZxWjyAkymjeZHUiUbOxMLEgcWdJiJZPKFBxVt) (seq (null) (null))))))))) (seq (ap i qDfshPQLVdgdvQqvk) (seq (seq (ap i iIjAlluvKrRhKXxbYeTrMWGmRClUOrHdZqulbSJxztDvKiEmVTybMRqebyHrclaNczaCHjIrEdTlGjP) (seq (seq (ap i kqnojFR) (seq (null) (null))) (seq (ap i xSkU) (seq (null) (seq (ap i HMZelGLEEWtInojDJbGITWhoutq) (seq (null) (null))))))) (seq (ap i ZnJwZSRGkISvM) (seq (seq (ap i WmvFAkwkczneIXspSoFMzUjevCWWjZFZwRmsnKRKsrqvIFrIEKaagMbGBQdEdjzhuXfQeAfRP) (seq (null) (null))) (seq (ap i cNeNabYEGNLOglXgZTmVhZCDNlGCKAiGBvcKtAaJKAAyHWJHZJ) (seq (null) (seq (ap i CwERIXpwaOmXVekSYXGRjROMdayNEnwBUClXcDqkA) (seq (null) (null))))))))))) (seq (ap i QrEbTlOlGnWlbAhKjEhkCZzlDjxByEYWNoX) (seq (seq (ap i fFCKzssU) (seq (seq (ap i pKcQiPoAHIFIQZZUSEhToQLN) (seq (seq (ap i TathiM) (seq (null) (null))) (seq (ap i RIHUBJLuyEAtDX) (seq (null) (seq (ap i AFTHWWuRQkZNQDXhvlfNOvujzcZowhQScVlEYZPdvjxqBvAFssXpKTJbIuYjikxFRBERBo) (seq (null) (null))))))) (seq (ap i CAnJyHMYfwgcKdMcTusEeAPjXiciPUvSPmMZbWHJJAgRyVoiPbdhFczlkyJSKLCRQlKkJzDbMNsbeGkDvOsAPArgnuepCdTzgx) (seq (seq (ap i xrONkUmEprkNLjTYOLjiGbaeIifeEWogyrGQOrrapziHIzKeNAhanTPPJbvfhpMZbpgn) (seq (null) (null))) (seq (ap i RWSvBMABSclGzTmjDZAoBqyrDKGMieaStBWzcqFOnSpYsNMrSDkjklcsLQefMqkMJBKpJIJVY) (seq (null) (seq (ap i GKoRrXfdtlZMFOhgtdSuXRhjiDpCJRMZobnjbKZAHqoQEbpFLdhpMOYFzOw) (seq (null) (null))))))))) (seq (ap i oYIEdAysvZejsOWCKRcGnTnqBsQeVrJkeKVBmbDQvQhqhBlGmAupOoskpvWFe) (seq (seq (ap i MYhCaDcUuaFIwcPptLFmMD) (seq (seq (ap i sEUOGPyJZKWJSyrprHHTtfUaKZFVALjnbYKUeSaiXoejuHFenjFncPlmddiRkUkdYKErKLSsaJmIInBsyjkAIbqjbcdeTHwJW) (seq (null) (null))) (seq (ap i vfppnIXqTxJIsqyFzdKSviNne) (seq (null) (seq (ap i KusNxlVXEYrrVbNlwMbhYoKPxuZGtkbxNQcsdsGOIMjDyuwcmJtGtLxemgfclgHkOVqeYTnScGZj) (seq (null) (null))))))) (seq (ap i MCEYKluMmpyEJdtpBXkcUwMnZoRhNKcXIHixSWAODXrOACuRsoB) (seq (seq (ap i FLRQPLkSgjSBhznhuXqlcsGeajLpSdhmhqIMppXSUgwCWvg) (seq (null) (null))) (seq (ap i MlZHGoPTYgdxyprSnjSFVhEZXFNFCyWLepRgutQsWgjuxotliLCLQUoAcfgBtspCzsLuznEuJiNXtGtuSvNwJcH) (seq (null) (seq (ap i ZCqFvUbVSejKVYhkGwRATuiVhuPJQGYtiPXOYSCQurTNmZwiVHnTZnvcgCTdJfaoJDKUhFYtb) (seq (null) (null))))))))))))))) (seq (ap i GMmanoQaUhGgIChctHYAdZNWbMpANQmUPbvgotUQSawMFYbOxknVPgxfXAlyzrPJGMC) (seq (seq (ap i iFLEn) (seq (seq (ap i OqaPlFuitDe) (seq (seq (ap i nJHohOTuRRuDQmXiijIMmKCpwRcMOXjmGWLTAQyYCFUCQLEexLDDsoBTeNCIEBDpmbwjapcqJlruEBYHPqxr) (seq (seq (ap i KKWaAbmOUoIWAoZMgonEqYfmOnfgCoKgOBmeZKxEMSAspCcDWvYLSYADel) (seq (seq (ap i GyVZcAeNmOzbuMoiTrLhgDrtVqkAfueJmzbVpyLUfcRnJRLq) (seq (null) (null))) (seq (ap i HwtdLEjZuHSywkqUTpuRVRcImxEqvCRrPIrIybjKBVBpNrzJvZhIYUgSNJvZGOrfqInFefuxPjwwPKngxjXyKNxTYGMsH) (seq (null) (null))))) (seq (ap i ecPkjtSwHxNHVtvipgPCalqIqELOuyhBPPfYJFeugMJYyakvPySdhDl) (seq (seq (ap i vlYGJhiNTcYmnmmIcuUQgy) (seq (null) (null))) (seq (ap i ibPMbcXfMDvTnkRup) (seq (null) (seq (ap i rHLPWQngyhjAxkIdfjzaoPCadHbXjLdilSrKIpSRFFQMqYovoaePeLZPzLickNKV) (seq (null) (null))))))))) (seq (ap i FLpFMcoYrzcRMYcdsSNmrxeCx) (seq (seq (ap i skCWQnilFKh) (seq (seq (ap i MwSZUdqzXROXBdUcstTymQDGHmIQsDgKhexAXiAyxkyIhjgr) (seq (null) (null))) (seq (ap i CRtncbLMMhqCTtagdrkElTDauZQdAWnGKBUTLvWQFAvDmapQskXHUuCWWsRspgRZhzyHHBJkOkcb) (seq (null) (seq (ap i cuABVmFerHUkAzEKVlxPeIkfKCChSZRSQPWujCgLNSfcoHmcs) (seq (null) (null))))))) (seq (ap i wAQTDcEjJXHkuLtLCHIdzZHHetMdWfYOVYIevVOERf) (seq (seq (ap i yFCiMHDbGeKVrENNDlAhGAjnmvhOOsgGcOKDqKErjkhtYtFvuRStkVGxBSylumHwbCWddPfJzMUyVJm) (seq (null) (null))) (seq (ap i OicExDlNiPdFeHMMJZMWtT) (seq (null) (seq (ap i PfEypdxRPgXAxihMXmiZUZYnkhEjUQNraNLKVrHJGzbdzSNPuXfYPiNppHqqcGeeoRifdRIhJCDSrSmIeUhWfj) (seq (null) (null))))))))))) (seq (ap i yPSzoETZXITTiaLNErpAzVXMnCHzhAlrJBxVSG) (seq (seq (ap i BetVPpUbeQHDBmtjbzqfXarBxVCdLOIMWsrjNGgIXfoKcvaonCapgaUCFFYdtURyybbaZghPpCtoXVWQGANKfVDZGepRDvvbOSa) (seq (seq (ap i xGvfArGERtfLeKBNwMnSqLoVMtGKTjMrueAFztXMDlPlQNtlyEnonxAuAnzdOyzcLOaeuYEvifXZPFQUCgUTPzSPlZOq) (seq (seq (ap i iIRSCIUAfiCBvHKrkfbYpYxjNEyHuEviabDHnvqIQJPnRUfpDaihBktZIIvVgDHGStZdLvdJ) (seq (null) (null))) (seq (ap i XQbzoSYzqVV) (seq (null) (seq (ap i IqkRNSfRKRwdTzDlluGmCIyMjesgfWG) (seq (null) (null))))))) (seq (ap i ZBbTKMiSyLknabIgyhuSWCmZZWrXaYouUFajwbAPWvWDkBkoOJTosKqPAEfJ) (seq (seq (ap i UxaJccOmFaetjHOjKVnPQwoViRRwOcfdWwslvwGRymkTnzgPWWBKHzROWiflUnO) (seq (null) (null))) (seq (ap i mRylomlKLGxmYCvWGpAssTLTcZPQNzOMHHcErSiVqUoPMDmsZqVOKNGRlaZ) (seq (null) (seq (ap i SnhTVtZLygJrUNMILrvChtpxIUJyBqNXwhWFfrgC) (seq (null) (null))))))))) (seq (ap i ojeMJetzesiKAyaHyXYMmlCCWXdlkdwLLwvVLCrsNX) (seq (seq (ap i PWdMSiCGxwzbWszAoWkrIKOeWYLtpPIUFgzhFoeHWkPkiqxtMDCLPNhIFMSjFvJZLQTlOgJScNFbxjHAncMxzbjlk) (seq (seq (ap i dRVlcfQRpJlKekaQCSdikIpLpRqKbplNubisPnrXNbKKcIRRdyPmpClVpFDftFYTQplaUapecFWUsPmFqiACXY) (seq (null) (null))) (seq (ap i IdaIhSuVplfWyeoGzhnHpByzhEzNvukhjccQOIFaiBeivlONQCLMPtJRkl) (seq (null) (seq (ap i YhwJkXjYdAsshPqyxZwdzYgKSfYgKBlquANHzFNUPREknByghkwVTdIsEiGMfoEynTUjceHGR) (seq (null) (null))))))) (seq (ap i BYkQfqTImXFViNjYgKDwcfyTKGaBCivXuscUqbMWRNEegSEBkIHgJvufqx) (seq (seq (ap i EBCGHyciczdPFbqywtDPnWouxiRJ) (seq (null) (null))) (seq (ap i fDCUPmHcduBlNNvRgIdLSAyRT) (seq (null) (seq (ap i KBMikFCmxtinzWjehYwLWjeWazBPcRCOraShVFGnOSpXYHZywDlWPiPYqvICdfcjEgXjoUYxXmneoFXJgu) (seq (null) (null))))))))))))) (seq (ap i KUOFMQEbrSwAXnRLEzLHalBqaKmXYTQNqVrsTQqhjAkjtYMhTspkTEJSEnIWtOUtBJeraRmHHKGQpqeSHlAOYUeHuzu) (seq (seq (ap i ncvPquHsqkdezqCembDxeflaCWXrjbkEQTcCaPZAEnhLnMuCQYxxlpIZmTdvxrnUsWMSVdbwZItlwaIxIExFidsmVPMtZU) (seq (seq (ap i iDBPsGAWlbIuAERWNEVIowblsvfBkg) (seq (seq (ap i AQSkb) (seq (seq (ap i HnlYkGjsJEefUBlvXRsbrWCHIceQywEwswLRLuAFXgysNBXDAuoPdgMDxGHHNZS) (seq (null) (null))) (seq (ap i VRuLzWFocegRkTdosMyUQySKyuzBfVmMgFKlwhEKIXiuEsOOwDgiXprYvLIcUpwIUemspDj) (seq (null) (null))))) (seq (ap i wdVRbOtHSkFbGCXfwuevJReFuCjBP) (seq (seq (ap i iklELLhrsLkCOuTahXZxNvNFVyBjyRLkvFITNNU) (seq (null) (null))) (seq (ap i QuTScHKsdqPWCNaTKGtoolXqaDxfpyyERCIJohSlgcvcGvUtUWejdzFGmFYTEiNiMofbHRdRVTVRvBJyByufWmeRf) (seq (null) (seq (ap i QWcOBiTGghsgVruRQIecYCNrYpgDAQqYUicVCFJXMCqeOdnJjakbnErolQxlxiANjGMRIReQktKaOguSKeLNRhGelsnRqAF) (seq (null) (null))))))))) (seq (ap i eppqDXTzTYBkVXCWMhEbpmEAhaZdftWorymeYZPuJhAMMyYxzCiQviDjprxJHDXuvxGhYdECMlvlnxrCUxsaSOzboXKJQmcbqPJ) (seq (seq (ap i vzlraiPICQWYqTJKhXQWedGyNEAcBkD) (seq (seq (ap i YQgUndjcSgUBpfSPEpZlgdQNJTlUDylrGWRnNtSziMScXUuGVltX) (seq (null) (null))) (seq (ap i homeCLhtyhHXwXZqLVpOOJReIeNHHExTzfYbemVkCqhMjoKINpLMthDIMawuNGssL) (seq (null) (seq (ap i EUJPPBaotVlbrLGEijLMtabSNiWPfjcXqukbYUZmBPhlbkeOJhuuahfFgUYxlsGqHYoIaLjRVkadkxbxCkTCHoTFnCVZfuajDTIJ) (seq (null) (null))))))) (seq (ap i tDUzVcHpMjPIRlzTUQMGgqlUuXvGbTzrwpHpKEUVYSqULunSrYemODGMATsZlKoYifRmQoTAsKxMCauCDmATcDNlV) (seq (seq (ap i DCLsRBtqilnuLSTGzBQpTkJlVNfILFJTTpHqaYNKftnTnoOck) (seq (null) (null))) (seq (ap i efrqdgzueVZDYxQCVPcdZEWgCIDZLPTsTfuNWEPnMtVOzyUDrTwhnPAisd) (seq (null) (seq (ap i ezSmfIEzRHLMbRAmBzbdvmZYRevNsuhwPvPjnebRHJeVgnRKZ) (seq (null) (null))))))))))) (seq (ap i meWFQxcIjyHnjGJqKbeAfAqOXGd) (seq (seq (ap i yxSBMbLriUJTYupPNlfygPQKBRJJKSBomPRYxrhWwcvNDogkSwOWQqDmKyGKQJPwLMgRvuxWPeElXGNNPlZgLefiDdxRYRjMwDTK) (seq (seq (ap i NXxBbFAawmMGzLrBVMzfuWodesEKEVWMUP) (seq (seq (ap i rtaswmzrBGxFSHUyOYjEiyoywShSXQWPzMUtQkXyNEomDbIJJowVZbcAGbfdSbxbMmrlorPtTlJvzJAWmOvxOwXSkvrofSa) (seq (null) (null))) (seq (ap i YBEQzkJGcAQUvqcZvpCuUTCEmzCFXannUKxHZovCGxBGwnIAbhTUEzghuOdvotpwwlcbyrVBDRROfxMdduJoyBfBxtATiFogPf) (seq (null) (seq (ap i tkzvhtTxHUajUkvirZQaweObztyZZejXiVCcBiqCzKTJfLKjDvyCqPntosHmuYhWQiQVeHCbfjodwETKFEIw) (seq (null) (null))))))) (seq (ap i NuwkhsmhZDqmSiiiSLhCQmiwhJyOQNmXgyWMjrPnQbFlQtoGfoqUxcVrT) (seq (seq (ap i zSPJuDjsRevZYkxUBfwvhtzQCmOGebyzRDeqmQEHsUBgoOaoigHoAIqKnGKmxEzkGJTpgNaODtcAPjIZoxrMFbQRq) (seq (null) (null))) (seq (ap i VkXFChcaXmiBrnPlHzYbbYwKoGeXVDceLoggNxqbqRrpxcjxmxxWhFRD) (seq (null) (seq (ap i KrRxiMJXPLluqRrWKRSHCeyjdAxjVIIOiYRvHbGxqxCyiqmAZHYfCUCtLVVCNouCXQWSzOtYMcHwacdzY) (seq (null) (null))))))))) (seq (ap i IWvAiqJdwiExNfEWqOBdXIvfQAtkIDiP) (seq (seq (ap i EPwZfXTtWhyvBUpRJNprfD) (seq (seq (ap i ZqVouJhpIFmJeA) (seq (null) (null))) (seq (ap i hvTPXjGJZGqaLlDCtqnEKAxDOHsRWoLFOHmKANMsJWzrmDkcZEpDpxXDSvIAYAXbFNkOpWQphC) (seq (null) (seq (ap i xTlRhrUtSsRaByouWMDagFHgWrzZmJXSwonJMIMpTWIbOfFZZBfMtGPypinzMwLUwqJRlPBVxSBLYBnFKVellXHXbTPnaKIsp) (seq (null) (null))))))) (seq (ap i LYyXRdbmIFzUxnUyZFXMcCNfKFCcfKaVgVKDsbpwVqicLytpmQDaVUjBhoyzgiumuMtxHRpfhvjADMJzsKhKDYUcjL) (seq (seq (ap i AxVpSdgQSJgjNVSlPTEoQuZEvEacSoaTRpIuvINXiBSXUOphPPabGCfkyeezGXJLcaMbWSnbZlLj) (seq (null) (null))) (seq (ap i DumgmippRpyiCRSCHqKqazHZiezVzTQAtQKWVhuaEfQDJGyDRyI) (seq (null) (seq (ap i wvxJxOOdovTVTaZXyXrYrXlVXdJVHLmWPmXkwdUAkzIViuwTXuACGVztEMfexnaVMeUWwrLKXymlUdqdeD) (seq (null) (null))))))))))))))))) (seq (ap i KfLeiyskQllhzIHsVjVQU) (seq (seq (ap i UpPzcpHFZlWtJguhzlVpnFKsAtpxjvXcgOShoeV) (seq (seq (ap i LhPYsWtZeskQxSiicZhAXunWKSrDcgxmqRxDsZfclPjp) (seq (seq (ap i OVzyzkRyQFWDLjQeNUWjC) (seq (seq (ap i BQcurSnSyDXfTrSIMbXSHWvDhPLZYmoqsVAaghvWIYwSPtPSNhXcKHliUsUUcStWIfEa) (seq (seq (ap i OAj) (seq (seq (ap i tAFZouHtOJGcZECVWTXUYAWklzYElpYpcNbEVnCobWHijZJVUNaafnrPtWwOPcUlmmJiYRLiBTenNFrZPlYEqjjIsVF) (seq (null) (null))) (seq (ap i gkmiFaSVEIXuFLhDFWBsyKNbGHosbnkToPqAWaCqeJmVLxWwfEYLmONCGoobEbPMcGYrAwLdDtzMXXEGrCNmFPPl) (seq (null) (null))))) (seq (ap i RsxeJVkSeXgnLHCFMcZpGToveIbp) (seq (seq (ap i FhhPZHkGgpdWpAsazswcheJCutuBVVLXkhEjbhmHNRTwZEATYsiZrnIt) (seq (null) (null))) (seq (ap i aZtIqntH) (seq (null) (seq (ap i NQeYvQNFXOFKzzzxZqriMAYupzySYEXTOkONsywTVZnqtFVnNvDGWVLIUxrf) (seq (null) (null))))))))) (seq (ap i LAzEfbNTQTYSWoVlwTiPlAWkHpXrLQDdjktPQdFuxGiGkNVNkVVFGhhjTosHFF) (seq (seq (ap i gqZnQngrwLRViXdzHfZRESltH) (seq (seq (ap i IJstCndfuSpTsdeORFazpcXCpIMZCHCqyOVegyllVuisxSurTDYiHeczollPhrXGVsSvUCVp) (seq (null) (null))) (seq (ap i ZhYUuwcHlmIXpyIedZuulgcHMtzbzHSabuOrZVHFcFOPCeWyvXkJZCtShLlaCvmWIxMgYSBmfFSbtyTmsQckASdZGQjxeD) (seq (null) (seq (ap i TZfWQdleRKxPzGHzAZbHWLZaY) (seq (null) (null))))))) (seq (ap i eKWdwghSzjejKRzKOLWwXLDZWzUIjdAIPvXiNcWEGqvUWVaDizRpFLoZXQAGHIqvYHgmzbTJngQmZvRMODwSqyxEQwjTujHhVr) (seq (seq (ap i bqMbOxmDkfOnregnHcgHvydDbUnmhlkh) (seq (null) (null))) (seq (ap i ObbufmKtUrcvvsgTNGyRZQbhdLozgGvnJFqiNw) (seq (null) (seq (ap i iWHRgnWnIMEMtioFkjtqxGMUWOAKSxIdgqHVNFEexGrSfuclsM) (seq (null) (null))))))))))) (seq (ap i TUvMUYAWTLNyKMnEypsJvYAkyVrJJDBgCfmpBxsxjruqTRvKTzBuVfraHJwyYpUIZGocaXQckYstASMqEzAC) (seq (seq (ap i aFZTJGdbSLPOfkcqVqrhrkObeoVhGtbACigSmuwpvzHPpWGYCAhGJdHEmMRvYgNoCrgQyreVOvxBgJRiRIbUwtn) (seq (seq (ap i aRRSuWuRwLPLQOfnjbxNAVCy) (seq (seq (ap i AFwaVZQGpJHGxzKmCbbghuJZHKusywJykdJGoVKYxKvELPRInjOwDoEQrQSlOhJisCRjNjpFQsdkFtEqdeUGJTDdeYpa) (seq (null) (null))) (seq (ap i IAHVBjwqQBrhlOOTENVnibUaVCLJsPamBIjCWmEOsvWkzgfetOlimheLuWXvmstJdXLWaGJqmUWFjdZULVbIjWmgwdWpHAlIbqBB) (seq (null) (seq (ap i YtxBLSHlorLZlaYqgsxrwfuRmuUMhNHPIkedDQhmggvWEKHiTSaCcPcGBxjObaOIsINnqYSLCFerwXZtriwAen) (seq (null) (null))))))) (seq (ap i kTsyIswykEJeUtwODWwUHafwIohatUfTNJjoCHQGwBIwVPWALOUHmurCHfm) (seq (seq (ap i ULg) (seq (null) (null))) (seq (ap i AjdjbYFRjSVMCeLJqeWDwsiXeWsPVM) (seq (null) (seq (ap i LhySgZrYpfRNbHUdyKHdNXKCeuxLQGvbwIbgHrwOcsXmOXVziGxHnPcDPDWwPXsMkNiyBqGWrSsjfBdSknqLlKwNzceWrMsH) (seq (null) (null))))))))) (seq (ap i NlGBzMBOsaMqEJUMuUtkFpVDemAbJJGtnVVmRNEgFWWbnQIJAFbYoQLOfWpcyOXEyLyUGtmGxyXBQCawgXXiviaPAd) (seq (seq (ap i fvjuCcjPmgNevhmLVRnCvmhONUoNSVjZyReoSlFEmOFcbSMXgGFaIQLagBwwOynSgTy) (seq (seq (ap i vEfcmFOBGqCknHunwbSaVLDZesLZrztejCQifQAaEhtvVslBLFNEALTAWNkVsmSmiqVSBArrXo) (seq (null) (null))) (seq (ap i wJynAidowtMTLViNNyOYpJSZpbXAku) (seq (null) (seq (ap i tcplPAsrATTHMrlHuUFUrTAvZjBfo) (seq (null) (null))))))) (seq (ap i GAarQSUIiGNIqZYkWOiNFuZplcJnjFmHJucHuOJRQwmPKAYgfjzxwpN) (seq (seq (ap i AVViQpAcRqViwMMhVAWFSilgQSJdKBjJoykAFcNhyKNPnrKJxntKpUDK) (seq (null) (null))) (seq (ap i egrgfjPnQFdYelwBGFMpQNaPpcJjvFzjPKOHruhKQNFciRB) (seq (null) (seq (ap i IVSBzxegYTKEfcqPhORsmUbKXcfuPCvUDjgYwySlNWmqcqBBzhbyklgnTIRUCobXllHTftBjVhAdaerJqM) (seq (null) (null))))))))))))) (seq (ap i xtuiMCTMgXenslwmz) (seq (seq (ap i KmZlJhdRGRtUImXWOiatfF) (seq (seq (ap i EAqxkVwLuhNciXonUCeBnbvjpYCAioTsrfUdhfofIHPsmnzQuTp) (seq (seq (ap i ouQsexvIfwBaDvMhuCLjrOZHTIwuFyrxeMgJDZWqcY) (seq (seq (ap i eEXOJiRdlPJlimFPHBeGsnctaOBnSURHERzxHDpieViXfqzRJlNyEQxccLaYeBsq) (seq (null) (null))) (seq (ap i XwGIDNbFiAhhWWY) (seq (null) (null))))) (seq (ap i gCIiTJdmEiHJEyPRZOgTvlelMfgqBQgovYSucBZucWtjzLrlsRarDfofWYcjkAZGTYsLdEuaOhTV) (seq (seq (ap i rwTtrVFTTCqOENVusWhfKijVRlxVgRJpqxDNUokmqCfpRcnVgTTHZMajqNgHYaqNaJdmHHTWEAUJAqOS) (seq (null) (null))) (seq (ap i OBSDmhFeFNWMCSXaqLNYPBwLCZWtkkvAcFkfKh) (seq (null) (seq (ap i DGhcJAfMyEfsnAaKkDbCBdRVeqmTlaTtyNgGtVdAMNeyzNn) (seq (null) (null))))))))) (seq (ap i nVdcINhqtOlSegNBwTZlJCmwoqaGQBQdlMnmGGllAvbgJWmClDQAhiOMqbGNCeZcVcE) (seq (seq (ap i uetVpMjQNPjdP) (seq (seq (ap i KgDAjPqSAMFmfIjbYF) (seq (null) (null))) (seq (ap i IYHGOKnwUvkdKRjXGYdVvnBMKkdepWKeLFhQDXJVFnSOLwBefdnjffWTvlvNxyTrSLxtAdqsYNfaFhsplqJ) (seq (null) (seq (ap i AhteENcJujvWUoBfELcjjjJMXeWuKdbzvjskyPrCBMisIrnjjde) (seq (null) (null))))))) (seq (ap i PAkABJLDuVNBOqRHnsvxyIZvVxuJbUxURTkoowgeZlaEsjufjTAriowjIMOMhtTfMQwLQCWdRdykhpmEssIT) (seq (seq (ap i BgRpyWVniZFHheLuONPMvoROhOXOTEuJJzoqdAKWwLrGfpPcQoPzPOWIKABxxfJnQecNkymXdELQOp) (seq (null) (null))) (seq (ap i UoRDQBwwbBEeaEoZihMaPFUocSsHyCXTOJaMgtsBuALeqOzvuIxjglFzLCpxpkaFBQicAZfylFi) (seq (null) (seq (ap i gHHuDRjlXHuWOcSQeNXLjeLflvvHJqKctGDTpLCKHaeniUEpOmqncduZRmVmjHn) (seq (null) (null))))))))))) (seq (ap i GFBQCUzCPHrYDsSBKVTajflUTwFzgYrvpDctJFjWkGovLMehmVwfMjtkDnhDXOElhAsFbEWbASfP) (seq (seq (ap i uzxnQIsiPvYNJmyFqqLDKcgUEasYKZXmkheIGSIZE) (seq (seq (ap i sgPUDvwYEPBzauLGCDukzDeGCmuxOZkPZPuhBMIKLqzbVtFZbBdYcaTmXPuvoBmxIDxkUEizmi) (seq (seq (ap i BuYTefRzaaRfguiiSEIThMsBjGxdWiIXZPucsiZsnOfPfsJigvVWpLFsWLNrsZZKUPWiwYsCAmVp) (seq (null) (null))) (seq (ap i FifduRtnelUcwEZvFPhjyIkXMkoJkzBmJKtVnjVEJnmSjJabhTMPwRPFMEonQOjKHaFBsltYYMdYeIPbQ) (seq (null) (seq (ap i WvWCgJlLRdVvQLF) (seq (null) (null))))))) (seq (ap i GEchsdknHeTjNFzdaJAOY) (seq (seq (ap i UayxnEzZOpKxbLwUNutTJdefMLNhbVwquuGgxKY) (seq (null) (null))) (seq (ap i jHyBVGQjocLsvxHiazBLzcogRPFdufbZMHOeilEXNJyjwxtenCfwrrFRvAfoWFKRizyCSFyVhIzEaZfhaCY) (seq (null) (seq (ap i hBeqJqAqlnKWRWDSFPEUIBiCrOZXVDqZkPFozToZOowhqMNlMhocNrTlBQuTEeMcIvSdzMDbNxBP) (seq (null) (null))))))))) (seq (ap i GihwnwPKZBZZoJgWqtXaAnbEgajtqxgcCiijhCgSPMBzbtOhvtpTiw) (seq (seq (ap i UIjMKkrUggCKsBJBbtmbcmbJdXUUqTECQBnXfLDqhubXklnmeQcsiKTCbRcTw) (seq (seq (ap i QarUCNaWDUICUPInDgAlMJxnEnavYenDBKTFfTmBfmdmBvILWhs) (seq (null) (null))) (seq (ap i PCLyXsWtjjKjWgeheQHYSFjeVqpOsOCwfyGTwOLVFuRsFDQuPJjjNLKiPdmVMRcinynbqEuNCKgxLBWtVHcvgC) (seq (null) (seq (ap i HrzDKPEqMEybkPTrZRDgPeFCAurQS) (seq (null) (null))))))) (seq (ap i wRiKzFoqbXrictIDYqvluVbWsFoxktGxne) (seq (seq (ap i yCQbsjFJFjVKABfsPbxKeyn) (seq (null) (null))) (seq (ap i znLk) (seq (null) (seq (ap i ExSCRPdOhQwTfKFIgkYdjMGWJgYOwIxOoKudJGMNtgMDAWhJiKmXzQrjnyflOkmULCTYMpoZkPawAwJpQXX) (seq (null) (null))))))))))))))) (seq (ap i KtpXWuEGcJhoHQBDvGSnDkaQaJTenFx) (seq (seq (ap i mQXVKmBxIYjDzHzYSGNanXHNbpPavIwTiwWmAcEvCSQUoAaSCiozPAKHLJZkvtJPqSZvgnocwiVMbftdnRyaQF) (seq (seq (ap i VkTGFvnYrZQZVAgowgVBwYMoLtRjoZVgbjibrJQgsRIojZnfs) (seq (seq (ap i GxXhJTIRoEucaLczmrhlFwUZJKGNqticylNILUhEueUPbrDEjj) (seq (seq (ap i ZiKChHOoqXWBJGppVvJBopliPRadwgSkkxzMDSeUjeQwhZiSKBFYa) (seq (seq (ap i zEUlKJIFaFIMsIDcNzOjnpIZgPnmZBVkzuS) (seq (null) (null))) (seq (ap i WCPqeuOFcNOcNokbwFINZPlKKPJKcaUYnkWXXJQngjYUnWRKgUUyDDsKTpqMJnzeuEuY) (seq (null) (null))))) (seq (ap i BQBWESSZaoRmjnYDMohURwtKgQoJLVJhChQbvsiGKgeyhyybcdujTRuAZCuPBEvnYgJALpHzJnBD) (seq (seq (ap i eakNEHMyiFtNEeLdArwHDSJqlqiTjTVNsyJjJAiIUNUjGZmMWBNSBYFIwuolCJWh) (seq (null) (null))) (seq (ap i iSTTYz) (seq (null) (seq (ap i ObNxjrysCkvYRaKFDehWIywJjYzncZwZLFiuyaJJAKPRjqtkrVomSrexiVhIIoLvnOIQFHknwjyjvLpYjBLc) (seq (null) (null))))))))) (seq (ap i LytaoGshfRjliPffSCxxvwQgJSkGuTUIcjzfKsxndZmuWjKpNRWKRrwdlUGhmpMZRcyNYCadoSPAwRrAOUIHWLlAiuoICr) (seq (seq (ap i jNhGeANuKFioSnVntZXYyAKuXOwNEVEPoeCRmNenOuwYxSMLrPxfzcGoXtOMRpneIxVW) (seq (seq (ap i ydVJgaqimPNxlvHxnqvUpCXFOxpVOiSENyRjoG) (seq (null) (null))) (seq (ap i HhXnGSdJgrCNelV) (seq (null) (seq (ap i GfNzgYwNsBEMWSgXNloKHJwtfPlPfMdgYEeVIaaTnYICTUeOGjWDtEJhmlkEtvNelqTLoMyRqtYpqlBDxCiNUU) (seq (null) (null))))))) (seq (ap i larwUnepBpHqXESCYMyfjSnzfavmeWCsY) (seq (seq (ap i TWtHtKyRTzetbwcGuFWPKTyBDyXRGVpApGSskOHgdrGUpYOIUvPUaACr) (seq (null) (null))) (seq (ap i rrpqPmnmXTrlfyxiCNtKxmcXgoPsq) (seq (null) (seq (ap i pVlulNCvJiUMQiIJBnrQuA) (seq (null) (null))))))))))) (seq (ap i FELccrxwMphVAYyAdcZDUhPoOYiMlXvSLxIAwUebiqvIMYfqeWYkxPRUPedmgVUUFInCIVVItQeiraWPrNZsrd) (seq (seq (ap i jfbTKUKIGRUsugXEbZcUdzHevuXiVHCWmBEaLhMCJUNcQRVenqChxvfkheSscpjIfjXJmsaQhYOIMNNsCWFZ) (seq (seq (ap i XdiDPomhOMERrTHnzVuPFkzqDSZrk) (seq (seq (ap i lgTWFDAsJWUfdbQxTmsLvYPacljYNlecnBtNhb) (seq (null) (null))) (seq (ap i OwtyXesmWQZXJrfLgWUTGQZIILvhnKHmbgyMmXaTnLeqLtzeQIDINAxUSZyVVgBWdjUizrmACRXWUAatSlkRZbaxZBXSsTHkH) (seq (null) (seq (ap i RhVOHKQeImRVFxCpqPgWbGtYPKAqKVOhXLYHXHzzNCcLpofhaQMKmrgAeXbVacfvFlitEgvuAgSOiMfifIzJIuLfDvCOkjmTzO) (seq (null) (null))))))) (seq (ap i ZvrReruZcgn) (seq (seq (ap i PRcoGFylYKQUDJTBCEwnUwlcZxNlepyvzWpZutAAYftknvfUqadjuzjkSnKrInTTCVeGiDDtXeEMrmySXWncJQHZAesXkeHQwSX) (seq (null) (null))) (seq (ap i ZzTLfMTYqnEvgaeNSdLgzgBvTtCNJDrQRQNseGY) (seq (null) (seq (ap i ebozYLYdCLdLCrkruMDscbRlnVFCOSdvkEYFmayLNuyRVEsrRAWtfGeMBdmMuAUKKCbRUVbIeupjXouowbb) (seq (null) (null))))))))) (seq (ap i KVVlXIu) (seq (seq (ap i WbLCbDIwJwFtGQVrCQFjUQIWNhjDqCePHLSddeejJDvjOZoJOmZhBvywGSJeoywDJnYqtfWtLlVjkORXuKVs) (seq (seq (ap i FHsYFVDXA) (seq (null) (null))) (seq (ap i BYazdOtGIMrBmtBtiJHRrxTrIVOtsQpZnXTPhS) (seq (null) (seq (ap i CcuDBvsZugttXXPUbLEBuPWAmxiSYSPPqBiUUqjRaUBSAxAjweQLfooFyiDgOeGYDKlfmDF) (seq (null) (null))))))) (seq (ap i AfbbqfyYqBINbwoqBYAKopGDGBXXJRASWJPJSowhgkGShZbMrPDUhDZyRUVzveOnrptJbNiOqqVO) (seq (seq (ap i pihfQNBcPAVmEnD) (seq (null) (null))) (seq (ap i xkRvlxPAHKUFcWHrzznrLvaWOZiPDt) (seq (null) (seq (ap i AEmyfJwKQSnYmjPZjwZuDeTyufYOdtZPlPDFXrrYAFlpVNldJhMfbdmVbujUZzwQE) (seq (null) (null))))))))))))) (seq (ap i xvJdsudWYsgBkvIGZcCRBJwHpUfscgCBHlAWweWmHJGZBvORZaJwbawPTNsBMCco) (seq (seq (ap i EdZoPhFHouuCrdFUytcMxD) (seq (seq (ap i bkASaFayycrsGSUuETCyHpDUQtMfnNlbwbo) (seq (seq (ap i hmUYHywjowBonJAWhcNViCuCSgJYPqMXFwKxabIqudwht) (seq (seq (ap i ngmDpvaJxHmAWX) (seq (null) (null))) (seq (ap i WfOVnNUKQECKNzdCvJzUXeu) (seq (null) (null))))) (seq (ap i qdiBiLxbIiUaM) (seq (seq (ap i NECcskZrKGEzQWxGkHySkKHyxY) (seq (null) (null))) (seq (ap i JpAiUPLAUfIGLFcfpiQXdJLWggJzddUzjJUuiNHbbDWeJbXyBwxbLeCbECDqzGgKiANzgxKnPVNr) (seq (null) (seq (ap i SNUkHqKTbhzytzIsJsbMLHtjGgeLQYqhFeVRrYtAm) (seq (null) (null))))))))) (seq (ap i MJtgHcrCrYOawlXvazLbRDTDdrOMjDwOsqtnGxfpuWLtJknBhRTqzZuvDGXnbaemcEdtHfhrTApNcInnesPhcAFw) (seq (seq (ap i vYdyrDwrgjMjQxetWhGZHicJXsetHFYwXsCFFnEgOIQisEBwIEwcIabXbMIodQmhSJROhqYodmLlRTjggXzEDMhmmOBm) (seq (seq (ap i pBXnIhRiLwPgkqBCCjCIcIZzIcGYtLYFyDVXHtikLsuLPoQnNrHwAKFaGGYmggEfWsqtKfPWIUzbYUxUmmAUhqoMEnnZ) (seq (null) (null))) (seq (ap i FpayZkJwJAJREQTskvImzQjiC) (seq (null) (seq (ap i GANzUWiejINYZgtddzeMtQxNltPz) (seq (null) (null))))))) (seq (ap i BrbYnFFISyx) (seq (seq (ap i yGXcydaMTQqEvkCtAdVqFZZAsVnZkPGebzIMJONlptdjjWRSUawYal) (seq (null) (null))) (seq (ap i mRkiEbLwJMsCxTXTJyEuOibaFifg) (seq (null) (seq (ap i hAhEJNilEmjzbmRmkODDWyVnOSpmfJMqhELyJngTGlBlRXKFCxGXIWKExmKOtieoztZnTwanrAqtDZbkAYbRSjUo) (seq (null) (null))))))))))) (seq (ap i ZUnPXUvWHNomM) (seq (seq (ap i xBpmxMGeUZDCAErFHTYqkPwQydtuUzsWjxqZImegIzaieJmnfEvjysbtisYfzVWXRiKmDqJqHWbWfJIVUfPTSXR) (seq (seq (ap i YrjxVrMD) (seq (seq (ap i qkgkIofCQXKpUqVXcHYrnjYDlvrCwjViP) (seq (null) (null))) (seq (ap i lJrFCUPTKFqCviNusZPOYODBfPzcrRdQmnyiRyYULLNSfFCeEkYwoRQwmchYTJYxFCGGAUnguFobLJhwnyxZXPDCb) (seq (null) (seq (ap i IcksFjvXktAUlGZotkbQEkeUVryNINUvTYNSGiguIhKpTvHLrUuHbApLbSPHTImzBVNojh) (seq (null) (null))))))) (seq (ap i RfOHOxqKPfIuChJvRxmkxxdNEsnRmTayflzoEWMFLNxNddVGngajIMMTprPUbWuRpVOjjmzoLWUeCFwcXtK) (seq (seq (ap i uqFLmVZcdnWcfFdnSdGLxFMptDWJHZoUcAvNkgyAFWeGrKfCVVVhVVkhtIbjfbHyeazgVEqnLcdqysXaqCckE) (seq (null) (null))) (seq (ap i nphdQCSxRIvFPdFHWckiCNfxYYzQMjWmFhgMPsIErsXOGbmQzOnheJtyyeYEwyzExPDcyRRExIRggzZakmOHGTdhfJNM) (seq (null) (seq (ap i TzYUOFJsxlCMJNjTuOyfVOvkplHRukPaxMiaqBxXATEVAKbITiECJxmTVNfEomKYiAgPPzwGcFHLAqvnDUJoMT) (seq (null) (null))))))))) (seq (ap i SefBBsoELNUjfZANywUoLqUFTYxxFIs) (seq (seq (ap i WepinDpDEWLSoBjcybrQilQJphPHQmlOHlswBKQQECVBLQXGNeSrdpmqsBukqtpbsqVjRwCplgYwgHrAB) (seq (seq (ap i butpQaAGRUdnPtasxnJRdDEWP) (seq (null) (null))) (seq (ap i ZqAEax) (seq (null) (seq (ap i YcVAxUIahnPQ) (seq (null) (null))))))) (seq (ap i MyCPGfpXEJzxYQWkIKjOdMxwgmIvVdmZzcopUULsCGtaHRCBPAZkMnXeZPCrEbgYUaCmv) (seq (seq (ap i qsnZJYpCCyypmtlJAnrQoyhFjxaBfwiDecxrskgoSuFsVaekgqZsZXyTGCvbeJTvRAgYORtJHqYO) (seq (null) (null))) (seq (ap i qaGVKTIhIdRCRysLeBUsJAmHpWGfLVqzyuVfLuVU) (seq (null) (seq (ap i kxYxXwaLzApJERWWvFOWujOetvrykONBhVfitzHzDMpKlFJWRPkqXsFHvejuKSAoWZijthAzmbDIkECBUaLpB) (seq (null) (null))))))))))))))))))) (seq (ap i mAdIKCljpVHzseBQtHmEUZeAhSmHvcyQFZKsPNMIaUVT) (seq (seq (ap i igZbwKyICYgrhlfekbdPHAlwgpyGiGOkrTrqzKvMAOKZwhbreIIshx) (seq (seq (ap i jcupuNElrUqOcDYOgjTBSDAVxqWLDYSPCHIjoLaBSnvcRqlmguoyvyKh) (seq (seq (ap i OHMTeaLMTJOQVQHsfajfglOCvNRqtPDUhPioAjOQWsykqKAHxdpqmqdJgkQj) (seq (seq (ap i eIKdciShQHpLOKFtQoSdWAsBOhiXrIzGsHWrsVjxmlEvsmCabCrPuowznwxyafovVdBmKPMOeoBEvWDoZqVSCWEG) (seq (seq (ap i GxAMzaMttgsIilEBUhFqWlDTebczaZZybTskohvIzwlcgCNqxRfWEOVUmWIXBwsl) (seq (seq (ap i JkimQvWgdsIsIfludoieaKmiObyb) (seq (seq (ap i iWyjdeMOVswfnIqFUPyvpzsknyiOCUWehZJprkSn) (seq (null) (null))) (seq (ap i THHukrnkEFwHJJDUlhpzWqzpxhkYAWcQVKEcPIPLdFqkQdzjIpzJyWJYVIiZnqN) (seq (null) (null))))) (seq (ap i iIDoqwROQCYaIjJYfFkpanUXHHvGNIlDmTApmctyVmQVKIQLQwnCsThOYRhMtaMJBvcFfr) (seq (seq (ap i BnizYeHXGQ) (seq (null) (null))) (seq (ap i vrEkXsxkpiKeOLGubuWWHHPvHPmayvqhRzGUYHxIjWCoLyQlmJFTAcBxFeYPJIoPLpAZLHHVbzrAmmk) (seq (null) (seq (ap i jLxipOHzNvra) (seq (null) (null))))))))) (seq (ap i zgzGoyxDZDEGHINXqMMiNQncPEbkAPkXnDPexjGJAaxiCVRozYQ) (seq (seq (ap i itOViIuJdyLETAbCvACjdEUnDSkhKxvKKYFNJsSZiPFnJNaxwWBQGuGXBsPYaXUzBFb) (seq (seq (ap i VfKQWLhJeznMMWtZGRWIyLTTgpixaLPplQTthCVBbqastXtkOjxZzewvWdEAy) (seq (null) (null))) (seq (ap i SMuCxhREmpbMsTWePoQdPPmmJsRZQUJaddzbxXRGDVdqTQMUGyNxFFPZUzioVLFWdxThnuahCrLEkDJmOxh) (seq (null) (seq (ap i WJNTxKmUuqafOadwWDOgCFykCywbKwOnQsWh) (seq (null) (null))))))) (seq (ap i AeJVRGOPcmrTfeNpjWbZGhpfWAbrfHqwqqqekTiJTFsVznXCfPlsBHSNWyGhDdFUkAYjGcj) (seq (seq (ap i jmNaXBKHwEBNAUtWwYqgMbjUlTxxbnoyqXZbSeapXaovgjJeARnAHnvpKAlLPLgcgcRQGoeFERh) (seq (null) (null))) (seq (ap i HqBmrkiBWkQebBbmtnMPqKFgLPyuAFgWcKLOzwATtujuCNcMBLCPUOOUBTfxUbTifYAsaCEHIcyvhWeNCE) (seq (null) (seq (ap i kWqOvLbYMjgySZ) (seq (null) (null))))))))))) (seq (ap i wNafQLvlEuhmckXRVxgZVQCHvnnSCHdMxpiRKOhYtuwZmAoLeVCjpmwooYHrpWDdmjTXBqKejOLiVnwRMwfJDiC) (seq (seq (ap i uthncNDwdzrQKBUPnYNMoGIPGpoPsAqrntoatIAKHKCsOB) (seq (seq (ap i jrWJWhkssrzIVdkBcuPOgmbPsuiJishUjxxhsAwtOTFqlhyCAtuFAstoJWeVUbrNUUCWBgVuIbOoUg) (seq (seq (ap i HgDtLznEHqbDTGKqUCrJ) (seq (null) (null))) (seq (ap i tvRMwQlEBGomVJPuF) (seq (null) (seq (ap i YnpBJboNFFMYQYwBIvYIa) (seq (null) (null))))))) (seq (ap i xrAlHtxSODbpJFvPwlDCBrpJXUJjZbviZuLQuRTEoGAdOzwRAFWXaJXTzzGtndKaelQwzLpzVLByXOwJTcWKzAwtoRjcnnkmhnl) (seq (seq (ap i OWebKYzbawQajfTFxzVQkvPrKRebqkhGOvPnYwUuVddoRYTcNkYkHMuoQfEErxHYceWX) (seq (null) (null))) (seq (ap i BbLuCfYjzwcypBFQcvllKIGYWuCHbAZtyuUFUPwhLNitmMIyhGQdloMXaBfpXqckhtVVpotI) (seq (null) (seq (ap i uMmxgzjgWosqvWGSENyRBfFqVeFHfQYbComzlVJTyDcwrdnTkHwaPHXrXveAiMzdhzbLsjWCIUKgkFGbcyxNvEtNS) (seq (null) (null))))))))) (seq (ap i qWEHetXFcYkDOQPAMmrFTLUKhRlZPaEovqbctZGUpjVSvcQQemMpKvPFDhktUkpqT) (seq (seq (ap i HcJGjoUDvEJ) (seq (seq (ap i gIngLutThWsKPfdkXgTVnOuij) (seq (null) (null))) (seq (ap i liKYYbSRquNLhLcNtKWONaxVSWyGvqvmbSAFPXuDKzAQM) (seq (null) (seq (ap i upWAj) (seq (null) (null))))))) (seq (ap i yGbCrnAaFyfAFCRcNVJbDYbZzyXFRJXUEGoOtyxIrMWMISRdojzfrHcuGZSdXcAeQiprSJcgRxPBP) (seq (seq (ap i jQiEhROmNwHAlWqtFHLCkcPzVCa) (seq (null) (null))) (seq (ap i vFUmnwxgWnY) (seq (null) (seq (ap i xEiIMtnREInGyxpleHxgnpyIqusJKWiwQ) (seq (null) (null))))))))))))) (seq (ap i RXfrEMG) (seq (seq (ap i fkoIWJHrnXYAZfiGTBCUfxFyPCGJYOVlT) (seq (seq (ap i AOzkaaZkusRKZJjVlllnSQqRnMMEbUEFvmjsdTUAWLLjVKrWyumeUmESVtEZPLXgapOSWtSTevihDFiumWJuOVLsjCHbSEgG) (seq (seq (ap i DpLoOk) (seq (seq (ap i LqrjTKZbLxMLjdMMypzVMcUkfyOjwVDlMcrBOcCDAIfIdWpaFSmsyePKpmETtoCjVVt) (seq (null) (null))) (seq (ap i eVPCGRXxHrnSVnvNAgHRUfOzKGEcwXBqcOqBWJdBkORLGDkykCkJcSycJaoZFAPMZRtunEBdyvdAEuvIoBfJ) (seq (null) (null))))) (seq (ap i SEUwHlboLOTmLoYJxosVcqabVeeWDxUYwcRjDpCKktnNUMeiJPoIrOtzrJYZrCSkevvkg) (seq (seq (ap i pFoqvJFLBHoHQNBMUKUexhveiptXuFsXstualTxkdLShsbqVQAAxPtciTqFTkmGrbmZCTMmelMSuUrlnVPtpGCcFPWUwA) (seq (null) (null))) (seq (ap i itgmFKyCkXowdheFQQetnseFiNZQeZaMUBemOgPmZiLtTjFiYcKzOoUzRFhDaykyGIMUBtVivQryyfacFSVCnlxySGfeqsMhc) (seq (null) (seq (ap i CjmJBUCiJZDk) (seq (null) (null))))))))) (seq (ap i RwHpQgzCjylDsUqZcPadhuvnx) (seq (seq (ap i ydrDtfszDmp) (seq (seq (ap i ANTLMgBZvZLoQVByQnzBeZGGWWDVsTwoOObJYkUnfDjAHYIJFQqdyzGjviZBawiPdqtQsvDyXlDuDxpotXRdShoMeW) (seq (null) (null))) (seq (ap i JqALPlNvAHCNMMJQXsJynqbZuwODnAkcomZnrPyDHSQPvHYkeGJyhUSFNOfeEAbUftcCRHfWG) (seq (null) (seq (ap i ZCmDrQvwsVGSVTGeXJwssoLrlLoyQPbjYmKierLFsIjOnuyvnKlzIYqOMcprSLnVfPzzeOlYhfERBqklxMiTEHJhvoLgW) (seq (null) (null))))))) (seq (ap i LfyqQpOAwTIuSLaIABUGwRHMuUQzdmWFCPTcZkNInr) (seq (seq (ap i qFbYpammnhfIiBzDKlaYSjAzjJoucWAjwcNPplkqKejmXxqp) (seq (null) (null))) (seq (ap i owPWgQXDDaqdmpLKGJLLcMSgciCrnCZJQQOupmHeLVZuiPXKFcmAOawCtwUNsvWPcGzbUK) (seq (null) (seq (ap i aDspTmMJrbLkMsJCOrCEzvZRWKQgmhNFnRkElMneynFKvTFHUqIbEYzCDtQTWJ) (seq (null) (null))))))))))) (seq (ap i dFaEQUuoIftPpfVfVpJwkvHpEpEzybVPg) (seq (seq (ap i WuxUIEwpUwtALwdLapLXiwdkundFbi) (seq (seq (ap i Wx) (seq (seq (ap i odgrfiyvEErbTNfdTZtXqZbfOeQwiVgwtkQEBTu) (seq (null) (null))) (seq (ap i pKHfRgVWKfFyjZrYVxwqUQgGxuyrOKBsNuWfYRAVsRtrVSmaeXrfEwMMAcTneSYpofyLJyziUqrUwIJSXjcp) (seq (null) (seq (ap i KSEfqpkkfyQsPZYpqMJdjAjyDhvzzZzMhYnFyKeqqXnFLXSRLMCusNgCeJVjNRPLHxUNEduwlQSRRtfiJpEaQdoob) (seq (null) (null))))))) (seq (ap i MEHuqCnowAAqxzRhxLeqYRhMCyAgCJCLrrCqGgqowlVZuhYWOmWwcRjiejyjBquMgQLDsuvXb) (seq (seq (ap i YFNDLWmldcoRrcxDrSIrRnsrztvpnuxDSbWojCWUjxDgTICAtnaDZDtdiKslQoBoHdvwWicQkUeKBapBojVjWCr) (seq (null) (null))) (seq (ap i AlShsYePtPAXfJytNfYdzZPYIbSMZerOLRlNpvOgzExXyXtctCLDhfvAGrHDHvLKlIwfiGTTEwiAFRXJdKDgdtKsDfE) (seq (null) (seq (ap i yMGxWEtNhqgcKkqKmMjvHzPFwbTVR) (seq (null) (null))))))))) (seq (ap i hdRvNYdOfVTtjVdDcgFiNViUvOpwKPgtdjActjfeSjVfnzUOovWVvHXv) (seq (seq (ap i dbKmOsWtUreioiIWjD) (seq (seq (ap i TmXyqcUHBSTUAHDS) (seq (null) (null))) (seq (ap i OcPPQfVnmAwDqCXwmLNcTFPUVKPgfSqoqEocldSzytzPPQyzUJynxseXbcZnlzqUlRYmkFdFNqvDhmyBTLCyOdVf) (seq (null) (seq (ap i JhPmFJUTVDdISZafVXKjPTRGJmhmMmaKAdorngEOFJEbngewEWcGfOFJpeendlAHQEFDDCYfWIPfALzNijonpdYYrcwXFrUHii) (seq (null) (null))))))) (seq (ap i NQeucaZLTuwNddeerlmUwYxnQWIWPYWYIsbUKjAKhjjCRIhqvLzFVqIimCbczgtyNPdWqn) (seq (seq (ap i stsTuomiWSXMoDVOOI) (seq (null) (null))) (seq (ap i VHpqNEZgQhoAAhoTXLxRRfgLgabawauthWNYPRBvy) (seq (null) (seq (ap i IYHkCmskWVcWhojdSOUWkDdlJvMspyInlRcPBdeWkhZSCICNJamNVbTr) (seq (null) (null))))))))))))))) (seq (ap i AFdyRypZIjXvwJucqAQeWOFDLmbcqorljCOANWwpJwQstOBYrZhPAvBIHpITwxZrEVMJgnTJG) (seq (seq (ap i ieXOxtlJDGwsNJZKkXupMVLwecaPvCxJrqiIdLK) (seq (seq (ap i wCbYaSTDOfCLthXCxORrIPyxZxjcAaRlJxfagLFPPh) (seq (seq (ap i SGGWyyiiPsYWSLbLPlOLbLmWIHjVUUHHhGMViSBjVuLXYJMJATyKuzCMFLWjEYPzr) (seq (seq (ap i GnbRXlubdBaahbGCoXhwvPoesAMkkBQqPALiMsVlMcLeruoeUDrNHIiuSyRKjpCvKPpUXEtXEvhc) (seq (seq (ap i LOrFxdgVIhODibDdJdCXkgogLiImTyYBBjwWexNkNdXZGtErKbZJIDZFoFKIvJF) (seq (null) (null))) (seq (ap i xoBbnEoouNLRIwMcLxlbVxQmUYqJJpdiWkZeQXthkXuXRHMCSgGfuEzVTzeOOgRAGhKtgluKVWYaFmOJHZiHujczslEIvSV) (seq (null) (null))))) (seq (ap i ujeBAnxwIiFqimKHLKfmdSkOlUDUeufrvUkQuunTknpMBHrxCbGwMetj) (seq (seq (ap i ygNxlGeRPtHRArIWXztnwCsWwZFZHGgvHohZyhOyNExdcGHJZZjYOgLcgziEMKRuiQrtsMmZTO) (seq (null) (null))) (seq (ap i ZdECbGcPticgyojEAEEKPZsOaPNOENaCOkvTRegRnsahytQRDZksShSAfXTfhacmHzkXBWA) (seq (null) (seq (ap i xfIvwkzzlvkiklzTxxiQFwTVTyiBJMUpSieQNKxIbrUVLLBBczZZjpDryMWohpsyyQReMkF) (seq (null) (null))))))))) (seq (ap i jhDumoXgzGQFPZfvkenLzJCjHnuabDfKvmObdminnhR) (seq (seq (ap i hqe) (seq (seq (ap i zuBHmAcZbcIxzplzRQSMCPrPGqlcyLyXNjxImpdhmpCsQkcaRtqKVjT) (seq (null) (null))) (seq (ap i UXJZPDVwQImndKYkCRNxJJwHyQFsFpsxenDtAEsvzFRSwgtbBIZixFrNAGgmZgqXWD) (seq (null) (seq (ap i jdnOETepUCAsCGVGwlHFMbRVxEajQocgxLuSNRhFYPJLRvtoHSHOZmliKJVequPYmVUitXGehYM) (seq (null) (null))))))) (seq (ap i MQMBEFa) (seq (seq (ap i AbwxGvUsjJxZGCXGztVKobwZpWLqiLRWqWMiHiHzhaaJuYfcSrhJSBTyUQEDxWLnIWl) (seq (null) (null))) (seq (ap i Yr) (seq (null) (seq (ap i cfczUNtyeJVNQMPpphUKRMZqul) (seq (null) (null))))))))))) (seq (ap i kylPMHpTSDXOvCJlrgGVmblFOFDPoPoFD) (seq (seq (ap i mSJngFDFXfCHaHmDlYQfcstrjch) (seq (seq (ap i rcQvclwIKqQRefcniwMrInsGkGCeGSUMTESNjudXSiMjggurtSAJQVNFDBBCTfMAZcamnkHYuAkskttikumwsRFWEJ) (seq (seq (ap i oKJHiAnOoKzOzoqhUKDFhoMvuMVXBqNLyRwWgd) (seq (null) (null))) (seq (ap i XjELyeDJrscIsRaijewto) (seq (null) (seq (ap i WCLdvZrlWQK) (seq (null) (null))))))) (seq (ap i RRDDoeIuiAoCGQtWQBPgnPeBxhUeWAnmaMjPTdYTxOPOelptNuUKLgvwEpPNdybVxmtKsObVCckfDfMiuUupbKyweokvrfPLCm) (seq (seq (ap i QOegPOQPbOyPuR) (seq (null) (null))) (seq (ap i VRSGk) (seq (null) (seq (ap i reDlEFUWckjDzOWABLgeqstpFmQLkaXnkvbWPdOogwqCwzVszkasjmDDGLImnccYgyLcNtGYo) (seq (null) (null))))))))) (seq (ap i FKurfgFSqfcJUaRmNDNhROSTHsluXTwSKTjWPenUeVcBhiqZQkPVVxzRMNDAFYhuAKwkcYLfCcERQcHuxqtlasdTGnLri) (seq (seq (ap i ITlnNTWGyNjTyoxVAtAEHbEMdXqnKVIhTRHzLAEgnunCgbDlWxeDNRa) (seq (seq (ap i GwdhLpLeAsxKmGcPTfXUzvfMfVSZlVVpyqaeBiQlbcxGxFLKogOgkhqUmFcqVQBAYoIYYUIJNhHSIdVLqBTTcmuMB) (seq (null) (null))) (seq (ap i MeJzNztxDjoNXZGtSkZurCWyNQgBvAxcEaEFvqexgfGKOpyWhbquvypNNsHVWrTXuiBfSmGgQdDwERwxqMJlGwJQnOfFRq) (seq (null) (seq (ap i htUempkhhVvlKHSKGnjNZfA) (seq (null) (null))))))) (seq (ap i xcTFGyw) (seq (seq (ap i FShooqEacK) (seq (null) (null))) (seq (ap i ofQzbVxdpYNHXvwFKYedDxYOsEEOwLBSxkmOxQGzWNycfvjaSXgXthJmBwZhdDMVRYbpTYGYEBtvaAdHNEvdbkAahg) (seq (null) (seq (ap i hmuIXmOzRzKqpaYjNjWUKbLyhrwoHPoTIWYnoqxQoZjhRCrFJQlRsDjyeFuYWteXYYLW) (seq (null) (null))))))))))))) (seq (ap i TeDXrqJjThqbjvvumvsxSZoZsCAQobteGyjkTCKftksKdDRKtHEsicArjHNN) (seq (seq (ap i RubntYTePbwIVsIJwSWTTxB) (seq (seq (ap i DVKeTAGvAhnzWfKZyqVPDpmYaXDriwPmSmMzVgcAD) (seq (seq (ap i UffUUZYYbizWaKl) (seq (seq (ap i PtLtYegZQVKGJYOudhgjmLzFuqnAlLKKqEDuehSLXFiEiPkUudtqaQcBZHOt) (seq (null) (null))) (seq (ap i rjifttjUjCLzexqMMZekacOjsWJjnxSKIkbeArqmqAUjinfjLuskYiEoHLIfpAKqVnvqVDOPExNaPVqLQLIpGv) (seq (null) (null))))) (seq (ap i EJYPcfUTyUHACquboTCmggrZongfguVfDSINzmKRGjAODLMdvxCtgTrNREBwFjqlAMVglvnBMtMrYlsjpqyVVYNOOOelyJ) (seq (seq (ap i oSOWfqzcBkcnBtgh) (seq (null) (null))) (seq (ap i sFJNluItJgnjGuulCGRksYNjBwLHTNEKbhJmmoCHTSOVVoca) (seq (null) (seq (ap i mHGwrudmxfqdzGNbFAgrRjaeHGKTQPUlhhYiCdKBedRYUnERRAraqkpuGBQYnCienAfZ) (seq (null) (null))))))))) (seq (ap i SwKSNYqOyoeSaMolmLkFShwkqdydkYMpVigtMqnoflOlD) (seq (seq (ap i GZyHHQSpvDMrAoyoBcMOYetuiAx) (seq (seq (ap i dqLmUROHYSCkkeFIWonYaFxKilfuDqewrjiRkaCFHTyCbtWacsoPwzlz) (seq (null) (null))) (seq (ap i coCZEguMcIReShyWBHTjATyolzBCvOQ) (seq (null) (seq (ap i UBILRTMxulPkbuEQpMUcjxBWyrJpCbdQhkVUijwNdwmVvPKDwTiPyRaUCyzewbiudRCxMrQlexyeEvklSsvUyJbjyBrnZkrQ) (seq (null) (null))))))) (seq (ap i Mh) (seq (seq (ap i MqzKJSPElSmcaqOPEOfvcCscJsnZuyWOOjCySyUpbQjhCjFTXBZAkURZKblQjZAQIibkMoCIAshxeVWXjGh) (seq (null) (null))) (seq (ap i LvozupjmfnxdxAISEISlrulNBwToSpOfpweoiRITOzkHmZIftTPnNKCxfljFIIivDxRkUeapRdDXABsFrQl) (seq (null) (seq (ap i liyqqtPAXIvu) (seq (null) (null))))))))))) (seq (ap i eXnAuSrAdCjPsHy) (seq (seq (ap i ehPPaCUMeqYDyUMXdbaLUlirgllHwFogpJloKoTQasfRgaDjADozWMIHTtmLvvvhyxJHkLqfORPOpVCtkzQvJSVbvPAOaoV) (seq (seq (ap i UEqGCJedTGNXemGanKxSqdyXxYMLsAzQnMRqEUPYyCLDvCVeBHjpDqnovRez) (seq (seq (ap i SgRDXvxzpnUdbxbHRSEYvtFqxg) (seq (null) (null))) (seq (ap i TpdhASluYjsLiUdNmUZOuMqXOAVKRAyEYpmjtjiSAsPxi) (seq (null) (seq (ap i SHtDvGiJWvVRNxyLZVOTWsknoZRCJrjsebJGmbcFaSjDEhXguamfieaswdBe) (seq (null) (null))))))) (seq (ap i kuUyjpYGWLSeBJAdaXlfryFGrSvZyD) (seq (seq (ap i VVBLBcTEAqpvhAeHPTDcvV) (seq (null) (null))) (seq (ap i QsrSFU) (seq (null) (seq (ap i cTxMhPROfefTPwGWOKNBzAOwwZPNaTzHMejaBZRYZTeMScOi) (seq (null) (null))))))))) (seq (ap i kXcyanjTXNqFcgGyKRkMKmMPoDjug) (seq (seq (ap i ZhgdHMxZMcIHHFRhPjDacsAjYkoSGtenmIAEOQWPLsMuqW) (seq (seq (ap i VgCALMjgETvxcRzzcCaKzZ) (seq (null) (null))) (seq (ap i UEEUGtwfSYFGslsiiCJcOOr) (seq (null) (seq (ap i pAxhCkknNVKEgkTjflyhRQpQvhUqEMUFIeKbgLfaNurFLDPgKuMCt) (seq (null) (null))))))) (seq (ap i lRfGAUWPcjaDeQCQuOSDRxoiImvFQciYSDsFZWDqeCpqZPDscptYelb) (seq (seq (ap i imbNNf) (seq (null) (null))) (seq (ap i eFBfyYPKnHhmQTZhTkIQOpTxJJsOPQzJDEIwwfoxesKiwyaWKwYgfTbffpkSFFsJXcwsDKjwCYKFCZagGJqhq) (seq (null) (seq (ap i FWHYrPdomwGYubQhreNnMhnxLYEXixtXlwMliwjDbFgnu) (seq (null) (null))))))))))))))))) (seq (ap i NxHfPkwndBcOZ) (seq (seq (ap i WwRcYMA) (seq (seq (ap i SkwdNloxMQKVLSy) (seq (seq (ap i AjPPjnKsHQbnjRQrzPHGHPpcAeeQfiyutu) (seq (seq (ap i HJZKoCiAEvToOwwZavxoXaiEjxalCQxOxbIpKTXPvghMTwcPQZhiFnLUfRtTL) (seq (seq (ap i AbVqOzPOjReLBCdLPukxbXFRsaSwjTwTTSCdVxLUnkXEaCIrVNTWbIrJMpjRpZKwjpGvP) (seq (seq (ap i tAtoPDdhBkwbTFyFxTBnVODmRroLcXbNYOdxSTegapATjraxTeFYFlZfUIQbpJoIHkgcTQh) (seq (null) (null))) (seq (ap i Wnw) (seq (null) (null))))) (seq (ap i vzCfkTJtPXRLQsJjnPJDfgHfyqhyyOMtGZpnLncyDVImtVkTMIxZm) (seq (seq (ap i HWNiZZYUkunbCCaVcpcyIicoXlpJSFHYRpHGSVcAqxsHJDadrECEThbugyvWGlqvlmVxVUHIidNlaxMYkGqENyxFYdbAjecyFj) (seq (null) (null))) (seq (ap i IgJmEfDikFPzwybPFdTFGTgnpzZgQ) (seq (null) (seq (ap i bsMVlVKdpxAV) (seq (null) (null))))))))) (seq (ap i BjfSCwfQAREdJRSdiKmpwcNEzjgyNJyBEZBRAYFMS) (seq (seq (ap i TEUilCROWcqwsgccOWDsdbmEjbqGYxxizCuuevfqqFxVRvEFAZghMnHQOaYpyhVWSONsPbPnCCbIV) (seq (seq (ap i jeEDtuhubrVkUTEbniqFYTGCBtxrRP) (seq (null) (null))) (seq (ap i igzIfIwmgWXkKQJqUDmlSjaoMNNQsTkqZTqExfJGaptv) (seq (null) (seq (ap i IilkSOWxeuZoMtMPQiRwUAmnHMcMfXtffdNVaOLLpVTJikGPjCeLqctnGgeCxOxRqGQstpNdnYlhxVvTUzEnffZGeXpb) (seq (null) (null))))))) (seq (ap i UMcmuSlwCCjwPMhSqLRfUpQZZUGLRYpcuSJnYjWiEJCpMvtFwPzlqfApOFAqDUybTyktSgjJJimejzOFpEpYehaWJDWMjPgwa) (seq (seq (ap i atLG) (seq (null) (null))) (seq (ap i HYcgNrYDwTwDTtHtoImOGIMCIxFMuvNjqvDwJogzPiEhD) (seq (null) (seq (ap i vvacopjfTnEVuPeAlDhSemPCpKjLXioDvEAslorcFyymJTiyjiZejIbIEiWEyORFhNNXN) (seq (null) (null))))))))))) (seq (ap i FYvAmtrHkhrlxnnxFdyAurdvBwFnpamQcNTaxrUdHhqYlzTVpUTAylHveslQbSkPyDxFYbAiAWoqZVDTIgDpwnIHGyua) (seq (seq (ap i pYkdWphIMUQJPXlcswFadUJkdSvGEaCmTfisLYomrlTfTibpDyRcPRJcbfVTJklktBVPonaJaTdfSoa) (seq (seq (ap i DorgWdwbPDQQDbogGGgVrONB) (seq (seq (ap i tXTSltibHFHGcJULCQqWBx) (seq (null) (null))) (seq (ap i RvcpzXNyadepdUOJjuqBlgEEqCrEBbtEjSqcXvKvImYIyqYFEDqzZgDUILlCThnHvlpyoZwuvyfJTONDmjJltcLBpNcX) (seq (null) (seq (ap i wJjTfuXOMXgxfpdrkGaOaccPMt) (seq (null) (null))))))) (seq (ap i mNXSzAkPtuh) (seq (seq (ap i eIdeMwdDRyGIQzqoPjVmacjkstPNdDdumyAMbZAvfebhLjVLnJNxrWmSwLcezDPXKSTAFTYaTRrsqCDJoNCGZgMM) (seq (null) (null))) (seq (ap i NDiZfaePRWrHdBugOWyHxzbnZMnDApObTYCjMoFXFCTvlhzmho) (seq (null) (seq (ap i glIJopSCTYRnYlTCelXaRpcKjeTDaSlHqyNSXlqsI) (seq (null) (null))))))))) (seq (ap i kEQPetMvkjxRtgqGEGlVapw) (seq (seq (ap i ksSMKyoFLjBZXyYZjkpmdJzuJmRCAuKPRoNHYmeITervFnPMeFYeOnzzrRKwPDkumBdJPqhRDeoW) (seq (seq (ap i NGxlZAfmWkVRcnyxYPyzowHGzgXNBQDoOKATHqCkDwyinskt) (seq (null) (null))) (seq (ap i eGwrIkYzgogOOYFaTuBxcVmxmLJGBxdDVDUwWynKmBhWspPCyMUFwTprnxrBSjUJBMIMfYWfOv) (seq (null) (seq (ap i uBmZUzKhDmVRyaOIhhHaLyWsPFOKCZiOYfgcPpWVaVjW) (seq (null) (null))))))) (seq (ap i xhyrcjixWEwefSjBYUsEOpSNbhxeNHuGzCgSVeoVxKOFWCEatCefVUaRhRRbVpCVOuEKZFNSMzBErYbEXTikTNyQrL) (seq (seq (ap i kvqmnnWvjbUfzHIancQoIVexnCruRHCBCFJMxsrYesPhdfYcQaxqup) (seq (null) (null))) (seq (ap i GjSsxbvTvUIM) (seq (null) (seq (ap i hhNCRRvzuROrHcFGsLvUecnOiLPfMpGSkBXywuyofunrvDlTdgvVTGLbfIMiUhJdQkBhMawGW) (seq (null) (null))))))))))))) (seq (ap i MI) (seq (seq (ap i DYGyVlykwwknNjupeZQpxDW) (seq (seq (ap i CVENHgbySJBDuSkCxcqHFPXrIywVUGkXMqEuBbcMjzNgTbukWfOHejItOxfLQHlhTLQ) (seq (seq (ap i mFqIJFRdlTFhNFtWFHdMFYMtNECgFiLAsdRCeDcIkSbSoSnrsFIPjeCFHkFzBYDZafkIezQpDdOxGWQVfyXrdwAvUeIxZpjrtSKq) (seq (seq (ap i cfTLNFffhEBUWfMEhJVhzlNTJEJDBwaAcmIlWdIFjorYEolBnIuGbgoTczEejocvDnCRxNHiQbTiKHYtbQxfJnN) (seq (null) (null))) (seq (ap i oMyuuezyGxprQZfkqkzQxhUHIJgkwYsVvhzAINsflsexIkYwGOoKDZGD) (seq (null) (null))))) (seq (ap i psXfFxAKWydHbiQxRkFdegoeki) (seq (seq (ap i VrgHKmnEESOwnGWdFSIswYVuOYNZshLYcdHRRhdlgLHAVpRDMWowpLdGjIHwBowxgqiopz) (seq (null) (null))) (seq (ap i ZxMHGkchAkpqEppvmTiOKIsLDFyXhxkzYhocVvfXpzifJbreYiSJc) (seq (null) (seq (ap i sGrVWPpokMqGF) (seq (null) (null))))))))) (seq (ap i sKMUXFzMYWcbfhsYdjhSZGaOfZIYjyoIvCkAEIyIEePo) (seq (seq (ap i mZHoDkQmAyQzGeFSBBRYVJAwUVKDHGehYpFZzZuXbFyjPRFPFYkvYaLBdjA) (seq (seq (ap i qmZkAfWAddkIDQDPdNkEPGQMsTKZyeVCiwyzpvDBtutQRcmLYcFYHIIobuMNpenBVrFAKzlbjajqmJPUzqYWNvGYKQWjQ) (seq (null) (null))) (seq (ap i sQpJWYshClFToCOhOzndBnOSAZdorbUXrkkbgqKKmGCtRjARNXUnVxPlOGznYJedZkG) (seq (null) (seq (ap i gRC) (seq (null) (null))))))) (seq (ap i SfiqlVxQRBTypXubWuJBttPkRgkigPMvHnYqLTZUmoAnKcNnLFVmADLRYCDFru) (seq (seq (ap i DowQtUSeQcLBzAOFaqidf) (seq (null) (null))) (seq (ap i kIfEiduVPDkcWHAdwMDHuhojogUCrQIFcsNmZUVMjqSjgDemfgZPqQc) (seq (null) (seq (ap i VBrceACZVfAFdGRKJctSwYYrOLPsnmrvfcASRWFbsfwzcpwtxmXADvmxUWI) (seq (null) (null))))))))))) (seq (ap i vzmWQHHlDhtIfSgUeaEQMlTWNRTxgYsafvN) (seq (seq (ap i XobZKypIgxuaSYPZTSnvUAfabEHvQChmEkLdqBjAGe) (seq (seq (ap i hsrfdBBZYcjvYPHqoFLPgZigVktuApyzUjTqNyPNhlqthxHiZdOVKKDmV) (seq (seq (ap i vqdnPeQRCBjfLkWlmiJKvcpRqusCdMBtGySIYLAyN) (seq (null) (null))) (seq (ap i HtgHyWdFYnyxARedvNCZgFiHdctUXpDuElhzWgZurrSuyllnfvDKybKJpaJQN) (seq (null) (seq (ap i WzvRbkvmvWPuItYiMmUkyLdXPOhrajnbzNiBzgYxvJwfhRgcFRCsazMHOlWjjjIVbWxyNTkVJkqmuykjYkeomZnJ) (seq (null) (null))))))) (seq (ap i MXCDommJfmVwgFFCUXRrrjhmioybXFzkyRqtSlRHZOPLGWIDtDJq) (seq (seq (ap i cEWe) (seq (null) (null))) (seq (ap i AxVDyfNDRZnTRXKpFSzHOLMMUKGYbhQqMseJM) (seq (null) (seq (ap i HTfrbAmlcFYZyeUEzUilAoOOTLxpQdFJarpDoEalgxUFolSiralCsfUqFCWLiAwbylSTfAWHJvdNtvTYwgFGpVuxZOpqFNJYZXmW) (seq (null) (null))))))))) (seq (ap i EwXHMbWQWpfHvPIQZlxaeBQVHxXYwfjQp) (seq (seq (ap i WJlHgRDzlUFIPcFOnOVnWWNVcPsZZvuUJvIwXAJqURXmYzAyMCj) (seq (seq (ap i qrBajBrjuJJduxHuTEuVmioTveyqbGazgaBrBqlpNcIEDgWbf) (seq (null) (null))) (seq (ap i GXJwSGzZzNHjjPSLnzLAPjbUAxXBKOhoxywhmsvrcsFaGwJYCUFRUR) (seq (null) (seq (ap i SRVOEDOCNFtIiRkCYYplYZRwqcNTJnUrpEOHcgoIfewcLwtuPboivVaKrdOxeQpmtSnpZBQDRKWufHQs) (seq (null) (null))))))) (seq (ap i iqiotnKcqhtmoJLRjTtPqzwlECsTWTcNhhhNKsSGcXamibqNXYzMEPtfsDGGKwDCcjtYsZKUjw) (seq (seq (ap i uCSyfIngcvhSfGBHoYYPGgwlqiSwlHiXBhR) (seq (null) (null))) (seq (ap i GlvnxOJEhMyOyCGGHdEWYqFGAWkgzanlkXuUrGkwSnXMeDHWnwNwekoAZgCYRRuLwJBSZpnJUEKuEYvtNtNZrziRGPrbUdlbMl) (seq (null) (seq (ap i Uu) (seq (null) (null))))))))))))))) (seq (ap i oAWtZAWkiPINOmpJsiVDOEKu) (seq (seq (ap i RRdFXNmltHU) (seq (seq (ap i dRtzGhmFJGPkeASJuryMDdoLdixqinFiWKgnXLBXdIKjxWEgobwsMEVJwdsQgDVJlvWiIazpQFiYdeGephYfNQkswSoNpmwTuPY) (seq (seq (ap i nWbRKFrgxbwvmnBiGFEsQnTrmJgTKFvZHPilLvXOLYSUFxIjiAZiTynmoRwJdHrdRIwEMHVxlrwvJl) (seq (seq (ap i hjutOaVVlIMOtaMukKNFfPNnFhMRuqEZPuumcOdklNVzDXUjBYJBCBbTdIpvfiUTrpxZOU) (seq (seq (ap i LEVtNDRpQUiiLaqejJPcbAFLelLJTBwoCzLcaBpJNFFjrQbxaJEqKsJMLktbA) (seq (null) (null))) (seq (ap i ESTYDbtdaJJNZQcyXENLRDlseEHWtKezmoTKOtpPLIbwzZFb) (seq (null) (null))))) (seq (ap i AuTmJqjVhwxciZiXbFGKJYdtsLOXbnAXhQIrFenIJFaxdbPwgUYNlrCtwfuIGpiaZtUDQLhr) (seq (seq (ap i hUaLWDtEeBGDyerhjJjVCIJndPjCbHGjVuHOUGluiMOXQwburYTxpJtWcAalAEXUiYqbCLHxfEomrFRiFLyxStH) (seq (null) (null))) (seq (ap i RGouFZeabBGRKuuSaeazEspwiCvycRcRsbpTruVKfCKlnVjbmS) (seq (null) (seq (ap i UlCeWgHEWbiJxwfeTHRPWOeXBJCyaqZxrfgPCtwfBRcytyoNvXta) (seq (null) (null))))))))) (seq (ap i jxRKvkeSFTwHdqlPlXHCqqjPVJCsBuddIPJUPdtscFxGUJPMYMACYkHVmgMDSIlDpFHfVzMpWetGkTjoOFMdEsFVIYRo) (seq (seq (ap i NoMnBgAMzCruMZeqVhMjLFgPOeLnqjLVBJDTZDHCZXFROAAGUqMFFKTfUGmRahNtneDLPckljkVXEtQXQgHSUYQxTKNmTeNiRsr) (seq (seq (ap i KKLHCidGGRrcnIjTtNZNERoxJ) (seq (null) (null))) (seq (ap i cdVCEpgaQjVuGewxVvtNfTFfKwFEAkHHKhdlC) (seq (null) (seq (ap i MLQjBfcVuQzk) (seq (null) (null))))))) (seq (ap i ENWRHGUwhoBCWVcnBwiDgAnsGyKihIDXIPoHaZBaAuASAyIpaAVownIkhoWITvNflYicighlZgWDLDQKGzYANhDyv) (seq (seq (ap i KRqsFzjmrTGTPBRtabzbwjGGqJaPqgZVmefYuAflPHMKJUhHkQgRYJWkVlhbtrHVaUykBSWbTLJVJDvkzAiC) (seq (null) (null))) (seq (ap i GVyLQcTbsvfSGUEqiaTCNFlsDnCnfMQccRrorIfbjoHrRmBvQfMWtTubi) (seq (null) (seq (ap i fZSJcfCqZXxvdutujlMiVpJxWukygcWqfsdDAM) (seq (null) (null))))))))))) (seq (ap i OtmfOoSBAEgqFECDyFXEUTKivdTmjrVUYdPRlfccvrQWOnlwo) (seq (seq (ap i ZZrACsXLVSCF) (seq (seq (ap i AMnixpBrjbRFNhsLaATSFkZiweWVLKuiSiwQZIyHSvBXNJOhFkLiIZWfSJPjQUzkOYZjzzykDVnMnYmGKYeTtQezHXOXMXX) (seq (seq (ap i ZwMnGyRhnQejlmvuutEWceNPQHNBBWmniwJYhQcgtsuAMlhQfD) (seq (null) (null))) (seq (ap i MmOTnBAIlLaHZJJkeiZnmEMXtIqIdbxxLv) (seq (null) (seq (ap i mQxZcZYnlqlBdDgqemqIStdtqiPaHUTtFBXHdnFVRNVcAfd) (seq (null) (null))))))) (seq (ap i lRxLjryxPOGweoHxreeiRKjdGQuQpGbHbtBiYnPWRPiHOf) (seq (seq (ap i sRfrfGbDVifpaPTVhIMesmN) (seq (null) (null))) (seq (ap i EVRGLJk) (seq (null) (seq (ap i NOifTKygHKweApFJFGnGugnztfnrUarluILLCTKYRGQwQAEqdZobq) (seq (null) (null))))))))) (seq (ap i sCeGbLI) (seq (seq (ap i WjSbvCJHyJIYLmwjeMdvSlALyczdRLqivUGdBsUKRZBdyQIEdwpAWpfVIYpAEYAjagXrLdONaNRYuuv) (seq (seq (ap i RqYOPsLyXYXOxm) (seq (null) (null))) (seq (ap i GmKrWNsNjGisAtrBfiRYMdQUNYNXJOyeTwpiMhvVKDWntlUEMQZxZOQfmJoSmuOZYNhFbLitomrkaHIpynWQpej) (seq (null) (seq (ap i KHDmfujPs) (seq (null) (null))))))) (seq (ap i UtCWMfKHTdxWmQHQrIrBkraDlPwipGqLfhZlWLDhaAVKqYroBnfrrOGAGbIuQvogUHZgiFnWHercfNiTogSMHyfuOmnqrGw) (seq (seq (ap i VTftAzIGHyVECeCCwzBuNxmbMElxADzyNcGJsXBYcrWGMjiKoGqApUYkWaQfItvvAnxSlcUggeyZgchocVOtOiVf) (seq (null) (null))) (seq (ap i VYEbvigqcngJYFDGCborUPMnRRyrnENQZTAaVb) (seq (null) (seq (ap i tNfqJpuxhuNaroynrqdSHAWBspRfRBJsmKlgHvxcRfOUtQrljWYFAukAfobS) (seq (null) (null))))))))))))) (seq (ap i UhuJPUYSAukaqxkVGTDNVeyNQNaeOXhvyUGqBOkKRUHBMalgxXhuvkhtYEHRFDQLZqnxmCezOFexjTmHeiU) (seq (seq (ap i KNfhiBQQRzTlVMGHQhfeKJyRVorgbCBWdgiFZJLBrkQuPCWnNobEeCKBbKXpySbuuJfRI) (seq (seq (ap i ogiCFWPVtOicVzXswuqYnUZMuE) (seq (seq (ap i YXAiSMoHNfTbtknSEeiTTVHOSsLixrnDtTZafyojUxopcrNxtsWcaikDXikEyXKqhaysFtcjlN) (seq (seq (ap i xTuOUD) (seq (null) (null))) (seq (ap i DbokiGIDNInwGzRAwOiaJtCyxkouaRkyjvqmHMUqSxKxUiBHWMhh) (seq (null) (seq (ap i jTebUwftBcjfaRGNmwSueSVKSUOFBujYqTxTXqeRdstwjLchMrxO) (seq (null) (null))))))) (seq (ap i CtvkwrNUNNCdjZOOYhSEoSQhnoCDfkBQIidriMoGGoInlStABvEWpBduMhjwEhGqthFPEfwEQRVUBlrDuHbzSKRMUQNVG) (seq (seq (ap i WMUluvyPfymKcWzZLPLLKvvVdWZQaWcQIigNlGXpgeSSZcloCaWSRWPQdZqKzMhUEtXtdvxVsCxvPhhzGAzxZZmdlZ) (seq (null) (null))) (seq (ap i KbQajZILZZmOpJCLEhddXcTNXjRqAjuSjdeZwoALUuyhoxTRiACFXtXSaPbTwdmDMkIemhknYIAqqjZGwbRko) (seq (null) (seq (ap i LaDluomGNeDBfSUyQacoAvLf) (seq (null) (null))))))))) (seq (ap i RTPteIWpddJUQUmyGBfWxqpUVMCXRqInffrLOYwvzwaleqkpohYhcXpXqDLjgTOoSSEHzrcgFYpwxyEIzAcQEvV) (seq (seq (ap i SbBUhRBsXfqvAtFMhvqWkQyjSrXiKEMy) (seq (seq (ap i krNHCgK) (seq (null) (null))) (seq (ap i ARlgQjjUHpFjTzDbSPxJhmXTXIRDFLjdfDYcVJCnNcSXfVHB) (seq (null) (seq (ap i QafHeyZQGKewoWEaBibmPvjWHJFgOxEPocPVxFTXxioUrxaq) (seq (null) (null))))))) (seq (ap i KlIqgcjEdHCmlxjWhtqJkvuzldktFnRmeamFkf) (seq (seq (ap i qlhghdmQDfolsgLxMWvEXcSIoiwuLhkYZGNjWHLyM) (seq (null) (null))) (seq (ap i KqCkpLbDEBZovbMqFKqYjvwMkiafCMQjeWLitzuJDTrbSspBdfhVggmkVrcKflubsBZbikSWs) (seq (null) (seq (ap i PndfPsmdTHfEIkKDpfAjlOACWyqcAodCAAiOWaRNrJEiTrxX) (seq (null) (null))))))))))) (seq (ap i ntVfdCwceZNZzNf) (seq (seq (ap i MkZVANnmwDdzuYknOxAPEivRrlOtglyaZrbnpsiOvdwrr) (seq (seq (ap i mmPIzCDmjThpjDYkwKwUfygUdkkjoWyGjhSJsrydYzHxnrTGtZsdaubsD) (seq (seq (ap i ihtLsLSfkIDHbcBDCdhxz) (seq (null) (null))) (seq (ap i PpJkCpxEbBxRgHsYXeEtfQQhEbfDqtGQvPAUZPnOvXzwAUYrQfRRGKccMAhbJIwUuiiCEOrzvVFViznFdWB) (seq (null) (seq (ap i bOXeQTkdWgrzbagvBTPiYyp) (seq (null) (null))))))) (seq (ap i XzlIkLNVOmAvLecsNTJhXOGzjQZWJlDmnjfWMGTTuHgySVOqSRNORoFIBWfyduAwsnrJJnIgHlskPGtuTxYmpKXKGfBHNzLdV) (seq (seq (ap i mWULRIMITTJOESMCsyGqKvcsMEsAwUieCmgbSjRnWfSCIaUVyuPLGDVfNkwnhcnfeOjjnhytgHmsvoaRdxUobaT) (seq (null) (null))) (seq (ap i CSmSBNNThB) (seq (null) (seq (ap i NSDzTggscdYRkOyHIOcBuXiiEyjagaeLIyspvZJQbMoRExuMGkzfcJLST) (seq (null) (null))))))))) (seq (ap i IjtwlTrQjQRMZKVYtQZqyHpCxnvFiWihFMuCJLEoGhgpMfmHvXkwYTYBLACicFp) (seq (seq (ap i fThvcPewNnUBugTamhCCpzbjBDuOoIFszwrPKrmLsktEhCmx) (seq (seq (ap i GeWfdYPAaZaSvmonUjzuQtQOkjEjIuIMuGyjouCamJAsUF) (seq (null) (null))) (seq (ap i twRjyqRmgwBohAmmfxF) (seq (null) (seq (ap i TIdkSWiuqNvPgUDAiRCUyvYiStZTJiYuouERlbIVWiGzMERaxBgPprr) (seq (null) (null))))))) (seq (ap i Ck) (seq (seq (ap i oDjyuxKxKVbsLNjjFOIDXwqpQFtWrEeOho) (seq (null) (null))) (seq (ap i pamVbcaozzYYLNwFiJSKbDo) (seq (null) (seq (ap i fYiEKwjCjuoQedDXxVxUWSsJPsiPIsS) (seq (null) (null))))))))))))))))))))) (seq (ap i AQjtlyqwqlGBNsoBDYBIHoVjqevIOQQbVGSdcFScfigAjAwNEWyAWRMMusRoepcGOkeDXGiw) (seq (seq (ap i vKJOrQbqVkgidkehmLHjWrpuWzn) (seq (seq (ap i zSqbozrYcwBtmrPijbLeydDIYskGHjPQXwZEklhQyHjiyfnHEBdqiIucxISgYEfltHQSXuSBFcQm) (seq (seq (ap i zHEReNffFQsygEjVxMyFABCrHPNTBjkibtIZbKCnnvTuQhqPRZsMRAyfMiKVoMpBNdfRRMZKWpVykbgdeAkQfE) (seq (seq (ap i UAQLaDZIqdXrrypkktflTCgjrPeZculXGZQwajjYYVmBAShzwCBZGfcrwXwoPryzCfihiZGlFMRpIMyocpzXGofDWNAgTT) (seq (seq (ap i OCWeC) (seq (seq (ap i HJQCnYaBaAaCNMVx) (seq (seq (ap i dYYCFavwAFMzzhJMLgdJcCluKajjNIkhnFWVlASkyYLekvRjMhwJBL) (seq (seq (ap i uhVnWYRaZBDuqpbrpNAjFSK) (seq (null) (null))) (seq (ap i ZGBbFnlranFbku) (seq (null) (null))))) (seq (ap i fkMdtkPvaAxCOiIERyoXvRdaXHDZxuSZxw) (seq (seq (ap i RdQnULpFwVRAHUQwESZAkTwWShNSsVRWzRKoZipBJVSWoFbijPtDvhritMX) (seq (null) (null))) (seq (ap i uoeKovQVqKHoZoSiKTfO) (seq (null) (seq (ap i HOzqdOKcBwhmsrVlcagtXRCeKSUiONpeKSlKCnrugLEuLMqhyrcMWvgLGjRVdDByzBPfxOAiUUqNU) (seq (null) (null))))))))) (seq (ap i ji) (seq (seq (ap i boVxngExEpALUjJIdJmkJgeGAaHpwoATLgYqQDEVDZpmOmuuqlxQQN) (seq (seq (ap i dJuKWySIzCC) (seq (null) (null))) (seq (ap i FibXmCQCVyznjcDDPEoGRCTjmmlaactiUoBUMzgPhiXuTvndElfVlpBSIxOzbiqVVBzhNchOOTuxrrDyj) (seq (null) (seq (ap i pyrUpAKqomYrVTbzUJA) (seq (null) (null))))))) (seq (ap i wHPCDyBASUyoGixGIxkiPojvSNnZwiZWEarpAuvZSlriEsYxISwBU) (seq (seq (ap i DqjORiNTyCBDqHJnmJEadCrSMhnHuFpSKUQnPIcaPORGyEONEAVRWYgLRBMmdiG) (seq (null) (null))) (seq (ap i FXgbwjLSlHVoyaZOizZCaUDaGsHpWZOFBpROQBTLUHzGQTuluUqbZNHmEJwbtTQqrNLmHKpcJuuKXGonjmhHIyiESIfuhRg) (seq (null) (seq (ap i CnZqeSzyNUfSFAquXAwisElkbdiDgA) (seq (null) (null))))))))))) (seq (ap i DWdtjesGiibHIubAZYAgzmRfRibtBiBxkGaOYXtDdVYdcWsIqmZpemiMmraqMGUSWqKNQ) (seq (seq (ap i UcUavqcfErnvoaGdYajgVJIhWPOvEiTowKcpqIEIeMaZqhUvjbHWHGograKhJTYyWegOIAAMIFwTgMhpWALUJOTrcSSwAnCgO) (seq (seq (ap i ESgbmoceUlFzWNNHmxSIlUbAsVIfcMSBFStIAVkEXtxsvdqdSGleFOrDLISkEcilsIFWGmXDQqTVLiPZGNAHzmR) (seq (seq (ap i YEbjvNEojGReZtBjFLExBLDzAkBpEsnyttOaMjStUZinyfYvNgblPxIEECAvDgrBbbYHXPoxHhQlEmNzk) (seq (null) (null))) (seq (ap i mRHxBfEHuxIjSudgtirikwnXhcdZyrTQGEAkWLLeAiemAdjFQwzzPkljHOibuDdbDhEYMm) (seq (null) (seq (ap i ClYrrTWuqERPUXWnqPUyp) (seq (null) (null))))))) (seq (ap i UoEEpECazLmQdAMAaYg) (seq (seq (ap i JyhYFrSnDIUMuoHdGzCePyIRRNEqZifvJnqKAiRKTweAYBUkbZuF) (seq (null) (null))) (seq (ap i UvyLKqbVxbtqhniPwOjCTcyQYgaPcTNSPQfZLJyVdpOtwaUejwwyuQaPGFWPEgy) (seq (null) (seq (ap i BvsLzJDiTquLrGvZWMUgBlQasZqWgUDKPogtFBzRzfWKrbbANqooNtaKpGyloWNnFYViJDJLVVCdxiqyxXwNiuMO) (seq (null) (null))))))))) (seq (ap i EPF) (seq (seq (ap i bBhYCIKqUKdkoYsBBibjlQqGAdchNAwfaBwZUliXyedGoKjzGZCSrczJwyidMbHyZvEvrdameuZmblnwruutJrdtHdq) (seq (seq (ap i juASUWRdjhU) (seq (null) (null))) (seq (ap i gOhAJOgwfPbTlAmaGGCzVSDFTrCLPQnNPMSdGmAoawpIGYFxnSZgxnvWvnjIuOjUZKlIj) (seq (null) (seq (ap i zbohmyrNCHdgalNHKXAxqVegNTh) (seq (null) (null))))))) (seq (ap i naXMVBKPqVlcgovXfIdYfYVox) (seq (seq (ap i TahENYhZEZyBdVDFdzH) (seq (null) (null))) (seq (ap i SzezPtPNYqhccLCMpbVuYCe) (seq (null) (seq (ap i DJbeCbaMmqlRAgMLjtRppuIiSvVFBsXHQcHFCILJXpGHlWdMtcC) (seq (null) (null))))))))))))) (seq (ap i fxbKktafLQukrekAMBYErfHeZPEClYqlJW) (seq (seq (ap i wAjxmqKngoSXbCynvgMkCQAxurqpGYxmSltzsmTEkvbvzyUzLeookQtfEvjoZKxvTF) (seq (seq (ap i cqqwxInjjQheficswzzqzXRYTxTIHmyTOcacYHosXCoOa) (seq (seq (ap i bekRPGGLdoGLiRgjXaNppUvfddUKYVugVolFhZoRYhWtKcgmForFBzvBcxqCEIIUMogBDXfXJEKtHNQro) (seq (seq (ap i qCKiGgnwLsi) (seq (null) (null))) (seq (ap i OYRXzUZlRQDmPmZNPvqLbJqKZzuglFdrrLPYViTXbjvAyzrNqsMMEeGPpptZNg) (seq (null) (null))))) (seq (ap i agJEjNdlPQkrNfcmeDQkqqMlPNKKxLGSVYJewsmvxrFKkZVdrfgx) (seq (seq (ap i FjPxjxXwjvgOeFStYeHDMDPpETKe) (seq (null) (null))) (seq (ap i kxoBPkhFjDaHJNSPJxTiElhVdLBwBcntYmubDrZUIgavZQPHrTvNIdCvRUNlZCtfRnUyASOJB) (seq (null) (seq (ap i KOjsXlFunpC) (seq (null) (null))))))))) (seq (ap i ZPIpphZMWyBlhcaq) (seq (seq (ap i QfUntCbXAEppxAenhSXTVyIYSkqZgadfhBImGdVJbIiwSOLAPtBYmHHszjeHVLCslljklRWfMgRdFmNLERkdaWVUUzwGks) (seq (seq (ap i UJAWDzHqOCHQYwqlCzNmtvFeJ) (seq (null) (null))) (seq (ap i vWoBGaUKsXAKKLXhIgfRUUvabYwsAyLZpTMpZDSwOBOQlXvfVmEMvdzwgpWEpGoNlcQJB) (seq (null) (seq (ap i PebSkURjgWrCZuEuthxzsiqeehLIOZJxePebQFkTOaooRgQqgRgXIWPuBx) (seq (null) (null))))))) (seq (ap i DPNncVqjAVKLhdpklBibfVfrHHNlOlZVREAdtFOufYEReUxMlchdLthuBcaaTIsKyehdXYgTIyzmIIQxZZSbW) (seq (seq (ap i akxzlpwXWWlnevIgUIGGbFANxWCDmbotcPEZgoxFekSemInfXjbsxXqnfk) (seq (null) (null))) (seq (ap i yXDkaoqKWoDpKZWzXVKsojqYvTVTOhWFjsQUlBkHWtZiClYHjtQOnWUuiTpyAGGrMmOAgqhbwb) (seq (null) (seq (ap i mCbTEzueWaPZawaX) (seq (null) (null))))))))))) (seq (ap i uzupcGqCPyyjJsGRUhyXWZBIlzPytUPxm) (seq (seq (ap i cJmXlGXGmpctdPubOXEinKQiuvcAlXEmIKipBaecgkdziBfdpFmmMxJhFODZRZVfwgXsaprCaDWzlOEcmLbdwBVvxIc) (seq (seq (ap i BDfIVZjnhBATKWBVBATRZrLbVEOqIxYUPRIoZ) (seq (seq (ap i nsfGkqRokdAxiRfsoFxapmjDObqnoqvFfNElEyvTnCGeybSNPrTWVuzIzUcLvjllKEgRvHzlIMtZsE) (seq (null) (null))) (seq (ap i KUQpeaKfazKoJVtWMhFYmZRlFsVXOgBKUPNdzEJoXcqCOSHjrzKUhoOOpKoWTjEbpzJxwzXIdMvzNrTiyFGHskqh) (seq (null) (seq (ap i DqdIadhwbrVauPwQqNKPBOPSDuFmPlSiRMzguRrvAwisrArUiJUoOxePhIqgkEHFsluVDJVUFbpdBXLk) (seq (null) (null))))))) (seq (ap i YIkLTSHvBEbKApsjcJlFwikaVKknPHQtCYoogzNNpCyAcmhjdcspqHuY) (seq (seq (ap i NJspXFLdwtkaoWhblnKbzr) (seq (null) (null))) (seq (ap i AHumkAvDBHUQKiWilbamRyaqGoGBJqSoOEkjPghtJLxeZdNODjPtVAAFbeeGgEePoxdPAmaMGzUBojMDrk) (seq (null) (seq (ap i iRomIGvjortNTvtQacRHfUmznBaImGSFVtOzVbSIPqjFUfoT) (seq (null) (null))))))))) (seq (ap i sGnRlB) (seq (seq (ap i GTxIBysNHlazBywxnTdCFZTloYBtqhwAeZyMzUuaphWFJTaGBfnNXmYkpjZHRBFnJkMRELuDPISlMrNIRMaRz) (seq (seq (ap i mJKUfVKUXwBOOvtLulwHyytDpRRVoPTxsDsEUcazhtVEwoPODrDikHiPYwfBtpLnJ) (seq (null) (null))) (seq (ap i PPkYlqZgMRZqZybWoTJUKNNtNtKqFXmZvrVlVPXScUncNCFbHIGeKjINkMLKnDkPcpPGzuJuzwDtTLyVDIkVO) (seq (null) (seq (ap i KHtQXfoUYSythjvgvTQtwkDItOueXPtugfmyKHdBHHMdl) (seq (null) (null))))))) (seq (ap i egICQLOwTFyQaihfyQaevSHYySeJMgfokVeQgIRameryOGRRGkUfJtEJFfRkFnmXnYCZpmZsrPlVKXSAwwLIWbGB) (seq (seq (ap i TTNqLjqqzNTXOctUgLBwkZaKkbTWReMBTCOsTItDXDUKhqJZIRBz) (seq (null) (null))) (seq (ap i pxvMchHUZnwBEIflTIHfDUtyJFmxabnFgccoYrxnTTnnlSnQT) (seq (null) (seq (ap i aks) (seq (null) (null))))))))))))))) (seq (ap i iOyRNaQbXgTktGrOVfStlrzuJjpiztk) (seq (seq (ap i oBQvlcuFaQeCSQSbwzgnzJwQIOlAdELJVeVgAyUbSkwhNVxLjbDVyDAZvapQveEgXwptYwGONJgiOHjyECJYIFRmbfeN) (seq (seq (ap i ZQZjklAzisxueNcNaAFZrBzEpzvaPRCJkngZqYSZScHAfewvvdKIZdYMPHMxg) (seq (seq (ap i FwuZolfXDCRVuHXrCJXRaAVUBOHBAqcUgRopJWFQfPIyOrSiXzUlUFFCICfpHkivPiFsrsWUMKGkJKtPMDMMNxtHzLmWmmrtAC) (seq (seq (ap i AYqBpUmsXTLRzjsdCCVJfTKPYYtvM) (seq (seq (ap i qsHUbAlFJXYgcvAUc) (seq (null) (null))) (seq (ap i QhPUQJGkUJxWEGnbuXsrQutfWLiCnhlReCWNDqQLHQmXGCvwBcCGmnxCbCpXTunbBFJ) (seq (null) (null))))) (seq (ap i SwBVAgPOTALHpoKHmRCQyXXlVImzWvpJYUUtfqQzuGXiEhGnMSfdGRRBaKB) (seq (seq (ap i guAVbhzXQ) (seq (null) (null))) (seq (ap i LbEyEhWGBelzNVedgcQDoNjIUhzrTmVyMcoJribzsNfuuTWpppOSglOiJoiMwef) (seq (null) (seq (ap i LFAVHZEoFMYNvXRUxKdNhnPHZfIkmikXqBUhCtSsFcfzLfSFEliKnxEVtpaCfYlzTLLcBgCLBBqCfKkSoZjciyeeBEgmsfLg) (seq (null) (null))))))))) (seq (ap i LBFfvlPehBMLtOgTDLHLOGcdkRZa) (seq (seq (ap i EKQjLUwsAGFdYKenARFxBxZeForGO) (seq (seq (ap i FdnbzupZZYToDoYXvRfkAUaXrKxUPekPXOSrPVyUHTWJeuOY) (seq (null) (null))) (seq (ap i wvgayuDyQJATfTBuiKBPFyIVTdRtWQicXEDxJwwLdJXgumsycFmKDJTVxdNfgzaIwdfAUFavaaTjvpfaqXIBWwumLuEOfIQ) (seq (null) (seq (ap i nbVORuevqjLCOPG) (seq (null) (null))))))) (seq (ap i OfkJtllCaFDsojDRkyQXPhAIfVZHEJwHNLqWcJIkNkCouRGtIJdolLwd) (seq (seq (ap i WhmroJiaXmfKGHmCHtWbYlrejiSOmVHfKsvKbbbaDrBwSUGZrkDznxFmklLF) (seq (null) (null))) (seq (ap i YNndfERJjnfmVxxwHClihcKyKIeRgJpdocQLTbzeGslzvfyuTdqskJiwMpJlFfCrIKyKfwFbjkhn) (seq (null) (seq (ap i jPlWzktGMqgdCJWvnSqMJRfxzcezsPrFbnvAtEtSlrUrplGFwdifrIGkakAwZ) (seq (null) (null))))))))))) (seq (ap i XTsTrMdoyUMEyUBkYRZWqrTmmftabRPuugQPvQmTjsXUEXBtnHzAxDhbCwLIQIMU) (seq (seq (ap i STiaKyYzCQXueLBuYEonPlXeTWEKwnUgLOTXuScGAXvmwGNABCIGJfCizDbLwEOGTGxhyXGoTXZHy) (seq (seq (ap i JqyUGWVkAqJJfzRTQAkNdqxntKEvjEcLwIIMjdbnGVVvhzEDjSchrYwMFxAcjzvDRKwGejdFGgDzyqYPuuNryMdZRlS) (seq (seq (ap i hBpOuRrsovRW) (seq (null) (null))) (seq (ap i ZNHzIrJEgYwkRXIzbDWRuhuJWy) (seq (null) (seq (ap i ZcbYOzymXueTvaCbWOKpLObYqHsITrPGbtdGUWdvqxFabtMgIsxgosciEFsmbnkXn) (seq (null) (null))))))) (seq (ap i DNhlcxlqsiOFVktnlwNQOQagtERyzulFTctugkMeiJvzjYukwmGHzzORSAdpTujlAwnmoqt) (seq (seq (ap i bHoZVKeGDd) (seq (null) (null))) (seq (ap i PzMpVOdNGrOOOaTvgLuQHcEIEiaqfCFEVIbOxzFiINbovtJIhEbsabYLaMVAREPaPQgKBSkNgpAdLacPPxaaIqLPWvmrW) (seq (null) (seq (ap i irbMfzJ) (seq (null) (null))))))))) (seq (ap i bMvoQGUPuEUMpJrhXFignrCEmtWVyWWKVRcSWaJeZJJfDPtuWHnYgCSwZgITxuVXOgdusAcDIMMEfBuhwZqJPZHciV) (seq (seq (ap i oetkTmPOKBbvuOJQXaaUSurYagCPXpvPQwxOFpkxNgzTByciByLaAhGljtHAFAkvXaRtLzSmTOpVgldzNxMppVNz) (seq (seq (ap i pDDsgUVJKPUPaMiAxNUvXkJxEUSVokwRinVpbqKERGNEpqSqPNudtercnwkIhPUrLsVwEFENcSxysWtrtyCrSsqxJysMmJMRQd) (seq (null) (null))) (seq (ap i rXPqIwFgCQhzCiGoDIF) (seq (null) (seq (ap i SVKwHmqhXjFgjAFkjTUszOTOwjAIaoIuVUJrWCr) (seq (null) (null))))))) (seq (ap i vWLaMTWAseynNjGJGwzUeEIFVUVkGxHH) (seq (seq (ap i eXdPCJQMkvQLpztBHbbtdEtyQpkNyDTrUnNrGeNQLtsv) (seq (null) (null))) (seq (ap i olAWXnoxruXSOPYxFiBkZMS) (seq (null) (seq (ap i ehSEhxzyeIgtBWNYDJQHdULfDVndjjzeTJ) (seq (null) (null))))))))))))) (seq (ap i cItIrNwiuHwwYwGBDLaoJjtHnRdUxTXHufTgiWIKsdwaJpNewQjIyiqaLbaITKkcF) (seq (seq (ap i EWOOjmxOduXYMjqxVRAoTZGVdYrKcvNgSqZnUmLbyaVEVVLBDRY) (seq (seq (ap i CpKYSRxtCWLTYXGSgI) (seq (seq (ap i PCxTPSBsXCs) (seq (seq (ap i VuEYYanXPNSqMWb) (seq (null) (null))) (seq (ap i lEokCbahcshblLYiSzUQkRTcuYdKDrNRthUlqWnpLXrYnyBmCthhAdenZLCrFZDMXZUdYnWUtfVzYdWEhUKkdmoGGK) (seq (null) (null))))) (seq (ap i qnXiYKbFjiPAtazpTMeSjUexzHKQHHtLa) (seq (seq (ap i sJdjyhNRBaEAsDcrXXfAuwRHXrohhUghsnkGrnFNcQRaGomhMRaUpIKTTdIlKfcrVzMYxFCIEvPrDDVJCnYALiFfGXRKhHAhYVJ) (seq (null) (null))) (seq (ap i lHFbZDuUumTEteoqozcoVtoBznsMeGr) (seq (null) (seq (ap i PIOOYUwrVRVkWPxeJKpzZzmHPNXOrwMjd) (seq (null) (null))))))))) (seq (ap i twfzAHYPLyCClOSzdAHYMhfGTVtkBxRwNSRszbITGybliVfqjdZYrdIoAGdaKESEHlNUiynUsbkFLoavrmaASrSS) (seq (seq (ap i GPzvbgWKr) (seq (seq (ap i lAbuBsXWCykquaTzIfpDtQKLVOxzsEzfuHLwrxARLQWxZdIWtZmZyZcBkzLiVcifhbpyqgWhlohanWklHxJMeEbYkPD) (seq (null) (null))) (seq (ap i HNTejNsMInHVGUcpChQzIqycQQBHiQsBvVxEMvubgDWiFVwDkZrJWndiKhwZCaRHXnvRwZZKjaHLZlazYnxKlAbLKGAw) (seq (null) (seq (ap i eUYUmLNfQbUywNWFgljvSwsTdgaQHlJwMUzaEvpsTvsTUqfPzZcWlCLUZqvj) (seq (null) (null))))))) (seq (ap i eQmpQPAewKSjvwRriYjpjxiEDCRzaXa) (seq (seq (ap i KmyHLXRVxJCacDRgVHuaBVcXvbENsDnCZqbQAJZlqugFjOkdYXbmxComtBobCOEHLkgbxTCZFhlznnbIOAlY) (seq (null) (null))) (seq (ap i PJJcFJnygAfiLg) (seq (null) (seq (ap i AihtukWtbwzJcRpTFLFMfWYUzvXLiIXhgZD) (seq (null) (null))))))))))) (seq (ap i UGMuTYJyjXunNwPdyGECWtBgjnZhGXNHJqNOVvxOrVWwZtNstNtMgIqyTeslnlcMDEkvLIGyoNTSQd) (seq (seq (ap i XwhVINyUWyhskktYAxFbyReHQaBFEbqQztjIzlkWjGSZjOKmyPbXAuDAJcDVkRAvlaqJpZ) (seq (seq (ap i JiNLHcHiioaCSdHFGhQMQSGGKfnjxQjRhUyoSoTSfTJMCIwBRGZziNDvktWCJrqdUDa) (seq (seq (ap i pgMHgVvMTJzuPmlyNenxrpZDBomLYMkkanigeTtgVbHAYeYzbLdngUcRaIySlDISfFaCDJSvBZiusFJsRjqHRkuORSmoQQOf) (seq (null) (null))) (seq (ap i JrCiHLydLuSlKpwNEUeOBDCQ) (seq (null) (seq (ap i okEkqERRWpl) (seq (null) (null))))))) (seq (ap i VUueMtZsCraeRnaHYgBqgSUpBGwjuhoXykBkopetfagZXInaCJRTsUhxFKkRXBCcPpBJzNTetUxfWfRTCdrBDmTVZJdMpT) (seq (seq (ap i IBiQYWJNLsfszEIvHtBZJCSYEXRxxQMiIAajEbosOgndhTyDlodqwCP) (seq (null) (null))) (seq (ap i WOpAGTiiULUfYFAccBwYNx) (seq (null) (seq (ap i SrjAMZWoDfRrtsPlNmYsOuxFntFNeCvGaqcqImOPLQidHkzHHuvjBKQSIdwxuUvSgUSslCKAOurHw) (seq (null) (null))))))))) (seq (ap i Fh) (seq (seq (ap i cMrabYrkgvYIuzzKcZUxVRqjNDZljeiwTfhiTpUZACiRFGavnbsSmwMVLzaYErXAEsqmEostTwSFHcTKKloBkmBvijptHcMfhUK) (seq (seq (ap i ZiwXnLxLzICqsromKJbHZGrqrqYiOvptvYdeJBrFqALxFfesqXuvMyDfQhOyzaXlDaBMDPDkjYiricwGkNnaxeTNr) (seq (null) (null))) (seq (ap i agpFNCHYjVoFXjvTfPicQISONjkvYwtVLvuleWtCAJbBIFpOonbIbpeDHZ) (seq (null) (seq (ap i yQUjYSgSDpvOOhDiSdcIfEcrwjTexInsGPcOBiUOReseWZGgRFvEtsFTysjvUiNrieKmKoiqJEanKgSusfREPnPx) (seq (null) (null))))))) (seq (ap i GhtxbWbhYlMCkXvtWUvYYRCfmRuXNpxQjGOvHIJmBEnucrEqjRJFuESXdpIwnkGzHxghrUyIRyDVIOPEcEeKrATvpAZRl) (seq (seq (ap i xCnSCfRnrRhvwShosHjzHDaUNZOAxYUUoWwFNUeEtBMBDBBUhowWfrFUVSTJkSSPZSCFViLgVtNkkGFXydlhuqMEalALpOCp) (seq (null) (null))) (seq (ap i WSmQaixVEJwjVRxsMGUrceA) (seq (null) (seq (ap i udjKgPRZnIgbAkxMGQddpuhDoxmhWfifyBLuoaaompCuDfjMyLUeGmNWBZktYODJBKxBatwjBlGTEVsxczmXDoaPKoSSod) (seq (null) (null))))))))))))))))) (seq (ap i BziZIvxgwSkyYqyOFeEUEcUnoAVPhbvpMYKuKMltQevAZdY) (seq (seq (ap i GYlRyvKgvQeaYbFwFEPSIMAvXeXJxDCiuXJywxanVYvjUFxcLFCfifyvbd) (seq (seq (ap i YvhNmRtAAVtVOgSGpGBWjzeceRoFhqBrvsFgbJfOIsbHXWvnsKBq) (seq (seq (ap i ZkILIqxXyEKVMemFGSZtxAwlGrXCequgZTBgweeCDNEVkBJQCoIIpjqdqIUQtSkGGadj) (seq (seq (ap i BaGriAVbvTLDcNQbhgJEKFVRhCIBkGBqypOliphlGcMVGRNXBZNKyjZfckTWMMeuCNUsBLa) (seq (seq (ap i SHfyPthYbczusiyZRkmrmR) (seq (seq (ap i rixmDlEcsruSXEYnwmzVrLGdwptIrmyXLvngOXBunUTcJD) (seq (null) (null))) (seq (ap i zJEdJWLaUjHnLKbGJonAWYNmMohpFvZwQXxskRCzYVztGbefrYHavViiybvlzFaiKxJkfzBkpuXtAgSTpJiKbNSJWvllDzwuEz) (seq (null) (null))))) (seq (ap i dwTkxYouNehUvNNmHGtawaqBMTOgwNjUjVqOBsyeLgIQBTcSpIPGfODKZVJJMAPZZRNWnYNzyiNK) (seq (seq (ap i UxPIFKWrmPMfuIuspjvHkFQwPThiyxAzobMWDhWzqYXjGicHxpFSpnruiWcMQNLIpDrdncmZwxWhWbDDecrabWdEpl) (seq (null) (null))) (seq (ap i zAHfjwhqWHAaRQRxufMYNIkeNYVhkJUQaWHDaLEcRWTRuZNQIoGcBohrFwYWIRBIwqYbZKCoRyuJeiqpsQmGIFE) (seq (null) (seq (ap i jSELvJtaHSebpjNizjgnMTaxOaUvyadMcoItvPWPBOrWxfwrkDcvKmj) (seq (null) (null))))))))) (seq (ap i wgAmuplAgceVGBGqMNlGDBjrGaBdXRRFyOWGAuXQttXmjaejIRmHiXvKebzSWjtIbTcofPKnqpjXFZgEstPRPHWCGXjedP) (seq (seq (ap i qLJwZshrxLbnPDSadgBmACULNOzlukIWxtLc) (seq (seq (ap i UbVCgqlYcecohsMFvRBXNeRCHCMpuYPASrzzOoZPSOGPMynaBELJvyAyOWxBoqXHaXRtMdKwgfT) (seq (null) (null))) (seq (ap i SMWRT) (seq (null) (seq (ap i hpuTpSkKhlChVWgAwRkvCyZKlcaiZiXtWLVlfKFPPVGuBOngKibxWwpXtdNjBkyKpiRNmBnWEyThakpwdByG) (seq (null) (null))))))) (seq (ap i vqsVAGKmkuRkwDitjLRRUPPEkmPoSauPQW) (seq (seq (ap i tbTvLQtyWwoPVnscVnFynZnpltPdXxTdJJAYMgWZHurHykOAORLQDYsPE) (seq (null) (null))) (seq (ap i mlvHbTkbBONJSruMlLIkFVnaunUQTqoNXXPRAPSLuNnJqCTg) (seq (null) (seq (ap i bbHDHiFExRFMuhySlXwbvtfEgdGNnxApdEMnGmfvwoDI) (seq (null) (null))))))))))) (seq (ap i ZPLCheGLkBPMLHDrscufSXRXvcBmMniGNkOrxUWgTuftiLdaW) (seq (seq (ap i AXnyvqINZpPorEbUJolBxVVDBSPmqOaBbPlPGxHkKQFfDmPSyshrqRavZHsTTcQSahkV) (seq (seq (ap i LkUeMftCifqlSPWNiAIecgAdnvaqYjruYLdNetuFuMApKvVIrIZDakibtDwGRlAoEsxQY) (seq (seq (ap i npvGXtmYTEqYxwdEeJLrGmSJWQjzEoGfCDQziSRxJaZOlHouAeqmFNVhboMbdHpWTaIZSyRTIOsPOswCezAZguisgKe) (seq (null) (null))) (seq (ap i DnRwtqiGHWyhlIrkyu) (seq (null) (seq (ap i TOpUUZJEiltGjEQTRlIDSACgNdqrTaFrQWAWvdHtaXpDaLkbZiWvQVDXCtDEMZYSREfVLrPPzPfGHhxFQMoirelwlgrrAomYCIWe) (seq (null) (null))))))) (seq (ap i gZsTRnFNIfpSoNgHsJvbFyJpogEQxADqEwLhWejM) (seq (seq (ap i wja) (seq (null) (null))) (seq (ap i GBpsPuMLzyURhTQHdtZzPSfDxgdyW) (seq (null) (seq (ap i geVphoYOXrocWi) (seq (null) (null))))))))) (seq (ap i zVagOJiqXojIjcycGyWfDzUwJqIFVCcbfRUCovCNPdRACEzqJXxsmrUuDcxgjwlVLCiQoXqfDiuqS) (seq (seq (ap i QicThqFhljOQVIUpOXbjZYRBwtPvVvzuqWQShwoAPzOAsyiEpXKTkcFbojwCHnkPsMDSPyUiueKFwJ) (seq (seq (ap i FfYvcouKdduouWxGiTdTiTNkBLDmhZhishllPmEz) (seq (null) (null))) (seq (ap i yqqZH) (seq (null) (seq (ap i ArfWqtlAnDiYyncPpziEoOURUjeJNQTBiNAbpOSyPSpesKzMyLUrTbInLcb) (seq (null) (null))))))) (seq (ap i ysCnVvIfjmofsDYOWgVezxAskQZMOHbApQYqVhLtdBQswxRcmoSasyDEfOzXbcLZqYdxjRmdgtcfQoF) (seq (seq (ap i euNQdBdpQFgbNScuhiagEZMqYhUCxJcgKeDRZgvXlZHdbwIrrqEPmJZGBeeZpaOvEbhIUw) (seq (null) (null))) (seq (ap i SNKUtVpyxRMoQxDhkmaUPPDXcDFZyycDGplhAlvu) (seq (null) (seq (ap i rwDCTPFMjzCdVWkUiKCEWyGhIGknEdfBxuQhWAaVaQVaIaEhTopxpZeFtFBAPuCq) (seq (null) (null))))))))))))) (seq (ap i shODmaSzFrmNizafrmWbVeDnmEYegZgaLMxCvcwaaOIZccKZZqNytLcFWZUUG) (seq (seq (ap i oGIKvUSWNyzrirhWMPSrEYskDvLoaEqqb) (seq (seq (ap i PDNreGbtEqwMXxyOgTYCyULTvjqpnLZRcHEJFraWywslRWxzdZqsEpbNHaBnBDowTywpcPlosbbHbBQdlWRWx) (seq (seq (ap i bUxCFwiaXWMFRPIwYNIWgXvYkWDvdPnueHNEfxkzfxmgiUiQIvCtTZjZzGAPvoIGJIPMXepUOphlbHXFPCjvG) (seq (seq (ap i GyOXanVBCjJbnfCgODpRdUCtxNESDDNkTwttzanOadbvANoSakkITJFxZhFYajbxX) (seq (null) (null))) (seq (ap i PXxqgesKvCyEVJitJwnyKsLkgknZdeZhYyZsxixCSbTsvQMUbWFqznGYXcNlZJlWvmzpHKIEdFcPDOx) (seq (null) (null))))) (seq (ap i rJJTEPkutnOPsuFzunXYMCh) (seq (seq (ap i DOShFRgpAfjWwnWpQVelgjQwImmasSxHeSiAchoVLJySxmQNvmiVScPrrvGAtsjSLvlSoXTwptTpHTuMOMrSg) (seq (null) (null))) (seq (ap i HfjwReavfyiXSmVcbGhmjUlYeioTilyugXjltIeBklawsvxXPmYjiZgrohgfbxspSELlQCTJUxfmmOWQaLgyDNXQbWvnVQujLOY) (seq (null) (seq (ap i oMmmoQuiogGCBGpNCyrqzIaDrwGPEJoirTx) (seq (null) (null))))))))) (seq (ap i TZmfCeDFSmKBRrqRwKiydJLOmbAlScdsuxsLKCfcRcSQcVlFSkSOCviTryixOUrQJSLQUwGTDysGeQ) (seq (seq (ap i lUsHRPXqqNgKuDRzrCuXGJXzHxwLpRUKjcDBHwwXgGcepJeEpiadSDFuNenPXzjyWuBSxCfAKbZqYNnSgBJhaTw) (seq (seq (ap i dMgDqNGvOuTniIqZTOsRMVJIaTeKcNSoqSSGRzYpfumHapBmxjODoYXXJXBpAogcgraeoKrZEKvYJwwzSfSnZyeMUjpQJPiCCse) (seq (null) (null))) (seq (ap i xcgBzphbzbmpHVDpqUlHktVDvPjuPRncXUsrbB) (seq (null) (seq (ap i XIDSgriuonUHbpVxUuJSGyyRMJnMIKiCILUDTQet) (seq (null) (null))))))) (seq (ap i DLAABKtfKaKhBVoShSAfrjzreQnLscxnNdvgfBaBzMFxfeBxtnyUDGTOHjMDmeMPqyEa) (seq (seq (ap i ZzCyfwILhmZlIcRQPvwbbYbSqtPItQvgeKPwutOYDuWCZvheTYAmYnPPOPMrBmrkUkFr) (seq (null) (null))) (seq (ap i WMetEprvSAOqlBMOkRJ) (seq (null) (seq (ap i ijVGuVRBoFomhDshhzigLRMMmeqoorzctwvKSNBwuVspLgepmFDhvjbYbySVtdURVnQQjIrHPyvdWAJXyPCoESZDKIuvIYypfPsm) (seq (null) (null))))))))))) (seq (ap i oNlUmJBGqUmcTcFOMpbUTAQWOjujnGCr) (seq (seq (ap i zeylqVzyVRGkrCvScTdljkoUaCzPILnlRotsBTEfTwXtmJaGiN) (seq (seq (ap i DkjXsOwyEMAhokxDLECLkvjXuNcBOMRiiNFDYqIWTTmZweTfYacHzTCRhIStXQTPmGRrjjrPjYUZLJEwXVyojCrbizkqGQGjco) (seq (seq (ap i rAewVkFZTAjtysBFlYmSfqHIkYQPsdQOQrGfnjQAiCXaziIXwMUTWWzYBlBUGUIEaSHHozeIGEctyBexBQZbPFq) (seq (null) (null))) (seq (ap i cMDbRGdGPtQcbJHvbiiMFkAax) (seq (null) (seq (ap i CWjUFcDQWkysgOCtNWUWPocmwrQPtNUTfABoMaGfffrBDSyXScmWnYlpqGndmGYYmdyprCDPcJMPyBESHZYYihUmAV) (seq (null) (null))))))) (seq (ap i ZZrGQnbhXePeXqqJmnDqKAIMIdwpcbsADFoTPZwy) (seq (seq (ap i zHpXJbAIgOTKFAolVUZKRlTBKhMn) (seq (null) (null))) (seq (ap i lg) (seq (null) (seq (ap i vyfhicwOWkowMjrXaBEDXFammrNhpbQlsfSeRRWoSACUqwfJq) (seq (null) (null))))))))) (seq (ap i hCsMDhkErMzlLAcxDYkofrMIxXYRddrttTEoxOAVufCyZOUamzjc) (seq (seq (ap i gjBiSpGEJkcBRrEkjTUmMgOMWWLJwNJlTiMMKAkDfGUmAsezhzUoELcBdIOOHGTyW) (seq (seq (ap i wbGGZVIHvkiSzedNNBRNivqFVzMEgLfKwjvgoopOgyMNuwvCViHguLJWKZVdlXlLGrVLVfraDXaVr) (seq (null) (null))) (seq (ap i GBKdRRBORohlYpaNIrqWERLPi) (seq (null) (seq (ap i NcjhQTwUqtqIxYaocGfWVhexpBFoItwcxmjaeeRzdR) (seq (null) (null))))))) (seq (ap i EXACxAeUhNtTiBYlXyxTuBdUZfUwZiGlgOCbC) (seq (seq (ap i nxgsJDnnNiydJOnhkndYYzxnwFoObCbzmBJzwScVhhAZErKkVjxJdZcImftsL) (seq (null) (null))) (seq (ap i tsFDuAASjCOOaBtUstBjwwaGMbbqaATEEDBTsJXhXlrxbkzBCrTvsbmeCanQsSmrRhIrQtFbXHZGtoqrkWPjwHqkRXOa) (seq (null) (seq (ap i GBOSESJlRFmkgjrXEBSmSdQEearbALZiDbORnSCd) (seq (null) (null))))))))))))))) (seq (ap i OHfQLGxDHOvSYJyIH) (seq (seq (ap i dPcmBRuCgvApSfGrmqaaWIadYOUknlRYpu) (seq (seq (ap i EmKsRgLfzPyiAIETYdeTSCXHNbsQZrgflxfWpHazXRmIpEcOhHOgWzGzbMvCjcEUsZOssaO) (seq (seq (ap i qjAmgaYMlomHWJcyKpbHxHKnCJRFNDcjxExJfvywAOTISGBQtuPQbonQJGqxhFEYQ) (seq (seq (ap i VnBkAfzLObRkTjxNwSyQLkuqmPcS) (seq (seq (ap i vWPgTyCNzXThSceOykLAQ) (seq (null) (null))) (seq (ap i zBpumKavOJLMRUGWPadFuuhmIqiQNdmdJqaHSiEgrqZte) (seq (null) (null))))) (seq (ap i xWtvXZnMFicbSIfcYaNxucaCZiNlVjuqopMAaTlLVoU) (seq (seq (ap i dsydrYGAyWozqjLiRtCNnvpLQALiWaBDHcybtxJutDjYFurUVsODCobkVYmfGneUQWouLAPTQWXq) (seq (null) (null))) (seq (ap i dwDpVtRuZrDnlxEIwtbRMJBmOwCsfZsNXzwVCdqRYokqSrXeRkyhnlDNzEnTCESmFViTsullNXjJsSGBbUIgZQMspqmHrS) (seq (null) (seq (ap i FsoIdZYlfpojFCjfJrEluaTvtRXWoWdtOVayhLmyPQLLIUZuPZVrDMlmFwCGhYDVDKkPXqYnbVKKtadKokO) (seq (null) (null))))))))) (seq (ap i tLibQwWtRrJEjxQa) (seq (seq (ap i YisCXmUWXybInbwOUPzqYmlKqWwSejwqHgasSiXbMmlXZXmcOPfEvCzpyVfKgrgQOTQjFdKGTasFayAsFCv) (seq (seq (ap i ReCUlbCRCCveBySckyiyWLFFlEkGuoNc) (seq (null) (null))) (seq (ap i sDt) (seq (null) (seq (ap i aGTydMZBevwydeQfRSDnnnwOTeIibBxPyNIJQVvEGaoWdMthQ) (seq (null) (null))))))) (seq (ap i ByvhNWHBiMrZEmEKYDNxPnCTWXoToudVHEItZBKKTpPphZEwdSffmJoYFspGRoDksVsVsWOTVQqaYZHYJZMqFqx) (seq (seq (ap i HdKPqUYmtYAVJKqjEUBFBhPbKKYClJVzBtwaFgaraG) (seq (null) (null))) (seq (ap i opSPcyAMkjCTfBwleoykgfopglprwywyce) (seq (null) (seq (ap i GvfJsrLnM) (seq (null) (null))))))))))) (seq (ap i ievHcqobObajmXsZMdPUZuiDvNtkvhiGdtTieOZDpZIvboEnuQmSc) (seq (seq (ap i IGzFIdjaseLiKIgNLvrAgkaisEFqgiSJAiFPDezuTtEfZUNkbezdpcmwu) (seq (seq (ap i EsxOwrawtBjKIB) (seq (seq (ap i kCzndAXfDfdLMOqaYonQQpZOXDbpxsewEodOAQsGxoNaS) (seq (null) (null))) (seq (ap i hwEWAsFngzCcbthaYbNmhbFb) (seq (null) (seq (ap i AHpaYcqsRnVjZvbVEHzdTBaSTsFdRhnTplUfsRRTEKluAAPcvOqLVGolLvalASsNswRkgjzyf) (seq (null) (null))))))) (seq (ap i mPBEBZfbuCgMuZST) (seq (seq (ap i mGcSyRQYtSwrtXqVqkIabVBDMhQWPIrZhM) (seq (null) (null))) (seq (ap i wMTXcMfgV) (seq (null) (seq (ap i kjXjmJaqVXtZQhCQRzUDPpYvdLVx) (seq (null) (null))))))))) (seq (ap i OKYyVXowDVlOrLoXqyqLWEtgDCcWEAPexHKvKBIQFmNpimfPiYOzcXcVxtydhCxUyJttZZNyMIABXvZdTlNZd) (seq (seq (ap i eFKEJPTHLICDsogV) (seq (seq (ap i lMDCWWiYSSXPHTpVCdfjTcmGibaomCVJBGBkgZhwmsPCOBZYIEmyZNKZxjWMIDygVvRDrgyffXWSpqJYxYfUlGxdU) (seq (null) (null))) (seq (ap i aQFEmUJlkbkFmdoiSHIR) (seq (null) (seq (ap i lpaZwPsRevEpCuzQWizBUJW) (seq (null) (null))))))) (seq (ap i bhaQTpyMJrrnoJgMMgWITCjinFRkGoYpRSCPmiXmYeTayBmEejIVSaqpWC) (seq (seq (ap i sXZVRFNuNtqqLMJYnLySrTxrMQaOKmqPtVspVHYGRyyUDSMufyCxfrXKcMjAsEP) (seq (null) (null))) (seq (ap i ooVtVi) (seq (null) (seq (ap i HrDXsQRvzBgslCdCEBmBTVJDmhmznwoxRbcOGCkcuKnyLLuVwynWHpzDgBVMrNbvWNQA) (seq (null) (null))))))))))))) (seq (ap i JCvPVHeqQWVjHZnflRICTfUYzhUJiONdMQOjTTsMEhvxaEQNLQHgKfSbZviN) (seq (seq (ap i oHidWJIcEzcqlVOhcJqiHeGVKyK) (seq (seq (ap i GMirHpJeiDfeZEMnHwLsdIafgDWcIFWTy) (seq (seq (ap i PGv) (seq (seq (ap i PWWsoiKouWoqQmuXVYTr) (seq (null) (null))) (seq (ap i yttMlybganYA) (seq (null) (null))))) (seq (ap i RHgPOjsGutpQsFNfPerZhRZzYPaROlQoWOFMJZgjNUXAbhzRCuUpPNGFGCHakNhlveLRNFbvUdpzzVCJdMe) (seq (seq (ap i OKJTyg) (seq (null) (null))) (seq (ap i qPNBwDTqy) (seq (null) (seq (ap i RapbMZqFYnkMNjZZcyIbAGaGrdNsPvwleYxCDLKLYlDybcfmkIitlH) (seq (null) (null))))))))) (seq (ap i SgtMSjSSAxbracBbPJpRcUSctBzrhmZDOqQIpZNrZnFtPPneIvhbtCdyLKuNGyyXn) (seq (seq (ap i LqhBhDdfiDzALgGoCyGHHPcfaGvycwXQTKGtvFvHGcCMlhIlgCFolIqlPAFrSThATHM) (seq (seq (ap i KdRGALQIx) (seq (null) (null))) (seq (ap i XcIIvNvSZ) (seq (null) (seq (ap i VjiEWpxUgtdexszhcUgHQTFYlfdgOifeCAALwfEUyAvsWNDlXtuHYsUNSANVUjJJeRqAuJDILOfwNAdxWdTzCQVoMt) (seq (null) (null))))))) (seq (ap i VQPDLfeUKFeGorHModYxrJOFVoOXNkBLJ) (seq (seq (ap i sLVVwHVZVdMrukncVgenLsKABheUIZyWaqMDsoJwfFImmZ) (seq (null) (null))) (seq (ap i YchVOvyRRekScqgxvNavoNqLRFFMFMBJrRlLbWnTZrjydqCoIs) (seq (null) (seq (ap i leigAYUHwuvLvSsgbQyKWvVnqtlUvfDOsXCggedSQUAcBTVupseEmYNoaoPYfyyyNI) (seq (null) (null))))))))))) (seq (ap i TMyApNWBysacvjuKdHhxEDpavfDZehyh) (seq (seq (ap i GSjKcUddGmPUyyNmzwNACBdSqboaoCWScYRdQmpctDDmgFEJmNRhaFyqHsTGHbDIzJLSfMsUnALkCGBAKqIUjyht) (seq (seq (ap i nwqkUBvlNGeFeEYyRYqqjmXwbJWYd) (seq (seq (ap i kgVAvJsXChyfKFmnVCRhmBhLXmBWrhbosUmQKANiNKeopnrDCRRQnYjRitEIgJPSw) (seq (null) (null))) (seq (ap i FXULWAPTVLtEcjEpcDpzFgTiQkmlDTkRvslnjKwnON) (seq (null) (seq (ap i yxYRkVCCWtGKkKNxyfajZgCLmQDFWcSlClYccslktEYJZbToslWBkNHbFpWSICwtoUrNcsyfErPGHdscZKYXGqW) (seq (null) (null))))))) (seq (ap i DkYYrcyuWzAPZq) (seq (seq (ap i ilc) (seq (null) (null))) (seq (ap i uhfgMlDQKaagxiYOXCAlWUHbouzLuBIOyzJmKXNglxMNVBDBIkVUFpbdeVtZgosJMlOMStSkBHaWRzkxKIOsnzVjRsaQoJhoDQl) (seq (null) (seq (ap i GleflrkOEcgEdyqOdkPXIiDXQGhWTwZjHsvdWBAyHGkksANJdxZEpzhuuiQvlJKJXulgSBteuGzPMndXBwrmYZUCBWwiY) (seq (null) (null))))))))) (seq (ap i QJylRFoJjGHbXOYDMRRD) (seq (seq (ap i mRkYgctQalRRLneWerIkMDEAawIZPxBNFVwsZlRVjw) (seq (seq (ap i rRPWohSDzAMthMJwFbeOMlUwZWMFaN) (seq (null) (null))) (seq (ap i IfmRiSnYYtbGgJxSEDlbieEkkQutThRxpWCvpilLApthcat) (seq (null) (seq (ap i JfHTeTsxYWDFnDIxhYHjAOEoGYSrQokyXp) (seq (null) (null))))))) (seq (ap i XYZbvSmXaUUntribDhDhvIPLnSETgPuJuYTaI) (seq (seq (ap i trufVqbu) (seq (null) (null))) (seq (ap i odTHgslKsBiDmXSKPLtxqy) (seq (null) (seq (ap i HfwqdQHSAvrjJfwgxETJWAEaCKsSooWFkhfFMjTnrPqgJVQHiTZVfGLwpnyhwfAZaMdWmoGrgMMydLZxaeV) (seq (null) (null))))))))))))))))))) (seq (ap i sVtLpouyLTzafDObYYluVOGZbjrMcagXDsoxMKpzdnKIilddQmSHMMAhFPrGTdXfbMjiGseQilBWHDjegksZNcQioaeXYxJ) (seq (seq (ap i teovfxinvoPyXrCfKkHwJMBobbGJjQgaKwFfMQRoncSCgLzOAmDQAYezNBXhuiwPecBqraF) (seq (seq (ap i cIKzWoNcWJwvgTJbdfFeiFMSvBDXskxfgtxsNFnrOVQRzknjLuCzwEfaZxL) (seq (seq (ap i JnxtGjjWxMvIxtxSQhKiZVytndTqTaNY) (seq (seq (ap i cAmkKBzDyVJdrMcqJnEEvlOnqypttqYhZNgYnFQitDlpyZyGtClWhATaJjwpLOhDUSCIL) (seq (seq (ap i zsDUaSmTHUYsstBjMsAKzBffSUAbWKcrnNPrxEgcHhyDBlqyHNIMxmpKkejHIxPewvv) (seq (seq (ap i rrAvTaAFFcEbszKHUCJZazIfFfPovIBmdbeYmSrChTjsAPZsnKBOVNwsJ) (seq (seq (ap i JyiyMmkOpNwEfOvhsjuwctpETTaOhUaNguzyPwhEAccANYixAVXuVJRuLULVAMVegGJmWtDHZveislhtWuqijsXTaUwU) (seq (null) (null))) (seq (ap i aaFeGuFDMLAEiIToKMmNx) (seq (null) (null))))) (seq (ap i sJiVEKLbXEFenmTwkpIMIDUP) (seq (seq (ap i AGHSJRfpWprEKxh) (seq (null) (null))) (seq (ap i xIQSPJhFdWiVuwDKkgnTjKbjFNxdCSRNXkwNYNbRWwzGcimVvGjnwi) (seq (null) (seq (ap i CpQZysLBtVfXtgrSAGYDxlzpctoceTpxSUyxEZYgLiKnxWDWOPQnZNOmmEqKCziJwlnaWgzxvTWdAyHqEvPSaujOK) (seq (null) (null))))))))) (seq (ap i nqOLGdzKrEoo) (seq (seq (ap i GbiagbKUKxRls) (seq (seq (ap i lhobyKWOvDWxpGbsIoImJCXC) (seq (null) (null))) (seq (ap i UIgqzcnCgzWqxOpsKsWVdBHgRTGNMVtViWgBgXuvHeqaguYbnvXjACjmaaalzZtJkwLXjIwLXSOyEDOcqjKtyOHuFjmiW) (seq (null) (seq (ap i XIZJJcSGqraJMDfpzXGyNgPbhpP) (seq (null) (null))))))) (seq (ap i tPLBYMbSVnxduXfxPVRlGTLvyqzmlKHHRRZvmbLyRdHvhANxviZGHLhTvuQGppxKkfOnREsAfUeMQjBAEigaxxvia) (seq (seq (ap i MIEnWTmWKztHFvS) (seq (null) (null))) (seq (ap i YCEtzBUVvnwOReBskhPFsekKjfCToiWMyYFVNoKNhOefGSjesKJKyREpeyrecUHpbIXTPPsHWbJdD) (seq (null) (seq (ap i WBGPaUQorpsyVRtVuSTUkZjEFrCQuFpGWRogbNTxVKfuXNA) (seq (null) (null))))))))))) (seq (ap i JQvaalcAjYJbbfdEiBsqzCTUMmjEmtbWbpO) (seq (seq (ap i sLLAdDvcKiDXQmMEiFeHzJefbMAKFJKpFNTMjfmRSrDRgbklvQDQAMlzBKRUzShJYOXGRulxaN) (seq (seq (ap i CBPDiqwmhuSXmqraFwqdIYxgzOdbqxWhcsuhFgCBEzYCyHQuCpUjZIeGvcMoAxvaEfyMeIdBUJnDbK) (seq (seq (ap i tgherPqgpESkdIupgawotMCJMRlfBKUTkVsckmDJPlvprsrchcsqawxuFoyrpFq) (seq (null) (null))) (seq (ap i lHGEoXIILLERyVitvVAx) (seq (null) (seq (ap i fxzqukhxmueD) (seq (null) (null))))))) (seq (ap i YyoEohCWqpmjijDGrRuOdCcgUxZZNfLUgjItTevIBjGzEHNAfZvpWpPGEutUSEWzUBGFKxrtApIYai) (seq (seq (ap i ghzJsFOamkCLcAiYXvOHgHIvUDgjQnPzqqLMZrsTYPEvwxkmHkYEjucZBcrjYIBnlYIiYBbrzrIoiBfPlhiLtBeFkfMX) (seq (null) (null))) (seq (ap i DoxTJkBySRwwBykvRVZTImBHcpF) (seq (null) (seq (ap i QjuJaIGEeHlNNxIYMsgphYhWSJDjhniAHDfZmoGyrPTFXSDKmsRaR) (seq (null) (null))))))))) (seq (ap i VPQqIsvbYBtgqnhVgmbMjeKgzQx) (seq (seq (ap i mvCGxWvxLExmbpkhEtsFscubpVevnBurbsRGDmGlgRghlVECDLwHPGwPQgYJKCdRrKTQQnaynC) (seq (seq (ap i tCSIoqrgxPafumGNTHsYEqPqIMFYyaXaudGUTGQWakobXPpoweIDwALv) (seq (null) (null))) (seq (ap i fGbZqMYZETpjHMaghcZFPlgQiCgycLYZJFZzQeDxneqeyUJovHfpcrpEzFghaitUKocaBtrfUTMjZUGDhwHHUfFVK) (seq (null) (seq (ap i xnNDpGVLIvqWAzGKekEZHGXHnmSJplLCZKVSQNipQYmWkhzXmMHMAbkPxChRInTbxfDinIWcZzj) (seq (null) (null))))))) (seq (ap i lWIMeqRbhRGhrDtQxwAFEEshTeWvXXfrmbGQgBNtutctlQpdXDKgYJsKzu) (seq (seq (ap i RXlHziMAtZHPcgmkmXqXgtsFqAFuwXGGUjwkhkxXMqmilOEuUUwTvWumpGErOFvesuMTUBejyq) (seq (null) (null))) (seq (ap i BxMbxEqtxQ) (seq (null) (seq (ap i pYXaxRBfeoFkTDridaQtWvKujzFmjaXdszuBAdd) (seq (null) (null))))))))))))) (seq (ap i GN) (seq (seq (ap i aWdz) (seq (seq (ap i SYUvxWaoGaEYJVyHflVrAMU) (seq (seq (ap i xlFNYnWMnDKdYkYgAqFngeuhMmvbHtihTCuGwQUYuUciQgjeNfxlFSgpHlQomSHkZ) (seq (seq (ap i YiiNYCSeN) (seq (null) (null))) (seq (ap i yNwwlYpRmyKRcztiRiLyPNlfTlgyTMcMTSdvcNCczuXPgbvLAEBnLkbqDHrRyzqHTUs) (seq (null) (null))))) (seq (ap i zJzhVFFjcHXymtXiREhmkbVWwHYWHkuwjciVDgXhSFdfYlwQOAMMsQsTraAzxWOJvJKwCuzhRemMIKXzgdlGaRFhRQF) (seq (seq (ap i eZEImQTmriuBnrrEilDYFPMyxTBTxPi) (seq (null) (null))) (seq (ap i ekvAudkNS) (seq (null) (seq (ap i WdaCMxtaajepUJSPxJWZrIKJNuTwHRWkUanSNMxuYAlgysZFjlPmVABRVAwdhvVHWlhWBFQxZwQwmJxWEqbo) (seq (null) (null))))))))) (seq (ap i oBGXFCETRPElfKcxYLVowiFwpcnoBijdrdOQLnwALBUflSoIZR) (seq (seq (ap i SzAQGAgXnMZdBBVglLIytLbXgvXvewjfcneDSvPFjvkOzphRLEIivWXCVbbqLczVQnDHIdnGAlLNyFsPCvRBIkmkGIZMBh) (seq (seq (ap i OCMqQhlopgtDBMLIXQyFGrIScmigBqoBPlGUeBhrhBikOBdcLTElPCxQfLNRwGVDpGxghNKIEWdwrsEGYjOLMsSnT) (seq (null) (null))) (seq (ap i gvcPCyUtSeNtOTYPOfVRYIqqJCiJQPtIJXWRjEIqpJfHPSBKNbQQIAOCmd) (seq (null) (seq (ap i fFDWveqKgcdFfmIcZJkRrrxfFCcLnrwqGArVqEsVipkgnDfUasrlMNmKkZymeXaxtrdsHrc) (seq (null) (null))))))) (seq (ap i oMGUFcJWOVQn) (seq (seq (ap i lQtewTQTuoPfrrWpnYCjUHpjlhtApQnLdCZBwNIkuznWmitAYkcZYBaNACgHPebRuLXGCvobkXtceSLSwQL) (seq (null) (null))) (seq (ap i AIoDugeevjjvecrbTnbDfGDOAcuTPWrren) (seq (null) (seq (ap i cFOifxlRBsVllhNJvdTlgahDiVSXQfGRzHgphsdYwNTAVnMHgZXyRkpQoZHYQMqtxPcEbwtlBu) (seq (null) (null))))))))))) (seq (ap i KOzScumGIfNulFTujXMvsgrqPVwbKpnDUPhGXUnMMdMquAWrP) (seq (seq (ap i gtWXjktlOnaKOkQZLLiviiUFEMgDmBupuZkwlOLtWzGPBVCqUnbcMfQHCLMMaLrjIaYMnWe) (seq (seq (ap i Fqe) (seq (seq (ap i LhMFcfGGlCWgShpVgQmMBtmKzEwUFmeQvbfHLhIanCGQUVBMuJCGlDsK) (seq (null) (null))) (seq (ap i fbOJkAhOiflvqpnMWdJCwko) (seq (null) (seq (ap i Un) (seq (null) (null))))))) (seq (ap i RfoAcJVZnZLCkLGMOgULzrplObVLdXZflgRkORhGVjPszthtvWjgPmYNEoqkmNft) (seq (seq (ap i GQzguoXIHhpHUUifFZLHeiAAAaMWfpBUZIuufAPisjZBntQUFwkXIOJNTCBBcaLMumjuhBqfmVLJVrU) (seq (null) (null))) (seq (ap i pzuoypSbsBmxwySREYwIwFOKVnArJFsXUCcmfvWBFRAGfRMKgRWzZNwvOwYIKpMeOdqWMwnEllRxypRiKGJBPwWyJVSXdNOu) (seq (null) (seq (ap i fCnAwURFHxBSgYAytTFVtwGZjt) (seq (null) (null))))))))) (seq (ap i FxDfsOhwBUGscQqnSkhBlnqXnRRDZWlAFKEajKvlmWcMvJSphRXMBVv) (seq (seq (ap i NGZNRKWKCJdQTdHejbrGpvBElXmaDxR) (seq (seq (ap i xPyqcwMWHojHtlegSBnUTLFKsfrOaJLfgbonORjEtkMBThXkhDyJfwcHERgXEvMwIFuJENl) (seq (null) (null))) (seq (ap i UkTVDqrRfVrgyBdWdyZfoRxfkcNkXyWoYCNayShjyVWQwbdFgDZDHwLsZUNjDBycDFHWXvB) (seq (null) (seq (ap i OXjwCqdiFcVJvoDji) (seq (null) (null))))))) (seq (ap i hWwYnTytfdwnZdQbrFrVevHjiVViqkcjwrMrlDeTpbedqBvHQ) (seq (seq (ap i OwPwRIPdB) (seq (null) (null))) (seq (ap i kIvvAdhgslGEMnhvIatFaPFIoePRPZqdIJjrDZCttJJDlFLlXsgADLnXdKoJQkeZBKCkfuvltlhteMDApsghXTCzgyQdVlbMJ) (seq (null) (seq (ap i pAIhltRHrGWDpCvAUVjjGnHcvpIKyjOdCMDAofgMOQtOmBdchQHdsweHGFYihmWRUJhcTfodPbTsNXgmMobxUDgCC) (seq (null) (null))))))))))))))) (seq (ap i jjUxcaiZgDCOxUwZRRBoPSxTiZhTfuzIzaSLlyNWmwznJdOxxyurgCFpJvSUZkVOWpUQsyZCZfTRyEYKC) (seq (seq (ap i qxW) (seq (seq (ap i IozJynqqftVJuzbDHSiGfTCNjlBbSjfuWnEALdOGPuRorzPJVbtk) (seq (seq (ap i GYGduDvbtttlMsgWZShIDzPQVXhtBPDPoSnARkMKcCxluXRDgwZYguFtWQb) (seq (seq (ap i FDEpThFcwknZjXGtBHjdZDvnbjiXEohbMXWngNuqRmfAkDhaMOxpsyYIrIAZGFujyALGtEYLYGyXMImgnrmFXCF) (seq (seq (ap i xQJAroIYivFSlbLhNtfJRKpyjEzsrsCxLwnUuET) (seq (null) (null))) (seq (ap i BMwBuEwhunZjiOAWcAmnhKedpxjUheRgKNSRewReYEEKjSCNszf) (seq (null) (null))))) (seq (ap i UNTwFdlYzyNMvxDRcRFpZkLwkndUJlfDMdleSPllydeteevmHBoEMijnrlBUbecozHQwHPoCYgBZqyJoTYFYaLTouIRbQjCIhtgD) (seq (seq (ap i iVdUrzLMDitDynUutvGILQVYtdSMABSEdjVhzhHJJhiguPkAQxdl) (seq (null) (null))) (seq (ap i nvcTUlBnAMSOCEZiriXRjpOaHSJfJPuUzyvAcBywAvbxWmWfatCqViyopuOjlAtrGDmdTNtMQGvGNTQY) (seq (null) (seq (ap i MCfVAZr) (seq (null) (null))))))))) (seq (ap i QWobaGRuCapXqToemrincNJgnmAaUEbLOGGnTySJIgoEfPqSTSi) (seq (seq (ap i uFAQRvMNJeMXjTkvETHMPjQxPJVGyrRucATsJnLymodMgkstMLAvyAEVVotfAqpbaZUpFqYzHNpAhiVgOwVBbFirxqlelnMCQVTJ) (seq (seq (ap i ZZMbZlUsqeGkiVFhlkPNGxhXIQKhDvowVOsigozSubHXHKYRYKzwHprRbxkaOHVUUxDfSmIPzzLzEsFVGaQ) (seq (null) (null))) (seq (ap i EYioBYdYClRoCdOH) (seq (null) (seq (ap i VSjmQRyfiprAveGzlUheMQaPIBzBpPrIoUUpIK) (seq (null) (null))))))) (seq (ap i ZrFemOJNhgMSFkhkYEeyKHMapTLXZCbgHzXqSTHQGQsaFRIUPoQCttedgDIZsfSZyvz) (seq (seq (ap i xsTnbkhKQrMojrOHGJJdcUXOergMSdCEhOdEBTWgrqzytNUtkcrTftMBnAeWxeJuahEsBSKHC) (seq (null) (null))) (seq (ap i ejlQYeIuGfolqTYYvvqksmdNcyTLpELMEhUBemFSdRSNcJimCpimMsuTucxvFpMBMPHXHLWQJBfeL) (seq (null) (seq (ap i VmQdDWiEizmMB) (seq (null) (null))))))))))) (seq (ap i cBfbJbbBSqSbmYVYUHSDDfsxAxqYEmEjMarDJdvGOVnPyeLuKSCuhyjnXOXWLdSJrckjqUbCmHzyIZuEstKzK) (seq (seq (ap i LhWfCwzApLJDFZmIsRNltOpdmYVFFFbXePZzvofXJHLCqEv) (seq (seq (ap i gukasFKuypVbPBjGsTnUJdzWPPFKsGJEtyAQRhIdSMQHYVBrWiYjaq) (seq (seq (ap i xdlyAKJzczuRypUUMqhoRoGqPifQUxtcOiGmKpiTkvlAkhhCLg) (seq (null) (null))) (seq (ap i IusTCDxehEjgQuLZkrUZpYCShcflnnuJtTpGqoljXZPQUzazNUYTzJoHLrXECldLGyYUSigMiZLkJNEhpGrpXLsBxFlFdsjwRk) (seq (null) (seq (ap i HWmidzspMMkT) (seq (null) (null))))))) (seq (ap i ZzKfGzccgrnzPgmqIkachqMBLXFrouUTBYfHvEBgBfAGyOCSyflfOHmROamtkfQpmoTAIlbrfjCGgIvgCZtn) (seq (seq (ap i ICWYOnWOZS) (seq (null) (null))) (seq (ap i oawWLjXQHvKdQytUzElcXukeivOByrDgXyqhEQlgjqpKjnJyjPZWJsVAOsKePORnGq) (seq (null) (seq (ap i MdkCCpaZZjGlmsZzIcWrwYcizcYkHFcALRlMHMuZsTjcCSIVnLIYLwjZgfoudRvNrxdAKnwVHfxerP) (seq (null) (null))))))))) (seq (ap i ojbbMdBMkVFhOdejaFOTAecHFyadhRfyPqpbOIFYAnhmivtOpMdJtmUUG) (seq (seq (ap i hKtZIkrEoXNDUfpnqaKAkJyAVHEEELfHLvlYiPPSgqeOPdGEgDCYGeawqHrWGNY) (seq (seq (ap i DzgcHmtxMvLSUaBZSQrUHJxUSnjjnqgKTXTTzEXinjzhwSeejyxXtDOfRIgMyFNBLDQbDdEekdcjhWMENqTpCmkNDv) (seq (null) (null))) (seq (ap i psHIbHmWiGneiMFmXjCoezjiVnKrzgxrbxWHnagMZNSoeCEqluLEQOA) (seq (null) (seq (ap i XaaPfYGtKJorTvyvtIBpODYKkNohBpwJGuwTqBcpcheSZuBTZpXzZMpqZVALuDdZLuDvCMqJxpgsumGAIyUl) (seq (null) (null))))))) (seq (ap i YqDCiKkjVGgkcpGDemqjjNoIiJR) (seq (seq (ap i rWtADJQUQtDTdbIsBlvbjkCyqlvxbtr) (seq (null) (null))) (seq (ap i ZkgGYyopnlSQhJxTOlFaJ) (seq (null) (seq (ap i PFWsTonxiykUAhirtvZCjcNvRppxBUdSgUynj) (seq (null) (null))))))))))))) (seq (ap i WMHTaHFcbeah) (seq (seq (ap i pmLazuCmmzuYGqRcECLcIlZIscUiFYRIumWLKGozWAXSjhzEOcXKyHmWRJeUDhGykzfcfFjvWJvYboUdBicsjVzhzwxn) (seq (seq (ap i WqUHMSPUhBMPGtZoAnGumRPXGuoJOyYFfZuvwxFcEhZxGkbZRhevVMWJrJqgODaYgxdVheLwaQH) (seq (seq (ap i mGuJAIipjyuzEqfUTiBnvdIRbGMfojNITzrPuMawGScVWWvgBFHlNUNum) (seq (seq (ap i JipdtxqqIxusyoSRvQidcQnZdMNiGebdPhCSepnwIpsgbLg) (seq (null) (null))) (seq (ap i VoBPGJQyJMz) (seq (null) (null))))) (seq (ap i iPPzsaSJILsFhRciJPPgQELphFcrZtXgIHcQUQBefhFoKqqxEfihDGQrMabAIfGlsXDSqFhIAvCrblqn) (seq (seq (ap i CPdfYODZdNUUomXqUCEYOxuurJVsrJiGhcQa) (seq (null) (null))) (seq (ap i gcZLgkzjDJeEeDzTmfwoBdwweMyvkTzemhxHGgJuPAnmFxjarexHTXQqKcNZJwRyVTnvZAiBekAXQb) (seq (null) (seq (ap i XOFNYZNIfAcepjVEYMqdrKsgGqfAOh) (seq (null) (null))))))))) (seq (ap i hiekRUwYTLjNhRUYuJZkPnLiumMyBc) (seq (seq (ap i WbJyesJohKmHYetaCTRdEsdpBpkmBI) (seq (seq (ap i EzXlWPCindkLBKfQfUdvmcXqRYpnHGHwbMcEBpBdZdhfkmbmgSpQWXpvEyDBawQ) (seq (null) (null))) (seq (ap i OTQRzWHBJVJsS) (seq (null) (seq (ap i ZEPUhohJAscGlEzPAZsmsEZmdHdpeWeQmEqSvcnYKuKaTimOplomIDGSDlLclymdVpsBOkTklbREwOxGDYRJjShmnEAVdUQAV) (seq (null) (null))))))) (seq (ap i dINVlPgVgPMgnEICqajydykKgxnPqrpAXWSduywTtkvYgSyKamLsZzSqnAurUgdIFpjTw) (seq (seq (ap i xeCzxNbiwmFxxysuAjinQfstQDfKAoqvhukLd) (seq (null) (null))) (seq (ap i oHrourKgBCwpoxCQARpxJGqgnCbpFAKhxofJfQxemqdJmlRuxlRCLcRbcBnMXnbwrBiHwkHtaneFctIU) (seq (null) (seq (ap i pPlKqfgBDoJIcz) (seq (null) (null))))))))))) (seq (ap i ZavZTsySVNNcVBMvHjyLlYlCQBuXmgLoocAWTZVFCUXBGqvidylKGZgXRIOowVsTRxgjNkaMRIfTZOtoLnRifWgBrMieVCdPFhyo) (seq (seq (ap i LfwPibmNXpUUuurVleNxnwpCAfivPhukQMiZCmhvJBNONAufYFFcAjiTIMqmn) (seq (seq (ap i ZjMYfYJoPKetyPQKkSFXJSAuLwxTQLSfArTIITlZml) (seq (seq (ap i htpiAwRHXnVtWirbogXdhWYIWprEwqzbvSBkXVEUuibpcLbrVfzfQfH) (seq (null) (null))) (seq (ap i njWkrTDYutResbSoiggRKhqpsERwRLurXAYCrKWuQsBsPKNvAIQlXgkJPs) (seq (null) (seq (ap i PbgexQEWrpMysjYVxelm) (seq (null) (null))))))) (seq (ap i kOvhsZPyIjYbFlHwccKWLoRFReFfKaZWVvfnYNCDMITIQGbdayaqPmyXYECSxggeO) (seq (seq (ap i YQOIehzEDZTV) (seq (null) (null))) (seq (ap i hPttTxqfwRUtaxTHJXXRBErBLKWUtYyHK) (seq (null) (seq (ap i PKtzshnnh) (seq (null) (null))))))))) (seq (ap i FUrypZEXNOCtDexkEUVsTQIcQsZQnfBOissqPKyrIHOGELNooXZpYZjIbQbRRQugYWzPCeyDgwgVFuuiCcTKWkythJuhVdXre) (seq (seq (ap i lwGnPFoJIgReRnLX) (seq (seq (ap i JzWZFaXpnGZxgFJARuIjzNyOHsVOuTijJGXAlgyyTRcWnGNYbxQNFWPEOJLTnUytKPnRFOboljmzVJqSiBUVKnteIyaLffaDPl) (seq (null) (null))) (seq (ap i dkrdHpoURswCYcivQzXVcsTYXhQixoIPFthsRU) (seq (null) (seq (ap i IXYmeMyGdtYDiDuaLkbxmnzJXwMfEYIdZ) (seq (null) (null))))))) (seq (ap i pmtWoYGysIJMZrVFDHirnALPxROIWgCfJedFREgyiesbZsTCVnbUClRmATsRClTAllObKGQQ) (seq (seq (ap i uIsNmHzdELCviJdjIluHuvPJrEVBpdGOtwKGakKrOYcZInkzIqKmhXMijJqxKaeyINJarxeFkzNYblcM) (seq (null) (null))) (seq (ap i kFpyZjsCXAvDBDZsayvzSRuYiPeFCNuGVAfSSSthmfSlhOkGlQDsUgjYzTGbXKWPZpcBhoEreE) (seq (null) (seq (ap i BxBnBYrjXwzDOqcaksjPvfaDFQnfxPcBhXKiTUdmVGyzpEOpELFjVJnuEzLRnQRCDbwyMz) (seq (null) (null))))))))))))))))) (seq (ap i EcmAVEtMoqbopxGBKqsrDvvYLwlwJFKIeOsxLadTyaXRsRMPYFntjXxeaanttSpiaSVndAWYKiXaSgvPewgWQuCU) (seq (seq (ap i ZqGMeXkGnFXbSOsonlBkYaCWKKpQrxuDsIxXvLgBuFzPOOQStKYCQTTOXJTwJ) (seq (seq (ap i DkTsfCyVFffxbaocvJlNy) (seq (seq (ap i vySssOXXwfMeCAKlRMrPGAwnKvZHjilrqEIrjAvbohtFjSfUYZptjCVjIWezkNefKpOotMM) (seq (seq (ap i mWyEJfdqZpSJUBVUTcJSuwXMlFYSXoQkiSatEcDcrrzXJZwNDUWsamWvQNuKGbXccLPSCRtxkzjaDjbkYouAWDoIzGimtuVC) (seq (seq (ap i LqjGVVOEzAMiNZPNpnSIsyxNVlALltWoOMm) (seq (seq (ap i TXElxrMDSNYxpYMgwyxIoAgZAyKwDXMxQIJZFoCZIQFMGuBnYsxEfMUENbAXYmslPwMIp) (seq (null) (null))) (seq (ap i oGbCRejVShwzdeaOQPqzFyAJEgGAeYdCfuRWhfzpQgLaCjLLOtdsvNRDxslCyJPdETNyziPswYovyrCqFSRrLXoHsGxuTQmuCZOR) (seq (null) (null))))) (seq (ap i fIxddPLtONzGXaiiMFIhAtFiBmFONzmImJiClCYHeIVzfFBJjEswNR) (seq (seq (ap i OAEZUjJEMgJxQFKFEmYATWKmlChCVJJfpNOTzHTBtuicCUviORNMAEwIuokNN) (seq (null) (null))) (seq (ap i VkjEHGtPhOGTPrkwsBUyMLidJPKBNMYtUcMxnRyuIEnJOjAtQOZgcvmLuPTNwaEQFJLuKCMEdFlTAmFBxGyApnyUfQeDaNgKWM) (seq (null) (seq (ap i sjvwoojiXkriSCxpWubMKNVCkaaIuoRonudxMaSJVvbLJkgHTisKLFB) (seq (null) (null))))))))) (seq (ap i QIvVdAiKeGzWULUgnXMArXBeMZUZHjwtzoLGaPiUmBllSYRTIxad) (seq (seq (ap i SpHqZUfUUetlkqxiCgiEFJzdRDbjRkmmZulcdkjsOrCjMFJFYufJMpvflTVrfLhhDDSZutkzmRoPxcmnfaWaYIWX) (seq (seq (ap i PvvlTjRCuBCXDZydWvoiKaaJbgOIOgBGVWpvXpdrhmcZQQCdzPqhggKPcIThhGFKyXEKjUeljumvKqvyRtFGBTDL) (seq (null) (null))) (seq (ap i zSpijeRVijmKFDGDqxRcmgRpWmkqzrARWVkjsOcMrrdheyOmrnBOkuWDAapUtuDB) (seq (null) (seq (ap i MfcMIEzxQvLUDxJozrhRDZQnreEhKthzMPGBrfJMlnEbBLPlIMYgYINacsBikzsuzeNPG) (seq (null) (null))))))) (seq (ap i yxkEdKCEkoIKGkWXSrQeBOEK) (seq (seq (ap i UbnIDo) (seq (null) (null))) (seq (ap i qACUHGFNFOrCgoap) (seq (null) (seq (ap i hYWRAJWXYdXLzNnvb) (seq (null) (null))))))))))) (seq (ap i VNnQOUbfDfVxGgqJVfFVLLcMtHoPMsVASUFshoeTkQIrxNaxEeaPcXxtZu) (seq (seq (ap i ZxusilIlnNzrEOoZcKtXzpwKGQKJmIXYNtLmgJAaTwJavlJJWvnyzZmhMWyXWRWwhttyMqhDtQi) (seq (seq (ap i nOJXVFaWwzZgjPgaUyDdpTezfZzdxipoGGCCbVlqRQiUdGekLBqYeKmogReBQegtbfQyFCHXwniKeuDMYcJq) (seq (seq (ap i zByIDFgYjuEhnpeWotQAeMUamJpRgDQPbVEiLjRTrzpIdtOBfszdySHyvBcubkmdPylsftqcBtQVzjEgMdsgQlkbxrfvs) (seq (null) (null))) (seq (ap i TpzbWptPchdVbZiQiELTKgeL) (seq (null) (seq (ap i kfdWCNVCKWHcojjCjRKFxyHEAiXY) (seq (null) (null))))))) (seq (ap i sbYdrldlGANdBloivnFMfpjMtizSpyEyew) (seq (seq (ap i hSiVp) (seq (null) (null))) (seq (ap i NFaLqMGGLvVaRhyTUbBzKMnUCtnwFrmCEhoUbGkLAEWvSjhCYGLkHsBaEmexgSbZfXfhqacRgCnsuoaiWpovZbxqcqLgKsfXQ) (seq (null) (seq (ap i bFdFEQCrXiZZszeqvuDkFyqQQfXJRueKhWyhVWdeNPkhQpkOvLqbavrajTuPOwYjdxCbaOmfdnLPaXjUozu) (seq (null) (null))))))))) (seq (ap i byDfVqRoMMyVwiFRzRsCHWDLYhZXGHkTNcFPnbBmBnZeWwwbANGxqaosyvhTJgswyuNxlvOTKkxsKueBZNjGmhaxlrBbFubLn) (seq (seq (ap i ZsrydLFICjactOslRwBcLsNklQ) (seq (seq (ap i pFCaIfQbyewV) (seq (null) (null))) (seq (ap i aqBhHjqqazSfgrKnmajTZlxLMRTrJeDfxWupSpcEPCTunOPOsULZJfgaLRTukeyrpNIUDxYbUzrMMD) (seq (null) (seq (ap i TJIBucrhTOkCJCQvexwl) (seq (null) (null))))))) (seq (ap i cwGxncjAVRRqaeQWWwYF) (seq (seq (ap i xMGMEdZtEmEfLWmpcvhHBcUWKoDLgqCbNmplErUCJcbxkvGNVMjinvvXVWXFCrDiSPODdrDJUAKcguvnUxtXYF) (seq (null) (null))) (seq (ap i uKaGuHPiprdyPOjYQOewaGRpaVVoExEbvcZcAxibjXHOAGzeERTwCzZnreBmOYIaVTIeLNouz) (seq (null) (seq (ap i pmozVIEwZPNsqxy) (seq (null) (null))))))))))))) (seq (ap i XSfW) (seq (seq (ap i RugSYaiXKgZvcoNaRCggGYqSZvFciijTt) (seq (seq (ap i OZmYF) (seq (seq (ap i fyZeerDuQrjgRbjeiXtzehYONqfFVPsaOXKjlqztDY) (seq (seq (ap i VglZmBXTnTUeIZrPSvM) (seq (null) (null))) (seq (ap i abRekzwyrjdjUlMRoogktkfRYahambpYTkoxButCjLlYHPLscOCmnGcCczcNVNpHeoshwsMrSiYCfqoFgtkRRxQmjzgwBYi) (seq (null) (null))))) (seq (ap i VZnQOHXgnxaevLgRizyKacpAeYrCjuEIGbupPxONdLfHZdthNkUmjMhrVNGsdJvGAgVsGDOotTmEODVhhgOpkkOXemiXIEqtyyGj) (seq (seq (ap i NlCkSAEDsdGgAnMcJTTNvEfScrnVLCEPNvlQyoDkTlfXpOKdHfECIgIuAJnYnvtrwDFuHZjAaFVkvDD) (seq (null) (null))) (seq (ap i sZCAvDv) (seq (null) (seq (ap i uLKyePKaHAzYTLNQzkXSxTdYXSggNMGeKpjDlhIGjrxaIyzTQvGnnQk) (seq (null) (null))))))))) (seq (ap i VVuuLrQzxFsaYopcZqDKlFDSUTgiYKPTlxuwjppkkPwvivsJOWkOKQgghiYdFiMoPGxzKXZbBArjqUqLfnAvbxpn) (seq (seq (ap i WaSp) (seq (seq (ap i ZzTtMjThqJ) (seq (null) (null))) (seq (ap i GNAUAcBMYATqBeGecIIJnPrwMF) (seq (null) (seq (ap i KftREBLHaaoMhSKNYrQpqjtebUvcMBjpbEVqv) (seq (null) (null))))))) (seq (ap i cgttRiihJBQqJjvVTHVTQhGPCGzpokWZEhAnDzdmjRFFxxneVZPOwVyyyAbdOmUJTmRKoYtOOsMTKqDyizTVihTTDvqhLvBYND) (seq (seq (ap i ZIdxSqlcpRUbYCfkaevmbZKhagjWiKlVyhrFQlnaOfqIJiIqTxRog) (seq (null) (null))) (seq (ap i WPDKeFYivDvrtdh) (seq (null) (seq (ap i YoUstbmuqtDijgQkMWqox) (seq (null) (null))))))))))) (seq (ap i ddOrrpxWOwHEGfzIBHTPEOLEeZYFOQxASjmNWHMjZZq) (seq (seq (ap i WVspSINlEDibrgxovnhxcebkPfNRRmEhH) (seq (seq (ap i OukbqIrnHrqWPnxVZpiBvgGSWtOExSLRsHGTbISSLwXBNbaEGJiHOOMqauxEEyIlIraBndfnyZOgunaln) (seq (seq (ap i TKobOXERRcFMHtlGhcEJaVKcOtVsMADVXMcOkECnyXDhkhDoYddhaSIlmvLZr) (seq (null) (null))) (seq (ap i JTghKjpVjKHAgxPZtgZvapitSTjfMWdLjZHfFablOogDKKKnVZhsbrZYcmLRcEhqi) (seq (null) (seq (ap i puukQvvdGVl) (seq (null) (null))))))) (seq (ap i rPxrcwFvMthklcQDeyFESUTyfVQgMhZkoqrOznlIBVIyfgptJHoTLuLmwKUeuyYSREleXDr) (seq (seq (ap i zKjCNKuOZzmkoeMTVEFe) (seq (null) (null))) (seq (ap i KHNfLrpfxWz) (seq (null) (seq (ap i AvXJuyFscaDFsbIMJOIPZrpbJUvNFZBQEXdDyVHrLJaGabevOMRqqKwe) (seq (null) (null))))))))) (seq (ap i xKTmvPDPQtoXDlpmvCSedgJsfSfYxRBlatmnLNqhUubRfFVEVLDauXslcLvCFzEJfnsRBbcKcTXdAPMciMMCglsIghnfuj) (seq (seq (ap i ZsXTXqOayisOunEgEIECaboiduJkpT) (seq (seq (ap i HFfGpiUEAAZBLoAPVXIaAZLERkCFOFPMsZnjBGklwBCDXdJjVPVSgFGPJgdx) (seq (null) (null))) (seq (ap i ybpEbaaosrKHQigMfPTKbVVaOsQUaBssqRDfLBLruncaAzYgeokEqFjeVBKTUVD) (seq (null) (seq (ap i sgMgLZEWeOWhbPoQfMaDGLEPpyloySQlrPvtdvUSgHIfDhpzlGzzrabHrNygg) (seq (null) (null))))))) (seq (ap i UKtOzQoCGhFFlyQkGPhJnGSoahCBAwfaQqLY) (seq (seq (ap i PYyMIJUonQkPEJXTggalpnIqzxKTdhBTemBjiAfVqdvnoreHeYaVsJjG) (seq (null) (null))) (seq (ap i JdnlLhdhVmcGZTskCWLVGVdWotBJaCMDynXUPAPCmDCxLFtbVmrRxTBOrszCUsdFYLLWkWfWiJlcmZeT) (seq (null) (seq (ap i rnRZJrcgBODvaawQDjAVKISMtVKrRiiQZzhGxlXXwEGSvHgzCLxlOXMfXvf) (seq (null) (null))))))))))))))) (seq (ap i ArRiLpTeoFIEtCJgpkrgHsrxVECfOJdnjQiTbtYDCqzmusbpDoOBQqNtaGqXgcjmoIAxQjquASOZPHyucUQeKgUBduOCyo) (seq (seq (ap i cHTraAygJlxDtSKsNuidJvTgayJeIzxdPny) (seq (seq (ap i sCNZcFYyDZRPfoaqgSDXrhRCTKAGkluenuIymRrY) (seq (seq (ap i qVzcPRtVvKcHiAQIPy) (seq (seq (ap i xRuElWVfLNgxjANG) (seq (seq (ap i AzhHxh) (seq (null) (null))) (seq (ap i yxMgCmkKCVDEcMhftTwuJT) (seq (null) (null))))) (seq (ap i lSPtHnmoDQeUXcqiayJZuvDNLdcfmmvVELGtspZfZcEwswHWGmUGRRRapSu) (seq (seq (ap i ljOCtZfFLryIxAUhAjKtGOUcvlbcDqHkZicHsqBWjZniaENrcXAQFJVzrCjOdFBscDSleMbAMGy) (seq (null) (null))) (seq (ap i yrbfedkfUDivHqkIqUshLubIkVrJmQeWjZGhayvqylmnoMqrTkgpezmtHkUokVmnXghWZwKSrcxUQentmdmtr) (seq (null) (seq (ap i gujYCclnVJFJgUfOkTtKkVDCEpKPYWoPJaMCFfVKNPPhisAMFdnnsjMFqmiMZuClgVLcFvqdElexknjigGKMrIAiT) (seq (null) (null))))))))) (seq (ap i HNsoxRULJggWSeNrTNNUvXUyIrqOVodfzGKirG) (seq (seq (ap i nXyRQxFvUZeTlStNwgDKBkKUYgCfFLRPX) (seq (seq (ap i nGkfyi) (seq (null) (null))) (seq (ap i XKcjMrsjYroqdbQVYQEXTxOoXAplYasqJUlECKctdTrJQleSMpkcJOolgrv) (seq (null) (seq (ap i mFSsoTmIYDj) (seq (null) (null))))))) (seq (ap i eNeG) (seq (seq (ap i dMNyWMHhCXLbbEnXTpiASUWuBfmqlPxHISoqmSfAGQcYdrDFbJppfABhwFgapZFONrknyWuJpbmKO) (seq (null) (null))) (seq (ap i gdJcVIHiXhoOfDPtzUTVHhQCUwnviLzyioEYeIuROudvHTQsHzyONaEAqVtKUelxUTNpaExett) (seq (null) (seq (ap i NzZbUJzGUYtVwBXdvCVRz) (seq (null) (null))))))))))) (seq (ap i sgscbhuWomBWWeyCTiodAirguVNuCEk) (seq (seq (ap i RYqZuWJ) (seq (seq (ap i hDiBdBRpsDYgIuaZJlnAucpCgnsnUCLphgyjlFYVmgrrqJxvZRrmLsuFHcXLCDciUaYC) (seq (seq (ap i yrILWKwGItzcwpXKpcomRQLobdBLBibowMcRIdDrSbtZpsqcMoXkMLUQeJSaHJhdrCItVzAsrzbNJjHUfKGyzqPrjXbZbqNfz) (seq (null) (null))) (seq (ap i KZpBKzvFhRZvwLBRMZWLNnwctrqkjQzzk) (seq (null) (seq (ap i OTVDkxJkedsHPZsxAdnEaGuBlLUcYrlJMgjTsTbpiNjafNPWJGISSqCVWHcqtNfnAhNDwUbXnRzxowENRHUf) (seq (null) (null))))))) (seq (ap i GHTKbTFfNFtqWyOhjpdFbXWbZCbadWDdSaLRTDLktqGBqypFycDgDYzUcyYyiDHOqZAwLuSmlGQcxUHmWFFKNgua) (seq (seq (ap i tHBbcyadsdTVUzfXUzHV) (seq (null) (null))) (seq (ap i EGHWqSNHFnlbgO) (seq (null) (seq (ap i WuFwX) (seq (null) (null))))))))) (seq (ap i vuWXewjlHujFMKFvUfQQOnHBfbIWshFBiyDyRUyqkJzdkHOsUNsVxGSWBBYwsyGmIQpJfHqdXI) (seq (seq (ap i ArPeyoqaEflxxjkmDANwHdbVOYNT) (seq (seq (ap i sYCRqzjUzeHwVInKBoC) (seq (null) (null))) (seq (ap i KpwgcNrmAQYKVQhSlMKtncGzkEtmrieELcCUKClzQdQVOcrKVSwOIUsZIUNtuAYBACLSsrTZEDUIrPGbfdtNfxitaMlcUbnrxL) (seq (null) (seq (ap i ZeSkbwiowRImQfvoPjMZejDVoxHTgnHbqNMVIdyJNyotLDDNsrJ) (seq (null) (null))))))) (seq (ap i rynIuMwZxUfQYFFqOVozyFaeOrCuJNdrqapOBHkWoIBtZinchAizDFLdDLoVFmvLgW) (seq (seq (ap i WlGRMvBfLOodDyW) (seq (null) (null))) (seq (ap i OycnYNecQgGHuwjTfzyDvcUyRQShVSaeOKoRRnSl) (seq (null) (seq (ap i sXpNhispBVZaQgfIqwQZVmNdfnmFCBiphpntpluSjRUabrkYVi) (seq (null) (null))))))))))))) (seq (ap i vQORSeSirAznIARglTEVReUNBjbRYWOlYExRWFTTKpScaKFOglkLswFBDXCKLNammOvUO) (seq (seq (ap i fwKm) (seq (seq (ap i vSfwkKMNhBizaqRIcGaTPmGFDFcqvnMKyVxZ) (seq (seq (ap i eotGGqtFssREwMPcHllYXeZTkKuDjGPlGhqGW) (seq (seq (ap i vlqihBWxVfUeFPkgXqXIXXETkNOUIoHjkbHame) (seq (null) (null))) (seq (ap i tKTmjcqf) (seq (null) (seq (ap i nHYcpKAYiVIvFwcXuebVUfdxkFtGhCqFneTFNR) (seq (null) (null))))))) (seq (ap i bLNyAqxxgNdppHfatVvEFqbcSvmaeDbcOYARgECeyeewgUDsrQJ) (seq (seq (ap i SsJTNNguJCIUDceaGBupBUwXYwYfWLgmsZvnRwtCRiOrvWZbHowZwuWBmtXWFVozkklIwUvMymz) (seq (null) (null))) (seq (ap i NReJDOpyrwgqDdJKAjOhqlXXJTsJZZFoapyNCiwvidisYecxiXkqpmSGia) (seq (null) (seq (ap i cAhvmWANTPLYudZlErdUYzKnzisCWuzAxhXRnqGYGwcuNDcMYSCjVJybiXIbifUsYJlOcuryUiao) (seq (null) (null))))))))) (seq (ap i buRrLDIEpOrxMtrWKMzHpNTgzaeQX) (seq (seq (ap i znAdLqGeAdvYgspmLkxBgczrmCaPaKxxlBtciCixNyukWGQZRdrefHibXnLPQbZRAvjsJGKtaqOdvAuDENJogaCfeqI) (seq (seq (ap i ArjXazFhkHCcrdBKCgLCgNNUnsfVsGHXTsDePUAooebLsmZRdnyjZLaMWTXVsTwwQg) (seq (null) (null))) (seq (ap i XneGQZAbqNWrsaGgJAxnWwIzUtYWqAUvGiVQtdjGjORczEZJdCJXMrtMwermVOKTnIWztJRuDzQrIyceLTroTLQBILyY) (seq (null) (seq (ap i azXxEwZ) (seq (null) (null))))))) (seq (ap i mvhMWNJBdxnQVJSZCXzXnURJYpZgGneLPetoJEuHJMV) (seq (seq (ap i UJRbcsVMSUfRzheCrOQcCxwAGyOpQusPwclVDNALESjcVergmMTQUE) (seq (null) (null))) (seq (ap i FjieWPnPeqmfSNLRPiMyikJtOC) (seq (null) (seq (ap i YZFxZrSukDGcGHQOfWcyGponDxuNXjsQjDKYEMObWkijuhcKYxZAmVsOqLYuHLe) (seq (null) (null))))))))))) (seq (ap i gJXJXJJyXJKfApSpskgBUEEmvoRq) (seq (seq (ap i CQXAVhJomrFbFFSWdNRZlNyNvMQXLuJHtiKBedYfxWmOoteIbHjBAGumRyBJAgnYqsGrbtJP) (seq (seq (ap i nxaIIsIhdtqjxHsqxKAbXCuJLwIJZUsiydIUJnTTMnXwzaMBFqIstIXcjbONgDpFDQpEKddaOXgqXOCau) (seq (seq (ap i pGyGHsEBSlywObPnDFoOGXYjshzoqiGFMqNTbizywaQAYDwNUHmoxHzcBurOHlkoEpqPCDDvLuBRb) (seq (null) (null))) (seq (ap i tTFTAtZdohteSJzIAmwwPVsMXmyiKPsbIaTNWyFNfGSfZOxytcmWSKIGQHuNg) (seq (null) (seq (ap i IEmNEJZCaK) (seq (null) (null))))))) (seq (ap i KYGCItLSrzIhPeoOWuTSWVRbTroyFngXYJIYutCRlJvsmuVZnQXcBgLhpPEb) (seq (seq (ap i BAUixhTpOVQabPJgoEUomBctpLkjFItoKAJpetk) (seq (null) (null))) (seq (ap i HxkijkAkiPSausHnAVhjQuexDfaavk) (seq (null) (seq (ap i oSuGCNGlCriyaXulHteWXYCMJFnQsaUZISsXHQbxJBsyjHN) (seq (null) (null))))))))) (seq (ap i pugiRfWzOZJyqZxHVdlxWAebnSHyNDTsRSgPptETKwtRhrxVhUKdzEtXIVccYHpJESExFZfcIPqzVgeuUyoP) (seq (seq (ap i BYHDfIuWBjcEKXGBRaDPHszkZYBrbjxrGJDYpSKWgHOUvgR) (seq (seq (ap i fAmqI) (seq (null) (null))) (seq (ap i gACcdLWBybXfLtBDcFqTgvJaEWMFqMBkqWikoBRfclGYatSKTFtjlzvUaMLTF) (seq (null) (seq (ap i DPxwzdnqiwypMDjYkEFKWoEjSTIIWBLQjgskzjaRZcenTRYsLAupAMFrtzWMmcLSwmpsHQ) (seq (null) (null))))))) (seq (ap i nAQkxNBnafKbiPfNSCvTNuNBqXrrCSaFNGpOBFyuGgEaEeWKGaMwkusypabLNGHnlgRdXblfpwXjZDYopvIkNsP) (seq (seq (ap i dLrVRLrtUEtwhAUCdtRqjnrdedIbrjKoQQqcuEazYVdXtIAyyoBCjnsNSThxDSIDxghYJMbIWxsCzNLLZRcVarqAbd) (seq (null) (null))) (seq (ap i fmQvxvUu) (seq (null) (seq (ap i TNGeXGiSrplylKHdvNDtWo) (seq (null) (null))))))))))))))))))))))))) (seq (ap i GivpaqpyKyXMv) (seq (seq (ap i chWzObdomrHJpvoFhhhqhIYrYRxsEtcGBk) (seq (seq (ap i WcxWXdCDuzzczIazcsSTeInhLtDkjkDLraTRupnCAyqRlyKVOapdICggQ) (seq (seq (ap i lMzFxECBzxtYgakUftnuFSfFmRmPqpViYZTYEOVpEiwySUiE) (seq (seq (ap i BhVylxnjkePRpvfJRLRCmYalsqfxAQOHfTxjQjBfgUpwTMsWKJKVCAajsqRqboQEtbklJzuZyMN) (seq (seq (ap i EIOHbIsmisNyuXCAiQjIzrQcFGGNdciOAmzHsUjRffmqY) (seq (seq (ap i CcGGa) (seq (seq (ap i RoNxqQbNEivzZY) (seq (seq (ap i UBMBdrxXWCydWeLgDZWjxOEjiClJsfqYGLjBSmPysUiPgCTEbPVXHJLeboFRyyjwrZUGlEAoTjGbKmIy) (seq (seq (ap i KSOhvbaGuAtjhjbNCGJPEoLuyUMSTUqHMqCXXOuZqCDVhEqAyRqfIPpiN) (seq (seq (ap i FNfJNsSKExcvhQBSmzHEvIObkVWL) (seq (null) (null))) (seq (ap i kHmGLvoOfbbGIblsz) (seq (null) (null))))) (seq (ap i FJgKoPoOJXEnBNsQHHkFkUNk) (seq (seq (ap i cAupXumRxXdbNQqeJKPWmCrXeWqLDgGbVtmZWrxmUcTmq) (seq (null) (null))) (seq (ap i wPEuNIYrahLjrURReTQoDohkTNdSSKOtOUZKJgEuEKtnEUYMgIzbfedfqwjlzaCBeFdvWuybBhxPaCCNZqPonEiWcOALL) (seq (null) (seq (ap i JvMqIgYORcznYLLKcqDWjxzEzSIVKKBsAwUWYljA) (seq (null) (null))))))))) (seq (ap i LEkjFnbVixCxpvhMIuKAlhoBZEOyUmFFyhjdFaLoTfhaAbRkLZkViNIfaccpPwCsNMqSd) (seq (seq (ap i PuANAEIkWymqxdCHkhHMcQmvfVXqkgULipcamgUkXWbuLRw) (seq (seq (ap i UpLBjTeJSwlxBvzGJiWVfROKNRkKaFpOGtYYeyR) (seq (null) (null))) (seq (ap i oTvVFPnIcNBnXdqCZyoAhYJkeodHEcrfmnnQNbgQJcWDwVVDnmkBLqLqsmUEGBsQyLXhhpOqmHyYsRaNIKzIqiGJfloKJUhvnT) (seq (null) (seq (ap i YywSjmzxfhdTNlhoZoc) (seq (null) (null))))))) (seq (ap i YVNgGlcrTCSqkaCZHhZVoVLgzCjqPrRbfNZIxbSiNTIHshbPjtlBNzxFITNhKoDvqXjIrWCpFuatSSjOKDPbvkKtkPewbRUm) (seq (seq (ap i fWleVmgElBtqQbBGiEUjUtZJvnhrxCMjtxvSLfvPvpLKnlNthyXktColQ) (seq (null) (null))) (seq (ap i cjayGmklAPiQeakYKTzfzbNC) (seq (null) (seq (ap i nutyOWSYsBbRMnGIJWeoCJInNdHjOEo) (seq (null) (null))))))))))) (seq (ap i TBfyRpFMlnZIZYpEEPMQDzzDSBhHzlhCmTYItSkGoZIQEPPMyVzLUQTLWHXMKKkmRoDByjuRQVjVMjlYxyRlsvxlXRNhE) (seq (seq (ap i cBmKmgxssSmrasAbNwFoTGdEYjNJEyBcDUuukhjLl) (seq (seq (ap i DrVNzNbGrerMHELdlOxcgzcaMkApwhfxytmB) (seq (seq (ap i SuNquI) (seq (null) (null))) (seq (ap i ZShxGkvhPNvMMazsNMFMqCxrTDFsPW) (seq (null) (seq (ap i htVBAAjBnFAPRZXFKYGpzqwNfkFysUBdskiBogHW) (seq (null) (null))))))) (seq (ap i KsPZSHMfybDkvlqUwoMMGeZzdrrPmFzvJTPexLrDsYzZKoziIcavGoNdiwGMeNQeTzcaLPYqzhVIcnxVxIPt) (seq (seq (ap i bIhtmqIylHHiXVUiDFqDEgtvqnpIkwiyXCOFmuxhBEy) (seq (null) (null))) (seq (ap i azKjwoBpGjjrJFQfBbOivIYeRsAFGKxxPrSddfLJ) (seq (null) (seq (ap i yfjSYZvIOCsIowMUrshNCbxEjtLbhjqCeSfaZEHxNkjhDEzJTvQVqBXFxZfHhmBit) (seq (null) (null))))))))) (seq (ap i AlWSzLJiunXpNXEuSzgLXghhIKMPHJNHFXbQHiqHTzHKaCCijleMNaEn) (seq (seq (ap i odCVASSfzPKsJjzLZGVrmrTaQxBoMgJbWImjvABkCxQXMvKOcYYjadICORYpwrfnUdJmebhMXCRZjudycIINGCQxQvAXdTJINuT) (seq (seq (ap i poRJHQwwrctFxgvYzyvQZmSeTcPsMmQKXhkaXIotedBiZXVijxNjXhQOUaGVuBqVQutwaWbVYYuKUflB) (seq (null) (null))) (seq (ap i KXjxPusNoTNnFImSEJSQkVIbkwiNeFdamrirfipLYyDzipsFitHzOOSjfgKxDSKwZcVoBqZGoMop) (seq (null) (seq (ap i HxBnkbXtNVEyMKdkGxPWPoPLsoKAbWkYOpCQMkRVYECJhjEKHnrngHhENZDbnzxiTP) (seq (null) (null))))))) (seq (ap i GLOLgjIcvEIIYmMjxDJ) (seq (seq (ap i TUZyFoNeCLevmSObTrdIAqsyyKXVOLvtWrycaGDHzUThzr) (seq (null) (null))) (seq (ap i lIXkEWyEwuslVPjkuvoVSpfzDXMCYrzxcXTdgXsmGimQWzCTSVRXGCRn) (seq (null) (seq (ap i LWSYZQQEYRkWkYcJMgLlhcuRsSSTrNbMkfzYWyVCIQtrMc) (seq (null) (null))))))))))))) (seq (ap i LaAREE) (seq (seq (ap i gBmojBqXfCccIlFIgTwrXVrfLbtAewHSMgvOQjeGUjhcVjvWJDVlSiAVeTxFYdCHWMWzSPIHkjAncyPuqYMy) (seq (seq (ap i cQQKSQmtmzLDMimgNgMPabwJzyzHATbvmhjXWDMmMcsxPSwuobaEtGpSlsgpPZlXYYBQecJHqnn) (seq (seq (ap i pUyHnjughhqdbgeUTrOrPiPnhwNuCvAOSUFONMDTMeLuTdgrROmgyWTZQinMLuSFdOknM) (seq (seq (ap i WeZurMr) (seq (null) (null))) (seq (ap i dKGYvRLbGyB) (seq (null) (null))))) (seq (ap i DuZBBfVQRMDpQYDXuzbsokKnfGlNvCSBzRshkvVXYtIHKYbhjjgbllmiFzEEEqgQpLLFNZsRTxAks) (seq (seq (ap i PpfskRjOsjLDTufMyyVhXjRmRiIcnZfaagibvtPBgowArdpcTXpDwjxVoqTOpqKbSQwFcXLAVJWXftn) (seq (null) (null))) (seq (ap i PADqKKuEUBKiGXtUkbxCmzbJykaWALJPLfzNOaxOJMVlDTfBfrWpifYEQUSkLocElxlsooQm) (seq (null) (seq (ap i IOjKfGIphCpXcZzuOXeDIgSIViUPuNPiVRUyjuGGYF) (seq (null) (null))))))))) (seq (ap i mXBnpKjjAJeDWtiSAKJCkJQneENOqEPTMaecexjldZlMyfIsmngL) (seq (seq (ap i ogKFAAMKZPbQGRxqwiVlpWSrNQ) (seq (seq (ap i WdZUYPDftcdqEwCqlFOYOPNnwJeBYUhyNYewRGqZZKTGQCOLbcTZwLqYwxTWufofmszkqUpwxpYgPnCM) (seq (null) (null))) (seq (ap i fnunBAWqIRCwrxvRlGFAwkGsIkMmbLhvQxXSKyjBtnTRiIg) (seq (null) (seq (ap i LjObqywwa) (seq (null) (null))))))) (seq (ap i qWFwxqFEecfycAuLUvpdJPUFCKvosjoNXPOmWuotMiyyFatRDJdfZgQHjeZxTGOWpN) (seq (seq (ap i hVFByrDsmfdZsdnJKJTSsCqwCOQELJIxMAIHLopQbjtFuQNcVcuqNSCaUnfCfZebNBJVLyLWXKbS) (seq (null) (null))) (seq (ap i gLRJlOGtrSbRcrSExQHAXDuwfOuzrfInsxfNOukiTPtfPGxvXorJVCdhGjvxK) (seq (null) (seq (ap i tZvVmaJvjFuYTePexMNPbghsEoRB) (seq (null) (null))))))))))) (seq (ap i eqlClNemAPaQqlME) (seq (seq (ap i BLuRwSnBbZxpqRhzNuTcCgyILOCMXghDjIZryFivoyxeRK) (seq (seq (ap i iNRVUwZakKxjVnJCVjXNHdjPdJLHLbXSbEOZyYTgwYwTHSsqOxNbCPGrWalOChmDlvTuMKvVKY) (seq (seq (ap i FvYArQPzgriAvLAfIJhfuUUWfRGDXqntsBijaKDiTKlHCoZTGahdU) (seq (null) (null))) (seq (ap i XTeWbZSLbxqwBVIqdeUNwnCpwNVEzjDIzDsXKCDxWnAyjlbyiTk) (seq (null) (seq (ap i pAMzwGnvvGRZHatjwxjYA) (seq (null) (null))))))) (seq (ap i qhKPbgshlsrUSsoOcwDguaOYkjQyAlnEkTmoccKmwBuJfk) (seq (seq (ap i JZVnqQEYESASlbcWvRXUtAPKpZxuysKoFGcS) (seq (null) (null))) (seq (ap i EaVxFEIKWfkuiZwzWNatvSctPmcjlQCAwSNrZiXMGJWDASCmDFDooqfowSYJCOMTKqJzMsVFlogYNnsNumUxgLedw) (seq (null) (seq (ap i nsqbnElhqdXHdKSpqlBeO) (seq (null) (null))))))))) (seq (ap i mEHyZenKYwKhtkcLFWVOtCutjOxIrxlG) (seq (seq (ap i cxeMLNsAYvSNugNCBtSyHChXtCIIGRXBWYHuPDxHOvRNmPUyctblLlNASvYqhagA) (seq (seq (ap i gLUcQaOzSKrEMnPCPsHHLnDODKKhVHHChYLzwnoHkFFWZWlYMzaIInNupqWNBjBXHVUXDYxhcbaRxfglXDJwjZafAmmCdVmOhN) (seq (null) (null))) (seq (ap i woSeGdclXQBYeezbXAuYOjMIkHtSecakwgsGaILXWHmBOzYJaqeUjqLU) (seq (null) (seq (ap i uhZawNRKcYDkCRAGMjvjJReodxhAtPmDGjUIZiUjykRjuSNyjPbztRtzHHfDkAzkmiivwPQPwagWCSnkxixeGq) (seq (null) (null))))))) (seq (ap i vugiIufleeGjJWikwupDWYSlgkSbjHHkULZhzmEXpXTUfukaxolciYcSidnntHR) (seq (seq (ap i kArSNmYsYGimUMLlXPdpbXmgZpCAoLbyvQMaxizeXwpPgfewMVaYLAkMMYWwrQdLeCxEUVPiGAEjblRNapiggGoDZklCwFb) (seq (null) (null))) (seq (ap i uLgAgybOwXzBKxDQAhJrfHDYpiLTzADZYFpijJGmlxYKldIWXTCLcgjnJCOCNmnKeAdasMvrEffTEWPltzHCkaYDGEhiLG) (seq (null) (seq (ap i pBmEdwyanSpHmrlaiIsXDMnLAgClwGVRDAhwQBFVpFFjRnYZkXRwgbnpvpCfZVkADecTtbdYWpCUMCVAdenxKZuskxWP) (seq (null) (null))))))))))))))) (seq (ap i oYWtwcrSsrtFIoAIXsfnDgadmBiDJCgLXVJvuNIsoQYZICxFSPiwenBcvksltchfggxdivhomNsxNRrlKBIRtO) (seq (seq (ap i jaBbXxgBsRvfwiDmWeJeEjaEVJqloZUqgNVPtmEJUjiv) (seq (seq (ap i osLwBVpcpZQwlPTmkkzs) (seq (seq (ap i yDCqbhGNpuU) (seq (seq (ap i UelRGOI) (seq (seq (ap i lYSFTEbXnxsYWrZIJvvQSQTZux) (seq (null) (null))) (seq (ap i ikEjbyRIyVqHxugzEtsGMDZdYEFEJbIdbjSxiTxPmBUAzjLPJrzciTrTyzkHKUCzEWYVhGdJqSmExR) (seq (null) (null))))) (seq (ap i IETfZ) (seq (seq (ap i pQpwSoOGxlJcGNYmNQHmizVKgmahcxqzYbVhqOmNEbElrHFbtedhKgnvUmaLAamZGMqPTjZRodEdOdMkW) (seq (null) (null))) (seq (ap i nPGIZoXXxnyxFbWzdQqsChhzgEJZPiqpG) (seq (null) (seq (ap i VrfCydAzINTjpUKOTrPJg) (seq (null) (null))))))))) (seq (ap i VTwHOXYLqjMVUfMNnbRnOUfyQPXWhNHjtNeiKBSDBUDGGOIChkObBGqFqFVGkxCqoq) (seq (seq (ap i PgxnWlYxoNErcXcYzwiXiEjcEnhLmHJazdamPmUJpFUS) (seq (seq (ap i iidyrHxftJuZTAvqGDEZIJhwQllScILzzxqWhkqgixdIYxNczZajdSGfcIzhDjqfowCZBBGqSQaAlajctKjt) (seq (null) (null))) (seq (ap i TEMHxpVDDjtDAHhWiVWzUTcjFDUuWBHvsrIYXQiPCJDnrtOqIBMuFQ) (seq (null) (seq (ap i IBxUZiKnULGqpamdhe) (seq (null) (null))))))) (seq (ap i VPUHddkWPfpLnWTaCRzxDQRDdSQmMxcJMEZBQfy) (seq (seq (ap i nRBnkNLWIFgdCtbKrNEHYTVQWoRSVGtohQJgtcEWSiRNoTLuFoFdCofsVNUqlxMnFkruvnQ) (seq (null) (null))) (seq (ap i fEKLNyPBUeMDBsaPBwfaQUNmAnKAlIAYjtiqEvEJqUQdrnAZOfg) (seq (null) (seq (ap i lVLwXcBprjHKpeuSkwolNxGNUKsAWVrlTTLrhSajGjPLToWJznsVKgoljutAVXoMEQAecJuLxxUFKBDEtoVgnttsXasBPwtgSwV) (seq (null) (null))))))))))) (seq (ap i LAkMRLQokajIUSTkHmlUlNuQUhyORORLeOn) (seq (seq (ap i sCnEeAUMMvUDfFPlTAbeHbcN) (seq (seq (ap i uDmpADwlmdjsFaSwVnry) (seq (seq (ap i yXFVTTvGfNXCCRFpJBpb) (seq (null) (null))) (seq (ap i jOUYXRefZknWapFHOitpHPHhVZuuJOZUXasMkLelfkQqNmZOFtnQSEhpGFkqsglCJbrMfNtvyucnzWyNCuOpeHLkRXfKENOvs) (seq (null) (seq (ap i BvmKpxfTmFNepcjPTRtXkqDUYrOhxRGLBSUrJcnJATVPWnDcoQyAjUtMFoYaGfSRBRgvYFvCsIvrOswZ) (seq (null) (null))))))) (seq (ap i zsnMLLXeaIpwpCfbEbJQevMklpVjSQwZpxrmZlJvsOHPbYvouoQXVbENfgXXkqxkFwmZhjHPxjEnICMClqJPOJfxEVIKojtWVaM) (seq (seq (ap i RCflbNiZqXqjesPwA) (seq (null) (null))) (seq (ap i vYMlGkaSJpmUdDDCJnOUbQhuNXHlyhQsGFgwNDIubyJrwMXAlwROLmfgapZLPShLIWNsPplFxaxWRO) (seq (null) (seq (ap i cmWYqMxILwsDTFuJKPHOLjnMBH) (seq (null) (null))))))))) (seq (ap i IHlEfOVnnXRRJbhGgtPdvMZAyFkwXRGejEHbVWcwelfekO) (seq (seq (ap i oahfshBbNCJIEWaOZLXxIHaCloMgounUZoNrCkmESGkbYnERxtOFixnlhdOUvgfkCaWgMOVhLADpILJBw) (seq (seq (ap i tTStnhNt) (seq (null) (null))) (seq (ap i OAQPEATlmCHCDlCVsl) (seq (null) (seq (ap i NxPnPwTHOeuYOWnZpqKJBOCOmYdTtDR) (seq (null) (null))))))) (seq (ap i DJuScqrMgXqVxYrHzjSNoIRIRyCVNyJWWKohvQMnyMGOraKVRxscwPmlqrzGkYYvXTfdTlgrzSDSX) (seq (seq (ap i pMGBoZIkepLDyP) (seq (null) (null))) (seq (ap i fRDgLvFVnuiCNXmeUWPSYyBHzSIbRhdzMnQRmrabdVwjzcCRCWCNYsHUWiiYHTIqNWaHWHxeDxkOjtpLiPFUnSXsKBN) (seq (null) (seq (ap i MOsmnalPOLsWABAWutnZsqCdtNogMWxhn) (seq (null) (null))))))))))))) (seq (ap i hneBGWSORPXcRmNMSVhXowgtzkfPglItmZyysqBgRtCVfuVATCIJcALVVUuoNYFBHwnQbxoBlMDqGZRBpwZOwdxsK) (seq (seq (ap i WJwrEiVFnruAGLSfepumaKprsQnvfUQNwkprbXNBVIqRuHZshRxvJfQmpPkekEeOUhRXakJVTZNmvuxTLjFjruIJMoQySK) (seq (seq (ap i gNUYzBfeQaZIzLjCRKimypOhX) (seq (seq (ap i JHMvdToKzFLsnjugKweEoNHhmdPU) (seq (seq (ap i CoLToKKnKhrrrzTyTOXxrWuXqluukQJeiovkEROtNljlnPmKJgmWMLTudjuWGJAjayS) (seq (null) (null))) (seq (ap i iwzNjLbjPCdafJrdzUxADsyOZFlqsMprgZflScwPwfopotGqiA) (seq (null) (null))))) (seq (ap i TPaDhJoOvDPTlwiVQxAACAwvMvUWDVEWZlvmCdMhlCijQTbmvbjfYhzpzQFJZbqYcjTxFKCNgEmkaawnPdcjGNediDCrKG) (seq (seq (ap i AoAMjvzNvUTOfDcTRDohyXSyBcICDahkRUuULHZwYTpvAgcLqEKJCPgmxzQBNTvMdWEPhOVjFPEWtvsEeIQSzh) (seq (null) (null))) (seq (ap i AjDsQemJSoJ) (seq (null) (seq (ap i FTWgwVvtmvCVUHECuinaAhcdAjGDqcIjPQIGmFkGKKimfCUFShINCVKLVwFrCWZjDiInKfWnPttdrBTXgRhgKwMaAZslaC) (seq (null) (null))))))))) (seq (ap i wCsWRSTXF) (seq (seq (ap i VOUkfaefCTfURbCbgHJglERbVTKdSNS) (seq (seq (ap i DLotKsnDmIkRrKP) (seq (null) (null))) (seq (ap i UtnomoVMMbiBOXWuDRMxMRiSZjnSDPRMsDXpjalfQBlmFcExWyFEVowhrFHBJEaDQhIOtUCfdJRurEJGjsRzYN) (seq (null) (seq (ap i ESLFDtIdEFQTuYeBVhFbgEJK) (seq (null) (null))))))) (seq (ap i dBmVocwwcrmqh) (seq (seq (ap i XpFuobCzUeDEchoxlVSshqxfkpcDzmVVVCNkDXqpxDRAWjOwnlGdZBJuPSZVukjZmPXHDCQobhyFP) (seq (null) (null))) (seq (ap i tChgCWGdLcsJdBsOwlaVBoTwHMFYIJqffTvaSzRSNIQOUSDrFbTyvjpPPpaHzpPMwhQHOTjJqUIjknCjflEiNRhfipnSJNuevSa) (seq (null) (seq (ap i XUMdzDfbyTEHNETkMUkuTCmjZjPkWlNWlQBocFlhnXWiOvfNHzeYSBdFxznCJ) (seq (null) (null))))))))))) (seq (ap i lJOtrsWvFAvokooNWZpxXNo) (seq (seq (ap i uDTBHQUGavurcZXrhtOlltKgsBxYrfqCkePPZfHOGNVIaMzuYJFSiqsg) (seq (seq (ap i kpHWTUSGOSWOgeYEnRLwRFlEKValFQzcHldGbZMtmYDKDm) (seq (seq (ap i mSMbpCZiqlOmxqfIqZNUERPVhtldRlJTTJuYAMIoUaAqEAyhXgUmMvhPLYXknQRaqxdMLrRVFbIdQYUlQ) (seq (null) (null))) (seq (ap i tKknaFpdWVuPfODUGOXUwcFnnBaQtyNqSxeAplUosKYJfdIRyTQkXkgJpwFcWrNDqFdchoigwNhIRItyzdQ) (seq (null) (seq (ap i hjbzCmTCUgXBPqZubpkcfyIcyzEgFjWXPwfvs) (seq (null) (null))))))) (seq (ap i DUxnOCkXBRAhugXkdMslMBAISW) (seq (seq (ap i FixfeaFbsdPScOVfKraLCZSeweIZxPDJRXubjLTPABvAQMOmKEkqFUORTjiphKeWxzvGXxfLQgXhcmxPrhDvUzTkzENrh) (seq (null) (null))) (seq (ap i PuxwzQwkrGgnSusCNkIeFiEyrYBteKzTuXAUiKxYsFBsibfZrYImAzUSitdnySMewNgGkR) (seq (null) (seq (ap i HSZOWEggFxWdxHrtkjUFD) (seq (null) (null))))))))) (seq (ap i nhbDJqmNAyOHHjcGTcwBFYidyQZCCJtnw) (seq (seq (ap i YqCnaqdPowSTzBwSTyeolztiYeydvlKzoCBQWb) (seq (seq (ap i FeKrxhDsJyvjdeQSJlhlulqGjWawyLoTaiYBFTqgFREcSVUqleLzniIlHijofmTImoYcZTRIDZtlrBerTlLywd) (seq (null) (null))) (seq (ap i zaVTXJvSOCmExNsoqYjEyBDR) (seq (null) (seq (ap i XILSZYdEAVYscGdqnsQkFLgAhYJYbNTW) (seq (null) (null))))))) (seq (ap i wIqlZMVZOUQAIPCYcqTSRitFKrSULQRVzDtMwvySUyfxCfVaBqfQIsBkEtCTvogzNGsUAfsmudyJvAGbUXEWhXB) (seq (seq (ap i GoMrzBynMNCFqbonwYiNtjwJdebfAgX) (seq (null) (null))) (seq (ap i nBFFOhHTZCgvrrXuzuezTZZUBacDVvjogbcYZOAmUJusLMugpjbzMPEHPtzvPuyNRRN) (seq (null) (seq (ap i IKCTawGuEFwOygJQwbTliKhTUkZPDRumSRmZujpVHsaVWpesAwRYFJSNAyYYiAPsqPxwHdchZXfHIEvFDqOz) (seq (null) (null))))))))))))))))) (seq (ap i VLkQRZwFfIzcwmtULIyCrDtPUaIIESvkAekrlRGVINZjhnKQyMajcenIQdlfLLCxwWoZksxdcnWksQDIVpC) (seq (seq (ap i iYvSPQiADmAWnYuVvTSTjtgdpsTFjGOSfWSAtePJAQcZSgMXBCoxgaEGzr) (seq (seq (ap i KtvFhBsidZFXfDXhGvJRiHbipCloWdxALIqTfPcluzgVIzoKdpECWporXZrdFoFlJRNkmilWmMbaUCErUuQwMRQOmUqAagE) (seq (seq (ap i TkMSfzajUcGodxbRHgqlSuHpRuKnaodkIkDbOCGZccSjtJhuiVpVbIGfcJWFSlEyVSUsEsxBAWOGLhioPRNnnZzxVWrXiCJnythr) (seq (seq (ap i AfLfJXRZLQWfLRnumsuUOPomwMxyIyzk) (seq (seq (ap i uxrYvZgqmmEZRkYaOiBvUMhYQiGwQEtOxmJYT) (seq (seq (ap i EEVQfLQhLYAtvNXFjUQtlgJFXpLWtXyFtuESoSsgjgTj) (seq (null) (null))) (seq (ap i hIBpogvKHsQmgANTMKVNBldAiMsbLTMTsIVsJVxgBFZXQQUbsedLJiOUreXFHcpraFFjsmwMYdnBQwAuGaSjurLmaPPlKNiXb) (seq (null) (null))))) (seq (ap i YQXDfWlwBwoGBCuD) (seq (seq (ap i MaCXognATlwsywpPifhPqhUTFuJhfO) (seq (null) (null))) (seq (ap i BALJgAXLDXWIpJJYWYeDOWoiVxbHXKEaPtzSPFLIbCeIUCWzSJM) (seq (null) (seq (ap i SwkZqcNIlwUARSzTrnTKWSNgNDIlCvVEPcymSzTAlOVPzp) (seq (null) (null))))))))) (seq (ap i yVUQHAAepDytKuYOTWTmpkPxdifCXaizoydpjxcHBOCPIcCmyWwea) (seq (seq (ap i kvGbjankoTJeALjuUfbxiVIBJhflJYKjlpwHPcyzbbGSaFKgLVdGEKixQVRPJgDxSEjHz) (seq (seq (ap i DvdLABtNxoxm) (seq (null) (null))) (seq (ap i WGH) (seq (null) (seq (ap i ChIgUdueqZCgdgtVPIaPTifpkidMIKONrdC) (seq (null) (null))))))) (seq (ap i MmRtKDiYgfnNunsOFBVmJpgkogMNHQXipvnnZHVPIaxFaQWArzzLDULuYjUulLdVMeHkQavmDMUKTAHQlkQFuhdiyKhbPXTATvgo) (seq (seq (ap i MTCGYdRMuImZInVXCoyoHSNHPSCFJQTDjkNrKyaz) (seq (null) (null))) (seq (ap i GmPvTnoktLYhcTthXvOdQnBejkpyrbwymLdTsZaweIiJQfAopGStr) (seq (null) (seq (ap i BsuAqGYUTQIXiIVAqbavRTIty) (seq (null) (null))))))))))) (seq (ap i phJNdziDhcZqGRGSxkWbQg) (seq (seq (ap i DHBiKEvoYSEmOefXuZUJSTsdDxUFTesmQvJwwYEaigq) (seq (seq (ap i ZDSezXmRRoJrETMprukrzusuEhaamMqqdqvdsaOliXEWlQUhqaUErkUPRHlDvluSsKg) (seq (seq (ap i PziqSOJZgQPYPEmFeJwofNBORBjPGKzeeHbInEdBZKZJIpckNLnZrYXnJuIPrbBngOPCPlEWrP) (seq (null) (null))) (seq (ap i TdGfzsRpLOYnFaCqUNlmbAfTEpftp) (seq (null) (seq (ap i gEEiEyKPPvBScqjijSkGaZWqPGclugiujmiR) (seq (null) (null))))))) (seq (ap i LmYbPckHmvmNEOGVVWqyzsNzTsGwUdVcbipspUBxaKdskhmGnJpCfKyYdFOjgbTdjCIfecDyaIixBeJOnTsUsKjwgYC) (seq (seq (ap i xICTuZesAHezNCwKvMIWgX) (seq (null) (null))) (seq (ap i VwQTpPQHkgcqhszdugUnrn) (seq (null) (seq (ap i ESmJznGfLW) (seq (null) (null))))))))) (seq (ap i SQmHAHqvPXxIgKVBCsPAFwEHUqXNkrVdFQpBwUVIYFUzXvJSjWvjAsMW) (seq (seq (ap i NdMEfISgmDnXeCYavLaImfBjCevQHVIEzSwQJTY) (seq (seq (ap i FZpwSKCqQnflAZdaAzFmnYrLOglJwzqUslQEOfZyzMjnwmwiMZRYrVIFGwtCYXnTPZVghxY) (seq (null) (null))) (seq (ap i oTfnyjFywaFMJEMmZxCSXsmRxcmopLghgAfoFzsCUZAyCZUaL) (seq (null) (seq (ap i LYk) (seq (null) (null))))))) (seq (ap i VNPnOq) (seq (seq (ap i XuASoeHfqoHLDXRjFzcBiXIflezEaGtayJpeVTnIGGEvaFCXbHgsodRIfVuAWvTClOujh) (seq (null) (null))) (seq (ap i JcZEHPIqaLxPkMUVWuf) (seq (null) (seq (ap i yObVcHWKCGAxRsaBQaIDpdcBadtWWLsUUCcF) (seq (null) (null))))))))))))) (seq (ap i JfhbOMzHbUPTkntQdsalnRJDlWVKgglTKfTUFapykHEiPbvyKfSBuPnupuGhMUFIIbGlDUNOgRDrZvZlJLwCKaBFWYPE) (seq (seq (ap i fBvVYildsVPhgKrCRshaexIGqRReOQUVbJCHlrlYoiVvIaxDtvcCFZjTCCRJYscebJTgsayFNrXXMTuAbokbszXTSxjQLafzafcI) (seq (seq (ap i SoNyLcufVyhdoJjztPIHLsEnjndKOWchQAfMaDamZmUmyUumUYBgVLgrlRbvVJxcSMjiErqpQCLCZuwjzxIElf) (seq (seq (ap i FqtYrwTxBfqGfAHJBOjzaPoycgEOOYAHXMpooDTyHriaIGiSFxHuQcGWlgCUaysmNQTOphfmDOYL) (seq (seq (ap i HWJENtiViErIrXDvneUHFZgr) (seq (null) (null))) (seq (ap i aRxjrVaDOJvpZkoasDSAKGjgNiXxpFzEbsJFutViQjzNMMBToaJczApaw) (seq (null) (null))))) (seq (ap i ZEipyqAnrDHixXmQNbskeYKn) (seq (seq (ap i NTEKaYHQtIDnFQCTvEpwilhbsSXEWPviLAOkddreTwwQYHUagtDOYCjyABqEQQutRmkNfHRMEwvdEdPTxhZe) (seq (null) (null))) (seq (ap i jVQzoLGndtpgiCilFRtZthkVbLiuFRtcBMkohlgRVtdeyGlunZjfTgVaEOihRaqxcwnTCg) (seq (null) (seq (ap i PRWIrVNkxjgabvmDsJKbcWqjkaXqOqyujDMmMtCRwgkhzkVoihrZBkKGPKjjzniVVvwQqXUDQUDPhNuhHEioKGYAcLFeEr) (seq (null) (null))))))))) (seq (ap i MNYQSjaYydHIIxeGSASkBjUZpFbVXPsyBaeewvDEXgSFfvVJUrLOKOpSDvxOYdFuWGhslIyzspPVDpuQOhfXrjaGGBvAeizIesq) (seq (seq (ap i wnhWJXBhluRXanFpDpmMnXOkBtsXEsOPSQCjgfPwzWYEZSQHX) (seq (seq (ap i vl) (seq (null) (null))) (seq (ap i ZZDVKHJhxhsoQtQniQIEoxkmfTbYUfnRkeaSwZpWkzZPiHQIBaBJEYQxGBSyecPycHFb) (seq (null) (seq (ap i HHwfghPQzlAqQQDOnwecMfAohdJSVfiuZtbtrcv) (seq (null) (null))))))) (seq (ap i zwflyKQhFXMKgzJGrAcUHbiOciIIYWhzuhdZIeASXZEwCaSjcpzsrbFgYhFpVYWFofEZunqZLErJIstCqeYcLBcAWyCBZuOassZT) (seq (seq (ap i uLSNlHhEnvOeMVEsVvhmztUzEoXpmMDHgrleJJqCMxMxEPwXLkCNgQxpORR) (seq (null) (null))) (seq (ap i hymnReLplQqbcnXIHJDUkPSZDfeXFKSiYMlvzyBNboltRgOwvNdDJQgEOuIjxvLHIcr) (seq (null) (seq (ap i cIEDQiobTCHGpabjynzJNotLIFmdjkiXAWorXkcIqkgcQCUAMHfilvruIZZuQSpsoxpPitZNw) (seq (null) (null))))))))))) (seq (ap i PVGLvaCrLxgdVOpshzkIjgbzuLNTbztMgmAYnNVOyDVapybAzjvnZRtwcUdZKer) (seq (seq (ap i wOPwnSpkUXKTrgvFlaZXkCaObSqyPkgtNLEDZzMmxBpymFyLUdBcMeerwnuuqKut) (seq (seq (ap i jWheteolxZjUeRnHPCdqYQsLWEHNfQskUFBXgJWNnwHqUvGpxYEDhpqOGPgHykwehdRNGbofZNAwytJN) (seq (seq (ap i ZXIriXUKJzTucRrfPQvBdBoTFjBlQMbb) (seq (null) (null))) (seq (ap i YaeYJdFMWcWwPqgFfzMvjWyMRXSZLObxFIhJ) (seq (null) (seq (ap i JsgFVYTzaYlbogyqugWAcwGgHuamDHxIzmVcvfhzNwAox) (seq (null) (null))))))) (seq (ap i lWDcP) (seq (seq (ap i DhmMEzbyjokWVjVYAjjAvK) (seq (null) (null))) (seq (ap i pwxPcKkzfULjinVtkimsOoojFRVHGuvTliGOwipuudbuYfScRUMtUxxHuaUSIrPpqcLVAPfSlLTnsaCsSQbZ) (seq (null) (seq (ap i QHBlJkhfEGJPymWBhByYaURvMZVULFbGVVRxbOXidUjRyyHCgVUWpvQPKjHohOmZ) (seq (null) (null))))))))) (seq (ap i oIPPxBfsiKrwFYsdxAOeTBPUBGUrrubhvVnHtbwLi) (seq (seq (ap i Ymxpk) (seq (seq (ap i aPUuZSgGyRgebXKNJxpBNDCKRYzVIVHK) (seq (null) (null))) (seq (ap i AHQHWvhAqYMvNCrsLsirvuGnYFrHnQlAsGhssDfI) (seq (null) (seq (ap i HUZqfXhhbXcivVqWvwRLrIGcGEJuYawCCDfUSyYnpmysqzoOxEUfFZgrXAqJMGwPLUDsJOsgqZMEXFgLuGM) (seq (null) (null))))))) (seq (ap i FNGBsEzTopCkdmTLZoaqvyPxEiJhvBBJFDvNvxBhzZmCNiayFIsbSBGKbzmMmRF) (seq (seq (ap i vUygJphsWdtRshFPPydSQugJOkKzZDJLqzmSjnDOXbUYvUOWnOpnDDYwzIKEVtBsAXKNWKq) (seq (null) (null))) (seq (ap i BtUxFloIMmOwTcfDPLXXIGKJHifAsYqfJvIdVmaFwhrJpPHvXxuHFXkFxTjSIlBDNbPpSmKzVgafiSEGSSwTGSEwnrjYFh) (seq (null) (seq (ap i MPJTEKZlZPcRyaCBBZAMSXaHawYhldVvjzRAGzYVlPJtovQvhlSAtfTGqbMrkWYTzBcqDmmiVZPocGAQbRIRlqXkK) (seq (null) (null))))))))))))))) (seq (ap i mdnzLJtxHizqYeKWiVodbDoztIdRjGFtfeYORruikAe) (seq (seq (ap i zmOzPVMMqficTKrDz) (seq (seq (ap i XJwroNnCpxGZMzcJTxSqvGdVxuFUsiJRlAatMEQEehAlozqHxlJbQnPvikiyTfZOPXpCPnTyaba) (seq (seq (ap i DmcCBKShwN) (seq (seq (ap i fhdeCJvAOdZEYwiIDgKeMXbHhnItLpgfcbTpbmUjO) (seq (seq (ap i UulkwAOuVuvgRbGGWMMjOXxDwoa) (seq (null) (null))) (seq (ap i yVhdKPWu) (seq (null) (null))))) (seq (ap i wDuscNnVydDulcEGKVzWQQbNyNHSdcVEpwvwCEpXHkrI) (seq (seq (ap i iOONJPcHUjTTearTwRxWsvPfmGihGvHADJOCOxqDoUsgBEpa) (seq (null) (null))) (seq (ap i EooQeDkePGOOihjMIQRJihsatQcAGCFBwuEfbMZMFANgPZzQjBTYKdmJnrrpKLmdNcGYzKCMrXHocmAcwrf) (seq (null) (seq (ap i dyZGZGlmGlUxLxpSvCkqThbeMsITHGgfnBkJGgKCpcziiUPzvlAhKTsF) (seq (null) (null))))))))) (seq (ap i cuvUswBtOBMcWZBJSXiWNHSUTeuqspQrzXYGnxlnLGArJcXEwCZXxZveouGiDNWcHBZrJBTLjOMYVhWXeGs) (seq (seq (ap i oqhmTLJcoFictocgXFBIJ) (seq (seq (ap i HnfjxqZPSHALwbHSFULnFvJAQCagpMtJHrrzvYcwmNplaKTrcteNbfhMRZuvFIuKMdEHVCIDoCyjpjGYYuzz) (seq (null) (null))) (seq (ap i vWWXmXhznpyfCrBOFNdSXSXrukysHcnfHGSJtu) (seq (null) (seq (ap i AXMlMGdCQphELJiXYTXHtySmRKYEeOdReGBNoHwDXLrnHUKvewPCaVMwAaJWwbsKtRgOItXUoUKitptNzYxAQHuXF) (seq (null) (null))))))) (seq (ap i flhgoTptYGoZEDSDrwUyWtvUHjqBcghpOEPsBE) (seq (seq (ap i oGSKFMEuCQgthTOLX) (seq (null) (null))) (seq (ap i domNnifQotcQkZEPqfmdOqHnIHmfsOlpYVoesSNeEvGPafwyuaFGaDiRckIIvvRbAxoJhAArYtqbbFlYIjQTeerAoawOfEFAeYt) (seq (null) (seq (ap i yAVnVrBmvwFXKlgBwaSqRnDhiKPHSjwFmlfSnksYDXloMNXltdFIxURgSEKQxsTvHzYqxEhFAOHUlxjYXbkzxjrnqRqe) (seq (null) (null))))))))))) (seq (ap i eGmyEznfNvVgdpRkfRNLNphbvbVBOxzWZpBRZMjMzIjpMMpviYbWQTisIHOdrrMYXFlIsjGduKWxgjyQfErbgsMqbdmLyoiiPppe) (seq (seq (ap i saGdtkyyXjNKaUDXiJskFuKRqYZXVvnDvANUwFAZacjeROFQHlgpYBOmwXLGbJWuDHsAmkniarsuUTcQtUI) (seq (seq (ap i mhXmwkmjpRMGnCcePrGYlqgqIvQvvbYGWagfYfBuMVuhohLfuvcAvKKxlGYWLWBkMGjxggI) (seq (seq (ap i lgoGejOARKJReTQGGyPlYQETVWmautFoMepKaVZuXJuOzNXTIIpbZvNB) (seq (null) (null))) (seq (ap i jEVAzAlNrMOxvkjXRLeJNmVAqlBAFwaPBvKqcWgAJpvksewVKZXYfbwCGcqHHFGFUoUfJWlSrYshJZoLGYwiUpAGcVxE) (seq (null) (seq (ap i EGQefXqNwdYdLvEYvdqOIxGFuEgLhuTuQjUSDPzFWXPexgWZNxhISzLrsWWShspQKymtlQZorbkffBwYslPrwUHZVJkXkwXQKey) (seq (null) (null))))))) (seq (ap i IbUhZaZzvOstxYotjIUkpmFQyshskQCtUQ) (seq (seq (ap i cKmcLrFLiDUEAqxCFChBoCBDTjGKPJEnvfHxybDbmVBlVLIsnrfMvJYRoviOBZMLhadbEeGFhQxXeDeSQFuidafbgGSoGkwjKoq) (seq (null) (null))) (seq (ap i dUDtRwgHibgXUmsjEMbbmGPinEnrCefAMqjMsdLPrAeDBIyEnW) (seq (null) (seq (ap i BOrbODQ) (seq (null) (null))))))))) (seq (ap i BaQqajKzhtDPAyoIkQlIkoyf) (seq (seq (ap i leArOqkKftNRdwLNJsASRlILAsFjZIaTWuvjuajCoVAAFQBjwHmAzwcPFhrGDaJXeQHPmCSjvhninXDk) (seq (seq (ap i YBKKBLIMkgLXmrex) (seq (null) (null))) (seq (ap i LwuwrPjTECPPuhuCfAkeyMAMErpQOToLqspaSejVVWsatmE) (seq (null) (seq (ap i MLhDesTxXWMveCyFgdBgZrExnxumXrFodExSkfOtHJcfwn) (seq (null) (null))))))) (seq (ap i fqHOnmQOn) (seq (seq (ap i MAtUMbFtnGBFlGchtbOcCBsNGw) (seq (null) (null))) (seq (ap i UNxsUQuYypbYHOuwrPzv) (seq (null) (seq (ap i tKKjhEAFIWRVluGJsUBBJjvFKunsyvXScReRhCBXVAUXnGycjFUbeo) (seq (null) (null))))))))))))) (seq (ap i LSCXloLYfozlaREemPFMaHNRWVdDwZ) (seq (seq (ap i LjBamQWTreNyyUqksHxoEHcUaxYBSltOpVPcNfirnViyhqgfXDdi) (seq (seq (ap i adqzbQNCDvApzDKERUSLfDAfKFozKutNYzwAtvPgcyWpbhjjNgkRDQQyNvWZvLEoknenXPmI) (seq (seq (ap i HmeDQYFVcaiJxFZVNrzMrgRewXVltywBtHWZZTtQcSXAOrHeIJlhSoyZHCMVkBSbcdGRgnjLYPGjdHFVdiOwhwgnNHPUiW) (seq (seq (ap i HPRuIRjRICIGgXiXqcvOVXcdSjiPGLPgDhxdfgIJaiXHVDtfVMlzpEpwtcauPJsfJKLAZ) (seq (null) (null))) (seq (ap i zEeNaYXMhqwPGPjbaaCxmwukBZwHXwgoNxvqGxNAf) (seq (null) (null))))) (seq (ap i xBhgKFkqBIMBFxLuemxXdolnbkHFYhMLPSLuGHWlozS) (seq (seq (ap i oczeAEpCmYBDlRmJaRpWjiupHRKBIgvoLrnwwnfAEdRvYwayeTVackAnUWOLpGsQMp) (seq (null) (null))) (seq (ap i OvyMLoOMOLAuXvFbfBDlYIOFUhmeGBCDREazSdMnUtmPDeYZSTblQgas) (seq (null) (seq (ap i yWWUJCrTkAtErX) (seq (null) (null))))))))) (seq (ap i kABvHFMUwiEsNvDhRZhhlgFsVFRcnKIsYE) (seq (seq (ap i iEzOBzNtIgdNMSaxnNFcsYpYTIWLkbqYWpsOzKaluzaYtGdk) (seq (seq (ap i uhxeElaNvkJlVjkOpdIxuCXxOJBOZKghemVzhYBLAoMOnjtwWwFhXSeKSCJEmZ) (seq (null) (null))) (seq (ap i KKLnJQflhAQAOcyPikdKIVKEvObc) (seq (null) (seq (ap i ZrNNpooGAfnKtWONsjPutGYyrmIVVBeGvvAQfKXGpuFjCWHGAZFOlMMUGoBTyahZVDQBDiy) (seq (null) (null))))))) (seq (ap i fVsbwgElEpfKKhXuYYIAkJmUxByGNagPXoyHKKHXJDUaZZCFYGdPIvVEyQMRwbRkyvVejFVESdtnjWnk) (seq (seq (ap i KQicpptPzoshETrNbpdHJVZzWIqpP) (seq (null) (null))) (seq (ap i XtiVkhLnnJlThwUxrysNGJcQBwXPkbzVaSXCSrVzFQDMbDoXsnKccatYRn) (seq (null) (seq (ap i nKTgoUuUjcAXhaczdUy) (seq (null) (null))))))))))) (seq (ap i snksFjdONSFBWIQwXdIoRFxSwSITgFiQTLbCMwXfrfUCkznhFEDCHXgxpqmmyWgvDbPGfLlbADZUSSRZNwGGtcFWQWgJNjKGbbbZ) (seq (seq (ap i oorBUDrizonAv) (seq (seq (ap i OqXg) (seq (seq (ap i iHfUgjPHihTHOWTANEFJQmmuqLDvYTZWCOrNovtFpoYmcBxdlybKfEZOsZuyGuueVpeUdDQwqMZyyob) (seq (null) (null))) (seq (ap i hSNlDIBiqaFORWBgEbFxUgOunOiBBLSyBmmFVN) (seq (null) (seq (ap i XROsyTVWubiQGfTOAgeByFBEFCiRTRaFmRJEnTXHHhXcDndpqjmgqHoTFMOdFuEiDCMqPxGgUgtZusivsmFrJScEpTfpBaZhNQP) (seq (null) (null))))))) (seq (ap i ApqZpbcSnMxZxUqIVFTmEqluZNTiJLJaMiYEnwavrmrQRQtDlwdgsM) (seq (seq (ap i TEQQTiooUYCGTdnIduqxcPSGAqVvwrhAznGFgFVcdhLxfVgbFCIemsrvvEqbAkDprzHJesfbP) (seq (null) (null))) (seq (ap i DjGYWBOqOPTBXwhntkURbheRasgcotGkiAzcphQkyKTDzoaBZngOcdGDIaVKXjfmsnfDrWtryZuuwSTmgXtgMB) (seq (null) (seq (ap i rGSzzhKZXiHwFGnTQKZMUTmNHTKLxvaBhA) (seq (null) (null))))))))) (seq (ap i cMrM) (seq (seq (ap i JhZSuJRlBQq) (seq (seq (ap i jexHjSIubYjGXtTuRaunCuej) (seq (null) (null))) (seq (ap i ckDVPhQddUWZAyzYCyjuUUnVjnpPqvlPTPHTOVPcxmzvwEQIJkBPKuMWFQVMLVJbgEa) (seq (null) (seq (ap i OXFsYNmpvpQpdHunycqJJKlzBJVbVSzhWsdFcVaSbyoNodNYmBogd) (seq (null) (null))))))) (seq (ap i ccgAdwsCgwtmXgrgBauqvONdIuVolNMJQKKSECTnamndn) (seq (seq (ap i aqakzVIqExYvOHPdLFmwYRpOBtzMHCOQl) (seq (null) (null))) (seq (ap i EcUYkCUpKeqKkCgAzXZhlRjmqgSGtOImxheg) (seq (null) (seq (ap i LqqTOqDSQpQOfXzfMTLsYgGAcHZWVHpQnYkpTsiIxujMO) (seq (null) (null))))))))))))))))))) (seq (ap i ywPapyuEsFtIOKMXtOvjSfuYYjpIKmMJRRFqwtKLPkNLpZf) (seq (seq (ap i MGbyTDSFFxefoYeEeUXcQkQzQRoMbyowrckRMobPqpZaqCErvsSMWtNIzsvvveuVoeJJZpPFfnsNQqeiYrymyMFrhWH) (seq (seq (ap i CmrdJVqdoVMYNknUWyTxKUfGwRHVZbjKUCxUVESLDYQeyfeDRssptMutgbFnULszxTPHnsPXQRMFpVPWSlsJWJMLdqm) (seq (seq (ap i zawNlcfdgcbZxPrlPPoyVWXYFmGAIdSzhuZikuLHXBuEntOjxFOtBuyFCohpvKsCChyFTDKHVwNxzXiELVaPsuhec) (seq (seq (ap i cwywaAbrgQTVEPdVHOLWcGnIqIOoYjmQbsTjNqJViLOrCqvxcCpJWfaxwmCvKZrpGWUkulz) (seq (seq (ap i SQ) (seq (seq (ap i moKxbvKuDiMrEWcUlnPfzVAtvLkjudhXHvwncLsFuCoAONNjLXGRSSCIEztvuMtnguFXIUeGEgMQZwWhBc) (seq (seq (ap i jffiCAdzTOmjtppTQgNwJQuGeILAOlHkNeECKTfJOYKmUJDkvuNnKohokmCkwneOwBnTQxtMAGCPdJQ) (seq (null) (null))) (seq (ap i TPELTKEHsWIudrVyCkhDzLeJcndTymieLhynEPvinAwesJHWABoVFHWOWrScsAUILGKDFnrerfFSmkbkNxklOsj) (seq (null) (null))))) (seq (ap i MzhtdPHnzApLscjCwSTgtJeNsgFVXel) (seq (seq (ap i srZfthpwKdjAZEQOjQzoHHYaMSSIWwnQyGVRABYblvvNOooAXcCHZwtdHhZNCJssyPMjyq) (seq (null) (null))) (seq (ap i ULKYydRNoedPBeJtIH) (seq (null) (seq (ap i imLjobVdzrQqpGzBKJeGSYKXSYhIQsoWwZstkeqZDxtblQoTTebqXnmTQYgCJ) (seq (null) (null))))))))) (seq (ap i eWgihPYynTfMROVfDQQRdX) (seq (seq (ap i TYraaxoSqAPuOdebOsKspQYeBtjiufKeyoIRMTmzahaxDWffCkxzGTOaqnAvmjGcvIRfZMQCKDlaVClkeTe) (seq (seq (ap i vG) (seq (null) (null))) (seq (ap i AduqlacCKQJdIgWuUuJmZipbfP) (seq (null) (seq (ap i ljgXYZKpTqVspu) (seq (null) (null))))))) (seq (ap i RdlZlRboTOhRnfHRMRXaChzojYuNMNvOQnKLo) (seq (seq (ap i kXtYkXnduroTiQYKXnXXLwoasGDTdBbkoGUNYcLMJpdpZyK) (seq (null) (null))) (seq (ap i zenNYRxGxnRZdNcve) (seq (null) (seq (ap i JodWRQuLGUmysLRjxBdRRbTTXuqVmQuHNZuVuEmn) (seq (null) (null))))))))))) (seq (ap i eAFFTbefgAEitPggOKeTulQUTkwsSqdma) (seq (seq (ap i zCvrtftnxgWcUfeLHkEzRgmKeCEblppJtbgcXXpYUG) (seq (seq (ap i ptmsKBYaEyjyGlGTzhncVvWWJyiPmqFhjHRGkDBgSQlFvIDtKpKidRDFhVuRAlPSQaVgFkxfVEmij) (seq (seq (ap i muMpWyatWIdReOe) (seq (null) (null))) (seq (ap i kogjgJTypzJjaHyoUNCtljvlosHM) (seq (null) (seq (ap i zWtdhXNaAeeHsplVyKDDFLGT) (seq (null) (null))))))) (seq (ap i JhoSidfWtKcNmMYVyvxwRTRvpPJRohVaRAmWmsVPETA) (seq (seq (ap i RsuJTeTiQHZLZFVAznxmNeVLXpDmRfacFnHcvmDlINfVsHijGpJczwzzVWbXoy) (seq (null) (null))) (seq (ap i YkxgFdXAvSQcYsumRuXfMVjcXWXonbnXerjmcUTamAfomfykazeCRlLPMHpoEzn) (seq (null) (seq (ap i iHJMmRbhpWGcHirbFOIzBPVYPmsBWpGguEGmJbAQemCdVvnEpxsyOEiihKdWf) (seq (null) (null))))))))) (seq (ap i THSbLNDDucWfOaPGQfk) (seq (seq (ap i FebGmDCayQU) (seq (seq (ap i GqhtFIwAHGBhNHvBafkViHcWskaxZsJLdyRDYpCYnScfTeHMxKoWDDfCDJ) (seq (null) (null))) (seq (ap i nABaCI) (seq (null) (seq (ap i tPEGvwRpWDECrYQszEpxHBsEwlfvXwVkMJWyORtbWCPVceBaBHTLwVlEyJLUzMCuzgIiQSodBWGb) (seq (null) (null))))))) (seq (ap i dpSkMNBlJFVbJisMsuMmcOTQuFfqbXphZwvDOIuCyULgXEhoxumNYaFvxOUTlnUOtMODSZwJzJomYR) (seq (seq (ap i UGLdHObhFVdeMKGtVxBBMRTMQbVwjpCAoTMEUGwO) (seq (null) (null))) (seq (ap i HBhDrqKoBOVIIvcKqvCtDbOxnQVnIgklQlPQqPBsCilHUvzRptBND) (seq (null) (seq (ap i DNthiYicGZTUwZUb) (seq (null) (null))))))))))))) (seq (ap i ZclRTSJFeEXPpANdtPgaMZLaTvwPEHSeeQgxajpoZknePxUhBaIOoYNicdQMaMqCEmkHaCtJpGUXThBZhAOnRnEEMiP) (seq (seq (ap i clAuwZPYmDHziSnemKWZDvZGaEnoUPSWvGfvaTRPtjsMajGhkpNSEXMcHGvBSpZnBSxiSPkNKcFUCMlh) (seq (seq (ap i EJDDGadxdIT) (seq (seq (ap i lNoIFerRjGZFFCgDQmEOUjpHfMpNsHIoiRREFyWTwtirEKweEIIMmDVnaiMV) (seq (seq (ap i ARPclfZcXLgabwpCKTlkXYdhVAFxNBPEkSFNzMddX) (seq (null) (null))) (seq (ap i KzZxWHseGJCDBoYlGatvqeDrdIDlzxjWQKnfqUPeJkSay) (seq (null) (null))))) (seq (ap i DFAcYDuGNFWTKgmPYEWUYiEJckazEQNqeXMyBeyGSkKNMFzAdzjcumYQQRxFfPkpMFJTZA) (seq (seq (ap i gTX) (seq (null) (null))) (seq (ap i MARJGshEwpBebwFSjMxsbtnOSCywUthsqsIVLVmwtGICyjxkbAwtklqivujgIuquMmGCbNYTxPJUYvLIXiTodwQsZJENbLlEF) (seq (null) (seq (ap i IlQUVsVjjdZU) (seq (null) (null))))))))) (seq (ap i MrMUViMMyzllqJmjLJZrndaPwGyRRcxkqpGPaHvhgUBvvBqUSKXgifXPgD) (seq (seq (ap i sAQJRyvWiYJyICzcOBJYwWnBVCUHyFRMiHnyWYpCIRCXEKmCnhofFUXHxLXqJGXJqYYSgcMQzZIJclI) (seq (seq (ap i SSFzidVNuYZvMGYRPhJAWaHkwDQaMvEoJDtqMalJZNXeUsVnPbUpiJe) (seq (null) (null))) (seq (ap i fzbSYMoFpglvvQPvRgDqwHrEgnZHejYpqZcUyBiwXiuHBHfuWWuVeZCylYUVQTZZidgIfupIwvWOqADesCRYVc) (seq (null) (seq (ap i JPCmyQdmJQnRevQSpPItgZSAPMbkIGVjvXwMgTRUFrLVKaWMitItthnuoZdnGGyXZFWbqBFtPgXMUXfCdYRqbTNVjqFxtlLSmIBO) (seq (null) (null))))))) (seq (ap i AUJEmKmoLVvdOaWybgZrLVUZZwLuKFjw) (seq (seq (ap i nTWEOassGNPYJiEHcojiiyDxoJFSXFngYfEJOohREFeiAKcYb) (seq (null) (null))) (seq (ap i aZFfGNfizEFBXKxzZOTLDQbSVnkpKWerngOCqRpc) (seq (null) (seq (ap i gTnFcgTKjPWfymVdOWakfMbKVMbjMwULkxqhxODxSHrRGJqEhldeBFDYGYjlyqTZBJZOeUvDvaMymaCYJWf) (seq (null) (null))))))))))) (seq (ap i UtmJqpzdWLVFlaMFkvkpXIEpaayzsqJFfkRqfzjpDSvLNVAQzfMLcQtpFvT) (seq (seq (ap i GABvKojWLZUaZPOGtwHjSCfBJpiXvfTdehAyTzOoGEoLwnqLAZTLJCOIeBWXFgchjOdlbByXvvttu) (seq (seq (ap i dNqabkRfqCQzUxbmJgcYwlegHTtVkeEDEnC) (seq (seq (ap i DlVnnaSz) (seq (null) (null))) (seq (ap i wyggEueeRBSVAzSftgvWqbWrRWZgKWcDbbTRKpZCGvZYJRamhynVSU) (seq (null) (seq (ap i WmM) (seq (null) (null))))))) (seq (ap i xgWarVDiyNSWcCRsTcjIMIKoHMhvYbDjGwFHEmxjPsxTeWlOSXRgwZWfNQivjHzXQcDAsWJGAkjzntzUEcXhq) (seq (seq (ap i iICkBwoWMICVnsAgQAaHOSgyDHWbMRVWEdxedt) (seq (null) (null))) (seq (ap i nKtxB) (seq (null) (seq (ap i WPQdwW) (seq (null) (null))))))))) (seq (ap i lUBMfYKOMUTNarQvyEZabKfyPnDfHrQLwCVUOVqVwpSziemtnKkiimDFhktAwScLOajXuEi) (seq (seq (ap i vGJBsgYdHjDgqDcACniVwIfHoPZLNXEaJUwatvRcdIXZGObeXCmvbGesVpqAICKQnmezcVFiI) (seq (seq (ap i UZZVbxduPoKXSaPEWcMNTNzqFclaBOyJojIACbfVJoEuoiTflXenycAwgZfA) (seq (null) (null))) (seq (ap i vRHuzEDDBImrVljvVme) (seq (null) (seq (ap i hAzQEt) (seq (null) (null))))))) (seq (ap i vDudkIJhWpNbGZVwruniiSfjVMDZWEjnLfrbeMQSwNeSOjOynQyVueFITzZOsaSzcVMvREbzcOHRXOOjjpvxNkdJWbZNxCpTzALC) (seq (seq (ap i DqHdsCEXPSOmAeVfdSYzZCzUrqgpXEcJOikYsBtmANMrHLhyvTPibMBLjy) (seq (null) (null))) (seq (ap i PzQVRHBcRNIjHcMIbScfBOzjoqPlufwAjxoEIIFRxdRkYrDAQQHhpkhJvwCDRgpYQUr) (seq (null) (seq (ap i YGkFGgQGtNksMCAaJnHjkUrEMYztvopSvaAgUIJyrjphjSOjbbtKg) (seq (null) (null))))))))))))))) (seq (ap i PTDrccXHklTvCkzftdtboTnBwa) (seq (seq (ap i lkdbLFZmNTxVBIITatQeTkQiT) (seq (seq (ap i YbzRLwteyNbpoPQoncVTpadanAQlwwgsanzyKRcGrtODzsVoriAnpozNKKfmvMYVugLKHUCenJJhAhUNFhBkUMSuzIb) (seq (seq (ap i tBEcVVsIvhejxuGyXKhYAtjpozEafloRDadoafcHbNVhxBqFLEpyBKkzEmcHmHoOi) (seq (seq (ap i GoWBjDfuVdKJkmyhAUewsRvzlOgYnONfmpXvSvxHItvPwAP) (seq (seq (ap i skfXCMcnMDxqnOXQhSvQtXBSC) (seq (null) (null))) (seq (ap i FeVoEVKwSDFXeFOmLMixicbzKaYerbKmBPrJTFLjeuQwolgNMGUCaiDUwYcPhJAaOknUDbzJarwNeIFcbvxwdTlELbRfH) (seq (null) (null))))) (seq (ap i WJSWgATajQfyAmyloNVNjvjnjyZuaVNoQkKlldNuUWZpxVNUqYvqQPFhJrHzdvkGX) (seq (seq (ap i iGBHzAmKGwsXDIsckUCNwfPJXhETlzgghLlyHCEUDcflfYitqizSzkc) (seq (null) (null))) (seq (ap i QQnVwRVNCrVZAEzOmKzqOfwCnuPZPjdCrWsWEJEFSumkrbANZqbNAxywwpewWSnaBKUMuwrEqyqxjwZSfNouVRBvumGi) (seq (null) (seq (ap i dIaJqkeKkYxfcvKNFWxrEIGsFXBoLhIizxtithGtjcrMZHYgfdrRsReVEuLw) (seq (null) (null))))))))) (seq (ap i lRnjzcIWSkePhzgVSiyhIHXSyyffbKDhFRqEKWxNnrkjYhLmuuJSoyGnbFIzMtweWnCPyOhRMPZaHlfiALLGkHYwOTCCoK) (seq (seq (ap i jttrofHtLpkJSMzRwNQBEmhhOuZKdudUxkuFuawUmqvyZgJaFlSeyQFFCItWrCqLeIsMgDJMKcosHoeoL) (seq (seq (ap i FXjFHrfjjGGTseMhuKabOuNnKpDjFMpwbGSANXWLoDzDFvSCTsSmJfgSsWezFWEAWZRkqzbQAWPiNLyvjnQSxiLJAqsAAZiD) (seq (null) (null))) (seq (ap i jopXdWskcSm) (seq (null) (seq (ap i PaZHujzOLydewgHAQpZSXThsJeaa) (seq (null) (null))))))) (seq (ap i nQzMXhEdLjVsqqUxBvPhjYRNZdXWTBTJXYjFKQOtn) (seq (seq (ap i ZbHsvJUezIjeqTmoUJGWOJWrAXrAvcqEDRuVf) (seq (null) (null))) (seq (ap i VhZjPZAvDRWIOrfOkEUIHZgFGunBvUXqWqfNRvwpTLOPhfVvCHwPKoayExZhyZrxLo) (seq (null) (seq (ap i SHnwMpRXGaNggNoIzZqPVyeZLVTZPlDoLacoxvEtFWxjHLoAqHwbmZod) (seq (null) (null))))))))))) (seq (ap i CWoPmPJUIeKVztZfS) (seq (seq (ap i rKvkaxRaraGtfndpjqkYqkpXCvWlliwkI) (seq (seq (ap i vKFQGXRRmCHbFehfUTPsIjyyTwxaxpWiVPyzEFLrhCBKxPhzADYpiUKxQZKZJlNkwekGzJMCRlNdkWYddJ) (seq (seq (ap i eWZQVTNBFDASYuGNSATphAKeaQdTnEbzOFBqJXVzzQMheNcRhhBzbGAUPxDhAzOamgbhUGqtnpLaLloUaLgnbgXQuLGvz) (seq (null) (null))) (seq (ap i FPJKnWHeTYUwwDgqfrUYsSNjuARyAnKEsRXpIrBonJBEKJjnEPoGAmcIxMyScBWnHuqjvAhApzlDXbleRwosYCh) (seq (null) (seq (ap i bttdRhjjxgJKxjUwDwgSuEzoNxZPhcvng) (seq (null) (null))))))) (seq (ap i WZFsYpnxbJalPNaDaoITollGjVyRyodXkotyJtGQfdSwHUiEnYTqcirKzqwSVRKCSXPeeLoFFm) (seq (seq (ap i XzIfhgMgPOCxUmeLcRsSFpdDzzdsOTTDroJYAUcEUKUBtHiiqUPzwIrERapUYkzeobrWNcgDQqtXwlNZNJmlan) (seq (null) (null))) (seq (ap i tuRIZjEoHoFOQrbltBUVIvQuHQiwXkwpUXDFnhOxaxW) (seq (null) (seq (ap i xsVTEyrHWVaAbkPFTcMUrUEevPffWikwahUSlAcaAFJxDzBQsQXwTcR) (seq (null) (null))))))))) (seq (ap i DcTKOfwxLPgkFCGOeRHsbuXGBfjyrdmySiPsmjGFRiQuTBQ) (seq (seq (ap i rhJnolQBcPEhfyvGDBu) (seq (seq (ap i jcjxQNlhqVNbprOCSyPyGUjSSPLEebyQtGhvjKserInLtjLeJlX) (seq (null) (null))) (seq (ap i KoAhLjXLQijkLQoaxpudekEuerEInIMDGYUGxLtyYzBXWUKBoSuXvPVaapsFgS) (seq (null) (seq (ap i ldUBQBQxzOTFWHiRGtIGiySwGuRTMcgzLAQAXauQAPPDsTidSruyTFHBStfDlVBX) (seq (null) (null))))))) (seq (ap i arfMBIcOmKuLCCJUIwdybZzhbBXUkhTEqspcUkjERMHcKpfZImneeNGW) (seq (seq (ap i stIaboHoQQWqJUoMAITGZkwxnowziMFqwDAcymswVdtVoIsjePBuvEHzpwvneVfIEAZZ) (seq (null) (null))) (seq (ap i rdcuSDt) (seq (null) (seq (ap i yBiOGBApmowywXYClGDZiuYXkXTuHlaCsiZiWEDGoEkZoamdBqNlnourwTlqoRReRDEDGuNuVhcZKyQaNsqvLFodBvjjpQmclu) (seq (null) (null))))))))))))) (seq (ap i mxEdRUXyWrPSEIBUrlOVnMATBlbQHNGozpGFrrCYSaQyTlGoSveYdQgHQAvaQNDfVo) (seq (seq (ap i DCLhhtWLoAXkFlNIYlThRQJNKXOkYJsTsKPUpYNSLjIzyzEQKkYEnMSYEVA) (seq (seq (ap i tbLRuPbzEeDjrLAtCSZKBByIcJxYfHgcSiATwqpHtWjnAHWhKriJ) (seq (seq (ap i mlKhuurRXzFSgztyDc) (seq (seq (ap i NYXMVnw) (seq (null) (null))) (seq (ap i qghbGVvSMwTLPkKpSOipTPekiiUFJQjYm) (seq (null) (null))))) (seq (ap i PoewbMZNZzEeskVeGJiGNOmYqVITEHjbXfrEVHjHfGcTrFehorrhxPfxsltmRavLN) (seq (seq (ap i qzVCGzBAqrBbnECJKqVKosBWitCpytgDMICEBzzaizpdIYwvPtLBTGqxyBvxsxhYdcdHYHTbCTDFLVlnazeRFUhENYYomM) (seq (null) (null))) (seq (ap i aacMaWomxfwVXfEWCBzayNjFBgqylzJJITEDkezKksiONWqfORVjwAxDXbZfPQcFIqIKtUEXmOfqcMGHdUenkm) (seq (null) (seq (ap i vFpEzGxoTmOGdcMwTNCmAIrELjuoZOUdPr) (seq (null) (null))))))))) (seq (ap i GIOblGdNeQBmFPgwEiIHHkmJDDbEAMjoiYqUNIvRhzsA) (seq (seq (ap i heRJRAUnFBjQRlElRBVFNerpnMGGPQlFJdJzheKbspyleCohujQihUBVNFyVoQieVolKDVtmiFna) (seq (seq (ap i cAbRXAJszCdwWXoSdcI) (seq (null) (null))) (seq (ap i BKihMBUTdMW) (seq (null) (seq (ap i rzJPOR) (seq (null) (null))))))) (seq (ap i yVQZnLDxYoBXbTOumdEElTMUxMhWUMJViEOAOWZHwrkepMKFrxmJxLulXauN) (seq (seq (ap i LQogLIMauXMRCQokBtZfqarBeiqZWkonIIVnYEvIDpLeALMLtuhOPMmELmaJmtP) (seq (null) (null))) (seq (ap i WjZIOcFKAkcbhGYmhmkTymOFWycjzBXOTomssFITyiCBScqsebEyRIHrjhAlZTnoHwDXAccijGsjsmBUlnVfANNJbkZxGWhINp) (seq (null) (seq (ap i LWfUlVsxkgjZLYTzferoRrHFSIciXCpdDpGoTtSnvagGgkimpZFqEoEPMjMkYVkTyIohTVBvLqGpXUBOwBIMSQPxxLeA) (seq (null) (null))))))))))) (seq (ap i uFLC) (seq (seq (ap i qqrrXGsDoYmEYXhkCPbErqwHwvDTASeaGZlUkiUKmXSIGoLvSKHqveFjBwOJaemINxBgSHOlqfZaX) (seq (seq (ap i IkrZzEIiQFzPjGyJyNDvkFNW) (seq (seq (ap i kkhAwFwWSmHlgDieuerTqDRWgkmOA) (seq (null) (null))) (seq (ap i dlMqUDtHDviVMdpZknGN) (seq (null) (seq (ap i MIUggAGHwJTile) (seq (null) (null))))))) (seq (ap i axQsgENAOJbVvQtIydOUP) (seq (seq (ap i FXMjEvvvROSCUZvmQtUgd) (seq (null) (null))) (seq (ap i bNSmQNsErrMUcvhSLWRxsaVZZKYWOJiyXfbngMTSRKoxPyVMylrelQyEyPerDdBytClh) (seq (null) (seq (ap i LnnmHKBRPjnwEFWTpUvJliyKPEAfztnjpviiLbMAOHwWQegMEVQyOXrZGieUfKHlgUj) (seq (null) (null))))))))) (seq (ap i soSugtwRsNRErbUhtuCDrYKnhQEJJDFcZJFBXHJRUqjpaKfAP) (seq (seq (ap i kccNrBDhFIzwoAsyAmMvXoiZrbsiDOuzoKLWRniaLxJOSYTbClKVkdEmixBvlhJFBLaHcjPTFuQeeYFgaX) (seq (seq (ap i zjnPaTgKvAMrOQIzMoOFMfVhTRMsKEFBbuNVWUhdSVLnVENXeJtObLKvIkkBIVHoWFOhRyhfMRvvQKTZwMwRTpwwX) (seq (null) (null))) (seq (ap i rvFpRzJlgMVKO) (seq (null) (seq (ap i heAPlYrazfflHNFWjXQJOKmFGIJYhdHAjrZWJzMcjOFiwaQwoPAubnK) (seq (null) (null))))))) (seq (ap i AQTqwOIprrASjsPVCWbUWlWIslFBDoy) (seq (seq (ap i vOQqPvXBIpOgmPTQEbJoLpTDtbkBurEtmeqWbnqOumQwhJBUwwMxhyJTLsYnVXXPkQtMKzUxNUCLARi) (seq (null) (null))) (seq (ap i LESlkoIktszbOdVZHkSqQufpQaTjhGGLeYhqnvgNZTRoWxX) (seq (null) (seq (ap i wXxWiQCdpkrpYroyfrTDRAfAuwFYlYwoZvWbcWeVfuotttVvmbcoLKULVjCkDafoCWzTKJvEdQKcEfWgvXkfxyCcgsv) (seq (null) (null))))))))))))))))) (seq (ap i lHMSQDrAOSJhJcZirZOJJUGDDhzbhcIbPEstfpTpxTDYjOVtqFTxTrZuUCGlJhvPcmFJaQRxsU) (seq (seq (ap i QJOYNXLNREYhrxlFTSSFcNUHbvONYxSosGMvLawUolspmVHgKODxQuiGeuApVTSrHTksnXqcbaCSJshqGGZkBMUJlFqRlfFPILb) (seq (seq (ap i PcHHGlJXViCpQCvUXydjtgtSXLIuY) (seq (seq (ap i kTxSVqATJXIsaftZtnqMQthlZZrDHgWXanwXfrdwyBykUoPRmrWHAiINgaxTNhnpiKcLQYVF) (seq (seq (ap i nSaoZNICsNOXSnqHBEffCCkJboTSwAreZetLjCsBcFJwNpkazwBdWvSMablTvjDETqWCwGQoDeKZkLr) (seq (seq (ap i aguiLeaDJXSQJILzvoDm) (seq (seq (ap i gqeFITDvAXSGkbzXsIJQyqGbsLOlYOpHYqy) (seq (null) (null))) (seq (ap i aUqjqOoLoMXYNjPVpdLnwjYnfWCsyQNKo) (seq (null) (null))))) (seq (ap i GKdwMDcOnCxfpRzxCGrUEHNZGJBuUqMVTAMcRcgzQcU) (seq (seq (ap i glvgSjMqYzdYXZHzulOMPLMLcLhSTyAihaHlTmbKOcteYJwbjBqyG) (seq (null) (null))) (seq (ap i zQDbpQFQuXkkFvrstyYDrMoCckhaNgaGLBnfeucuVhiizvuDJPvxoCUpBEjhTlUAwCZont) (seq (null) (seq (ap i qDsWUNwSvskjbLxRrlLnAFLJGuldnDQLdvCZfkGGxuCxpeZcskdMAMCDvwyKeziuhjWiRFgkBywuFzYwznTtijAWUFNYzpvCFbOP) (seq (null) (null))))))))) (seq (ap i NdcuoAyDdzygEIhYcc) (seq (seq (ap i bPzbMZXEPUAsFOrXBCpAAhXTpHBQQGjVlqCrbrUflqt) (seq (seq (ap i ynjefRggBTJTHYVwXhucYEt) (seq (null) (null))) (seq (ap i dIFTuoKlsyzGLuSkGnfsrAF) (seq (null) (seq (ap i BCNPElvWsxNfCnVPcEufnUcuCZNBSsVCWTxnYqLSurSnDJIzonIuiiQneaLBDZHMvdhgpKncZjIAvlhwRJTmREvIuhbvIPTqiCEf) (seq (null) (null))))))) (seq (ap i rBsluSblpwOFeTXFdQkrrsQamRwoQsHjgBriXmbJHMeGsShmQYYWEvKwnzjxHroPHQVEzehYUDrHD) (seq (seq (ap i LYxfreZVqDR) (seq (null) (null))) (seq (ap i ixAAEvFlKvkNotIrbbmCncqrqkzIjOTWLRXwPuDdKAOIQmvTswEiswPogdhIZWZoGDMNQqAuBIDfbFmPdXCRNxuPJFKNsO) (seq (null) (seq (ap i qSsIikvTPrBvRAKuvpcpQRTEXyZoSvijuXyiKWKmJBKAvOdthxmFgOySsUMsGmCENWOzXQSIjvGwAPkTlBRyJIyFEwlv) (seq (null) (null))))))))))) (seq (ap i DMQaNxEiothqrJhiFBqAYYgOHXhwgLMKQLnbtqbogIniVGjkpCGiJLqqtERQZ) (seq (seq (ap i jSGsYFHyezRLCcEyzRDIjUCBdJSQYzDjDtJJCBMzQuMYmPbvpfxstTtPfX) (seq (seq (ap i ISuZTKMSeWolBcKlGAJEgJYDjYUxLWZhKgsjXRUMvchaSDAgydWCDZxYC) (seq (seq (ap i ydrXpVePYlJrMxkkpSbsYnwFkyDpJCWfTiSczZgonhaypYSDXywifORmXHDnpelfvXtnmNvISjHnHblIRJzBhOsLguiMWkI) (seq (null) (null))) (seq (ap i ANdiRQGm) (seq (null) (seq (ap i ZIrnQZagMAZyHTqnHVYvHSRxeombEfIMegpRlXdPvFdG) (seq (null) (null))))))) (seq (ap i EOrBFgKfhhbYAQwrridHSFzBiEkDHchbdjgnVqjbHNTvKRtgpSkZKNmDXF) (seq (seq (ap i hfFOblZyfoibVgvQAsnyCMpouxZlTKZdgGrtOQhmxJYAoHMiUiGVvBRBpoIkiYuLjdu) (seq (null) (null))) (seq (ap i pmYcGfIIkKVepHnzKDNJOpSFfwuvFnEhwkTFjVZfsDAUVhiMOqIfLZANRKevEfCxBJHpMvhjSfphdybAuaps) (seq (null) (seq (ap i SOxrFWZkQLrRwbTKnSTBmLpGLvdARJtbKAeTOSEABIusapCBPMVGeFjXgirWWPjivTKnDjJ) (seq (null) (null))))))))) (seq (ap i SFEPdfoBeeeZMdpJDcEEtjAiJJVIihgWTIfCCSRHktkGyZGXzJCzCVQxpEciJshDqHHjqhPnpuYFIW) (seq (seq (ap i FWJcQLzWlJKALGiAeFSNVBBgLUARFIRHLUbYfxgOplfl) (seq (seq (ap i BgfZnKepnqtWqwwzvhNwhftGauVLJksysCboPLjCInNRXiYZeRYlrfGVllvlqqaRAg) (seq (null) (null))) (seq (ap i RShEuRXnTQgQQcnHmwzAfrTdIQRRrPvrefxbNoyVMWMRmTXjnIxjcgl) (seq (null) (seq (ap i bbhsCyfFsfjSOvTGJlVciIFeIYJoONBvutNSNbSBIydfAAttWfaMHmdhNdHAbjUZmQHcQztr) (seq (null) (null))))))) (seq (ap i hVtPaemtIoSeQmVhObeWzbeGUqjl) (seq (seq (ap i SCoPHAiNsjNBdEmwRquGanWcHOVLHSFZrMkI) (seq (null) (null))) (seq (ap i QcnXbEyddlZroHGjYtCWuDYVnujhGKtTLgrpNPjrDoJMDMwIOyNkltXYKizgpkyPryggjLJiAWCANbLQpxlIywgEcBfZltK) (seq (null) (seq (ap i eSzwaREQMGUIHBlzgYsphcleLgDBwGaAfLCxhAvnhIsYZqzgTBShKCoKqIFaKTOyyBNKEhQqJwQpcsz) (seq (null) (null))))))))))))) (seq (ap i rTCSEkoWAIyOFZfwpsWMewEwDbgGBBTXavNzjNXinJwdZchRdBJZRhELkbMvipbRUOxuExCcPGdgZrUkjISDnVoO) (seq (seq (ap i flMMupGHIjsSGZzQjAiGonengQUOUMKAtMjTXPMfX) (seq (seq (ap i EhcnaiFIesQmkG) (seq (seq (ap i iaDd) (seq (seq (ap i cXLvrtMbSBzWBhUUtZHPxDHYgkyULjImPCaOtilBujYRHpGxuPIsvtX) (seq (null) (null))) (seq (ap i BnGsXAGTbFGAxCbonuqDkannzGBXQkxBnjiUqQoRuZuPZ) (seq (null) (null))))) (seq (ap i frXelaRz) (seq (seq (ap i QgeNCdcXgQwJimwPSeOsNuHXhAAqwVnNOfqyxQrwRDBsnwaQYmWhBlxNdYAlwNALRUeuGcXakgmWIeBVcHlURaODDEpPdpNmjXEG) (seq (null) (null))) (seq (ap i YqkvVxOcmzzibqihisnTqTfIVtlzvulQbiHguGjQUzxUSjDB) (seq (null) (seq (ap i KAdULNcWpNLrKgQiTZoyGUdOinSrZSrUbMufwfDKFjAMypCeY) (seq (null) (null))))))))) (seq (ap i XsiXDOPdypSftGJEWgTNvUcbMjTDFSaSoPOAIRqdwTofdpkIindVEMYAxtXJZTNsBdFe) (seq (seq (ap i tqAcjtyCnfOAkUIkBuOftGDkRdgAKxUcxqgTlhKuWHqYmTtXYMRGETOReVRSWbuwKeJROzLeDtZPsl) (seq (seq (ap i xqlamOoBtKX) (seq (null) (null))) (seq (ap i XozpolLnsWIGxLzSHuuZRZL) (seq (null) (seq (ap i yiQkkCMCMLqlMQFcyyNRjeCLPHBdolddBDxXzJoejoEstuvGvWmnPftjwDlfGKiG) (seq (null) (null))))))) (seq (ap i cJJNsJxLewuOwcLLliLijwcPffeUiPzurNbFoCvYcFAUUcAIMfJqoQlldpGTOedoiXyEQzSCqgLmm) (seq (seq (ap i eGBJMUzUxdRtPiNvxvoNCbyzWl) (seq (null) (null))) (seq (ap i jPCuImKMfcANQBYHKGKwUKlOKLfhuMeT) (seq (null) (seq (ap i gMznoACYsJWSTZJEpxYCRAwoXkzSTkwLUUnii) (seq (null) (null))))))))))) (seq (ap i TpMteNoTSmdIltMyrOE) (seq (seq (ap i GPPdrgqhERzSSXsBdXYADUryYXowSHeOrlgAAaGrlPOepNArvaGdUVgsJrUEwbKVzRzcaPAEBebGxByvyEPwKMbsMjljqj) (seq (seq (ap i uZpCcjVrDOUxWYGQAiJogIcng) (seq (seq (ap i mqAqVcrNwTcmKIxgfZjYtoNamXXIoKv) (seq (null) (null))) (seq (ap i YysmZoFcfWOZQUqqbCkQJKIbfyLPmrVSKBWdFZiXMtXQrbQlwqxNgofYIsiOZMNm) (seq (null) (seq (ap i AHCHbIKdDjURIOosknqHBAjvORaSBTfnSIgOamBwrFDRFewrfekCuoQcIIfbJrFxiBewxP) (seq (null) (null))))))) (seq (ap i szGVemZWaNetdycEOzHIJjXUgccNlCzKuCBtxzQYQnxjUjIsqSeypgydzjrdxTSUptbg) (seq (seq (ap i rSGRFRcX) (seq (null) (null))) (seq (ap i eqSMFxumUAjHNafLrkqXpsKzBKyljOjamYPqwvbJlnIfKaVvA) (seq (null) (seq (ap i kUNQlovqPlGhdRGtIsbRUmXusU) (seq (null) (null))))))))) (seq (ap i CwcjBpKclZPDUkAyFZbakTubUuF) (seq (seq (ap i tGsPjMhpBtNxxMocCifXrTkjMDntaEioWCwMtTiLGo) (seq (seq (ap i gYCzuJAjlghRahoKIwbFijqdLNXXdnurglbIhgzfLqkZpBqIZBGZUPmJxhuiXvEZuCwLkyqnymw) (seq (null) (null))) (seq (ap i WTdnzpDPoWALKQdLNbxcXOqMrVzBQJxtRcCdDKkZZnYRqoEcvVxRjbBrRfBXfHiAVhdHMXPFMiDNpJAsLERiaklGwOSgTDtwlr) (seq (null) (seq (ap i VdsISTsAzOnBZGFGLEbmjlkgzLgqjZzXXjMqTGoQTWC) (seq (null) (null))))))) (seq (ap i lbkiSHquUwlOEQMoYmCigvZmJBxjgrQnApRMIADNsegmpKtMQjUrQEeLxHQgncHuYmSUHIxckI) (seq (seq (ap i SlamAySdGDnIjjZKoYEpAFVkVUlAMqPGIEnCJsjPmVZJwbAZkMvzVaThzbYsBEcXbJlz) (seq (null) (null))) (seq (ap i jXgXZKOhtnJqRCTpDtvLwDPpmhwSPsGHkfKSwNQSalZHGloJCHLatueHxhLjjHHDrshlMkgwHTRGGqyj) (seq (null) (seq (ap i VfHMBtTbFBqDncaODvVUxQSUlyKYDYwPvZDaFGRsoESbulLFEqPpAnEGsgMdHuuyIVGSOcptmgdWFNwluVtXXVjanwrgtjpZm) (seq (null) (null))))))))))))))) (seq (ap i EUmyCUtXZIXJkUfymKxMvWFhgGRDqaFqwzIGNbFnjJjiMIdtqGUGDgSLt) (seq (seq (ap i NRUygOqsXUmVNJmPfWbRKnRbXQFVombLoJYLJOkWtYlRHTuzQztHzhhKjIuZafYqGGTpiIUMTggpuuQkwePiFUIyoDD) (seq (seq (ap i VNALPOIhcHNxSHeClxjKbjXBLLuwiCErPDpJmnSdycYClC) (seq (seq (ap i nnOpUGxdZFYuwEvhlymyixvWq) (seq (seq (ap i XddsdzYBZCUTQp) (seq (seq (ap i yuIMBVNBQywHHJFwzoKdxJnCiAyQmdKdlbxSPFVYRijBuuyNDLodLDqQHNPfOkCGAigqWweWhiHfUhjvvGungYNPLXWXxb) (seq (null) (null))) (seq (ap i oQjjHhTwiTSJLzoCZnrNN) (seq (null) (null))))) (seq (ap i JhljhdoklZEJPTMDlCUmk) (seq (seq (ap i OnylWakvVtTEIGSaQMhLSpZXRYHxoelXVDxQpmIDnmgCtmOJoTtLkmQVGNbyy) (seq (null) (null))) (seq (ap i rixzieCKfegGFsulfcYnWpWnZxIwhXNEzCTRlbNTCeij) (seq (null) (seq (ap i HMoBgv) (seq (null) (null))))))))) (seq (ap i Xsf) (seq (seq (ap i nRBTnpzySgxkKwYeJPXdeDrfaRIdQsXgqKzUyySAqKij) (seq (seq (ap i cSJxAVrIxgGOLPwXp) (seq (null) (null))) (seq (ap i ZdbOcrVtbjcKkGmDxUbWuXwhuvopDWknYkFpHlCItdfMQDnRyflQXjPpJmDXosjCIrnuNGfxoIsPUiM) (seq (null) (seq (ap i LZpPBqnOkrIpGbSBAqayNYQZwzVplypPVOxjqqzhMsxlnkrkZsXPLGbAnLUafeAfOwLahqjwI) (seq (null) (null))))))) (seq (ap i KSqCpjQXzREetxEjYOmohnxAdmMborHVqoLpIkcaBxuHsVtCxKNMpvaNpHickxKAzFtrhgT) (seq (seq (ap i IxlhIOAKBsCASGPD) (seq (null) (null))) (seq (ap i OcSzUhjiPeYajHYNVBA) (seq (null) (seq (ap i RFhGlDiUiXPfzmtbezzFq) (seq (null) (null))))))))))) (seq (ap i tGkreLoxsxYISsFhNgKcWjzgGDiKQgMgrwkPNHZizVJPHhzBgc) (seq (seq (ap i LdxolQYNVBXdkoDqZkSmDCucetfHmzakgJnidRaZPTgPHvCPIiWjYWGCYOLCLMDrMrYbhpYfxBIq) (seq (seq (ap i TVKUbhgCxQonwQgweceCwyKwfWPcEhCSNjrBxIttKyXspcJnWHXLAmsNOJGtMbrIrVOtGosPOxOBln) (seq (seq (ap i wgZNaQkGplVUOMPUMVJOobjQFuQSELDUmfTYfPuCezYqMzMTxTrOWZzYhttrqcWliEePlsyluUwtAoktehjYPBppJkcSYIOw) (seq (null) (null))) (seq (ap i aTigKmqLTliByAvtLTXbfsDkkfCJZUszAEqtLyVhzpCLfXZrEjAaeSPRrG) (seq (null) (seq (ap i DXnWOEAKvKHP) (seq (null) (null))))))) (seq (ap i zDcguslDRYsZByHLIiwrvJrxTENlhxUIWEGNkPSJAtGgwviigTcecHjyBWNatAFZUyuGdGPWfsm) (seq (seq (ap i ScdFifdrjkjtxHHdAjqRgouZoRXIjmdwnYNXSTrypAZRmQFpNeDcZHZZJff) (seq (null) (null))) (seq (ap i wWHCyXxHrpTMiggHlqKUaTOuCnMjIFBQtgNlklUUaMDJrAyxJc) (seq (null) (seq (ap i zsoBpPAOtNKrPeLkPoXnjqbpLYcqTWLJQswLDhrqnDPERCtgTKZKbvNWUqWYMTDritqxBuX) (seq (null) (null))))))))) (seq (ap i kaMkAXqgrIzikbbgRNwfaNflLVZqtDSfLkECZkIdsA) (seq (seq (ap i uUuPLrgljPjCKjqdJnB) (seq (seq (ap i korNdxdjoPDgNFjCPeivAbNBKlDHawPRJqJDobjHHmexIJnlPiaCdLtyHpHNEdkHGzILtEt) (seq (null) (null))) (seq (ap i PFDjqjtCtSMFOvmoTxkCeMvgtojiMJPjeMeDoPnMmLPdnqRiKTROmUlkSgaKCxPzt) (seq (null) (seq (ap i bMjgetzfRjuDvwikCwvVlmTMIJKFQtOXSmRLxDSnoHGAzvkUnPXZTacgeHabOFgMBIMSZJSKEURbtEEZRAOGJrnh) (seq (null) (null))))))) (seq (ap i qckthVtwwqSrKqBSZiHDwbZjGeMtZGxStHHgikvWWzoYSRubLIwk) (seq (seq (ap i RAxTExFDOvROOEfKicKbpe) (seq (null) (null))) (seq (ap i oEcxCNWcJhUzeZZCebDbUGVSxlPIzUjthMHKzIpeKNQLvzJagMPiGrFOpxBEYhxphDDs) (seq (null) (seq (ap i rQIMdrcMTABUOJTTFzDIQgybzxzzGRa) (seq (null) (null))))))))))))) (seq (ap i CXckdthlbyDgjPCndxFbFIFDYsidijr) (seq (seq (ap i HMZufCAXyAnwdzkVbNQRnXvfhmnkFvQyYKwQcsARjmoUKKfecfIPbSwnTytGazvhJYaMYTgqvKQhvXPXgZGCKKoptMZQgg) (seq (seq (ap i tgHKoENtg) (seq (seq (ap i sWOaAHwIsULsMCdKPsimbHdOVPEYuHnUIdXUTyiTjpoLNigOzhFfqBkDyYafGnauBwWQZECOxxIq) (seq (seq (ap i kzvdhtigIFUAogeOxWCfscWKTDG) (seq (null) (null))) (seq (ap i IbSCdzwJyCBTOy) (seq (null) (seq (ap i xzMUTEeYdKgBqmxaiJIGDzUNdodM) (seq (null) (null))))))) (seq (ap i YDAZWOiATkEulMKINEOXmPWBOUJnZlYMnINrmSpRqPJTLgilDmiiAiPxecljawglseeOhpPoctLjbtMQTlqmFvvqGDtQRNF) (seq (seq (ap i CcUrCQURcCWHfJconQRIizlflNOTjUYDJa) (seq (null) (null))) (seq (ap i KRjzWmKkoDEZKjyD) (seq (null) (seq (ap i talx) (seq (null) (null))))))))) (seq (ap i vnHWuwcDEkhHTmvWfvuzobPzOccMZJdpkmKyIQVdrKjnOQkqT) (seq (seq (ap i QNSzQESrWnpUtUcTJcLHtsShzYkGvuozRzYSceWmXzAEtWuorqtXtwjlwOCLo) (seq (seq (ap i VJPAQYPtxyTXmHuFDOsKgVABLp) (seq (null) (null))) (seq (ap i deETDALwYKoOEWdyNhqMTBGzwhrSuacJVwsZQShWEsSQHOsHDkSdupuTgzeVTxqyMIsRNzSqfPXZjsewEtDKDBDdCF) (seq (null) (seq (ap i ffshFkTXvWkHiwyYtPguLaNhxduYQbwCJmvFBKSAwzKkaWFKJwshVEAbvmqUgyfJXsy) (seq (null) (null))))))) (seq (ap i NKSB) (seq (seq (ap i BAWlYiuQnoasxIKloiCFqpmLvaapxgKl) (seq (null) (null))) (seq (ap i iTkQZSudtHRMVkXPDHsRNNR) (seq (null) (seq (ap i cnDnhtaTFETpfOELgxxYHAovcykHwuHRLmFW) (seq (null) (null))))))))))) (seq (ap i RblqplwirlNAjG) (seq (seq (ap i sDNTveniQkuTFv) (seq (seq (ap i zxUwndNmoaOrPPoGjwwQ) (seq (seq (ap i eNGOQRrfeGbbTXanpBAYaLuPPfjruTJXEnvpSMQXuvbKvjuGiTiexsprWEubKHbQJqFJHBcFlOhcEpLStLMOYmngFjfZv) (seq (null) (null))) (seq (ap i uVTRdSIUsPEIcrkwnLFfwbcaypKVVGSKmVPlvTjIXPWfCJAbPAzRGwWZvZTmFDwwuf) (seq (null) (seq (ap i HDRhlHLsnZeBAdXGOCBaQUyKJwGpQgSITzzCXmyAgQMBCRdePysOXpJzRaXwmjPDLwIYMFaIFNTUfgLairXjuUjBDUWYhmNhKgD) (seq (null) (null))))))) (seq (ap i xrVvtEKLBltoFrwiiMieITIpTJsWyCUhpJkqgMSEoYdbWTUdsDxjYjAKnNkyiRXGltzGgKWAI) (seq (seq (ap i JyHcrfIAwvAdMlVveODcyjHGMtzIDBPhLDQxMikfVdCQKQB) (seq (null) (null))) (seq (ap i OPpoUtjjikBdjiPwRfIiqvHqnOdymvABnYmqdZxGoRZUlvNQXeNfscWipZBmRpI) (seq (null) (seq (ap i DmAMkvkyAXgdtZCzsejKEmRDLvEubzhlEmSZLfpnSggJTqqqXdfFdLTwlZ) (seq (null) (null))))))))) (seq (ap i tNOpERdFSqrJQmFeUbSRiEqXyPlfuUQrSGyQeVFHgFXwrnuoVSFpfSfVBnniANnULycwl) (seq (seq (ap i uAhxxNdsozQMXzmgCNjnztTSfqCJhoyGCdjdtvxENWUVinTEUhSqqvbabnDSjf) (seq (seq (ap i sdyyWKTNULGbmeqPfvUI) (seq (null) (null))) (seq (ap i sJlCiDEffxgLLQFkvBzDJrpDyXzYWb) (seq (null) (seq (ap i jqsXLdKjPKICAillXOxjHkZvVNuEeCRFLOvrkXhy) (seq (null) (null))))))) (seq (ap i gyPuRVMNhOrgvJoNkvTlGTUugyHOwFkKxM) (seq (seq (ap i lHnNhrMziHZWSdfYZJmFAcVHENamzJylRSDZlGESDPSaywCxdxRXIlFeqm) (seq (null) (null))) (seq (ap i jctqRmhCxFTkAWeAOEJOlGQLxJygxBKbheeHBVMTiRIenMBKYDsxsh) (seq (null) (seq (ap i EvpKxWpjMfdpdgzasaeDHBXDVFMPSCGCIeLrKQdDQaTdJbQwzBdSTAgkggQXvlfeXJqdOmtiFXBisJpOrqXrvhM) (seq (null) (null))))))))))))))))))))) (seq (ap i IyVGQqgAgkrATSFLRFfEcBNiwAXEGDBPYuSyHZTPcvSsDlXdTZDwfOIRClKEWhPkG) (seq (seq (ap i MsFbeetPdbVZlcYfmkFhGVcr) (seq (seq (ap i owzJPyKEWjjqrvKjttgFtPnTzzseTUGdVbfAVEsbUzIujCBosAWR) (seq (seq (ap i JYaCoZ) (seq (seq (ap i QEOoVugelTOcMfTUYsBzcnZMYpGzHAD) (seq (seq (ap i VeHvZHAOZosvdFfPFdMHuKCYONBmgSOrLYnAVXxfWUTcDSxGCLrrbzKxhAzQiiHdGiObfBnrQvuspFWrbOYyDnuBlOwxYCPdNMiX) (seq (seq (ap i unDmXvFYPaItuuzuTniIhLYTJzjaRPouKKopDaKRm) (seq (seq (ap i xfk) (seq (seq (ap i OlBHAtYmvjTzWBYvvFWXOprFgunwexNZLizLxBwnXEtTKCFVPnEGXdRJVGrJmMgmTOwxLXowLreRbegahfwsOXKj) (seq (null) (null))) (seq (ap i tPIrnWfcgkKrewlxFEPhKHYIsUDLmidpNCmfaWhEc) (seq (null) (null))))) (seq (ap i lplMOnlhIlmpchzADPsIHUrVWGlLYyEZwzkuHtqEAVUKoCrcxukARtQNKuzEpnnBNOZLgJfhzzxvJ) (seq (seq (ap i rTDMrMAcKQApCZVJKJfwerjRufneDoyLXVxcDpuifmaqgIfPGCn) (seq (null) (null))) (seq (ap i yDMfpTXmTaQWFrybMezWMtEAmFIEoaefjNkX) (seq (null) (seq (ap i FnMvSpCBArHYMLGk) (seq (null) (null))))))))) (seq (ap i MjGrzBtuluyOdSeDMPkAtavyDAYViltM) (seq (seq (ap i LhhKngVpHyUSaMUksfrVzXhcD) (seq (seq (ap i JktgRfYnDNrtrxuKrSrDStMQcvAqjCcTsUqLfajAxAMVYHmZuMddrDJrxWzKrwsWbDRCvz) (seq (null) (null))) (seq (ap i ZfbHDeuEuxpbyrmEXqPVUFsEWZtMjcitNKXzqIlMjnaYJYjsfWqzdLxSvhLCmFIHEQuSbiQqSBMsZwIuHfUyeLMXgtCpQxQGT) (seq (null) (seq (ap i inTjOhfMDjKNyNqsKso) (seq (null) (null))))))) (seq (ap i GnevZUqpUqUFzdohvsDsma) (seq (seq (ap i vLobMJbhYlBHqtKttioImBvuxxzTdUfSVnvwcuVXijRPvdUQRwxCwhYwyMsAFRaxnufNDXKLZPyyzrPtvMrIfiUmXyQ) (seq (null) (null))) (seq (ap i RroKpDrLqdCcmpCUuGOpNrkQFMbpbPvstDrBzJTbgpXZuduItECdh) (seq (null) (seq (ap i sLZkTYgikHRxvqnmlBqOYUwKKahvbOcOiMgTDBefbkUKEyynvbkQVvhHSDfhCgjFKBMLO) (seq (null) (null))))))))))) (seq (ap i nTbUFHRksArcdDNpXuoWeEMubvcxWmeDcHjcoBSycSBQEgvRLJDGuUtXdueSueYHAmLZiCMf) (seq (seq (ap i SEipLVeDbdsgadDBIAJWsGHjILmkcctDaKHOavDxDbTarSLvjfmZTRvqoN) (seq (seq (ap i qrXyhvwDbCtjIgG) (seq (seq (ap i OEHsOuswxwtMgKwGrThPouyiwZVTChyFfoHTXDmuAgTPiTgLKjuVFwSej) (seq (null) (null))) (seq (ap i cTTkZaALpTDMMCWaBBUAbZJcKlrmRCxLKxIHYnUTzCXnYIvVElzwJxT) (seq (null) (seq (ap i azpuNbiKwRTJZpLoHiYvbzVlEDRMwHIfciEFnBoLLWQYLakLVLVTUEahpAQRtLAcVxQNJLHXKwjtDfoFQOJeahVB) (seq (null) (null))))))) (seq (ap i mTbcRvgyfXJVpRZwFoGUzyC) (seq (seq (ap i RgfTYqakZzGNSKxEPdBCWUQBwWfwdZKRvVBBpFgXtWkmdWAKmvwflCQvKHRxnZDfNLZbGFoqpuKTszK) (seq (null) (null))) (seq (ap i cQyWOqANDopbCWWBbORGsLjxticYswqYeRdAZhVdgbpSUZHLVdhigjtHiWzmUYvuypqaYwxXBaqUUkEzZvklZAhTjW) (seq (null) (seq (ap i pjAweJupKwCgYECjterIEoKShCvnFOcETBxmbKgpSPVqvAjyb) (seq (null) (null))))))))) (seq (ap i fyiQkvHkoIzHVkIpSAundhFhTxWioorxmuHTKvuKawzMvsAlrtWVDpPFXlmbWXrFsh) (seq (seq (ap i ULDHEFZtxjrhHSXWydrnyeWChiztGOfuOqYfoNSpqDIhDKayQTqPZCaLuizHGKnUDR) (seq (seq (ap i cFucGJtXVgwFiHnuDwfWxugLHpqSuxQhPSoxFXcJJLQIJekupfUhzV) (seq (null) (null))) (seq (ap i GDszBkuKiqVucTEbulezsgTfzTRLtJtFSaYVUnNzJRVaKzKEcWPZkDQTirtmXCzOPTcHyxdPjgapMPWSdDCkVPgnfJNC) (seq (null) (seq (ap i prTSeRJvgHkGXXyVVOqCksWDCHbWRGTSUmrIyEsjzOyYHnblLRSuWynwliIdmhMFhDzNJDV) (seq (null) (null))))))) (seq (ap i OZxAVHMbSoXqyPzDoxXqNBvIVhsiBQAcsEtpHaCGiwJhzmfKFkXhEtbryrXpnEuNfGkzi) (seq (seq (ap i dYhZVrFRTiAXMaut) (seq (null) (null))) (seq (ap i PzTiajswxqOTCPTmSYmKgRSdNUCMxDQZWIlNmcPoasnbakQZCVlPTnGjmYFVHyFubkQuVREcLqIeKKK) (seq (null) (seq (ap i zaJFykApejZzQAwUIWkqIhloVOyvgHctpmgvHsDojJUGSZjqKecJKehBIcgsmBOrhHEJVtnBhlLKmUwpR) (seq (null) (null))))))))))))) (seq (ap i OjEexkhdbccqyruCNAcWWLaXCdAzCtcKArZEBh) (seq (seq (ap i PBamkHoUxuUrLtuOcCwVuihFPmbvAYGxFucRBCViwaxjiUfXWtypbCXtAPhYDgzkSttLXMrSRvsMPMPBFPKXswhYZCyEVhP) (seq (seq (ap i MEOWITcCuXyUghbRPpdUCnJqxAVkTISSRxqUjoIuXleZKNXXZTUWuRjipnoeGVcEnBzdEcDUXAVHJePManvvWyRQEnM) (seq (seq (ap i APdgRZsVcPMzpLPmhdJoMokgtJJZBdjsNyeExyTBpmXkoFCaJLLPMnngvVFkIYMkvKHrrJUEZGx) (seq (seq (ap i nSGqsdvUvsBDRbzgDlJAaRlmMjRclhgniKKYmrb) (seq (null) (null))) (seq (ap i JtQSvROKufWTtAbBOoJgkVHtwncYpEcBHhehCxPijQlfoOAWEHGObrnKeUihHmPFfbIuQuoVVYzhxgHSYyMBaEh) (seq (null) (null))))) (seq (ap i pcXmlNNxZUHYmcyguBOqTgjhuGnUVzLAsvmFVmUCqcsEcKYPQEHUrTugFvHNknysdPYjWqzY) (seq (seq (ap i yvbWGivnQSdmMyzzZFPxBGJnwZQtFelSTEoHDlyIVhXGMIapwRaKNNEzgEGFJMZWknkOKRoCvoChMVrgXcAxzrQgga) (seq (null) (null))) (seq (ap i ipuHQVmAnBrCqLBAMDPVSdzAZSOlDRGfoofegyuOztPlMfuGEWqNzpqbbuS) (seq (null) (seq (ap i VMAxyTFtIflDyysvHwAXqmlUYKSDstSVseytQyqzX) (seq (null) (null))))))))) (seq (ap i IfrKmkfVZx) (seq (seq (ap i CRfiOwDoseH) (seq (seq (ap i TtrCFZHOJZtQoWNVBLObJvJLqinRZaXMTMDUgaJYlpfHPyeMZuCMiBaKPUPzYuCJYWaJwZSGJRiBhkeBvznTaeJNKnt) (seq (null) (null))) (seq (ap i raOuzVyWBZCrkIzRZteMNrIAycnjXOKXSAEgLtDByyzdjezcIysyXDkoEUvCkroG) (seq (null) (seq (ap i WQEFiXktkYrUhFaGXLPWxRHIgCtQsfngSKnrikQchplSKanveveWRSArXGEKRvPKfCEZGKIyXPQ) (seq (null) (null))))))) (seq (ap i oQOamYaGdcl) (seq (seq (ap i bhVcGRIPE) (seq (null) (null))) (seq (ap i jQzGFHtqdBcwTFzeMmjZPUbtrDUfqjpQYXykbDJwELoqNigXnFUvTNrUGHZLMCK) (seq (null) (seq (ap i EcMPcQbnaKNghmMQvMBqpmNaPsihjhXcbSrNHWPV) (seq (null) (null))))))))))) (seq (ap i PzQzXApRSqWAEQjHtqhuyYFeRKwefVBdDrFngdVN) (seq (seq (ap i YehUbmqSBwZFALZnoWOrHDBY) (seq (seq (ap i lutrTPYCgQSaEIplmrOrQjjYsvVgaaGqIXfHxqzSGxBoQAjvuwLVRUpStCjzAsxmHIiWohlUpfdkiCjBYtHOkSUlQhnXAjo) (seq (seq (ap i JvtNYknDkUt) (seq (null) (null))) (seq (ap i IsHgnODcbWnERvijFWxQPfcCVPstDZriOxudCFqfvuhfVsELNMmKrnujFcmfbiOBSRxihEPOhPAcUaPfWdlXXQiGHlq) (seq (null) (seq (ap i aNkJWIPFBdrzJTOUBQJRRfPtXekEGnqzTHix) (seq (null) (null))))))) (seq (ap i JgYnBtQhzezsfZzhLnlDsLbrUStErOWaOvGkUWikGbXCmycJBAhWXrT) (seq (seq (ap i KCTmRTafHTQtgyRiAOJ) (seq (null) (null))) (seq (ap i LdXPgrBEhQVOGooQDgpgLsmQkpMJktFFkIeUebWjFaDrGlhIlzfTFRMZMBbiFYIZP) (seq (null) (seq (ap i VhLPYLvobIxtgYhXvMisWGCPLeOjIrPPJdszUHXnIcQaxObhLqbwtgaqtwB) (seq (null) (null))))))))) (seq (ap i gkrU) (seq (seq (ap i IcjmAByNqHKtArDFclfwNBWUVCfZWEElwciNwZytVatDoWzEFR) (seq (seq (ap i rOViUVlatMyQUAZettUAaBtThMARGpC) (seq (null) (null))) (seq (ap i RGzjpYGKBqTBseQRxfLbiEnIuQGmnrgRgCxSxAQEIgVTpzHZhsFJEmMTfXuJEfWmS) (seq (null) (seq (ap i tgPofPdEjpYRhTx) (seq (null) (null))))))) (seq (ap i yJZLMpJklNHNjybQTPscBOiGouhKEjXhFPSXuCRLTMMlmCipLlAYKQiDGNMfRZIUxbeEGFe) (seq (seq (ap i ZKrfjfFhAamkSZsnZLTOxUbvggzWDzghfe) (seq (null) (null))) (seq (ap i uVAUyJPvSQjuzbsQfKGoTktBXqibqpBgDebpqXslOwMpMxSAMiiIJZkNhCSVzrRKvEzOSQKzQpNTxCJXIaPgvtJpKCzi) (seq (null) (seq (ap i XxhamUldNEcdNGvDwkOA) (seq (null) (null))))))))))))))) (seq (ap i ACpF) (seq (seq (ap i qWOVHDuvWaTNZlccTVWzwAPRlPTaiHhnsFwgkYhOeZTjLXJooseTlWRvYmHyaenjMYdJS) (seq (seq (ap i SskIfpEMPvgRRtlpuXdybcafgczZAtnDaOTWmsKUdFaIIxwsUlUJGwxxAs) (seq (seq (ap i kmDBhqAGeZMHqxIBuernblUqrdIDDxyHAFxqDuFWwykcsTrTyVwDMq) (seq (seq (ap i hcfQEFToXsHJvrfKBUDqQVFKmejzyXCzksyHNheIblCcXYoooEqfFJOTiTxbKEBgZkdDoUw) (seq (seq (ap i FxzclLunnmXMligdWQweDAHKRCKHZlsScpQsQEiIFxEgioSDFChVPItGaDfbO) (seq (null) (null))) (seq (ap i yvnQbnwpHBB) (seq (null) (null))))) (seq (ap i YhmsmVcGrFHCwmPGFxkVFFdEVpFvYnViizRnPFrSetHCUKtrMSXqhxlPf) (seq (seq (ap i PkfBMUJfSodWQneWhyCRTEFHhGdZrtnfDiOhRJICCzlYjZrIfro) (seq (null) (null))) (seq (ap i AoxphjYniqzEkfTBFbHwQjwjKTzaNbELWcjneBOnRLBEumjvkUYqReUf) (seq (null) (seq (ap i KaIQtznrQOHjJAILduNDtZirTSXTqP) (seq (null) (null))))))))) (seq (ap i gKHvLKzMoLiXfPSStXPSwMgIxFBGcscQcKSqwGoFImrXxYDoeTpmBDzqxVLHiURtWWvPoOPRSdczTuXszErezOfyUykJUZUMTY) (seq (seq (ap i RnFzTgfwXIGgqVQOgKOzpTHKKRzlZUCTGxwKFtvmJ) (seq (seq (ap i MppahREfQzKBNCLUF) (seq (null) (null))) (seq (ap i JhkKnkhklQqPkpUygQtNAoDpBIpYydZvLnTbvHdGoVNnhisarubeoNgUxBkoaPFUmtiBJgvFCNGheDRWsQNJD) (seq (null) (seq (ap i sQEZYazqcMQRCfvRqCchNrslDcuDwyGrNulBoTOsdKiYTMSUkUYaWtFtUwwsPMmaCwm) (seq (null) (null))))))) (seq (ap i pbDshwMhxQolPmxCFRoJVGbyliSxHWagbQynKfyznXbjHscVFrRnkCyoVeqFDlH) (seq (seq (ap i ySPTvZZFaZhnnKIyWiDmMtsuFXdfWftelmGSSmOavMBnvXvIpXjywPqAgDhsAilzyLFOmCLZfuRuqCPbWyLsGDDoWAqBKa) (seq (null) (null))) (seq (ap i gvktFCZbpTUPjjGPvMmqyoDWiQBVQnVuSUDAsgwMnGCC) (seq (null) (seq (ap i kKMHDTeCbaeBtdqBEQUOponhtdxEDtrnDhliYgElXIocQYBpjVeCzSEzo) (seq (null) (null))))))))))) (seq (ap i EFrtrkgXXwRXrbOqiVHMDdguywyeItNMgAGTegWgsHfpRERoztbwL) (seq (seq (ap i rxWdGUaUk) (seq (seq (ap i KmWvGGiUqmYmyssMPLnrFnhgpjGwqZE) (seq (seq (ap i HfGATLeZpptBFbvOkjuJSTRiRCrAjxIOVarrfpyXqCluTgtXmNBlYuUKBGDCflXCqpKUGghjFvSsbbngJ) (seq (null) (null))) (seq (ap i thsjEfYVPqGsWcecAXQLo) (seq (null) (seq (ap i GTftHvbzLnxmUxQauSzBmiiHGppfKxyxBilmxtpwnzwdWPrQkmqpxqprPyqhgPA) (seq (null) (null))))))) (seq (ap i eGfKMxlvSbRXmFEmvscXNKsXtdbDNqAcZPTYayennBduhxFVmzDyemIVSgIbfzVGEjo) (seq (seq (ap i NwjRfOWbBqvSQDtIawEdusFQyNBqEalVIEpEcWCPWERhusfWQcNdlfUmHDEHLuBqnSCNZnRiBNVDXNfMfMFaduisfGs) (seq (null) (null))) (seq (ap i xaxllPTYRzNdKbKqwqUsYWEwqbBpmNMxUKhJUxfgXVBtaFcMXWamxFBNYHlbZbuKZB) (seq (null) (seq (ap i VGzPDkwMcqzTJvhruoeaiUfoFSZiFheKAenZuHAZRKvlNPTkWOjiynGRamAvfOJUDCkwIHRlosRNJrWbal) (seq (null) (null))))))))) (seq (ap i xWeyxErAbxgkIDXAhvwimEHcpWiwCJSgs) (seq (seq (ap i YqJfVV) (seq (seq (ap i JKTeLEZQFmBhC) (seq (null) (null))) (seq (ap i JsRYRSoTzvtQRXIaKXagwWMrkXzBOwuwjFCtGJCjAcAACWNAGPrxFBsu) (seq (null) (seq (ap i ktgLYJAIyEguLkcabGYeuxrrVPAQkkcYtUlDaLMrDWtySXtyNJZGfXLLFBTapyBWZ) (seq (null) (null))))))) (seq (ap i PznVDmL) (seq (seq (ap i DPAZhucSzwRqZmGWfcMlmxkFETEwKMVUSXyipwxOUwwvxrkKRaaghvgbmhMZVLySuQtBLfxizVIbs) (seq (null) (null))) (seq (ap i ZKj) (seq (null) (seq (ap i BvpHVHZCVNTbrDvJiQlwr) (seq (null) (null))))))))))))) (seq (ap i HxQDVLBweVDcVJnjiccbnmRaOMrSkmRdyEVnMjxVTkaCAhNWGAPuvieGuAkfXwvzpmYPxyBD) (seq (seq (ap i LbZpSwOfcxlySciTeUKuCXPbcQQUYNoGdPFafKyHNxbFfsEXJnxGyYXIztvlzisFRedIHvANzVCjrETBI) (seq (seq (ap i ddlqzTLFHYPXpPfBCcbnaaQoOzxaJ) (seq (seq (ap i VUzzVLeUOtvFAVXWBWQrTraBunsHtfTkNtApFtkXgJNZbqh) (seq (seq (ap i hZhFJwbychOJmXIChaDzmptarImAqSGxjsAmURCwSwpnBOFvMrAuswdxPEIiommXcZAnTQsNRifRiKDndIeJCZTXX) (seq (null) (null))) (seq (ap i sqcRWozvAVAjKMPvtQXuTCLmCPqtXNAyuVUHiadgROnefeYNMfZQhUHaJg) (seq (null) (null))))) (seq (ap i sluQFpIMpzxAEvxogvWGWoMPXgzWmmBBnlNbTBAEXfXYbKwVwgOnSeSuhVwuRbeQyqhohaFFYPkBfxBxAWemTait) (seq (seq (ap i VaAoHcpfUVnltpDFALvdCTxlCNMazVquKStCXnwiEoWUBh) (seq (null) (null))) (seq (ap i iIgHLOJhmJSRdODvlIhUAjqRMmKnqjdCdTtFlNvZQBjLdixICm) (seq (null) (seq (ap i HLEGXbpKLaEGszUnBUnbyFoedkHrqhYxiytFeRpOOuJZXelXKgTFyDVuooR) (seq (null) (null))))))))) (seq (ap i ZxaIjEB) (seq (seq (ap i ieqyc) (seq (seq (ap i FBWoYLjEwVUGUqARhBORtDhpdEjBmVAPEjJwFlmiuxSliyLeHMSVdFuLKmBJCxvLWApKEfxZBlRESLnGpsApFwKqDlWnokFVvJE) (seq (null) (null))) (seq (ap i VHPOSRzFTMQmnRcWKFEuyjS) (seq (null) (seq (ap i HmZXIRNbypoFDjDuXFivfFaMrmfrIxKQjWQkbotECVL) (seq (null) (null))))))) (seq (ap i woMbbcOlrIOZmUHfB) (seq (seq (ap i hGtolObbLrFnTnpaUjQmHwynKWqeDKAiRIOoZwLRkIYJebNNPnPesGOdYnCUcRuzurxUeDVDnCYzhiFultrYTSUohYGW) (seq (null) (null))) (seq (ap i aZmHFmzknzwdKxOWOFeSJLVuwESVJhyOUXUQsLUdZtjMbzAxIWMbiVMjhkQevc) (seq (null) (seq (ap i xRmjkzfxFkWEQRSKGwevhhlgLhVUVNsZribSzlUmVwadnsHLxnjB) (seq (null) (null))))))))))) (seq (ap i FCQMFyjAQxSwVYjDLMy) (seq (seq (ap i xdIBJ) (seq (seq (ap i RNrCADHXKFRw) (seq (seq (ap i lNeTobTRGoRZJbkfCCihnwtELmBtnvJStwW) (seq (null) (null))) (seq (ap i FvokazKyAmzDjGQfsmsKgzF) (seq (null) (seq (ap i TuBmDYlA) (seq (null) (null))))))) (seq (ap i vXEddSbxwvpnyoKuqyVPSbNqMWbPJUTPeNHOQwpMFvaPZJCeqNCRyYwkwxaivDBPWOyOqgxpgXRywtRtUSZaXtRpJlF) (seq (seq (ap i BJKEMtnYoCsupIzfFHqVubb) (seq (null) (null))) (seq (ap i toGjvXIXooIJqAxAycCFaewQtvTaqDuxXhBGWluYJaRjODsdirWpuvlRIaGwaRsup) (seq (null) (seq (ap i PhgdRoeClqQprtBuXyTBIJydMlFbvsFqPKs) (seq (null) (null))))))))) (seq (ap i DhKKLZcIWkXlPQnSoKnGeAxqJSxTuXNQPQybqWeuyoXMRCXVoLGfARlUqmccKsRZQOLLQRJUkjsF) (seq (seq (ap i NVgLkuSQScPIJlaxAAyiPjXdRWwDTspKUZsGfkBKVeiZUMkwXqvQkGwntalpovVdWofhrbRSNjntVzrZnWCQrdahuFp) (seq (seq (ap i vdBCtmYwOKrLyPiFLemukZXSNmJszX) (seq (null) (null))) (seq (ap i EWACquGNxAmUsDyWnoQHuUnCZTKhtOUMDkyAaceXuVottBfTqqRnRCOHXOHBGaCYIuAneWPLoYEMnHVflqUUQbzGIN) (seq (null) (seq (ap i HrexNIsdEdEDZoVDyKEcRdkRpzpowqqdSAuVEqTJWaLdn) (seq (null) (null))))))) (seq (ap i JziMNZpfVFHtgqtuUfhDGevzBYxVDwapiGjCMyffeQvhNfQlPNpjmzMurpYlWOtaegp) (seq (seq (ap i lYJmSxWuzSVocw) (seq (null) (null))) (seq (ap i GCtoOMPrNLdgrQMAkTDstsIbtcC) (seq (null) (seq (ap i wyDXQJZEfSWWxAQRvrywkARXHnfQdQynihktUESMUDyhxaeiGOIUdpdHKpGtnmK) (seq (null) (null))))))))))))))))) (seq (ap i rfmLadrzXebCmsixYtNgFCPqaLxSuMQPLmAzuHnETWhXKuRrAgiNOUMzXqFecJCbijeVgsukAZOEhnPXkqLAK) (seq (seq (ap i NtCMNBBYOqgVTPVXtrtRIThaDHrEOnjkeQlDuSUhQqyzdJvCHmsOOdfInGLMndXgMlaB) (seq (seq (ap i ZYmjmgegwAbsfxhlWJULhbMknRmaGdxNXNGfDmXiUYbcweGmqePoNETQGgrtgtOGdURcNbDhQinzhPCxZZqLnvdfbm) (seq (seq (ap i PIfiazYErHnpB) (seq (seq (ap i sesKLoLJkMlfUnHnk) (seq (seq (ap i hIBjQlrrGEqQJqHbitjDuIOKFYbiNtRtxKZZYQSUwLgb) (seq (seq (ap i vpKhaaiksqbGJkLGxjSRGPOTCNEwqlpBSHvuchsBWLoyFfLbTIcGFvljABHIkeIKDMQZaRGOkSmmAGKOiyZrKFgWR) (seq (null) (null))) (seq (ap i GLaadRTOGhfKaqLXmkBiADDMZoKBqzRfujzcHiQtUb) (seq (null) (null))))) (seq (ap i iPwGAYmxPRxQfhUkCLlmLaDJx) (seq (seq (ap i gjTCUXQRpHKWWXuNHX) (seq (null) (null))) (seq (ap i DGyEfniwIBZvcvTzeKIzJHySNLjCffroQCMGprkOMczWaCiFryoYqDuhWXgKHeKKkIkyTUG) (seq (null) (seq (ap i wateFHWwaBxLhmyFPByCHxrMzmksCDNBJ) (seq (null) (null))))))))) (seq (ap i AYvCSjWFhpImBNbwrdfLBmipahDNpF) (seq (seq (ap i wPQcLldZyATASNkZEsIANwsOMWjXczGljPImiQLxBjkGNfNoMtiYeDEvrm) (seq (seq (ap i IEkGNyhIGvKCYJTpvVLHhvgDTkSLcGr) (seq (null) (null))) (seq (ap i xqpDrCtNHIDoqWnAZYuaBgDHmYaGPiLpwgTKkcGpRJGDckdYBWmklugAQFJmXjUmKxpFJhVBVe) (seq (null) (seq (ap i ZfXjfklTodEgsbISxFlefdHVgJwHFlaThpPYgSicfHenLfTjNp) (seq (null) (null))))))) (seq (ap i vkwXjjiOvoIMNhHgABUQcamYGhSLzqpFpHbfNZqGNrLxjOrngyZLJlEeiThtuyPjGyOtFktrbUYIIkVBAwkhWPmSzpopFQrX) (seq (seq (ap i RCcufUZOcaSgSQAkMCazdfLvpvcVGQSqISNHwmKPJTbwfNsdYjzvfbsAPBgiAdqHvfSrpcBgSsXQLIuzhqoKeJpRNFrp) (seq (null) (null))) (seq (ap i NCYbwwnqpbVfukezeNVHjTqbpIsOdDRJbWbciutvxsLhmjaSFDONSXkeMG) (seq (null) (seq (ap i VrCswiCVKDpqjgnqmkcoUxhOFpCaHrbwYNRlzEMoWjGScmJSHOYoKZOQOBCZZKGdJEPLwbMQx) (seq (null) (null))))))))))) (seq (ap i RbwGnylhiKRbwrcDdsm) (seq (seq (ap i LgwiRXSDfBJOfdNhZpobBfdHwOTVjNtCaBKjIhFgIAJPuaDaohOIhqCelzBJmkjdE) (seq (seq (ap i SnyNZVQdupGGQjUigJRYgUlghpfrJxRPad) (seq (seq (ap i GlfnuxVrzGqeTjroTaWchnDsCTBIUZhDKpGDBVqhdLgjIPqXTGKkUzXfdkzzPEB) (seq (null) (null))) (seq (ap i bLOkckgdIJHVHqyTpulUiXfUbAQ) (seq (null) (seq (ap i AnvUSZHshgWJxLNjkrHRINBmgn) (seq (null) (null))))))) (seq (ap i LJdaAfEDywgypetVdpELZEvitAHCNwAiuZwBAVhngzqQgwwPDIBEu) (seq (seq (ap i WmwPpJZgKuBwMFUFWFHTtomqITwmFxzEqMNbiJhHYqFerbIn) (seq (null) (null))) (seq (ap i JSC) (seq (null) (seq (ap i QkrZoEVBgfdzRGpsbIIMcFumiSMaoDKOuoqALMqTkXADNuLcWrcrNVYBbtDgGKUriIZRVRtZplrSnFCekEDOucVQzeyqlJhR) (seq (null) (null))))))))) (seq (ap i frqXOcnimDKQcQqGazFothEFWJNHOSZMBCPJsEAxMg) (seq (seq (ap i xNSuwHAVXwEeJCgkHdPEUkcrzQJxwSCDkINqmVuOtIrohCVXoxAAUdGqAGbNYQsjzlpppMpFhtemYGtraAyTOzQpKuNBKEXX) (seq (seq (ap i lfTCERSqIJxHWocVmkHEdDtddnZKtUPnYFxmMynaADdRiIYfLgdxwwwrKUBRa) (seq (null) (null))) (seq (ap i bVbCSFENXiiGpBHxQnsoPIPM) (seq (null) (seq (ap i CqqszBcG) (seq (null) (null))))))) (seq (ap i GKHaDsRVKZVOm) (seq (seq (ap i wNwINJUoNptPNETPTNFjSMSvnNsydeOuELhfNlEGEqRdpn) (seq (null) (null))) (seq (ap i eWhhHrGjUPGfmGxrnYDeFeYDqHAOVOhiDPRqBDFPVZutgyaIDCvqGPPzPOcWYFzsFPQ) (seq (null) (seq (ap i TwwmgMrAyKSrqhzVNDdTJavojIZVgpMyWnoDlsMqvUIgaixrFqjgKIAfWUIIhMePZjyVTfmtkrSru) (seq (null) (null))))))))))))) (seq (ap i Fzycno) (seq (seq (ap i uOflbeBCjUgCGzBNsRHrVnpuRuKtzbXZNFB) (seq (seq (ap i krYHlfByGcjgUUkAcQRgAOTnCyCODpedvHFfTtaXsDewDPVpOCouMatFtaIWMHUR) (seq (seq (ap i McFNTIVveJnccaYd) (seq (seq (ap i vhtwlXidecMMUhUziblVwvurQvLcJRucLnohmscpxSphm) (seq (null) (null))) (seq (ap i fJkwIKEsCqWngcFGPKktVpuaGpXmtYCSjyvEFNPkJmITiqCWzoVqPhjNtveXRFokEVpK) (seq (null) (null))))) (seq (ap i KvIoiypBUGzSqtuurDh) (seq (seq (ap i XGsheAgk) (seq (null) (null))) (seq (ap i vfOYzudrWSPMCuQLivxNvoWdTIzeNzYIKbUgANXBjkttqXCcrcamkkJFGLFJPYSmZjqInNATOY) (seq (null) (seq (ap i wtdXKsgyGRsbIFOmfJYwySyeodPDOFXpDuDmXmraIFHmvwabdGksyaOfSIghQYpFmcGisjrVrgvepTorOYXvmkjWkMVM) (seq (null) (null))))))))) (seq (ap i NFtKyTWeALpSjbcmFBSIxWXmYTxmEWDkvt) (seq (seq (ap i PvcMKwMRnKjwYhwvCvaeiyfGoFHZaFXBOEfClVlCGDYvc) (seq (seq (ap i XfXgEpjPpZyebAyjjNduWcYfQzmdZNWPmr) (seq (null) (null))) (seq (ap i gpTHIFrnamGk) (seq (null) (seq (ap i TCxKLBxtvVljnbVAmzEAqnLBzccfkcpZmmMlhVMGlflcrGtmSWCLUJlYMfpWQsSpHcamDhSzTADh) (seq (null) (null))))))) (seq (ap i qvqhuZFKLtJhTnurRVQOxlrtylkIuUAJxRmnnMjauNEKrDsJJBISZdDmNyRiEGhJXGBpAvpSZBOuLDwhupFB) (seq (seq (ap i hOJqQpOwflubTiiIXbjxnWZ) (seq (null) (null))) (seq (ap i ywoPOftPMiLDhBAwFgZQiZwCVeZhUSrQFSPvzJxNsKhIeDNpvAdwUUjcGwjAeDrvQSdcrKfITXlJkMWIsjbJberIQXttZoWgS) (seq (null) (seq (ap i yjiUKMoDTWrnLgYLNWeiFVqzAUXAHXuyYKRYKIyrMxKezvYRsqqTGGXJVOPoFeXuefUmCRijmEiqxkNItzMmoDRFUTcSRcK) (seq (null) (null))))))))))) (seq (ap i GgSnjZwxflZrlskEfDHLcVqfgfzBjvJHvHzbuRhEasvRdpCYSddnurEnqcyttoEpWXMCCVBwvrSZZfjGrNTTHvNv) (seq (seq (ap i TOqlmGWqnMYBRFVUQUsVNpeDLDnShGvLfgeLFBCEvblxxIJqxCtqQgnTxcrmfJVnxwSOO) (seq (seq (ap i lENwt) (seq (seq (ap i QoMTSi) (seq (null) (null))) (seq (ap i pkkJkdNEUPfImZQORNYWDkmOrIlQ) (seq (null) (seq (ap i FyDbbnlJszNJGWMUMDBlOYNrpUpmyEqiuhXMZzXGBUrVMCpzQlBGvwliYAtKFclDoJWAnOkGVDullRzRAjRoxJ) (seq (null) (null))))))) (seq (ap i HNCMGgLLtaifJriHrOjkLqqEghFSatUWqfboVhPHgi) (seq (seq (ap i UxiHLVJCgXhAtLKiNaHGSerQDEbsMNnqRLALoUFQIKTahbWkFpemmXKUBXoHdszJdOgXI) (seq (null) (null))) (seq (ap i JrWlCivpCNdvNabafGOTRenNbCZwguWkDYILrxgdDpKj) (seq (null) (seq (ap i OrLqELvTeVcBXsVFUEEeiOatsfYQwtHlRQhVJWhdvVv) (seq (null) (null))))))))) (seq (ap i wnPiHTVsPZKDeQLBiuOZmePnGXRDHKEyzjptToYRuhxVdSPzwaJZylHfeWgFKIQthxjBQi) (seq (seq (ap i aIfUngqrdiUfWTDnwYFpfBCQBRFOCFTNumzAIO) (seq (seq (ap i MwnYjUKmwFWJjfWdSutwQoQhtJxdWuBtTgpsEgMPeftNqrLcfMwEqoMp) (seq (null) (null))) (seq (ap i DonbESBBqdRtZkbHewJlHtmnkNlaklvXAXPqhWhQgYUsHaeJpLrjRtMRrIizIZGd) (seq (null) (seq (ap i gzwbPgXqiRPbKkodLamFVyTWWNinZTKRqOuqpeHdOBnQMvigO) (seq (null) (null))))))) (seq (ap i SSjWBcCpVNyjNJKMDDpmelVcptDtMBAN) (seq (seq (ap i sPXrrTtIQgtjMklfCWnOKKgNcKVwjEICEibIcElXhVRDgDUIreIuUQ) (seq (null) (null))) (seq (ap i YIaLmuPkPWiuiFTXRDTGwMwyfqmxvPioOJxMLRzcUTImQIiYloGSGdYapeuUAqzSFzajSYpekxAIouWxtMUQn) (seq (null) (seq (ap i bKzyfqZwNbEIUTIBjufxTGlFfAMaYujrkqjquuXUNQAhDbhhrnSlnKjLwgtZVXPsmaUEgHJcNNLILcUElTIsoOUTCVaB) (seq (null) (null))))))))))))))) (seq (ap i NUsDAyJUWRZwHpBuWynAYYTQrnSweJmJYigvJhhLz) (seq (seq (ap i nrkBOrNXrMKnBBljecLmRXpxCNHtRALLWCfWBbIxCggSTlvfznfbYgnfpmpuQMDFLiYWElRPhPpHCwrLdeP) (seq (seq (ap i bVNUBvWNMQtdFwPzfHGYFVpJveVffWXEeLlGkwNGsIDdcHrouVTvgMAhtVwEDYyNaqOqSyJsSRo) (seq (seq (ap i yQwaJomKWfPUVdbArBVpjjmQzIdOnpdQiRuguXbXVncUyfRMCDAYwoiRrTUbZYgMtCAuCZSoyOszAMQtkPx) (seq (seq (ap i JAgQMxMUnioCZZZXhjrVKDGIoIQLZwyLVZypXsEAQjQfhCamOUwloIlKCtydvHARDKrI) (seq (seq (ap i ttzAkgQPuexovLSrAsxgICQvXafdVJaaqqpegNqgsFwvexWKmqERcaBXSaTDnKuFtAKcYhLkkkLywFX) (seq (null) (null))) (seq (ap i KunXevplaSFDibXIwHjpobdGZkomKAoNqmTAcXdbKWlABChEMaZXKcMlgwKYdLmkAP) (seq (null) (null))))) (seq (ap i OQFRqKBLxGlqbJxLoVJfyqVvyqpwcQlwTGfveoKOIDC) (seq (seq (ap i HGMAnryzGBYExduXqKofgTeAzXLJczwolfePCMUAlJEpOEulBzZbeIcpePmSNXOtdS) (seq (null) (null))) (seq (ap i aMtKRxZCDFqIrWKaBwXVEcrlthtvxUpIOMmpchpBBByOzzmRqDmbGuCYeWjcplPrOoZZbbidzjCiYLVMkogjnhzR) (seq (null) (seq (ap i vXyNnLDmYXLTxumfPGPpoZqsnxZajSMjDZCUaKkUHWHDuBxxCmpGitmOXPxXxuCPRxCwfCoQKrIpoeFH) (seq (null) (null))))))))) (seq (ap i QwYuRjFMBZvlSAlKEIWqJYhdmSVdyzckuBpwxOCtLeNABYH) (seq (seq (ap i FHPNnxbgZNzocedqLuyHyLXIFgkiqVLAqGjdftWyUGIaAoDIudpDzZMCKWWabwqyXTyDqSeyeJzhiFTWyYorMtVjDralEO) (seq (seq (ap i NPdcqSWwWAQixsxRzDojHSQXwUNyAzEHvdn) (seq (null) (null))) (seq (ap i cIHtREZYMqNkNyxluAuELWnaQTSfVyZolUuMAdIVDqMoxbDzQYhUsxXILplIsTaYQkWGicyx) (seq (null) (seq (ap i HVsBRfnGzOGjOIjzpbY) (seq (null) (null))))))) (seq (ap i oWOidqyEMyeguNRhVPsUJFVJpJrxjyBePPRnLhhTaVydjycqcEXwuWTHIfdotrgaJxpYaqN) (seq (seq (ap i YVKSdsLhLhOuwpyosCipTyYgcHaKbHfQXUNMpRcAjyheyyIfrif) (seq (null) (null))) (seq (ap i sDUQOKKUYNQIyZaeCPNDepHbkLFTUrBLvoHZTBgAzSgoZgsIWHPLKcLjPk) (seq (null) (seq (ap i vpCQrxMMXjWlwCqsazYcFwsHFhhKiVZBQwpwtRiErSulACDklmvmwfKjSGemhAuYckAGrsuJTbXO) (seq (null) (null))))))))))) (seq (ap i wCorBdGeFkSOieKvXhdvstxhShBAyloLuemBlnXQKXrTqZwjRNXpmeCSdsSIiptoRyYJftSAcCMYVDEOlPyFy) (seq (seq (ap i tKZSnYcvsVWtUgt) (seq (seq (ap i iuqDUVBbYKWYRMgABqPmmKWyZKpQjHYJkGHhuGZDaCPkWKykUKudUhMlVWTKNSrWBWwaqrUjsEqWiyDuPVuL) (seq (seq (ap i aBhTeYZSGlkjmDSjZvWLooYETcYljsbImMuwXIQoPoBfSIAxWzdSMhdXEsmiwdQNEhxgBjsGACIVgPZQrzkjzkd) (seq (null) (null))) (seq (ap i LWbTVSNOsJibxkgfqHzyfHiqpeSIFvrpHnMQGGnwolEj) (seq (null) (seq (ap i ceWJIkPMUexpgh) (seq (null) (null))))))) (seq (ap i qrqctsUUthjqQlWUVlzONzVUGJIxhHKNCCwUFYiVvhDefmbXPwkoOoGFsWXqKpwXORvhxDtBnQnRycwwpyYgwbXwA) (seq (seq (ap i blENYvTqDIDaDNehiNEDGloOeiCtdgxtozeSHJrbXeTzbk) (seq (null) (null))) (seq (ap i glhMzmMYYQWamJQGTDMHeYcAnmACMHlIRuPqUSPEZToBGpnIvScYRkKOZLZzmbkSsdyDlTYPlvkVRVmNAAoBfXtQWRFzKVAYw) (seq (null) (seq (ap i GvxcEjJOqUQDJjYOfscLexXCmadjaaVSUAdAkeCoZyKhjZqFMspwDhQlLOZodxVFeadSldbTUZKgErAPhuTGZSiQaZjjffagIhd) (seq (null) (null))))))))) (seq (ap i snXzytzgPScqthUioJQkrLOfLEAMSPtvAgmNvwHLtdhtYlKqJCMRTRXRdCorod) (seq (seq (ap i czPulgeVIipNEeknqeQAbDuwrNKGpjRIXZdFDMxoyREZxK) (seq (seq (ap i VbYpcoMVEMEMbAfJJpiWWRsiuIGpSPhnkiANvMxcxbdOHnSFGTpThsyWBpEnHCdADmGuiab) (seq (null) (null))) (seq (ap i RxrEwtzVnsUn) (seq (null) (seq (ap i PgBCUMCJggWAVcNrLqaEGrBduXCsnQZgKPRPyM) (seq (null) (null))))))) (seq (ap i DsdjrNYYULwAPdhaIbxfefHrgigVrNMqGnAPqMhXmMGmGYafBHZAoJgFapj) (seq (seq (ap i RosWsXSNExzuleFlbaIwkaBVBtBcqV) (seq (null) (null))) (seq (ap i RIDoiglbIosSClFyjIBRDseQoednOcCrsLwFLNxZibkQpQmqvGQfmPdAYYvUhSmQtTzOlJBfE) (seq (null) (seq (ap i JpBTzGQtzlBftTPytzHDkxOCJKOieDVhHJpetXKKMwKdNTtOdlEuWmnXybNKPJuOeXGJplsPTSgaJfCiRvrD) (seq (null) (null))))))))))))) (seq (ap i uRuHVXR) (seq (seq (ap i PmBjLENdxdEROlAqbYvyOwPzOU) (seq (seq (ap i RVMBUJwaHeONxWTgPreSreiKRlntmk) (seq (seq (ap i auudyzFEgvyJBsVTHOBRCyVrlNpgCfxagUCyhMnhQoqMybdYwFjTfQPmAR) (seq (seq (ap i mxstZKHFBxiWuLWhvdqzuxxWZvqnHnofgcsRPXYdhZkmsiAXOJGuqyBAweLzMmWnlEwTWxKHDVcpJDOgzWBRYWp) (seq (null) (null))) (seq (ap i ANdFzOEcujbEtlfiUooDgcHqCytokqWzHFYnvfuqlUlMFUsjVyswhXnjrssibqHCvgWjoGqXiTXBWT) (seq (null) (null))))) (seq (ap i sjyvTJMLjMvfUsIqSPVGpjHsmjrMyasdAgYgNRODWfdnOOvxjhRSjfWkkKdkY) (seq (seq (ap i kPjguTaBkUsiPGTMbpPsakVZCsheOdodbntPluMSmOesSopWeMAHLWHqWbFkgrLfGpUmimydQfFxS) (seq (null) (null))) (seq (ap i BESQgekHjiKPczvpCIUGisgnRNiMJLnAnWOQtaRazMdRqzuLryqpdFrBVFgZQPUUKkQyETkZbvOzemKayaNNjbHHmWZ) (seq (null) (seq (ap i TpyuRQOPurDQKAodskVzHHSfBvHSZ) (seq (null) (null))))))))) (seq (ap i grDiJbIuY) (seq (seq (ap i GgSVUYkQeeyvHSQHyIaMOtxwMQEWGTmvRPbfTrhKbztLdICcwrFnKAXYRIEhePccVAQHrbfLDpJmbwysJSBINduXfZxZVvP) (seq (seq (ap i okNexFfHvnzOKXYozXnBgurhsetDXaKHopxPWIBkWPbDoaegzjWYhGFRQSXxstiuFAPxeyhghehYznnJaKVjrlARhuyEYZVJvu) (seq (null) (null))) (seq (ap i NBDZGEewPcuayDALiFEBdDupefqTmsqsphPECHlbmMFqTZvYIZxHekwtuCOtqvekgZbdABCJvmo) (seq (null) (seq (ap i VYHNSlGxVRhGdInGDjIWfkUpreWcBmKzajneGiouvlmyrlfpodOcFWspzxiDWyMLQzosadoAgYIMaRhDGfaJxoPtBjb) (seq (null) (null))))))) (seq (ap i mrBcCAHgGIeFHLASoXJWanbykdOr) (seq (seq (ap i msNexNmxAXdfbrLgcSwow) (seq (null) (null))) (seq (ap i vivmRbIjGEjgQWJSconPzcdryjkkWIrjgZddIDUrnyZkqqgICdXfwhTsHThIuOjpjiGPTSKwjeJmSoLSPVY) (seq (null) (seq (ap i JmHbNpZFptctvRUBIoRnsgthSTRtDJyqxdTaFJoDNAWjzakqpar) (seq (null) (null))))))))))) (seq (ap i XIMwfyelEjSvyxVtUzVOcLBXReyBnmvrnHGCAecoHAAdqmEycqOxTMMvyFZJZKY) (seq (seq (ap i OyQhVQQDI) (seq (seq (ap i MLjBEyc) (seq (seq (ap i PWsKAjgvqJkRfeFyJHkDIRkFpGJMFBKSEVNysNnFeTVNeICviUiX) (seq (null) (null))) (seq (ap i FRmRhpaMabPPJqwIltAyVVmHEwsJZkEphP) (seq (null) (seq (ap i VFJeRCaSAwQtgmSiFrn) (seq (null) (null))))))) (seq (ap i FTXpcJXLXbjWWMAefsyjvbaAXFLMsmCJRcxjCsYWMSiSbySJnBsypYOYecJDMFuZHBMWKoSvhqhkrsaFKHEhXOAtEtCvlnJe) (seq (seq (ap i SXhIIvMrPzGQwtbwecVUBcxPxDgoUokFWtojEWIqBRRdnUSoFOHguf) (seq (null) (null))) (seq (ap i rYpZSwZuNqAzJ) (seq (null) (seq (ap i kSMTwQiUTDBRpgnnmCNfxzrVIRvjWsEFJjknVhMjEpPHoxzsffCUZXSamWWuTNPoZGmUuFMQBzowTgmA) (seq (null) (null))))))))) (seq (ap i pnYvj) (seq (seq (ap i MeVWjiETHCkduMdXIroXPdaqMuKQERcRuAdDURe) (seq (seq (ap i oudOImoHAg) (seq (null) (null))) (seq (ap i LGxoanQyooKikxSHxoCZZcCoAAxKOBpgDWGdVHVyOuqpZeOKLDYDHXejRJrmMB) (seq (null) (seq (ap i mMFfBPbeHvjZzMBcvpRYuUwYIzFGVdpNYIyGdyFLQlcpOCgoVxnptExfpbUoMOebxSqftXUKAlxDuyrvSHjcffGlDFzUEwUS) (seq (null) (null))))))) (seq (ap i iBLhjEMAXhKzewljnLIKQbBovKJvCyApQFlTea) (seq (seq (ap i vPljYnpoMICBHDCYg) (seq (null) (null))) (seq (ap i DxDd) (seq (null) (seq (ap i FXBZOHooqqnylPYjVMHGmXBqVQFrkaOJQajzchzkVGxuJdugfIzjGirbHIbHPsfpWbrWBwRUPKNLlNkbOlYOJAtMzY) (seq (null) (null))))))))))))))))))) (seq (ap i hPuqhGozhwRgKHzvNLLmBApPuyxIQNlbPnjWdTcotnkBGtygNTCNSWPnNEntiBzfucRaNKzwMt) (seq (seq (ap i lvMgCVpoRFOONaeehKTlhpJYEqsYiNjXhFClerUfMjZsrdvlUUSVGYnFpvsbFBWvynbNJBKxQZj) (seq (seq (ap i oZMWDOoWTqqDWTGnNqYkXbezzfIhVVNeKswxKpxHJJSbjYznX) (seq (seq (ap i PEQkPBZLiDgdQUoxIYeqFUrTpcVPOQKtyDgBdkawwriQIpGcxbFvQcYPuISyJpNkpkJZlUwguOxsVOclulgVwIxabRGHbrdA) (seq (seq (ap i bWyoSRIKL) (seq (seq (ap i HoYNiMfpcqXwkQwcWgccOqNlaFrijlLaiLFiEfVhTSNMNIenvgX) (seq (seq (ap i mqPmYWCFkbWOOifqbaMwFO) (seq (seq (ap i PaqQelUHSMvyiUNvQvmgbG) (seq (null) (null))) (seq (ap i irypKadffGLvtdEJMPtbUvueKfdfef) (seq (null) (null))))) (seq (ap i tsyHnkfybVPaFzDZyQwvgKISEVRxzLdPuNLoCLxMsrebanEXkXLRJ) (seq (seq (ap i xvppJDJYGdGWQLLMuZSmwzQeHtCHDCi) (seq (null) (null))) (seq (ap i nbtUXGzXmqATvtGKPyfhDzHVrdMWnryzQucznxnkHaLUSRVgsJAvZBOxjkmJODt) (seq (null) (seq (ap i meonsIqYEHkNpdiEybnOjAlDiD) (seq (null) (null))))))))) (seq (ap i iyCcrsXYtvFmWakoxWoATlJrJycDbSeZqbvpkAFatwptpDDirFzuVFsaCoiRW) (seq (seq (ap i lJHNCCQAijrLEeQWZaLkSgeDDaFrhzFifaEAjdMPnKcfymiYSjuoPQKwnlnUzLnGHPnDKYJaiSguDfXrWmoNXlPsgWiyyU) (seq (seq (ap i poAZyIoDkGT) (seq (null) (null))) (seq (ap i pbtzCsvznatJsbsCfKafvrfYbAeKRHTfpMYwSivZvGDFFypNfvsibOSejouL) (seq (null) (seq (ap i cCNaGGvaBcpiGebTPKhvybYwsytmoilgiUmuMVLYsFSCxkPASUhS) (seq (null) (null))))))) (seq (ap i jlLZegvQbuGskezIreosXHmWahgndGfvkdxIuor) (seq (seq (ap i rDujnvvDIbXDgFIxawlhWCLnvTuq) (seq (null) (null))) (seq (ap i bGYFNzOaGZiAYFBTIKZlDuEzTfsOKJOlEw) (seq (null) (seq (ap i GCOMIHPVfwHEFTyAhmECunFmXZjZMTRTSDiIDxBvkGtaDTzTxYPjntGnytHPOfmPJZyWEe) (seq (null) (null))))))))))) (seq (ap i UEeYWfjvgplsMwlDSjHSPdfUoNxghcfrAFhLunirxkyjLMgjdHWilTppgdzzPJgMxYWJuWxMQfuOIvuRtkaggQOszXk) (seq (seq (ap i eKIkgFpCXYxtTMLVzNGkpzcEqYarUXiBpEUoLgDDyNrsaaMqONQLenRQpjiuxcjIqXIRp) (seq (seq (ap i YcbXiQuhdl) (seq (seq (ap i dLerRRPfgavrsyzNAlhbnhHfBhYsOppDLUP) (seq (null) (null))) (seq (ap i rqgFNfGeJodACiZGcyfjLbPLUIjFspeVlzJmNJeG) (seq (null) (seq (ap i DvbVoCzhgFVhliHCEmRDUwYXvnpaJFBDiNXOPovQvtABlknRjApjUCCdyxzoYEnGEncafEySKudulHI) (seq (null) (null))))))) (seq (ap i zloMunNTMPtsEPUmPMKtzVlOAjvbMlgRKGSvBcMLlARDnUUVsbCXhpOTrwVQUXFtuhcrIQWtePlNjOTPRsttchCsgfvhoGw) (seq (seq (ap i OjVhvtJBZtJqDVSDveIwnCWUPeGMAzSereIolMhpBgFEVxlvzNmtUPAPctItCMKQHzpv) (seq (null) (null))) (seq (ap i xDARZFABrdAjYLTYbFentqpEhKAAPNzHRObewimQbRXPmYoyigCzVZ) (seq (null) (seq (ap i aJQBfSzOiShaJpylztDfLcoaLgNtADUHmNdqHhsKWFjUdFyeBlvufuLFStASUnIlAnpkJEbYFhmoxWKHLxb) (seq (null) (null))))))))) (seq (ap i hIkVdIXrDaDoFUTvdwGtywMXTBiCYXtfOzLQSRtGvvGTUxHGHTEUIaVIXcaUIONfLeHukrhSbOEdUEEaX) (seq (seq (ap i NQTTxEqNErfWYIiB) (seq (seq (ap i KCGgLFwXVWxOamFzIkPreZxXdtHnxITGrOjbqjsbuGcWTQGZiYsDCJfbTRjuOUcncArAuzlutftBDsniXNZLt) (seq (null) (null))) (seq (ap i ZtfuUeULzLHnLSOZSQWvBgOyRhvdgzyexrnlDsDrgRGQmWoazqLbojalbqMVkukLlppdlfxMBnubuKUnYYBEWt) (seq (null) (seq (ap i iNFbwUvDtIZWo) (seq (null) (null))))))) (seq (ap i qnJIZQfvFZVguixpIbgRZpMawLbOokygnybjnLwzRFR) (seq (seq (ap i wCuPn) (seq (null) (null))) (seq (ap i cjqtUOwieJBroYYDeKIvVxKPgyAKbTB) (seq (null) (seq (ap i ZBYNDCVjHNocrQuRXcDFmvQxDpFEWRyFWyuYQRUznNlLsWQvhmdzxfBGohiGjSZIhVynCbjxLlkqygWoHGhpciUxFVgLyjeo) (seq (null) (null))))))))))))) (seq (ap i SlSCZyjsFsQwmithOmpBSCmUhGheJMlmLYxMKNashULiUfteHHCAeanpTyrWQSIelxSqZoNQX) (seq (seq (ap i DDsSWAMFttoPwWesfdKEabYOfDOinDMBawdivEbyppqWPoiRLirIQIXQYWFUoUNOJQDtBsMZbgNblhZcGhGDr) (seq (seq (ap i tmzHJQShqnArtQPrVnAZ) (seq (seq (ap i wEesgcGIBFSRgYFRvHTYDDwtpbBhPCpPxMYqNZEJNHofzRb) (seq (seq (ap i JHGyCRzRUupDroVFyaSFL) (seq (null) (null))) (seq (ap i yBRHacpmUafBXAyvjhDmWeIXfAzKbDLylinWkoZzUQWvqVNS) (seq (null) (null))))) (seq (ap i USvsuKHCL) (seq (seq (ap i fgPfzncWlrDwqMXPZ) (seq (null) (null))) (seq (ap i OSQNQVxOnPiSZNeWELLXjdPkmfDPOBqIbHayOVVReLZdxoFrakdctCCkzQNRBQvTZeVKfjHuUV) (seq (null) (seq (ap i yRubnOnRsefPuvfzAUKfBTVuDBuLMETfEgASgI) (seq (null) (null))))))))) (seq (ap i wAMttwrfyOiHBsPL) (seq (seq (ap i SkRUAtcfRdEmMPRosglfWxjyanYHIYcQgibhaTsu) (seq (seq (ap i qFBLAEUczPhksSyYmcdyxLOCOiYnlrxMuQXLkEBhM) (seq (null) (null))) (seq (ap i qJBSRPHDSfqmzV) (seq (null) (seq (ap i oVlLPcKi) (seq (null) (null))))))) (seq (ap i dQuBaMxGbWQuIcJHAHpbQcMyBBSsCTpwNlpEbTKZWZKXAYWkHnHJsWVqTLTRyltQKpIIQcpDEBDwwdyvRKnOSQoS) (seq (seq (ap i aHiZBRgeYtWApOHzgFYcpUxpLEOpjjktHvqu) (seq (null) (null))) (seq (ap i pYoSFdKMmlAwPoShTDDeattbOuLaCVHTpxZzCTIqllBajjqnuQGudeKmuHmFoHprDTBHkhOhLKvetdMPbEwOIQJfhacmZIXiRR) (seq (null) (seq (ap i QatpKgqGhCJLdiOHXHKNaQihpzOISaObskmmqWCgFDQplbHfLsPiKHRxCbF) (seq (null) (null))))))))))) (seq (ap i HRxXpblnEEbLtuxrTzCMWQsquXBwgWWoEQHXchYDgtvOIVFyicLQfaPBEpoDrLulJaSMXGYqwT) (seq (seq (ap i XnmyJnSaKfeLolOlPKEhMiJLItATnOzkeGUcnHcCHVmBMJwGebdbjelvAnpLozLibyMTgN) (seq (seq (ap i qgUUmAsxoDeMNAPiLNVVuVFABnKJraalUWaAWhaWSDzQutIUckH) (seq (seq (ap i dNDrLcNOoeDlbENtwCoMmznKmYEceVezrwDpArEEwoyuxpLxntJDLvybzzbfwiRXpBATzMcuMvKeoPnYCHoSfOFoSg) (seq (null) (null))) (seq (ap i EecvVJhTMUzZeamDqZdDDDNdUGLHdJkEfgkMdHqwcCElAxFmVWqrGmJRYXNDnvjVXoPvvOiRpcQyOlFilswGXkUTkHI) (seq (null) (seq (ap i baUU) (seq (null) (null))))))) (seq (ap i pQxMOJvUxSXLnzZGqkCqPorRQxcWoSMsxxwIrhOMEXqabRGQSPetCrGCWXnRKOmKWqRQljSEFsEWugSlTXnllcMTiSgEITICnQr) (seq (seq (ap i ZZgTQwMDuazTWpxkVEXcjlEThpnXBzdxruDlFHXrawXHanmQPleMvySPAtdxpYgz) (seq (null) (null))) (seq (ap i bgdEpAGpmrzFZLUUbJRyFLhZUoAxndCylGEKaiizVEGLAzhgnuEUAOvmHEtnTHYXeuPDmhltkSrnRXUIBBqRWNKYMSGIMAUI) (seq (null) (seq (ap i CBCCLZfVmLzOLgtEmoVJDUpiuJcgHXmRqPoFfkdZcMqRtnahnZoPfhawXxUGKeFkKmDCaPVcf) (seq (null) (null))))))))) (seq (ap i MEvSaUrNzaMIfgwgXZQDGlWjRvjtdQbjkmcqXVD) (seq (seq (ap i pUUKXieTdDXvPHhFoETXCPqDASiLwWqhSJHSkmTsktfBPQWbMo) (seq (seq (ap i buVQuUqIbzUzcIgGLzazkjuXQYOKMpctQMvtCTrmIuaRpFIikvmrdZgAdYNakzgOhwhvwdtzu) (seq (null) (null))) (seq (ap i Gc) (seq (null) (seq (ap i OzwlLwhgrUvLj) (seq (null) (null))))))) (seq (ap i GrcJzgDBlQZxgbhQgfFhMNJRyUXg) (seq (seq (ap i nlecPkjQTdcTBnhbGMKOiElJKLzEytMLCgjyEH) (seq (null) (null))) (seq (ap i YbYObLroHojbOfEtQzydcqfhbtAnuRGjKmIwVB) (seq (null) (seq (ap i LTJmiPhfKEGItGuwbsTcrmkdHFrSvhTgviPsSHXjCLckmlWlMppWQlDwutEplwCQenGa) (seq (null) (null))))))))))))))) (seq (ap i teWgfypidKJKHk) (seq (seq (ap i CEOMvJyvzHpUhPNefVgyNHLpNuOgKNTgccVsNwpqbSAHdeFJrXNDJTzvfQPcIzZCWvqQwJlHttehGUmoUUPWXZgapuM) (seq (seq (ap i KBiKJKAXqswUOJSSshEprUVyyImQTQdzYARWsBvBsiywRbxTxUKZwYbUHlU) (seq (seq (ap i zyuHlNyPmKYcACsdCAMgWGdvTmTbvxTU) (seq (seq (ap i mWtujfBmejcxPMgXpJIqgPgmORmPeXfACtQFSYNUVWcGefOvXnHpFsnOiBXsdTYO) (seq (seq (ap i vLKTnCSQvulugsaKjAxYuWYRODuwhQTTFemQokXUwBEfCFvCgYFSsslyqaQaiYxwgQuwrcintDYVOUcEofltVpVybUXCmlviG) (seq (null) (null))) (seq (ap i efVJgtCbDhbFuxGr) (seq (null) (null))))) (seq (ap i nGSmEGhjEUjqROhgNOfFdUAUeDBrLLmW) (seq (seq (ap i wVAMiuOGZKveXvBjRoHIPwZZNODotokCmIfJt) (seq (null) (null))) (seq (ap i FXMIHIOeuPAITpUOqBkagLAnsRmmNUNiskUXFjpSlCcRKNHRhSDDqNnwBlvUyxpqAJF) (seq (null) (seq (ap i ewctEBojmzCHPTofSseJvEYIjWHoBoduNfNVgxwaDdkcqogoRBAJRHT) (seq (null) (null))))))))) (seq (ap i czyvQeJrpMSsAbKBhVKNpEXGPiMkeMBCsimeqaHIDnhSTBkjOjUSWchkdGoxYpY) (seq (seq (ap i BqKTCSbISHSaOMKiVbYQyiEXRwijqfGWOpmSkwfBrdjc) (seq (seq (ap i bWOpPmXImJWRzKmUyzRdsqGteozYLlFBYbTMQeUyHsYxFNTRoPyRhtTMlwJGdXAvzsfWqBVZVaharDOzBsv) (seq (null) (null))) (seq (ap i vJhykpomYawdlvZpSTJbQefLyHDNEtGrETFwCUUypOJqmTLcyRZmEoMpYQwH) (seq (null) (seq (ap i KImJAjYnTriUHUVxGATgmPelXfyDjHvbkRcuMANtKwMqD) (seq (null) (null))))))) (seq (ap i lETXQBXlIvMQcMPKvCkZZEfmNZbHxRDAmwdcCgSYtafVXByNgngGKUxkYdkRXU) (seq (seq (ap i PxUohUzdhmrnRqupmVAbMZsYWofU) (seq (null) (null))) (seq (ap i ysDsnOPixzXvjTpR) (seq (null) (seq (ap i LUkTIuIQoEVPPPjRvcbtGKPYlrPcYYTfsBLgcwzhfXUKTXUbvKXxogBhuCvKFaMMYYZlysNUECvqEbfHxJ) (seq (null) (null))))))))))) (seq (ap i VMOXAnnDvnloUwpKLrOeqUBgBHbdfdWMvroEBkVKFbuiGxGQVMzMpueDVXjxYXSgGD) (seq (seq (ap i hkfccDcOxxbBcdzPUxvmZKwHLluocYqayUxOTuxMagWpXMrxsCNeQJSeoheA) (seq (seq (ap i iTbVRwaXhGAtxvHUDkcyxpylBYZXwYvnzpYRgJobmWVG) (seq (seq (ap i NyNKBKEpDCayj) (seq (null) (null))) (seq (ap i BzwjKKUegjlKCahPwrCeZtSuXRewbphDrAXzKZINVomuNsJRHAmhNGCwBPbtwMVQrzvNirIqITQuOGqtEoJWM) (seq (null) (seq (ap i KPXMqaNqWGyYHkHqJoufbWmsdjUDhNwR) (seq (null) (null))))))) (seq (ap i RMuXJAoGaceDoxKdAGwMWgkqApFqMomaLFPcQMBceRKDdBxWjSNUKZYAoKUfTAANBCdBSFooPxTRhwWfQ) (seq (seq (ap i TDNriOmDekUTDkLuxzvAzrrXjnNYF) (seq (null) (null))) (seq (ap i nDdtkTnbOIHesRTUfjEta) (seq (null) (seq (ap i wFuAguDrqjksqXRAWFACxXpcmfRgFWKXzXcXKGHRpwwfvaDGbUVtLVFxLkhwLoIofuIDCIvnUYuEX) (seq (null) (null))))))))) (seq (ap i fpuFqMuluEXidHjvtkBaNIAgetDzOKiH) (seq (seq (ap i lAhrOZsigPGsjZqPYJioWdCSNcxorOWhODQOgdTztApataaMwCnAJ) (seq (seq (ap i lvFUXVqBYIywGbmBRDLoUoLtgzzbNpskcAYjflzcrvnIoSwEAwuZPurNjnSpWErgBuXQMnfUxxHseYFzpAdCYRymVVveWqxOR) (seq (null) (null))) (seq (ap i DskcPZpwPsNLuplplUCwzRWBUlvfFfAtKFECkOfJiaheVXNclRuinVMeJMvBGnWZfqVeVZtHHnvwEQAwodVxnTT) (seq (null) (seq (ap i MgtgeRudcPrtKyqHZQWbBGAHJMBFsAJCdbQgqEpfocWIBPFvJfzunoEjEZbEsjjzoPrtFghuqtcccsLFfRCGKJUKzhGsZ) (seq (null) (null))))))) (seq (ap i PAcsvpSBrlWuiWjYCkklQeQDeNPpMrQpMqkqlqakFrHwMosEqqVubtlqQqSvCXOLizSGoAZMqxcAprGt) (seq (seq (ap i lwzklpMmogdWAsaXUaVisuLVoljYTstuQS) (seq (null) (null))) (seq (ap i CqmzSlPoTZypfbTFkEBngVwhetReVlHgRrqYjuTChSIhTvNKJypnrECWLkmldwdKFHmBcWoUbeiDi) (seq (null) (seq (ap i aJkMFpZjVmPEudlrDDOmdzkxTLKVuOMqYCTSvwOYuCjJTVekIzXRVdWgNUGtgh) (seq (null) (null))))))))))))) (seq (ap i KRUAXTKkFbfwTUkq) (seq (seq (ap i NfxHUmyFMdGhPOSnQudRNyfHGugPdKkzVXXWhiVmXxkHEbpGAJtCnWCARHRnmVRq) (seq (seq (ap i HePFPkxcRokjkIHFJDlfFaIQLKXPmRcegTSIBHphVbdBtWYUezKqlyYJSLVdGxbTJLyVDQ) (seq (seq (ap i GY) (seq (seq (ap i WesBXUXdVxi) (seq (null) (null))) (seq (ap i qoT) (seq (null) (null))))) (seq (ap i avWziPSGYuRjZbMRbaLFalWeEDjdpWfTectcdlFoQdQQEmkzIUkhx) (seq (seq (ap i xnRQbpsLtFyoN) (seq (null) (null))) (seq (ap i NbUovXptfEgSJGiVJeSHxHrVqlclwPGz) (seq (null) (seq (ap i RwDoiJglXkJoaJMlfttpOhJoukKwYeS) (seq (null) (null))))))))) (seq (ap i WwDfPukGwwdJGZlwfWqxOvrSoleuZRQbYIfjU) (seq (seq (ap i KWsbmMWwaTiuMVKhufnJrLmfrMMzIYufNlxgitsfhmdZd) (seq (seq (ap i dnSpvIgTxTJJSNTi) (seq (null) (null))) (seq (ap i fwDHYELUwSFPhxVjLiCsCyjNfL) (seq (null) (seq (ap i NCUolPMn) (seq (null) (null))))))) (seq (ap i EyQbksiKOZIZdzpDpdUfBHAUFcRLnjVgXrizURPzZygCvJjwvqQxwDKUqfCPqaTgHIs) (seq (seq (ap i EBnXPMvKMmaoVgEAGHuEPBMSZQLpaVtKYkSpVhghRSqhPeAdTcMHRJCwbHDKfeY) (seq (null) (null))) (seq (ap i CCevojSfxdOEVMgzFxTlFqcrwHqlYXdgOrBhlAxSEeTvSqxVZZKCzNWJOFJLauxcYXOQKBfKOgAToFZjvgQPub) (seq (null) (seq (ap i VBZiGwxezfyTMqXgxeJTQGNgacPwrewtpxHHqIoNLR) (seq (null) (null))))))))))) (seq (ap i sDkNCjFtaiJucwcSZCaIPpaQndXzGanuPqYvsvbTPgHLLHiMQSrnRYKQWguaOWcKJlbgJzWssTgEHHFcuLHRPlnyHRBtE) (seq (seq (ap i hZzoXvSyreONtmxItgdwWaUMYEqWZtHefkoDurzvcBNhquYkBYClbcNPIW) (seq (seq (ap i BhUtiRvFLyVOvppdzQiQFDHqvyuPQxrxPxkwTfptLVdMJmZekEuvlJJmybZzOEKAhKpnVUvQcOEOFQPvSDvMHbLSxqWqgIQ) (seq (seq (ap i vPDJauqBfqcnODWumjEGyXOHmQGCdhhpxmZy) (seq (null) (null))) (seq (ap i jvoVrBjfqtnYUXjIeOEexNewxQFYcAeUhvTfydXZjiRNCdiHIwXCpKRKPVJuetMDqHvHkz) (seq (null) (seq (ap i WHZHwqj) (seq (null) (null))))))) (seq (ap i GPRvKMswdTQHYTUNNdOcWCYjRWOsq) (seq (seq (ap i JuwggFFMcYMEwMQvaSEnBjxdkZIyoTKvAbetdGfUJhGuQvXSikND) (seq (null) (null))) (seq (ap i plTSuAVUCXMLcnLICjhxlRxZZtKfdnpFLhbnnsxwjJfFfJopIAvkbDpIIctkIDesDMOI) (seq (null) (seq (ap i EtuEitjNPSsOUFgldQpyqtxtThdEIpiNwzVxjcbblMjhQuTNGZzXSegP) (seq (null) (null))))))))) (seq (ap i HIXZgbWaeaLZWsVrklaXMnFENEBnRhXnWvMbPBdnRQCfkWrNEjMPqCmSrb) (seq (seq (ap i UrSHgIhjuCaxnHtSVdIohUmjEeWZJbVdiAtBFfhcncLYrZWyMGhKqcuBuqiNWsbiEsrbquTmOPwXDSVUxhRBIBbGRN) (seq (seq (ap i QSUcBRprmFPSZbaIlpbaMZZSyXNqbTbfVkhyerJHdouLnbhEZXwyrjgYVBsEQZY) (seq (null) (null))) (seq (ap i KIYkPdrlzvzuuoWFGfwIACnGjCAsnoXRVepLCDqHrRoEobYnFZAwDyn) (seq (null) (seq (ap i LBymlTKoyOxEukz) (seq (null) (null))))))) (seq (ap i dWYvKvXFIMAUlyhtIgdNGZVECqVVmFHHnDxADrKustgoDTucmfbEXTbNEWFGuiPmtI) (seq (seq (ap i mrnpQNhXvuECILmJQADPmLdrwAvnWAdvYKemRLmUDFyzOWJyCBuGzlYsgMQBaKSkWmBOFFqdsWjTH) (seq (null) (null))) (seq (ap i DmztYaxUkUVcZDAhEYUTRQarXkxnJMiPLFNSLYhNHsHwuezVeNgarwvvpvrakxafHiqBHDliDivBuTJicoPHrRpdXxk) (seq (null) (seq (ap i pwlJOOTYGuxyqWBQbhixAbcFoAqoUjXXJDlSU) (seq (null) (null))))))))))))))))) (seq (ap i sCJVvVKgUWfhQUevcBceuFYPvGmmmBcciOPsznJCWWtrQRwUkLBWFhHIewkTfnduourQKJqvJsozXBOOU) (seq (seq (ap i fgpwaGDvqyEyfnTEClNCZmkzDktUd) (seq (seq (ap i QqUzHVFCYqUrHuMRPeYyWik) (seq (seq (ap i riKRPQYqptQLOuHaQGVwNAChEFkPhoosXCHZwcmeztJdskprjNpt) (seq (seq (ap i AZYXQifMcSeIGIotSIKVKcvuEXTHhM) (seq (seq (ap i bMImB) (seq (seq (ap i MbvDsDcTGVDcpSRbRTMVXfOVMnzKRJVbElmdQIbUDTeRVa) (seq (null) (null))) (seq (ap i XNoHXuzgjXNQvmIrtcBNiepZoLDHKDSbCbsIiNkcDlqaEYSAyXrMnwLkIKcfS) (seq (null) (null))))) (seq (ap i tKevN) (seq (seq (ap i sKHAPjnCGCKLvfatVrQyIsPcltSDVqQPJtyzFBWRfWd) (seq (null) (null))) (seq (ap i PlDXUjrDnFQBquMbXuWztMGNDkDGFDmlu) (seq (null) (seq (ap i RlRavNFNaKldFxBIkTOvphiDfgCAIvBEiqdhyFfafHzyOYxmIiaDsXHzXsJcyinIhXshVUtdKHJvnZtiAajTDCKVWT) (seq (null) (null))))))))) (seq (ap i cKpCvPxkeMVdSILHadVrcUrxJ) (seq (seq (ap i suqVSJLpZJHTNlsnFEMvaaMBSSzhBRnnfvQuATDfBnlAiYvtnOKFLxMpQdNiUyazM) (seq (seq (ap i sVJcabZmyDJitHqORitHthUXezbEZApzDnrbbIz) (seq (null) (null))) (seq (ap i DMt) (seq (null) (seq (ap i QrHByuHmPcSngLVhNaDuoDaMtRSuPJotkykKTJjE) (seq (null) (null))))))) (seq (ap i hxNUdOoQBYcdtCvlLJqCtmMheWmJayVTJjtXYDcSVGUWiycnso) (seq (seq (ap i TkhFlSyWh) (seq (null) (null))) (seq (ap i VmNTlDihgGEnieJiykDVdNAdslmu) (seq (null) (seq (ap i wIWvsEMtEUPaAOYWHbMyAjcBcCfiAzokrJgwEpmtxMBUCvqNOBGZuHpvdHpkpnnJ) (seq (null) (null))))))))))) (seq (ap i fBgzmgYWXmqrwrntQutWWDdnMvTh) (seq (seq (ap i haWSZBczlnLh) (seq (seq (ap i gpDkPVOnJIMKmuotbHPaBsNrkobmUjpOCw) (seq (seq (ap i gHkFlIaDBrXAQJCDlUiVUNMYXFlwpqmfoOpQqDcEQxjAvZooSNOCZLHrHArUuUTzfmBnDLTRPrTITbvSOIEG) (seq (null) (null))) (seq (ap i DEdVDLPpLfYGZzVzcfylOJglhKrxnZizBRPUPpzvWFPUDYjXNVGufVdYSzmhcFbGZexbVWsMZNLuT) (seq (null) (seq (ap i CyDOZCvGCYsjZGzFhGPLffNtOUkdZDhFyqACPpJTwOlCuOIftZuWCqTvtuESTGeovdGwhrLcMYrEHv) (seq (null) (null))))))) (seq (ap i ZGoI) (seq (seq (ap i MVpJhZJIl) (seq (null) (null))) (seq (ap i dRZVmYtEZIkIjcPskJOTrhEWIuPr) (seq (null) (seq (ap i DtfDpzveThRehLOcEAWokWCEVUIGnOVKMCCiRvOfkUGRWblXHHddbpXbGuqvjNNFhKoPdchn) (seq (null) (null))))))))) (seq (ap i nSCkjuDXlVXTrCxXYRTZkqqdLnpaDcNcnyVZfaCrheNVZpvJTxluflGvmQoKPhVpQfkEioB) (seq (seq (ap i bwgGRtqSJvYioRtUzsDKUgnAzITuqQUDvpoQBRf) (seq (seq (ap i aeKXvrrMHxHdANQQdZPQoERIiQNOxJUVAYvZflCYCDcdtkVfTcZYttpFU) (seq (null) (null))) (seq (ap i uSXIyX) (seq (null) (seq (ap i FErfqk) (seq (null) (null))))))) (seq (ap i Db) (seq (seq (ap i OnkorIsfPXNIWBmaFkwdJfJxhwEeYblrFeYrGEmxRJuD) (seq (null) (null))) (seq (ap i UjnHleulyUgDSzGjaCtvzsMciTZQYmtEbYcGLaGdZvmAhLoWwTdIqpwPKTXco) (seq (null) (seq (ap i RqrmIOTeXHWvJYmmXMzJARoeDCkfYzblWNLUfQionprDHWeZdWhKBNbViUnzUxzRnuNBekvDicAk) (seq (null) (null))))))))))))) (seq (ap i qdxccAWhIpRItxYKXOmYlQzLlDwdwTDLeHrO) (seq (seq (ap i XmGzMBsigeaxSuXKDdOatYhYdSfRIbSWjrTpNDUyykeIaqFPDaLjfHfzaIstfz) (seq (seq (ap i QadNCxVluFGIAhUwEoerUcHZivrHnVhLnOLnUjhFsegpomubrzaDNTtXgsikisRrBZMQkVZAFHadGmwcYvEaUaxEd) (seq (seq (ap i aTczzUOSYWTIXLmGTucJVINtINrkoMHXkIyoOLTgnS) (seq (seq (ap i OShuOwyEzQcGCuBeBmDNPWzrpidYynSgsbnRGUbYiqOALiRXkxoljsaLPPVKXVaToWqcbf) (seq (null) (null))) (seq (ap i nUccHPLrqnHoFnZLS) (seq (null) (null))))) (seq (ap i vCRudDzdvZDhHRKttcJcgXpGUxkqsZxvInfwhflrAwpMPwnCbvswLbqAxBMDvBcalQqwxiEtJPQRsOHK) (seq (seq (ap i YrRnVngVGbzVjUX) (seq (null) (null))) (seq (ap i cvulrQfGuhXLGeTcyADkEhWOXzdI) (seq (null) (seq (ap i LHhFqdnvEJfIQY) (seq (null) (null))))))))) (seq (ap i kWXCxLCvbHQwWQJIRysZoqYDcmnZdrZjbdMnYCfohbwUuh) (seq (seq (ap i KKBjQHelA) (seq (seq (ap i LKDoccocCmOYflTlsmGlnWZNrgJfWuOwvMvDwtKVVZoeJcKJrsgBhBBZHZDieNOkXn) (seq (null) (null))) (seq (ap i UIqoQoinLdYwWXoGSzmTBODXDCshAapShpTRTqfqZPRqEtNoSuJuqNYRdEYWJBvOZlh) (seq (null) (seq (ap i fKNSJVGtjJbxhqVItCKJBCbFHqXOErJsLepWjcsWUfYdEmqaqMYiEcTzyY) (seq (null) (null))))))) (seq (ap i SJNVOhYrDz) (seq (seq (ap i DvwMLGcEpNOSDgVGmphkhmWTFMOBRsDLSeagJXtOigLDPGvrCRQtQJbeHZweYABWWPMrpsqzlYvPJAEaSvGOjCwQJFNeil) (seq (null) (null))) (seq (ap i ZTZSouTwvIFOFIlQzFk) (seq (null) (seq (ap i FEGlWKOrqvQdXjoCSurSqBroDkeCHMcTZjphhBiNeUEpYxdRNzgfKfyeU) (seq (null) (null))))))))))) (seq (ap i rqCJbfKpKhMkfCBxoTtyUkDnyZBayecaSOhrONDnmrJzcMNqnLEMvDZzAC) (seq (seq (ap i AZCIxEIwanTpaxJyDGiAjxFVNLGjGwPZEqqtdAmjuglvRwUgQAkAcMDE) (seq (seq (ap i qHyrytLacOQMmJtVsJxjarsjggxtRCtYmzZSV) (seq (seq (ap i wHCaJXfGzezIsAzbJnNPpMtNjTXhyfMXrmxujisRiKSwEXrlTDvrRodAfMYhiccuSwqkbM) (seq (null) (null))) (seq (ap i AGuMLGXaOheFxLyRhhrhFCJhFJTqusJeQDZaJGdgOhixqRIVXvhfuPurMFqkeWzwu) (seq (null) (seq (ap i uupUiHULhTfGkHaDYvSRXlrvDCPzXqmYEBLNpllBOeJpuodHSjjLdnjoOgSVCdWSRqnzINlPFKaeXyZ) (seq (null) (null))))))) (seq (ap i NLPBLgbXvninaYXEhpomzugkqFtldGIcOIStUgeHPdOQBnqztiideIWTAIjErl) (seq (seq (ap i zAxEEGEaHIPYRonAjZuWnWdaWZDxjTVAAnbSPatbOwIXvshgKNqYaXsWVPWmgTutNFiAaYKk) (seq (null) (null))) (seq (ap i yYoTVZKVbcKLCrYZxV) (seq (null) (seq (ap i ofnbQVS) (seq (null) (null))))))))) (seq (ap i KXzgNfDPhYzhmedWETOuvBnhbOHWPZMeVNprjfsbndeaNvsHVgJsVgr) (seq (seq (ap i ShvwgLSeSpmutLqODoHJxBvavlkIjMhVkgLAHzrlBQUADzqULKbckpMTQqWiVBlBdTqzLUjhHMlXnQWbwIsHWgsRVVawhe) (seq (seq (ap i RGqs) (seq (null) (null))) (seq (ap i xESlBWbWFoUUxFvgVPkURTpP) (seq (null) (seq (ap i OQXzo) (seq (null) (null))))))) (seq (ap i uXAGCTTKVJzqBopuWY) (seq (seq (ap i aGTyDsUGQFeRLIdgvTpfSfsQvQLYLvtImPRYywWuvmfvppjDxiVOrAsdvXVMrEskfXZpbSJqWxHqeHcWTRJhCnbzrbYX) (seq (null) (null))) (seq (ap i oDoTxLmgtTdqcykcNsZFLLeWAjVDdHQoyGyXhAMFbAySRPtfdtVlwgUquYOwewWOSioQUunIgW) (seq (null) (seq (ap i ftIoYkYUSfpoxbBxMQrJPQopcmPosUVpWCxmrTgNnvAGlGRIpwFSYbXaChdEwfe) (seq (null) (null))))))))))))))) (seq (ap i mLMAcVedE) (seq (seq (ap i IBrHBZwRkusMCk) (seq (seq (ap i OJsIpvYsiYGEvIDgGQXkeQaSFFylTzYxTYlLfJujdcvnQJJudNKeqVj) (seq (seq (ap i dXynykU) (seq (seq (ap i jgkdDpqAw) (seq (seq (ap i LYpLIbwsuLdTrQTpBPVGEBzdXOFjomYydAniAWThlySCPTTcxnubvQTIM) (seq (null) (null))) (seq (ap i StjEYxRifMvfYuwTmfMxjHYNLXhvzuSnHvL) (seq (null) (null))))) (seq (ap i CqHrMjBTDwghCCsle) (seq (seq (ap i waWlCMyGowyvYTHDZDLbpxfxGOsdguGkxI) (seq (null) (null))) (seq (ap i yZQblZHCMunOnsGDlAmnZOJIVJJIYEzPJbzWotZvIlARxGoOJliNvsyHEtgPpKCdjMJmVMQvGGy) (seq (null) (seq (ap i qUSLnOsOEEWFyllgmfTzAYqVQXjkLATjuyikvFQonzbMiMmGFouKkjGj) (seq (null) (null))))))))) (seq (ap i xPEJYKbMCCbComKvPvtKHDLOWqCZOrVXCKOJIFeWonkvGknXKHEKBMB) (seq (seq (ap i xGWmrxfIdWdCNiIovqilRWgnmjaCWxelqifiBUbxfGVtsFnMIicsLvCg) (seq (seq (ap i rTtWOLLgOmcTGhaVduIBphdiqNjwWgSflzRrNTGKBnNFfDeKHsnPFeudmWoVB) (seq (null) (null))) (seq (ap i tbzuekfwhvdkowsmfMHoPEpoOVcpMUlCIqHCFcGKWjxBRzHFhDWZjth) (seq (null) (seq (ap i DLvBNqgnpiYrVeSqnhXZcrDLxVjYEXeqjLFFa) (seq (null) (null))))))) (seq (ap i WRdzmRSNdGPzEANXYXzCehralvNWbAgwgPweFNpTZzINWdOjZVBdizfTkBVpJvisTkpkF) (seq (seq (ap i jwnjqDFknnQTnZAKiuiQbbZBqgbwSVGkmkrSNVanKGkJCHrBZwAWgaoqkePWgrJhKvORJbdjBXxKdBTTAqDYAOI) (seq (null) (null))) (seq (ap i nAzneKggNbTujFMCoIOBiZmMPQFp) (seq (null) (seq (ap i dUmtcVrUMfaulWzPtgqqMGrKTNPBPApoIwRJUMncYPjwzkgJktXIPMzRqzAQgevtcjmTpN) (seq (null) (null))))))))))) (seq (ap i CjMailQFenpGFLJLuAxjhNKGDvgouNmgKScHqIcveaOyPlezBjLynoIZ) (seq (seq (ap i xnwzSHJddindZBzbMYveJEMpXEMZkKPmfsWKbeUzFtEbfkRFoFGAvmWMaCDCEQmgfuxMLXbeXMjqFH) (seq (seq (ap i RGjrYRtpEegXXODRZps) (seq (seq (ap i AInLevsETrlSIIZKDHHqKMneSrSeYLfOqabpelgUwZXQHvTnHzYbuZJfXhzRMA) (seq (null) (null))) (seq (ap i gxmViEoZdmbqeZpFeUZVcpzArqYGHPJFskP) (seq (null) (seq (ap i DKMTAVhwdjZFyvOTbzFDcjYvsSItOkpDpQYMSmmaDcOmDsKlbmzxVzVBDPmQxQfyRfGrszEAvkWuutEQEQtz) (seq (null) (null))))))) (seq (ap i EWoIpuAPKomzPNcavpwpAYwIvz) (seq (seq (ap i qhAUvSQjhvfyKThsdYUPSA) (seq (null) (null))) (seq (ap i RpHtEjlVYYJbVXvfiggEAlQATkNGLkwDKjSfyOZVbanmIbNwWicnRMSifsYEGzxmdicoTEvC) (seq (null) (seq (ap i PpIqdvsgoPUBnqEWm) (seq (null) (null))))))))) (seq (ap i CareiRpkRnmPvbToVLZcXoEIBzlqerMDbcnCfaYzJiiBOeljKu) (seq (seq (ap i asYuNRLOsKxjbKqNLLGpjLjOjYrGHMi) (seq (seq (ap i hDJSedfbCwZfHkDWoadnc) (seq (null) (null))) (seq (ap i TppU) (seq (null) (seq (ap i YfKxvTdVfeWYuRElDusdXcmyQnoJKxwICcHKynMuOXYQuJRSrBTuQ) (seq (null) (null))))))) (seq (ap i cPVtFcPxOMxRkqSxvxGqncrAmqQBeWxsZhmOjuvgVjqadwsTzYETeotdgernA) (seq (seq (ap i UAJHVNAhSTyjtDToTzDmdGjSWurXzAtHvJtNWmsQOqFJFNfvsQfJNrNWTbdhCHvfiizQcfRpEYUrUuQxKgkwWbEKVn) (seq (null) (null))) (seq (ap i pK) (seq (null) (seq (ap i JEfkheJxoXusuRYNPQbyLzuDtBO) (seq (null) (null))))))))))))) (seq (ap i PDusyexaeZaejPGIAKaSkviTTdNVvZOFjf) (seq (seq (ap i bPdNUVirOdJyf) (seq (seq (ap i mmQrYGGBSPBXOyiVtwgBevPuSVmzuHBIUxOfgohxWDtapReKdFdZDsdsFvGMjIXloLVZWBOqtBqA) (seq (seq (ap i gpDKjRiONyiQfoIfMcRHhWdvWTICsgTLNSDV) (seq (seq (ap i bQXWCNpIZOHWuLEzqvKUOecbMGYSIwyZdRlgMwcFskCIfhWTruXhUuLX) (seq (null) (null))) (seq (ap i ewqJVcnGACpcxlfu) (seq (null) (seq (ap i pGlHbOHvnSxlAfYhZaQmWaiJkzftVGcgLRGMcwSAyfMk) (seq (null) (null))))))) (seq (ap i DKbfWMtODAcmbsCVdEdVqTGcEPOUtY) (seq (seq (ap i aTySyehadmSTmbRavxReKdYX) (seq (null) (null))) (seq (ap i kXamuKMneUWHodlfrTHLQxyKJzcNK) (seq (null) (seq (ap i TKegQsryQuhTeafyGHUfUIWHXTbFKhoQLxnUVTDOiReQCrOxtIjTSMTdwRxWqpyXnjLT) (seq (null) (null))))))))) (seq (ap i NmLhzztomFejDkyUdvaOcxCjYjALBeDIIMjOe) (seq (seq (ap i JRjY) (seq (seq (ap i kvtUjFFOxLeiVBTymmNmjTyivscCHAhqyLPfGIqlXorULUZmUacRDmwnKUvSSCKhSoeWqAY) (seq (null) (null))) (seq (ap i emUpYzbsitMTzmDxOMEjJKfMkgKIijJPBjbsQUJYnnsHNUmVOtnOTLZOjtTdCyOfftThlkibYxvVRzFFrNUdFWoaOgWJcKYMrvlM) (seq (null) (seq (ap i AVUAUuJqcqXHeYjBawSplbkSTxIaT) (seq (null) (null))))))) (seq (ap i SkOWFgUZGyx) (seq (seq (ap i hiIZzLRSWoGhvdJEITtRzjgqUemsRqJDsgmr) (seq (null) (null))) (seq (ap i BFJcpzlaWRrTKIgZchfNfpWzArBQEAmehaSQHhyBMdQeKWMZEROXcyPvrCxSas) (seq (null) (seq (ap i iKuFJbRJqFRNsl) (seq (null) (null))))))))))) (seq (ap i lNNLyUGrcmHuYbGxiLBPclzynKgQlKafRsaUuvJxHJQoBolcfyBursbkiyGaaKVvUpltSAInG) (seq (seq (ap i hKBrawWtoooIXwgjMNXbkxSYYaIFiKFkhyEpfOmPcroWYzESS) (seq (seq (ap i wGxUQyPNlpGXTlvRhvXjUgFg) (seq (seq (ap i yzTLJSTNKvxjbkLtIrJdbpJKaxB) (seq (null) (null))) (seq (ap i pyRTFwSbgZozbkZDmPPazTBqhWqVviXaukfUtsUUQcpLYbnAHTljNxCTtncyeUpaRMuMiUohUgPsFqTkbwlhoYbREHCRgzZ) (seq (null) (seq (ap i ZvPpQpnYmdgNQRbmVpfdqbgLPQiZqSixvgi) (seq (null) (null))))))) (seq (ap i qUQhPZGrKSqajYYBCKbuqRbdcNsFTOhxnsVFhoWxCNfSqYOiRRSXQvKmPPpTjGGnOlqImhXs) (seq (seq (ap i vAiXmAyKizKSFAapcKIKekmiMvNBHZadxGcJskzEqdcyhvIwcxvEJwfSTIptccEaGNWlBlqtLBVmQoGPCanDYnrOTtztpVku) (seq (null) (null))) (seq (ap i CmhPKymqHPsuVmaCGkjXFWaQKvwjyDlTxFYqwcWFFpYfsPxTSdhMeiWTYmwSJcCrRcrNrMJilWeA) (seq (null) (seq (ap i OcyvhVvOovSRPLBVBbKvqwkOyxVPcJnjEKzisRMlEtpeArLCsEYGrzTkQpMrlQGKBuc) (seq (null) (null))))))))) (seq (ap i uVpEWCsUzSNuwUjqJdNfWqcZBJpLQwe) (seq (seq (ap i bUZnOcTFIBTwOLigWQLIQZVFiXuNECSEqlRDlgNOQhuoOBNEAGrkiDHJcebSyLcSbbEJy) (seq (seq (ap i CiZrwKaUnlzgqgTmujyXEhSNyjbqupVnDqWYAmBoAijjuyYaGMSosBXPJQiNqSRyZtISdTTHtplMApld) (seq (null) (null))) (seq (ap i TQEhPfiASeNuZhRsblbemkGnXXnl) (seq (null) (seq (ap i vsKPIhLpyaYxOsvQRKDGwuiMNoPQWCTicwgAfSZncaqasZyNBUBQnextdoFGOkqPLrJgoLVs) (seq (null) (null))))))) (seq (ap i gtMqbegzTadIxHwDBTHySnYEvDCjtopYyQMIIUaSLRCGejwBNGHbPmjRardmkBAREeLJVvrDCHexJdAJiODQtC) (seq (seq (ap i qflHHhxLfMZfIsPASLQEWHFgYCrIPbjw) (seq (null) (null))) (seq (ap i poQBOZRLgphumCgRKlzUcYwyZRgjsnSWEkOEGawnAIdEleNNbmhaxSCrKBajDRPfkRwSNjAxluwUSbHm) (seq (null) (seq (ap i XfoUWSsPiJjLWxZUOMSJlgmCOdXfkutshpzhNoVSDhskvsFKHrRmFoyIqfV) (seq (null) (null))))))))))))))))))))))) (seq (ap i RBIaNRHqGzcnFjxeBavMilfHwcWzGYSMtVlSvNJxLoQhllondMVxOgIYIkl) (seq (seq (ap i kXodDYzaCZxifFHoAGQoBSTDlq) (seq (seq (ap i ZUNvXnlSwBfidCFEoJdXhfqBDIpIFoGlHuTxWzeqNkEkSWJWLbbHcaLcWiLrDqrNOuAbjprNbCZJcoGLIUrjXCUlO) (seq (seq (ap i pmcnfZfjAlGIjzuGFXqnfxTnzVKhvsvZSTUTJSJXuNSUASMve) (seq (seq (ap i RbVglsilpXjewfPpkNiTZbWmkL) (seq (seq (ap i xRVEOpzzSgJTZVzcJvkDgBwrsJuiSKRKgPrSrNNsQ) (seq (seq (ap i zTjsiocoQIKbaGEQApVYBpRwltoCfcZUx) (seq (seq (ap i pSuryFMNwXUqmkgTfSpKLKZQADXDOcMOEytGVxF) (seq (seq (ap i JVfJyliOWGiAWbJdjeBBQdzAFHAyUrhvIHDJYaNssoxgIpVOwEWgKZnIXwojgnqmpjAXMFAxi) (seq (seq (ap i YlCaYpmFBHiqJbsAsLCnnHZZrhPvKYIfjHLBrlNpTnkqXJOyTFzSIkJuyvHCUCNVIzHXOARQyV) (seq (null) (null))) (seq (ap i MKjddkrQZMgmBkIcAmFXVNloLxRhKUwaIlwIAjyJgnjZpIaPkAlYLlvtDljyATfbxFMeSajNynpKnvIjGeKYsQcveboxWhMwDmcD) (seq (null) (null))))) (seq (ap i buyKgUJfKypvOktABZnFKzYZP) (seq (seq (ap i BFitghoVTlrKMTpVnauMKZfRhvRIfeNlcBGVNDReIraVycNndsBqmVJtHNSVEPfZnoQPDdqhyltSVUtm) (seq (null) (null))) (seq (ap i XrdAvaNqZpcAhsThHhRhXENvKaOHu) (seq (null) (seq (ap i abQWQCfCipaZCyTXQEOHxccQ) (seq (null) (null))))))))) (seq (ap i mphIzwORapkSvKoMFdIozRVtyTMJ) (seq (seq (ap i Rm) (seq (seq (ap i ZWprGThwktdYETKgfM) (seq (null) (null))) (seq (ap i JUwtPmCnsLwYyBwJIBAPCCafjbgnBqblCTdNshxDKZocAODrKDI) (seq (null) (seq (ap i GolFIuFzCNuwrFyiSqNqKGwdADNBRILegqRSYHyITrOBwmBmdHmtRyUMCUqfaYwvyQqkgHMgDoQdUoDGHdhJGzALVvIU) (seq (null) (null))))))) (seq (ap i vEeOqVeZUwsyjtJZHWMRufMKNLhBybWVvCHyJSzrtVMWAkkNisdUZodB) (seq (seq (ap i ooggzrsrrtrZeHjISF) (seq (null) (null))) (seq (ap i fPqVaquvettJSXyAVBUnPoJBRUtCEsqmUNmDs) (seq (null) (seq (ap i zhFIBugQXoOkQpBtFFBKevCTtxMnVTawrq) (seq (null) (null))))))))))) (seq (ap i qQFwAzlzVFGUFoLaanxqokSAFGyiSmLasIAwjtfZAjtbSAdojjoAVMcWTJlc) (seq (seq (ap i ZonvSOeMKuaDNKCQQCOiDuBAmiAQLgnsu) (seq (seq (ap i bNxDwVNzgaZEGhxLSUuPeoLyBbmYkkJIJLkYJxxnHTkKjnWsyqoqkMtVSQzsCAlFLMVtrqDYVnUEcjurXcMXodPXkBnPRJ) (seq (seq (ap i KmEnQtncIRSTlotLIKvZEygZlsOOHyhafxSJN) (seq (null) (null))) (seq (ap i xLfVmXgmzQwSDhifUPHmnBnCvNlNLxcVLwSTZkNjFtCWemHLdASUpChRTEZHQsGhUaLPGxBOjgOsWTPrZscnjYZaBGwufTpCEhcH) (seq (null) (seq (ap i lFOYLgFzlUrALxjfxOSlCZdvVJnXSvkyYXMABIuyzPlbLDScCiqWyDSkaHZKAKBWNJYbUIwzwbcPuBOslaEWBcWhVMHvlcQxjKB) (seq (null) (null))))))) (seq (ap i CPzRxXDOquPRxYROAUcRxyysFbkWuCYOVjIvFSshy) (seq (seq (ap i yKnOxUbWISaBytFNKUJhFvrEByXlL) (seq (null) (null))) (seq (ap i GiwNMUnCZyCjzIrenArGbMDszW) (seq (null) (seq (ap i uN) (seq (null) (null))))))))) (seq (ap i ucpWmUpVlycllVXtEGRkPlGKZwatQFntMVIkfleomdHHzrN) (seq (seq (ap i XvBTBwbDyGbYVzrhvxAZSgQbkeXDRfsMMcpMnwIFwHGPZqfODOapxSPTMklkGmqAzYjNOg) (seq (seq (ap i hmkPbMVhAyPiQkSTcGLWsCOvOHnJuBVUcwVYgxEAyRNxEdyQsgEhveiIZIzuhISwkbiCxuZKKaSXReqEXUowAYEFUdMvvqoG) (seq (null) (null))) (seq (ap i tQYwXtfWvIcrcOltceJipOaMozIqGJsbHRdeOgEADIYnAANKNBGlWb) (seq (null) (seq (ap i ZLdIlTjHhcSlyYLswrEPXFhYcfddYYWPRjOXofpHnSOzEkinnfiTjOozzcGgU) (seq (null) (null))))))) (seq (ap i OZYmxRawEUJslqYUczHJTOcfaaTzdOZz) (seq (seq (ap i hLfKspdiFzdNmRNytLGslRARrvukzprasYHKQHbqDSsJVmfRVrRMoZF) (seq (null) (null))) (seq (ap i MKvWIitkPhbYuGZewtwaRgQEhOEWe) (seq (null) (seq (ap i RbWIfIpeucJlAcYmQBsxgXCdqasrInAGKxxwlESdBmiRWHCgZhuylSycrsBupSmVz) (seq (null) (null))))))))))))) (seq (ap i vAzqfdUJCDVYYSdjHYTpwlLSaJYauKOVIDeFezKFDGLktsLHXRDewxSAJAXkimMXMSdDwWLUAsAzhM) (seq (seq (ap i hBbsjrVEYYoQjHFMuBwffgASnyRhDdEAcRZUuMerUzz) (seq (seq (ap i tMQkVyjJHndCXFDNsomfUotipSClMLLLnuHFeXpaZGuIqOCdnNzioEjdLGPHp) (seq (seq (ap i livdtKAXOFUaebJXZdaDlZHkKRslWXayohspPAeJwEHcF) (seq (seq (ap i WsJtQpFooUnHRLVdNmYYOfortwsqxhgLlvjJEBDaSTEdhRNsEUVWEOVbMHUJbnMkmXTRySchMJKnMwCeHmtMRSVRxRfxPWluVAA) (seq (null) (null))) (seq (ap i JuXkNGPsJNdHDckVSMySzGuXHJTKVVjRqhJWhDqDgqcJi) (seq (null) (null))))) (seq (ap i OJHAoSxPjJktgTJmpuMCjmdxzoMfepzhnYRruFtnMhbvHlSHyTEVCkphnvlZbbszfM) (seq (seq (ap i fuVjcFISsFqnnbmfCdnxemBLvGbBEepeclBqQeHifjlaGhkOSyLtdQnsdcgj) (seq (null) (null))) (seq (ap i SxqAxkc) (seq (null) (seq (ap i PzVphAzqlmRiNvoxDerUtrnaqNFVfzhbTBVEBesELLeFMRYRNXAfXHQVHsuXhvNwURDOnn) (seq (null) (null))))))))) (seq (ap i XkRNyDxjVpRmySzjZLtvhkekrCjnVXyslwSiMjGuFkwgWUoIsdqvzovWRoXwKvXrbrVYqrXbzHCcMDKIOQeMXHCUipfSWwly) (seq (seq (ap i Aa) (seq (seq (ap i hRhjQBDfSeivyHDjuh) (seq (null) (null))) (seq (ap i MiUADE) (seq (null) (seq (ap i wQLYlQNvPsozcVCEGDDpBykxbnoityHFayxzHR) (seq (null) (null))))))) (seq (ap i ppsKdQMvpuafNYmfwQOzPeaFesMelBC) (seq (seq (ap i SeAxqmDiMkbRKNZm) (seq (null) (null))) (seq (ap i kBlUKcoyWGnbdHoHssIBdIzpGbWNCJoWNkwPkkSAfCpwBUhEjKAJZHHBVpOgbahVXtwLgEjGNOyTiuz) (seq (null) (seq (ap i meplqlncizuEaMCLakLhPudIEGKfCMnPAfgvzJWWveYBkiXt) (seq (null) (null))))))))))) (seq (ap i nUqLVJwOengocOGKPcfWyQzGIPFcRLEpyFGbaaILIeVCLmlVkIgAoUEYZYWBhyF) (seq (seq (ap i jsAMRVFrOCHRyzcCgsULYzjEhRMaXcLpdocqsNzHkfQSPRutryomLzvfMuFohCSWXVXSKBPDPsCDYL) (seq (seq (ap i ADJFDkzkwrDsCxfTVEDHAhPBMxKOiZsqNoybLUWpekClggiLy) (seq (seq (ap i hMhftbyoIpWUDFHchyjFNQTlxKkmbLGrwwlJnTHzxOPsQmTRdCaDORwHorTNhyDhThGiwcdKOHObWMJscgKt) (seq (null) (null))) (seq (ap i oXEOrFpSqgyUWUHIZAPyLkbzeaXPfCxHELKLTqnDKZiRpPomTgFkzGSPhEGTnYSvYoGMxLGqweoXjDoZWPYjNj) (seq (null) (seq (ap i GuphSLjsYrcPAoTFndpxYKfPodjtgsmpFzpzzEGziFwjnLSatfvIjIhoojRBE) (seq (null) (null))))))) (seq (ap i zwCRyBsLXDMPIrrxVQyOUed) (seq (seq (ap i ESnb) (seq (null) (null))) (seq (ap i GmdBOcQcuiTCPJPIDvpCIOMAyXklBQaLHqfqmlCvbrlmjudnMQYLFDoHiJenontYTpepWfMq) (seq (null) (seq (ap i sjhfiWuMuGRbtHiOflPBNnNBLOxaQTjORxQQDYWSWacjkZDZdVWRAMIobzjOWV) (seq (null) (null))))))))) (seq (ap i BUYKimKBJPhUESiHJRwwTMvPZhpUfxvAfvardWUmmCUGIKEytHaIoXaCOeaJBLhTnbwCHBPQRbzSkgcPDjvkIO) (seq (seq (ap i ZKqjZIVzmtMRAYmzVZweEorYzyPzmouCRKUXPk) (seq (seq (ap i pghcXTFclCpleXoTmmWEGnKaZOCJxckbGhrWEPPlure) (seq (null) (null))) (seq (ap i olqqfKJUotQmGOjYzadQguUmwCUrSRtvfzjRovcMXbjDvtecGOncKgIVokAzvRhFDQBKyCpQRYL) (seq (null) (seq (ap i alSKfeKSkXNXzzWcApeznJkZonQGznFiVmwIFNjlMLFlHcrXMJz) (seq (null) (null))))))) (seq (ap i AhFdMaNjUvecaUxsdUgNPDULKRhqbTiBxVRoLipwtaiHxdyGBDEYOyupPZslrMolaoYpm) (seq (seq (ap i sQASQOxSNbhRSnYOrcexxrNBDhfOZLL) (seq (null) (null))) (seq (ap i ZQIbGiObikxWfjtcFJjbyybd) (seq (null) (seq (ap i DFVCANNWBAcUijYYYcFmnkFNxiJZfRuXjeptOAbpliBpnwaDSippGBiUIbSzttpmuISDWKRrOZwDepvLX) (seq (null) (null))))))))))))))) (seq (ap i pWGIjIQKpSrGsUZarriTDaQrSrhDqBq) (seq (seq (ap i TvEjEgXdjjgzEXEuYmiqMWCSofcISbVSpBbcrcPIuYFhxHA) (seq (seq (ap i ZUcpRYiLsQeBmZXDoyBnw) (seq (seq (ap i JgbmtPGXyYonzqIJFVlAvyIMHlhptRPtBDQPqlZrJZbyaBdhvNRqQCYZuVgeQefTai) (seq (seq (ap i eCJaAgKuRsuQZWCsUqqoyroibPylDoCVfCuGHHzxYGaFTEgVUjtJTYVObgW) (seq (seq (ap i pWXbbvLMAVnKCZhzPMEYyuFPOmCrRBSRoPkGzQmymOIEoAnlxqTGaInfAtmDmFFCZiHUsKnniG) (seq (null) (null))) (seq (ap i JTEQHQrkpjjxusSUwnctNarBxCJ) (seq (null) (null))))) (seq (ap i sQJBFKquEoEQwTYIKrEjqTgaPjnlQrvMXQfjRVvwVBECmmrqAHonvT) (seq (seq (ap i CUSAuiMrnfYL) (seq (null) (null))) (seq (ap i xjRsGwlPgdLupRLDSnavkausGpNuFePhDYtdMqvPPThoaTJAbFIIEAyPVcGRfYhshCs) (seq (null) (seq (ap i meHwDHNiXnxaIJnMgknaFeDcQJjtI) (seq (null) (null))))))))) (seq (ap i TvlOIxpgjvjTlfBCRCiKjjCDUnVJHSVghTjLj) (seq (seq (ap i GXSXgDDRjzZNIooncqkAaCXHzNHYphPkbNfMJcXzlSG) (seq (seq (ap i OorgAfLIqjfNMLLyNbPDrmXataJmxofJLtHHjVIcBCsDWgemvIECU) (seq (null) (null))) (seq (ap i OjvzYPLpFbmNmZNxMYOUUqpRHADzoogLqNpwVTsICcNsoYrbmwYIHcBqEh) (seq (null) (seq (ap i TkVzKV) (seq (null) (null))))))) (seq (ap i hopnbEWZqBRLOIgqNMjsYgdmjPCRTQBntCwvqGqeBYOLkxooPv) (seq (seq (ap i XALDjFusNoOJvJemPeHTWbVRqQszEIovClIicBVolfKHeMlHV) (seq (null) (null))) (seq (ap i oxLcJWGkaonErtfNxtpTj) (seq (null) (seq (ap i DolCvEnWTCUpLgJv) (seq (null) (null))))))))))) (seq (ap i IIZVoWGTzfYnMaRptfVAYCiFGLhkuucMhDoAmJzgkisGiDkFeQysAmtfGdhcuWUZGPlBjcIwOzYF) (seq (seq (ap i fbJKQVSAaMuiryrWAsVQBZlVQxTgmsjgOSeaYrZdajPoqhfxUdxARWshPAHRYGS) (seq (seq (ap i MVwSaguHQsIxgTU) (seq (seq (ap i vZbqtiwsnITfogbsczfBRnxdDmewVBYyUHrQvpgDCpYdfGzgKBwrXbLLILAngRGcddSUDcm) (seq (null) (null))) (seq (ap i pevpIvENVZdWxqMmUpVdtbkabh) (seq (null) (seq (ap i JderaGFnhPUJbQmsBWErCkaBqKjpAztoeNGDUuFntiDaCgxihPlKIYpLSLFKJOyZQHzkP) (seq (null) (null))))))) (seq (ap i BPvTkvkepXHtOqszcRKTOKmGMqLbIVQzmnnmYsqzSlSlKKjMBYLRmzDwEkXnsaEoorcNNMaEFEtwVQRbxuGPRl) (seq (seq (ap i YRWuEENWisXOonJDSyMsEYtMZTUmTjAeLdoFakTRxEnfdKBaDOaleMdNtaPsNmWbtWiZhmLVqHBfffztwvAHes) (seq (null) (null))) (seq (ap i JyXZygkjLtvmrJAAKcqGsRQegXsIgwAFWJtWSrfHazjmypjexlaIuzpvpdmXbpGxUgZXjuFTSBEgDlfIvXgqU) (seq (null) (seq (ap i dgpZiWLaDwTonhcVYKLPwjSJfmJlDnAIuBIECZCHoDEEXvzPchkHsUMGpvGTewWEkfh) (seq (null) (null))))))))) (seq (ap i ZFXRSxsJPoknXYRijQORHDCWxuTzQGGYLeRzZbNugJkuvQhgbLlGbTxvZNvSlckO) (seq (seq (ap i pbzlFITQQnVvFFZPO) (seq (seq (ap i NQCNeIzMgncbECoorkCSScBbdULIabTrqoqJCEvDivGdZtmdnZPHdZYySkoUQt) (seq (null) (null))) (seq (ap i NKZNNdgtaVXqNGeopmyDXAesEkVbwDWslRiSOdY) (seq (null) (seq (ap i MmDbNwKyYmXWFRlubeZPglqhjAZONnrXvOgTI) (seq (null) (null))))))) (seq (ap i ltNSJXcJNiLhiQMojMKikhXFJjiUySXQJHPEmSnyvfQjlxQikYYAo) (seq (seq (ap i XopKgmQPSOacnrOaMBhtYSBhQwDkydudQOpEGUWkpIwivGCDJfQSHOhigiDfUiyst) (seq (null) (null))) (seq (ap i UujnXpKlrrInrtgoRliyPNppQpNhkkrMBffbEuy) (seq (null) (seq (ap i ZgAYOnzwuczfSeMEeCJsCkzSGJyNaqQrStLOTivWqHbOkChvUklzddDPWStxIIAKuaRuBFXurgVKeJJkBqD) (seq (null) (null))))))))))))) (seq (ap i BqHkWYl) (seq (seq (ap i trNKdskwIsQdkzNsrsAlQPzzVsICBDnJhd) (seq (seq (ap i lvkWpDoIBLOJXGPf) (seq (seq (ap i PLaXuVqfxfvqYijMWIrEpiFNnQSoTIQEOvvPdKSAHaQpPUeHgYoNda) (seq (seq (ap i tzSBKUJHDIGGKHRaNUEQoTgJDGNNcVuMkkcBWjPHjuBDrsYVrLILjFbBQSVqagDsydKLBCNFdlaxXZhZUKfOivWSFsqi) (seq (null) (null))) (seq (ap i bHJkTByovqk) (seq (null) (null))))) (seq (ap i rBjEWJuUKTPYdirBZUlzNocLMvxnRkofJNBMZLHOpIYoLLixjynyfXBsn) (seq (seq (ap i fruXkfbokGkUfVIdWQxoRzTk) (seq (null) (null))) (seq (ap i xnmYXSvWyVstKViXGRFcMqPfeNhyveZcQvqLZMcHWsgK) (seq (null) (seq (ap i khMyeAHbdbElGlcmfKZpxwzbjgqBfyqXNAgDiVv) (seq (null) (null))))))))) (seq (ap i uQscUVNLkFYSfHERTZxvMXLKGVWHdSpHVQgcinnnEhWbYMiFMKQXhsEVXuvFJxTikGdyEEEGEEVDoQqqGroKzAae) (seq (seq (ap i EwnrpGZoxTJQDpTpoLPDHLyBmluuMGyE) (seq (seq (ap i XhAjTgtAuZWIOFVYHcCZPhMseOwZbTGdGpqPlmKpzCUsUHeRrHjkDcFjqSbEfMjsokSOAeZg) (seq (null) (null))) (seq (ap i iRLrKOqujqTMxbXagSYSfqseOEGdUIaXVSEPcmmupcrwbCzqNTAheSoJruqiixGXNGwadSwIyaMrbjAliYIGgMXJBc) (seq (null) (seq (ap i cpDCvw) (seq (null) (null))))))) (seq (ap i lgEQmABeljcoKxvfgg) (seq (seq (ap i qHfacKGmbEvUmhhBsicBqmqIhPGAkXDVeTsHJJXtrUHSFWAceyAcBjRhIScBbEpNOOisxsb) (seq (null) (null))) (seq (ap i wWJnrAYGehIkMuTUBrZsWAGUVLUwbRmOrUWqYtMqqxCjxgyxuOTrFnXlvCHdY) (seq (null) (seq (ap i cSMxnDpCYROttXusDsPqQmSmYQgeBbFjAfSQheLBhhddauEvMldLmlBMBwiUEqGdfZeVbvhXqJUhyqZ) (seq (null) (null))))))))))) (seq (ap i yvSLLypTGUVvSUFYadCGSRGzjeoHFxWcwfeADZlu) (seq (seq (ap i RrJFfHoOhkjOcvzMJJKHrxyEWAtXNmlJncHMVtckXRkWNJFzVAIZzZtXfh) (seq (seq (ap i bGxvhCEQYvSdHjoDyroYHXeEVoRSXMBlyzMIauyeTjdKnsTUUSNfBGlstJuqKw) (seq (seq (ap i kRVrMRjDZtufswLBXDcLjHhqMiaRdyksGSIJvtzoBPtBKoSdSCKpZVjABnTa) (seq (null) (null))) (seq (ap i CqZHKtWrwlYEqlCutwfQBvUypxlywcHNL) (seq (null) (seq (ap i UEKrSDRclIRLjHRuqojmWERwgpkJbGnouqDMCvDLBFYW) (seq (null) (null))))))) (seq (ap i VbICmskSpfJpHHObxoyYEEbQXfdSyfwcGxWgXBBLbxLeuQSNcIkkejyVHTehqvFBDAJPHPPjuxJNNvwdKBEKWGHlxWwyqSQPeN) (seq (seq (ap i fhAfylOQoelpmXFtUmIBwEPiMsjrCxmpIyzKHAmvrzMYChXWQcbQzgQNmTQsUJRZoRkTsviaIYZbvoKNPkViFrbtjxjDA) (seq (null) (null))) (seq (ap i UushPWuEiFQNtQUKhnApKWFmOsViFaqaquVHRnulvobEvVJ) (seq (null) (seq (ap i hHCByggpzXcsLIAIThuaCcrxtyFfWQosJkMHErgHQrpKbbzHFYRurTZimWJAmZarcamwllJEpMDAExisPWYmJEajO) (seq (null) (null))))))))) (seq (ap i HtMmSNMwGeKmorhGzxsiqkMGedFDWxZAwAWQDIQnj) (seq (seq (ap i tdHHOcflzDrLTYGQFyUakujTZoxHPhHnCdWDEWMdNXsMkeyTIAyPGdDL) (seq (seq (ap i wYGuXLFeTs) (seq (null) (null))) (seq (ap i qeJUpvfVkvpHEqMBMxezBnzklIEcpgwUeeNBqyCZJlBeSWuFSAWpGvZjJuyfFhyuEAQLDUqWvvdV) (seq (null) (seq (ap i IAFSiJciEUUjxBYYoUjaLvSQNXnEwBOvpjKAuhcDuKmTfWmiEuzhItUSLIFuaVIIMaPGsG) (seq (null) (null))))))) (seq (ap i IYYuhlHKKKdzvwRIJywzGnAVqbjqWVauXyLxAeJSjAjwJLGU) (seq (seq (ap i OlqCYgzUTrwFMXKNCcQCgiejJbenRDyNkCYxdgIYUpkNUhBFLnbMJEjQQUsAjUJzNgSh) (seq (null) (null))) (seq (ap i ZlolXlIYJSGtvJaztLkKVnTFaL) (seq (null) (seq (ap i hMkcQuZiIIotIyYzaWXAmRpxnAxwaxEXTRuCYOImMmCzeSGnMYJWgZQbp) (seq (null) (null))))))))))))))))) (seq (ap i MyhqojAFqvrwanRJxtw) (seq (seq (ap i YGxpBMLweMuXFGYOandGhoVlurofYRCxXwdwIMGikeiXzHHLEOsiMDhtkNWEUvohXpePxSJIhCTfNckjEBxhj) (seq (seq (ap i jEeCiipBxuXkhIoYvEpJ) (seq (seq (ap i WuGXcbzoapzqwwKLTuWHoZlWtdNENstQuNREryfdgdwlx) (seq (seq (ap i exoboyIfdPtxgnUeVxCCyzCZj) (seq (seq (ap i zGzJRqAOyetxLwobbWSulKXTQAJaqvhpWKXUSLlCkYVdWXuQOHNbXjKffpftyvZDUu) (seq (seq (ap i obnaGoarnhscBIXXjtzwhAUilltjtBBgVgrgNfUMGWlp) (seq (null) (null))) (seq (ap i tMdXMTBmlPZqOqaEGigpsiWGmMBmHi) (seq (null) (null))))) (seq (ap i dTtBLLGGHKYNhkipsBSTtUMsvPkWgfmfOolLnABTokLEPpzzNfezrlcfLrdYAKKHSYRChfoOMIOHjgBgebSoCuhxsO) (seq (seq (ap i HKYNxKckCg) (seq (null) (null))) (seq (ap i hjJsxOymOVyvhtGVSQcbgvPyPdHzVhzqWmpQYMbRYAepIKRtgInxrNlMznuxKXQKlxmRRwNGdF) (seq (null) (seq (ap i MHpvmhZcaEHTIoiJvAW) (seq (null) (null))))))))) (seq (ap i nDjxEjxvCcgSqWjGNtFLbykzSbpSENCoLfBWveUkJwjFVTKCyxNnSCpaaTJMBttFjF) (seq (seq (ap i YoMDIMcPbnXNoTRRHyrOVLENZdbSYWQuriaAfefSLGwMcFazDUmbfUiQPTIglRiINWqHAFkGPIqXgf) (seq (seq (ap i mbICKZJseOwKweKgNaHtMBHAjEigtkWheOsylltWSAikbOgntlhgPRbFkLBBXnhXRK) (seq (null) (null))) (seq (ap i FxWWVxvZZSSODcnFQlcPu) (seq (null) (seq (ap i WkOoKjkfbeGCDrWVInuyeoQSMHroKkTVZRJwKWSZJutOETFSQFajRFRaNoOdUdErNIqfzt) (seq (null) (null))))))) (seq (ap i CLbZP) (seq (seq (ap i DpOLzWoPddjiHMFkTQKBbgZoFpaEQahDETUtEiMQDhWeVruJMOpKtGzCNDNysHrMdPSrrHRORBlmGSVz) (seq (null) (null))) (seq (ap i uSEewUxktctUjFGOUMHAhGhwSYAFuHOmrGuZRMGEqIuWRUfDXTkvHYeJxnGodsbPVaMJYPgijojlXlXFWBdEyCpGlaFRLZnM) (seq (null) (seq (ap i mVBVHXrXoysVzJST) (seq (null) (null))))))))))) (seq (ap i jqkHUUKWjcLmJXRGSxitifKbzDyCSYOpmTGDEbonGljHGxXYaQFTwbCwFpBwVqQMw) (seq (seq (ap i XFxbwGsYCRkzBeYGLRlLDsXK) (seq (seq (ap i zExmRbp) (seq (seq (ap i FTdwtYarOSHqUPxEsoNKbHtMZWuilSfnQUswqPaSzJFcJrXNSvOjawQswhkKouvJGZJPdcEzANrBBzp) (seq (null) (null))) (seq (ap i RyupduhcbCTXJPQFmWuQYoJZsVjDiJKefxrakghDqRLHPRYzNzOcbxOKqDKypAxnqcZcrSmgIfGAXitNHiFRsVabeCm) (seq (null) (seq (ap i qASIZEwQVqOmZBDItlmcmpjUnAVnotoGyonCIGtkqLQY) (seq (null) (null))))))) (seq (ap i WSwBYLpQUKZGGeMsuWbhQfSgcnpWPKrzhRZNICUVIoJHFjTBcnnCRftjPLZuGTYjb) (seq (seq (ap i NtUZSHlfKWNIbxVnQCRfBxvnBaijjfl) (seq (null) (null))) (seq (ap i aAlfuadWOjPdMQXtweqJFlzbkontHeZYmatlruSJbtnyDthwvJij) (seq (null) (seq (ap i ZgwiMjgmoNhBQSnfJyCHvbpwOUgFDvBr) (seq (null) (null))))))))) (seq (ap i eyHiUwyFHyupxOrrimoIVZc) (seq (seq (ap i lnHdtUuQnfRNaKdvlwjHzZKl) (seq (seq (ap i jJEwGOojOTjyP) (seq (null) (null))) (seq (ap i OVBARFdGaCZCidKsnwGcYcByWGEqUsVklbTLezFkTsXUEjbtllgyNxynbibLpZNLoLkjPcwYmmdJZHeKVx) (seq (null) (seq (ap i CgHXNurSG) (seq (null) (null))))))) (seq (ap i fkKSodfZgAoEiYQIvwEZxmgnMMtdNJykTLxMTeeqIFBkQLLqrSltjtDPjklBMSvYQYucfHGjcvtMSviMNEWuOUSqd) (seq (seq (ap i JypOSGDkCzhQxVlFQZMcCXoZjHHrqeoBsRFxVInIBtNVyYvjyEYvoRdIyrjhHnIKCCrWfD) (seq (null) (null))) (seq (ap i LVpugjDciQscTAaJUiAbTzrthkzvibEtcinBAQiNjxcwKQIpyNmOXZoQyWxkvoi) (seq (null) (seq (ap i uhiyykWrAYQAWuaRopgoAUZvqnkzbJCusoXhMzSzWx) (seq (null) (null))))))))))))) (seq (ap i RRDquIwWkjxgDBGtDAGHlVKKTfdWxbU) (seq (seq (ap i jMLXVSEeKzOWCgUKZOlMMpAvH) (seq (seq (ap i HxfmcHODXXUVbPsulMmpopmNOAxZWFnOszYBTBzPUID) (seq (seq (ap i aNyBbDljbCtQYylvDdUFyxXDOIPUyCcVOmJpKxnxVpyYkZhGUcpQzpJqgJRaPCoNFhMcYmHxOwKF) (seq (seq (ap i bdjtsNYWUqcYtLxJHBFVljNgxmGPolAoGjjLSAyymJjfXKAcdwuUclIwVxkhTWigYUhYAclkPJtbtpGelFH) (seq (null) (null))) (seq (ap i eyhCZTEgWHVfBAaoTGyxkqsckXlObFdMSjnRQPNrCqJJPgZOknJflknLDiChCRnhr) (seq (null) (null))))) (seq (ap i DKNvBOaDCtPXZoFXcYcGIeyQKlyPTXResnXEKGtEikctjThndDkizI) (seq (seq (ap i FFSMfBapZajIyP) (seq (null) (null))) (seq (ap i GvszylfUr) (seq (null) (seq (ap i wVEIFASWksYSzQkMOSNkFmfqGfOEGVuyRlhBpfjEUGyeJpLXmsaZTMBFQfivPan) (seq (null) (null))))))))) (seq (ap i pfvyZSHZLXSTVlQh) (seq (seq (ap i lzyKlQjihOVfhpSKHhLRUEtTWPJgmGjzsimeyDOQREyZHIPrVmqInSZIpQAGkIhpvsh) (seq (seq (ap i tI) (seq (null) (null))) (seq (ap i oEaQatqPUKDVYFszmfaDsUSgZbxRwNfJscZklZVquhpZSLwGvoxVkivuVjVqVIMMvVTiGfHouUFnKxZxMWl) (seq (null) (seq (ap i NcSObnSpnXvJIZLNzBphEUGRRZuZgtKxUlXCQBftZIpYHkSdCZWr) (seq (null) (null))))))) (seq (ap i umtmSdWBIaZmhVTYmqaeSmffMWCMRulyNHvTVqphxTkztFhooYpbySIiACryIWpyJtwaGpLqQdNkc) (seq (seq (ap i rFSxEjIPKSQDkJBJJcFDqycsRHXCxbKTDsTFgSMBboYwTPSfBqTclyCIpbQsQNRwTXkRmBjYh) (seq (null) (null))) (seq (ap i EAisWPmPzbFDKKsDfvaOVQCVjbbFETGSyhhNInpwgpiEeGreSjwwfVWjqDSnXvbcwAkkDKQn) (seq (null) (seq (ap i anysZPmFuKXgIbspNAlsF) (seq (null) (null))))))))))) (seq (ap i AwvuDDbTdJVYgaPppkWNxWUBfyjx) (seq (seq (ap i IljCVbGincBhsRNrsUbZRrFgHLEklMXleA) (seq (seq (ap i ShLOvESGWziyjjGXKQdWmPUqslZIlchvijHoUgclWTCiNdAvrEmQGOBHFlxRkXbWsRDPxM) (seq (seq (ap i WCvErVkhUcTMTnAmmocPaZkJkGNqxDmxbgKjtWWyGmurZSWxAIutsQjEHZHcZIJXROymD) (seq (null) (null))) (seq (ap i cNCcolDTEjlbKexpvJzqWIMqIkdFfzLTptOAYSNOuIwZelGGBYcKJpDKZtpgDeyFHRuAodnWRC) (seq (null) (seq (ap i uITDDVWnpdLyPyPnlHTNHieXrpKJviWaYNqDSoQcAsFqwFJNgosIzEEssmf) (seq (null) (null))))))) (seq (ap i HhrCZaxVVFLaxZyvvzsSBIgBbSLaJGlpittDBDzEhv) (seq (seq (ap i uECqDOYkjoWGcpTwmlGBelO) (seq (null) (null))) (seq (ap i MgpUJumzZTnawbtkSRcAMhmoIMhgV) (seq (null) (seq (ap i nSfOdXPYtzfQYCzffYMCEwSTLITFfJvUDiQbmCuKCEyihREnEWlTTxmSkikflaNtS) (seq (null) (null))))))))) (seq (ap i fUCziWemMEkmPunmvgOzatRVQljpRgzXcqFgxhouwDFtkKsqbiWTuPSCNMNNhpyjkZWRNLMErJCKGOodJrKrdnJkV) (seq (seq (ap i xiMEJWXzLiRJgFivkFCkyuSmqxcFdySVScivFulLsyXaFcwIYgtLCAZGrcWgiISeUNLwMsTAAj) (seq (seq (ap i HskqeOnmkFVtrPYiTrfYWNIAYTneySzPQBpmbaztlBEGm) (seq (null) (null))) (seq (ap i UeclUZoAvcDQFlRR) (seq (null) (seq (ap i CwnowBxmuMhsIxCgXTkhnhRSPyZxJYpHxQihoMzRbfoHZJxmgFMwodoOcNleAtYyRMUoPgHKWzUEqmHmuhU) (seq (null) (null))))))) (seq (ap i bZaNUVEbvFZdOoFJYvWYWgslhXLgoOKXjUoTcwjdxMDtnoeCMyCzPSATxMiAEpYrGtTCBwJmYZMUAJLSxvelLVGmYTyXxOsRSBq) (seq (seq (ap i dveoIAsmPPXqOwlCffmh) (seq (null) (null))) (seq (ap i DhdGcZejGybMCWAjauryEbbfczEcSiASbsClOoIWQvgpuYqhePytHMUfJKtckSgcRmVWBOCmve) (seq (null) (seq (ap i rOlbuurXoqWOgijQmjmHdU) (seq (null) (null))))))))))))))) (seq (ap i opFcsdburpHZcwhVZ) (seq (seq (ap i vIElIMAlWriMzMDXElqXGJQMTqZPwXSYCmOGsOwVmiz) (seq (seq (ap i cqaMMcgLAhbwDRBzlVWLHxdjRLOMrjAzbKFqxHDClZtXvREQgfUSGGhZOQHFXwBdPbtHI) (seq (seq (ap i oGeuQWCZwPnNmFQFijtZtEKdlwtcEJbJYjjYgnXsgPvvTImoMCnwwjOXANLuWsuvGBF) (seq (seq (ap i jZeltNBscxDHvmBcRFBWNAkOZdjwdutePpmxAtmWapwugrdOCoBKmYEzrdCEnQzZnYMgqHITfGlNAkrGDUIRdI) (seq (seq (ap i dIQuOJBLnXrZnCwnxWiifZjjBePXcgSAPVnGqtNhlMPYLtyIXLykxdxhHHbIysJJqigvxehYMVLEzZKyhajEMrEibYqW) (seq (null) (null))) (seq (ap i xffozDBCzuSHwPJWtRUrXiqEYZhKXnunAWZVPAjsLZHmavCMbxgUAqMPAeHBcWZIqwkhxLXMblxmtJyDiFcrShQnpEJ) (seq (null) (null))))) (seq (ap i dlcKEiFAXSBzkdHZhAyWMkWUXxuRdwrDMNoBeznTF) (seq (seq (ap i GblcgVOXTucXzQjrxLILvHuELMAzFLximVBsQGTrDTHVVybqfzJFbpGBAsolFMOsKUPGemNVznmAchBOcOndHNPTXNNrXsIYQPF) (seq (null) (null))) (seq (ap i uzTFtpOYiTREduNtPgGCFDcQZFuTf) (seq (null) (seq (ap i CgbtyhKAkHfjwgQfYDULpfbaaeGZXbyIEJczSmtsJfHnDyPDkHCHDnUSVTYwseXERfUpmaGsGHqrNVZmhXFmnHIjPMusSo) (seq (null) (null))))))))) (seq (ap i DhYWJptVTPrOOoLivPwvtXJLzKz) (seq (seq (ap i dXVfTpGOZMCuHbewtrGgrsDAqgfrQaHiOSwcqdxItILIFmcxlYiqCcomtOjkaVKZjWPrYcaxFzgIJMPsebwFbWDXNLcauM) (seq (seq (ap i Frec) (seq (null) (null))) (seq (ap i SifFBuIgyTkoRFZswNypkAdcqcRlPxoNtgPxmlwIYBVUcuPhMrqQHBPqLDrXLvmj) (seq (null) (seq (ap i oWPYmZjUIxsLcwphpyFtwWLZkwMOByxXDavTDeYvkw) (seq (null) (null))))))) (seq (ap i PKkLDcNpfVpRqxjCNenqSthqNcczZlJCOPYHpgVFnCRKgPqBLDaaMAheAHmuJfCACCFTJSHjZtouaUJeUswFzlNGXHeHPDbMhYU) (seq (seq (ap i gKsXXmamGUwBAzrreETSBfMKTTnmscGtMiHTGGnPjbXXYVIiUjdgpmRES) (seq (null) (null))) (seq (ap i nvTNPvglPRQNlAdZhkajLSCkHpVllIHsiLnQDIFusEwUyIgSjPwWPbGCsAXzqQnVvTccJEWKsmjmjBwyYEYjzYzB) (seq (null) (seq (ap i AcrbTOVDvCEiSbkKkDySmq) (seq (null) (null))))))))))) (seq (ap i vYpnkraSFmvVquhaBsKnXFGOKcYQyUErNRFXEjnMCwdDUWqbjBPKpZZzEfqSFDapYvizSYTkUeKWEmxcHZcAZFQlS) (seq (seq (ap i NMgWYcRyAEVXZZLAlOHJmDYUKAbMmUISYMauVoupHyxzoToNJZuyKeLZGsefnwKUaJrEtzIcdndAEqaFryxTfiYoxFbiNYtr) (seq (seq (ap i JabqhfEJPxdbBEDroOUnkSNjymXuNPFNZCZTz) (seq (seq (ap i baLOjMnHLqWKjqengEDHovQafFJGDiOESWHrEOYqATjtOgjNldCwF) (seq (null) (null))) (seq (ap i mFRpCmzaKmZhiemTJntBumXfutKxUpBksnXgJjgAkFFbI) (seq (null) (seq (ap i UnMZIGXFPgtmOlQLqomVVXY) (seq (null) (null))))))) (seq (ap i cklhnsFyrQBoPxfBXQpPYBx) (seq (seq (ap i qjq) (seq (null) (null))) (seq (ap i xNKDYaMDXigwWrbwSDhlygfZUOfropgaEopfXYWlHyGhxXPvtBtAjZUhmrOGfNYMsIFNToo) (seq (null) (seq (ap i pBqLjogudgySZw) (seq (null) (null))))))))) (seq (ap i ZaUJMxEYOYZnzxPtUZEDODifKrsaVJPWraFyaKztBhcBxSHXkErokjFJfjCnxuDzlyHhcIKErZmtcFmzRBHieLVJTWQpP) (seq (seq (ap i cwwp) (seq (seq (ap i rIHPSFpOtImHaAUCUaVlrYAzSPCjCQwtGgbMyKhtGSZxPHSnWVzKvEzakYRwYF) (seq (null) (null))) (seq (ap i zFQwvUUCCnopGfIN) (seq (null) (seq (ap i OzAlIoBTPdjsqvOlDQJkmY) (seq (null) (null))))))) (seq (ap i JOadrokMyNrmdXiBvHNMXbliQUrEoKinzWEzIIuycizLvgTBYqXbvAJLTLVZus) (seq (seq (ap i FrMGQfJfRphyqxCbHgRxSfQGLuPfxuXEGmUxsRIAbaRZoifQCZNoiVQzsdewIp) (seq (null) (null))) (seq (ap i vsuDsELhdXqNUKADoKwDKszjKghqCdyEBfajTAgmEGklxfKkhaagrdlLFRzlvIEwuTJwWvHpXnYxh) (seq (null) (seq (ap i IWVilNndTUbHVsqJtyiXefqveckWhyASPrXVQzSfhtlDhwJhdyCNqEQAxJluCsQPwdniTPNuRPJTqPHSbiKwPBQzW) (seq (null) (null))))))))))))) (seq (ap i SOjQwQvrNiDISYhczukIjVhcqxzwmr) (seq (seq (ap i uwzFnocVfCetniQrHyxXrfHXMaKecFhnkPbWXuSwJfNFcGdSDmEEHdDkUscSuBrU) (seq (seq (ap i sMVttTUdVIoQUc) (seq (seq (ap i bsHlqt) (seq (seq (ap i AfSAAEDBNfucVXaNEqAKWTiDMFLyXOAluwQHbWXiqxpuCNCDrwpPlYMSO) (seq (null) (null))) (seq (ap i tbmTRUVlQhGgSjattRmSKjdybdjm) (seq (null) (null))))) (seq (ap i hwmZWHbKDiCcZIDxM) (seq (seq (ap i HpzICIaGTMmJNatuhKQkKDUQNBroXzjcrhVQvdvucxVnDrEjkJxFKQHGcxIHPKWGYrxAQCXLzODtGGLKRgQypQ) (seq (null) (null))) (seq (ap i NqdEsAcvWjrXUHBURJzUPGfpDMtxEeEItaRRrQuzDIEIsXBBSjVIdMbLktcXsIxH) (seq (null) (seq (ap i iQiwmwhogXLsSuuDJyYlwYjEzyEQZvAQmopvsTJD) (seq (null) (null))))))))) (seq (ap i BNMPsTSfeQpHgpwoSo) (seq (seq (ap i eG) (seq (seq (ap i dlTGqvoxUbMnNpMToAlUboavTxpzsV) (seq (null) (null))) (seq (ap i pTPPKGJthjbbfZnudGwbiXoDmUKFFoFewUtifwZynWVmhANZuawvSyoPNFxaOYD) (seq (null) (seq (ap i GtXtfIeGAtlatEbMxVfjTiNjlRjVHHcIzHHkVOsdJdIHypnITiDkyoilhRgI) (seq (null) (null))))))) (seq (ap i tjeHzhsGH) (seq (seq (ap i jIXkRnYze) (seq (null) (null))) (seq (ap i bCXgWmvVhsHSxaYDiLUBKLwPsnUcqCPpZfHwXXoCdIWlzMRddBSHkznlKvqCcBilCbsKXNVfaTHCzC) (seq (null) (seq (ap i IYRFpCncjouNerL) (seq (null) (null))))))))))) (seq (ap i hCWhMqRJGUACpqlMdoNeXaXfeRtHCEmbcXFgrErte) (seq (seq (ap i rUNMZhpNywHNAKfqPmIRBphdjROAxAAhrnHWaJMRq) (seq (seq (ap i nfCTBAccGXDmGFxATPZJDtjFaFaMhFcpGgtYsDFgPjGOhUETbuPFdZodSPIwtLxQgLPpplobXUkYPXoHAMOwuyh) (seq (seq (ap i uHVMUMcmBEOWnbHeaNSfRrmzmPfOcyzIdrdccwtFYYJzprqJoxgnxrDXPObAvkuPMsWPIJsIcLmROrIqVoE) (seq (null) (null))) (seq (ap i SigHxJUMGCsrcyaMoDqoctWpATrKNygpQxcvDRAdAXShuZjrdSPePnYNYfJPlrHdzXTBWMperWecpweQDNqgKWkXElQLicU) (seq (null) (seq (ap i ZBsfPE) (seq (null) (null))))))) (seq (ap i SpWFhafr) (seq (seq (ap i TxHkUtFcnSjGQCiHEKlhPGVDJhLphSWLhMmyVzumpEHHScWcpGiSaxIBdVnJIaMgfVpE) (seq (null) (null))) (seq (ap i JKovIZcY) (seq (null) (seq (ap i HYhrNUsxRrMbbgXApYjCMFDyPOtoRCjtCclFgdbxQLYphueDABcZXMFTuGMKuYHJxWxjyvJZrnPeMBkojIOWPRdoIxQKmQzmTO) (seq (null) (null))))))))) (seq (ap i PgaJjWncOXnFtwnGiqVcajNsPvDMPL) (seq (seq (ap i JRRdMUmLGmTDefLEeXcvJuDPPqnlHxbsllHzoGTBdkc) (seq (seq (ap i wKRsglRPJDOSzzJEOcyXslCPZlLSLesdMZMd) (seq (null) (null))) (seq (ap i RPpBRQuERHVavFsiKNvJLpWBFsVncmYRbVNvJqCQIdfBPsQzBhdRhIvzAbETkdquXawti) (seq (null) (seq (ap i IZIoeYrFkiEkPLeCiyMIbEWRkhIodVYWLjJwIeiXjuEEYKCYcueGVkGvUPoUvQmZttqmscQKKRMIuCHVhDGWoFeDOkfaDOiv) (seq (null) (null))))))) (seq (ap i sgJEUtmmztuhSwYRAXJQNIUBAjINzvgkUQUcoCQHigbhkCQfteJEtyDUtrAoCCqUsygUqOQlWIaQotmUnHAXrPbFlfFovfYHjyI) (seq (seq (ap i bKQJJvlslrSZXqZaOCFNEyGtPvDguyXRpsBfJYTFYRvrmJyWwYFJUCDoysoloLokewUNuUTMuflOWXJOEuOsPTidJ) (seq (null) (null))) (seq (ap i seMZgcbHmXRnSxLDYKHjUO) (seq (null) (seq (ap i ITWSqu) (seq (null) (null))))))))))))))))))) (seq (ap i DipEjcohjEGzlSbYiiuZomdvdOTXaXsLNYbTGTvHkLwWkiICQZsMHVKrySMjBumTKRYGurJMpRdLOjnjddyjuVIYzVGxBRra) (seq (seq (ap i HyHfwcUlFcqpNMOhjxBUsxizxShJTlgfFMndQPJLFXztyrxqTfqNVuZuxWWADTHNfuGQBMOLBYgHSWEblNVBAUjJNmrCVHCJ) (seq (seq (ap i zfCiHHZuFxLopcsTElUdEdsQuASYXAzvEUbPMWyNla) (seq (seq (ap i FbmasnTZVemLRruqCR) (seq (seq (ap i ZPVMfMzIVsImCqxgudmuzsyAmDdYcymCKloVlcwGjlklFpk) (seq (seq (ap i gldn) (seq (seq (ap i HkxTtFNcrUyKXvBKKWjCiOVMGNgrQuylyrurFUpbkoRyhEDCjXjAaGlysWlJXFw) (seq (seq (ap i pPmxMFJTqIrCnugWkdJC) (seq (null) (null))) (seq (ap i jpkVGgiTiHPezHlHaRfUBAJ) (seq (null) (null))))) (seq (ap i JCurXOtlBwpPsiziTTypoDDUfHfikhIDfJTszxjSwCtpNrBqbRWbj) (seq (seq (ap i MWYCSiCqkwEBPnSMnCWXVHXtYfRTzPZeUu) (seq (null) (null))) (seq (ap i MPdESMPDMahUNoguIejDgoTLoeEKlVQlXIIxxQNrgwIZeUfkbJKFYHSAAzsoDlktbJHroLA) (seq (null) (seq (ap i qFDKyZKdrkUOXRhTwnaZZKrUoBYxadIvvroHCYjCbxnYmfNitVQBxNsSgrJmxATclJtMjZFNJnHSjvcmK) (seq (null) (null))))))))) (seq (ap i ycJWLEpdGbpAdawsdOgQOfQIyETZbPCZpcCPpCN) (seq (seq (ap i yNebBeskNvYUaBtqGzjPJVGugKsWqQpAUosCVmd) (seq (seq (ap i AuiOHYhzVkOtageAxBNJSolIiZOkiEtgRlvuVgYOVBMmzHfevkttJ) (seq (null) (null))) (seq (ap i DVpurIshrCqsarQVHNTOvHqmgCodcXZosyEMwuYc) (seq (null) (seq (ap i GeRvqfGlUTpAcAhqFXPQSSInWlsvNEIkGGHYInebLrJZpYcxnphTEoXpOEzJTKysmwFgSsQBrwviVaPYnVlLEbXsZa) (seq (null) (null))))))) (seq (ap i qvKeROpvUqzVkUwzgZoDOFWIjSBvBCsIggfeVGvXFZxejVGbKzaMv) (seq (seq (ap i nRLmXVEYhJGbtpFBvsmFOaGQCEgenWh) (seq (null) (null))) (seq (ap i UMUeTAjBhoNvqZLzMzjuDdsuUKwX) (seq (null) (seq (ap i yTggdrOnPkHYb) (seq (null) (null))))))))))) (seq (ap i mFHTObiCypza) (seq (seq (ap i jrrQdjUvtMMcHmQaOwQyLduDknvAVsTgJHOtUtGypj) (seq (seq (ap i UrQPhQdRkSReRnOdIkjAPtjJyudaByAMRRFeOkSRbkpxaeUCVAJMJVuakdYvELVEqCCyugirmyNwqvQexBjGIwYfcchwJVlK) (seq (seq (ap i kCGCvgmhcSlKObIdMQYQgTJdsaOuMocZS) (seq (null) (null))) (seq (ap i mhIdcgsjKgUSXEhVtoJcmuTByOqMNNlSZMWuhtJyxKRKTGuvpCYtTVwPMvRKIVcBiRwYnnFGPfiuaMEeNKMPd) (seq (null) (seq (ap i vLZCbgqkAafsgJVfFyFIBQbmIsRfYpaugtvSfqXNGvjxtQhCtdTz) (seq (null) (null))))))) (seq (ap i eTQVHRqbuWo) (seq (seq (ap i XyDvZtYCqXKJMVOtubFwbBuREbxrqUIxeIKtATxSSbUsWGDaIJBsK) (seq (null) (null))) (seq (ap i KDacbkypx) (seq (null) (seq (ap i qKpQKHuIrQdBmWvtWVDmFGGWJVAFrxcRFuHjEAGXnRAiBeHBsJVOoEmNZLLnXYFkCuCRhFBbQBqlRQAoseMAzpuXeuhcf) (seq (null) (null))))))))) (seq (ap i FKWwVPpTPNqEaPoLVvifUgwomSTAZBmlsbZRocYkCJTofnAmEzneUIYMCFvNtnAcFeFxfrlCCLtZRHdzruEZJEBBohvlnLxHsPbU) (seq (seq (ap i tsIaEtOYJkHsKJdWpFyjWiiQPzbLDZbOkllnTARJkfGynsyvRkJaAmhSlFVaNAknOaRrzZUVUGDBPWsVXtUZovtJTXHxNDoY) (seq (seq (ap i TcViT) (seq (null) (null))) (seq (ap i pHCTYHMRrTTULeFHI) (seq (null) (seq (ap i VgQKJNtJHGlMIdueeIqwZUxbshxeXhTEEYspYBohtyZdVUkejlxWiBpOvsHmiyAmODYIwfXsRNVJsWkmCfFFIuuj) (seq (null) (null))))))) (seq (ap i WYkIBPPPGAEZBrHjzbMoeIdeDZHQCpRnHykxcFZsoXgXfCvcUVQdiN) (seq (seq (ap i rxFwEtUjSGYAOraSpyTwITMwUqdxbSkwbIsbVZSDqGhZmmovKkV) (seq (null) (null))) (seq (ap i qFMcqZqIcf) (seq (null) (seq (ap i pUHqWLAvFryQDvYwLFywkygYAXECWIhAcSFbyfEKXdyaFoecFCPcVTOawAnaTOLIEtRxYpOuHw) (seq (null) (null))))))))))))) (seq (ap i kQqxdfgsofjbLHHIMsMlaOHwJp) (seq (seq (ap i jKlQQlndowaJsaDWBVbpXTkWYCdHBBIbzifkHqxuFkJcasRYLhfIYGikmiSRWbvsVNibiqccfv) (seq (seq (ap i nkLiDXzMwEAdsXSSFIbFWUbmvcVyUFxLqAszhQYifheneLFaULoWbitoHrGgFropxcXYIOyAXbfFtHcHEzCm) (seq (seq (ap i zdbKtThHnIHlStOZPQlTcfKdvpAGYLKjSdvRUrWdgOjxjQTlKDSCbLKdfQwUCkFxfDc) (seq (seq (ap i CaCOhTNrMSHbPFcFVDdXaM) (seq (null) (null))) (seq (ap i wXlpqhtxSPDFyJhviagYQxEfVdksjEyhZnRamePlcYAPRKABshCtyoVHrWFuZc) (seq (null) (null))))) (seq (ap i TzodtcaSaMNwhKWA) (seq (seq (ap i ZGQxVdgOYfxndl) (seq (null) (null))) (seq (ap i KTpCzqCKCqtFVVHBLjAfqDtRaYmlnqiAngzzDXWZbKErWxYTEgBcFIhPLGUgoZdhznkbthVTpJQlaUiPJwGJZXMHFcRwzjQshKIu) (seq (null) (seq (ap i aPzVClMeHTRYgRoGVfjGfqLPBxOndHXPtTexSKEr) (seq (null) (null))))))))) (seq (ap i CvqlcxijxTdnVkmmNxIJhkUymaJsOqtrADlDPEOdPYbaCFrfBMRvWLZQEtdXFHyWnGvSARlacaTSYWrfAxSmSAeBVbBAJvuxmg) (seq (seq (ap i tigBq) (seq (seq (ap i qXWVjlqMzExURuYrBhUUloLkmZG) (seq (null) (null))) (seq (ap i kHXfZNQdIoAMUrGChglQlqXmFKuVOPuNjlSMmbyKIiD) (seq (null) (seq (ap i kZoPHrsXofruWmrQCMfQMLqGZVgNFDvcIzRkKpZdVKpRdkRrYRWZ) (seq (null) (null))))))) (seq (ap i cRmypfPZgTuQQiWqYwQONVGiDlqIfpnnlMJlPCbQMyHnTAxcIHJxdzYGwRoluVlkCJtRWEMydYEzcaoOI) (seq (seq (ap i chqeMvjNrktiNrQJodLFTqohRWcmsBQHVTHuTzGWLtARRVEHAIVAndwfzqkNDaMYEZxawABeZPbZvDpxlLqnEXdiHQLZ) (seq (null) (null))) (seq (ap i hmYnyQgjDdfieEkBVN) (seq (null) (seq (ap i WpDdkarUXfiCtdCRoxBrtJdiCCa) (seq (null) (null))))))))))) (seq (ap i WNgfbctHjZDayHNyMmtifETNw) (seq (seq (ap i zfmRcXSOGiyjODimZYCSVxWBvtUvPEmJqtPdcDNdBllj) (seq (seq (ap i idgsSAaDFsmEkOZIODYxmeQRwN) (seq (seq (ap i uZPBSRRCCLdVAHgSTtzpNLzWTujbkeTZKqnaSkjYYkYEKaBQBMxB) (seq (null) (null))) (seq (ap i RgthTdSFzqdzsynhZmUhPEusdVtYxtuCDxqSXhvwBndNtzjZYopnqLDpVGiuqvihXpMZPKelerlTLBnJcyBOmlDUPmTGpOn) (seq (null) (seq (ap i FqtNPrIadYLyFXKvslJCZFbWemICFzVV) (seq (null) (null))))))) (seq (ap i kVeHzrfQovFTFNubgWRiULolIgoxXDZpkUtwFbTqkfNyqvEJoySlGXpmSoosmE) (seq (seq (ap i OUduYWsgHlHVyDFgdsJgeaYpwtwYToivwsZmwFKERmICYruXqlwmBXsNHZDNztnjoWfpmeOyLRlWxcPUypDJLycAFyIYgmAUleZ) (seq (null) (null))) (seq (ap i OWpUiJBJBnUKKKzVmtsmDiUGNsiZWklo) (seq (null) (seq (ap i FZUyMYTanzjvsOavXYHFCUCkqlVqjnMJyJnRrNzYXnd) (seq (null) (null))))))))) (seq (ap i sviVI) (seq (seq (ap i zNaVtMFDJisLqdBVbTnHbFQMQAYKQvWcOleOUwPxsbXMxWnmEgjHWFMSnOoybKolIHfQbuyXMHmU) (seq (seq (ap i JuZpbkPfByurDweErlKFYeIMgEsSJvcvjfOVWYeVCPVXfnm) (seq (null) (null))) (seq (ap i uiPdKVlrPtA) (seq (null) (seq (ap i zuVqOLhEE) (seq (null) (null))))))) (seq (ap i cuyedVxSJIhMamtEMIrCyhfczVsSQhUfDghPhuVBEGalpFZzraX) (seq (seq (ap i PoZNSdzPSdalazDBEVArkhajmlTWgddLjoWiZAVDVepZFNOSeIXAPbvtmOLgKmDsitDfqmqyUXhfoZoGyzVubjsuHjyInVYW) (seq (null) (null))) (seq (ap i oxeNbUySvdyRniPxeYtyrmxhpNSaTHvBqCcaguLCbhEKkyiIlTSxWHlHesXGLawXLsfhPFZjtLogmahNpfONaYFDjSLpjDzmh) (seq (null) (seq (ap i zVwuVwnPUKtYcRIBLeODBHJwTtmkWXtaEvOyMpHncKlhZgyUKVBPRs) (seq (null) (null))))))))))))))) (seq (ap i DicFCXZaKwwSwTrOWobCavaXKRfXHKOpszufCNfUXzXOIpLijpSvkgwgPUDtmdMBWUdAYbtgZULDJAYdjHfnXKgSs) (seq (seq (ap i cbWRhZDzYCRknTyZZWXNfzwOYiZytwEEGDFlGQZvXoCWoPRingVpENLBdWQokqcBWgtrpobQuBjG) (seq (seq (ap i sqfmTyAJzTXmSHRvRbtcHACVrCPHiFaisnle) (seq (seq (ap i EKyyHJUlvELDNIRhrvqQBXTJyZrZnMnWLcScDzhuaYEUWYpUVzuYfQRxAmKoZoVicBpuYxhBCuMLBflMQ) (seq (seq (ap i amsyaCeWrwsthDxbnxXBgHLuNpkrkpKDwPYXsXIfALWxzhYVUcOrFnyhysIYGaggCLUbwUujKun) (seq (seq (ap i BlGpNJKXdkRuSjyquQAooSIVAvbuMErSDFsIpXICwBsbPBlfDvefqtzTovioIdfimhInQgSsXIygwAQIQrJKRCaHHyuTEhssKPUP) (seq (null) (null))) (seq (ap i DxibbvUaSpuCITSSnLmpurcyRxRrqlRRlolgHyrOzBXDkgsVVYYiADgSbX) (seq (null) (null))))) (seq (ap i PMMzeXSBbeSAVlEQTrYmGhsAkZYeWbcAsbgwHFAxecROyvjwybQwLWzfmUyMSjHYDmbQKuOggNuEdvMzQtxcVeSGwRC) (seq (seq (ap i qbVeRDxXOALWVZcFsaFzNwbxqeoUMqWvGrYniEUzuerQOwcGKmBIvNCntbZWcmEtWqkwuibBoktVEnpThvaiuthzMrJ) (seq (null) (null))) (seq (ap i dPAESwtYhsFbcBTcnsbhwwrZVpFWrWvbrztXhMUyBg) (seq (null) (seq (ap i AErxvMRPqyssAWPRgVBmfKuqXgVYpVwShXXhyGWjPWMwIyVdtnTZyxmQaaOEPZwFKTHNlPsDeXqMCi) (seq (null) (null))))))))) (seq (ap i mudDdZPrQoTeRjTSsHQicYujojwRMFCMEGphAnVZBevADcrBlIcKYXpbXktpcRjdlXfhWRULBopMQLzpOCDQJXAm) (seq (seq (ap i RyCDwBaAqrzPjppZCGbAobfmwyVj) (seq (seq (ap i ZKZkHZKyhtCpdDaOgliGgbnbnSQBewRxAyYIViUJlBdzshlfrqRakZhxm) (seq (null) (null))) (seq (ap i HxMzsPkhZIROTJdNcDUnEYzbRTmhjUfEOxUMUpmbnCJVdQCupyLFUgSdQUAJYVKmWYHtlFUzMtB) (seq (null) (seq (ap i ALEHmzfxXpiwhzetromsmYVdZlXpKGsvzRdaijKudyXJkrdctWTabYrtmagwaUIOWoQhCSPigL) (seq (null) (null))))))) (seq (ap i TwWFLPUeQlBZmLCbgSJYOtpNmFWYIhbaRCkCmpJcZSaSQpaXqdhUmKnvyXPbwIzRMXSRcNXvbyAnKwL) (seq (seq (ap i RBWvWtgkgVogVyAJRaDMx) (seq (null) (null))) (seq (ap i TRdDypaSIoDNKqPnenjrlNzsKSteXuHNyTWQbmmYnIZKIsO) (seq (null) (seq (ap i QNbwkfJyscCBHbfcixfmCVyrHHnUPhyYizjWZbdjzGKmTmjSQCRkGpikWhVxZg) (seq (null) (null))))))))))) (seq (ap i lfAt) (seq (seq (ap i zsKTqGu) (seq (seq (ap i pwzhktwxsUZWPwehAtVSIIpcafFfyMWZPROvgTxPikiAdZBeMtWpVOGdUcxOWQmDWWUmbBzOAaF) (seq (seq (ap i jiPvOzFIOeOGeZLZLPHOcMIkcNFEzudWcmXkeVkkLjhLAGiXQzM) (seq (null) (null))) (seq (ap i goOWBlojbajpDcbLnSVbisewzgbDjqmAUKoOtKhEXbaTAuSXWDAovFmvpYvH) (seq (null) (seq (ap i vDRWlKNRCsIxvtTSdeDLQPbAMAKEUEQebHnUzJkNYYkCTMTvpYSeCXDuemlxMfaNJlcextFHmDlcPAtiMYYzCfqYFb) (seq (null) (null))))))) (seq (ap i xHIXEfKsCGqfuJfUGjpSzipIowjXZfFyXAthwpbUQeYUCpaZIKJXVmtjjPNgmYFZffYWfkEvqsCrrXwUZstohDDXETskDaMVvB) (seq (seq (ap i XRdFhERvurdOuzPEOKYhPczuJZszZELVPRiTOpWxeIDLfIQMdXbHysdeBUCyr) (seq (null) (null))) (seq (ap i wqnPTYbhtfpBXXZH) (seq (null) (seq (ap i mHuaowenHGbKnMrGhzkkwOCEgcfhjnmyzBXfGGuIOJdXYKHuMIOqnXrreBhWecbPJNsocxVzutghgaquFVvdviPDZTKJGXJ) (seq (null) (null))))))))) (seq (ap i FOGHjeavHwDdnlzRIEWxeachQAtgRxllVDFVAknRePRoJmNzwwGFBhkkU) (seq (seq (ap i zfKwImXOWGVyWtJFXSyjpyyBKaWVFqqbpxWCJBvaZYSCBKyBoKuxFfZrHuBjwzqxKyBXQRprYYgikqJgth) (seq (seq (ap i EGyfJSULLrfVyYmDLdCKgxRUCnjzVOTpLdWWxafireXgRvTIbZlGrRQbHVEEQHPmPIVBgAGqQvESUTMTEQyhdikLoZqDhDmWlGG) (seq (null) (null))) (seq (ap i ahTMJthurDPltlnAncXBFEHnydYDbdjmsypYrAwSWqjrBgOjdexFVarWBMiPtBUdDftSthOgy) (seq (null) (seq (ap i OWdRqMhmfyCaOTttUeOtvozSxXVFBMtocjlEDmcEIbrpWTUrbFwnyuoVUgwSYmBHNYWgEwQodsyPBCCPSHSpayBQcRzIC) (seq (null) (null))))))) (seq (ap i CUzMHjnDFqLLXomApMjSbSHJsFyvLkNkHUYbLqWzCHAudFHXmrXj) (seq (seq (ap i CZTJaUOIVbJUCXdNFxmUwGjKXtCYLLFQhENuanQHCAAzgRH) (seq (null) (null))) (seq (ap i YhfIAFyFAsKrQMzrg) (seq (null) (seq (ap i wvebLpZFqGOKjNdVmcbPpzibS) (seq (null) (null))))))))))))) (seq (ap i sJYuXLgCTEGUsABxthCrB) (seq (seq (ap i LcQgsFNaZebemgrYhBaTYqVrgYrBKUXzMAJSdFiHdhAiNNtDBVlHmCjobWCdQLUKtZOEpkPoToQTFPLgSEgeGRYzRW) (seq (seq (ap i yGnOYlADgCPAgUezAHuPbtExiDrEhIqAUrDaDwtvQZyOiAAaSzUNX) (seq (seq (ap i NZouarrfAFBtFUBswXgsPYmdcBSPcRkLLs) (seq (seq (ap i GTHaGRooxJywfMLUiwoLMqKrEXfmbWFClDhodjFOJFUlXqpwfgbUehIJtAQpYocNrEFidPkVwNlvTHHaqGjwggwRlJgaxyeayaBk) (seq (null) (null))) (seq (ap i bbFcVQFdD) (seq (null) (null))))) (seq (ap i tiVppSvcDVhUUdBhxgmSXhRdlGvxeUft) (seq (seq (ap i eiDnTKwSDIHNqElCPQwQISbHoSbLWpSStntuwXftLsTzbbuuCvUpLI) (seq (null) (null))) (seq (ap i gmJTbriHMnTuITdsmcjxMsrktuDKWTRAsBGqXycVloHBhb) (seq (null) (seq (ap i YUUULiXaCCrbtnYkmzLHOAYXBQJQFxsrbGmBNTfUiubaxuownHIIkhAPQkUQevGQKIQjhkEZNFLmPOYLrzlnRXiGzOQpJDiqyD) (seq (null) (null))))))))) (seq (ap i xsOauESHPkHTWsudrUfxsklYyZYRfld) (seq (seq (ap i ngICbLFpQsMr) (seq (seq (ap i OMnDOInVnaJmqVBxSVjqIyRgUWDghltiudHNNRXeRvgJzLocAbVeBOyZkFmCZxYLLKNuxhnQZAtqnCOGgOtBNPLSzhr) (seq (null) (null))) (seq (ap i nzYYCZlPZjjTgrgEgDDuathJquLxLeoQqLbtLevScTTUkSUGNtErLSUgmBWOdERQvbKn) (seq (null) (seq (ap i SPNoTkkCEBV) (seq (null) (null))))))) (seq (ap i QQwbGPVHWnArVELWWJOCCJoeZwJQeYHKGZCZCuMzxQPlXyxeFfyRgCgSyGztZNbiogAESJoiUDZ) (seq (seq (ap i nPUqIEdwLfxkYkBkxGSLvrbRa) (seq (null) (null))) (seq (ap i xgDMNKaLSOhfKgTJXrHtyIHLUcyJWKRVyajcrlKYUJofpufrbvsEUM) (seq (null) (seq (ap i QVIQfFpNhzkzvPZdtACFybQzqetxeGhzsTpSguRPQrNbYJxITkwwiUirGVrGhBlgUxiIRg) (seq (null) (null))))))))))) (seq (ap i SYcU) (seq (seq (ap i wgIcUwuVpchAbhIFjmTzHNQonmSLZpKUtkegzFoysvSdXVUFhmbITBQBYjRZwGxkerlcPlzAqtgkuuYkZFyhVufC) (seq (seq (ap i VEVJGMqEEJpQGVbHkIuyYFXW) (seq (seq (ap i YgsWkXWsEdMDEKfLKKQHavGfiiUQYUhRnCx) (seq (null) (null))) (seq (ap i GhFANQACfEByZbOeJDFkkGbDdFYWhRe) (seq (null) (seq (ap i JxpKnZm) (seq (null) (null))))))) (seq (ap i eTCTJBzJeQniKOXpCqsqlgBqpboYSYasIQkmxHlwAALhumRogbAtx) (seq (seq (ap i ApLiGhvLORecdPuOzxuWtKjvHOFOHvrSbnEAbwHaH) (seq (null) (null))) (seq (ap i zVXtuD) (seq (null) (seq (ap i FmxArSmGioaiuGyjeCKUUMlLknBOxlwNyyfgZXjzXcdExeQtNWOKcFzfERhYlpXOfQvZKHKRQudLJofoecsi) (seq (null) (null))))))))) (seq (ap i mITMzSRDhFRNpHtssDCAvTGtVHgtUuydZTcNSfqMvFgPoTHgahTpBIAmSjhsKHu) (seq (seq (ap i SaYZKxNgBXZmUCTkmghfCgztyRbJqEDtrkUYQThPJvQyNDaVGyIilKWehXVL) (seq (seq (ap i OIwCnTZqUraRXwyJfbBgDnZlakIGMVzxgzosvbnoqfwrgznwAThSjsPUbQCzIOVmtUvUNVsVLfMglnFkVt) (seq (null) (null))) (seq (ap i QULDwpwSwHOgBoVqyYXrRkPSHLkivUFcocUsK) (seq (null) (seq (ap i MotZmjHxnfyRfUHNJNEalVkfiGhmKgJQyqyBPtaDEnKXMzmhXJTGQibGUuYPWhESRK) (seq (null) (null))))))) (seq (ap i XUmiUhohcYWPKKBcaXbaXaJDeHbarPJJPkgjbqoKJkPwDECmjnR) (seq (seq (ap i qyDuBYYibkgJOFZungjnj) (seq (null) (null))) (seq (ap i BZLPuJiQAljnhBfrQlIJjXwxOLxNkKmsGHPlwxMmygcagwQeBbqEhmazQoZhreQuCNtfYJyloXEmErBvhUnLgNIcbirGEPiqu) (seq (null) (seq (ap i EjmiPDmQVOgtpgsOMsvPV) (seq (null) (null))))))))))))))))) (seq (ap i XaBSXzKjnaNCBvvsmFRKMtOLPUEzHUXcdtGdDqBAKtvwYiTufj) (seq (seq (ap i cGESzlJnUEvRYcgwEs) (seq (seq (ap i boBLGwNFMyCSVBGSglWwoaKiiZBHByvkKFgOPIbdnIvQZxnfCMmewncAIjwnVnyrPxDgsaMEBFUYmBBZuwKTJVCMVwNTTqMz) (seq (seq (ap i MapsBKGtroddpvjIZsokQNvNouIdpwCLJlKtfcGfsFvtBEnRi) (seq (seq (ap i CMMospBaftqiCCuMCnIuRyKbagRNkIHyggxgmSKvanOBsxTcjpylTAnpMpG) (seq (seq (ap i ygzSiSvXanpLhlfLKfrMhAUiaedwNqVLrZJrJFgRnhVNdawQeSTmwviDmiVRtJkPLPEXuiwpmNBPVBlSYOjzo) (seq (seq (ap i PzlJfJRMmIogvTntcQTbCvLdzTFepqAwZCljToXvwJNJT) (seq (null) (null))) (seq (ap i purwXmDeOYQFpcrXItKieLsFMAHnW) (seq (null) (null))))) (seq (ap i XNPSbrSJzDprPQu) (seq (seq (ap i oitkXRqoANHPhOkThbOUSFXGmhLQFkTujb) (seq (null) (null))) (seq (ap i tUQXQGVvMmLKHVhWResx) (seq (null) (seq (ap i cEHBiakVpoFhaPpFmJDgTDAOuFAqSNTkoDIqgYyGsOak) (seq (null) (null))))))))) (seq (ap i aavIfXNplzhnSpTsBhnbAfjqGNlNsRtwkpJimkqyZhIDzPkTSefeUTBK) (seq (seq (ap i NaJdIAnrjfjRUgqDFmatgUXNsTjiHBzfxGvjNEnfwwsvFxXdaNYukKjXlSJmnOihpIy) (seq (seq (ap i diMkoEWATdjqsFZnfZZdMFegtqyFmHvUfgnzTSYXptOcyKKM) (seq (null) (null))) (seq (ap i UigZQpeDlcRaieLEjAVgRPGFjVkzrFkPWnlrsicCUlkhDautYYPZHOpBMJn) (seq (null) (seq (ap i VudC) (seq (null) (null))))))) (seq (ap i pfcSfnSHEoJTKmunTJFQQmsXLEFMVrUWbYAUGgH) (seq (seq (ap i JAsabavsXzYScdXeRwjABcsiFboDCCkvuxHAfjewNkTbmguHCzZhw) (seq (null) (null))) (seq (ap i KzBajiSZpfSFxZnFUsTKHQFsMoWdCFuheGwtmeTzGCLOqoOdjWuWMfDqqybRAhIl) (seq (null) (seq (ap i ZYoKabOPOeFSRDgELqNjSfVyihrgtYZijIKVcUMbRTcoieIINiykFmoiugKkNbNpoSJcivLeDAIaZwSjwsRguZXXZItF) (seq (null) (null))))))))))) (seq (ap i OMyBIFihTQCspaPiiRhJdNifKPziVQAuOrHMORbLR) (seq (seq (ap i fcTvUgZJPbisoGcdeUTMbaMVLwInifNgHMMKKePuSdJrrwCCgSxYPhcTbgJJWYhlFuSjpTJfapAVFWeNdJnSFBXmebkxaI) (seq (seq (ap i QCNpebnksJCnLayVSVNCn) (seq (seq (ap i HNpeJSESLHO) (seq (null) (null))) (seq (ap i oblNqUhtXSuoeudkfPoqGl) (seq (null) (seq (ap i tEndJIevREMeIVgtZMPVYGuOXtlNZceHX) (seq (null) (null))))))) (seq (ap i FawwyRLablAfGaQJCsNDcbFtWxeEYBNfbuWlBjVtxKRFgjLUefHVkAfVs) (seq (seq (ap i EQDpeyvHpgSvYCUXGtizcypdhezKBjSyGNfbUMYKqf) (seq (null) (null))) (seq (ap i qIqxc) (seq (null) (seq (ap i ABfCMlrUFwZBBAMGEAEwOBiOILofKhVZTnLheBuazCNbvIEryvBuvErdETZzBVZXSZ) (seq (null) (null))))))))) (seq (ap i eHwQHXJ) (seq (seq (ap i QkTszeyscYUKutcVMSmMfHAkkuGLoamLUVKfWUZLUduwoEoCwRNRLPJlSmzvUVQGVzSgmF) (seq (seq (ap i YEHDwkJLaJKkZKlfuouZYNfDOtsWhJKhHPqerbroNDNjPPKQWKDkxniheLyKYanaQYlwTuSbKZNDwQ) (seq (null) (null))) (seq (ap i YpocKISwLTjcMZAGUxJzNlkJalagFmMzrxqfPAzYTErJIXCzCW) (seq (null) (seq (ap i yAAdsGqxcQvJLbQWOjVafRieVFOiCVbNkbXjmeu) (seq (null) (null))))))) (seq (ap i eKwKMpSNhgPURjVqmCocjAcuZtXJqQUGFXmygQgOsuuY) (seq (seq (ap i WpWjTUXZFhjqrAkenyxcggszmPFLcYQHIuXqAw) (seq (null) (null))) (seq (ap i ZAtNXsiKtQXLEuYKZRyUqHcLmyFgPbWUoBGxUefLyNAYHraqyqTaenqGqGPvgytyScNSiMLMPRmKTIAk) (seq (null) (seq (ap i yllJXsdvEiYaoFBryYXMUoxnZOsEbUncwbijUimNBGfcrdjdmadDIHdbNQyQjVvUoiz) (seq (null) (null))))))))))))) (seq (ap i AYlrEuVSVeGjJopCfkcKHAzhDEhkRfOZFoayj) (seq (seq (ap i RGNLNXidbBrUXWXNmrOGeVqYSkokkqPMYwSFBFgkvVyhIfyXrREuFnfueNatdInJyrTJQM) (seq (seq (ap i gaOTDjGmOLLDQX) (seq (seq (ap i ThNohGZPRTZwFmXbYODziTZPmArijQQKGVTNLWTuWLNLWbA) (seq (seq (ap i ViKGFPPIVLFpLSBSmBMAKCcNqKcCciqEfYGpEKwwxsU) (seq (null) (null))) (seq (ap i YSBOhlwCGhxiShIJUPjLsBDLxWKpzJGgYGzKXfmhnPdSmIE) (seq (null) (null))))) (seq (ap i pwcMbEeuFeXCKsMAoVcqvfpQGZSJSgmyZbCNMimUsgvcLyKPzRXYQjxDlrXJFbgpJNYlEMGKbQnFsXeFqFlunTsTKU) (seq (seq (ap i danGmJqGtgqzdMeSKZvuFUNdADsDJZOxrCcdPLGMdWfderMselyfPkCrFTvoKXDccuBjHpuAcpMehACComBYlsPp) (seq (null) (null))) (seq (ap i UhZqjBNPEpFyFWC) (seq (null) (seq (ap i KuYBQrraXOEXOyvRQPCYUIGfaVQyyfeQRhwGBHxNjjGIeFnDuYujGFOcPekSNBatiwlUlwRbeUXwFHQEpIkyDMHumGygzh) (seq (null) (null))))))))) (seq (ap i gIbEWHuyvcyTGUzcHpxhTQBAFGiC) (seq (seq (ap i CfUfbspWWqAaQoxVkKXuburqDxftuuUeyUDgPbwuGKFqLBaLZQzuir) (seq (seq (ap i KYdGWgkjsyWbkdz) (seq (null) (null))) (seq (ap i JhcwcacpMlWCWFBHyVlDYiYFMbLlKFBaHFjumWtJfTASSuAxMdzmBYyQkPvNmSsadtZIWgaZcvjIFJgiGzpo) (seq (null) (seq (ap i taIslxKmcwHrqfOXzCeHIGjqOKufTLoDPmQQfnfkqP) (seq (null) (null))))))) (seq (ap i PXSufFRAnhfqeVQPVhTXuIYsSlmppUihbTIagZSusugzPMXzSdyysSNxkMmdWoYRLqFruSEYBBODl) (seq (seq (ap i oLUJMfdGYLutHxwLCVwmtQjYJjDpYZPXnVzxUjMEgyrkKvhMMrrouawxMaCDBrWbZfVmMXrfNABMmyogKEfZVdnE) (seq (null) (null))) (seq (ap i upZcuFzRrF) (seq (null) (seq (ap i vccvUGIsjdSJlLUHfipZuZFoesowMYAaiTAogGABHBKNKQDwxfyAWrOfPPNpoobdQBAFcyhcqAOFVCxLFXd) (seq (null) (null))))))))))) (seq (ap i CpVnKANeicPqTawJgivQLELyCkEznIkhgDnjyTnKdNAWfnwlZxqBVSZXgbCnDPDhGGKDAnIeWjEQbHoXPbRQqnKATLrDGjG) (seq (seq (ap i czuKPFiIGGfaPzAfrxJLTdalubkvhaphv) (seq (seq (ap i PpxgqPAhJVJQPcYMddwsjikhF) (seq (seq (ap i CeuAJDxLAnxTGfy) (seq (null) (null))) (seq (ap i UMzjjYgPBKGa) (seq (null) (seq (ap i fpuBahPfhrGdFjPrAXTmgeo) (seq (null) (null))))))) (seq (ap i iXmjBtEOPwuRLcsfLVlEHmVDZcgErzTCEEcbvqarm) (seq (seq (ap i vfKLjmLZAevHeijLADWaeEIbdJBJAurYMBEbJGOUeeJuydxxZZox) (seq (null) (null))) (seq (ap i XLggFbWicExhYswOYGyBKlW) (seq (null) (seq (ap i esvY) (seq (null) (null))))))))) (seq (ap i mxWxYxPjuDCmAGeQnIuxdgYLY) (seq (seq (ap i fKENfiAUOiikcSGotcpgrFFKXqNjtuAeJnWwkixaLlOvTpIuBWsrPmuTxGWSFnAbrXbtlbHdhIkUjqFcWcehhBxWJIEcNz) (seq (seq (ap i LXiyIcsKmFLIzeWAqTQLMhtaEIafvExYUFjXXXzLkjIiOOOmhcRITqptTYLKoSIcptdjOCtgXzHSoYAGTcgXpvCMMD) (seq (null) (null))) (seq (ap i wpcfciYLmCmcPpqtxcTBCNSGWBnLEitILGgGwYvawiWTtovQWtfYJXVvCLUGxZEjsHxfFwWadNGNDxYRMXqIocZJlyYyGb) (seq (null) (seq (ap i yXFmUaQxZylNJIgyDPLSSNVmJohvznKvEubfDjPMegKwWiCrgXLhvwXEItZiITRejs) (seq (null) (null))))))) (seq (ap i oOaelXwlduNUUtHJXHsXzANYDskKLpOemvCROPXkOEcraoYNUeAtJwb) (seq (seq (ap i mEKGvrMnDbQoBNmGvLyAqZtBc) (seq (null) (null))) (seq (ap i cXusWXCcELslAgWaJQKQzpjcGzKCPpYqguGzjAijMfCUHlEoHZLTgpaudiSiGZfhSvmdyvtOcVxFluwRAHhg) (seq (null) (seq (ap i kdjTwlDwkwLLoBdkClmE) (seq (null) (null))))))))))))))) (seq (ap i wCRJwzGeyZLXINKpEaKJlIvwwJUswajEVNSMDaSSHs) (seq (seq (ap i tIxwPcKqEcEXILDFJwsWdzlowGZEhagipRuiRFacYYhYpSn) (seq (seq (ap i sxnPpSgtikKzPUvtUBhbxDJPRBbnvYsFvTjwNCxFOa) (seq (seq (ap i TkpmTAsIBU) (seq (seq (ap i UvAEQlSbiRWHlSFpzdskyiZYWvCmEUuucPPeDuahrSbpwqSinkJidBuXTjFFKEmQQpxgQnmRLelndJfhaqhUsaSAmuCk) (seq (seq (ap i XjxQAXDmqeYyxSIzynDtozctOAbkGuEoTzUXByWWHBZDXmKRonVkryhgucfvyQZbHFfQhoLZBglGTjDEdFy) (seq (null) (null))) (seq (ap i CsKvlmkuzGBumAuwrRsYNkkUVIVgWyfiwUmzkQQrJURXKKJKNKxcFOkLhUNRDkEywmfq) (seq (null) (null))))) (seq (ap i DLupfzoTDxFnccuiQHjLaRcvldXpDeCCvyDzrWetzNhtTPEcGrGckHinZTdUHFofxAvWskb) (seq (seq (ap i ULQdYLfMFSnwMjoGIhPlwoCcjzHvfLVJFOwxbRhEjguSbznVuSfSDUNevespuHVkyhjpFCPGa) (seq (null) (null))) (seq (ap i avRddPXHLhRrfbSziZAavIaNHsUCRTtntMhjuVibWNg) (seq (null) (seq (ap i KUVXeWSdAHWcUMwxToREPiTfcNDSoYQzrtfWHgylVNauI) (seq (null) (null))))))))) (seq (ap i vrrGidmQdWcrcVsJxeDpquFUwgMJVXPzkpdyXABqmS) (seq (seq (ap i MbSadwTgNm) (seq (seq (ap i YpvrlHiswXCcNAYayvmytdjakzKQibsCLdcm) (seq (null) (null))) (seq (ap i CwU) (seq (null) (seq (ap i liPKoiecRTVOFVlgyfLDbZIVGwnCLmfEnOYvGvvfRTlSGJJYlYvkDIIePrxijoGXMPgpXfLZnEFIsPBqCBcBPjYUgCjxGQvH) (seq (null) (null))))))) (seq (ap i WWuFuAdTnUUcyYm) (seq (seq (ap i NviZhqWjBRCYBOZVqloXD) (seq (null) (null))) (seq (ap i JQeJNkKtVqwqJlAvlrURbzPVICbetJEVbGBRhCRygWnvpQif) (seq (null) (seq (ap i TNCXfacjBgBCNEYqLpXZJeXkpjbNVxQBpGlyZUGeKzKJFSeaTxIuIILTmxDoOLYGEFZlUPJE) (seq (null) (null))))))))))) (seq (ap i LAmWUcNCqNFxvUnLhJLcorbqqcdNDRcxQvUvjXVpXIhSKadpyHEhBZLzNZIfYpxqPN) (seq (seq (ap i gXnWQavQlJNqiiApsCHIwCpZVxoYCujQmLwGRRH) (seq (seq (ap i LGrvxPJIWhYtkipifthdrOlZt) (seq (seq (ap i RKlxE) (seq (null) (null))) (seq (ap i tKifrIfvH) (seq (null) (seq (ap i dgaPLlRqB) (seq (null) (null))))))) (seq (ap i CuDpTvnHVXGABgKQIzUyQNoD) (seq (seq (ap i UfgePdtPLxFSHiHCIgFmNpRgBmQSYPCoDPxckMbVJWXAYeLWGEcwDcFYnEKOyiVNCQAHLcoNLKvSjFxwP) (seq (null) (null))) (seq (ap i xrRBPIvFRlpRcCkkyyzaetWvWFtRWVZRehqLlZlhSStKyKDLSXZMgmtfvOAybEPjMHSypZDuDQAGGeAYtbhozTyfXFIB) (seq (null) (seq (ap i cnKUlJenYPigklHxlMwSlAgXOjvsMSPrwkflbmLLIOU) (seq (null) (null))))))))) (seq (ap i aIZOIoRaYgTVasWyizprMIpyvDAStNpntfgQBigMZrgJBAVOpvrCWNLMZHWfqzqiLh) (seq (seq (ap i jwSAACxMABXshPAmBvoTAJovyIlpJvNoAwiwSBWTdeWFUnYTFxWPllaQuvEJdgbWfy) (seq (seq (ap i QWePMSBksyMrykGMfrJfMMwTBpYyaKZEWvPAVEtYsmaLWhDQaAiNkcwnnDgDXuxlWMjsamLRYGtulgJerOCu) (seq (null) (null))) (seq (ap i amHwMOhI) (seq (null) (seq (ap i ZcCiSVUSGRHzuhGaJegeZOSdtExyvpMqMWIBJODTMaogLLNbLtnDDeKarqQtLbPuPWrpmocqmLHR) (seq (null) (null))))))) (seq (ap i aqxVWrVeJHKpaDWgkGSzsNRNExNbyxEuPICbtvjZxCGlCCBXmQvhrQrgBpHYIsnZmrPloBU) (seq (seq (ap i zoQnIyqkBPzfmPUVompdzUWRYSxwbNQFCcOpwRmpkKslSqMMxnaziSPpBlHKKofKErmGaGAsWWcUyaBWArOAHckNoa) (seq (null) (null))) (seq (ap i cfCIgJiVKdkxAqmpymSSfWSYOcmGJ) (seq (null) (seq (ap i xkBQfAPYoDKmdWQLENQqVBUQDXilHYcwfJWXyjVHgW) (seq (null) (null))))))))))))) (seq (ap i NretGcORKWmLfGIHsXGhvvzNOMhIxmwSyBpqZBUoRWKKSwqHrbjhPhWEXopCVkagPKWhNEtJWZdOqjFdWHhSQdnBUjt) (seq (seq (ap i alYeVebKocIIbaPBxdwZeSxkuhliiQRULvYRcKSSmnXjLjlhxajkCgHzDQOmljOajTxxD) (seq (seq (ap i YZyuHyDNbz) (seq (seq (ap i VyLPeRnIybzYPfsqMbZgDpNTyuNlahlFCynlkXIzTJOyNWxyfFiNEVIr) (seq (seq (ap i REarydPYeQRiFygagtMjtVbWLkHnfiJRzCvQGUMrhcJU) (seq (null) (null))) (seq (ap i rIWAZYMvPBTErXSSMNUVIUkKYVnJUBpNvgpuqvJMrOeTtdaqwdzYGWFO) (seq (null) (seq (ap i RGZUUelgQedlCjpfDFPTuLUrTwyoWZGoTAkNEKOpqc) (seq (null) (null))))))) (seq (ap i WFMyWWxuvTbFGGgIIXaDlwrGyZlEETQSOt) (seq (seq (ap i jVPjZ) (seq (null) (null))) (seq (ap i zcEJ) (seq (null) (seq (ap i uZoJrgOoiXhHGytPbFipCvBzSFidFaNXS) (seq (null) (null))))))))) (seq (ap i iTruYTeJAQaiWEAwZkbBGP) (seq (seq (ap i BGMZGMdXIdQEXElrNJzqOZsteFzXYFle) (seq (seq (ap i yUCLMFCrlhrBGlv) (seq (null) (null))) (seq (ap i gjaoLdquqYVypOE) (seq (null) (seq (ap i rhxXCvWpyoSwHkgzMsZJdieVnZNlOUIXGDtKDpDbNGTVDUCTCfKtPUMBDEzHwdbDlRmREKRvjSeOJtSHLgJAzSScAqHxt) (seq (null) (null))))))) (seq (ap i fkEjTAZPGOvgTRQdYvCiXBIaVIGaSDetZNwjLJDZvpgDJaMflcnTErAbUXPeJjbDhdbYnIZiDFaysxezhurO) (seq (seq (ap i lRaOiOKCnfAErwQGqhlmvWqNjWGsOnjRLJmCmHozhxfnlxboudyGhcloSIQDJWrL) (seq (null) (null))) (seq (ap i DAQaWLuaGwfdkBriFNeJntrUSwaYgkEDOGesnEMnoDlUhaqooaqxJdRCekbhsEmYgNEWfxmuNTWObewqNFVfJHhjaGhHAOUZqc) (seq (null) (seq (ap i gMFVlcibmayCFDEBWjnUAtUwD) (seq (null) (null))))))))))) (seq (ap i jZZCjmeHxAzDUcjITOoVFSDCCtIWkURhBXpBlIHDfRbFumJGNOuQNaQmgGTRyRjoPCIIZiJMhOLyeKjPtPJgNcyrcLfB) (seq (seq (ap i IKJhbMhwyIPjjQDVbpkQRbRVNspQhDqWNxBcRScOKrcOaSfaNToOlFVWyBJlLZcGmxgxgAZneqajeuZC) (seq (seq (ap i WZCumQWtOtltT) (seq (seq (ap i QDdaGZBOQChoqqCyIqZUMCGGfhRTQEpXgKuaOom) (seq (null) (null))) (seq (ap i mEQHIcztBuhwgBDifQhIUfrbyFABBosVVrQztusFjiJSAtblRiAHjpqHQfeoTqBlNKzZfQMwNqlFPKaFMhdtu) (seq (null) (seq (ap i XVMjuAbQODifojoMMaCsVXwhYKEzQjRIYolITnlreIeCFFvqafhTxXrGUHTREaOApdIVvLaxVcmlJbUwp) (seq (null) (null))))))) (seq (ap i qxAbUKxUilGBUroBfLVGovTfKEHZgLdefYHocsRiWyXFcUsBPVwkZgXaBhYyhAgtbAjivaUsVOGanenaAUbs) (seq (seq (ap i symqTRJJJYLNnrezkaaaVUiOeAwkKa) (seq (null) (null))) (seq (ap i mUeeAvtHMjYPoQit) (seq (null) (seq (ap i RRkYtGyqivfOCWZQSAJgNinmZbWIWvwXparAFxryaB) (seq (null) (null))))))))) (seq (ap i vlsGxirajnWRXonhqmbBqnsAMuoweqPspNEIKuBVGKDi) (seq (seq (ap i JWpTuhCHkezLzyRjcNmaXuYfsjk) (seq (seq (ap i ArPMhlkdUpcWJtdMOHFtwGqumMsLHOSC) (seq (null) (null))) (seq (ap i mItVyzJxvEGxAdWffmcMzVABzFijrgvCnjbaZdFlZatpIeouFKhC) (seq (null) (seq (ap i QmXGQyufaDKcxtqffiPSowLLpIMXBnDwRbFqYbiTWd) (seq (null) (null))))))) (seq (ap i lblKfLLwmNSDHVjTbgxAmpIrxmEpiO) (seq (seq (ap i iqg) (seq (null) (null))) (seq (ap i LmhLaeCmlBcDtGOOjYcPoBGQWpJfNjDTpTsJJhiOLPgZQuWSGVOkhclDJULi) (seq (null) (seq (ap i lhlHJqEWgFHjYOFjkfUBDBGt) (seq (null) (null))))))))))))))))))))) (seq (ap i euvMRNHKnbhmEEHekSyxgIyHhJDNeDpdTiaciwBsPCyE) (seq (seq (ap i lbHKOzDaXcuNVnCKMKACjDHCsuXzBiXEQPZox) (seq (seq (ap i yEHKykjgxTNZNWgfvxtSYEWROLJxTbyqYiEroROGpmjIpBpJXhBicFlIyqrUbFznVCDfvVYTvguzLtQMrlJpBHpdmiTQGixI) (seq (seq (ap i QTbeYRAwqcHnQBKIrLRKflvZPvt) (seq (seq (ap i gSyFoAkxS) (seq (seq (ap i OqkrJcNXUScRpXogEUaREY) (seq (seq (ap i JpTGDFEdisDaYuTjoRPVQHLLgQlMgUwjtsAFGOAfFeQgnAualDpKvHNcbGeXtVf) (seq (seq (ap i XBLbOSScKpGIouquShLRuuVhfLovDK) (seq (seq (ap i jgDKQeAtTgeqGoKkvgamkYFBVxOCHrAzUQZDdTHaKDsDqpNHSQmRPMcnHshTlmJbbOJbPLoBZJIzzn) (seq (null) (null))) (seq (ap i JuhmeZlHtzUawpapbfNQASGYkToUvpMHjPolhwsnlREflYBddQuXmgVOgjyIPGMvLsCYRWLTfvWBbmwFcetOyEJKHa) (seq (null) (null))))) (seq (ap i NXItdbnAiluhHNyVNOoJduKdUATLvnEOndFaKTPJAVwLykKdrbiQXBuPguJpZfObPGCVLuHsmePUDKjbenrziTHLN) (seq (seq (ap i pcLDuJdLRvasHMZ) (seq (null) (null))) (seq (ap i jzbLEmDFYDcNRpwRkvNVLPPqqfClyxQfsyNVmsZtFXACzBNMsVMUUlbs) (seq (null) (seq (ap i KREbQmIIBUVsisgCvYGBVmcHBkUwJxNMddKPvAASDRlifNCQewekkaBXpdckgXaiNshEAuQACvBGH) (seq (null) (null))))))))) (seq (ap i tHMtMmSHtUcJSOLjDETU) (seq (seq (ap i KvaovoJJiWyPDAZYBYnmXnGmWslqwOQhmfQhtNYzJIFxQAweXKPnYImPHFyNatNRJudwQuWmcaDRwiJ) (seq (seq (ap i qfCnrMVyzmrwoCNDZYgreQdNNHQWHWUzwIAeJPVIlXtUbMp) (seq (null) (null))) (seq (ap i BXRLKdfevqETZqwTTCrFoftFfdqq) (seq (null) (seq (ap i BajwSktxNlS) (seq (null) (null))))))) (seq (ap i DXjQBOMddE) (seq (seq (ap i xjRxPlNBHKjDDLiXohaLxv) (seq (null) (null))) (seq (ap i VIBkFPkzzNUJqiEDhKSWptJNgFdIUeDYTyrbbGJZIceXppysjsKBtBRHgSkWOFho) (seq (null) (seq (ap i zZHSDpItiREgkbQxVWtwvoBwDGKXmNrGewkXzvFeCviZYbHXeeuOckpFLUXgCmgPz) (seq (null) (null))))))))))) (seq (ap i jbXKypCoNIEBrqpvCvkVDJrbWJPlwJyAtdPBTtftQcChTOIBxZqLomXVciNnMwTBTpwWCYbeFHLmECkmcHLb) (seq (seq (ap i qYlfbFlylTbNJkSbzKFXymeeoclYWbUCRxgPHLuNmUaCkPUmTTxGslqPlPBVuCQcFMmgphkNNwuKryehyzUhigsHWjmW) (seq (seq (ap i wvGAKzdQySOKCavEFGOZeTGHwvTsdRhzRPjibNzgALuOQEGDpeRUGUIBfHOlkjADijFPVJyJlxPvCiYIUKVbxXWqWOprfRS) (seq (seq (ap i UnJIYfGhdYgaSdpDpkmTRIAxacUWwjyXrvicaeiteyqtbNfxdBGjrSLkZZASXzGPmaFJ) (seq (null) (null))) (seq (ap i GEDsziwA) (seq (null) (seq (ap i UAiEoxlYnWDveTLzRqcieYnuqzPhiRqCbIYSVrXHNMcLVPVVhjkQcsHpADjLOppJpLzuGsHeoYhVrDnRS) (seq (null) (null))))))) (seq (ap i RaLeOMFxoINEeFBvkehaBJMvposkmyoIkNsyhGgZEMHIoyUpaQfryBuWGnQIAiHLgCokBSdY) (seq (seq (ap i AghyHaoHoiypSXZwJlqzhZRJzGwjQmoYpNsUUEimdJWNIMVOk) (seq (null) (null))) (seq (ap i cjXaalwH) (seq (null) (seq (ap i eSkxXvMWToFjALdYiszixOHOhPHoq) (seq (null) (null))))))))) (seq (ap i TNPyQgqZSNEyieCqHllzQSQelkiXDB) (seq (seq (ap i WAbGISvusrpzkSPIWCXMnnxcVwsorLKxLXDz) (seq (seq (ap i kIdnKgPcDvYQYODyVnSbNnTqpNIWdqPCyNtEz) (seq (null) (null))) (seq (ap i ABICPwnyOEcxhvInqhpPZgRPRzKVZMSojYgyvxDbIyudUtpYFOJ) (seq (null) (seq (ap i jBPDBNWwhNpSzbwOfUGMDbBZhwyOdSZSjXujfpAfBMSNywMMqxnGZTFBqHqisDheBsYKSOpNaLjH) (seq (null) (null))))))) (seq (ap i wKHIkNLqwWnyUuTfqelZkRAioilGFCNLwis) (seq (seq (ap i dUazbqFvtyollExWtUCEauCpbwukggAcbmRVQcMynlucHrXOQFvggHzcmjdMNfIIdjazn) (seq (null) (null))) (seq (ap i vRpXOfPRuLrCbXRqiziKmuJpJkhHrCFKAFSNNJZMmxlFdCLoJgszIIPYhEnWtuxLXYKMJgERoGUWvUaEFP) (seq (null) (seq (ap i ObNNMRiUJTkrQEvAdkche) (seq (null) (null))))))))))))) (seq (ap i CzBnBnHzLTxTrNmzSVlMXmuLEqDBMrykFWAvuw) (seq (seq (ap i KaibWHWHfyGYhhuiHiPWDyjqlUZkRWSCZqPyYxKzuTMJKjnChQbxnoxMSNsuVNxG) (seq (seq (ap i GePpcEGxcUnaOczuMBmateWItZzHrESLjjufOfFqPY) (seq (seq (ap i zeWcwkTToznZeYZuwHuwHhuEAKtSIbHxDZgVXcXdaQWxsAHfnSAzITYxCsLMknnjtozcMUUqKXMbT) (seq (seq (ap i QEOADuchEDAeCNMoaYozzWuFyQcPXZAvLAEzSBadPRoUnHpWVGXhFvTbIJZxgVhKbsxkWzDhb) (seq (null) (null))) (seq (ap i fsPiaYrPbgiDOhLGJaojfXWUWneAsHko) (seq (null) (null))))) (seq (ap i PcaJboPOyTtLOzloNbmoTxZtghGkgfJCCNSzxXVaCTkjXGBObhvYhTlhfyexvNupQcfypihxQcTufxwyuotPsAFCUtPRma) (seq (seq (ap i TclkRNxzomibQeaDaetmH) (seq (null) (null))) (seq (ap i QfVcnPKtiiTimhpybYHAljdPCrzYxbzbumHMbMgXZmEKEKXHGHXlfvKVQgBhQaaKGVptHPJpCWgcOsxG) (seq (null) (seq (ap i tija) (seq (null) (null))))))))) (seq (ap i DUFpsnPdoDgCgFjLhugVlJtWAReIUyqCvABEMQspRUgfvvWtbCnYBQwxasloKANdnMAkMHBDuPgFHPCnlWAsiWte) (seq (seq (ap i oIkUyyvsULZfVphSBVQdnLSuKZoGpJbBhdfKXmmJZLaOPlaWjKlSBuKiGs) (seq (seq (ap i rbVhyNyiRvnsEGXcpzKxWcEiDKkgLfSUgCncUQSyuYZoN) (seq (null) (null))) (seq (ap i LIyYMpizIFmtJvFD) (seq (null) (seq (ap i SohVnDkQWALaVdNmYelSRjpiFtWTovEXtxyJtSsJhxWdakVRqkjuEjAYUYaceJATqCMslfKGFAvBNAFjtTy) (seq (null) (null))))))) (seq (ap i nPdcrIHBD) (seq (seq (ap i VkTwsKBYKkviHepTTMoLqhdrzMcRZQsadQVaXABTSYfWTWJqgllrILPwpEOHCxHIFXXHDEBJCXpdFZAgMYOmt) (seq (null) (null))) (seq (ap i wlqZvEluWtzPKPiCziAgoxKJScBslhPWObJkzMoNBwrOaXOgYpQkZKPIrKYTzYdmIDoaDKikTSdbzbcVkProhXr) (seq (null) (seq (ap i kJPAyfMkhVnfjiwvJcLYuAfLUbgBBEdvejYtLoNFwAXkfvdbBtPdqLhJnGtykPNeHrxWyVGRfOhgy) (seq (null) (null))))))))))) (seq (ap i EFDUyaoYGCZGvMTQSVmMKUGTXvRfUhYZIyutItCcozsYHiKCATmtlBY) (seq (seq (ap i YSHghsSaXlxzGqGijIMmUkUxxuRzIiWCFJkyzdrWQKtbfdLiwfIElxbvkFuZmocuhZoaPWqUkzDpCbcsvuDXjmbdLxJpiNqi) (seq (seq (ap i nmqXVuCfsoszOuovklyYfJXcsiYuQDJWFpQOLqvdMFxKWAGoFiylAzRGNMpexJqg) (seq (seq (ap i wtQZTvTbWPppEhZbLGIAhOeHaohDAXmCuylzlkeDtEfsMKlwBWUnIhXYhCaxhzTHz) (seq (null) (null))) (seq (ap i rihIXybajeqmoznGgMiYdYfAaZMRjIjIanDutXyTxpihRczjzPxmeoBRjZajwrUyvOgA) (seq (null) (seq (ap i QOtuCkrqMYVHFEoJyGQMFMQXILZaYtRBMnBkPWSboCbJr) (seq (null) (null))))))) (seq (ap i mfUWwQPNEelxVkTbGbeHxJsmrpvLNQXQQGxPZvVNacNMZsTCWnOIlVViWJwMtCJQy) (seq (seq (ap i uwynnflCyhkwFlBYGsblcYRjKjyAJJPYKWnvoHDwkKlXLKFNghWAEdZgcgjBhNLsExKVylTXRYdFHsK) (seq (null) (null))) (seq (ap i eKIafsUxAnghkUzkOaHCVVweaFZrBvbFDfqrQijTIUGUHzWNlOWb) (seq (null) (seq (ap i vAkvfjNXYefeItrQawTzOawagStMltHYrsaNODFhxRLLlDGSq) (seq (null) (null))))))))) (seq (ap i mBMYKtNySVyNUZbeqoZMSycbGDcfumtTfzSTY) (seq (seq (ap i XVDCoVVhhRGXprhngpJbOsUmEJSVOlDTfmUaIXmsRhdoOmlxH) (seq (seq (ap i HCKlstwMjXqdAFvLLvssuHoaGMlRTdpGqNPaxMXAvVIGVIZOrDgRJ) (seq (null) (null))) (seq (ap i pXlMLkdqdiUunINTxXLgurAkVNEUpSCFhZxPchsVJGeMCyINIQmNXDyzpHvRNfYI) (seq (null) (seq (ap i DEvHILhQkIYzwHrvnjOxWWsJDqHpNEKLVrHeSUjNCtqbKLxDivobEaUaplpusJfY) (seq (null) (null))))))) (seq (ap i IVKoBAwJWbszWFVrOMNjVjfSgpABnrzrUbLPxSeduhdFojhzEjymscfWuCGxIf) (seq (seq (ap i BehAwqfCqMfdZlHrtTUHGX) (seq (null) (null))) (seq (ap i NBaxGUqBcekqXIZdbyJTjBiEHnsirpOgEpHHm) (seq (null) (seq (ap i WvEpjAjaveOYXGrKPlIjJdiBnrtgPNkLkdmvKSkPOsPxInSzxjnAykuzRjmvPPwzHojsGJRXpicfjsmjtuDXHkkHLxCxq) (seq (null) (null))))))))))))))) (seq (ap i rVQmcjPPWtnfgWhKTqdBZlLVn) (seq (seq (ap i RfEmWSxmQzlShNhARMkkaFUlGKEXqcVezOkUqTodWbGRPCZM) (seq (seq (ap i HH) (seq (seq (ap i NNyVAxZDRGJOzZpmhDVUfItwPWMgAzcHLwHbCQk) (seq (seq (ap i qEHIbWUnFuzJhWTcOiuqVpHPoBDSMrdZmDIRaKdtutHBANZcPPejvYXkSSEvK) (seq (seq (ap i zUSErKPeVLRdhpNLXYcIuJSZbXBr) (seq (null) (null))) (seq (ap i nMug) (seq (null) (null))))) (seq (ap i hGaRjOpvnGIqglYWfTPiWMPgRlYkZfsndELuHoovWWUbnAuSPZiAsvwNbtCMfHKYckB) (seq (seq (ap i XGHmYukxoPhXHrtCWIAloOqsUkOhJ) (seq (null) (null))) (seq (ap i AcAjNBdZkjZfppSHjrzaqiwrYxcumxEckm) (seq (null) (seq (ap i dAbqGrJMTzLdGHdwccbohZBIcORzScQvYqnaUgIwHpRqYHQCnmzzIJnCIVkcvzZeR) (seq (null) (null))))))))) (seq (ap i QLQDaEhSNqYfHBbBGsXlBHWsPkgJPDFALKLjuLaAqyRoMifUZrWeSvqWHY) (seq (seq (ap i AZGnrEQCjlnEMatoEcqDtqOEeVSJxzmHrGSZAuSuJCQGfLZxJMKTUcfqWrxDJyFCsOoSWhwTyagjAayhlVUKcElmz) (seq (seq (ap i qPbipFfytzvnDzLEMiMCexMcTLMgHznTddyjeumUAJnYzsnjMncqrbFnTSVmSSNnHecFaVrWOGCPvnCNNhndJeoRYLfOP) (seq (null) (null))) (seq (ap i JsNQ) (seq (null) (seq (ap i kVOFLrrqoAsntMvHFMRWFAobisqXXnXuSLHjYhWaRmRqxZhMUAuKfH) (seq (null) (null))))))) (seq (ap i XNYWXFzlsTuFJnmFdUHhrFEAsTdv) (seq (seq (ap i ufIfUWdsjnJXEAjDOKSXJHCOPLROJxPCVCJeqvgvRWCKSqhvrszyCJOAZgJYHqGabqemqgFAcWOCdWnyHvOatlrAtz) (seq (null) (null))) (seq (ap i WOSdLdnnGxGOsWWffOzeMmZ) (seq (null) (seq (ap i rvsEtlgtNTXa) (seq (null) (null))))))))))) (seq (ap i xvKiBBbvATipJGdKuMDiIscZ) (seq (seq (ap i pG) (seq (seq (ap i ijMaHOxFAJEPlDpOUQSlFBgjXetZfDBEaJCrLtTnGMlkHtWJcJXWEaOrDCiXqZIyNGDSgIhmeXZPlsShwLtpMsskUlqIDsiM) (seq (seq (ap i mEPKUatSOOecRC) (seq (null) (null))) (seq (ap i ixDBpMaKqpNTyCSSeDAewTCZVBJNDHTVzQQEtxKlFnuWb) (seq (null) (seq (ap i YQYTdXrLprpnRBXdVFYkUasHmntKGmzEZIpesxqXgmKBAgFSy) (seq (null) (null))))))) (seq (ap i quPluQcWIxHWajRoujCskNBQxgvRXettXbzuFvZxfiiwSaXAYtvmHiFnjoKmWloVtRVAUiQDzWqaCIHuzXYbZXHjhqwjUcNX) (seq (seq (ap i bCcJRnCjxjmbQIKRUNsWClAfOFStMzloPQFjCwTwXWSKZJnTHiqatKMEREVwzLBnDWxKLYWBeJpqiVhYynhtufjxMKfNEBn) (seq (null) (null))) (seq (ap i JaHNyhDXWKnsHLYKKVtroPlpityugZzMzszceoihQQlXCfNoURViSuYZRqlLPIGjlaWvKCRRZYeHDZQU) (seq (null) (seq (ap i eNTKOPUyjHdVSvABCfMQdCqkHGIvCCPjIQbmwuxYqgRf) (seq (null) (null))))))))) (seq (ap i adXyYOirAPYQDNfyjBVSXbPQKlJQBKZawjCvFpzKKXEVICEcfBBVqMQmzREhvzyPFjJuAQnHGugv) (seq (seq (ap i eEGEESdlWMHbmRBkokdnVgmJINWTWceFrtKGubVwsFIfTTVvOMWuGfdINEkgXXITzXsNmoKFcCsNBzQkYeIcMwUvWuUUcak) (seq (seq (ap i wROnrvAERqrekWEwKrkXNPxsqUHaAREqyffm) (seq (null) (null))) (seq (ap i TXWbBgEEGzIvPDrcDAZAFiVeaiuZFXlkpZcKxzKrLLgVDTJNaOehHXuKbNeApNdXVOkBTlhNBZHVhgnRSHz) (seq (null) (seq (ap i Wl) (seq (null) (null))))))) (seq (ap i WLaHICKaTNJJKTGEzngclZHlpkNNEzzwFNbbmEOXTxeZQIKioIWmVFGLZvnMuvlzVxiGRX) (seq (seq (ap i UyFEA) (seq (null) (null))) (seq (ap i iNRxWZBIEDdwDMotbLIocEHEOMASElb) (seq (null) (seq (ap i WUlPwazPBxstgInzJjwUgmMzvmrarQbMJPNxVPbqDofvcEdIkryXBFABcSCQcjdIhESUJjlmgefyRzIRwcesXqx) (seq (null) (null))))))))))))) (seq (ap i GlJmuWQLYyRJVbmldafsQdCBACvMwpLbOjLftfXdTtaIxjhhjyheshuFLVHSnXQoBnKCLtnOIoceDoPQhrTMOSvd) (seq (seq (ap i owkvnJUJKtZGaVcDuWsgRBsYnADjCxZdcoSUcpQJLvntsBquusGikcKQrMayCsGrqhWrBfeVnGxmBNbZugivxOy) (seq (seq (ap i xzUjFKOoUskgXvuIvIauNGPbigChCjKbsXzdKpcWjsqqyhOxOhdJwaDGpCvXIEkJhhsPRmxUOU) (seq (seq (ap i xvcnJqgemCITBREYufWURiMsfsdrjVSYxyrJsXqkAhfxSJPCjrL) (seq (seq (ap i oKiAAfVbFCQixMnxDmpWViNjCnBkHhMzMsdrnLwAmjEava) (seq (null) (null))) (seq (ap i ukHNHaLVgwgfwkPIWmtUxNaofcrwPExJqZpYGaj) (seq (null) (null))))) (seq (ap i bMxHnUttNujDxrZxU) (seq (seq (ap i YS) (seq (null) (null))) (seq (ap i GfvzEGBSmnfIQYtLJVMLGGAmPGkytvFAbZFArjiCwYiHxoEwAYxWfxQtkJi) (seq (null) (seq (ap i NlQHQgbbQZVzZWIWqMNUcNEuTEXrtLRrJAOBQgKSlSMHVAwJwZwwBoWoLYgCWPtVRjIYMlCzHMXFsOQIAFaODLCgrqrMuQnYFR) (seq (null) (null))))))))) (seq (ap i PQPKZFfavZXDRekPSozUuOgylhSxbFpcOuJgJlrTKqffdxtSr) (seq (seq (ap i GDnSePsVeYTxRAWJmsJJJFFUlyrOXjFaPbt) (seq (seq (ap i OxZIuhbzzbssARNKJnRHnHtHOPYYPBzwwHTaSgTjjLDtpsGcCMfPiHHGXoePrwqcoMYwAXpzMMHuiKnLi) (seq (null) (null))) (seq (ap i cFTcAwyvqZbnWsrYUtjxYjeYNZeBSsdWCgSuClPZQfoNtaeUIyUafEjHvOZDiUZlVRq) (seq (null) (seq (ap i FeSrotAOxsVfftJyDHUUhAjzygldbISwvixAcGMjxtsIMzvVcqcREBaiNuKNtw) (seq (null) (null))))))) (seq (ap i YYIFNNonvkJExwGubXc) (seq (seq (ap i xgnFPOSMWJNniaGmAogbZFWvrqtlUpneKGMRcTWNRSiMWJHEYRwlrPtUsunjtiBOVLkILmWkyMXJEmOTjZUeKXzBZbNyR) (seq (null) (null))) (seq (ap i ItFSxIGFqyMjVzvypsYfCDSLHteuuyhTFYpIGvPQmqlxaPVMyDgbaEWgvHVjFTiBKgLbowxEtcShnMRUGahYi) (seq (null) (seq (ap i xniUOXdmQAegwBrAlyCcRwHgvAlUAHtRgurjhV) (seq (null) (null))))))))))) (seq (ap i ogHFcruSfMWjtquEgkjxbHJCMuoutBwmdJOW) (seq (seq (ap i EeoqqeuSNIfQGKwAjhPPdfGGNBdvDmzezVjYKNQToLkelxROsZEzACNrZmUZNT) (seq (seq (ap i BQVNcAejhvjdXthgmmOcoelasoozkFEOtuYXPfdUrwMRPDZexNoqYdqRTnCNDIEnFwIGYleoqgiaRoAXkJTrSNEwGFiMhcUyiHX) (seq (seq (ap i YUunJUlfWVnqHRHnpHaUvvuUuCDeXvNPqCeiRyxhZNGfgPITdTNJufDNfvnyQpzIRfsZixokcLGYXs) (seq (null) (null))) (seq (ap i ODsgkQJHHuiCxaRvUSZdzmSagaF) (seq (null) (seq (ap i OUdOtifLI) (seq (null) (null))))))) (seq (ap i WOXekSIfDJSRYcTipxrjYkoiuSEcjAYhenVXvWPkXshbotnOzbUersdTPhujBjoUsdmvqVXchBLBNxsYtsFRaupLbYjIEbIlLkx) (seq (seq (ap i ugiknTFtoWaPjudzMxFreovbhQJdQpHdLzcIAbHJB) (seq (null) (null))) (seq (ap i wxLoWkcuGYboYLcrPGfoSYXhvvUmFbHnCAyRytULlzkVszHEeHRMKiIaTWxSCtUqEu) (seq (null) (seq (ap i JQxLstNyBGRVidloDcgFKWKHiyhvxhnYyirgzIbtcqySaJMgYVZRXDytpoqVzeg) (seq (null) (null))))))))) (seq (ap i lufqxtOxxkcHDxIxNiuytjgHwbodxya) (seq (seq (ap i CUgKzpNwLSWITvjkFTFlwEBSXMoIUbTNtriciuDRAlmQBsJYXZuqLeJUDJJDWhAGNFbKkPeaZJFD) (seq (seq (ap i uymVUIxIUZmvpDMVpkTLMyIxvHTqJIwwroGhoITwDPitvmHePwqgJRzqHCpurS) (seq (null) (null))) (seq (ap i fblsBTgu) (seq (null) (seq (ap i xayWZDENMgHgtfBrcWcBmTuNJvGrG) (seq (null) (null))))))) (seq (ap i hXIoVYRCiKIVmQCuUgZmefTUfdygFztLUnoOsWcRcksrYhDFgepluFYSrKYUqptfrtztLwADB) (seq (seq (ap i EmbjKrxOtDBUYxJGEmJUDNLjSkyewxds) (seq (null) (null))) (seq (ap i GAuBtGBATFnqhZDUpVIoleKqOkLIZrPwRDKHhUJuFsAoAaQUxhnbodmAdskssXjeWulhHPlZsCWNGWbOCvXV) (seq (null) (seq (ap i oPldTzwmadNprvialSoRWjgAmzQMWjVXdTffsZFFJfkfJKddPIlAigbrp) (seq (null) (null))))))))))))))))) (seq (ap i vOdtzooNqrIuyaBiJxvDJLoONRQvtXaAZfRmAGNAGtQIgWnkclocZHFzjLPGjQNGUzgRSMVROaUOXpxjGWgxUBynldjHMGV) (seq (seq (ap i uHmTGGFRGTpAvvpRMKXVTxnIFOgcXqpdrrxIbkJEFxdSqIRaTW) (seq (seq (ap i sLdzVqqYpyJIrgSEFgUbvqUvaYwBpfjxeCVTgCJAlqHGWGdvDCbnQmfZCnngPGEcQeSXWPBopkTNMiLulNuJq) (seq (seq (ap i kHoTgRBqEHwVgDsmbyuKYAbmQePQioQA) (seq (seq (ap i pDwIjKPVClQAWFCezojtQvnLhQZJtzUboMNKlpWoTggsMfjKvVLxXhGRZnDLKGgTVQJGEFWrVWTr) (seq (seq (ap i pXLGgYyYWMbUMpGFCPZSdd) (seq (seq (ap i uUE) (seq (null) (null))) (seq (ap i oSOuTMcBnBUjiJPSOQIdfuDOJEaUceFxfzKUifHbYRWrqtjwimtMUOgIN) (seq (null) (null))))) (seq (ap i prcYmCXnOxWpiBwBTnyvDIxBLbVMcooKscnXxKmDPfgLJCtcEBbotDtxVSBuJlcQCQb) (seq (seq (ap i kVKkHrYARwWrbDnNcvWjHKyUueXQWlTWxRjqjJANtouGhoTjizSfNzljooABVzCdtLRx) (seq (null) (null))) (seq (ap i QVXLImmqVpasAXNZIDYFkpJutUQdlTavJ) (seq (null) (seq (ap i lmVmHjHmjswyXyLxzPcNGBGzpwtWsdyXkaCvWkncvKjRfdROwkqzyxMliC) (seq (null) (null))))))))) (seq (ap i xZsWhSZgliVRvGqOEBYAPlnURMCTrOTuahBWXxIUogWaNZwMoEvXCNXod) (seq (seq (ap i ETVdFJjDXGHtrJEhOWsaRXfgHSllpRDVtNJISVCKcrkqLrvhitcvEnxrYlKDSgSvhzguSAAXUhNpxgfiLPkPomoxNJpKP) (seq (seq (ap i IjpzSpnJMUKrCcjmxPkoiDKLfkDgwRhKmyqhlkcVKuVumCex) (seq (null) (null))) (seq (ap i ahOkjcCFFVFDXuYMvzFvvXfVpjEmuNUhfgVDwDYecasZzntSkjQQTmfjhHYfOUyVlahLlvZmOEBURn) (seq (null) (seq (ap i ywjaEvNjGSheoxVgLJUwUjOvGEYDyYGxusLwrfoYJwRAXMYbQGpJjkMmpshMBokxtDKBJUxRMgXjHFQPpnWmmdDjLFZv) (seq (null) (null))))))) (seq (ap i LCCcwiCiZfTInX) (seq (seq (ap i pNvJXwfLrmmXdTbqJjtWEIjDKOSSRySgRsgJcmkNBavyElEPcvrwJBPABqpnMrJTEVaqtocqtUyetDgWbBLu) (seq (null) (null))) (seq (ap i ZcsbdiZEFQUssziGzIkotx) (seq (null) (seq (ap i arZBoUcnXgIIDabnZaRDkwENWTb) (seq (null) (null))))))))))) (seq (ap i NqdCCRCZnaLTjniLFcLUMjqgEWwNuaCzhWxOpdpCTIXuCjBHinhvlEFzORkyQiHNhFPYtHpfoRLm) (seq (seq (ap i edywnTRUPqrGtJtSGGsqgqvTNKjRwFJmSasHnxSTILMxGxyFECOnpSpOQIvxjbHVfmIapqOgqCkUOufbCNlbeg) (seq (seq (ap i HHuddZtxGCdzDHypotXeCayLoXDelmMpFfsXJZzZTfutSOjgWKVERbsKBZXUi) (seq (seq (ap i YlLBueLBmOMnOITtYmxlyQNtNZZmqinDymFadoHawxDBZnwxdOISGbNvqaCRQpzPEaqOXgBshJTEDSLOubSMdhgJelIiDZzePP) (seq (null) (null))) (seq (ap i KSMmeVUEEydYhpnERgSlNgZbQDonsTErXKrJzZaMDkjdNPBDvQoVNBjPU) (seq (null) (seq (ap i vRvbJRZctmVeXpJbRqqIUNScLQhFMDeFbFDiZKGRvfREHtxHQBpUANNKscATriTImBuOelMUQwIKhnLYJZVLDXSnpnzBvgBUU) (seq (null) (null))))))) (seq (ap i zSxupCmCPyOgRuhxxNJUstsGIBH) (seq (seq (ap i yeyGeSfSVZxGkAGnRmzGuUUlHqloJEyvynsLxax) (seq (null) (null))) (seq (ap i eGdJkMDTIyInoZcbmVyVkCoBrgCocnJw) (seq (null) (seq (ap i TlqLSbsxjRkKTHKEpqA) (seq (null) (null))))))))) (seq (ap i fgswzHfNVDbzcWOkcoWweROkPpUHSVCfvMwDldGEidyyLxXKjIMuOocgvtHCecfSChEua) (seq (seq (ap i yizCWuiNxHFUZeXjwUymzvpimOPUBQagOoDAaZVNdFEXKQUgujgbGOOH) (seq (seq (ap i zScRQLEoBeMLUOehMspnwhQStPwhGQiUrRGwPfCsprc) (seq (null) (null))) (seq (ap i kRLfueJPCFGMfDAKGTUFIe) (seq (null) (seq (ap i eEkMpNDZyOVZLXIHQNnmoJCLPhvKLjjYdLxTNbmpGlTRdNPYMjjoFikDjQGLqPQqRjJEzqLeomNdYidJaKIbodDfbCEZ) (seq (null) (null))))))) (seq (ap i WrLNTOsMIoutlnSIoF) (seq (seq (ap i rnBHlrmOxNXlKexJancGIsrWWSdKWDjuZtlVkIRtAgxRcHxqsEqKcxdk) (seq (null) (null))) (seq (ap i cYnhuNcwcKxDGbFyDwmvNFuOIUXhWiKurxFyACiXhUOxZCSDTVBVQDPiZWLJwVsslxdjejmhYWxnJDPa) (seq (null) (seq (ap i DigIMvQlKwagTQICGeWfaDCvycxAtKOymhCsLODXxmVeXjBGZpYwyXKDrfoznNxuPWsYc) (seq (null) (null))))))))))))) (seq (ap i VUmapcULQMFEVgtIdGWdCRKfQppGnOjTYxXiGjifcmcYgFLZIaiaAFZqpIyhtahSfOGMcmlpAwewUoMywHIduxLQmFJ) (seq (seq (ap i DyJfifUbujhxmbgEqcUynzREToSetpFGiRdvqdODtDGHQlsfpZatYsFbhJuAEHJqblwxkrtW) (seq (seq (ap i xVnkrGyqocMPyjOYzVHYAQZXUzuwbOYLef) (seq (seq (ap i loPttzbSANRuVRGoFVMcGZwFTKjeRitxELacRwkzaZLdXlKmaSgpeVZ) (seq (seq (ap i mGvYqudOykfEKgFzOXTJTXQwsWAEcSEoKLmRPodwBrNHkIzKOdsGJriQuPINpypCXxBEVR) (seq (null) (null))) (seq (ap i VSZEXNEEfWBnZempdom) (seq (null) (null))))) (seq (ap i FOcqoeVPDTrNTFGoVsnJjZcuYYNRhZZbfhHkMWEhyPgHyqa) (seq (seq (ap i rxJeCvNYrBDqVDJfKHOZRwEXno) (seq (null) (null))) (seq (ap i YryLZLncQurA) (seq (null) (seq (ap i fKkKaFLrZhTnoXJgCWNRYGPvvIygUMuHnGRxvUcpUbzGWSlfgxukMwZIPPfnelNRXBlVePcicXki) (seq (null) (null))))))))) (seq (ap i NjiSusDHtdkPqcYxIfEcfSnMoHfVyD) (seq (seq (ap i IiIKQHobKKsBcWnGdhZKDCqjfEQpSnPaXcFLvHGSlOaADMVNXmLTSjfQGqoRDGjulZUjyylT) (seq (seq (ap i iDGAEJLGsvCQhXH) (seq (null) (null))) (seq (ap i VESdQnFCknPXGRISysvaSoJOIkMgLerbBTAalTBxJoSDtkD) (seq (null) (seq (ap i qMXDBQHtzFTwCwrdgYKgAKqJHnyFSjdvvuZgRWGMjiYWGsQnN) (seq (null) (null))))))) (seq (ap i iliyCjjhhjHXASgmvgThzvVUlBurhqlqxYmjTEknXJFfoAOOLqJtUrkpzSizElWCmFjYrF) (seq (seq (ap i RxGlxMdzNVQDHuUtMpdC) (seq (null) (null))) (seq (ap i MHykEimeaZWfmwijJaBFYAoWikRkqlSnQ) (seq (null) (seq (ap i PpXxkBKGxXuITJkjkeCZpbyPVJLxbMQAATIYTemnkMBFvgLxNdrjwOaaYemzefg) (seq (null) (null))))))))))) (seq (ap i NJwjqQzrqyqvvcNKemhGfyrioIrawvDxTlALrjG) (seq (seq (ap i qtCyXwlPdoJVKQWqMjElOvrBgoiSydrCJOeFHCVNdLnPqxmerofjVYDvAaxkdu) (seq (seq (ap i mPMQVLFTLaAGrTgBLzkZdzDcVKNStkugmoASrbgzvAccKEhmNgIjLhhinjlSriEGkqbkCbrmMKAhRU) (seq (seq (ap i BRhtYxawblUjhrkdbKJrTptCwfohKtAJwen) (seq (null) (null))) (seq (ap i byBPFxuerYghRcTcyuhjRIYuVoTJzSFZlFsawGNOciNJjKGRpaFuDSUdHSgAnp) (seq (null) (seq (ap i BNIOdDvpZyJLaADALzaGjMyQCKddecpAaJCbQnvDeqKerEipWuTKowjFrRLLngjmdcpgpNlCMLetWPG) (seq (null) (null))))))) (seq (ap i GScrYhjRYZWROBgqUJzHlTNSoboPiYmplrROFNnbxDkjuqUsLjWjAQcZWcVOfqrgPPxapHGwPxdxcUkAExiT) (seq (seq (ap i eVoejOSQQZoPgJAPAtM) (seq (null) (null))) (seq (ap i ESCnceXvbPiMYLLGtTJDuCVEwimqJoFAeBFJPIHVoGQWMIsZqSRpErVkCUkvRIpRnZZr) (seq (null) (seq (ap i UWqtDxUugvIzEDXqPbMfehJruBKejCjDNwmeOhYdBqzLPmgiWwcJcpOLUNtGYRFTQTLlEuoOw) (seq (null) (null))))))))) (seq (ap i XyoUWOMOglRCCncEHRnfyiCqAttWnGTMFYxybRGOfPGHfmstgckzgOSviqycluoXwcpkblOcKniWikDbDGdbnNnVFsnKx) (seq (seq (ap i qymwrGtLQOfjoNhWviHjUqsvFHUzSWNDTLwcxeJOpIHePRUROicJmzzNSYjUODFnIACAXSQOKfLieznKkpXihHGeMWC) (seq (seq (ap i OnxzOYFpGPUmyAoBP) (seq (null) (null))) (seq (ap i UDzKnBQsbizTDuAjKxXqpTjZyKExDmkyvdrXpfZFLabyApfPLfnnaDugvPMcitEQU) (seq (null) (seq (ap i MNuKeRJyjYXnBeltvfiGSlYRlRGKxeydeSkxXiMnZPJKAvxNLAcASNSAHMifeWABSVIkolOpSso) (seq (null) (null))))))) (seq (ap i oDPPTtTKvtVpnBYngwYKSUkUMtBemgbXJwvoPnEvwqqwXtHNq) (seq (seq (ap i GLhyIEBsggeENPEBCLdajSWlFQLApeCrzbSgJNWRdHsWmgTQYRUDUFXTZLNkiMFxu) (seq (null) (null))) (seq (ap i OnySnUuzapaitCSrOIjksQTDEFhZyUtKPMTZwMrqLSEzMTfkYZJRnFWqmPNbgRNfRXRXKRNNIfaCpSxzUBLnYHWerXDTIzbtvrhS) (seq (null) (seq (ap i YyLsHLqokKWnUmRzsjvAocrEPQtLhGEvHQPfjjyCCYpINpApIFbFckGgmCjmKdIhmlUwzUKXlSiMySyVdxMyOgf) (seq (null) (null))))))))))))))) (seq (ap i FeGAhdbPwxHnClYuzdKRo) (seq (seq (ap i kVqsnfPbGUhhJhgWzEDEFMRtxhFrmloLYrNJVobIAVBAqNS) (seq (seq (ap i XDzNVYwUKNXniBZfaSNZHMPM) (seq (seq (ap i QEWvyLsKjWcTiWWplpROwWqQoHwWGdYm) (seq (seq (ap i wORfeiMfgtNONfTwdvNcuYLTcEKNJvLACmXYVxZErS) (seq (seq (ap i ikipnQLWyyZoTXcpkGVmdKNBtpJBOnwDXeHEvTlzUCltHTO) (seq (null) (null))) (seq (ap i ODcLTZqjFBovSDZfiIafMKuMdBlgHcQbHOnddVxEpbwQXcQiBskIPEOOCKolj) (seq (null) (null))))) (seq (ap i aIEICiokDPjMYMYsVPYYAFTekYNLkccPewGEtQeoeAWRdZiWafvPtJJeZJtyKiLJidvlQYJeKuImWkriDbj) (seq (seq (ap i JGoyRcRkLTvahmmEeUkigszaXlGcnGFjWPrZBtkDZvfeXXzxgymuXjR) (seq (null) (null))) (seq (ap i oMDYaBolPCbWpTXzX) (seq (null) (seq (ap i hlUiPTQCkjsssYUuhvJWflpqplIeAJtINdPdNnmWnTNBaBSGnNox) (seq (null) (null))))))))) (seq (ap i yIhfPcfwCpZJgZsLpMudwjKORnNBkJcoVOjCSShffQadbJeNsANaAmXqZKCmugtWuNkrskC) (seq (seq (ap i QWsdFXjgMWJfGVLAGuWARnhltJMsVlbynIkkDLoiONqXwsoENrqAEILdeWAimOeeZ) (seq (seq (ap i fmrchHHLsAHWfMIKvcUMezoYbuXsZPPwbywmxybVGjGQmliJmCgYLzIjxGZuoMzcWilpKR) (seq (null) (null))) (seq (ap i JFxpVbsNjUwC) (seq (null) (seq (ap i NQmFnrKWCvQtrftYOJjLpVfRmyFeCsCvFg) (seq (null) (null))))))) (seq (ap i qOfueCmZBNvxfznqJAZRAGA) (seq (seq (ap i wkQnWcNydTDosgfAOtMZlOAXLqQeIFZeupcGxzpt) (seq (null) (null))) (seq (ap i ynbDqSpbqmUNmwezzvQuqXfDEzIrgbknsboeEewbGiXYVOWmHGKWXjtuVjIRfBbPqqfYzWcpOVXexPU) (seq (null) (seq (ap i ctSEHTQmjLlhldzNVjlkydtLJiJhZhZGokYKYzQorQLDIypmdNMGEBYnZzZXYbMXJGpmuxXaFdZanOsxXOcpGZdHI) (seq (null) (null))))))))))) (seq (ap i PznhvhbjVYu) (seq (seq (ap i XfFqGmTCyksCQveUyRTUDCXem) (seq (seq (ap i ftbzmwBwZsEdPfLiqqCuLSPJQkNk) (seq (seq (ap i gcXWkjEeIPIoUHruPaChBpRaDHFFgRVUbMwfnyGWXlmwSRGzYlpjELTh) (seq (null) (null))) (seq (ap i xmycApaIoHrEEzIkikQqabjDRPbFNpiX) (seq (null) (seq (ap i WZTBpeqfFnBlv) (seq (null) (null))))))) (seq (ap i XSqGkCkYLVBSANAVFSbaMSvFpQmSFDSvDLgttsAbmeqDEpEcwlLQWXVRRKWkKureeUKXWiewdFDneUkAPDgWgMXxxikIuE) (seq (seq (ap i AQfAnQfbLurHacrIOrrBaefKWOJqbmtxbwkKPDnkFUzIJFxTNmJyirfwpIDHpgfmyyyNYKKmwOaHnQH) (seq (null) (null))) (seq (ap i TfjmukjFToddngmRtFoDQVGZUQERJAakDRPHmYXtzDsYoeCuRKFNUldGFSqtjcUfFxY) (seq (null) (seq (ap i LstUZSfYZlAcYRwaHCko) (seq (null) (null))))))))) (seq (ap i wCMUwjZntlESVHJegOfxaUihlOtEOQKtigvagPdROzysTXPLhQmpRPTtjXTxQhXcdkMlxCCgEXeDtKUIA) (seq (seq (ap i eywkfdSfpxJvpYfbj) (seq (seq (ap i JAIrZHJZLsMUVyfhjWfardAPAFydZIxzAQzgKj) (seq (null) (null))) (seq (ap i onTfiJaYVcHGMDAthudqzzPJXdenDZJHbsAjDXBsQFHrFzqPnIskxFyVMIsOKvaKcukZsouLmdTGFSxl) (seq (null) (seq (ap i AmURwzYrlCXOpvhANkfBQamaUrjZHHsxaKBWuynNYBBAHkGYPzSlGUNznLc) (seq (null) (null))))))) (seq (ap i gyxnwonMwAacsfWJMLyCXys) (seq (seq (ap i IVVihXbsrTKJdpdvjomhi) (seq (null) (null))) (seq (ap i deedqzqoRoIwSHpjpEglveRaGSzIlLQSuDChRTxzdSTyuzpGyICGJfOTBUCvwqckUiMBaxsEVVYSoPIkMsjwyXFhpTLqhEGWKNvu) (seq (null) (seq (ap i iYSTWZPfwFPpTSdneUewoZxnVzAKmGNkbqxeBdDsjXMornKQBp) (seq (null) (null))))))))))))) (seq (ap i hgTzONszHElHr) (seq (seq (ap i PHaVMnmDRSAzWikgjNOORLIkypIbzdLNuvTfDkgZbzXsxvrMxkKgPeJKqYWFiVVWKccAX) (seq (seq (ap i jZPkmoqaalTARbZodIKDrKMQVdiZBYkTPHnQmjUyUCvLCJRAgKTLDpbLGDUdDTINZpaXevNfSXSqQVrHNc) (seq (seq (ap i uvbhKTQXjZyjMiTVscilhQmxALueBfjmDFKsjtxhsRbLmNPAnpIgdTKMcxKPuUFzLgsygIJLLrGLGLeGrfENmHjOJTbIbwq) (seq (seq (ap i vICDKLXEdqzRFMlwfOYDLGIQAnquLJFTWARfrwQxCNbajIKvgnhaQvQvmgAQRXIGuzfLEvCvZ) (seq (null) (null))) (seq (ap i zmEiqoaPrUUivZBvyxeULurRMHpsnlkqPViBGFBSCaIfDIINDgMDmaxUJhGhCQuueqIqsq) (seq (null) (null))))) (seq (ap i ZNXLDiAeUVXLVCaYrGsadfjUnrhfOIVoEG) (seq (seq (ap i DQMKUTQkDGPBMDEroNBEeVVpzwuQPjKHixOl) (seq (null) (null))) (seq (ap i QAEQbzxGAwneSaeUGwflDgumXGeYqPVhfVlFfuLObmaqyAqXUADKfSvPNdUgTPQBqdsylCWUypJzJkBxGQRrT) (seq (null) (seq (ap i aEJKVPEcdUGFrwEdAIqQxIoTjLrVluiBKMIcPsVOPwVKCIKdlytriSmSYTAV) (seq (null) (null))))))))) (seq (ap i jFKJqFhlQAHzHAZgcetSzotjIoZBaXpKxowSUpPxUOhcCdALkADrGcClYpANywlCreXhAtYVkVRQzsxM) (seq (seq (ap i CGeKlfPHekhUDYA) (seq (seq (ap i zipNxdltseIZMqL) (seq (null) (null))) (seq (ap i LjmWsWEkaKHAjQequRgTbABmkAtYJQembqYJxpzKZNxgfWXxKtHUuGyVoBZucZzmXUnwqpRJJVotfXAugEAKUMujTVcFdg) (seq (null) (seq (ap i hUuwzwpjaxVRyUjPNLvKwnFietnMeHus) (seq (null) (null))))))) (seq (ap i MGlzZaDKiyksiQoFUTixHSeIFsLEtoPYiVyqQoiJsrV) (seq (seq (ap i cXUqmkUMwnhuDtfnZxWbIoNnFPjaZpTmDfEappuioIgYXwGtqEFopREkXTWcVZspEj) (seq (null) (null))) (seq (ap i atVvpsqnsyjpUjbgHswXmgfoIKHZJMtlTxXadfUlBnLZMfZfFXArEMcyxKUaxyubTF) (seq (null) (seq (ap i ZIWaLvlhkGJLEYaItXasdoUYCuRbwYReQJaoP) (seq (null) (null))))))))))) (seq (ap i mRYTMuUlwQCoZQLzDGJpRkcwOZNCUWIoVagRpJJVrSyAhlvMIETVghWlQtPOQtQDEc) (seq (seq (ap i QYSDgPwdqvtLyjb) (seq (seq (ap i AqkvJDtBDCdRMeMMCrJGZx) (seq (seq (ap i iGeTUOTZxhRIIqPbzCzdCaQqhzvRObdDwndklDZUBrhJlAFSWfNACsSzHT) (seq (null) (null))) (seq (ap i VMbchssJblQzVPqqkvJHIzbJJLSEmYlNOJ) (seq (null) (seq (ap i GmypCFYfOUdbbEHSsfVdNLsniqpJqPeJFXMEgHVusIAPavKoaBjRUGlSGHdOobqURuuDQDZqHSXanBypXHx) (seq (null) (null))))))) (seq (ap i yzYOlbxQLZZAWwKCwfuVNNjuHwHRneQPsqHkNz) (seq (seq (ap i PzCnmvCspWZwussbKVpwUONfPRzNZCOwgUBarLQJjwBaCknFuEdsKFDdsiLI) (seq (null) (null))) (seq (ap i rYLxydJOdsHaBQTgHDAPbikZYVBtRixwskiYaBsSaYRNGGmPq) (seq (null) (seq (ap i ARPxkfuKRykIOVIIhhoBaiDXGYUURpgXsdtkXITBnxFe) (seq (null) (null))))))))) (seq (ap i QleDXvIfBh) (seq (seq (ap i iPXYYquSBMyqMQhmjirFOQORfSqVwENyOmXDHqAahRipVpycCqPat) (seq (seq (ap i wvyap) (seq (null) (null))) (seq (ap i hRHDQkybKMMRuvgKyKMSKkvMOPpenQBeXMEDeAJBgRDjOdttPgBcrbjcffoip) (seq (null) (seq (ap i ICDzsmPjsCpUfpbqQdpJbt) (seq (null) (null))))))) (seq (ap i curpXCRPMlpOTVRLEbQTPtjLnVbKxPTJPdIkoDnouSUTBKbyTvnIFVoGUdyUwojlwTQiPfzmFtxtXDZuXOIUNVxCoOihbXTkcL) (seq (seq (ap i ORukReXHQuTkPdyrmipocQJBnZJcVisWEjVlAhPk) (seq (null) (null))) (seq (ap i vhqLL) (seq (null) (seq (ap i NYmXrmIXuJSSNpsnnQEXYakqpfkDLqYNaqFNxiDKBzVDFEgKlubOhorTYvBRIhfeVdQPcNWByUDW) (seq (null) (null))))))))))))))))))) (seq (ap i YaNWWZyw) (seq (seq (ap i yWQzSaUAjfuwVRSOhlPcaskYCYCYfBVeuzDqsAcXBscydpesCTwEySlQeJISPDhITAVhsvarjZlP) (seq (seq (ap i UyEpCykSjiJOiVZRdNmWCqUNHTRZso) (seq (seq (ap i vyifTdLgedVbdoyypjVntZdmIbksLSVitbqSYlvKXWewtUhwjkjxnMMQAnCDBjAJpeOEcEBNLKZMkahG) (seq (seq (ap i WalSSaQExYwghqqIkptzUzoAeVHOcvbkJeKDIidvTtLK) (seq (seq (ap i eiZFQYxVTDhoeZco) (seq (seq (ap i UPPlDCYSCXGQCiuWHBOEFbILzZrSmgpGFnYCkfYQ) (seq (seq (ap i nLYyaXJZEpWJzTRXzCHcDPrehLMJhImhhLTVlYVoTKntJfALxnZUqXJmfojhHpWnsBOxdVaEUWATKriQcORtUb) (seq (null) (null))) (seq (ap i TMUGHDFsoeAYkthyTPdfMMwjqooxKxaSEmPGxuZHtveuulzCCsUFSsZkDXFwdhWawOOKklrylWoEqwbxa) (seq (null) (null))))) (seq (ap i WYjZtVjeUgpanbLfBTgCfSgsRegDJFMLlCzuksdOzKgquyESwuynYlhwNNkXMMxuXpBSqrYDSRuldT) (seq (seq (ap i ysdiBblsjBLDxXRDrsEUcfm) (seq (null) (null))) (seq (ap i RawGlmZrmUjBeBTIJPvpxTLGYrCXMwCToWrrDLIkhBGPjqSvFhYlmAcDLawkcbdUkUyJfFsFLckNuIXMospTjABXfvhEOHKwa) (seq (null) (seq (ap i iEPenDBtOISZZ) (seq (null) (null))))))))) (seq (ap i caabMhFpKTXjshVFNTxGWYyLHZwvlEGPGwjVbvnlPFfvWmoYxHlGufwSMvuszkDSwerRqpALrlHNPHLTTNX) (seq (seq (ap i LpWXtBuLyhezQSUMIWaAXmUAWLOtgQRsBPbxGvSoGYSTNzF) (seq (seq (ap i bFSpkk) (seq (null) (null))) (seq (ap i KdXEnHTsEkKbKYonSSicbIhsaxjUbxyPtiBDTBIbngCCWmMgrWERkDF) (seq (null) (seq (ap i cfzQXZyrEoeSVTcxGYrmqgTLTAbjsQsiRTiaeHVfqzRIlxIFEcwVPeHwwQBayVkARbjiFe) (seq (null) (null))))))) (seq (ap i hRhdnzlNlKBHxOIzu) (seq (seq (ap i HjQIUekRDrqKugdxNehJC) (seq (null) (null))) (seq (ap i CIBXs) (seq (null) (seq (ap i ZfkGzUbQdnIUBWhzOLijBGyQmlapSpQqxxHGkz) (seq (null) (null))))))))))) (seq (ap i iSRChqWtkOKtLJOQMhpNXyWNemvRLKPDGMfkdxVAqAwiErUakH) (seq (seq (ap i CgIBwSrQJTYvqBKhbpCGMhXHCoumrYDTASllytVSFkDDiXWDWQswWpssgwQzoCrixlB) (seq (seq (ap i GWcgIxZkOPbKSEVYHQPIzRVtEKVVITicQebMWlbjplGVuAqHC) (seq (seq (ap i XQZYlVjvSsookCfiogRwvxWCFXCRxvZrFtLDUBhSrgWmWPhqigDEA) (seq (null) (null))) (seq (ap i qMpwdVVMUuTtlQeFSFDQJlHmrFVgGdqVctcstNZcwQQnDvkMQgQkKjkcRTLlIzfmTqdMlVOJhBzMHJEpR) (seq (null) (seq (ap i NqiZwqUimAxOr) (seq (null) (null))))))) (seq (ap i hFdPZohmEcdUGjFPASd) (seq (seq (ap i LAaliqwilgeXxIHOnVYHKWqHBdNDuXEacGUgsoeiUDGGMltxfaXAFX) (seq (null) (null))) (seq (ap i WGZxwaRgSCtUxZppAXAKVOdqvlCJZiWZEUETkZZdaLweruNqTgOtXFoPHteZeASxlTkwjWoEzoXMeNKi) (seq (null) (seq (ap i rVxqkYUiaBxZtEVlnduNutDaiRniwaKfkuXnVAlYFrfXSLpODGvhBXXIPKnxURNgRqjtvoXFpJcmbxF) (seq (null) (null))))))))) (seq (ap i KxEcsgmjREAgyUqCjViQtNFCtJgYLcZhPxUgDWYbHq) (seq (seq (ap i ZSHKvCJxIZAiYirBZdGDcQkmlxaGlDvcvGDTBzDOro) (seq (seq (ap i cqgTykyCfsWvsEabbFAGfnWvoTMyakzPZsFyTqrpMlhgoaUrnZthROwkQmxCYxrHxGQXnaDEgZMmdZBKVgaJxyJdg) (seq (null) (null))) (seq (ap i IUDFEjpgyFuJnCvCVQmpHlBbqtFDLVIhGzmrJAWqUyZtbkRcBrMPVbsvkPABAGGzkRdiivPgLbMcUHQFZdaJrWveqFpjruCMiXI) (seq (null) (seq (ap i sYQmWhsWTibUsBrKMUxXvfzXmcunQllrpxnYzt) (seq (null) (null))))))) (seq (ap i EcDjmhrkNbITIKOwLnlKXgUsyUBzRFeQTZxjiMigjrpAWvQXaqmHLEeUVuweGORnUdnGfbsxJOFO) (seq (seq (ap i YxqskqLfaNLOIMHzPKfaxVBdIqQqcwyWDynfnQ) (seq (null) (null))) (seq (ap i kpfaVjTbmtwHkIwRqqClWRPzgQKOnUK) (seq (null) (seq (ap i uTmyXepOxPFZIlMfnKIWdQsoMQqHSuCyQiaJQHdYFldLZJuyBIRvi) (seq (null) (null))))))))))))) (seq (ap i ZkslMokvCRDcOnJktGRLfcAythRnfrqCeKTzegjiWvBcmILHZQQGeLa) (seq (seq (ap i fWjNLMlSSelHQyXssMHzLwHhPDcyW) (seq (seq (ap i igmETZfOXGQmmMUVITBOsmUkZkXEPiUGZYpZAdogOQDKAJmXJAHSUkA) (seq (seq (ap i exboGAVSSlzyDldqkcjMEwTpoghqfxnHPewTIllHcTONkrO) (seq (seq (ap i VAMeVgVaevpGtGGgkDsqHzVQLBTdPYbbDhMPkLPTspazgwQitGtVZzGZUhIqOEKkuxvRgoYxY) (seq (null) (null))) (seq (ap i qHyxuMAOxkQLBzurxwQSoZhvKiOpZ) (seq (null) (null))))) (seq (ap i uhUqkaRAcQrFMnGFWBezMXROruqTjinr) (seq (seq (ap i uXpUjydMkLgBIOOUmcXfFiElUiXCmcnYrfExBNUSXKJlUJbYjRNkPDoULtCuwvHqsetXofKWnWOLcpxyxcbTk) (seq (null) (null))) (seq (ap i ACqPPJUbYzqMcYqPzb) (seq (null) (seq (ap i sbyeclkaYTpSesFjtucTHEXJUvdqPtpcjasazrdgmhrgnl) (seq (null) (null))))))))) (seq (ap i VCrtGYPnqixhnDRSTFhHfzQsixuCbHLFasiyUdCmxARCXqLxXTYXoQtZCfswqGmprKEebnUjqHhmpWBDJ) (seq (seq (ap i BrpexMdjcybhenOTenFeoMVrObxFYMXqegQOC) (seq (seq (ap i SGzXExJj) (seq (null) (null))) (seq (ap i EwSvANocOZESOHlVfBZrHDfkqHWAOIpMpfbxLTVnoVMQdyQWXAzNQwVsU) (seq (null) (seq (ap i xrESQKXGaeiRSjovrZuoeoRoTdybozIvZDhJhOWbaGCHyIjskwXRLnvp) (seq (null) (null))))))) (seq (ap i GqXHSIyo) (seq (seq (ap i dAweUpsovkaEymeSuMqgYvQjiFyKiVMusx) (seq (null) (null))) (seq (ap i SoJMAKPVyNijEzGKKHtetdzQzyFcLkAo) (seq (null) (seq (ap i RyOEFoLPWuaTDbmRwGYemJZYkXcFSUeLaiyZdUVVxBIDxU) (seq (null) (null))))))))))) (seq (ap i PQoPqnrECCXApyiLhXJOyywpAkHkiGmYhjXMdQPOcGnlTapzWKCutcgviaoLCqEPSOTsnGoPpEnusMtXsaIicVZdZ) (seq (seq (ap i gYLYeksxJczcpktUMwgjUKWMPEukhcbCbAbTuRHkuNUlPeuNrcdtUUJWbPgyyQnZvBiYonSnnbYaQLV) (seq (seq (ap i gaOaxyKCgFFYMLtAUKIosfBbvFLyUhuZbLiBUtPQaPHOHgKombiLUQfhlKWvjGnpXxlDNGzFlcQRVQYiMZCMSFYCgPgOcu) (seq (seq (ap i iqAoSnZfsMQxwTRRScWjtfOeFiBxTvdSfUw) (seq (null) (null))) (seq (ap i MvZdStEnWDQHZDcayzwPnboJHGMQmCgEPYUKaqPFWbGzaIJkxbEjLLCBCqlwkEYKCLyVahHdnag) (seq (null) (seq (ap i vxque) (seq (null) (null))))))) (seq (ap i eLwHEWoeTIYKZuJcTXrQMsxhIaWCfFQfFsLVTkUyHJaMqZqnAXwxtlwekiVNFqrjQxAHDGvPafPHwgQLyfA) (seq (seq (ap i sohkaVRgAiNDvZTdhswUGJoAtUeitzWurvPVdArPERNUiWhErShlLWZypsdYMoCoCgikpOG) (seq (null) (null))) (seq (ap i ixClCZQkQB) (seq (null) (seq (ap i HkZivqoEWaGlSRgmXpZfuMBiaHEgPoxyUABXWwatdeqNmXLySAbAgXutMZUgSlaQknkdvCnDETFsTDeXuapS) (seq (null) (null))))))))) (seq (ap i WEIEkoGcaVZZBqbOuFPlJrAvzcOqebGVVhhrMzdfxXMrgfOVyKxzGrbsInZfFrz) (seq (seq (ap i sVGNMUybeEEgSzGUwBfBBVpjBgyuccOBBLdVGlehbNcqeCtwvBziLtjraOhsnkeNTVFlQxBNCenuA) (seq (seq (ap i ilfKsqnwpnybGwJbkPBJOapHtgBVXxF) (seq (null) (null))) (seq (ap i rEgIjKRTDgMFjJgXumxQprCMqkmtAWEvNaDpjqUnqFotFbTvMXXTzKxYziIAIacxqs) (seq (null) (seq (ap i EgdNuuGLXHtVihlWsAyjHlhcwpzHxFsOxZsOE) (seq (null) (null))))))) (seq (ap i JPkmAaDWVYB) (seq (seq (ap i HfEMuPUU) (seq (null) (null))) (seq (ap i FkbamXCBZuMGkCfHHxRpfaiLADZrJMpWAGQFgERpnBaVylvolFyoa) (seq (null) (seq (ap i BDxjXR) (seq (null) (null))))))))))))))) (seq (ap i CakCJYzzCMLRLNISbbRvVgiMMwhRUCVTMiehHteCIdjpCOyrxULurPQu) (seq (seq (ap i rjUDVqIqyBOsqyrjqIUepiulDQYvIJMCAqEkNSPXvtpdTsHfANvigyVOUWRrVTPZ) (seq (seq (ap i lDMkMnAfeLdyygImrJyoZAWnaXkoTdhO) (seq (seq (ap i gMaqQOMcQSGAnoOKirYPtSLRWtNmiNMAhmuypBlXTZhOIgxHcdeazYBgAAcjjFutWvMWGZKhvMXd) (seq (seq (ap i agAdClXWxKTFHVfgEdvkMOWLem) (seq (seq (ap i hXGqGsuiaIUGiSQtgHTVrCrakULXkdlJGQxeeCtBhfHNkIVpRtdEeojcrYnBkSImTXMnMckcAjsteSlnvpFSxvUuIlNkxT) (seq (null) (null))) (seq (ap i HEaHCHZEeNrGYwBWHzf) (seq (null) (null))))) (seq (ap i ZydPCeoTiBPxwX) (seq (seq (ap i sNczBjiZybdeMsUilvaygrW) (seq (null) (null))) (seq (ap i KvsoyWnbIlrfcpiedMNMkLycFHqkJvuxedZuCxVZyJvkeOCjnmhTAizSiqyXEQXujNrgSCMrUbgBluAPVIGyWXiwuClFFVx) (seq (null) (seq (ap i uSfDdxeDXOdnaDzkDH) (seq (null) (null))))))))) (seq (ap i KDGTNkqscOEeQcHophcFHEwuJdrJvAMymVyzCXiFtQYpwGHehsyeZjagsePxAKurKilTnyNxvhAmMJjbYUb) (seq (seq (ap i GfQRknwamdQEVSCTRvluIJoYfSrAgwaxGYs) (seq (seq (ap i hlPDrAcpmAwgnawbOcbOSjcjpvEfxqKJROhceUNMCXFkEDwADwMAvMWLDyFcLdNczFWYhBgEYLIqIlTzHbhVU) (seq (null) (null))) (seq (ap i enLMNimTOEDibFFTFrlZHZPHfCZrhfcUDvkVSiFkRdbGYFhdaejzZTp) (seq (null) (seq (ap i TbyqNVaWvmrC) (seq (null) (null))))))) (seq (ap i WqtpiiRcfssTBdaYuPdjtbTjXFhwqZIwUYgVXFnDeIbbeJrYZAokwScdRRysPsGnzxlw) (seq (seq (ap i SuwlBobWgefSdNYuStOAVdUksyICQtOsSibgLIycWpylwDQFFEPwPOGMSfOvcccCFOJbKUuVyqPA) (seq (null) (null))) (seq (ap i CPbNyzlGmCCjsgVhIFdlffzRnHRqJqmC) (seq (null) (seq (ap i WgsWCXsJYkBGfTwCsaWiYzHwEvoWzhkgmYDMZfhzfjZyUEhvVvaZHACpmaGwzUbnfBbpKxNAawFvFp) (seq (null) (null))))))))))) (seq (ap i haYeHWYKboYWhEKXBpbRYWVVXTzxPICbg) (seq (seq (ap i uscEmZeXFEKTWKzPmDCvcWMkDITsJAvFm) (seq (seq (ap i yVGRUvqTeRypmqCSSHqKSeJbPezUGdieCocdTgHMUzfdHBfWpjSUdrTihVBRHIVoRVlgdLjNHjyBiiYOyG) (seq (seq (ap i vwDzseHEIkCmYXQfmogCuQMkjplguPzCwGebojdGwkIbClWCwpjthf) (seq (null) (null))) (seq (ap i xCYWHgW) (seq (null) (seq (ap i PGHobeyQMzMgfgZicnGhmDSfiRExlbIeAojAmjiNDhJDxJlBDVmgwdPhrXhyWTEXyShluIYqIkAxJpaZU) (seq (null) (null))))))) (seq (ap i QrALVwOXZiRgrONNGS) (seq (seq (ap i QdQaZuiBeDbMfURitPPNGKQdNIZEvCrQkSAZmyu) (seq (null) (null))) (seq (ap i LSJUVIPxedFvnXpjKOIcwiinBsJiGSvqgRoKgs) (seq (null) (seq (ap i CrmlLKGxmyatDuHukvPoyNGtyEsOvJUSihqTEdjWzYguNeuuPRlXpQTCJtsTfzlY) (seq (null) (null))))))))) (seq (ap i rlUrxVpzYRgfkFdPABsHLMBYFCRzyIeRyeFT) (seq (seq (ap i yqiZfzxuyQrpgfEMGDWDIDPYVGRDaQqqhjOZSkkhqeOj) (seq (seq (ap i IcDrFjcXZutXbwErXZVemQocJIqN) (seq (null) (null))) (seq (ap i cwPeNnkPCzJRHPVfokFwrplqVhiyWtpfGaOJoASrbVuLqBOKqjHzTfCdIqtwEgEXoFUTfGyTjNCXNNAMiFsEMFcFnj) (seq (null) (seq (ap i EMoTMehYGWidwkxZUCbfDiKWJkqhxzgezeKpPebtORmeBfyuxkjmvshrWHOyvHgiCPrQZdCcJrKfGCQJtrI) (seq (null) (null))))))) (seq (ap i HsDKCqfYPfpHYOStDZHDTQoRTUoWMCwazZAKrxoBlGKjCsxRfG) (seq (seq (ap i GPvmDFzCAAhzOJMNawNcuKRQBzdYuXEJFrwxiaeqUNtPCCgTqeIXqwNHfilEVubLFIpZD) (seq (null) (null))) (seq (ap i zPVgBLZyJNmlOepEHFFrPoFglTpNFkhEavhBOmpboarCGymUWFRHUtruQuzaLGaorY) (seq (null) (seq (ap i icCMgPRAEYRJIwZEfLfyQI) (seq (null) (null))))))))))))) (seq (ap i enRfUuVemJYxOYnjKcrPHvPqrRNVURzcVZbhhVSfJcoyhOlIQUAiJjbltTCaGBPKQewKtyBrpRJjNiouXsq) (seq (seq (ap i NjIIfdKNFhFutdLQp) (seq (seq (ap i LKz) (seq (seq (ap i wcDYSOPSMHHRFgqqkDQsLKHcJhfcskPksyjHNzfmmJrcTrZFjrywjEddrFYyixKXbKAxrxiAhtRFtNEmkTAwSJSQIductVTi) (seq (seq (ap i DxIyWifbhsWIdZhkyFEMkvMoLiEnbSkafmRusinTfoDlojFzBXkFDNIiSZpgWjeQaQXMOManUvWjChwvOcPVYWCTEihhnNlO) (seq (null) (null))) (seq (ap i YdmgblLqEQUXQdsrkwVmF) (seq (null) (null))))) (seq (ap i BVBwMvifAxZBtUlBtMncYfloOqnefyUIWnWDjtNgPbYwgbvFoRUmhF) (seq (seq (ap i GKJSsPsvBuRcPHBVGTDyTEqUIhvqiNRRAFnZFNsJFeixXGOMWpxGzpesIMpgoKOExeqaNcnPKCTzCgoAHDRyKgLVaGwAkMluA) (seq (null) (null))) (seq (ap i vnEnNfDNPjnrJCDVPvwTmwSGvezUGFilWkgBCHovwjnJpvKXIVuVfympyPrbUZHpvLqKbRrVbuRf) (seq (null) (seq (ap i OujuoVRIEbsbigNVYdYrdoeevDPmjakXVAdJlrTfboo) (seq (null) (null))))))))) (seq (ap i jnXXcSGXaolLWUzsYgnXojByk) (seq (seq (ap i WWbtWdotqrcHPhqwrRBBIlpHABrzsET) (seq (seq (ap i yzhveGhfazeOWOdqxEqTkKxZbeZWZXgtwHZTgXpkCYZwFvstbJlQQsvGusiq) (seq (null) (null))) (seq (ap i zskzZuRIhWrXZGHsZEBFcyAcLUpEUIAcvrrfBqsOMZEbOw) (seq (null) (seq (ap i UfOIwOAFGbgXxJfmHDZxNtjKjPdogiHGuXPlOdATkNsQnLsTAqhACzWBBmtp) (seq (null) (null))))))) (seq (ap i PAatMsEdVLQgVGqSnHyDbMUTZSzXwJsTZVsbalZqdQMCDpzVmaR) (seq (seq (ap i wrwfsjLIxLKQaGwKDDggEdPacPQQPnvWSMDLinVqrlebEBFRrIfbXITIzxmWLbznTtqTuPMqABLepYwHFlN) (seq (null) (null))) (seq (ap i swAHSkXZScVmBWXlaBhnAtbcIRITyKGcveUNCwLdLcRYdzmif) (seq (null) (seq (ap i kfiPdvYsvHTtOBmMnRDKXjmeKVpgeHyQIA) (seq (null) (null))))))))))) (seq (ap i jQSNOOkSswcvmsbeaaYYzhndzecXCKPQvxzorZqjZQznXJDTChWyHXfKlvJDVLPZKBxvDtQlIzHdkBhxPHUWWRuRqx) (seq (seq (ap i pKjqHYljFrkDOPQlucVjUljSeGjAnYOJFhxIqBqAwcAHhHDeBpkUkaLauCRB) (seq (seq (ap i paYNpPYwSnjslwBYDqseymBZZZsiLlNabCkZHFxyFFjuqppnIlcaZMD) (seq (seq (ap i fkGqgMJCUEnWjTXwoGYcWzEJ) (seq (null) (null))) (seq (ap i jUalFDDrJYBAbnCGHvURoynvlwkCnmnwlfOhVBveaAprlBqmeQoWlMZsgwotXBtHljFiHjbBEkTWyihiOUiCnAaATjEoYKINhSZM) (seq (null) (seq (ap i hJzgHeVtoGjgUqTVeVUHFBkCNCwNGBxtcqGYnlgAQHMjLwd) (seq (null) (null))))))) (seq (ap i hyYCjIhxdNFHGqyAntaOtaDRgcyhCkQVVBOFEPNpGFrEJvcuOKfBoZNScfaCQlsCh) (seq (seq (ap i kHctULWOHkPHDusHHcJSZUKLQDUTHxZwOdqHAOXQQaKvAOZSzjtWBIfAar) (seq (null) (null))) (seq (ap i lHALhwQRuGPYLaPuaRyKnyJWdXBBGTPyuHzOLwKmhdbktrWaHkhHzDeKBLgGGKLZBnOCXUizkFrlhMiEZBXQJYsUIxitW) (seq (null) (seq (ap i cdhKjoOzzmmdiVGYgXMfCsklIcFpTuNhUDrbcATpWSWrfEqOyVrv) (seq (null) (null))))))))) (seq (ap i nmMvoAcFODyrqxfGXZoZNBJIyPEF) (seq (seq (ap i RFGCNBYIKQhHTxPyeFCyFyiKfwSzeGVETNkyhOFGklgDNibCJoMXU) (seq (seq (ap i mRmBpvYmpAPhwsIVLbrCEEKLhlKEminJ) (seq (null) (null))) (seq (ap i VTOHYFbzNfddtGrunKnRvIgYUsSjfmcUoofzKjuGnSRDehPrDwLdauyupQdNVNTADpgYCqiATtYaJMwReY) (seq (null) (seq (ap i ZmPIoBfq) (seq (null) (null))))))) (seq (ap i bUJlgRxEShirfjhGnuEPsauGyNjDVlLvDkusBMZYIAAITyEiQxffIPLjFOLRIO) (seq (seq (ap i lFHeVxnqJJqpkTvvYfEUtJFoqvHXlxDitl) (seq (null) (null))) (seq (ap i PyIEAFrxXBOFcIPeckvPYPPZZbFzKGkapIhEHtqfuuSXsMlwNgLvWgmgylUyFporlyzmSfewrPLMDXvfdyjN) (seq (null) (seq (ap i MibpAEhxXmIfuoSmRjGKz) (seq (null) (null))))))))))))))))) (seq (ap i NWgKV) (seq (seq (ap i rDaxFbu) (seq (seq (ap i LqxtLlJzxKNMceUhrUyJBbnarYAGJMvmzeIPujiTOZqrnzXVWNoddnSMxSzPQedhdUdzwRTnTftdGcco) (seq (seq (ap i AQMfmKxdsnuqaUEGpAdwZykDLEUqcNVppbkXcvHHbqWYOXGMGozyJoXghHd) (seq (seq (ap i IyY) (seq (seq (ap i kejUTlcfqbyhrHIcygWJWrdyA) (seq (seq (ap i kNBoDZoCDNDhTLSg) (seq (null) (null))) (seq (ap i JxJlyKFDEAEtZXnyLsRVHLbbttUFqZMIRPKFCJWQKBOT) (seq (null) (null))))) (seq (ap i TWjfGdUeqPIZhYVlNunLiHYGuOsNpfjiIyIeLuYTmJTroQrVDQKeXIrfGUkPqzLiKdiZpirHlvPc) (seq (seq (ap i tz) (seq (null) (null))) (seq (ap i OBoZMFQSGVJVXcbrFVSfMkdePnzHHPrdbAdWMCqASjcyhnVIcArOOPabaGCPYjuYkJJLLISAOFJegxTtdUtZiVKEGOdigxgamsn) (seq (null) (seq (ap i jSasRLoGmeWwCldnbNVokLSdSaylr) (seq (null) (null))))))))) (seq (ap i nYhJmwJAjsJhgAxjaELVzugbLHYQFeRrDJGlKnWClCUHbCfGXSBhPBWtVgVGBkaqkaXGZuJGeqJPxqZsOJD) (seq (seq (ap i mvcPzrcUhqkcYyXlOCTubIPgxhcPZymrCPItmhDbRNgMIXfklyBnFVejqaFoRNJmBMUzPYwrPz) (seq (seq (ap i puRYUqjbxEWcnJBYTiHkFTBFxZkAyegDjeYVyurNkbLpwcShVEPQNrOTykxExoTszFarmEiYZcfVQbaKTtZYUZMQmQiwKUL) (seq (null) (null))) (seq (ap i ddNAUewPOKEsloVlfTnhQqpmoLBjkFzMaUXBwdGJpyjDFGqTMnnkEVuFmFIvWIbxlWCYOyPDSlblqeVcbl) (seq (null) (seq (ap i zQUpQtnO) (seq (null) (null))))))) (seq (ap i RQcMMsHWtjKKLpeaxgykfYxSOYwqtsHaSrdtSmgkfQOY) (seq (seq (ap i RvYsZayas) (seq (null) (null))) (seq (ap i bRhqijzEwlSeD) (seq (null) (seq (ap i GCdiOEqlqJHwrPuboolWgI) (seq (null) (null))))))))))) (seq (ap i bZT) (seq (seq (ap i GBlVwIqdUaMuhEhycfthVkLK) (seq (seq (ap i VKdarMdmMQgzJESIPEDLYLbLmAH) (seq (seq (ap i LmVHkzirQRNtkobfOCFjZswLpJpVmyJahuGnMwiZbweGAwtlYOqh) (seq (null) (null))) (seq (ap i jwuSVaQQYCkFGpMjHLCAPkhYHILtVeYHvFriGPsRUhpEnWhgRnUvhGVWipNU) (seq (null) (seq (ap i VWkmYpXvFfsyjRAtABHjBIcJEMzgBCqUVUbEBJ) (seq (null) (null))))))) (seq (ap i NIaLFKRQWHnhSsHjevXpuhMzbgoYCzSiWuflIzZdWsBYSJwCtmqjMLRkPBfNJkoSycNOUA) (seq (seq (ap i UYEWItrfnghDVoVjhEzWfBgPtzojiFrMGkvgrTMmRulUMhb) (seq (null) (null))) (seq (ap i rIVBemfGitSt) (seq (null) (seq (ap i dOHEaboTOEchfZxRbjkmGXsdVOUJsETMGMkPHJgoFhcNrpfkwMD) (seq (null) (null))))))))) (seq (ap i MbGdjwbzWJHysDEMnftyhGImlWeYBkFedyEnUtVWznYIjJZrwmQffgvzKwATyQbHPHoPCWiTXTxGtzVhpOyOFKqBKIdfyZ) (seq (seq (ap i QDEvBLBOxqCCvIurXEtzWuKfgQDtcDIwUtqovGziKKtRloKrvRRZmQNhmhxIpiIGVtrTn) (seq (seq (ap i nZRJhNJshKciGHNhwWhFYZVnJNYIwiYHQfQQQVZDUTPoEXhwUbTlqBTdyKirOUeOCpCV) (seq (null) (null))) (seq (ap i NbXVKgnqAYWcBHXwFsIJQxURJAIMkHHRlerzogOwkANeNMUJjLNAHAvKGbLoDkPPCTPwwBEBHCfQzvtqVabHHBQrBfqKHfUw) (seq (null) (seq (ap i KHnUdSWuMt) (seq (null) (null))))))) (seq (ap i YARSvnWOxZHnGIiBqwREchPyqTKalxZLCtRvaVWSLwUY) (seq (seq (ap i ggMMHWVrRihEiaMqnqNATATwaFaBylMXnVmjkaeDBdCdWnzdZQIBRSJClOMPvedowxjRFNZQaMHSHylhhXDBuUs) (seq (null) (null))) (seq (ap i AFmyHFKLZIOouFYppJKAdFqMQXZGoGBBrPspeDBunNthtXPKTAFibtzcDTnVXNXvYYUPxoRxwx) (seq (null) (seq (ap i pCZRrAFlUwMlSSOxnoRkykCDPBbsPyeRzZeyBsdAdWdZBltUfDHtoxDSZqzRNomIrN) (seq (null) (null))))))))))))) (seq (ap i hZuIDehFwbZZSYJuyKgivZfPMaPoVZEfZgQygihJDmRyaCYeFSmXBdirBiGEOhqnzsgmxTtpFdpAbbHWKFQrEXAbjJTzkPRkstpN) (seq (seq (ap i XLeUbfgaFZkKImXoDTbhStkHjXKlgLORlyEwBTVGGdpvkwYVbQAUXaodKdlAnmCxiJLWFaXCrlchApTO) (seq (seq (ap i WelanzLiHYozdfWGWfOxFZmw) (seq (seq (ap i EMUnaaZQBbQgHYsodWiSldbPlBDFvwpGIOwbHurZbjlOpABROIiBBrhxGbhN) (seq (seq (ap i itxwLwypvLIGWweFE) (seq (null) (null))) (seq (ap i KbPdmZvZzIRluMBNsTLfCSvHcNtIVESmLnCTEvWUyjWdYzrwkBTSDFgyqaRbYFolnPsMicFIOM) (seq (null) (null))))) (seq (ap i oNIisXBRRPCsCfaBJoPfjjXJSPWXvmOwCKRaNCCdJzKXKhoGWuwbnYsEFJWOuQEPKtsbyWhRzJsuDRjskDCSFQ) (seq (seq (ap i vgYqEFXEddocuXWTWoNulPNyHyzdIWtivZEIFb) (seq (null) (null))) (seq (ap i QNBrSjyYfhJkxaLVwkbcYHntOpbjSURucZUgCfewfILuAyIcPHVJcZzwgbAPgNVBHWGqoBuiFXgrssNMSTXZeQjBJtMppkHau) (seq (null) (seq (ap i oLXJaRWmHQSMmFqTqBzyGJpgibTaEbaPBmeZRu) (seq (null) (null))))))))) (seq (ap i sZBDPeiWVoYxcNCRNqSkbRfIYmbmisaITTtmPPjtnzhxhCGRCEkoFqnWaEhVABgB) (seq (seq (ap i YRVSbSFDRWaXWMkNhMHWoibmNGlQScogCMpfqbucq) (seq (seq (ap i GqpHKuUxYbtVQKBO) (seq (null) (null))) (seq (ap i OVdmkOTzhsAWOghELuWjeFFjkzwUHkVMqqsHwgodK) (seq (null) (seq (ap i ICEEBGufhnseCXXxgXtKHWeBvquNyqldLA) (seq (null) (null))))))) (seq (ap i kfIKoHzudYTBbLIeLXnbqWiZYqzkPMcUfNltYLqlnRqsXUJmGUOOuZmCVp) (seq (seq (ap i UsDeTjaHSvAXcSlBIqwqQJuHgJ) (seq (null) (null))) (seq (ap i yAiasbaAgpcCExVQCAomtTOpLYTdKeyNgAmrwbouDuDBUShEvaOxoZhxCBoL) (seq (null) (seq (ap i CJuifjolykoO) (seq (null) (null))))))))))) (seq (ap i oIzEVZhvOCckJtgrBotUblWlXMrQsjMwkEjih) (seq (seq (ap i pPvHQzEhgleDwyUxcKjFcObkerNwJLOomMIGjnoplZbwKzljGzoLekczolFbYbtCZcfIZvQKhyuHfkPNKwTALahHRnFP) (seq (seq (ap i HTFSWYciDePKMYKRQHRDPDtlwvGrBsyhleguxZcgiGWzTzrIzAjEUvMfgzNqEBUFOqAAgpKGzCiNuONG) (seq (seq (ap i dfqWfIIejIHmUtoxSAiEHVsJbQoJbDypxKoxVMjSInZZffhjmRnVGFwWUfLcnQAITRFOAPDSOyMtnpvKlksEBQGtksJZgOR) (seq (null) (null))) (seq (ap i ggFA) (seq (null) (seq (ap i kcoXdNOmwsQzGTuBePfFREQGxrQSwNmLAOfzoHkOBp) (seq (null) (null))))))) (seq (ap i ISEYFeszxiPgBSaJJCBcvXnYIFpYEmU) (seq (seq (ap i lyXAjnuewkAJXCEDfMXaOjpQMkMDynlEkAMbmsgOibOqVigcUBFfEQHNhgquAaRyknonApAqKmxUeP) (seq (null) (null))) (seq (ap i UrrQUmKxNHTPntwlfaCuzzwnsChuqvBCzdDaQgTshfqGGCp) (seq (null) (seq (ap i UxoXNCgHRnVGoMWUSSRMxCJEqQmrMOvhWXhzetgKIxrCrvYEvdDRmrgTBOzgjYZlFotUztwuaFIhxCQotAG) (seq (null) (null))))))))) (seq (ap i XoTenNnpqGopdCtIyvfZnEXoZdaRfMNrmHItzYqrEO) (seq (seq (ap i tVbwbuu) (seq (seq (ap i TWodJDyMCFhnREUIskZnUmIHAidui) (seq (null) (null))) (seq (ap i hvQRFnObYFqSSGaokrjpXPeOVSXqwVKISysxgVodzQcenBerSvMcLfsabAPLuZxPSSJzeUTGMqY) (seq (null) (seq (ap i lamMEVCdrHxYSGObYuhWMIAGpMrz) (seq (null) (null))))))) (seq (ap i mLgiatWXbDetQGzuvoWZBWyjKASKrAXTasAtanjNKBhNUaDmgXONQSpjIWuntGfPYMjaeSepTejPHpwLIqQtpYKyQrgOIv) (seq (seq (ap i hpPUfTrgdbCJMTvofCWhsfniYIeCKZTZqBdRAYoYCjgcHeYsXvjdCZRfxEVilJxUkIjyxlxiXxBONQoXMkWXNhEUKKIVcicx) (seq (null) (null))) (seq (ap i qzbuctnpsNbGqUnkvDpKlIIFtQl) (seq (null) (seq (ap i REJRTuUvyOVxZeRNpUnvtWAhbZukwgoUBkiXmeFiBISgQcfJgTGGLtmbAfAJWkrCMfO) (seq (null) (null))))))))))))))) (seq (ap i zaOzahOIc) (seq (seq (ap i LXbnmYLeRBOSFiAitgFVRuzeuQAfYWUKiQKPIZpQAF) (seq (seq (ap i HyWvgKCwjCxkLfgh) (seq (seq (ap i LSkBADFsKEDsYSFDxliGxUHyqaTNLfBtYJxFaUmoivsWmYZdIhykzFBwiffdeaaWaWxEjjhnCgxLad) (seq (seq (ap i qBcNwwccRfpGKimyXLkTNRVMpIcZhZYXnfSRHOFpslMWPQWezaRxDjRjGuqjeYaLKsMhQ) (seq (seq (ap i uLqDYpPrFlcIxStBPzxJxlrjNMOBItszSBihjlodcgRdeYYkBqikSxLkGJnmdsEQQmfGVQ) (seq (null) (null))) (seq (ap i uqoaSRxgbtmflddzQDBZRsxLInFhdgCOpztyStLFmIXxOduqlqsWAYheVoyVSdbruXHgaXYOMvZapGsmLjEvQoyEmdTknpKrLXoO) (seq (null) (null))))) (seq (ap i IQXZbtjycqqwlocbPKPagrodMgdpYLGWqUpHEKraqOF) (seq (seq (ap i SMMigIzwspqSuzfjFNWnBejLzSnfIulVCLGSNAvhJgLaNUILlmhjcIPEQmEoKjDCEjnUvYkhccAuCbpgRKUCMDjUXRNzpmWN) (seq (null) (null))) (seq (ap i mhncMulsxNYMtwPTRbzYXRYOJqxBpaEnGLMOwyYRvrusJOJhZNlnGvrLdtraWJeDtMW) (seq (null) (seq (ap i gNMXnWNZLBwlcAJSAoAlwvLQXRBBfyyOYFLRsfmQKHatdCnfwIUtUhR) (seq (null) (null))))))))) (seq (ap i bhaPEQGzaVQKL) (seq (seq (ap i urTugtREesJAslRLWKLhhxbSOrpnOcAVSPhmWuCTqPSUpD) (seq (seq (ap i vLNkrkSNfZRpoVMRYQKassCUOGEOCmwOnkhZYVVNNDonNeUlSfBzAqqaZezC) (seq (null) (null))) (seq (ap i nZyphruZVgiTAkGwOZebVBkHLXFJnUCMEUctHHoEXdXmJ) (seq (null) (seq (ap i dl) (seq (null) (null))))))) (seq (ap i zYdkVuHDC) (seq (seq (ap i ogeLoEtjl) (seq (null) (null))) (seq (ap i Exwd) (seq (null) (seq (ap i EFBPtHJjLTCKfEJxHqFbdyVcfMdW) (seq (null) (null))))))))))) (seq (ap i QEoeqbUoUSfbKJLqnCpjIzOcYPIIFleVXXYbVYNMXgiYrGYLhkNbTgHLCSyKyrr) (seq (seq (ap i QfxwwUmZ) (seq (seq (ap i qNlTKLntiBXncvlPwmdOfXaWZVvJTMtUpXZfUbrfpnjRODDLvgMgLC) (seq (seq (ap i qwWczbfJaAkdwRNTeiQAPITyq) (seq (null) (null))) (seq (ap i VRd) (seq (null) (seq (ap i ZmJhdRydSXwlMgPUiWbhxmQuKGYPMaCQg) (seq (null) (null))))))) (seq (ap i VUStoiZHKKyMhEQhDdWWQgnkTVVApNdJZCBJpueNTXHggSShZeIiCiDZJaTqBPCIxRRpnqoaOcrbjpNAPablsrBXgdHNf) (seq (seq (ap i kQFMyaigBlYlQOgUQcffuEWjDbnDuciAMAQOSoLJltzVBMYHCOPVffyOcNbkVbIdPIzyS) (seq (null) (null))) (seq (ap i iXzh) (seq (null) (seq (ap i BHMZwJAoeBU) (seq (null) (null))))))))) (seq (ap i GPN) (seq (seq (ap i zYHmdqJLTblHDqIqEKwNnJfArMYtSidQYphUXJjebMcnmODttgucwaRGFmfMe) (seq (seq (ap i OXuDlgVAefFPRYKXDOSuSOZMPYJNvIkDYFoluCGYdpUyTwbOvtHwFwdeHRYI) (seq (null) (null))) (seq (ap i rUqYRJWQIskBj) (seq (null) (seq (ap i DSHgvMfczZCzYTMXhltciluMOFjioBwaNVwJTGjeVXgHqrNswpBDvDpWSiuZnnPVOB) (seq (null) (null))))))) (seq (ap i kSCdeJSCGNgZEOudozzBSLqUAIJjDNFgQfsKWVrZptizyluaqgOpKgoiIAvducivuwOeNwpIfikTCVqtdqLhxSQXoSGohf) (seq (seq (ap i dcaMCvAImsWZppCjyFQSPmYmAblBkgLnNmHwWaqX) (seq (null) (null))) (seq (ap i WFaxTgEMWMCA) (seq (null) (seq (ap i eXORPOhoXmEVjSkbzuThzRMzHilNaQjsJQlav) (seq (null) (null))))))))))))) (seq (ap i kUcUCyCFlvHYmqKsnzJCuzXRZXTdJ) (seq (seq (ap i gTufhRWcIglwNHThHawYiYntBxmynUKHDCkQSIFtGrYQNd) (seq (seq (ap i nbxgKGrQwzRGTyKbEqUGHaKkGwpiPkCwMtAB) (seq (seq (ap i KGBHbcWWZdgksRcoZzXwffDGyICbHWXnialFdfwqFRDQyoFKmyNmOHmaMNyCZfOYgzihlOmPytchx) (seq (seq (ap i hKhatpseTWczTqEBNQNddZKJUwAEJHrWhdgANnRQSDzPhHhwcWmoSwWxtwdyqbctpCeOHuldlOFDDowEdLoycWGxrZLAly) (seq (null) (null))) (seq (ap i OHLwJrSShXxGkuoVxRplWfcpTyjaBOKdHEeXAeiOwxNzWtCscRAcllDZrgLzrTLstktJVtcMgTVnP) (seq (null) (seq (ap i OEhGzGREbonpgLbOWHUL) (seq (null) (null))))))) (seq (ap i uUpwXMrvOUjOU) (seq (seq (ap i nZisLdtOqAbNUheolxTUhpNUswfFZeLmdpTxZtpWBaZXIfJMYzlFRxZCOuSfQILSEljvTytALSAHhenrULxoFOPCOCvYcg) (seq (null) (null))) (seq (ap i xgHvgsSwfSpBZEzP) (seq (null) (seq (ap i CfzTMhpgZMreksqNJygvNPAOB) (seq (null) (null))))))))) (seq (ap i kAcXLPXxXuFZbX) (seq (seq (ap i RTulnYtnftDFUMOt) (seq (seq (ap i RZgfKWFByuWiDognMGmIljWmyCFXBwpZsDeTAIosNAWAUAVdGtGVFhtULZDjhWeSUkvESYnZWzgKNyFNvWRSbeEVkSVe) (seq (null) (null))) (seq (ap i EMwydStVAiMwiKALZcWrwGOwBpOrdAdEaMQG) (seq (null) (seq (ap i KloPCvRnbyKgtjyNUmEvlWrUaVJufcduwMWDkmuhOitvfmFzphZSHRoGtLJHEIpjMiRab) (seq (null) (null))))))) (seq (ap i yRHvRjAaZGOGptDFSFwVqQixfsRxXXLdnyzoHrFedgzIXsyLbfmRIstTESFuLTTCFHAJQesMYgPhDMdIDkNcZIzzzFvyQQjGFT) (seq (seq (ap i TQCdqrKbRwrkLkGJqDDaoeVzvpumCFZPNXsBRCvPvIUNhPxqcbcREIxXyNEddJHFaoWxeiyuIgdipoBEnFHmkl) (seq (null) (null))) (seq (ap i ebDsuxrKQlnJzhhsX) (seq (null) (seq (ap i YcrgGGpIoIUECrUwXbVTDckMsjloFRSefQfTvfhpOiKTWpZcQpJ) (seq (null) (null))))))))))) (seq (ap i ShooizrEEYHXptuUXcRMRFVACCTgbBzJQKXxyo) (seq (seq (ap i ZbXOTIbQABQvihgfVdFnmvhhdBIYiGeVdLzGXGXliADQvmDGFQmxFukhGpbKkJcZRHlpuiLEZNqSzCSWhPb) (seq (seq (ap i LKObZqkJylCSASstXapkaHFVvYccWUHjerfyYwEaawygedIwZPnFuE) (seq (seq (ap i wHxdHgbxmzaRxKBCJgAuUiMmHDpRCUNAIRonBPgcDrbGfsOCqLerppJKFUEJfUlpSaVeYmJM) (seq (null) (null))) (seq (ap i qxcLeXWoHOpmTSplMUZatkwIyiFIKBgQpbhaJJiSQKpGKuPWNSahKHFMLgEMAOPuRtgzRBnabFvU) (seq (null) (seq (ap i AXObTXYpkEhcvuYjpsnRzbHIeYcZwLCJGhHUFlTFXxsyDioswGyNqlZSOUVtwDTcXWICGgMtqcYmjUNmnhpheUcYTQlRdqa) (seq (null) (null))))))) (seq (ap i JuAtGnvfIvfjMNlXzuIXDIUKecigGdaoBvaXLJLFJZQtaluLYkAoOSXYlCPZjhQjNak) (seq (seq (ap i aKgegqQmNLETSUtiJWZMpiEVv) (seq (null) (null))) (seq (ap i qpcBBLhSvKXnIDGhaMhYUhzqcCDuEQZLgAGGEATnjDadEKJhaMPpyQylzSDPsR) (seq (null) (seq (ap i VJuQWVbjHGKKbUaXpPgeIdFoRalxFbpGtyCfVYHlflVPlJStuPhyTlEzzaZbooqFXOAHCaPrKJxbnIxqovsJPNuYAPyJcgZWftiR) (seq (null) (null))))))))) (seq (ap i lJGqwOMEkkUIWSBhJo) (seq (seq (ap i HYPxaFgLejTyghIcODyaQkek) (seq (seq (ap i tjgMnGWWayNrOqEieNDwTlVSCpXDCynuHxbzagRvuhXZLzbaEAUChUpJkERmmnkUPZEMgspsUcGIEbbsIeJtPPNpzUGHQg) (seq (null) (null))) (seq (ap i pmintKDroflHnlmMcIeoKGEDEDmhnfiUQkJIICIBGdSpgVZZrCpNWxdONdgyIBiSMp) (seq (null) (seq (ap i uFUGA) (seq (null) (null))))))) (seq (ap i EUyFVKjFrOIvsBlxRtSEZWCKLHGkYismoXmfztzQlKVCLIfGIvbjOfeRtMauuGnXQEhUmLnczGxGe) (seq (seq (ap i eFmknBztgtOYshwpkxoRCceirxbLUeBndhEnLtxFcyTODCXBisZ) (seq (null) (null))) (seq (ap i KoHPmPuZJZuvWY) (seq (null) (seq (ap i XfkYFxDvmlvuyuaHsxV) (seq (null) (null))))))))))))))))))))))))))) (seq (ap i iGIBeuLHjLnsliNToRItAGQhOeVNdBoHRS) (seq (seq (ap i WqsEYjDUYccSPdXhbqRICKlMIdZVvhedUeSJfcodjVgTLFjQsonJjcGYynQRBxibCTzxDTHsUsAHDwsHAImIEatOws) (seq (seq (ap i OcAlVqfFaHjbsySGJtvxgXWYECsXLsQvfEkrqmgcbKZDQnTJWekoUfirCOMfuDrFgosNqtpEwTbhfH) (seq (seq (ap i FgWBJJpabUhfbcXvbxsnJmBqgYXBENRidUWHvBeJpBSTQKRIjkRFMAbYieTsZBWMPkuxNkRIgMgtrZJbGDLk) (seq (seq (ap i doKykcWauWNqTzaoeBmCQDThSoMyGjfQGBOuayVGHDBznZGbwEIpEGMXCleUNuqowllstQvvHFfqPGKpzBTQkOea) (seq (seq (ap i IhVEdGVOegojDNO) (seq (seq (ap i bZkZwiqnCNkEqCGYQOGGDuAFZt) (seq (seq (ap i lWwyQNuRyBQgBRSgFyLWfmVXHD) (seq (seq (ap i ucOMTKAPUHDiXFmMXZDGgtOObSfpHnGbPFjrLvcNOjeqhgEjbKWgAmrVcwMBUKHeEZfVBlvMtoKKyBVMG) (seq (seq (ap i uZTFUoqrLJCvDHRACmFYgiAwZrxbWTjdKcluvoAZs) (seq (seq (ap i BXqKvXFMBVHrkMkVNiVFvFvRlCusizlYpTLOeKGFkVEeRgQAbFNgKRWdxoUJArWgcyCLtcEFsjbLrCKwyWyfapTMy) (seq (seq (ap i gfMLZsMzTjiOdyqHDEsXfKRJeZYJfUrnnFCIhehrhNItHOzaTbCgBmlM) (seq (null) (null))) (seq (ap i wLjkMWDnekvEWflhtBmXkzjjEijwNFDtUrOmXEYTqzuyBOfjhCjUgoZMxgaASXwQHXsIRnatXSyVulsitpceXtt) (seq (null) (null))))) (seq (ap i PCGrPJJmARZRYdwrJVjoVelHDyXgPvWUrvETPTRuU) (seq (seq (ap i jVEFIjgErFesEYgTgipDHqBFTXWLbsUTrlWuuZFRfqxqGUAFEVNekvCabBTnUBRPJ) (seq (null) (null))) (seq (ap i GsclZJXIdpGQugeqvdXjDJBsTLXEGNMUANmhdGUYHPBCqlZRzvKsncZNkpbfdNCDvgqUzqXhwgQPMRgsBGculgUyElje) (seq (null) (seq (ap i McuNHAC) (seq (null) (null))))))))) (seq (ap i EaQkskWNXznwSQZOsRnEgZzW) (seq (seq (ap i rCnqVYFwowoiZZFNcMMzoVYZmQtHkvzuaKRoNICWfiBayRkrjcAveJJfXYThN) (seq (seq (ap i ajsXyYELkwJhszjfitwqzitqfjvwfcMjbauIoOWYZBjJBChiqXnNtdzcWoH) (seq (null) (null))) (seq (ap i JqvrHYgdWgTBqGpoCTqUFRjnC) (seq (null) (seq (ap i dqpZTKNzvtQfytiKzWcMXboFcUulAzVrrUKPuuEPiUKoxTelxGoEQo) (seq (null) (null))))))) (seq (ap i RLGSOhVyHxXeipUlVKqxkNDnCjdBkVEdrFTydPzbJAhevbgwyrQFDEhwRozOKNNXmwnpJLEtaTMkOwLkCcVknHWZrfu) (seq (seq (ap i SwYKkkOavXhFMLMfnwMZ) (seq (null) (null))) (seq (ap i MohQSOkCHVi) (seq (null) (seq (ap i BzsMonULBTeGhLMQAgddXdjciMIHxqgdlDBzIDDKlnZFuNjmCNUCUhROFBzbXQTMMTqCMrYOQPzwYqmUEKGjLRHzhOo) (seq (null) (null))))))))))) (seq (ap i hnKAhLYcUqqF) (seq (seq (ap i ZVhdBHzYlzNpkUYjVcvrATBbVuePasMZsMPdKnLYDiTDPKgDNvTciMhhMJGGK) (seq (seq (ap i BOzKrmPVUSsnbTMUalXDJHEDQOFWvpolSaF) (seq (seq (ap i QdgrSLffwsynNNJorNHCNPrIWMWzgOpgDuBslBxJXrtnOezqbTXWcLiqyJDZVOObIlXLIFGGIebmTY) (seq (null) (null))) (seq (ap i iqEEgbEkS) (seq (null) (seq (ap i PHmbCEQFDnyzWsUflY) (seq (null) (null))))))) (seq (ap i iqYgeBTqWjorpgzLxbgjRwgKNqmqcwLrMXjjmCXwzHzMADcvtJPIUoztICsHsRXbg) (seq (seq (ap i hQtBHeprFuARamkEtxvmAXmskCtvnZHgwJeanTHQTkcTeKGZHmlXvKaRIKoNYIsbJHDzykcfLfGZovMKFoq) (seq (null) (null))) (seq (ap i DcnbajNvYWxTHtqUmMLyaIWfbGWmHPMimzkeW) (seq (null) (seq (ap i TKyjicrmFCydGzDMMurTZVpfNCiByPMEXmQCujKIOzOlAG) (seq (null) (null))))))))) (seq (ap i YqBCrJRzBLCQhqFHLvNwzDyqoFWXtEbzDrEjiMsHEjVCgICByErdHwSbXaJeziZODDLtySNs) (seq (seq (ap i YOeBzWfShihmwDhWlpuVPNHQTbldeHjiFbWvJBrkJeJWWrSXSxvpJfKMJJMhiHiKloJkxrB) (seq (seq (ap i xnQRhPyPeAKdCdBQq) (seq (null) (null))) (seq (ap i IRhVgX) (seq (null) (seq (ap i lPBDPspjzuUFAurFwFBHDgzcFvjwvmDoaQGfmgNGeTTxPNYmCOhJMMqzWNWNwnJkoWCsNTaigXZUOELcAC) (seq (null) (null))))))) (seq (ap i mcdhJ) (seq (seq (ap i CksdTL) (seq (null) (null))) (seq (ap i mDWPvRGGsuMnyLOfeYktAZwkcZgpvQXexadBwwMCkJo) (seq (null) (seq (ap i tyGanydubYfyojqFJEZxAsbzKSctqTWPOzn) (seq (null) (null))))))))))))) (seq (ap i ritbdleNwdVWfRQFzLnnrTDrFVfToauHFmWXpLf) (seq (seq (ap i XuYVqlavZZZFldPNvIJsVdWPVjGPzqSRolWOoChBweZQMJStvPKmXOHOgADlvarOtluVnsGtDUUNhXaPuMudnAK) (seq (seq (ap i ZvrecbwBwUpgSxxnLQNtgvUZxKszgAUGNPYAFHmxDYESFVoxAVOfJuvgFUiDabnhcYwWAM) (seq (seq (ap i WqGfPdtxwGJAPsXOGKh) (seq (seq (ap i jwvUTbLbFDKBnkEluJYMePjDuVsKBakmYmQtpEayvehdTjNmyXOMnSqxRSClR) (seq (null) (null))) (seq (ap i BwuRqIgswySdYnSXouTEnQyWgNDAliWglTbIhAwGDtVatABnOdBjKzzzxdZQPaMcKScXAVK) (seq (null) (null))))) (seq (ap i dfoufemmiwGNsLrRixLzkJIoAKBmJeLdMBTHkVitpc) (seq (seq (ap i ymqSUjhnQ) (seq (null) (null))) (seq (ap i CezGTJkQNKFprReblfqOTWfONqLqAFbugooagWPPNPMLpqAxzELPUdYfESQLpSavTWtgLpuDgWtPRDvyPUjagOpnyQmphqQn) (seq (null) (seq (ap i XOIQTMqPSBVEgYBIqZqEMRKprnEiMCagLbNXF) (seq (null) (null))))))))) (seq (ap i ToygivfkHIAKBAsshifqSj) (seq (seq (ap i aJMBHWLKkpaKVvkeoNDtBpbiHPedvqNPLPayHlSYcJeZXbvxyhFbOCaalzkj) (seq (seq (ap i osdZpGCqgWZOdoXPXKyZfppVOcqgDGrTZbYKfVJL) (seq (null) (null))) (seq (ap i ZHzehmsAEhFiVWAJvndDnSDdtxjtvREPscKKfFvJeblwEewcvUOeA) (seq (null) (seq (ap i xHEDCokbgFVHPKCTROxxDLQuh) (seq (null) (null))))))) (seq (ap i ttrefjsEuTGqwLWsCsdvNJUnnbUcYgrumaGUbxpegFuZasuMtvBeuEicGxGuinwxkzwgrZPkqJYYdJ) (seq (seq (ap i SdMNFhkLrEVvWnOaZeYzHNdMRpJEVnRHTdDsuXCpAjLIgCAFbgHgiCaJtFmgDitElNqp) (seq (null) (null))) (seq (ap i vfZXkaUzqyGxeBIgLaJhSmPnjnmDqZHKyJtNABEMeXkzqDgQUazdXnSVrmlkhboedrafnHfdbbWehQnaBXRuclDVVzDWE) (seq (null) (seq (ap i HAmJTBUEoFmVRbMdhdkuSQHPUJIeFWFKmQFZVVgPlRMVcOGchmcgqdSQZpi) (seq (null) (null))))))))))) (seq (ap i twcCuzYYAtCDLKpCSJDAhckWHYyXVzDvnTjhXxzIXiAbHYtdtXpEmXZzdVPprIiqA) (seq (seq (ap i yxNTiEapMCBLNAlHXEvzgkiOonxqnRKJcBB) (seq (seq (ap i TekVgxBTSUZSfyDMhdT) (seq (seq (ap i HgoAuNuCUh) (seq (null) (null))) (seq (ap i BdsMdILDksmoYoPmGbJbgnjqGxmRbSXIlmvPcSfAyQcrIhtwwwrmmybswtSQc) (seq (null) (seq (ap i zW) (seq (null) (null))))))) (seq (ap i XQhveqxQlwXxOoHXE) (seq (seq (ap i XDTztjGZmnnGJyAFviTa) (seq (null) (null))) (seq (ap i aJKlZixYoWY) (seq (null) (seq (ap i PcUKAPrFntiZmmjhNwPsCxjBdJPZVPgmPwGqTFUkQCZFhVDbJKHtuUJnolljmvvKHGMnRRhUBcvzZXQykWFQEKlfRsvhLEZULLt) (seq (null) (null))))))))) (seq (ap i EYhjNBvsbMdpfXUBFGxagItlqNimrsFpSfICIUkIcytqtGMgnjcNvtaOMCpWexEBaWVfgJucHhoiFNvuuwXHSsJObLOoCfk) (seq (seq (ap i SLMEHopEymjEsOtJofkMRREAOfk) (seq (seq (ap i auJZMhSQTqKKyqxLylYogRaRJznEdTQcRuZMjgVSmItdzKnOQcSQl) (seq (null) (null))) (seq (ap i VehhnzGosYMsrFEPJYol) (seq (null) (seq (ap i pZiEzthlcoqohQSlpvUZobao) (seq (null) (null))))))) (seq (ap i xQHuQgDhWKzzAGBpJhWeVNCUmfJJGZcFkMkLwdrHMdQRWCtEFPUTOoeuYGx) (seq (seq (ap i YOWNCQglVDVBYggSpJRrNAbXsbDFleLy) (seq (null) (null))) (seq (ap i tKZGQkYTrJyRfCXZqQjBAhHtxFcdcDToQrRpVmnEDFclaoMVGORqJcJz) (seq (null) (seq (ap i mLFWeaXBDJDbOnFGUIDAkAuivLTVkWfUKrOcvjPRTFxAuaTUsHtieRGBKAXzmSVOjIHkXIVUHuZ) (seq (null) (null))))))))))))))) (seq (ap i sWBErAHdXqK) (seq (seq (ap i MbGlUYfeGMmDxwKHjlkLvBDjbrHYJrjdNJEvOvKhqaVDSpvrgpHdMhrEsAyaxaTvuApDqpfvaWZATOJOrbdTO) (seq (seq (ap i jlXVJKxonewHEJoETcwhKCmzEWtpjVcCOprFoKlXIoSKHpH) (seq (seq (ap i RNAShvcLFWoKrUQWyxxGwumrIjhQPOGyyZVzMobuKoaDFpIUNKdHUiazlm) (seq (seq (ap i IiTbLKmzbmGcTaMKUZDgoaQXD) (seq (seq (ap i JbkdUipjiQvcPkqv) (seq (null) (null))) (seq (ap i gRhBcKxQpNPAxyiMDgjBoeDitGpALsZtnhhcFGYTcyhGKpdUYlfpftrdCEIjiEEzByUiNfUwacjLicIkNhxzTjq) (seq (null) (null))))) (seq (ap i wWoIogzgIMimnFuOXWlxUsw) (seq (seq (ap i sw) (seq (null) (null))) (seq (ap i Np) (seq (null) (seq (ap i sIILwJbdNElJ) (seq (null) (null))))))))) (seq (ap i GOSrADhLhBuTjmrlnImOgQnrziGADULELdUnsjxAXzzPRBidkNkqQMWorCOJPNbSKZsQIbyXlaND) (seq (seq (ap i XiFOIcULquniGEtlBvPEbnh) (seq (seq (ap i BpDYaRJUbQQBqusYFQsjBZYEUjuxtbDHZjuyTDvVAaKExnnJWwllmA) (seq (null) (null))) (seq (ap i rRHrClaMPAnlvQTAbfkartXdQJegTtLs) (seq (null) (seq (ap i WfDMQWZwMxpFuJEQXNaoTHuaVYKPFeIEnutWZVUizzjYJJuxawJDVdIDkkjqacqNWakkdyGtsgXIWwFpePsBUyotYjtR) (seq (null) (null))))))) (seq (ap i APltVLEQOVbagVworJOqWcSPaYMwqSgoRmxRCkYzjOmjjLdbCbLnlnoHteabjajMQKbYAh) (seq (seq (ap i AHtpyoRXkYCISjGBRtJZAUEwkUBKtPAtfsxvYmRdYXutthaePvbKPldIPkpdPTXMjbqbrCimnDTNTLmBUtSiyOoteMmEOgnSIIt) (seq (null) (null))) (seq (ap i AHbGHSCFUynRdYxUIJJNzgilgrluRgWeGEuOdDhPlMiClC) (seq (null) (seq (ap i BeJzysrIXHwSdVFXElvSrdavsEOvpxwbHtwznhOsKIyavKNkDifyzHmDqgUofwjADoDjXRsn) (seq (null) (null))))))))))) (seq (ap i DebFPquPHcUtNQsSQAvsJhbVTAJ) (seq (seq (ap i dQUIGsfstvBRjhlufQGYUgNWTFIRSCpKqTAeTARHsCGWWwKryJLzsEKeAoYlYPtOImtEgyecfkAJ) (seq (seq (ap i XzRwigYBbnwrtRWOESvTEkWWjRdlAnsMnnzzlSGipAhzUqRcqEIgFPyFUwAMFtbbGrlfodrSQNfoGAYsshoDtIPXDjaEyBCy) (seq (seq (ap i klKrOCoWYUVIEnVRAYdLVlOitiMkXFpFTvsbkGVrVtAEtNd) (seq (null) (null))) (seq (ap i jkYuyBh) (seq (null) (seq (ap i me) (seq (null) (null))))))) (seq (ap i YRyxkylHKDRzbhbcyOfaakNcuyVerKmwXoxNBmTqStcNRgRVIfxjGPumMhsUrevsNk) (seq (seq (ap i pm) (seq (null) (null))) (seq (ap i vFUOujh) (seq (null) (seq (ap i TCJszvgFIkQr) (seq (null) (null))))))))) (seq (ap i dGKkEObjUVjbP) (seq (seq (ap i MtEwYUccaLcuKAKUAZcawSirgGvzZVLgiSRLtQOLQBIuIMWOFQIyynFrIiucVAOBkLhkmhNDVxO) (seq (seq (ap i htVUBBnDS) (seq (null) (null))) (seq (ap i cIyoGjCjViobVSMnNVeKpKqBuRpRvdRPB) (seq (null) (seq (ap i GroiTREuiEVTPCpMR) (seq (null) (null))))))) (seq (ap i iQRItSRWnvUFtFEOXutfypMtELXtgANWwHUVFuKOjnwCaBjvxWDqElRgrpDvdUwPi) (seq (seq (ap i MrnmvdRGLLEDklJQb) (seq (null) (null))) (seq (ap i GhhjNueXzrrfILcXQfhlwxdmLMSyhvhmnJIULalhUdOKvrzZBKELxtdUWradDEqKQKR) (seq (null) (seq (ap i QYBHtfGIMqiCScNdLevvELHTynFUniRnnFzhnkTkTutggeLavT) (seq (null) (null))))))))))))) (seq (ap i npPJMXUbLntQjXoFDZYWIXnBOFyqNuzmPYleAjyyeRweLRKQDVKFDXXwTgkAhtzZoLvXgBaOmgmuUPGWLHtxzfSbhggb) (seq (seq (ap i DhkhAvRWoffviaSBkBAqWCdAWDahhhQdPavmrOrAIygRjMIpYXddBnhsrPrBrygEAviQQXAMbzOgmFxtyQk) (seq (seq (ap i bSCMBFtcDpYkJefncMpcHWGqTAwTLxLtbvuhBegSbJfqBzzrTWIHHodLDrttQoucsHVdNCQpyecnYsaybffFQYwVYFasyxR) (seq (seq (ap i ouJEIvpzXZbUwXCfQvgfqVStoxlivgASHAIVEbNcVcuAdoZlvQKTHnULZDhLywPchTfgTqRwAaOOwhX) (seq (seq (ap i YQOhljievGfGWwE) (seq (null) (null))) (seq (ap i VbDKbcpHsthLusHKHzGWPkDsCRih) (seq (null) (null))))) (seq (ap i jChIHU) (seq (seq (ap i sGHyWfwwCwSJvYXOknvQduhZGDNORSceOCDNxf) (seq (null) (null))) (seq (ap i bBqie) (seq (null) (seq (ap i wdvxrZbXXLOlnhBuVqSWpyctvFybjFYeDHTWpPSKDuLYvMLsqZF) (seq (null) (null))))))))) (seq (ap i wvdlSbITNmQHNOjWkDweqODPcawTdrraejmzzAjfymnuIBOmexedyBicGGwdquLnWmGdnVuKZHExrHIfirIeSlbrFFLHHGCfCTd) (seq (seq (ap i fhzeIczDiBq) (seq (seq (ap i poSbVlJyhtqKslYadXiVezJRtSDIYcSlyfgQRfkQjdgvF) (seq (null) (null))) (seq (ap i TjaIKFmHzFYeoZEuhNoRoJiqTFZMzIRgpKRGvL) (seq (null) (seq (ap i xTkUZYDVaujbilJGHzTkuCjzbjtvnIgzxyHGgkYPYo) (seq (null) (null))))))) (seq (ap i HxoohqAMcBZtn) (seq (seq (ap i XVxDwXghUFWAnGRlZKApNyrBIMAOIGMnzllspQCvOhaEiNqKxwJcurygVvJsZQbKZNKxYfDfWxQOUHQKpYluJQVZJFaqzde) (seq (null) (null))) (seq (ap i KXEfocpnVqfuFWOHcbUQYLxaiRzOYaoMnjFUBLTltNZkaAzVFVMEcLmSfERVhqKPDQbqPbmZOlUbFheMSWlqxOlYCAtAfarsC) (seq (null) (seq (ap i QXCgoCetHSFGfdJzLWMYgFNLvHuozCwcuTnnxTBzUvazwWQ) (seq (null) (null))))))))))) (seq (ap i dsmBlHKuqinKnkwjGeypCAfCQXdVAhwSmnJXavynVJE) (seq (seq (ap i UcV) (seq (seq (ap i shfDmUbKoEjBkdYQlhOcDKwvdyvfLbJRtKaguYdPePSOAuUPcMlO) (seq (seq (ap i XxOVgsmfgrgJojcxtUIRVzWVExnpOBOiSsRCTPZCWXOxEqJHIhGzGEcUvXBQqj) (seq (null) (null))) (seq (ap i uJPJNtkXQryvBNq) (seq (null) (seq (ap i aZHUGtxTaLgrFsEPreAFzFyaTZHEgjriU) (seq (null) (null))))))) (seq (ap i NWylRNJIK) (seq (seq (ap i HWtdCmquvhkSCavoFVokTmRCCPzyisCOrVFcywWrvtjDiKqtQrJPnmKkkufFDwaZTkyVAlVGRVqJcQMLrdINnqcNfHPgVr) (seq (null) (null))) (seq (ap i cTRvkJzFBdKFJylRpUcZFkIkAqgG) (seq (null) (seq (ap i RrxNvfeHfTpnVyIrWAkItUiTodsVKljF) (seq (null) (null))))))))) (seq (ap i XurUuKnrejfnQTuy) (seq (seq (ap i BoCJowaktolBiMMvurZSrSLVQHbBwzgfHmeoBRyXlHTvNvNXdexVQDxsVUDIINRKAoJdUUSvm) (seq (seq (ap i yHfvMOmhhQLpCbMShjtqVDXtdXxGJqzFpXjpfoYHKDpbSqFHrKwVRppeuYV) (seq (null) (null))) (seq (ap i zJJJncTkpofdAL) (seq (null) (seq (ap i lPrFnWqylodMuoeEPvuavb) (seq (null) (null))))))) (seq (ap i NlFpkXUXhbxfzgmlCW) (seq (seq (ap i gXMnasgdnIGYjtkjzuPBFrEZdmItWeYGgDVNXxIbYmFINtZFkwgbNbWRY) (seq (null) (null))) (seq (ap i Rz) (seq (null) (seq (ap i kGOusadAQsiwQGyLXBPCTKRzYBCqodcrlWZHYocJEpzlcJQtizVDwbxAVBkUvlYhyZHfRnNsbpOCmd) (seq (null) (null))))))))))))))))) (seq (ap i uvnSWaQWtgeZVicYyUsxAAqwufcyUnivcUmn) (seq (seq (ap i yaMtXhSEtbYkWgfszIlICFCQyaUpEbqQAGYrsLvTanDywJISLWinLLtjNbUghSDvnYSnEJyXxgJOorA) (seq (seq (ap i JmldOSLngEHvteKDhjXNviTfcyUUUGskVlvNIuxwqnsFEXErFBneqFHbVXCVBFrUBrBTswJWnEtvGwknzAEeraJOqfzdZKITKZz) (seq (seq (ap i mKzKYzZsQrNkiJEKKstdArDtHSFkShKrGogmtppVTPvLjUtncZOxCIglXOohjlalHPMdretNcfnGhruYmkqwgaVqUdKUeRWeGD) (seq (seq (ap i cobNvwbegOaUjguQntjzcxcdRmXNqajGQgTIbdQMBVFYNtqEwugQBUYihhvnOswMJaAeAtHSsGwLYWJheYrQxCRXYhhfs) (seq (seq (ap i ZQNJRuztfbViySsBXUppocEcKtK) (seq (seq (ap i PtWvIlZIcsZcocHOPjjiiodIUZZwUAPxZuciyVvsYKPFaoORmapnHwAyBazqAhgFLyIYEZDdCdtjzWHEV) (seq (null) (null))) (seq (ap i OiAGFFLfohMhClNtsngZlcELHpPYoWAWvWKvrsraAkpgHdTChxzfHZfK) (seq (null) (null))))) (seq (ap i JeQzaydIuEIYcPCn) (seq (seq (ap i oDcjje) (seq (null) (null))) (seq (ap i flgPUkfDnIBPtGZGAObqcoSTLjstpQhkdslvgCQEqJGvJfiIHgTjHnTbDFlhlaCyysdxBnQWFQfhoaSw) (seq (null) (seq (ap i RyrUlrMDIqcqKUiziSX) (seq (null) (null))))))))) (seq (ap i lbFwZCecSqBtcFQwrVwda) (seq (seq (ap i sCrRDJVRcVgVaA) (seq (seq (ap i LL) (seq (null) (null))) (seq (ap i wjMnHfopizDLUHaBGXWcQyekphlvKORFDFvAMQcfcHJTzi) (seq (null) (seq (ap i xIGPfPSDnAiAIlpsJKnWzkpTqdUYxZIGCVxVcsSHpGAUjfmvGHIUNZnGCNzVLCRllKDNhVBFLbuWqfyHwNIjfs) (seq (null) (null))))))) (seq (ap i zqkomHzYcyNuaQfbjYpZTwTToGiVVklnFiNXcbEXiwsbzNbzftCKiVmPoaGGlxZCKrnqEboAEc) (seq (seq (ap i iANlOGzTVmjbDUsEiHx) (seq (null) (null))) (seq (ap i sEQHdjaJvgIANJX) (seq (null) (seq (ap i vqBTFyVIPlGYEBHbIBsmNEDFznvqCaecdtkKeAjjlKupLIvFBtHfHUOCEC) (seq (null) (null))))))))))) (seq (ap i skGdLqAnZpRBLk) (seq (seq (ap i YtxphaSuvVKKbFqMqeVUhfIRGQe) (seq (seq (ap i zzavwWe) (seq (seq (ap i JrcXJwtReBcYqgvDVrQOmcPOUBxjbwmmBadzVjMxjaSErpTfWNfMcB) (seq (null) (null))) (seq (ap i cThBHNO) (seq (null) (seq (ap i TjrgwPfYDgAuZvYZGuPoFaZvXKvUjDoCutfkSHDxuEjokxOzcYtqhJhy) (seq (null) (null))))))) (seq (ap i XiUbhaWXfHJmzlGfmQArYGOnFtMqarwduLKUgjFEDPucSteEsWxiMBTXAkPUkcZGqQRFMywATkW) (seq (seq (ap i nIOElthMhXjtGCOnutmrY) (seq (null) (null))) (seq (ap i WyFioaSDmLQufeCxHahQjasuksFNuuCDrklLaBlLsuuCdZeneuEVEQhmCWRlMlsZboCYhsYFrjrCiCzXReDO) (seq (null) (seq (ap i hGPcJBXMIiriNfIwWTqKnggksliLHWowhphqFyLlkJWNBcybMAVWvqCTIcdvihNxvXWvSINePxftVKzgykLeMYpaNkxmpdk) (seq (null) (null))))))))) (seq (ap i qHsBUqqnEJiOrnxLcnRPfHpbkHjcbLZcNMC) (seq (seq (ap i YnptiIgdnkbQTAoKwBSPCiORQdiieHrVkYhoQelMDRbpyLKoOsqAfvHRLpBlJmfBXsEIXKzKaPFnWAVSvdoCr) (seq (seq (ap i vaAjNkJQZvCwbEqPQRIaJOdwzFEQkfUlGigqKtlySYgvrkBihDontJkkHDqPpPapItmuMyl) (seq (null) (null))) (seq (ap i wgvGtzphBSvFFMnyWIWycDDRFLLGpwVvpFKlA) (seq (null) (seq (ap i iJeBEweUJtplwQwTSeGRMQfGEEngRXJrgZqhuzFZqzQTCFiIH) (seq (null) (null))))))) (seq (ap i BkWwkWztHjaMQkFguoOznznqmVatUDKfsGUpnbLWayHlskYWbhjSwSEisYQREJeGZqNbvTnDOsxtMnvwIqJPCquXTc) (seq (seq (ap i yCDyToIBwHFONhWkWBxWDfICGb) (seq (null) (null))) (seq (ap i NVPfgeTuICGazEgtPzjmcvfqxhVIUWTNMxTXIZLaiMGXsqKELTXsMhabliDytwsSLHvFC) (seq (null) (seq (ap i DGlHEQRJCwGPLMzFiWkgZMPJsqDZHGHGqmxehFXBXqAFoURDKOsvgjOIevDOij) (seq (null) (null))))))))))))) (seq (ap i qZKWEYGFmiTaysZXAAUmdZAJWbwsyQseGkqkMXOnJTJ) (seq (seq (ap i mCqPrHTHfhOsdRbqYRWKFmwxPfmpozIdQkxGWctaSOf) (seq (seq (ap i dnwajQVTuYTdKvMUzLYNvKilCXyxDjnT) (seq (seq (ap i xwTgSznHtovKvHpLlLL) (seq (seq (ap i QJAhkAZQxqPzhhRswf) (seq (null) (null))) (seq (ap i NHkvAztQFrggFShOMXduoIVERbrWahpWTXVcuprGeUXnbKKJdwTgOWVFkHPDdxIgsmXBGosc) (seq (null) (null))))) (seq (ap i dIcwpEzDpxUvVUulmRbZiialFgDOXrRGpayavjCCfHPTTq) (seq (seq (ap i HLVUELdgCWcFFLDgyrdAQhzVXuowWLTtluMt) (seq (null) (null))) (seq (ap i iFOhXmZMFgnslMHRMLaiYsJuhAMDTKtSiokHCKBoZCXgBGoJubmVhs) (seq (null) (seq (ap i XhbE) (seq (null) (null))))))))) (seq (ap i RrsmFjoqOXdJZLMPNxcpChnrtWeUilnQdcGRvICXNsGHSZcvPqLXDyXqXxrdVFonRIPVkgTkUFoIX) (seq (seq (ap i eiZeQZKdtoBjZxSMnlBnkagtczZrbPdZArlDQleCzcdCJHghMDPo) (seq (seq (ap i VdADiYGOaXZNwRRnhsaWOavpKaevOdfasHvQ) (seq (null) (null))) (seq (ap i fxgnAVomGnrsYUyVKBMSIkcjiokIiDJKBCPJAxTdfSewHyAAwswqNTvpwfFgFdoEKQw) (seq (null) (seq (ap i gpYbyXCfGjyVbptVIJWOYEIXlKlLCcQUzqIZSTqex) (seq (null) (null))))))) (seq (ap i dSDMOMjeCDdywMOOcpnmHNwOEDnbfxyrXmhObfGIqevdxOwyRjytPNVAqQCthibrGqdRVKvqfgWOCunLXmjvaGOypF) (seq (seq (ap i JpzBXWAFZMGgoWtVouboQXdovZnVEZUofvvXzAAzJvxyZhR) (seq (null) (null))) (seq (ap i KtVqCpDycDCDawqZVkfHydziQaEqha) (seq (null) (seq (ap i hSpFLDAlAxvMCJHqlAGDKdoAegmIuxoRviQkrDuwdTWdgSNdTHaMVVZqIVNauZf) (seq (null) (null))))))))))) (seq (ap i mzRijVqOoeOCAoU) (seq (seq (ap i JunJUMEuPXnXvntTbH) (seq (seq (ap i rSkkqlptICIetblTihaLZdvTfwsNtGSMcY) (seq (seq (ap i hcSHbLTVxUCmXpxJmvArbwleEJoDmGYObVyBPnsivovFceV) (seq (null) (null))) (seq (ap i TwIRtnIjtdBWRysBccnIWsoEbUFlwZIkcVfjlNhbIPnNVjolFPmDjCbtwLwCoiwmeErYjMIDBd) (seq (null) (seq (ap i lvXfyTcsBMMLOJEiAAfSUtMapoSnzdNCnKzrLGSO) (seq (null) (null))))))) (seq (ap i dlAxyYmbiKRvXJLsrqxsbZkjQWMnGDqMYzH) (seq (seq (ap i sntjHAJZEyUjWIbKarQDeAPxkyJVqEmj) (seq (null) (null))) (seq (ap i WoUCWUwoQuQnMZGDpcDlyEAxUTzbPGMmLHUXIqAsmoCATpvM) (seq (null) (seq (ap i gOJmDypCuGueQSlVcpnSUSwFsIQHQQkWwKkDXUMPZhthHbxdylYEDMSIWjHnERiRQmNVpypoOzztW) (seq (null) (null))))))))) (seq (ap i NAIptDhtzREmSHDVzIQywDcvhtvsVTP) (seq (seq (ap i EcLZsWwWdGkNwDblQgMJhBdrENRpBOZHpcTUapiDGnqmTGpQaHVXRwZIxP) (seq (seq (ap i lpxwpSsLGNUXhZCKATDdxPEjEtYVSgnXntDGeKPrnfFBWPvwbmKOBqWFCXgGRUpNffrWsaUvxTMWNRkPteTRGrjcjxvU) (seq (null) (null))) (seq (ap i NBulIKtTvlMXpaWsjJfahxguuwKdSFTGLBSCjCMSMHpfbcoNwhifNcyutManXXDjeRLZmnkszbByOMlsT) (seq (null) (seq (ap i UkhyheCHhUkFg) (seq (null) (null))))))) (seq (ap i DSbpiTHbutsXMwyGRyKVprtfJUDbVAgCVauwJRxycGUVAHqgFuMehCGxFaveecFUgAwkQuhpKkjrmLHQyDQdXGNmDFYZ) (seq (seq (ap i HelgGbXNMlFgdMJelfhwCmalutSRKHpMwAYDOvCnpDUpEcxtRK) (seq (null) (null))) (seq (ap i KyIUnpTeQkTKZtDEqOTvbhVWQZkP) (seq (null) (seq (ap i ihnkvbodGGmPaKyiLvWawNQIXbLfRDTsYxXiGtlwGkmqSVKSwheICNtSkzUTBnjRjZP) (seq (null) (null))))))))))))))) (seq (ap i xQSzGwtDnbwEhpqVeyOpDjgIcFWcmSwWstKeFUasoDZEvYlFP) (seq (seq (ap i fAcaguRYjteCBhfXfcnoRkCsnusAzbZlZFKDpTVbIrQKSeMAF) (seq (seq (ap i nxYKCuOUoUFwUfdwbfrQlqdrAaGlUxbHIXMAMgcjAvlsRWkAPJYkOiSMAoTkPY) (seq (seq (ap i jjalinZCTswTOLOmsihIXHhxvLLqbCcwSvoGhHxa) (seq (seq (ap i KwqxOsDYQLwwtHikSoKrjuenmPzawMKXVoPtzBTJAl) (seq (seq (ap i PWNGOwUstoqANjiDYqaVgWLGBNBxWZrJnvCYudAaeNNdZqqPbvmEMueNyMfnFQEAxMRHXsdsrx) (seq (null) (null))) (seq (ap i SyaNxkKAeNKGwwGaMTxAniJoyZfHvULcuLMRhjJp) (seq (null) (null))))) (seq (ap i oNhDWkEJZwRIRycTPJvkG) (seq (seq (ap i InIgUWCPhmaFWnLA) (seq (null) (null))) (seq (ap i iDaPGHuJMaSMMCRsAxbFhFhTSiIzhrlSRZmAgfFPJLBumGTcsKWDELnHCwbDtikSGnsNNkck) (seq (null) (seq (ap i WuoiQjDTCQloNCSBqMn) (seq (null) (null))))))))) (seq (ap i nzdjVnQOrOvNZEKBUPPsxnXncjMPDOxYxbsAruiilBlUUTXwvFvhXEPXPNkcwJqvMo) (seq (seq (ap i INczXhbZBEfZUmBsKaXSeNGHBEDaNdJvOfRaCOsFbuJcBpkPgQlejjObzPwXdFOSLtDVLeEcm) (seq (seq (ap i kMTdpwpYmmbPXWOHsMWpFwSMLHwaD) (seq (null) (null))) (seq (ap i qfFuEfPRuWinvdlTOXhYUPTnhDK) (seq (null) (seq (ap i WhqDJgFDOcUlillwlYrRYacVOSvGnIAQhDAjNTDjvLCDcqeMIHVbDHIcumuzWqKHrbJAKEwzVemcRWohMVJcDiiOOPeAD) (seq (null) (null))))))) (seq (ap i EchCjlDwhQOvjSKWhhoAhMwMzpsYfWViDtOsbhFWFpyekVe) (seq (seq (ap i ysgmFFwcnDq) (seq (null) (null))) (seq (ap i kBWjpxRHavOmWlYcuguBpGGtrNQqacJrccPvilonvRMQNfvClQLclkjYQwhbemoZIiMBaxnApDghLZXExurHAhgshbxaTaGsTY) (seq (null) (seq (ap i CFTXGQdgBEsDVZMLvTlkselOddYcNgFMBFkarzSMVfDzWoitvpGwuZnDdJsFTfmqlJzWGMBGmmbbmgnPLC) (seq (null) (null))))))))))) (seq (ap i YqUIlHblakQZPikxMHvXYsI) (seq (seq (ap i UswzJkbtEhllifuhHrkTAXlh) (seq (seq (ap i MQBUnrkkESsJHdaNxzkelOubWeFEvmnaZMhFSXKTKYYWhBeUiZRdGzdnVRXVOqfpJTUBMVjrPrnkPzulAtxi) (seq (seq (ap i GqeBluyzUjNKfRhBfNgOvjVlFSPpCDOuROYetABHVfWebCMLxiNevjjLWFLpvHcivtZRzoAJdRn) (seq (null) (null))) (seq (ap i OLHaDwjzhOBwcFcCVntzldzkDXubrdtQfBpCjByGWuKJApz) (seq (null) (seq (ap i zmlbAwZODaNHWzJACrmzqvYOsUqhHFJQRHpoCdpjQUgIFbxPedGgdSsBLRLwgNPtemoPrqNvUKImxDgCTCtTRLyWan) (seq (null) (null))))))) (seq (ap i KxNcBBSAZWimgIUBFtEHeSTYnsfDKAgYHGGFkoIPtxNHWeNVjyeTdmsysUppucCyNQgaBeYGmpTEYqAOzxkWnbwNNxeMNriGkN) (seq (seq (ap i WKeQTjyFiKIrvsUzrazsmetjDqhnqX) (seq (null) (null))) (seq (ap i AAJmAnnJYqwkFWTeabmhQscIXdrBunZHDKrtUMMGSjkaeBQnZFOKIfGCeBPClwWzreKunzxOvsOaFBCUQzzsvMiOsmv) (seq (null) (seq (ap i czzBFfnKbUzaMeNzLsx) (seq (null) (null))))))))) (seq (ap i LFrIQIWvEbkcGkrFLpSLtQfNQVOQdeYYwBTbpaAbGVuwmhDJSUfvnnDJagrCAecrHyBgJDdMx) (seq (seq (ap i lHzctYNuHzUOgcSBvNxHcrJOsLIqWGlWFmiyEULIaAuvexhfUC) (seq (seq (ap i mBvMVFJQylsHntOSqlygxZulaVwVRkEhgIyFqLQQUMq) (seq (null) (null))) (seq (ap i vWhDaoWXTikSlVgupQBrZhlGlsxdafhaxHWRDgxxR) (seq (null) (seq (ap i NjYnxlPgdHilpWXxAyWSNNWdYHEIsEyKXmPySyuhItDojPuvzGZTgHNSoZRlynTOJKifdXVLDbbCzA) (seq (null) (null))))))) (seq (ap i wDVknzBlpOaRbBasAioUpdDrkIIXRoLagvasbdYjFBOWRiAsNjFcXMeTcnHglOfRPaznvTzOTqGLj) (seq (seq (ap i gvZvaeaKvcCItIHGiajmQd) (seq (null) (null))) (seq (ap i WbzMPQxTGLrebMRWhxWTdebsbSKJosoYIpgWjJgPLtXpoJAdxZYZHKDsozIywRajcfAdAuAGggfyaXyoUOKnYlbgGmybs) (seq (null) (seq (ap i sPXHnIQcMDrrjJjjFcvlMtpYRCqDCwKcawnskefAMoXvgJOrWnwsrNZTDycVUZvhYqIIYRCl) (seq (null) (null))))))))))))) (seq (ap i HVxVmwZIYjIITQhQYKDgulPaGqDrhhfFrGeCZziNeckHUfnsGxJlEOniRZCHAgjzoWuQXDgaNgefHjmsMznIOCEbLkngrmU) (seq (seq (ap i ZZuKTZbQBWozuCruzADYgqgGLjZPexOyRtiYZrNJnvigaytgPYaidSWldMsvOlVGigLg) (seq (seq (ap i tWNiyUuNePcdHC) (seq (seq (ap i cYQIRMXWTPfcvocEPINpetgXjITveoYxifahYZAVXzkLBOKgMhNOUALFyosYdAGsjkbBDRqwrCZVonKFKTvzKNvYO) (seq (seq (ap i AjtStnUlBVXmWlkMZNmyFZHmBjRyRDVNeTTnHXUEwtRRPYdv) (seq (null) (null))) (seq (ap i wfPUfBnFjWFrKJLv) (seq (null) (null))))) (seq (ap i olWlPBtHRDQSRQHVNCLwGexfJNfVRYeRwWILyDtPOvCRYiUaDCmXCpErOU) (seq (seq (ap i gtnwexSEReAluAbCVhoQPprunAuDieWIihkRRmS) (seq (null) (null))) (seq (ap i jKQxaaHrkVJTIXKkQBrSjDFKVIdjph) (seq (null) (seq (ap i nTFT) (seq (null) (null))))))))) (seq (ap i voyKdZnLLNLcaIvy) (seq (seq (ap i fyzAPnwZrDqOdlDxZGuVmGnptuQLWvBWRBzrWiZGwGDkibAkVeTCYBSbJm) (seq (seq (ap i GWLEjVSrepxazeOQaUObVlBzAtTvnEBNamUU) (seq (null) (null))) (seq (ap i kxplqxQmfMeIysfRaJPZozUkHSxkUruDiDaWGglJPHZVNuPwtZkrwJcOnSKuSCbAgsEhIUaJLkWnnvplli) (seq (null) (seq (ap i bUVTOwzNxnrYnhrRuSZayauUbQ) (seq (null) (null))))))) (seq (ap i eDZhteJlAxhAOJAZqAYunUpGBwAcOIdPUTMnsOvBmwxwlFOnPWXvrhsFhqUUIBEJCOQhbIiBsBwtLvcnQEFSKcnzxnf) (seq (seq (ap i mEjYqdw) (seq (null) (null))) (seq (ap i vHGXwEJTgiZVeEQpDPRuhAWdbUn) (seq (null) (seq (ap i rVZXZiXBtcXxkvFIEoVTWQhdxfIPZcNTygzvmlOggPnNDXZGuBdlNlAsnmlwQEQQKq) (seq (null) (null))))))))))) (seq (ap i KscwyBrYKFkgkUAzxeusMAhmXauvNnHt) (seq (seq (ap i oyZJCxBsCDXAtctTjOhSAMVgl) (seq (seq (ap i jmbygdaJMcwRgabgglpkrwaU) (seq (seq (ap i ZtPShwLyBXKvfXSLUEdYurxqIfgwfzpUvTjnLom) (seq (null) (null))) (seq (ap i sjZQxXthzKLmQlFFKZWXdLcawkIBsoypcnmDKpv) (seq (null) (seq (ap i WK) (seq (null) (null))))))) (seq (ap i MBNjFUUEWUYIwYxYgsUBwKUWIYzmKeUmFEvmdMXRGXbsAx) (seq (seq (ap i VPtKwRGUmME) (seq (null) (null))) (seq (ap i iTUsgjGULKYBPFnoaPgEVULllJjbRGQsPBsTPomYcSVWQZk) (seq (null) (seq (ap i ghDpvxmzQjiepRIfVrDwTPQaQqXvIcwNZavrJNcvYDgTKdNMalicAD) (seq (null) (null))))))))) (seq (ap i BfphVjuxRUDqvHvhcBrOGQwMOMtOXimjCAfNboBJQBiHxEqGTYFQFwwVvhIwyBCsIVhzrLzxrHRtOhQAvItHtXgci) (seq (seq (ap i HhDgZkOazRrFUZoDimtDyXFjiSTmNchjHWFrssIHjLbbTwsKYsmoJZUAVjofmijnvOeulbIVIlx) (seq (seq (ap i AtrSHM) (seq (null) (null))) (seq (ap i DmXCIvqmOyGwHeYUNTwyUuflDyUwhDnYqTfxyRlIHDLYHrFVcYJmcglWthRIpjuDZWWpdCnBGDMgocSZWBRhKCYvuKQJeDqLyzKs) (seq (null) (seq (ap i WHnZmiCWiYvDceeaXrADQNKMx) (seq (null) (null))))))) (seq (ap i RCSfLefvlrFseWJiJWvcYbYVB) (seq (seq (ap i vYTsoSfTsosdnoNPZXsLpzAxUFwniAamFzOmGsfFOSTlGOTPwVmTgBWaexXDSuNPumMeKOvfpgjYpbMOG) (seq (null) (null))) (seq (ap i thXvIzaTvWKuPHKYdAXBsvfYGjVtaNnq) (seq (null) (seq (ap i hNTesfvLtGopXwKKmnaKZTRuTmOTD) (seq (null) (null))))))))))))))))))) (seq (ap i PxpfjBNLPJfzSev) (seq (seq (ap i FbToeQTzfWYOpwrnsDejmRcydsPNrFpcYlHDjykdlyDEI) (seq (seq (ap i tbkl) (seq (seq (ap i AFvVJecatBkMXKuAIGwFqTjMtNtuFZfOiDXxWJLshHRVgmHOObsFORkPczCHOfOZoTifbgwZaciLLerTOL) (seq (seq (ap i qweNDGKtSQdmopObDKcuYCkbLEaLrujfLUnsLjeNLlITXJmaVmwkedVliCFelmIcoYLkEbBouQtDSbSmXBGCRFXD) (seq (seq (ap i MerNJxNKWRa) (seq (seq (ap i hh) (seq (seq (ap i TXDhYrNYMjTzFwdUZzUBfE) (seq (null) (null))) (seq (ap i oXFLyAievTIgYaayKCRmOoggmJTScYLBpmmyBNXIxoxOfsrGOUQHlTMBLaLFcThi) (seq (null) (null))))) (seq (ap i FHlSfGSCzMWbaWLtCRsvopeLitXDcLtOQmnaHOYTOAzSWdbcKygVftD) (seq (seq (ap i KKbGaeUcDPiBveeQfqxiPfpZQwjEoaykArMfZuQLDkZoCUFceUTaDZhttXRQkKifBMNGstdIrEKvAvNMIYilCgBCdfONXRC) (seq (null) (null))) (seq (ap i ioDwIbWTFPjCcchyLfhLppoynAAJbxYzvQUWmuzvRFssbAsgJhrgjGJgtNMQduAbu) (seq (null) (seq (ap i DAvHzxFiCwYmluoErJVstnvUyLoNPGFVArGpCqEYgRAZIIOvbDxUcNqJcshumasPgVwNMUFqhNcESSIQd) (seq (null) (null))))))))) (seq (ap i ModrJGAphcmZQilfnLHFQZCrtdJOMSPZRGwPrvjjvqSkjyStRFRfU) (seq (seq (ap i gpfFEXEDePduuWoXtimDmsnHDHXYIAuWbUOXIbpz) (seq (seq (ap i ApWnHiRatLcKLzSXdpdtbRTqpPfMaXnOreosmKOSQMzAxhgJxHOtJKqqIlwQjP) (seq (null) (null))) (seq (ap i rlIkWocanFmKOJLtWbqbxgfgLgNOOUpGiwiTOAeybKjOlhZqTrjxnxlZOVLVcEzTNpNzoRTqVNfwrYqCyDqQpoBUz) (seq (null) (seq (ap i asvSnJtYtoBpQZcgoIcUIryEfjaxcvTSMyfPovWULejxbtfGOcapMqM) (seq (null) (null))))))) (seq (ap i sgmrYLsVqXJSSUNvmlrBgMGnWqhkpBHOsnWcGDoJESfcP) (seq (seq (ap i sVJCIUpOXLOaQdYMxvZCOZwnGuJRdbndvVhXAPDcIeLrNL) (seq (null) (null))) (seq (ap i fZMhXcqAsRbVYhzVUzqmjgVBUwvIhksCvDMAJtMdLtfwXlhvDOAalcGcsUoCjmoQeeFdnk) (seq (null) (seq (ap i cFORPuBxcOBjAlmsM) (seq (null) (null))))))))))) (seq (ap i jxQaMzqcGDsmzypZdexQfQgNGgGWEQsWeIrlsznzjCmTMrzZRsdoLMUqOzjZXyrJEisPQPFENOMkveCwEUxbAKZZqEibQteOfT) (seq (seq (ap i kEkQiqjBWCucqBKcKnMaBYRZMjASHCVgoUmBbIXgXsuaF) (seq (seq (ap i OSlshLwKIVWCtLpbDKkanUcmenBFWfWrNMwbPdDwSqqsvTesHaXudbOQGtMkBtsAYqjWhKxWDVMqLrIHDeEoHlmKkWtTPjh) (seq (seq (ap i QISCpVLbaCvCWegfpzgJyXEYiktlIhMZr) (seq (null) (null))) (seq (ap i VcnMREDnAWYPfLcorKGimXYJjDvllhpTvWHAPExrCocZtdrkRSjsxkuqpSSXzkaIZNPWMLJjzBaSPcUDdsxYHyMPKqxHia) (seq (null) (seq (ap i ZcMBmYeyxYhqmCYEnfWZohjfKdUWllCEhhZobbSZdSRUlRmCoCCUiBpTpoQuakHkzvPWHFBIeRTsCgsgWdQELICgFEfFjcRRtZ) (seq (null) (null))))))) (seq (ap i YeFWSyzamdPpYExQpQnlhOpvodwEeNStrarVpgWaAOi) (seq (seq (ap i JetPLZiTlKeEXKjsqPavdLtoeUswoDGTkiexJdppUqMheWQ) (seq (null) (null))) (seq (ap i hYsMUWJoeWyVFUmMZNlsLEffPjIyrHOcCaDDseeLc) (seq (null) (seq (ap i BzCkqwBaViCdvuvfUzLbCzbankKenJp) (seq (null) (null))))))))) (seq (ap i rp) (seq (seq (ap i orNGxQJJHoowvbpryQwWrMWCJwiwKfTcMZoJVSmzcrnsmUNFWRAuNfsRfkgrHVOAYQFkNIShwEKGdIscujCjUJt) (seq (seq (ap i WkdUeNRYHduSmWwpXUBEIwIAqanbsaSUcnVsDQpkw) (seq (null) (null))) (seq (ap i fZ) (seq (null) (seq (ap i DvAiBhCCNqwpefBgakBUTLWsuFMsdgmDgwdWJpjScFhDEqLVcz) (seq (null) (null))))))) (seq (ap i xYMnnZwblqjDyNqBcUYFwZOkiEkLsGpeV) (seq (seq (ap i otnIWTRxWReIMwQFEydcZCWmBGKeedIcmBxcsN) (seq (null) (null))) (seq (ap i zoXEusrHlBKkWIRRnuKCOieXLBKgLYtveoiAvWtShToRKdUObNEZfHifVtysACuPxGxaIkuacYTERBdDgTawbGYKioItCzbHnNiR) (seq (null) (seq (ap i tPVEsrLQNrbLqpemPLCvRBqmZLcZazvsgiwTFxrFuCtJItedzyfNRTONUehuMzbocAKoITkTELHixxdUqdeBWCoVH) (seq (null) (null))))))))))))) (seq (ap i vVouAzidZYDdwvcBOThRigbTBXROtpLbydAvVBQHMKgVlHTdcDxIFHgURZBcdioLCUgpNgVryzKPRNaCFlVbDm) (seq (seq (ap i ozUvAJRNEFoR) (seq (seq (ap i XHpyPOKlpfHJdQVO) (seq (seq (ap i CPkzlrJweTtFmixNPEsBTZuVeymYqyvHWOaReaxBpjBryatkHCGlwalbVbPwPSXhTqCoNQgIMeMGLhyq) (seq (seq (ap i AQupehedKsHcGFupZAbGGPSffO) (seq (null) (null))) (seq (ap i drhtaiSQdmwOSfMItmfYOjFaJiaSXwksqyCbwOnOicBHgJDCDWdTWn) (seq (null) (null))))) (seq (ap i rlJRGLRzedoSpgUZvGAlNewNhYUkzKYWZRoYXHwTzqNcaBUWitRraZEpwzGKjlhSi) (seq (seq (ap i ORDCCHwdiupeQhSudPTg) (seq (null) (null))) (seq (ap i FctjQsWofmUqPJJuzAUFgyjamgrEVdCfMAXmyeaFLevHHNbfdoeRtrkypXiqLLAgVFxipMxCgTNJaZYvPvvYwUNmq) (seq (null) (seq (ap i yjkBhJZLXEYQGZRMBtzNHigg) (seq (null) (null))))))))) (seq (ap i zmZPQqVIKsZLKc) (seq (seq (ap i CrIawEmmkWmtLnTXyW) (seq (seq (ap i SrGOIYusDYLhygwESfOKcFGmxruImf) (seq (null) (null))) (seq (ap i HXMcwbZEvYJOeBRZyGlGoCZrfhvTNdPprgGmJyYHvapxDVzuEdUUNQnuvSfhgXbeCjjIOfbeVrZFXO) (seq (null) (seq (ap i nEcssTe) (seq (null) (null))))))) (seq (ap i RUbtZUcKTfhJhFetgOvPtRiUWXIkbMAKiGwavVgMyFZRDgDFfjzyuEmKjunyPKCZZFyOjdQPA) (seq (seq (ap i JnrIeGLtarqKBfJVIPNWbkIpQVXhTHlyyS) (seq (null) (null))) (seq (ap i BwvVLtHrJIOoQADvhZnHfbwavWMqVUSOIOBxPinLPWdVFLPtZbwlVzyjjpDxdcREVzUEGZjGWSCgNegEpuFqjvyoQGusJ) (seq (null) (seq (ap i iyBYoRYdPLUsJAgpcccEGwZyOOBMAvHZomUFnIqCvPrTFs) (seq (null) (null))))))))))) (seq (ap i glXeSDJrmSCBPSszFRqPDDiSKyTMrQvTUyEOEafA) (seq (seq (ap i AQGGjyxQIWfMxnBpzVmkeOnOjFCtIPX) (seq (seq (ap i AiqnwyvBfRqLBlJywaZVGRSmGGkQeXojTtuHUGC) (seq (seq (ap i agdzPreMpwKNjzDuQfYwH) (seq (null) (null))) (seq (ap i gTazFgJZKfYWkztvU) (seq (null) (seq (ap i olguCzOAggjzfgrhEXBcLVlJzCEUbUzYRtzR) (seq (null) (null))))))) (seq (ap i kEtgjohQoMkGWAhQ) (seq (seq (ap i COsemTsgWZsEiBVHJTXdQUHwxSdfOVFASVIslgwfOECzkdheRKBNHVg) (seq (null) (null))) (seq (ap i wmnfvziotBaJCowKPmSfQniNvNBAOLIbiTALIO) (seq (null) (seq (ap i JaHbUOAoThyKpifztkzWjdhqcroJmoA) (seq (null) (null))))))))) (seq (ap i aman) (seq (seq (ap i baPG) (seq (seq (ap i pJpoJkUmikaGhyauRXycJbwKmVuZWItBoOlsxzooNwY) (seq (null) (null))) (seq (ap i laUXstuKNDSxSiHrjEEicligLlxjaajqqCpgoBypBbqMggFuVjP) (seq (null) (seq (ap i onRKFLsakFcHa) (seq (null) (null))))))) (seq (ap i GoAymWqvMPKaNgBseDnBwmosivzOnPNXCWpxKLTXyzOtzoBOlCdTjthuy) (seq (seq (ap i SOZVhTMWNVXRjHwfRFTkqHRYfuUdLMSDkwkDCvKRROCrEEqjUficnhsUQscNmtFUAdRdoExqEKZKUmxvymhA) (seq (null) (null))) (seq (ap i RRTLcjgS) (seq (null) (seq (ap i jTPOGGIdoGaPmZJGgbpWWpNfubSovHDtARymxuzugDZqRWEgstZFEtFXPkhqvmUekGZNXekXvurCUHhYNAiMpjS) (seq (null) (null))))))))))))))) (seq (ap i iATLLadYwmekqOHRmuIhMWQCwuDPlQLefFQVNoZmIBmhvqSGBVbMXLeCfVQqwbIeLLeQOBjzOATowkVNxefaNuPIidADjaTrlgLp) (seq (seq (ap i TZqCgpyTEFAzhUMLJhTCfUDzCBOluFrUNmmvCXRUqzARLIqHWwASXeHPrzZDlGJ) (seq (seq (ap i wxE) (seq (seq (ap i qkXFsrQiIgVaUZKBFwRwyTXlgKMgRTDwHKxjdnYVZfTlprPfgm) (seq (seq (ap i YLcNfuOOx) (seq (seq (ap i ZKJkqgWwoexKEZNnlO) (seq (null) (null))) (seq (ap i jRFPIudhgjGHYXOErqEyxyhuyiGHpEFafBnDgMdFkDhWiIClJyQpnrcgGAzjfHLGiqpdsHKERDNaktFaWGXb) (seq (null) (null))))) (seq (ap i spriZzAOOVHreUYWefxuDSslBRtMfnsZMSIGiRWYIvAqleMYzAyPKIkmEzRQFQuRgwxySKNWnWQyQvrCreBbKjWsLTgookdC) (seq (seq (ap i epgkgfWYeIzoOHuPVgzuCPTzKWTKCQwKDKYZiDtpnNUnZXUeUQdkZUdkZZadolXQRzuacdtCCcwjIdxZj) (seq (null) (null))) (seq (ap i paDODLWgDgGdj) (seq (null) (seq (ap i wodWybzyYEBQXGSitoFqFuhzExumEVilCMJpvqSfctfs) (seq (null) (null))))))))) (seq (ap i qDlszvsKrxvAXjoSHTSlaVGLzOIaSYDGMUvSssOrQUreeSOQwoWoJxuSwReHNjWuvLHvFkvOTcICGwcBbVKrHPPGABzSUNfOS) (seq (seq (ap i EALmRIFTcewpAfjvgVcFrFmlHYevuiKOtgxbgfpPVJWaSfzBuaHRdwpeHlpvDAdVm) (seq (seq (ap i gGiEmodKevDpkNohenNHZRlzrGcxirmHTbyenfLYzZVMMHnryjNLrhdxPkiDPolYtzfoiIYgZBYcpqlrVVeofKIhZruLCoXrzAWI) (seq (null) (null))) (seq (ap i wxbqXAoqhCTcIcJEodxhdhfFhIecMOSo) (seq (null) (seq (ap i BrWLiESR) (seq (null) (null))))))) (seq (ap i eXsaZfCwvfxZTgkOAZJCsojYFVGpNrYypOIYoYPGIKbobCihmzjHac) (seq (seq (ap i DDRHIXDKpazpPfd) (seq (null) (null))) (seq (ap i QoXGZoAvMhRMAKMiSaulUuCHdkywsEbZLrkt) (seq (null) (seq (ap i QdyWSHvWxYnPRJtmIhTjMlkEfs) (seq (null) (null))))))))))) (seq (ap i XqDFeGHEucGobvQXdvkXYtjMmNAMUQfMNJnOerGyonlvWXHvdIWiMNrPJStTKLbzagKkluCrtCxKcqZva) (seq (seq (ap i AgcQIQPwFNrgIKGoBjdVgiXtGxxTcQaodzfvygufWXlwtqgvCbJgxMidQeBd) (seq (seq (ap i puke) (seq (seq (ap i XNDIWrpDKhXDOBibkEOcFYsTv) (seq (null) (null))) (seq (ap i JhTcWIleaNcALHwUfF) (seq (null) (seq (ap i lzGmWqzgLwwJawGHfcupUoSNYNHJazhcfGeEfmklCUJrpEUMtFQZxtVzuawC) (seq (null) (null))))))) (seq (ap i hzaVbxqDOYha) (seq (seq (ap i xURrcWQCnhvgganeKHMIhVHZQSqQWxxzTEhKSRoAuimgbhtSCQgfhENhvQdAykUYBeNvOxZvJUtmBZhXohIfsJJoXatS) (seq (null) (null))) (seq (ap i jODVCliVWDekqLImGjlWukJmvwAZIDtDZLWFCbUNnyqhppTttVkCyxVLhujfSgXyENoiRfPDQ) (seq (null) (seq (ap i giKHdTyEWiMgxLbSDMRTQGRclbMVQYuAFQUOFDRGWildEHvQBSYHNtlCjcxyAHkkLLODWIQJeqosyJxfrSH) (seq (null) (null))))))))) (seq (ap i IlROMHjqUcqtsa) (seq (seq (ap i KgcqEnuRDFzthypkujLcBmOAHvXtudbKcEJoroOQBXpbx) (seq (seq (ap i kntrhNPEkwHVSgkUiGzZEonONLGwTPcZEfACWCsVGrhOLVDsSXXoebvfmWHvkHCZniyLuEChit) (seq (null) (null))) (seq (ap i WONvBrQyOTEscSRtdKvjPrcHykMbHumrFUNdmtD) (seq (null) (seq (ap i HwVKEhJMjHXFjCFpEefzWjkiNPGpxxtXpfSFcXhsyMCRGSfiUoSlkKp) (seq (null) (null))))))) (seq (ap i BIHaQNWDOlsNTNEZQDCRuvfKaiHttCPFfJKJcRTxQdyFefpkBBINDPoUuDSuo) (seq (seq (ap i FcrQcKibfod) (seq (null) (null))) (seq (ap i nppMjLn) (seq (null) (seq (ap i SjAOPYWKdWcWUZnNXrHKmFXMwmxspGBJEQ) (seq (null) (null))))))))))))) (seq (ap i JTSSScgNHRiIXyAOBPsVnQuTDXSwKfZ) (seq (seq (ap i rmcTDRiPCAbJngDEkFtHjoctDYPBLSXvXpDHqHNOreEIxqEd) (seq (seq (ap i MxtzeOhUJfHACOgzXSpMeUoPwrJfwnBhmVmTeLtHzEnIXijymgwsqbJKZHUfBUMDrhfSeDqLvmnMYplC) (seq (seq (ap i KbLzGfLeZcsxgqFTZLflACsqIAqvCioVhCAOvSBiVDKbmlChIVxXdiYUJoZBjJCcnDBRK) (seq (seq (ap i tfEFfGKRrAuCRKZAHPtOEdqnzc) (seq (null) (null))) (seq (ap i qBFgZFLoQTprvPMiWFyhdTtDyyBTMfIndsqrtGNCxAtUuQMw) (seq (null) (null))))) (seq (ap i RYnkLbwIkBtNsAaiQLcHNFcaBnpheCUeEkKbrVmpPkSBtFcafxyDtxzuOgVKqmZ) (seq (seq (ap i rgMYPyehsIbbPTUlvcZvnfUOsUiPIpYkwUURxKGDTjaKfGfstxRLCdZmMpVixyqPdsOxWDPjnZgIEoHBdm) (seq (null) (null))) (seq (ap i nXILrjTVTEiCGDUViIJHAqFIFMUnZXTCNMzir) (seq (null) (seq (ap i akJjQbxUGCWuxLeTfYnPddXTMCcraSlABStKgTBUuvGqbsNEQprNCmfXboqBXkFqJaQuaKqhYLqi) (seq (null) (null))))))))) (seq (ap i vYWgYDerxNtEtSobtANTeRSOtQxzyuJfXXnuNpiwIWqLgVBcqiapWsmpiwcughFNtQfhjzdiaLJtMVITeaSJ) (seq (seq (ap i sXjdZcjzICVYuIWVemLzMNprgGKzCRShhpyzyeTHcgnXLQNSKBZkYlWgPkSiyUpDxrcDZhogyOtFIgrKQO) (seq (seq (ap i hmtcZbCpKPbUOKVWteYXcurSYRcFWkGzxwAurhzYcTzxDfRiNdccRgHdZWSnvjjWixcrd) (seq (null) (null))) (seq (ap i odkMdzWwxwhqCzAMkplsIZdwFKepwyxqsplCnLnBJYNWHBrzJwgdDbozVjFQiuNJeLeCgRJkHEKKPjIGXclybkuTJdFVN) (seq (null) (seq (ap i ozYfBWAlvWAUWXUcwExRNOmPccckVwesDUhsNQUSIObyONWcDCJqNcLjnaxtSgbAJjnzXUBrGRjPmhMCIiIDR) (seq (null) (null))))))) (seq (ap i wnwYwmIRrFKNhSANFLpdVSTcWyBbyWrJdLHCHqwtlVQRnJnDqEqNiqbLyThwlnfriwVqxsvjZtTctyPbjcG) (seq (seq (ap i msrZEWyFPnDTkAipqaCUAbbvZFkRsBDvHVFY) (seq (null) (null))) (seq (ap i ocktJmdDRZowfZbakrgKtOKRHe) (seq (null) (seq (ap i tcgFIprtfXFkmBSIoVmSkPDMxtDCYmigQnkrxntUcHVsfshUzpfJLahrJvhaIZcwVxBCmSYSAoSFKrpF) (seq (null) (null))))))))))) (seq (ap i OibMbIjlFYlaAalQdlAILOzSIBmkZVCGVNYfwghUuwtABHOpqiloUFrnzyxm) (seq (seq (ap i JwaODxBVzmmHdCcGmjCtTkNBLszWtIqwmXHTWOglXwqncxYstdLvRZyfQjnIFxHNbHTrkWhnWiwfmnYksZAy) (seq (seq (ap i wPZrMGoTuXLlOUYtkaueYNJGvTkZgOGNytsZwSZZFHcAodaPBU) (seq (seq (ap i NbyIyJICpk) (seq (null) (null))) (seq (ap i yEyZMWSyYLPkNmHJknlPlkXSIaojALzLMwsN) (seq (null) (seq (ap i CgRnsBkOmRCboVZFJ) (seq (null) (null))))))) (seq (ap i utzfmuMYfoLCzyFETplArE) (seq (seq (ap i safBiiVVUseZHKjVLXljnnQZahnGogVyNmhUqGVwcwKLpbZbTkRQwcvRrRyHMxKzvMIWnugtBxvviubqAxdFlSzgvIEGBe) (seq (null) (null))) (seq (ap i sLoeaJKumQjVFcEiXOAnUcLmkcsXhhZnBjLEXwjOqcxWj) (seq (null) (seq (ap i jwyGHzhLnJDvqHYmHVvGKioxfLJKAcjS) (seq (null) (null))))))))) (seq (ap i LRCrrdNMbIqSOQqksXTTyPLXbVKJvlbtvqSNKCtmzQmwGVgClzBABBshXOhbUnvomKdFFiKLSsxiwfKsTlYwWtbXJt) (seq (seq (ap i bAdFD) (seq (seq (ap i DZwzYgIzDsGXERBhxkVrZktbbOtcdufNszqkuNMSDcwMZVeyxUNBNLzYGCudMqKszycwlSUPuroJlaiU) (seq (null) (null))) (seq (ap i alfsCpGZxmDsfeKlRgadybCrTifWftWtrnXidaMjxkLPHUxJAZaTpGqQUntqTrJyFxJohYjBhniMqvZpHAYXfKncJne) (seq (null) (seq (ap i lYvUKhVFGmIobrEIJHwdjWCqxMjeWJHwNGnZNZdKepnmCbQdYpebsoIynEGvxvwtzGH) (seq (null) (null))))))) (seq (ap i HUTqxGAszqWCIAISYqZLLVpqqLoLoUNZjlSFPHhEJmzHMtiRewxdPiKLhIhXjZaBBOtEJFeOOmpMpfrYSxA) (seq (seq (ap i rlSFwiuOKiIWDGmUPUzJPrQEAVcuTllmSVPPo) (seq (null) (null))) (seq (ap i usblohDtUYlmSdLWWYFbLnLrPBfdLjzKoWcoVYSwpTfCzIleMoZMOVVbvUrOyBmNhdiGAfUQxnycNYCgFsDQBOEhvyFShtIZZ) (seq (null) (seq (ap i VMThgoWzELcPlzxLyQqULEZwurbYPnpLvOIlystNuGiUAlRQOuoOBChzAXbNn) (seq (null) (null))))))))))))))))) (seq (ap i ljsGwznAzeaSFQ) (seq (seq (ap i neLXrHQJGKWRqwZQExIGljWqlKbEMnGXodllfTryCzcTCDFVKssLZDyMNXQFLyCCVSItGuVwrqDGURLYXFiI) (seq (seq (ap i dItgfbNEPsVdljmmiIqePYDoOGhBUSmxvbdoFaxtRcDHRJKAOuBNUCJjeTOTaNtXPvFSlJGswanJMCTxvnSLEaMSWMBxQJeSqAJw) (seq (seq (ap i kUMDXs) (seq (seq (ap i rUlSCIkI) (seq (seq (ap i ONJPWQpgxKMTngbhTEicvLjcfHqayQMHjWSmXgIhMPhgeritPzsTiSowOhzBAzQuypBYpICrhmCS) (seq (seq (ap i AiSRNONrCNjZBdNjYQFCDkBlgyovKkMQvNaVmMkhmSayNtvYPgLsCIniZ) (seq (null) (null))) (seq (ap i XHsgbEHBdMHPneDDLYtKZYLVTExpipZKMOiuUHibYxaiBGCfLRVNvFawdPzZxLgWuVdVdlmQDCpQEqQsMhbkEuoG) (seq (null) (null))))) (seq (ap i VyhVzhMnVoFuOpXmqMOxvyxfWhHRmpVBISGXYWirDwO) (seq (seq (ap i MPpLQwlmlWYjBtjUjo) (seq (null) (null))) (seq (ap i Op) (seq (null) (seq (ap i htnBpDOszlVrVeRglEXaW) (seq (null) (null))))))))) (seq (ap i yRErakGJuWOhaziwsTcjDUfXtxsdkV) (seq (seq (ap i RYjdMgJMtAUKqMGckGTprhbMeOqfWUs) (seq (seq (ap i mCXaENkORESvvPTzNNTRLTjIdpWDBlNlRdsWJOjOinWGJtqctxVzEuRjLFzdIWqVRpEVHf) (seq (null) (null))) (seq (ap i YNnzAeUMYfzHLmvMYPUMaKpyvYgwtrvRKjtPTlPyWwvlpYxAXdajGcjbRD) (seq (null) (seq (ap i cyUNnlpkTvouSASIRbfsYPfadfRVRmwahoK) (seq (null) (null))))))) (seq (ap i yPiXvSszsCIiquXBJTraVRdckjKqIjqSbdeCyVthbszWyJYHXlKBnISfBHAwXGnXgTa) (seq (seq (ap i myOUwTnLyoOcSdUbPfWwNVTrvcVTafbXqHrKINHgkZIaELWtPChwgOdSGqhzIq) (seq (null) (null))) (seq (ap i JAtbDhVpxMFTsdOeywhYZMVpKCVigvYFAEJBfUpvbT) (seq (null) (seq (ap i gRuyRGpKgEFd) (seq (null) (null))))))))))) (seq (ap i GFZISgyYhaCTBwIfZVvQtuwNqMgExluW) (seq (seq (ap i jlbHpQwAAfWRrvSTGXZWKELLmrbCAloMnXRjYaBbHjfcqHySlOLBy) (seq (seq (ap i PQNfZLYOBxsSCzBwPiziIkfJOZVGTYuuRSSftHZPtlERCiLxNlijVBgCGOfzlJxcFtvHNKiqcWQlzCddilJSYkAHXHIq) (seq (seq (ap i poLVvATGplCdVacVzXo) (seq (null) (null))) (seq (ap i TzrjMwygmeyyZuXJznHzbimskeQNM) (seq (null) (seq (ap i dSmknKYNKKOvBGRJeDseDOrpibBNMIDuQytqBlHTWMnYKGyczwtJRwgeyrgiOARzsmXxYwzDEXQNlB) (seq (null) (null))))))) (seq (ap i fAQGdFwHPbjAbEqxGpklsiEolSL) (seq (seq (ap i XzRNajWvRHcyjuWVsijJEyXpwfAOpibhTcTpwJywePXAPreYGSUrCGOk) (seq (null) (null))) (seq (ap i ukpYGVhYzHW) (seq (null) (seq (ap i maRnDBZIAVstBirpVlzTcKmxpxjZIlVWKr) (seq (null) (null))))))))) (seq (ap i kvXBwuGwE) (seq (seq (ap i hAaKzUWhTHzFzuuQTWmVADCqkHllFBBYAzHAvcyWuoSbzaAJkMcHjllOnLyvxPCPLpFGZwBuotQdNxZtEJcEcFPenxUdjJJ) (seq (seq (ap i coyMqDeENqoJKoouSWfxeBqWiiSvfCZcyJT) (seq (null) (null))) (seq (ap i EldlEeEJiTZVJXywICbSmRMWgYyjqXcOZDCHAUcFLuJjzlzQGzAodNLPwOlbScPmcLhfZeUAM) (seq (null) (seq (ap i MxzIdqlsQeFEihEjhTyurLXDdPqEdNCeiZIYfPnmHoI) (seq (null) (null))))))) (seq (ap i yKKcZhNBO) (seq (seq (ap i TWAOiHpZfKzjIKdxAWiHPNCFyBzCXhehVevLZRHJLItk) (seq (null) (null))) (seq (ap i xGNdcFvOjktEzqjpjmbVUjkAhwvpoclpSjhiaPzmvVNWFywdhtnRAGHXXPVdNggSoLEYZSvTiKm) (seq (null) (seq (ap i ATYAVyvRukiWHsmjafpsLXLyDBgYMlEr) (seq (null) (null))))))))))))) (seq (ap i nKHsqMDwqCBPWjQaRTJoDKCfrNtJBWRbeRsUnMYEXhohwHJlcUjoAyqulDqFxIfgPBnOdKjCXtqgjuCz) (seq (seq (ap i gTdHYpfMfhseKfmdConXqYDXqASQBdoSCyIBvaN) (seq (seq (ap i htGkPrFNgUppPumPWSILFCGwljqfAConiHcRFByjKrHNxKwaEafOC) (seq (seq (ap i ibGRejGlz) (seq (seq (ap i qsWtHPCFQGqzczMdidhUoATlGRpZWDQRGNCblXRlTIsqEJAwQGtolEjnyyeqpFmFtuWxonoTZXn) (seq (null) (null))) (seq (ap i ExddKTRpYglttqSyTYpbdrjNDatfDYPgAFiWRRtZvxUQmqaXNRPCuvwRibnLDYzOAKahR) (seq (null) (null))))) (seq (ap i WCaOnTEDmNrWMhgWQDCRMnyruRCZuDZONOJkoYpRgIezwLroqGUjZkzyiDJsDcbYlduNNQFdALLDmKULrpbBXcFmMKcxHI) (seq (seq (ap i DEeBlmvOycKBzMPjNQIfMyTDlRQkEnSGcIofsrvcwpbBxjuQPgLHELtLOFnjjvTlGUXRsiQiVA) (seq (null) (null))) (seq (ap i niVNrYthLjTEqMjNefxnTbBfVunsxvrhBNxGryPJDaIbHFG) (seq (null) (seq (ap i JbmXvoqdPolnLhqJrWkMYyBnzzmvSOTgyNgzsrekqFMqajrwCmVlqNLngRJSVIzKEolyZbAlABANXjxBQSBOCrvWyiBkiIUQAGlZ) (seq (null) (null))))))))) (seq (ap i CZGrkWGyUwnhcNnrdPQEmrbYTSXOIYfKJhdvmioePMcLrPXSlrNiXwvhayruH) (seq (seq (ap i fRwRKNOfstmnqRCYjIYzjkmZOJkDZDCBZGXMjnaBiIWopOpAvjbbLlILJRQVoH) (seq (seq (ap i xw) (seq (null) (null))) (seq (ap i daDDFTMSoiKsMyTZdUzoMUfxjlIdetXsoqfMPBRHfnaizODk) (seq (null) (seq (ap i chTTOsLTYrWHGnJzaZgsfFbBLuauvVCkKAXojHojPIZYvgkKxXLKDhbSmJsnNGHJsgsZcjfmuYIlDtgkOKoxcHPbHdZPjSZy) (seq (null) (null))))))) (seq (ap i AJIDZofGYZBsYYWHycIJywDFAyIzvcQcsrBHBFxDaOrDwtQtzXXfcSKTmFYHPIoaPkDdizxG) (seq (seq (ap i yqOVXCkmhgoGrernVJpoGYiUHZHVthdQwPCAeffQCpWkWx) (seq (null) (null))) (seq (ap i CbfYeiHIyqOVVozjwaUYPfwmGlcTPqtBkppQOxIIczaXrfNBSUgGGoNaYrazlGWDxdDhDMOnZJaEKncCeTAMiZwzoh) (seq (null) (seq (ap i SEmPMEAkwKExWNVnlHjjJjeNXmSrLjYGcFBUnXWmqjOaFCLXqNFaqSxkj) (seq (null) (null))))))))))) (seq (ap i RlKMBZPKqVWWyFDeNdYwJwfqGxHKuQZYQdbwPGxPNQBMVHXNlGpEEMaqmXMNELUqZrGqvQYXFKOewsaVmdleNNpca) (seq (seq (ap i vfTmLdOwdRdMNovUsudDPgDocNFjPQTWVUEjXmFiFZbHxcrqXKKwWqkzyehjskgLXUUXnKEHSgUTdMNuxQgpTfnFAEzrRQdmh) (seq (seq (ap i CGoiHMmAXaKDzJEvaCXQSBZAiAqKteaTNJxGP) (seq (seq (ap i iZwnnrIuTpOlKkHnKMSQZjVbQBbgLwbEZoVauoKYQQyhIHdlkiejYFZMVAWidU) (seq (null) (null))) (seq (ap i DFSEuhVmjQfDprvtZNjjnpTsFxzWDcFCDlTGEHtUROyEfAkgewDzmOKxBNpgNaCDlIYdoZlcvJfjIhUHCerloMlfaMOENHMjTTby) (seq (null) (seq (ap i dgAoDvoOAvKYlVi) (seq (null) (null))))))) (seq (ap i EqBgAeXgHQRgjGgwCTlmrSYAqoKmdzDksudMaCMpUHQgYSnRrJyEFjDZeGoIOEoztXbccmWqcJGeTrxsO) (seq (seq (ap i jrXQRIJByaIOdCAOfutuafUFjSAJexmATXnlDrJSgUQWohYTa) (seq (null) (null))) (seq (ap i bwgemkmJgKkgwByRqwbYLMXwLYbeRdkBt) (seq (null) (seq (ap i rRodWkRxmjZtZECyfuiwUfQUyHFIoAguUjaEFuKFDJurYsWXtODSdnULBmhuokJMODlJwGfvhSxwbDPtrJEOFPOzdYFczAXQ) (seq (null) (null))))))))) (seq (ap i UUxbWBeIcHpvCrEhjw) (seq (seq (ap i NOEprlUYFznGVhNA) (seq (seq (ap i uuBUQGDdd) (seq (null) (null))) (seq (ap i btoUYumzGVLFvuyyjvRlhQNYTodRdBoX) (seq (null) (seq (ap i AFArXlufajBqNDYjhUYtEpqQnmlmBUDwFHOxoiVwpUIMWFJLjpllrllcnrFXIqufUhwCPSJgrTmVXezMNFfgzMhAgNPGlqZMO) (seq (null) (null))))))) (seq (ap i vkDAdnevaj) (seq (seq (ap i XBmzWFZRTqlvKSOKjarlpdhlzkcAhSyXaHikaFpJapFUBEGUsszPDmCAZmFCNiTXiTiOEsiPEasPagQtcmf) (seq (null) (null))) (seq (ap i uuQAmfOOSmLYhClhRgAqxFqzCTjreUpuBWZAzFyZdFhxsmwrLzsNNlisvNkENktkroiZQwqfooUWGInFbXjuDW) (seq (null) (seq (ap i fgkQj) (seq (null) (null))))))))))))))) (seq (ap i wFjzHCAvxhVwSzKIXcTKuuHglcjOslpoc) (seq (seq (ap i vQZKDFwDlPcQamKxsFkkrT) (seq (seq (ap i lxOLFcPvsvXIUtNfIFjasPdHEHfAPHKhNQinvpRPALfoHFdxQVPyp) (seq (seq (ap i EijwwzoIpRbVLxUYOPUvMrQUCJaLBzIZZlWNrfzbqiIANdWTJlICWkveJVVYPXSekwukiId) (seq (seq (ap i DLtPMtVWbOCdhqUMiJQ) (seq (seq (ap i mQsrNzgPKiQQZNCMBPOIbAWvTRuTQ) (seq (null) (null))) (seq (ap i yDTSh) (seq (null) (null))))) (seq (ap i AngLSQdzGSZmClgzJkIJIMPOtCeZqkWFUDJofQREPbSQBBMVyInivuT) (seq (seq (ap i md) (seq (null) (null))) (seq (ap i fhQmFtJZWgYrEMGgyCTOlyRUgAAhvIXJxUEXjQqcqCeeTjmAjHTBNLVWCXghSoloPOsUJF) (seq (null) (seq (ap i fYFBMUsMBzrtZzNaxuuqtBpcqmt) (seq (null) (null))))))))) (seq (ap i DmAfV) (seq (seq (ap i zvNSaMBlSVRFGMpyiSkOHyUcqvMcKRahpoBTEELJLDrQHiQBDaNYPfTQiKdgYcxMBaAzClnNxBAjBNvvHFVlInIeJSQt) (seq (seq (ap i DrNLXJAvOKKbOETIKfChIywQOREibaOVlDmLhrJCPnpQPAqWBCSJr) (seq (null) (null))) (seq (ap i tPVFGfHupYL) (seq (null) (seq (ap i UUnDfJWgnHomZcVtj) (seq (null) (null))))))) (seq (ap i EruCLOLRZuYdrDlKFpgHFhyLiWsiBWVoOIhabEwAgzcErmBjNIJEfyrQRyVONLQUNGtRsFoAAkjrmygOccOtzeoUqxZUkOxrzpfk) (seq (seq (ap i eWsnYIdvcmqxwRkmPOTEcDvCmVtSMZWmyGWJXVEqiMtjhujWgirmsrJHCsXhUaKZMgZFsYFEsMEmyDldefqzTzRTOsYDlBJJi) (seq (null) (null))) (seq (ap i ZWMbcNtwKaVVnLijowLbfKg) (seq (null) (seq (ap i uVnMhIwmvZrgNqGKjFcsdKBYBSsGNGjROzHwl) (seq (null) (null))))))))))) (seq (ap i VJORvkeajsnOkHMGy) (seq (seq (ap i RkvFXTtJXEHttfHJMZJFSYaJPoMUWimqwxQyyzrBTHCMkAFiyxWNAErpIPJCjONCAKMQCYwuDdZfJvKmCSPUojbW) (seq (seq (ap i wqiCLsjkDqcMtmcv) (seq (seq (ap i AzeIinEeONszNJygwSqSaPFxdtSLIt) (seq (null) (null))) (seq (ap i ucEuaXUNXDvLzSPwNzjY) (seq (null) (seq (ap i qjmGEYvyoqLWrwJzwAYiCvtwCDfpFEyFZ) (seq (null) (null))))))) (seq (ap i zEKDuvbwiiUdjMfpBZrgDOFyIBroWqPU) (seq (seq (ap i vxKKSrmeWxceBypEZioXdcAxnsIHjtKbUFWOebhrkFxSwNympuoyXZekJASDfDCPsfGsUGZOhfRcwLwsCbGOF) (seq (null) (null))) (seq (ap i QLxbGDZfCcwaHqUFtAMSpSDmifgOsndGqxjKoriOpKSyKpBePaFmiAAZZSqHzrutMn) (seq (null) (seq (ap i YYJfxtgdmpZrskCtAIsJYKWAaqFoGuGcrQazRGEAXnSaEuumcjpDBHtxEYLlUTlPNmGMJUuXbzmppkpHSMnCvOZApInZEtmVgHI) (seq (null) (null))))))))) (seq (ap i IQTSRMbbGtWahVXYsYmBNOfKscMTDsfChjSnCgHTVdGIUYXyLTqpmuvhvERNBENcWTrpuwcWfmwM) (seq (seq (ap i iqhwJE) (seq (seq (ap i hhGWgmJgwFaLJFlXfKdorkafZvVgFzksbMqFcDBPAwWFKJijfMBztKIBlrRQKpEROzCyhAzJmqXBjUkGTAW) (seq (null) (null))) (seq (ap i ZPwbioPbidUUWIySiSqxOfNkLKNsBZBLtyoOIkLRFhkQlbSnougsESyFvfDFQqzDovENqwuTNvXLk) (seq (null) (seq (ap i RYlkzDWCFerlPeEnpXFaJxXkIbAnzweahZH) (seq (null) (null))))))) (seq (ap i rHTCWpWTVnzMOBeEjLceYVrgohflfUISkqyTMuGmQTjSOetNWKNfOD) (seq (seq (ap i zbOMQPmCpXgNeHOcdAayOwYeeVzGEFEpQvznuyHBDQPouysDunJvWrZtHZWduVkCvblyxAOmSKVsbwuQTH) (seq (null) (null))) (seq (ap i okTAmcPkxl) (seq (null) (seq (ap i dwcqGHnsEgwvIKYdJzPTDyJSaxKaQxPhNJlgNtQKwjeELAYQqXykrTmyoNAqEOJhNvbBuaVEFiVoUsRoOrmjvcLwGUjFjKLeqEWX) (seq (null) (null))))))))))))) (seq (ap i EkLatzqmBWJEUElAOCagEzrEIGLadV) (seq (seq (ap i XlkknVRkRIbdfqojtDKYBZJbDBJejYxdueYkXLFdGaADkhIHqmgRFKCuAIMjKzPvHwyFhSRbQTaUf) (seq (seq (ap i mforXGNvlfkICxIsovNUYXLhkVqXClAlORqkcrlHWNtIXsyqBDOCGhQNSfojjaJsByTlGteRKfGaXdR) (seq (seq (ap i HABlpuOyRcBxnheqEcKOTsWwXZXC) (seq (seq (ap i GBgoiLvkixOOA) (seq (null) (null))) (seq (ap i iAMeKWpdfTNYYUhMaNhrNFLGMcwviKxHqzrcQdCpeOnUuWeLdaOeTdipW) (seq (null) (seq (ap i hhtWhvUgqHkWlIoXImmuILcVOZymQhyOdkWiSNnPSkeqidvKhvZiKBaTw) (seq (null) (null))))))) (seq (ap i yCpSgCECchdQkvrVHFcUtPsFAISWPWaZHAdFpByuevuBLAVKwLgMxp) (seq (seq (ap i qihuCnymFmhXcwRBnsZOFoGmQUtAHkxwUQmPpHkcKuARJTnyolYIxfsmKFzsJGmHcCTaumYgJvrgfNRPPJIDgkyLCupWALM) (seq (null) (null))) (seq (ap i bsRNGlpAUsgqCWEMWgBHjRXWuIrSTs) (seq (null) (seq (ap i apyyrPZuYvrOFSEPmtUkFgGoaKarsKGhjVNdHTZCiBVe) (seq (null) (null))))))))) (seq (ap i VrPHvltCXyEtGhvHTPLOnxxUROlbETRwnSPMkxaRuXDYffLlVaMtirDMQsmuhqzROcKaozvAgmPsaOQHiKdYwbpr) (seq (seq (ap i FaazVwumhjMNhMRHiHUnPFg) (seq (seq (ap i zRolQVzNgWkicjFFIiDfwtCWwFVk) (seq (null) (null))) (seq (ap i eafCNqTRFoExpcdVddfJvPColePfWc) (seq (null) (seq (ap i TKrYGppwiNFZkmP) (seq (null) (null))))))) (seq (ap i eFiTGSjhnpC) (seq (seq (ap i bFFuYWYBmkRedkpDvORAGhHNVesq) (seq (null) (null))) (seq (ap i VaksjvQGhHSuOAKzRGbzKLhCoAIoYGkxwYd) (seq (null) (seq (ap i NlaNUPblQXqnASJ) (seq (null) (null))))))))))) (seq (ap i mwlPimqlDELapYYChSNtOkxVlaiuQbgaQycvHdabAbeKqAllFgCjEntkChOQDijxoHOQEFbM) (seq (seq (ap i nsdwLyaHR) (seq (seq (ap i eGzafrsBwZesnGyiijGxjAdRGcqjPVuhvEd) (seq (seq (ap i OIQjfXpaBTUKStCJNJZUvyXoizgSjcK) (seq (null) (null))) (seq (ap i KZhNhaltYfbQqOrNBiBFBlcIPMcsDldfPPFRBpOQceIIwLseVAxXuXmnPzvapVvdQvVTqUXjuwLGPEpyKzIUYj) (seq (null) (seq (ap i nQuxDzWuWlJydALJfKoKPJrRasuqONYhFavQjPUALmzGGLbhKKCdWugsGNfBECnFBWeyeLJMUltVcoCNgwyPNkNAGr) (seq (null) (null))))))) (seq (ap i WUEKTrfaYrRkVBCsbGNbXyWCEoaDxpotruFeosIZJsMQjjntxd) (seq (seq (ap i PEtNlCptizTqzbBBwJcfRcxEuztaZGaaBSiBMhfruiAGhNEmlbeCvVHpbdtCzWhDuiXNTmmDdMy) (seq (null) (null))) (seq (ap i mKhbYpqU) (seq (null) (seq (ap i SYdrTIzYEDpfLoYuCuhlOgavydcLLcXKgbNpZRyOFRVqQsnkOWPeuqiLpQpGondLpyrkVlhiT) (seq (null) (null))))))))) (seq (ap i cCKIxqMTPOEcOSSPxHQTHcfupZmEtNWOikVHWYKlYPQPeDDZebdNaqVSuRDxeDTkPOAdqlefmDoc) (seq (seq (ap i pmptYLkMQLKMmErqKxICveNPGGHdNViXDGqqGChBCMnCwMLsMPumFJDEOVJPUudrGAlOuSXqF) (seq (seq (ap i tLJSUYMsfbPkENvYzqjtRrKQqaMZNKElVyFMHKRlMcsMwbtHFEuL) (seq (null) (null))) (seq (ap i NDOvQlseeuSjjNKIWjdXXLjCbPAAHtUllFgniOaUCHitVHEgHgTaAuLOSSEOIesNzQrvFjJSXbjHBJvWeFSVWvmLQtjUNgN) (seq (null) (seq (ap i BJTYBblpCiQRxvyAfcpNkoKZmQJnICDDzXLvYqlfCFLrIuCTfXYuwtMe) (seq (null) (null))))))) (seq (ap i pkWPkZexXCGWySAsppHedpDMXhvILyJJHwuuLIGsJhSrnQsGzKAyRJhihmMXKvBuqjIdmANHvqsMboOZJ) (seq (seq (ap i YDBmsAgSLTMdFxyBNSUUFyKHELTeLWrJTVHlVPRVVYeIRRdzAqMKdyIguruHMT) (seq (null) (null))) (seq (ap i EGEDvTLOvRWAEPScrnCnrDDWFXyTPTMcNzLrsKAaLJxUjqXQbzqKwVxOpRHKElvapnNialrAfMUyVyZQnxbT) (seq (null) (seq (ap i hTjsJIwTeIVqRbythSGLZilxPdvFvMoVwCLLKmsUEUEtadAYWPicnQEcOdMqozgR) (seq (null) (null))))))))))))))))))))) (seq (ap i eNNIwQZBpxhFRgxcnTTxmsVVMEtqaGAEZemENcCcryHBqXMkLLcnixO) (seq (seq (ap i HxLgNvmfaVIEyVjQGjHPeUttaBPAdLiyWrjdZMOQfFLyczzdtGAerKiZbURuCVxFhmftQqlxXDbOqVdNHNOMuIYnKO) (seq (seq (ap i oFcTTQowFORkXabLxfpnvKIWKkguPsVusxOiha) (seq (seq (ap i tfUiRJfBGZNOcpUbcrvmViXoeRFIMTfmFGxFjRJbkyGQcNRmtAVKjpUt) (seq (seq (ap i dCGKOiqKlzRcRVeTbPQoFfsOKJDlRnTJMERXtxjtHuzGVZmPJJJPB) (seq (seq (ap i EsdUIaDLCNypLObGSnSnRBbpKPlwVFQdjapjZPEzgPcdcuuDWCtokekhkksLznERTOMDDA) (seq (seq (ap i TQWDvxKcXwJNoKESlkq) (seq (seq (ap i LXElEMCmKJoWdsDxfSUcttMiMeuGMfumBOWeyWYLYdLyWtTyVTmOdmFnsOthYEnAfTYhpvFyTDP) (seq (seq (ap i aoGTaliDkWIHQSmjaOzBxbcdqLqryiEuUMchOoLtjgYiOeRMIrqvCgESOmHbxUWENVBfyCCHkpPffbf) (seq (null) (null))) (seq (ap i ZmEFqRnBiwFidWxqnlKTLsoVb) (seq (null) (null))))) (seq (ap i VkmPoHuudZgXBUWVNnKmFiFwylwm) (seq (seq (ap i osqCbagqmFSJUmlwBYlvZRPxXbupGfyPKg) (seq (null) (null))) (seq (ap i ECkRbBQpDMISiwMlRfJNJwyTLQCsQQugXPRserupogauLwHKyFev) (seq (null) (seq (ap i ZF) (seq (null) (null))))))))) (seq (ap i qkatuXJXGhIovPyETMQIyWzWpRZaVkfFZpEkAUoXAdZGoVJlbaWlNnjbAhUfTsKGHCOoSqgECRetQAxqrbIovfow) (seq (seq (ap i SCOhxFptxNTPcqHSPigjtgFallcHATPYYcTGUyQDH) (seq (seq (ap i xlmKgJRIbfJpQDUfgbhymgykYktxNGOHWQViayUjjYEVMildWzaJ) (seq (null) (null))) (seq (ap i PnP) (seq (null) (seq (ap i tzWpSztuXXYrzSlYVYYTlGSlWLRiahRtePkKCcsSTsqPUFNpAuHzznvkXoqoIeSqGTPCmLQubjLiIXyyYazVaDfeyvATbb) (seq (null) (null))))))) (seq (ap i zaCBWmPxDLJkTAQCOZwF) (seq (seq (ap i MAguNvgmnvZMORlXelCFiceEnjEkOdNeuBNSuGBCngEtdGadkLnNSqHiZJGnQUjaODZAJCattQGgydRyaeaaWlFcCD) (seq (null) (null))) (seq (ap i UrxPxfKvDBAJgl) (seq (null) (seq (ap i QeeJvaaxrpgHpQgSQVWONTKesSQGeWiwPXtjrYTjUSBlBaPePYTvYbsnMrORBTrDxpuREJjboOLEFOQbKXjgscRDmd) (seq (null) (null))))))))))) (seq (ap i tvykblaXhBdrPzeiagMAGAaNH) (seq (seq (ap i rGTJNngAsHZmMnHkpQCwsGEqpePjgBymeuoxqvkoFatsvGpKIHSLcAHEcvHuqmMnZoiJJyuguKqzvUZwwaQNaCvwAMDppyAzIpe) (seq (seq (ap i lYHhttMFYpjFFbCVoPQqpZuASvuKrQhhEszkcrjPBgoOFEsTJNooyeluBVYpzIbfEWuBSbYCzEz) (seq (seq (ap i fDYGcbRckjOxWomAcivHXdXkMowFaUwZwiNKvt) (seq (null) (null))) (seq (ap i IjpxSHJFBWbahyxlhl) (seq (null) (seq (ap i mQUFZVMRjOmSyUrryQKHqIFxiIBsYTWnhjRtLrmEhkNaD) (seq (null) (null))))))) (seq (ap i GPfdpvrEtVCMUOLLtTVPRihasPPibTRNqCQHaBCDqSHnTxvpsWWZrIwFVFoEhDnMEdlrtZWnAeIsSGBwGFIRbnCFdzMt) (seq (seq (ap i KWdHfuuvOKfqErwOaaC) (seq (null) (null))) (seq (ap i GCbJWmIyGvEAavIsFpACVKFQolPCkCXoWRSQmqZTrqORt) (seq (null) (seq (ap i RSrCGomjHhnPkMNAhNaFdsgpXZJwqNHCHRVqjlspPDFQSPHmcOIhvxinfvDlcKsTMjmqJzsbbguSzDcDbSGPtRhUqVC) (seq (null) (null))))))))) (seq (ap i MGZPNnVsxJpKzNuqlOPPnpsPtZlDXGsdaYiqTxaraPVqvXbLnwacdEUKcIVoLGQtTUrcBnlhReDMaaTpqkNkCbmurQJrUSD) (seq (seq (ap i IWUwXH) (seq (seq (ap i jDPciYOexeySYLk) (seq (null) (null))) (seq (ap i qMuhakAApkXzydoRyhNYfarJVLoOdHoMYgQXVZPicu) (seq (null) (seq (ap i CBoTlwzVXxRjaLB) (seq (null) (null))))))) (seq (ap i VajzxjNiwoVrbHAFAroznMmEIzlhZxmoAnCifiXBiWUFTSPTRTTLuTDnxtIPfXuOHnEtFBrqxZ) (seq (seq (ap i BpGZpnIrWbwhXud) (seq (null) (null))) (seq (ap i zOdqZdYXUQitayhRnMUjQVgAyfTKGIdXRzNmxYOhSvjKoQVHAtMEKoGVHyCOdOaGeAUrXH) (seq (null) (seq (ap i RKlkhTFGmJQunZENTImnNktDHRZvgbUltVjEqqQcdSUHyrJcrbBNFqJevtsQxokngxcmtPJqJPLXtHFUMuXHmiwAYK) (seq (null) (null))))))))))))) (seq (ap i swpYbLAqbGPukfstJsvBZIdmJb) (seq (seq (ap i nIlE) (seq (seq (ap i WtMsbhWxoBefsertGmPUaJQxyrFiLGVPUMdQkK) (seq (seq (ap i zsWmLvHHYN) (seq (seq (ap i bhGuWMNUgRSrzLjJBXTDj) (seq (null) (null))) (seq (ap i yjsRMQmDsWaaGbbClSoPVFLsVsqNlKpErhcHzVEzeRezzjTaUGFLZ) (seq (null) (null))))) (seq (ap i PcPQPoHKPEtClMZEWX) (seq (seq (ap i vzhZAzTnCQYoMHuGmxYtqVSBwrqiQhlvLQWaAxDbPpXQnrAramszyOuCGugjBEClyoBsDtcgIxUyPyTiyckYsZopxpcTA) (seq (null) (null))) (seq (ap i yIagBUeVvxZ) (seq (null) (seq (ap i gmnvHBCjPNUqIBQGuixIxNXIOeEGFeowVspLXPgHgbCAujSBEOsWvRo) (seq (null) (null))))))))) (seq (ap i wIaltjqQQZuXceZFfSuHPPllUuKSJiBixlpKgqeLVJANbSQNtJeSmWNMWc) (seq (seq (ap i PUH) (seq (seq (ap i szxrfbawBhFRHgQlmQBDltQXkkSVqMwQOprwqRLkzXnjesNECXiVTTicPKqGqNNVsAZZcBTgrwWAyAFmbQraGNlHkw) (seq (null) (null))) (seq (ap i OhRMhWnUWSQDFWjZmvJVIpRItYguzxFnzBvXDtxVoOLkwSXSkuwBeRPqWShhpqNFZOqhdbvx) (seq (null) (seq (ap i aymiEgiIRSmgKzeyHZNuTiJZteviiWZyWXXjWCOXTeOfWvbROREYFxsSohVJmrQIISzPVW) (seq (null) (null))))))) (seq (ap i jdZKhOXctFzrjRWMYTXwlMdCtSTiDxhTnKrDCLnyxTwHukJEkCqrUaKXVCBcldCBWLx) (seq (seq (ap i liPgoWaNsBqJxvECMcwVLffeGELmNEuHYwAwmNyLQiCxKcEQwEpQXRGBUNO) (seq (null) (null))) (seq (ap i xKPMbPCfkkBkderBCSPE) (seq (null) (seq (ap i yAiMwmtDSvFtwBaj) (seq (null) (null))))))))))) (seq (ap i gPPdIVKUDqkFCqmzsXjMsJVRemLlaGrVGDSaQShmUuWWr) (seq (seq (ap i GCuUMbKUaiuEpcsVUsfKUQILNXmiXZJyjttKVdEtYfpDABZAjIzmPjpAGdGtBNHevFDAFgTBd) (seq (seq (ap i ZHivKNqTTYlW) (seq (seq (ap i fKqSIWXeetPFtodyyZkpCwYvDFLeBvQqQSpYdwSmPHFZdwIpphcjruGWFuLbKXWyYbIPnKQsxerWeFvHYQVejFGY) (seq (null) (null))) (seq (ap i QTuWfktLVKIvnWFc) (seq (null) (seq (ap i iKyFBaFiWvFeBNyQnwVPgOJosRfMMHhiMfjYocnqvrxMBhoIj) (seq (null) (null))))))) (seq (ap i JzSnhMuslSCzoFMuLcBfvQDCFzVtxBQRpdGZlcBFFpRbzeDBKRDrBtiorXmgYKvDBvJkMiFnAXWZa) (seq (seq (ap i XmiaROuJuczfMSZdxbqUyLtMRgCWSqgeCkYasqyejLTXdMNSibIWZdDBoNHhhdsJuDQZXhIeOaVmu) (seq (null) (null))) (seq (ap i gwIFeOxitncZZQhUSNrQTULcH) (seq (null) (seq (ap i oPCMFKzvaRXNLJckeFyiGe) (seq (null) (null))))))))) (seq (ap i ES) (seq (seq (ap i GzCqEDdypoVbIlqrKArrDbeKJkyQTCBtU) (seq (seq (ap i WTuveFWBrtxpWAOzCQASrOJWuRSyxEpERvBUgnQIZtwzWFFsutRguNNNpfkfHjnhMX) (seq (null) (null))) (seq (ap i GwerJsNSkzclFdKEThQJSUzrCvxUbDepGLTaxpEIJIpVwMIetzVGUCVJSWRUqZFtyRJAyVbjnkGHjuFWCuachyJPxuDbOWMLrMk) (seq (null) (seq (ap i FWUHuvRYgspNsxYsFLnEMMyzUGSCgPjkPlydynJkFQKTGDXjbzMeCFYHmUcrZTBrtOHONEeswRWVxdfxReGQCBAshxh) (seq (null) (null))))))) (seq (ap i ERCl) (seq (seq (ap i vqbNzSQZQFcCiqRrqsOEqRnBCVQefXOcCkEkTyHP) (seq (null) (null))) (seq (ap i amduIQOWDmFfKrxvajADTqujjMdzjugJHKkGNekpmzs) (seq (null) (seq (ap i NON) (seq (null) (null))))))))))))))) (seq (ap i zhlIAVpNvzexOwxKKfkdIkznyaYWxlamlCTuKDJQxicFOzWBwJqzzqKDbrJXlfPtEEDvOnfoJpnVumkTHXVDBrIyHYzWUCsjFX) (seq (seq (ap i gFMVJWHCREFBKmrpigZTGHujdKTiujyUfIcsQvCbDNuKRUxE) (seq (seq (ap i nmmWAIsNorSekbnJVKLwaYrpiZebCuMwCxkuihrTPrMsCvtXwuJCsAEJjUAoCcBUxCV) (seq (seq (ap i PxDyUfDWxMuXitliwJEPdlePUsGzubSTCAjJOecsDOhsFqpndqvvliFrSptoYJWrjINgGcqYzVbNUfkIXIIONNzgMYNPt) (seq (seq (ap i kOvcDIWiNRhMMKApQHmBaOKbJsRiXFXZRyfYKQrbSuaazxEmCflQfguwzGjXirGCgaoaPOLugZtLTROxKZjPiwrmufB) (seq (seq (ap i SXJXmYmvf) (seq (null) (null))) (seq (ap i mUHGqIgorvDosYPpSfrGBZiLnDIQrRizXOYjxPLUtr) (seq (null) (null))))) (seq (ap i qYkHHdqdnewOWf) (seq (seq (ap i txMQTIgmXVCRZTlLfSwVMxUAXjztuWjuqBDTkxtCVaxNzxSxLiiMzAfYYXUOjMShpaRvIcVpvYt) (seq (null) (null))) (seq (ap i mpuQowzqxY) (seq (null) (seq (ap i xNRtCuU) (seq (null) (null))))))))) (seq (ap i ViirsXovBvxLnaJeyjhOwzHjwOwBkVAWGcSIylFNCduYEZkQLuiHVETUgYEyhmjUoaRwQrarWuSreXkYOjcOJw) (seq (seq (ap i AzuDRwdvsyCuaeaJEwGgpHAgtcJLBsELucyWzKPiZunstZgMxSotEhRheislryIoUSMlHRqINHBMMXziZGYzCrqJpDARm) (seq (seq (ap i bqmATBwGquWnKqDOjdweQiVYnubrbvEOMyquApZtqJtSFSfS) (seq (null) (null))) (seq (ap i LUXAxHsChPjiLMTxWVjFRZGxrvcgEJExnygGteRuqAoFsrSpURCBwZQcybEgCAKIqwcCkIocXzxAoEwhfTlPQtyygizkvRxz) (seq (null) (seq (ap i GAEVyYYjlegrdRlULjoVCYhgfcoQ) (seq (null) (null))))))) (seq (ap i OIrOaojpS) (seq (seq (ap i tvUgkreuwPluIPJqUkXKfmqlkDmpoCPKhcucddhjyIkR) (seq (null) (null))) (seq (ap i OCZIlVDxXriSljf) (seq (null) (seq (ap i wOQncVTXRnadrCJXxKdmwZOMWKKXbBLuyaYGFkSiDEKMVIzymydmsFZgJsyCTEZBau) (seq (null) (null))))))))))) (seq (ap i PAKKRxBgRlvSFowlGHPPhvFVWjkupNOWEKKwARIYcqgslGJEbcWXXxmRcKoTcuZIqaKeKRbzXQEAlPsKjO) (seq (seq (ap i RvgyXbCnhTtfMlAdCDqjmpTuQjomAMAMkBYzZbpijmCxYMAuBxXZPkVg) (seq (seq (ap i mmSelEcFDWTSaNccSpkxxBrEaKGxLKWQAwMKRLvc) (seq (seq (ap i lFhQSLGScZnPW) (seq (null) (null))) (seq (ap i hVSvBJfduQDHbfRFmHFOFHbdBgBhFVKlSYoLFqWROAymBWHSihsjtakjCiFxiWpWnLLKSEY) (seq (null) (seq (ap i rHYkOJLkDZBY) (seq (null) (null))))))) (seq (ap i gDDJjFBzhnsrNefSIJRJLzbekvsSyLUdhjskUUCzYyiUmmNV) (seq (seq (ap i XUl) (seq (null) (null))) (seq (ap i qInuEwCRVoZXRbJNlDotETvbTkdwwLFLNwLYwOIlveNIqcr) (seq (null) (seq (ap i BNdtYIFvdJDTVkEeqEuNMjlGHEbPAzexabhDPQedPCnFZcxNXmHgdDPKdglTJdvxEvVvrafIEige) (seq (null) (null))))))))) (seq (ap i uKlFeFqcbTDsBOeYrlWSlDpHmzgOnzPjiTJVqQ) (seq (seq (ap i TrkQwmGiyMVIgCqFRCXtkZyzjQfdsZTeLWGylJDIdHHzVYrFbNIfGQ) (seq (seq (ap i dYADRifaIBxGruHzGvBrBWmpsoIxLoqnFmAchLvloeKCJ) (seq (null) (null))) (seq (ap i XyPXVTrPEWaVmuEechCVAkRrDMJH) (seq (null) (seq (ap i CdvhShpdLpGPazGbYRIo) (seq (null) (null))))))) (seq (ap i sFe) (seq (seq (ap i qWkPooGIrqDDqPocgeNzlwWjekHEOGTTjvzBJlZQkFDEjZvApIoMXGAbMzFSkpmClPzDaIwBBDcFAAeqeXaWITDFhdNNlfGVYVyp) (seq (null) (null))) (seq (ap i YCFTyAwSfEIr) (seq (null) (seq (ap i BoWzzrrpOIoddjEFQhGOcHfFcUPYUaCK) (seq (null) (null))))))))))))) (seq (ap i zfZhvbzmGMSXSHzkrGLdTFazPrpfammQndiLDUOxEvObqpnPzIOmmDvdfiGrEDLLKmQleAjekf) (seq (seq (ap i hhOoLRiEeGFZtBwfvqYTboTMvEJlOBFaFywKORanLRsdFLzZYwUysAKCzXdCx) (seq (seq (ap i hkuRrYFBcwoZIWAwwcRjcBoWzAbjXOTQ) (seq (seq (ap i zusSoWffdOpAQsuJkNeCfeQeVHAyLyQtPUmiyAzHGNKqHKQBkOIfquIjlPLpJnRdHAedbNxkTJBhJWEtFF) (seq (seq (ap i evxsIRxEUsvzKQONWkJYhCFSTMnQpYBqnBcoWUCcPwYVEFdEfSMFKsDrtJnhAJzLUXJyGGOQDCoBhYDpuDxxJGwhmvgKxZx) (seq (null) (null))) (seq (ap i RRLPTwW) (seq (null) (null))))) (seq (ap i OOHCvKw) (seq (seq (ap i ZaixYXwAFvMHvjRFyQzGfVXfPoXumGMrFMkTCTjNkbUOgzKalpZHmLviNMWobCNFEmZYpJcEQWFBrqHuDdGqkvpSYKDUjTVw) (seq (null) (null))) (seq (ap i biUrZaaPHOOtGBAkWeMHwBIAaFBtfrXRFyqNowWhKPIWjiomen) (seq (null) (seq (ap i jsgXRuXKAH) (seq (null) (null))))))))) (seq (ap i hYlYKaddUvLMIDXBAqoGrjEsOloLtviIIyfauNMsIVvDJzollAxkDPTlkhIOMvZsmHDtiItjCl) (seq (seq (ap i GdaOncfqOQeKfDhNanrOzbJUJQoyoSLCFicCDsbhHLtkEDtzZkqgBJlkdwBrnncdrcMrjSzOXAOaPBjHvXiJtDtEXLxysHC) (seq (seq (ap i vefhpuLPuoJDWfWAFEcXNauipgauVJpdjXXrePIdgyx) (seq (null) (null))) (seq (ap i QgmtMIAGGTliojFeZiSkSdqwxTXQhareNYIjEXUFQnSOFiyxKryDuFMWLMNNjdngayzqWaWldBk) (seq (null) (seq (ap i pRInbOyQknvdJokdvjaGROBXsXViCySssBJrQOGLkyLpXWRKcCkLNsJJsYArvTSPLPC) (seq (null) (null))))))) (seq (ap i NkKIvVYqebtpJPfUULhubdGtxTYORqVlJTHGTZqthikyuKXHjefuPkTYvI) (seq (seq (ap i nYwXpFmDsvRwCaueIIBrmYuyDworxblNZbyYRjbgejuYvi) (seq (null) (null))) (seq (ap i ZboaZQCu) (seq (null) (seq (ap i hswaxfNYrrsiOoowTaknfRyLiPTBeLJFBlZdrZGOtGvOHYGgvtBaukFfyd) (seq (null) (null))))))))))) (seq (ap i NHDWQqykogTYeXGcsEBLHcMbhcpKRWzKalkcGwmnHP) (seq (seq (ap i uhAOhQlGtqRKTxVBkpBcozrUPxulaUzbxWJsRBpxDouwZRoiTrZZRipCUuxKKxpBEUYEIjMjSdWJYSyTdgquhACy) (seq (seq (ap i crTpFLaQQlzQOoVhynwwuUcJIqRluWKKwNxaJMdATXqkfbTmxTgtxjOMkck) (seq (seq (ap i fW) (seq (null) (null))) (seq (ap i eNuvrpaehwcrRsmSEUepXYvOyRlvzhIvuKtEIBvcJUDOIYWZsLGgIecsxbcdGpRysBKxXxdPwhZHPSqyfukSGpgDqOgTVwVD) (seq (null) (seq (ap i BRYOQndBJIUDPZYVbcLkirkkbltPcxdjfKiFXirAMyW) (seq (null) (null))))))) (seq (ap i JKWSUGrLaaREV) (seq (seq (ap i AxGeEcedDuuzpjByFBANGfpXvJwaOAdcB) (seq (null) (null))) (seq (ap i KfPjPHgHkPpZeKL) (seq (null) (seq (ap i uKTbOggNGdDtaBPTpvKYPyOkfhPkHUHRHbnPBGsmiBmsPsJEGKGvHLxEUXuwIVDTReYfjNIQHLDzklyvgRbHp) (seq (null) (null))))))))) (seq (ap i ocgsOUyIbyntZVqpARiiifjwMHmBqotNGxUDvZhLreOeibwPFLLgOYslzk) (seq (seq (ap i DzPbNjuRZEAkKBTBW) (seq (seq (ap i gWrbWgdzwvsYKkKBXlzbUCexUFRnbyNhcEENaYwyYaoMwGSuqphrlbgftoA) (seq (null) (null))) (seq (ap i YHJulcFFJEJluGowEZnseHqnFTcJqAIZkxpUkHgDzNHWFIEQfbiiVgFSgqrqI) (seq (null) (seq (ap i dTypayXuqmrtwKjsCawpKUEqcZXfxlgFqeCSnFj) (seq (null) (null))))))) (seq (ap i wHjAKBsqAhIpGuehKlfTHJCpNsFZDmcBlEMAf) (seq (seq (ap i JSBEsxdPqWyFNJLZZfcNwmfmXmmwLjCOsuYgHIKJVnX) (seq (null) (null))) (seq (ap i CFRsmaTjlEEGVKNwAAqwvVyZkCnncLpNSvgqPzbEANbwQeGXsgmZINNhLwmyGRFAmQItsmGZBxMVkLiQJsGFUcqYowFm) (seq (null) (seq (ap i tOiLhePlemJQUM) (seq (null) (null))))))))))))))))) (seq (ap i kc) (seq (seq (ap i hftckQktVVHBzdLRXlRYBmxcTMMNktGtoZBwDEgrzkJVlcC) (seq (seq (ap i qlmXsMEFRyHGjocTAABdmrEQDrCoxkSfLLVSPfdZpKneIUSmYsYh) (seq (seq (ap i RZZsSFWvqBEuqQuUYqsukwnoMPgUPvT) (seq (seq (ap i xvHVcrbyiTQZPFkEaokOFHaRMMWUGiEgG) (seq (seq (ap i ektPnCTPayiNmKKgjPSkRDbPqs) (seq (seq (ap i GUNpupnZkwmsETWYXdZWzxkvXkuiCZCLRwmTeDHCZHBLikS) (seq (null) (null))) (seq (ap i pZLwkAOgoEUyiEJVYqVkxZlaGBqtQundlVdkWouaEnaUYJnQvgkD) (seq (null) (null))))) (seq (ap i jzwBUgiGtCfSxAoflRyZsOTlJMGOCqRgBmZRsWxUYfBvjyQbHkVJCYGqxycRrfkulVazrtbm) (seq (seq (ap i PrLcWlGgILF) (seq (null) (null))) (seq (ap i OiShrAzHoqAQeyLfuSPjyRaqOQEwZxdWCgQVJbZsQxkqgc) (seq (null) (seq (ap i FnaJQCQeNqjGy) (seq (null) (null))))))))) (seq (ap i vDGHOqPlS) (seq (seq (ap i CRjHBJFFYutfOlFMnTaoFEhQykDV) (seq (seq (ap i neMWBZVbjyBvNyhCJlzZPTxVKAGOwoEERrvTTHdwIsuxJENURumMfMhWxsfwtpMgEeXQ) (seq (null) (null))) (seq (ap i qSvMdTYittUHpWuXRmfzFsoXIrNRjvJTKVHPsgewBYggQLmzqQbQXHuFaNxpYSJSk) (seq (null) (seq (ap i gKKfLjOPCHynXiJPZBoyPyOOujzEMPSuNphplBZuSowjsezfdhDO) (seq (null) (null))))))) (seq (ap i PTfVyepzLbFAAmKNvAmRqJLnYQQltEgfRqVUuSouQppYquEVItqJiPVPK) (seq (seq (ap i eyYoLezXBBo) (seq (null) (null))) (seq (ap i DncpEJnJceUTDZrvWFIPOFvgLMCdiVatIJwamYpdixHnisalpvgvuPOHyTMWr) (seq (null) (seq (ap i YgKJWEnWGZnoZTABNNNHraKLgdSboWbAaYJwYfvdcOKilbbeSgsNxEJdhKDC) (seq (null) (null))))))))))) (seq (ap i esPpaGSCmoWLzqNhqJTcMgHchVEvwcmgUNtqlBcoctAAsTlINyBGemDlXLLgCTTeIiXYROiuFHFMyl) (seq (seq (ap i klAvuGfuqafhJbQtWgYOOtz) (seq (seq (ap i aUXVMzFUgzQGJqFVKOiuBaIEjbZxYpbApOLMzPnZHSHfkPgkcvTLVVRisBVQVAIZgKDHHxOulLQxF) (seq (seq (ap i ERbnGAgFRzQguSlsySLeFCXvInxrpCUuhrsGybTfQjrorvUlXLUnIPmjJchYFPxqawcNStsJnrPTgXgRjTDMe) (seq (null) (null))) (seq (ap i SXkLyZjETopYuHuNoRFJtyadOFoamHVPyGgyxxPSMJhwUeSyWpehXQiyKhlvyHUVzYsQvouWlCIYSqK) (seq (null) (seq (ap i EAhGgRDxZiTHIcEZmWiutGtWtpxzsvdLtedvWTWfSTFCVLaxxIYsAmdNHpgVFKuzaZWYEajcMpFZYemSgOuSbtnEQXVZWuImj) (seq (null) (null))))))) (seq (ap i RKuGtACxwOYNOnYcJe) (seq (seq (ap i jRInGJWjsHWWYywnRyCPVHgRXYQKMIwgps) (seq (null) (null))) (seq (ap i eMeXNsXZhpESpVY) (seq (null) (seq (ap i BzneYRshJuHnVHsbqeTSKf) (seq (null) (null))))))))) (seq (ap i iFBvLMIyUrizLqhLbvITyeDsFiiAEiYzlcCHXnBtqZFProYzCaIQBkxIdPTdJUEscxZnjxqVh) (seq (seq (ap i zsuCkRzGElynxDVqySabSnjENuk) (seq (seq (ap i QagIatEpDzGIXOCMpqhYpOsGxJcNjXoicOKzQswUNmXxhOaRvANriPTptGEdrmDClJayp) (seq (null) (null))) (seq (ap i HqOFmNdbTzPaNmgNM) (seq (null) (seq (ap i NwBTnZmgvHZjNdVflTEtwcqjHeVsIlVwULNoipBtspDyzYJJxsqxMEJYIvQdXRwUYpQjftmvPGrGUgNuQxISrbBueNiOYXuKn) (seq (null) (null))))))) (seq (ap i fVLuUSDYwZMzEzsIXNlgnpcJIOoToZbvjzGObFHqehMESAYfFyShWqAhUDybtVuOsDlieaTEasywkCLiMQfGqYJVqHanY) (seq (seq (ap i DRlqwbzsmlnOVHfweXxOvnJApm) (seq (null) (null))) (seq (ap i qWvvPkoCBlAHOXAtEhbvIFGiazuXojNWPUPRzkkXwceVOwGJUCJR) (seq (null) (seq (ap i BuluZo) (seq (null) (null))))))))))))) (seq (ap i nyDVVogOrPGxEvbcVjKWCqwdoSgizkiRfGdXeEGeRsnkjLoSJrYEZeCiroPR) (seq (seq (ap i KFhIdYZbjNhDDKrhhfycFSZpdznPogwsfKgVsgBIAbNeuISzjFgRezrAHxvsGUbVfzN) (seq (seq (ap i ijzyLNccZNXovKdVfnYIEmEEoYCAKsFXrBdMWmdUQPWILMkhHgMWqnIqLeRaULDDStEtMarLexLjSFoGIOIkjZjPkMaekAvrQCe) (seq (seq (ap i OLdEeXHq) (seq (seq (ap i kKwqHfNrmUoZnTpinfbYlqCwSKCEuvnOLycYigstwJMKVeL) (seq (null) (null))) (seq (ap i oPmdXcDOnvFffXUbxiCTAJZdXOoaXULQorTsGajGmEVSOMDAhkVGpvaobNFvyldziUgBprXIsckLcjwYHDsYTxhkDBCpBkO) (seq (null) (null))))) (seq (ap i GRtijfYPEhialCfukZggwFuuHYNZfSFQ) (seq (seq (ap i mabqAMbXaKpBjkxhBfoLqvPmzMGfPEeskgCIiRjATrWHGvjpGhBsVDFvGHPsVliRMcBMbcpUMoWagzjlqHpzzmogoSA) (seq (null) (null))) (seq (ap i xIiEWRlsBHJaunqRPme) (seq (null) (seq (ap i SijLubHjeEobbgHMpMnIpXhUysBZCyhKiTKUQPPshtVpDIhHtMNsdRTsNmfgDMznHSQSeagdSTMJjwtqDMgRmeL) (seq (null) (null))))))))) (seq (ap i YFyJktEYQCzzuXvMJYZGePMYxNzkwpuqGDMsyEkrsaMVbplmAbsWiO) (seq (seq (ap i SBUOBmxSuuEzsuJsq) (seq (seq (ap i wmKcXqzXUVfvUQRedNekVwClXvdiVzsVFeJtNysLOcvuHIgFcePkSOobpBIznVMDDYSuBnOulEInpkTNoLVn) (seq (null) (null))) (seq (ap i rtucrFpcwDQCINCnJeYZchWPZaKShdblHGVDhUS) (seq (null) (seq (ap i uKDkIFzzzlvyansxflxHrZjTochmuiDffSoANxk) (seq (null) (null))))))) (seq (ap i DPjpUZLofptvcYzjTvJIHSmQMnZXqhArXofHSljGNNGKOKEUvuRaOATFMfbfsHEf) (seq (seq (ap i BMfKMKaGvcODprDQsLJRevbSGAFxTHtQXUqojfwELfZVTkRwQTGwDSWCqVRfErXAuDBIOaeroyYpyRDIMyJZGErJCZ) (seq (null) (null))) (seq (ap i RYGBtuieVGqpEbquXKuxNODtWpzNiUEBcDJyezDlDMqrRolochcIBJXBNBQAlCtPvrAlZkeepTgCYnWBr) (seq (null) (seq (ap i MvTOVfmRvuDAvYZOJnPjkhIahfHkEgCOuzhZuuuCNLUqstTmOrzOTQYEszRceZXMdiLedSiHtyOubixIKjmTpZAG) (seq (null) (null))))))))))) (seq (ap i BvQtzVRvWVZlJaOiLlWchZNcZiDFgMgXvagECqRvTjkwwoJdToPumnSjHdFPorKtyqZVAlwiTBHetu) (seq (seq (ap i mheeFGQLtzpErEhzrksClAPIqXlFnKnQkbDnbRZvUIswiEhQNiEZLcDMzrgWYw) (seq (seq (ap i hWzbCbhjGxwZlERGjbbmjhVwMgGXdBNBgYAlHhpUyHUwVMzmTLexOm) (seq (seq (ap i fzHkswnfZWG) (seq (null) (null))) (seq (ap i crLrAeSFbAGnqTxtGJEdYmaRHGdazjbpjsrKcKaahzBHOOjrMFVIXQPgzFVBlCxPCAfRZN) (seq (null) (seq (ap i GyEhtHs) (seq (null) (null))))))) (seq (ap i YgkwovzVeAYeNvxxQFwNYCMxLOwzMZRQmuXwCJMhXpJqFnhhoZZqMMPDvTVdJKkvrpYjfoMlGwLBbupdoEMh) (seq (seq (ap i txytFICLaLOELleXIUduVGQuwGVbLBCWNRQGncWJDgEBKnjqtBzNVpfOeaFUCwFIMUzxs) (seq (null) (null))) (seq (ap i ziCGeEzmiQdjpeDkYZoCIumKJNRV) (seq (null) (seq (ap i rcqFKO) (seq (null) (null))))))))) (seq (ap i OoTINIgYOzrDXIYHPYGLfRLSfLTFnHwZDjrvjZGdkW) (seq (seq (ap i nDMrduPUWaeuWYIvgRvGXoHNjEuJ) (seq (seq (ap i ZBAyevISYlFDHOPhXUrXrlt) (seq (null) (null))) (seq (ap i tXxYOhtUIBeZjwcXhRoJcorgWEkioQyanMxzHiE) (seq (null) (seq (ap i TlNbtpuoANkvcjlziykPYpibZlabIBaMKSFVqGophmfsIMIqkqOmYXbiOgDmFEuAESfZsILQdcqRD) (seq (null) (null))))))) (seq (ap i EEaznjteJriXFiQafrpaADcelhXcEhk) (seq (seq (ap i PPBhAEpkpYDPJItaipZLzcNGqKwHkknYusBGWWdjXIkEddchmLSYeHGakMcndUXaRP) (seq (null) (null))) (seq (ap i HpLQFDuoNzEPU) (seq (null) (seq (ap i AUmiljhhMxDvxCxmEek) (seq (null) (null))))))))))))))) (seq (ap i ilnmrPBEmgUirYIkLsVxymJWVNsARdvCCmsry) (seq (seq (ap i gzvtZteSvgURhYrPvmWRijczKmjAmqTIYzFv) (seq (seq (ap i eiRLbCiUbCMJgphYMzWrgTVKvgBfwBjiBn) (seq (seq (ap i TinOPRxIuxhDeNNYvAezxIBMxZRBORtYnkDlh) (seq (seq (ap i tftEMwXhkFGJNMuPtkoDshGzXTNgYxPnddgEXtWiwdTIWuKanyCbloSRnrNQmN) (seq (seq (ap i gXMCJgtsMvWEBpQaPqiVDotkpUdtnXySpCSnjiZbxveIwiojLsKpXCjfuLYKOSFWSxIPA) (seq (null) (null))) (seq (ap i nSaJmcjneocpYcCHUlitZXQfkXQjAvuTqxwnnWHZHKKIQvHGccSyhnkENfxOAffKkINuQLMnYju) (seq (null) (null))))) (seq (ap i gQbbKpTWLhLlmUuOdCRnYfvZWgUY) (seq (seq (ap i MHsJvupKRGKbBsXncnBuXBgbHSxrUTiRclPySpsVsbOGKOlJzEozlzzDOhytJspD) (seq (null) (null))) (seq (ap i wHKDLjgUmbmIUlxiyqKcyUGoNFKAEaSlHAWGsVYQGDFhVYkEJRpRBtnrnBMFRdGEO) (seq (null) (seq (ap i LbeZwMtEZMAugmsqpwKxwGWepgTCMFJnqBeZVHfnYwNQHguB) (seq (null) (null))))))))) (seq (ap i xFUxRoEJUPUhVSrbstoVFsHxMAqsAjdquLDCAzRtOhgjN) (seq (seq (ap i HHwwKsLDRmfpYMTBmFoCwlteyrJUDCOIXRVhWfNjNEcDaFsrPwY) (seq (seq (ap i XZWihVoYtyrVHPJGUTTyOsGsBtHZlWTtdDtEjKebls) (seq (null) (null))) (seq (ap i tWXFxkFRtSiFXfDFmHpnkrbZdLDdQvQcWQxwVwPMbgJlQPpwwAZRsZRbymHhyUrmsErOFAKDAURO) (seq (null) (seq (ap i dirIXDUsUaBfWmjUISXpVHpHwGsXJKKuiJOjMuvlXApPvkLjpIvinojboBrytgQEMRqHDagPrAQrkokunUpNwgjXwdQF) (seq (null) (null))))))) (seq (ap i ojBjAbAGQHiETGxAthyHs) (seq (seq (ap i QFGeFUtedQuw) (seq (null) (null))) (seq (ap i TOblUYrtRxQlfQbuoNVhUKWsJlafOmQXoDckanFeuATPbFWhWXasdxVKblP) (seq (null) (seq (ap i pXfkWbvSWrlxHAN) (seq (null) (null))))))))))) (seq (ap i ecmeeENkVahvDXxHuDqdcujcBNQyxRsmVkOAIETYFJJ) (seq (seq (ap i JyvAnAbUXCJKBrhNGnLJXGBKQSHjpRfvYNaKdFxeIHIfvTFO) (seq (seq (ap i PKdRAWNxfSPXZIUrjrzxmSdEQbUoWmFvFDflrXi) (seq (seq (ap i dqVZgdAwUMzOSVYxcqqPMg) (seq (null) (null))) (seq (ap i GZNZYldnojnBaVCgOyckyt) (seq (null) (seq (ap i ImenNqTcGxrWulucweKnNvAEZvrBYXgnnx) (seq (null) (null))))))) (seq (ap i cdHvukvEnXVKAXGxlmKPQgXZlVcdNAPkbrbiXrXHvNoUytIjwjyOGyBgnlzgAJ) (seq (seq (ap i TcIwunuAVFbYQHHxvhkYPAFqvespaDViPGiikrTWLkkYwWrZmmFaLiUwquTPgBd) (seq (null) (null))) (seq (ap i NzrYHVmqIuySpHfZgLRmivTyRyPlqWuUYudlphEOJBPTPjgALTnbfFyPixfPgGexncaegxsdfkOMsDW) (seq (null) (seq (ap i ChaXBDnNkxBcxydMWFTScWcAfPLeTGJUnTcJCGzzAZ) (seq (null) (null))))))))) (seq (ap i HNVYJzzChAdcqsWkrMfZDEaWFAdzRzAMCfxVkVMLApztltvDbbCHpoJeqHKQUILdxnNprRiESwWgDtBfuprfYjn) (seq (seq (ap i sxpsWgPd) (seq (seq (ap i eSYbXoDkZOkIzmzdrDQAVARbGsFRKOTRTDYcrheszGyBihmLtMDoZuAigsJGYZAWivdbGFCfh) (seq (null) (null))) (seq (ap i SYEaqJpkXXYurzJWiIabbSc) (seq (null) (seq (ap i vXfzUpuTjLBELhyDVNBwDsVeNWPnYyRBrlrtgVKRYbBnPNSkBPndYWVu) (seq (null) (null))))))) (seq (ap i qMJXoNKyyiDSbbOiOGoKGrnUECLNoEtgTNWmoZtNGdgTabwaczYmRMSPYdyXgCddXSPWeBVnmoVlvy) (seq (seq (ap i GZCmOKMJHpGjXbNsqBsLDXrdASlrkxNXINdAxcmUNiHokhnLbLgXGuqr) (seq (null) (null))) (seq (ap i LeARaKEpmyYnGYyIaaMhWEKilVlXz) (seq (null) (seq (ap i ClDiRtzIrvlRLmLdhDqCLsmLOFEIBZMMdrHDWvHuuXAftwwaGXceatbkXZPp) (seq (null) (null))))))))))))) (seq (ap i DXShnHFdgkCPzQGZRIXFOeXXdczJpaUdfVSTjDwTfqKpNKMDyXIjNXYImDVoxSUKDyAbHPKpwfJM) (seq (seq (ap i XhCVeDRyWIFjpJQuuvBGUGCUsGZviOOMhCJhx) (seq (seq (ap i BCptlGZXsKYUvRWcQZdzFIhJixxqflJxfkFxYZAbZXrFCiCYxrPAWuGnbj) (seq (seq (ap i aRmGVzafqlLkvlnhZeDXHjVaHpBeMTtJTY) (seq (seq (ap i daniKwUaQgTCcCUuyKJdGzRWdeVZMvb) (seq (null) (null))) (seq (ap i MzqennibJhlKSBNqeFSbnky) (seq (null) (null))))) (seq (ap i qtBuEcJhHPVlbyot) (seq (seq (ap i INNbuZyyEkpOIPfyhfOoYoYWksFuCZKPYbxPyeEduomuLKht) (seq (null) (null))) (seq (ap i Gubqx) (seq (null) (seq (ap i veQRTNYcKjenfSicYmTKEFyvJpiTpWyENQyHuCeyfnfIdMEHrYhtOgIsSpzeTvVCXxXeMGZizMYCCvoSqNTVgb) (seq (null) (null))))))))) (seq (ap i gPVePFwqqmoNvhskbtERNuvuqIleIZCmUeyBmrdYZuumIoBItlosozjAeiHOhoUzLPrnXzdSEzlxEWtrQmbdszqfCIxIgclzZqKQ) (seq (seq (ap i LaZGtSQSLeKUyTIxPvCGrhkhCBThPDstNHgiKoFBJHHHRUntfNwddSdFcredkNNhAEMY) (seq (seq (ap i thrmGpxGEvdOovcFBMIGyvXfZd) (seq (null) (null))) (seq (ap i YLyZnGkUcsvVpGkKINMEuRWVIGYvvnbZlmXCcfdOtxxf) (seq (null) (seq (ap i IXhnFRcUybRsgNyGPzZghYYxbQTblPYzlbqevYNgYqducTKsYtBSUjFIvsGhbA) (seq (null) (null))))))) (seq (ap i ifUrFFhONtGcRRjSxndOFLUMUnMkfRnhDhkVPlvDCXtHCahNWnbUpD) (seq (seq (ap i kWOryIITHasWNjeITkBXGjWZZDJHhPocqsCcsnsCHrxxzgGwgPwSImbXdEWYfMKqTSeLKCvGBYui) (seq (null) (null))) (seq (ap i aapBwk) (seq (null) (seq (ap i jQUHEge) (seq (null) (null))))))))))) (seq (ap i UINZkTSRajXQQOmiIglaAGjhCxvLHKSmPBqdQOrjSesvplRFlXCoiZWNGgRpDTRBBeCkspSjuZV) (seq (seq (ap i MqnHTfllcyoCdlvfHcyeJXjwgoXev) (seq (seq (ap i bGDnTAMBjzQbPytVhiHjJZZPbqGEvfKjySQPgXWfupcFecieXEeTpMzlqCMeWwyPeUCYYSVq) (seq (seq (ap i leNE) (seq (null) (null))) (seq (ap i iodYLlPTNmEvWcDxFXfVtIDLtkfzDlFEJNPrHDFVViyaByzQZuRrwFDMAXWTliJIRTAXHpRNrFpaVlBVZAAoDtz) (seq (null) (seq (ap i YVuOaXEiSewjBUDbcpdiFZxKFpcXJT) (seq (null) (null))))))) (seq (ap i MqFusorylmajLMTSdnLYYrmRJzvtouZCgKLOQouiCzbhGRLDxfJzcgajmZDxTyVzGMFdRJooGVTHwaJtAJtAKaZ) (seq (seq (ap i sMRczUUyXrHCBOHiyeKhOpiCuSssjz) (seq (null) (null))) (seq (ap i hrutuFrlmXumSsQjtCcErwQgZtUsTyCAsNsyJFdBhxKbuqE) (seq (null) (seq (ap i waETAQIoCXoRfGWtuCBVvCSbfEdjBVFQHGDIaOjMkbGTWDmWQudxOgX) (seq (null) (null))))))))) (seq (ap i qPwDGDyZDBBXnqjULnyFXRWIaaPphJTrrWjHMaX) (seq (seq (ap i TvjyLMQZniqxPiHyMVMfWoplsRGYBLBGscYpvCASBWewYfgfczCujObssRCMzDnUWzGcPqUcnehXEnDSuXd) (seq (seq (ap i wvVYAJKxAoMdYgiOulJGgWFINPzNPralGreDipeJVJzYJWjrta) (seq (null) (null))) (seq (ap i BWqkNvslkXcYPzlduqLKKgYxofUzIYDqynqMfXCpziHLP) (seq (null) (seq (ap i OTyAQlgYYYqjcW) (seq (null) (null))))))) (seq (ap i eXcBWISyHcsMGnqbDgZIMDGHeieAogbgxxHrFbkXmHXFSPvBXzdjAhIiTPPT) (seq (seq (ap i KTjaSNiRWtFDHetWsEUTHEeTWOPPVmuEYzpVegBYmuucbGRIZUDsgrkFAdxmriIPOZXwsUBXYhAuGPOsKIXbKlWv) (seq (null) (null))) (seq (ap i stHJRsShdjsLKFJjanm) (seq (null) (seq (ap i xBSv) (seq (null) (null))))))))))))))))))) (seq (ap i ldjjmOdyspuZEpFHQoPxPjbgMXKaDxaXkYBWwzhoitTsJTPD) (seq (seq (ap i wjQxPHLivLtIYjMITCEbKrMHkWgKuKWNQIewChkClOUOfLZZHYokhLKWxWNebt) (seq (seq (ap i miwJisGpwjnxAAMdZcRTxMdyNcpiaMLWmDSbBBlgsVNpbbxiUoBebBPzcrIUhogUQoLUyl) (seq (seq (ap i rHSzCvTKuCdvMmdoxVUuPzQVBDBuqWrUWpTuUUqknOvJEadvryIOPOzEUDGLTksRVRqKqSsVbSlNgGoOhaMxAoEppEOIFt) (seq (seq (ap i gnPKSXZPMUgLvRtBXoyLNMfmuipVfEjRXSPsGVBXDxiFthixNlsiRZWvBOdJPwRZwSAZ) (seq (seq (ap i dLILqDqvQmBJklozBTOhydwCbYMwnbIAfwnTKCuxGLHEQmLDrjO) (seq (seq (ap i snVqUgtuKHcaiegqsJLksYLcSquSxiMUnzRkJcb) (seq (seq (ap i iyUTTBToPocCZndWYGMadcWdSDNeQUvYKvbpdiyablrSMNlsmkgQNXRemuXUUdaLnNQUL) (seq (null) (null))) (seq (ap i KvLFdgYEozrrCSkFKMPnnOraLrohXBtesPlsSTPIFTMMyYiMBhltOEeUZRzVnyQCOZRftlIXXB) (seq (null) (null))))) (seq (ap i GiNklfXVzxIfblPzfxarwbRhFyRXgaKIixneFetAbbzuNMTAtSFaoBltXwYWqEaKd) (seq (seq (ap i vxdPCyXyutBgqgtemcJjtMOrlJsMxvQXxsuaXXiejOjKJKiHzedONjbAbaHbwdAenuqLAcfXkAtWLDklHxmFaVaSupuPnbErlTjU) (seq (null) (null))) (seq (ap i mJOcxMgMAECbbZYszATRTqRbvozPkbIXrlSKYlUzgMwYyQFIpcpCOKLJngStMSVyqtWGQAqYpxpUKlDDRqPvERTuXllWuH) (seq (null) (seq (ap i CIXzSXIkqpAGOMFpmfuGzfkcKXewGlAVXKXSxAfZBNsa) (seq (null) (null))))))))) (seq (ap i xkfrhyakUYeTbyaWiDyEQmvzeWXTEAngMwyDtbnDtSYyNho) (seq (seq (ap i dOEJaUBOJazl) (seq (seq (ap i halpTSsZ) (seq (null) (null))) (seq (ap i EDekkMtgiSZxkDPsfURVTlfADQJQyTveFGhsFlrg) (seq (null) (seq (ap i YiMJKYgWDfKqxtadfVpkpPfrJuUzefirWKogGjjos) (seq (null) (null))))))) (seq (ap i AxlSXOoBRlXfjKnzyvfvAWJtiqRsspceSwiOgmGpHrmWJPDtWNbKpSZbDGqXzuNdQBapFjky) (seq (seq (ap i ebn) (seq (null) (null))) (seq (ap i kJWYRSRiRejvGeUyNfihmKFsXWcmAeMwgWufjNvCPdaIWbCpmUfINYqyWXn) (seq (null) (seq (ap i IJzjBtuIRektaADqIPLxwLtpcvIxsdETErFET) (seq (null) (null))))))))))) (seq (ap i ihHFMPJDMtJsQorSwizRpJoTNKFqnUXsvkHfODQzJyZfhnVQsErspdJpnX) (seq (seq (ap i pWJcbwHNivkIhKvoGUaOAjAVFiJEOxRHtCXMLdxhzsAhHtqiwCCqOUGYwXp) (seq (seq (ap i yHFltMTdKoyXtpjUwrboMtiUZbQEwZBZkGJwUfsX) (seq (seq (ap i krBGuQweGkUrHCSpkztjJJHrYPIBbZaBVOhwTuUuOocILOpBSRIDWwGLeHqYYCWIKJkDlapeKBG) (seq (null) (null))) (seq (ap i LSVkZixznfGlJzjFsIiJq) (seq (null) (seq (ap i UGwzTBKzszxywnYaQIbPWEEBVrFkOqxCBCaDiroKUvRqyxSMiNePhO) (seq (null) (null))))))) (seq (ap i VlWpjZAJSHGEqkovThqCSrddkEuNIpIwWyvvJOiVOJBZyeDFGGWxBOnOegHWYmz) (seq (seq (ap i OxWeajrOquPlOeXHeCbKiAGUwtWLMgqtbkuLbwArsXIWNcDCZiJVykoHbZWbIcLjBoFJjqQWGLLAkNvEmqHSQVEwcEVzm) (seq (null) (null))) (seq (ap i PFLvLpgQVtFyqnxAXvxcrtHPKKmFGqeFeGiRKXXJOHUctFjLIIPqoPFDlSLfbnIHycUJFAZyOL) (seq (null) (seq (ap i cGgxdpFzPkwnKUQRAOmCIStctdpeErppnHlmIGJaEUnZgYt) (seq (null) (null))))))))) (seq (ap i PsbFeUAkhnbePWrAifJZcksByPgPgnWZTlGVYMxviJsGjOuvGEugYGyynOorUoCJflOwHJDkQSWuSITihNYyhHbXgNQbxdudpwL) (seq (seq (ap i dQSJMfNcmPqyPDPumFclAsXvnoJoaQknhdyiryXtQyko) (seq (seq (ap i ETyDOHOzvuvXsVOUILguAQshGpqHCiRSTRxilsNNcUnSIGObgO) (seq (null) (null))) (seq (ap i SDfOSglAVmlMkmslSUzHLgDwlKizkxYwnUemLYEsfvMlOrXTPcboILoCHNXXUNidibNMjsaCVRYuhnDFp) (seq (null) (seq (ap i QUuTOHvjccl) (seq (null) (null))))))) (seq (ap i zXPJuMYXhCLwzrchKIHQtyEQEfiqyfufXjOrhGZbEuEudxSOOevFrqQg) (seq (seq (ap i cRlJSbVVUQHEbQlJOomPqdvNNzMqNhMipWHXKrQsaypMXaOvenC) (seq (null) (null))) (seq (ap i wTFQdZZgeDcVkWUbPfnoAByXNJgYRXxEDkOGgdNPBRPgrgMEufvVYpBgDOjxIhNVcIfeBphZLT) (seq (null) (seq (ap i KciuKEHnqRAVPLEsLnTcbObQtAacsgoWMPKajILpGyrPkQkazBpGwTE) (seq (null) (null))))))))))))) (seq (ap i LsOwvOcmkWuZxXaYQybTYQmDhmXYaoGSOaAHKsgIkgRVpxkWVFsmmpyXzWvQrnfcyxozICeAkVZVyvTDXSzqzNtJyVymFDWAkA) (seq (seq (ap i IppIMIBMVRDPZpaMJFwm) (seq (seq (ap i eosIrASdrkGEdEqEFIZqyrYSGDtF) (seq (seq (ap i FwIwiHcjRTmbPwpBLtJMIIFynWalFxSHWfFQPTKBMsf) (seq (seq (ap i ZZUAmoChpKqgUByfnEZAaIdjPufHykrQNbPWEerzlJKQFUYqZCiWNbuNbVEcKNEXvhkuXveUvPhULXaqqnvlJUf) (seq (null) (null))) (seq (ap i AgVLKloBAawcplivttPgmXqW) (seq (null) (null))))) (seq (ap i ppvqQiXeNDLouUtrxiblucpwQIIPOpRZbJs) (seq (seq (ap i posXmpHjSCUUhhXJgdUhhwWkF) (seq (null) (null))) (seq (ap i DdYTnryneqBjgbeKXweYNLqfc) (seq (null) (seq (ap i ibBAoDYUXNWoLfiFcvclqPgYxHRGXFtRmwcqfJRjyiNtGnTyyRfzukwIyLLVUHZrUorEVGoadypmWheuZJXNqKnLHwMx) (seq (null) (null))))))))) (seq (ap i HRMPMvUZjEqCKstkGrTQDYqjPIDUmZBlqpWbLzYQoFvPFbCTGTNdKJRVamasX) (seq (seq (ap i ZENqQYWHCjogWvzQMtGFWlkDRhyzwiANRCfetQpwuzohMRWbiewCkIlItquOPnDrZxPOLphNIiqutqrpVvzRPJLiUeYrS) (seq (seq (ap i GwyoJTTMwMTamzoVJiREtQMmTkSVxLhPhfgMpH) (seq (null) (null))) (seq (ap i tybmSpNEicWKawndDbZOhbXVxiUAyJkewQBNZTflbjjDpmeNtxFRJqFwEhEgzJ) (seq (null) (seq (ap i fVXfKnXdHnbHjSDeHXGJUPIytofAj) (seq (null) (null))))))) (seq (ap i vNfphCDBPEtuuLYYfwdyuoeTpysWwNsCIybCQmEHIJXvlhNy) (seq (seq (ap i oBMrLkcUsstLhmLqMVhyPMpiQqYqzeglkFGxHMOFepzidBnNPVXCCBNLIhCHzwcLHdoNANjPmQavbWCXjgVicXDzYBlCAdosdLqz) (seq (null) (null))) (seq (ap i xkEJpBsLqZYmhThMfwTHHgfClZGwFeKGDnZixAiQWostCiQuTIgCwPqN) (seq (null) (seq (ap i LUwIRGAccrcqmEAyYGHWYXRyUTqNLADtEJsnJSuCxmxgPwClxtnvHfDBPIiCcuujikwzmKpDYyouBGrCnVdpHomDJXtpM) (seq (null) (null))))))))))) (seq (ap i QJgwZfIsUGeXrcLq) (seq (seq (ap i Tgz) (seq (seq (ap i aniyVVdacjWxcwSeFxfJTmikEUwdfmKGTUyrDBGJrTJMNtvTbHB) (seq (seq (ap i pihqyhfjHohAojBzkoRgonZhLovtGtPdpNtJgPngKLEVHmwczukQsqVsYpbBxDFrrRuEDfhCnrEiRDdZYEjvhQ) (seq (null) (null))) (seq (ap i PgcqoJgiuSepiLbUMdMLnnUTwCRzToyfUKedZCUgPaHBsuBfDgiET) (seq (null) (seq (ap i SijfMXxnVMWAziZZNVVyfBnymELBDBicqipUWjjEIaLpkRYSENFfWhvOVGwWJQfvWaxqTzgJcXgiW) (seq (null) (null))))))) (seq (ap i TkROKqnbZyhayOboFGZioKQrLusuPATOZsGehTIgeDyAwczeJNfMeNbFmUXyWXP) (seq (seq (ap i DRwiIqKWOuSRlCRiLMVmUIsQnGuSwPBoJGgPsutuxiMHcYgZQHrZByRAeojZbvIxXEeRqeAJEDMWBilrvdtYgeWVnqNerJa) (seq (null) (null))) (seq (ap i ifopCnRUuMlqnGELcQKZKXvbIbXpUijippkCaplbwARRWDaGTy) (seq (null) (seq (ap i OLRI) (seq (null) (null))))))))) (seq (ap i Qcx) (seq (seq (ap i HscfOevZbRyroJCYxnSCbZFQCOTfFyLjZBDJWqPvvVWLfPyHCIqNSxPpoDxuGISNSVjtVbqw) (seq (seq (ap i ZvQcPQWZkgQRpwNW) (seq (null) (null))) (seq (ap i wNl) (seq (null) (seq (ap i WupBiQaJCMBlELKvvaXOUtuEsdRMnidwjqyev) (seq (null) (null))))))) (seq (ap i VAzUDRuzXhrBrYuuKUKCPeAigLU) (seq (seq (ap i sjKhWweuXtdTWSUEipXsPCWtQqDqrgNflxnWMhaxMqBeyODirAAHWCqsIysFjUNVauNuoYYiPLRSvLHtXHqpWOSBDnkPWao) (seq (null) (null))) (seq (ap i TamhwVzOt) (seq (null) (seq (ap i nlTDOuTBpNpHIIUkOeStAdghKhbiDaTuBbJaRffScASobBaewyHeKStzgSiyQGKtstZZmbZHdAXrWxnlAzMPdiXrKCebRm) (seq (null) (null))))))))))))))) (seq (ap i Zoluo) (seq (seq (ap i QOtBoHsfFoPkFHPtuBtEemhTZCLzNtdtpXXQYPVZqIZvTvzsDwwSGjTLdDvaIKFBZuoTnbiSkmzvVknTLACoFjiXmegCiQIdr) (seq (seq (ap i NjfdyECfyYvdsbbANSbbWxQqFuvcqGyFQFqlhltzgxoTDsLOPIoMTnOIxRIuiNBdAQRcXLrGXFpqAeuCsLKHqsrLZ) (seq (seq (ap i KQNbVDibSRENHnBRUDfHYVOjPLomRcuZDtab) (seq (seq (ap i SvK) (seq (seq (ap i HakJPvYzWa) (seq (null) (null))) (seq (ap i jTqpTJiWqfvobdpoxcRyMgnYvCbNkuwSCRxXHlppYBChH) (seq (null) (null))))) (seq (ap i YZaCgeXKqHaKBwANImwEgTPxpTlQcSbviDDFAdeQvqASYPHZgkolHZzGeGTtfEdQkMsLsKcDLSsRzXiTzMYCeoTReyzxVANQRK) (seq (seq (ap i OSfOFgpOLwwLIhmkKBaeqHVkVFA) (seq (null) (null))) (seq (ap i MFy) (seq (null) (seq (ap i jgpfheISKBsWNSefEBHMyLoufBhhJMwBBrVr) (seq (null) (null))))))))) (seq (ap i tYRpClltdUW) (seq (seq (ap i sXMleGaKELAjmAKKvxlxlGcOYxPecwVAQzScFqQdzcVzixgPNscZQQDYKBhymuRITgbuQGOQUxclHaJLQT) (seq (seq (ap i tYLTpVcdeIpMSiNOHGjyjSjILqHcPEcXebUOooEMJGVHaPqUiWmffvoOzdsCXXaDgwFXgBfPbwfvXamfzWiXnIo) (seq (null) (null))) (seq (ap i FDXUzmwzhoDGrOhzzaMlLgZvUEcibwGuhwEVJJaG) (seq (null) (seq (ap i wOjRXtEXGibPtiWtpyBNUDEHPlrHqjRRYudKfYJAMvKDJzcBIWUtWIKljWPGRxEpxTZySEaehcdBTlNBChrKiV) (seq (null) (null))))))) (seq (ap i cJVBbeuJjzrRjjRcMxxApvFkUYYfVtpzYRHcuxPJsxvSazngWqfmkIkFtfpauLubEwLQfNReOK) (seq (seq (ap i BGKsUuiQFBOfmkzuUNVkDPBdSgpOwXlaMp) (seq (null) (null))) (seq (ap i MjDBHycSUqRxydnEihFErzeogIxxcWEKFzPUaSkBXniCummIYGgxgWLzsAhWFqpZ) (seq (null) (seq (ap i UrAIkDaaOqCqZIpcwCShzZSOuoZDFxFEFOeCYUEEDdWLaWjKLvbaGPqjLiQIjMMaKLejtPxBZQqlDecfCtyQUDODgnGE) (seq (null) (null))))))))))) (seq (ap i rlMTCH) (seq (seq (ap i gvXAxhsrhCOxDo) (seq (seq (ap i ZnWVHEgCgihbkSMBYcHnmhEAWpHsQCDuYUuUGVtbgdFFNZxekhIwSBHTnmdvFbA) (seq (seq (ap i BTkygMajezCrXbifWKaahSzYKmXUyVKXCTDdWpJLrHdVkxbmzpswAEedXBgrWKMUgcGBBVigwFNHBsLlmThrBii) (seq (null) (null))) (seq (ap i NKeIxfdPcBeeREeKvFQiAMLSNJMubjhLIljIGjxnFPrNnYFfoGLjSmbnrXjudlABqCJFboDDTdPPQzxMZDNpyJedDT) (seq (null) (seq (ap i YfBUDubqIPUiEreGtszB) (seq (null) (null))))))) (seq (ap i juEInMfrYgFGoHvsCqs) (seq (seq (ap i FkLMBldKhslzuH) (seq (null) (null))) (seq (ap i NyqVFyFUrFUgxsRaTZLGyavpOXrldZEUPKKwAzHXOMCnnIVrCm) (seq (null) (seq (ap i pMLqWujupXDb) (seq (null) (null))))))))) (seq (ap i AGTebLwvjJtheIAIgevzBhpDuhTKQmaFtPhYykYudnyXpJyCyRYPvVRgNYHtbhMSnHUvivjcRbPCFBg) (seq (seq (ap i jTksZxgDhCsayvvLesGDYNptgdISTSxVwNNgbAHEdHkKTxRQOqyeMQXgoDQZetNYiUCjbBxIscGgDiHvhJaBgPXdeqRURygD) (seq (seq (ap i FBZkxrgOvyoeXUojHddpMrtqStbUREJfmjNkxKCqgaHYxKoOooqXHQT) (seq (null) (null))) (seq (ap i EXmPxQkodtIhGzLaVyZhcmbxBwXyxBlAsMJYYKlPabFbHoLzNfLAUWaWAviVgGQCxgsgDGMuDzriVfCFEzkDxTcIrhw) (seq (null) (seq (ap i spzfLnwMaGNhXugnoYyAjKrDMpZUiOuFifEBartcRsxSkAPCQZKDqLHPQSDHaicyRBkLVhjqipICtZzfMjjYKWulZZ) (seq (null) (null))))))) (seq (ap i kcfWrqmoROeCIlIdjBEBHNeXaxJTYMNKXzEUGTEovmdJQPMiaEMn) (seq (seq (ap i gKgEbjzBNxi) (seq (null) (null))) (seq (ap i CdmaASHyneTsRUqnJsdoWdBvwZMrQjYnNXhCblfgjlTtPjRlKekaoCrCtsCJoRnjyuNMWLSIdQKiEuKvIitE) (seq (null) (seq (ap i QPNRApAXpQmdUxwVxSvCtHsgyPznHAUAFEiPMRyWqsGnOfrEnsCbCNGAX) (seq (null) (null))))))))))))) (seq (ap i CfXysDNFvNnQtiLlVyZCxCYHzOebTWsHFyGcfSNTRVMTOYnxxqQ) (seq (seq (ap i yMjCmEtYdulNkqxNVrpztyRGdngpvyLFLiBfXqbNsCkGZpSfHeFGAAkBgFNonxyrZ) (seq (seq (ap i eEXcuXjhfaepAiTMoJaCWDLhqzOfYsnTvreIBhvUoDAWgydIlOvLraccRlBTAAoXEWhhJrRJJZGaZtLX) (seq (seq (ap i kHPXsbaJcVpCwFlBjaLyfbfcsweakYcKrPwtPcCfpFajQgChEaWoXona) (seq (seq (ap i WiXOmZSyLHTUSBdFkEJwFWBZjajgbJvgkeaACvgPoaRoUrnqdWJZZwzznRDbRMzspxlujAldMFMBpUVCGwlhLmuw) (seq (null) (null))) (seq (ap i DsbozSWRWGJPqEmRDCUgpogUylSpfENsUzUNujDJeFUjsLJZjfrGkBUBrTHpONvKjqwIgNoTjgNFXVZsPnoMoVFuKcbYZcQxh) (seq (null) (null))))) (seq (ap i ToRQGHeHIeTdtpmUcuFPkvDmEelDFDAWFIWmaUixMoKvUefWYOfnWfUBJIwrnAsbDyLzLxbalSKmSJVONmKKpytKdmAwwhOV) (seq (seq (ap i PPPUAkfhrgvHjLaJMCwufDZla) (seq (null) (null))) (seq (ap i KFEEVhRVKZfZkOjUTehImsQuijFDVNzNihzAxfOBnLvsVHSPtwaaHFURJJXTgTbDOIwVuxjadU) (seq (null) (seq (ap i vrANOmm) (seq (null) (null))))))))) (seq (ap i YVVcpHTORuvwiEeBfWeDSVjLWDAuXUMRcJiNFojIdDRwpXOSfuVGsrELzmBjKU) (seq (seq (ap i HFly) (seq (seq (ap i PtUXPUYQwmHBxQTXnayccWbzoQjzgCnEtoGrFvUdJsOdCcYNliYwHNuqfbTGmZ) (seq (null) (null))) (seq (ap i JLrNEMrlugydGIXIwJPmpHEJkSyfnusdQFUowamscGRDkZdggalqTebQwmoVDIFrNgjlSAPahpsvrf) (seq (null) (seq (ap i IVZMuPPAPdoAOIXfFjaHUlouhFpnGrb) (seq (null) (null))))))) (seq (ap i vPnsImrbnlwqGa) (seq (seq (ap i DWOkZKypZRyrBDlAQcZEPhgAvNNsyuzKqsXUk) (seq (null) (null))) (seq (ap i DxlhJCvDlIwWQuVNmTloEcgQsZIgBPcPYbGCDhHvTEMCvVJOlPfwDZToPvWIUOImteqbGu) (seq (null) (seq (ap i njoaJpVvvjrBZaqaIrNMWDizuWxKNIwciJBHZgEgSFEGOnxEjXbUmWiLFFCNywdzZZRDdCACCxzUbDaoMqNlP) (seq (null) (null))))))))))) (seq (ap i StDeWCzDTrewBvrZcVQNCCtCbnvBQLXYOOCbqHflbXoiJAdpnPisUruxtqBtLqOCxfRlVQ) (seq (seq (ap i wNcsqCCnzVZTIrBPbBKvoxCRcfrllYIOpLbQIKSfDSlnLaSEhonvirwmidgCSVDtjlMMjaLVPGgbnEbiINbGzDteLCzorlZKGrY) (seq (seq (ap i iqtwrEHjOCNwGDiuyJJKiRIyqNaZKKWlOFdcTSYOTz) (seq (seq (ap i KHZgMRFTrRwxsU) (seq (null) (null))) (seq (ap i kBLUBAaOpdjoDKPKkdAiBPELtmtmhLNSHSwYVotzReOKYDzIrxwBgBPpibmBUTKfnQGqhvmxyFogdRnjBWsmqs) (seq (null) (seq (ap i eJUIIJoPNflztngpPbSibiCafFZDXDgcwomuQqiUqUTyyJDBZxzMOZAynZYfr) (seq (null) (null))))))) (seq (ap i wUfWVRqoximkPHFjAPQcNgIlXOHCzvMBAoOEQAWSOeVtqT) (seq (seq (ap i cUjItTpNvtQvUZnVflkHFHrwdLIzmjRQFlFzipHSAQmPwcuIuopi) (seq (null) (null))) (seq (ap i SECdqkmcCdsQqKiHEGvirYgIwIbHGAFXAEipsPJLUxmcRQuJGplMzYHVytjElPuWkuCfpDAcVlzlzRtHbsJoELBNhWg) (seq (null) (seq (ap i jgJpsTSgEMriYulHzQubffCpTuLhwLcRiDvYTLXOtGqatnBChZPflgeTLAwJAtADbXADARUFUsNTNNiVXqvOMuahsGAbnyZuI) (seq (null) (null))))))))) (seq (ap i igPVdPBHhRhcOBnuUIHPmmHdUuGDtrFVxlussKrZBIqKAYBZiedGPZWLLQDBvdsabNdhAHdHJWAlmnvIWCcStKbwE) (seq (seq (ap i JSsZBVxxiWHkGPoQvTngFuaKTRWMgtSeuzvLKZBmngQTBfxcmLBFLUlwzQ) (seq (seq (ap i pgVEWbJSuQgCqgPpAwPNssRvzSSTRwbCywvSQpaUFEjXIUnLfzARSguteJEGHCDvFkTiZrtsEdmzYtUmebQa) (seq (null) (null))) (seq (ap i JCWTyWOtEWqOKDZXsOFLAMHxPxXOeYiWEeJTNaJRDAkEFeMRHVzoEpnvYrbyfg) (seq (null) (seq (ap i SVooryiaOjpQRuUsfdYALAFWqXLsLSWWZORkWyqaOHvLsRdEYojRFiHtFHwrsFsqZ) (seq (null) (null))))))) (seq (ap i mcSvqQlpRSdXlHKJBeBQHRYnIjJfLotVJNYpxlvHyNrkCBqajZoNhapOdXsqKbFxPfruGjyQwRgrQGuN) (seq (seq (ap i YzDKrZxgXTp) (seq (null) (null))) (seq (ap i yhFYtkmkmyFlZFyASkXYPhMadtxIBupPWlYuXsGHtdwLBPSEWKqdCGXfJSdZanPMhITamAfASylIzzDKHRDXeBTW) (seq (null) (seq (ap i nxRhHhMBxQsgbLofdQAjzpsXHTIgwSEteWCJhEDVWquNramLvozIbeZSHfLlyZUyjtVqZHFlcmTN) (seq (null) (null))))))))))))))))) (seq (ap i nKRQgGaSYUxdIKycAqMUXwmCvFNBYmoXCJdbFzSjYWWxpjIrtacbqHWtYFxrPKTBsVCkUynnjpQuyMtPrAVJdavHwoydmxCjxY) (seq (seq (ap i MSdeDEKxHCieULzTXmZTTpRxepikcfNoZ) (seq (seq (ap i mkdwvkXskpGbmVGrC) (seq (seq (ap i WJulEL) (seq (seq (ap i sHQQHdHrDPKQNHXecYzQHfLEjRGzAYMqBsAOJy) (seq (seq (ap i ybOYgsPySRjgjWDUAKLhtMYJzcMnSvFbWP) (seq (seq (ap i yyxYqZaGlpKiAATIJWJTgcWTbyreWBrZbWUNkyCW) (seq (null) (null))) (seq (ap i fhZBjUbHzvvMMxaPQVsXyifgQKLFqontBmlSbHbFzKiZKOnUscmlHP) (seq (null) (null))))) (seq (ap i cqwdZufCPOsBrRuqeAJcqZQflZeOoOhBupNeFIBUuNecoOLRtwbobSjxEnVfAGKGrbEqhTFYXtcQhZPLQByBimGFFHU) (seq (seq (ap i IE) (seq (null) (null))) (seq (ap i xEjJUbkoMmgJKgbyRnfaAoYJigQtDiYNhEQGMDTmKqdvsHaoGrFgzAJOmZNYz) (seq (null) (seq (ap i OhTgUfppTCHUASbkmHAR) (seq (null) (null))))))))) (seq (ap i YefeVHXwCxQzNhXrJDxAOeMwsiXEihhV) (seq (seq (ap i BiJrjQFmbcLACTbQxxGhPdZxtN) (seq (seq (ap i OCcVcSrvALaJSofYyTtrVooalryEHGAGBYWLEKgXjwIMfuBEBEMd) (seq (null) (null))) (seq (ap i YYtxqBRhXjoXeiIDFhbAjPqUxvJtxBMsRLMgrsbkmzIClxqluzninpofhHxKhCxSEphFAdRp) (seq (null) (seq (ap i qJJDARfA) (seq (null) (null))))))) (seq (ap i VNOtaAXlIYNsmzNNcDxmvAwNMwirlHz) (seq (seq (ap i APZxVvpmKYnaDEwrRUrQEbJppGShyHoCwBLFJHqBpQjhZQfCIZqgetmfjlfwFXENXDq) (seq (null) (null))) (seq (ap i lXqmPhteVQpPMDPrCfuGPJwGSKOBlvUtOrPIiCOOaXbfIjKlNjbwAFOLCljNMrqatrUs) (seq (null) (seq (ap i BpaSkJTymZksNAVTDgSssJqKVdYTLCWkJEvDlHfmfUpKHWBdUnMsAKJyJ) (seq (null) (null))))))))))) (seq (ap i gVqfQruDGnlMsBBgZdrhvogKBfXXDjZTVABy) (seq (seq (ap i guKHZtUoeaVVvwjysVRfmyIDCvJXIAMHqQOlu) (seq (seq (ap i DgFBCnrYDZvzCnhIROHYUEITtlukFLeTyAghtsloeiGqvILruJQbeLKZiSBOcVcJzSAjEKbhwMxVclRLub) (seq (seq (ap i RMVVsDNzYWtQelBLpvlkbTpjikpXhUjgfSOxfnDZGcqRPUGFwcZQSSAQzcPqBCXoFLrH) (seq (null) (null))) (seq (ap i qOFTtbqqqFZMzGgmoLfHtIjBRPEbreiaEloOgTgYLsMSnkEdOhIbGTWQlkgbPaZwUtL) (seq (null) (seq (ap i SKiomGVEhIbWfTCjbWVDbBNFgFvUsiCsikwdzAEwyQrIobctcNuTVOtvWJqTHvRvkNhccvNeetDvsUhsiTHpkQSjOQTyJliGifL) (seq (null) (null))))))) (seq (ap i lhcptsAKEkXCfCRWSMqLWTZmZjOjHIdvFnOyJfTmLsmejaXEkPxrZhgDkdjARHNoAtHohdGQzqjoFfvUGUwlSkMbMyKkNLuODRx) (seq (seq (ap i ToZRtkJazTQZPsULBprGeMURIPb) (seq (null) (null))) (seq (ap i EaGMEYxobyzVizxjfFUDajZkdCCqzrdeTeSAMqXHlfBMDMIdYltMWaVndUaeKCmuIAIYHmd) (seq (null) (seq (ap i ErYSCZUlpEuaNWzkhfiUPmfMPJCHcSBTjIpHwNTYCVYMedmgZpFbZeMnNyopPphXpvjEAzZpXPsQmLVtQVSiZLWtWGTgBmPpAbuM) (seq (null) (null))))))))) (seq (ap i uUYaQtzLdroCIRr) (seq (seq (ap i IEhgSuommwSEJNztVZfOnjzuQqGKnzusFgJwlUYhYvZRADDsvGDeSgOCeOOgrOnjoXulXsxwbOqewRftgurwNjdgJYwqpjo) (seq (seq (ap i sjAYfRytcAvmNODyIuMwYPtkNFiTPKfpJAqeVKNnqoeGoAPiRpVT) (seq (null) (null))) (seq (ap i uSPtlVAWLxiTOQWzzhWrXVnMVQpNQEknUbsCmgpnRRQETbpNBFpUaNCEdHtE) (seq (null) (seq (ap i vfyAXczXYCrEaKnkZibVhDgckQpWLHAtyJbjCJ) (seq (null) (null))))))) (seq (ap i qVHdMGJXnfyafvfrUMfarrXSmCHUCHSSdpGYaBnqGsvgKdactimzbRPUaoh) (seq (seq (ap i NAygMoftDQuikAGEGpievRWyQOUrCwxhkwAvBuTFJOpjmNhEzywCdffENgCIkXeMYwIS) (seq (null) (null))) (seq (ap i ytTHZaLUgVlPnNcyCWtKYYlUBroJepxRYkeNnwpDaGfbyPmIxuGyTnjvOOD) (seq (null) (seq (ap i pMhhjaHKJIOKCMBBIWGUnCaDIFppkJ) (seq (null) (null))))))))))))) (seq (ap i TaTxESYFkAthWUphBELHielpdInuyv) (seq (seq (ap i uUjYigHjrZAYqJMSQYUYzaIVHuNhxAElLfSWEwRHG) (seq (seq (ap i QumlcNjglweLzBflzTsooj) (seq (seq (ap i kJfNBYtAJQukDtpyNcWgZUuaRU) (seq (seq (ap i dTQtPMQtRXLmCjCexCpmhDjlGJQpjjaXTxXNmodaEThV) (seq (null) (null))) (seq (ap i gbBvhgPhiDBILTZQuqdVNBAojwlmNQXJUgLbgecDkY) (seq (null) (null))))) (seq (ap i EjlauZEPLNvIhajMAQyEkxBluQGlclQlgtaAVVdFgrVYTAxLmEwsNhxeOoluZFlfUpyviggvPylyyKoBkpBJFtoGwdUMOpZqY) (seq (seq (ap i opGNS) (seq (null) (null))) (seq (ap i OClddNvRBvBFWCcAxgHZjhEytVvlvSkXgAyRHqvJCbquPddAqGvkSQ) (seq (null) (seq (ap i xtEEnCkPWpdRaRXDhNHmbHXmXDNTLXaJQLhOjsi) (seq (null) (null))))))))) (seq (ap i UZpjthGWLOwRNMQVGcrIWnqvcvstNemkAhlmUgYqhcNYbZuraaNPlRqEBcaxqkd) (seq (seq (ap i kcMdviTuGzdbCjYJhbmWABKAIhwIHBYiZjCYrSZlkVKoZUEJtPFgFoklFx) (seq (seq (ap i bdAVoUAldwdEwATYhPGQrCGpyEXKgiHf) (seq (null) (null))) (seq (ap i bMLynpfnRAoWBnyGkUAQbLSBotMEGYIUbiEj) (seq (null) (seq (ap i lyLNzODUFWGEFhBLNigFkNGmWHvllaBszzKCRjOgLIVEFN) (seq (null) (null))))))) (seq (ap i lHpkLNxoxhQtehhXvHmERSkUdByLdhYTyFOGzIHlkdZTuxoofIajAcrtz) (seq (seq (ap i VRitzoCVoLfOLxxkLHejUsugaVAAobJMPIbkLGiCAGWB) (seq (null) (null))) (seq (ap i xFaE) (seq (null) (seq (ap i wvfrItUbHBFmixqFAInHxzATHyLVfnVLAhQwyjwhlggmNnqrADfFHaGYEBRjliWVYpEh) (seq (null) (null))))))))))) (seq (ap i DHy) (seq (seq (ap i ASLRRStOmWOiXHmPKnFShTygnpHRAaChutkLHiZErFfekXAKPzvoRyf) (seq (seq (ap i FgXfVsOkEPdckLgKgQpzoxWeHfaywpiQXKkMGGpAIDqXFGwySrCFFKGDT) (seq (seq (ap i NYDqdUkufeObyJSDHzMcTDKmFCMEFNWAYmNRrBGGhihuxjrUsIzeeNhXKJEYnviSaaWX) (seq (null) (null))) (seq (ap i kFfoGgObsZwRDdbIoJarlwvcyggCunweMDGirSJyRlnSkScSWsxPaKJSjWxrLYBfkmcXtTRfMVlFCHvVnIAsOOcR) (seq (null) (seq (ap i MkigHMwlcMgqaeNNMiRRqHmw) (seq (null) (null))))))) (seq (ap i NMPPHAGjVvxLFspwLkICcRytAAtQMshEUDrFqCDvRY) (seq (seq (ap i ucAqRBMsVclbGAYqxUQxtiOXHzkBQLntWdIZNLGUuiLRMdSRMDqhMRcfkHFNFtRENlAbDonPcBFBRG) (seq (null) (null))) (seq (ap i umIrYaSGvnNFwRNRUvxnVgEnRbZjZXgCwQQoumTEAi) (seq (null) (seq (ap i AQbjGBQKErKageFzBpNOOBCwXJjtolMeWDVRvDWVfoxoVAWhZQBdWghlxvIeEFLkpZxhNbmXbGDwFkZAaai) (seq (null) (null))))))))) (seq (ap i WUgpdCEYWlHJrXhGEmsajWCboGVLYjdtYFeKBKGtNcOdIkeIJWxMBrqPjHmzWgrWjZevznjWGaWeQLzGshOKNTwNxLn) (seq (seq (ap i HBQKHFNiFUOFKSoXEQENdupvWdMcwyGFPZshaYffpKhqCbCxkesAIXwAHsmFYiUjJJMoBpYuFoTbVpjLXozKSmCQUEngGeNTubxo) (seq (seq (ap i JWNJafxwHwaRHEkkxKAIsB) (seq (null) (null))) (seq (ap i vfcFYQoIaTHTeakxIJScUOpnGCmnJyohQYXYHhdxowQNUfSYLxZRgdNtAcqyJVzxHbXadci) (seq (null) (seq (ap i teETVNIQIZjJtuoLCHEbwSXVqjHCIhczCslAhUkrFtkFsuFhYVonyurMWqZLwiLGrdsiVYgnNCFUBjKOz) (seq (null) (null))))))) (seq (ap i fLiIVsBqtbQnrRCiocigeDiAjGNJGPim) (seq (seq (ap i eZAHvdVlgTcFSBvgtPwvKVWnPHDbpFTkaCgWTavAmRpziHzcDuWdqGjNUCyeuucksGqUjqNAvWdUHHBmDqkaMXOoStZMzcPt) (seq (null) (null))) (seq (ap i kdhAlhIJyGvGXbOMcyTLsVkWJQQjxWMLrTysY) (seq (null) (seq (ap i jqmPLEcwfkierGjEDIQrSGJKNoTlwoVsBTXwaVDqqWmEXsokfrdQSSJrytfiwgaXyF) (seq (null) (null))))))))))))))) (seq (ap i IjIXBQmOtJkHItFPIsMeRXbVAoqVSxzEXOGqEwTNrFRaphZbWvuqZwLAyAomwcBKYdzjlnNrRNZiwuXyKCrOXPxtQtFIjTbmU) (seq (seq (ap i ckpcIiTZXvWTvgVomzNxRBPsbfMPygsOKnPTdynTqaxqFk) (seq (seq (ap i YvMMyDkSlyziOBIWVcwTECYiktMmFWkLY) (seq (seq (ap i nyMjMcqhcUiNvclVhQo) (seq (seq (ap i rEbELzRJccAhGAYxTNtOGpaifKJjanOzlsdfLxSgGgEPurFnNrTpKRFoZYESwSDUTQGpqxRLsLdIGvYx) (seq (seq (ap i juAsFDvwosKJAYXEkeEevxVfADouKTCwVdQGiCSTlFqkkDGMtnvZaK) (seq (null) (null))) (seq (ap i IjiksYnsAOoPqchTcWoaBHapZNhEmjrdvesCRAZjOeLJzezlQpUyjwBlJnuVkUkwYwTjsftXRfSRdKnIzruLPiEk) (seq (null) (null))))) (seq (ap i rMoXUrYIznrOOn) (seq (seq (ap i XTDLDNpSxIUNFfifbaWLAjARyjovPwdbkhcJSGpIljwVtlxjnvijmadYgGLkMdnDilKNGmggyuqlPyZGFScwgIxfoYAbWYb) (seq (null) (null))) (seq (ap i qWYEqbwXlDTWJRTHerbYEkjmChpcPLIX) (seq (null) (seq (ap i rYAZxsfshXSgYnWIlfWtFYyLfdAWKmcWjvVSZSOxcbZeeEz) (seq (null) (null))))))))) (seq (ap i tWuxiZRoDMrsrBmNSnBAevYukrdyYbXuEyFqIRuWyYaJZtKQdwNYXdfMYkehIzRtVsDfbGqojCefaAlWkMYpQdX) (seq (seq (ap i yDLkupuFQYHwAaZUyktPYIqIDoxElhloomKwlPgKUdMqsatoyhGZVBqeFFttnqhlubgiamgvXYjIaOSuXCLTnCFcRHUuASV) (seq (seq (ap i xcdbnZSOVEaEPHOOUemmrinqzZUtRDrFhvwpkgOQkzKrhpHaFiwdyajDCySYLFGtXKGtgfZnJZNwJDpXVhkgeDX) (seq (null) (null))) (seq (ap i jzAoxCvPSRTbzwIGbzKNYtMMuNUvxPeFTYtmhEZrfDYiesCekBTuSwDkjJZW) (seq (null) (seq (ap i UDHppdpPUCuADejloByVnvtsai) (seq (null) (null))))))) (seq (ap i qNJKmojYBPpousnkWtdysbUSQlGOtLLcJZLhcZWpjzeyTneMBsVTuFBkxqtZTBCNbhsmHPWzYQuiCiTSMA) (seq (seq (ap i RTSYWSdZgiyaYwQcpExINcAKVODZoNmEulINvIueHsPwohTPOXGEPOjCZZXjjxTayKKDgaRngm) (seq (null) (null))) (seq (ap i ShAWGIjNPsprKEaOiAnybfsPYFExBqJ) (seq (null) (seq (ap i NrGGYJQBnokCoAWbnFnSxuPTLwkdFjSORgendmRbqBcPeq) (seq (null) (null))))))))))) (seq (ap i vujYtKStNNfbvEOVtiWKrrzWbzCNTbzRoCOvIFgjFcqUGAIdBGlwkjePKLrWJbODgpavcCmGKoVtwgTTwz) (seq (seq (ap i IuOFJDzHbFOrGvfo) (seq (seq (ap i vwHtJwkNmjdwEwTfjgZBboacFJkxovGmDCcXJWRnuQBVRpDDDfplfXnpHEJXofskiDZbfsLzxwEP) (seq (seq (ap i tyziUwXwPMSBmOPjAbyvautGNFEvxERtjYVrjgfkglAqoaSJFbBYTpoEJWrzbeZNCbetftwWZUeRJkGymepydzTVT) (seq (null) (null))) (seq (ap i mmQEagMVcoKqeMTlGhaFieAuKYuuZPXaLfcYCKTAzTrKX) (seq (null) (seq (ap i OstMNMTRXLkSnfiypiBwZxqlgSQAlEkPJvQexLHZadMNOYicawCbDFxNsGIZbxHOFGqUYlAnElIfoesqvXupZZYp) (seq (null) (null))))))) (seq (ap i vqVHBIXNhpZAcqNvxBAHsZclgxEWGHpONklwxPBahyWGRIFldZUgajQQoyrCoSzllBNAeyYLD) (seq (seq (ap i EtnlSRjwEQEEiqIaDVaslVifjEkqUApqzkCOWkdgUgskCUuywHIaOocIkqNIwyiuAsxdkIGFigfx) (seq (null) (null))) (seq (ap i ku) (seq (null) (seq (ap i KhcTYx) (seq (null) (null))))))))) (seq (ap i YMeGJFIvnddFYmHEboLhMdEqiOdIwWeKFK) (seq (seq (ap i JvrNjtIhXsjk) (seq (seq (ap i bRDSwZgGkOqnOVfHweBXoekIn) (seq (null) (null))) (seq (ap i LyOGAIyGHnYNQNtbeOMUBZgIuLXlJxCnyZIERvUPhGLhoVuSAFFAAgyVmeGcC) (seq (null) (seq (ap i dLVPPGyaru) (seq (null) (null))))))) (seq (ap i yFFbURPWJTFdsarybImbJUvMlGQdydDEAhRvDtNoOAztIuXJhbJTBTAcfCtSCWqCBijVY) (seq (seq (ap i sXZtdAeFSLafVeVPlwNRUxKJoJfpczgzJhLGGgTsLCjzLzzfuhtodwgjIWoOoBR) (seq (null) (null))) (seq (ap i wahjajSXGMdWNhrKENOoQyePdKMjJANiLOalnSAFQiwadCCsQGaDxWXDOngEHniMMNhTCHxRsnKEQkmHnWKMFI) (seq (null) (seq (ap i HUkqtuTKmpbcwWRZqCWSiIVwGRqHIH) (seq (null) (null))))))))))))) (seq (ap i lxgMvokCFakKanWTPjPivUJgbawoIOKYLbFaeeVBwFHxJkFnFJApkxGKJWhrLJzSwVLebeHKvWPWKUMNafuyUMi) (seq (seq (ap i WMEHmmYBnLxJpzzmSGgByUTAAutfVglXeXVHzZUrfN) (seq (seq (ap i QdVjrbMfhKUvOVMBmsQSrLyehzzQsPKfTbTkyBhSlHYaYKbbKxJVOpbTIleD) (seq (seq (ap i PXyeLVxpo) (seq (seq (ap i GSGwXdjAeIlHfHTqhhTQUIyakmJQSGshebyiATtQknOKJHaJrENdrRxcYdiUW) (seq (null) (null))) (seq (ap i ZSkBgHCNnbRRnJGwjEXNYWoBvWhcBsC) (seq (null) (seq (ap i AEXbnsMBLULwCacDvyzMts) (seq (null) (null))))))) (seq (ap i IjMqMPpyLIGHWWQNDzEmrrrJKBpMXYDBTogFMSVkBSfKUhUGswuYPOyXdkrbNmvqMpCeDGhN) (seq (seq (ap i FNPYLWwxhzWGfyZrSffD) (seq (null) (null))) (seq (ap i rrDyrjEuaccXwcZMtAOgycqpYNWFmtMVjEdXMuwayBspmdGTFQAbClDNPEdIxlrgFd) (seq (null) (seq (ap i vnNkONvbQudKGvGLOHLkjYdNhxpzhMvZxqOUlawPRxaOhiXiuaxHLvbScb) (seq (null) (null))))))))) (seq (ap i KvSwVDDQobzKEKeSydOAMCkhWouANQZoZnfUYHCSSIFnOkJPUpbAYlmOakEdXttNCX) (seq (seq (ap i DghC) (seq (seq (ap i vapjMIOeIMkWQedz) (seq (null) (null))) (seq (ap i qrsHphHswpOhDGmHhkWPNdeGxPxvYgAcHiAxAQwTDDkaqWLDtSUNTyOlgmhGKW) (seq (null) (seq (ap i WVenYCrIAkMatutUiWQXyLVlvhPADaAEpJnxXdbRijdmBEeUOBuVUBsxBfHYWgvxpaJOX) (seq (null) (null))))))) (seq (ap i AiNYKqTDJCtDToYgyUVcOWEUcxBuqrtddGrpLjrqAMl) (seq (seq (ap i zBiQSvteuIHpjnBWorJTLPiSqiLI) (seq (null) (null))) (seq (ap i VKoikfqnidkPAXTebQZnlTgXakiqmlgQixNXMBKqQsHGrfuPBvDrxhaFcxHb) (seq (null) (seq (ap i sttduhOxjXIeFeItOBUQTZJLIceCDuSriQbRKivoVglcrwnWuCZSWuIqThtIg) (seq (null) (null))))))))))) (seq (ap i DmzuepnWNzwsJYjRUALCqIMQlvcsnoALcrwXOEonsLdnJimMRQFAzMzqToTYHigqHACZN) (seq (seq (ap i uLrrMghFWxidPBvFTSmQyjsreZzCmUCTSiZQxzOhenkKrcbiW) (seq (seq (ap i ZptqomTHlzzMAcmfWwMTrRaqgtuEZhRGwmKQagCFuNsNNtbxzNmAmhUnkIhKsfNqEpRKzJnzHuWVMEdiLUz) (seq (seq (ap i WiSIgNBiPUOlLOmVMWZUHdNxAfuaDZUXwYaEcWNmTkQFFmfZRjNWTHlteQz) (seq (null) (null))) (seq (ap i giVseemUtAXWvanJpJssTurXjKkNSxnWwGvEZWQnzWhfYWajcEThgOJCyuNYvxzFmHEQwSmFiYP) (seq (null) (seq (ap i MiOdZtFsvSbiOcYqrZJRKyMhjnCNEOVCyehCHmqjLrxqHElCOydTgsipAbqvFNwxWj) (seq (null) (null))))))) (seq (ap i mdFgxhOaZwwihVLyZbVnzyWexjUZLeKkpSJsfVqMxyuOnIYOKBaLmEIMHFKftimciZhCEhzANgSTLzxWKH) (seq (seq (ap i tqtlkhtGpSQDyu) (seq (null) (null))) (seq (ap i JjwJcEOIBvRwbjrEoYFNeGutKlMDqITqnqGqVvxzVWRGgPiWgXdKzgbkFRAwDSCvYtWzHOoRezXGjnLaTjHaKbhR) (seq (null) (seq (ap i VFEBHrIfzBPexbvuXeTVsrtIY) (seq (null) (null))))))))) (seq (ap i RXJgfJzEyTMkjGTNmKNtdruICbMoXaHDCWYKhhyPRRiHOuyufTfsjqxRlfmYbFOSThZgAtkbDjeuHXcQzNFuYbctvtXxeI) (seq (seq (ap i eNLWNTJrVapAbjhATCyNUZodoLDaJihEHqxaTgrmwPvPOxsdMzjsqsMkiNqCRxufurrMTPAILEk) (seq (seq (ap i mMPYoNqnohlTARfuFxRktxDVqgevoWgHsEX) (seq (null) (null))) (seq (ap i UBvPMukHJgEKUkrwYJYSVkHtqUkWLSfYqunabdciRSGFCnPKzAekPuDgZEnffAALccETCcoVdcsvXNGiYqpyzdTD) (seq (null) (seq (ap i FajwUIFyfRbebtacXxFdSrvQLyylgEVgzxASmoSPvLRgkZUuCtundKIMgEQiVt) (seq (null) (null))))))) (seq (ap i hrNbJzqoXBiKPkkmZZhagCujOQqpBTXYXIXqGGZqWNtAfSGGAhAuWGKxCUZoJgEUhzKnQFYls) (seq (seq (ap i lwZJwXRUHKYwrAuQTJvomUrBMF) (seq (null) (null))) (seq (ap i fjbOWoGLgEAtcByoHgTmruOYJaIWoxPxMpTPOWgRzNJOpYZdvCuWCcoyXCXuCiZJoLNmuzUglTOZ) (seq (null) (seq (ap i sbxCjPYlYRYKeCMQbdZHrqYmjBTPYAYjQiFlkDPWHJceyGmmgLoomTZMxfDhMaZrArVQdRVgypPizWZPhxulzkwoHMbaVT) (seq (null) (null))))))))))))))))))))))) (seq (ap i eYYWLL) (seq (seq (ap i wizVJxKrMfjgWOLRTHmSVnWwEWioqkdtlrSQNxpTJPjRKhIYqpDmXo) (seq (seq (ap i HHvQfoWVeQQiTHHBPAmdjlSgodypuUoZnkXHTjzgOYyhuzuYqpZMdjfMPqyJtOvKJtUPvViAHXBUD) (seq (seq (ap i SsgCASCANOIoHdaWYvrdFPETMFNWFDAkdwjRbFNYmtxEZg) (seq (seq (ap i BcvgoNnJHWSYKDkntningxdXuClPWPHnlqMonMOZsMgOpdemhDaekPcyjpzSDIYfWwmTtNN) (seq (seq (ap i QcWknwwrUAZJdNuhfTqVcVenTuFfJsvdmWkHUkmkYpWfZWUhPLCazznA) (seq (seq (ap i CkiXQPOEKudlHsRaTmhkZQBBZWvznStBzlhbiQSYooNuVPFpNuTrpIttxERkFsJOupmWtOQMkUrfGIhC) (seq (seq (ap i kEEFCPmJJPhsoCeZRfLWolTmxDmoCUPdBzeFhAgijWLFzaPkOiUdIZzQTUrrSybpWRlqfzmQCAAmbaqZcXDzHLOoyUhCNHf) (seq (seq (ap i bAGbsyNBmqALNGkteiIfvEOrVvWMmiOVGPtfANxHqiMIeaTPaYOGHsvWgFKAaHbLBXXWvFW) (seq (seq (ap i mdXRfgGGsciAzculiGt) (seq (null) (null))) (seq (ap i gqJeZdNhqHBPXZlvMqwQPpqdJnjXYNWeZZmdxxsiHGKlliShnnSBOgQOJwJuzfySiDjfnexGFghTmwnyVnG) (seq (null) (null))))) (seq (ap i bzxvFDwOGLFchJLGxpOeMdpwScauMSTpSyzSTcgdisjbUqGOODKBahNUli) (seq (seq (ap i MohWunALEsP) (seq (null) (null))) (seq (ap i rBqrhMYNAzF) (seq (null) (seq (ap i wNQyQwANojCFinqZLHQHyhIknyBcCiBWEKaGBAdIzdLIIFwyoGuEdwhTYjnuNpesfo) (seq (null) (null))))))))) (seq (ap i DQErNOOtBQzjeOgBUwHUkPwFPvefAhRSNeAYSQ) (seq (seq (ap i JDeYFxsRZEhgvKsnASdlFqDVkhJbvLBvxcYmpIKUiyamOYrpVxgaHsCsxLVRDaezvzUOIndxAWeZLKEvbmcINGAIAFpCJS) (seq (seq (ap i pvekNmCgWOLxBrSNSMDxFuFFhYOoQbJzVcPmUaLKjR) (seq (null) (null))) (seq (ap i nFkRIXKJ) (seq (null) (seq (ap i fvYxGRoEVaSpboHQECidJNIFxHyFyyhFlpjMCDLCpZghYDXUBxwZxjubSmqNWboGNIGmEuddUEq) (seq (null) (null))))))) (seq (ap i vzduwLRpijdrFPkciIeFTMcsztdcSVNQZKefjxgCWPfEEuTRVjZYZQfGFNNtoTadNzTsnvYff) (seq (seq (ap i sbolwWaQernuYOaCcEvDiAkNtNXcrupkMalZvmZwjoZRFVJKjksgwVChtxkuvKmbTLbyuVYFVnbLxyoMFmAY) (seq (null) (null))) (seq (ap i JdSEUGYEGpvTTiRWSwuKsbShtcWwvgdauFOxzaTTEDmUxxEXWLrYCJFOdEjTfFbNGkTSGFuVqBEkVnWbJgXgyU) (seq (null) (seq (ap i xAAznWvpogHHUlqLSUUVNgTeZwXitaWCMRivsbUFXmOxkiDFnValdnXHyXikGNdCdlBsG) (seq (null) (null))))))))))) (seq (ap i MHgLAY) (seq (seq (ap i JdCXNqFMaevicNqCsvBUqYidKbPgUMBCMvQYNpYLXrJDlHZJEBdSwkLODDWqicxAUFmVBXeBZs) (seq (seq (ap i mvPSNKJnbHpVunsRzLL) (seq (seq (ap i TTncWioaOjvQSyrnVELKZREgPoaGOHtMctFLuwcbsrOGXRcRFs) (seq (null) (null))) (seq (ap i OnllszDQOnClzzKjvwEhElClIZtyBRTwobCgNUnbyejfhNTcdLQNOFR) (seq (null) (seq (ap i NopK) (seq (null) (null))))))) (seq (ap i VvGOrkGYzqenKgKTBNffDMToylpUWlfLRBHxSLZPhMjCbHOxcgWdcjHyuxYRZvEFZ) (seq (seq (ap i uszkmMKVfhfnJEUFlKbQTgsEqphGAvuPVbqzmYYuubdoIofuKjamK) (seq (null) (null))) (seq (ap i ydXNamjrqNcxbTJrenpGdwRKiMnamGVhWxbjaXzDxCIfgLlCl) (seq (null) (seq (ap i foVqkpmwJrirBEOJmjGRoFWDvxZGzAwycqxzPbkVqZWVODsPtDamirovxWEe) (seq (null) (null))))))))) (seq (ap i pXfdYGmoIfgTjNOjYeThEOKZmLTrlZZGrBUxkOYpeLVolrQGMOhRWNxKHzhRzrrEzOXaR) (seq (seq (ap i ebSoDXBKPlBsyj) (seq (seq (ap i nNKFmeMjjDkjFTnQuCqkGfxOFYUn) (seq (null) (null))) (seq (ap i FEYwLRhZQYeShvTLJWfKcFEbLdRIfItLNeNhNSVtRJBCWsdchOtPdVdRAQgscwUCDblhkOqSmTisxqGqyh) (seq (null) (seq (ap i RCaIAvAOMXgrepHOfpJvXnU) (seq (null) (null))))))) (seq (ap i PdNVRCHfTaLPexFZIUCeVRHYSpaKtTJBqHVw) (seq (seq (ap i SZhRMbnZUmpRa) (seq (null) (null))) (seq (ap i TwprdzuLAblqstWirJxXCtgnfmTCbNWmnfKlkTHdUovdRLhnaEWemZPllcIRSrcgaEBQNLOJUOeFkaBapdMdfSgBizvwk) (seq (null) (seq (ap i IQVYYpifBfpooleUycCCOYJEnQxvWNXRuxpVstyfwWfDBqnWnQxZu) (seq (null) (null))))))))))))) (seq (ap i LMlKOzkxRfjadDwOctkFmURWbTdJPEqCNFAA) (seq (seq (ap i gnMedOyxhyLTBTTNFcTMNsaciffnsWeLtAoZWHaGOjsONtEmxOtvPmGtLvKnzLDgxjV) (seq (seq (ap i bmqaFGXOBfAUAvApBgtbuXjraWJuFqtvrNLvqJbFTVCPrsuBCqPCoUUWGdfcuMcavLQCMevidzxFdEwxJhI) (seq (seq (ap i eZZdQoSCDDSGTqTFXdynbJhKiDcMrFBOLXckJRSDRWIuNCJqjQdVvAUcXRyjiFHCYaInWWcMpfJGQbQISWIAUGfvG) (seq (seq (ap i feFqeZboQNcDvUTWBASBeORneATeXQRpcDlKhjohxSfaYHPlQPLuOaV) (seq (null) (null))) (seq (ap i SgedrSQhaWRtzrsdTjfKHXtvEcWYbYOdBMyXhED) (seq (null) (null))))) (seq (ap i pBksARzrYtmKeSoyZWpmQJcCtubjwXbHFLCPPbzcyMUmbYceLsWiMEOnPhXSRfYKhBNiiNwQxJepoCrwHKz) (seq (seq (ap i UtsiznhXIMQsgTBGIogKWWcbSWZMCdCaAjqqMMPqOzflUxiFxwadfzRGGzVDZbyveiTIJDzRPJXLDGFdQxhpCdrBSaQDLj) (seq (null) (null))) (seq (ap i etnPVTtbTLbonSWhTvHaSblKAmkPi) (seq (null) (seq (ap i sEkGBVltpucPGPfkzUMAuyTxWacHeeKjJ) (seq (null) (null))))))))) (seq (ap i sdeNNXitsmmordBLofLJekVuntKjXVqhTqVNkFnZK) (seq (seq (ap i yQSnKIpSV) (seq (seq (ap i MfhHiMCDELezaTkqECDcemgkrMXfblAb) (seq (null) (null))) (seq (ap i msXekPLurEThZVFxmONPIxGYVLbpcuwPMGoYhwV) (seq (null) (seq (ap i hlvhxnCqdcvWQQ) (seq (null) (null))))))) (seq (ap i PesQwevXvmUyIaOQLFgyMsmHfRfkaFZbYVHzvKfJiHPe) (seq (seq (ap i cUjbCkWwOgnmZPeXYqAAxnmbLQxVKvLGFAasxXUrLsMOwNK) (seq (null) (null))) (seq (ap i uhBMFheFwgLILBbSAypEQuVoXcqZSUQBEhyRgYrHUOYDApHiyXpaMooXKTUpxWIvcaQUsiPzgnnJAhoLjFYKdOBbMY) (seq (null) (seq (ap i HZpTOlvLsKwFdlsNGuGblSELuEJpLdf) (seq (null) (null))))))))))) (seq (ap i YpVqVxQBMTqPlCrhGvlxjmdQeGO) (seq (seq (ap i UaNyLIImccpKecKlKpJxoANPCjuvRdZfCyKOnaVUlZpUCLaIQktTinjbowi) (seq (seq (ap i aykFMFvJscHswblRNgmUQYihmomSdkBeeqRtzqyOcsQZemZkhKyWVzeiH) (seq (seq (ap i jEuDoRbaowlbvwwosVJSwEpOCqMrFnQvwHuihOcjcdHHzmgRKzUKymTe) (seq (null) (null))) (seq (ap i reLKqPFPiRXCaGiaEpYcBHUAzVmTsTaKoziWjzOtURpatmyTSxWoDxqc) (seq (null) (seq (ap i HXvLIxQzfSQJGdSMmVRGURIrCwFTjJsGcbNwVgeWDTxwkZZUEuEVtlOcVO) (seq (null) (null))))))) (seq (ap i cyBJNxhKmETFkHx) (seq (seq (ap i JBfUaTrXKuScuVpwHgZwMaNWDnVZYDLNYWptNLYsBwHVLAEmEfFQsTbFzUUpPivJMnKRPZoGPdVEWxMlebcXjBUYNYdvbObzck) (seq (null) (null))) (seq (ap i LwFVBov) (seq (null) (seq (ap i GLVCqGZcdQJqKjKFZIIUrlvGqdiPBsVpyPIcTxQu) (seq (null) (null))))))))) (seq (ap i cZCGualdVlFHcYQhBuoJUZXXAdTgaYmqrAcJX) (seq (seq (ap i ugDXDJeUyzUprEfmzgjIhghpNwDxRoHJHQuhsSPIFPUmIeSSYVZiRUlSTzhkhdipL) (seq (seq (ap i wvwuSzkvpEgRJRzQNfqkPMlQxAPBvLqLUJwtforgPbtSugHNyhrTtoFDzQKyUiQNFU) (seq (null) (null))) (seq (ap i VbQZYHFFhhaHzpdZfIIFWpHbjjaukUgTPRuiZNJUFfglCwafGzEuhDlsSzKpKbgniudYsueVBgWoGpYi) (seq (null) (seq (ap i dCzuAmRCFQosYNagJrOSSFuHqonFtIrsTRqLZzIUzWdhzQwuJuKAHcPIBzNFAtPRszjnfNbbaMbFRIO) (seq (null) (null))))))) (seq (ap i zoH) (seq (seq (ap i zfSQRvWgdADgrzSpqFTCDUIUOV) (seq (null) (null))) (seq (ap i NmYH) (seq (null) (seq (ap i VeFHBBosFySxlLpnLMiuAlhJAujPyWv) (seq (null) (null))))))))))))))) (seq (ap i wDgMjAWwLBXkkDlLygFyibNqAgUQ) (seq (seq (ap i RpxLuAFBzjFnHNavkybEKIFCkkIeZJJfQtwyfPuDBCcaLVxkKLMjZWeBABeS) (seq (seq (ap i eG) (seq (seq (ap i blzKVgBqhmRqJyJJAOpkDtAJFsRoLpqifZoeKCA) (seq (seq (ap i vuMAbqkmcPTvNLcpNhPUlvuOjxGNVNeyyrDVnxlhCMhcV) (seq (seq (ap i pDphiHmAOAZdCEAbegXxqOKmgmufNnKYeUN) (seq (null) (null))) (seq (ap i dnrlLAODziDQudvZTHUfqmzJBufcFmDlgWoEKjiycBirNWWpjyaIfzhRtuGTdvePsljCUXVDSrCOIrBbgbWTvUUinN) (seq (null) (null))))) (seq (ap i suKpukdZTRIJumWYtwU) (seq (seq (ap i qjEaPK) (seq (null) (null))) (seq (ap i hlxUJdTKNAZtUqFcJzsmDxVdgLSWfUmjTcKrTmXqQOLI) (seq (null) (seq (ap i mcYNfEPiwxJLHFljlCtcXPXUdlRqswPXVleYdVYZmkgV) (seq (null) (null))))))))) (seq (ap i VwlmoxKbjoDVZzOtuye) (seq (seq (ap i QbIYPtbctonnRCfwHJFXWqcgQGcDSBDYACQOibMZjTqHAeRmEpyTMDIotYXZxQIxUBtpEqjqeKOUYZRnsDXPeUpIVUXpeCU) (seq (seq (ap i wftqGBrrqhYAhHYMnuYlvGvnXzNPiH) (seq (null) (null))) (seq (ap i rkrlowNWYKp) (seq (null) (seq (ap i GJolArTROWOfchGxcAnmtZogLGlRREmFVmgFkhCPSDrSghoMqaGhkefzGYEcBSyGGOT) (seq (null) (null))))))) (seq (ap i lzMMgzHXlPhXePnvgJSKmCHELLUBAgXRKHLhbwGFGmIZEQNtpJlmuzaynNrLUTPBuRLJbrlfvPxOawcYrQyYlEEQgZOGzG) (seq (seq (ap i iuJzyCavlDaItpqEWipqQmgUtISUcUqZwjTEySJrTPvvrwiQRmfdkSzHxOKdTeDUFsbaZELVNgupbtTxeQEWXAzkDBIeFG) (seq (null) (null))) (seq (ap i taZxgMBBnWXzZewlEqahVbMGmfHVqehbNmQSsbezOCHlQfnLGbuIhtHWkDuiniVQIwdpCcCxlgL) (seq (null) (seq (ap i hWXEXxGQcsDLxyKbSQlGioZqqbkcQMMqgq) (seq (null) (null))))))))))) (seq (ap i NYcmcjhAUURJODZTOWzvIamGmwGHTRzEGFXSKLAFh) (seq (seq (ap i KTOAVoJBipObLWkZihmnbGKauavzxGGLDtUiGIaJiECqOhrsDgd) (seq (seq (ap i yQMgaUzfLHMDe) (seq (seq (ap i bceqeYkIuafeoCnzULtXwlyygIveLunMndqZaHwJSNB) (seq (null) (null))) (seq (ap i olUzTQrhiwpzYdqoOWREYMoIYzPQtnciZzfXOUWZps) (seq (null) (seq (ap i uStTWmLmwhKulnrGxCurLRZOcAjBEWLxhvPGICnbbfnVIoRdlgBpo) (seq (null) (null))))))) (seq (ap i VXmLFDGUZVBclGlVnjHLxplVnOfNbSUpEfSCcywYZYnVL) (seq (seq (ap i HZLZgbAoiguAdrnvKHggqlyrZiWWUfmKBtPnzwcazphPCRX) (seq (null) (null))) (seq (ap i ykVnFynmyEaBxIOMPkaXPKRiMLSpxVrNkvLlsdsWzxmMuUVCaFleTIFJUkVCShTkAwXwbeVavdvkQwpebhJImgYOCxglJPXwXm) (seq (null) (seq (ap i inRwj) (seq (null) (null))))))))) (seq (ap i zHBgykLwrZjJXOIwdDTiwgeokRKYokw) (seq (seq (ap i TuMesrBqojwnITcy) (seq (seq (ap i jYTUfEXdA) (seq (null) (null))) (seq (ap i CsuXEwxFdmLd) (seq (null) (seq (ap i adNyI) (seq (null) (null))))))) (seq (ap i XAfgWKrjNsweLa) (seq (seq (ap i gsQpYrSXvZpXGKreRuEhECWnvdiMDgdwvccZKcaBOYXXIoTxjFSbImrcFYKmgxQojIPSyHvczHQJotLsJ) (seq (null) (null))) (seq (ap i ElhFCVLzTIoIwpMNjaqPyOhrchVpyuOdvubjqYmxKFDzHdbrcBPUMuJibubAZOryjrWzbtKRGNtnhkYjOc) (seq (null) (seq (ap i zOSTNPSQFpXMETmKHzGHnNAEOHnWtDGxKKurPHSbnWcT) (seq (null) (null))))))))))))) (seq (ap i PXIPPqSlgZBlEpDAyIOlHfqzCbhQuHGpTMCoQXzmHpErcUkHoIEmwQdDiqjZhtgOsQfGkZkRRtjLkanHKuDfxwcfqBOYCrqBhVJ) (seq (seq (ap i eycqIOECFYvuapZweoqanWvbxPJheuUVkrTsujRnLfwrPFtho) (seq (seq (ap i NEDyKbJVukiPKoHwvwNZTmdEffsfdfISzmPJavfaZdGGXpTUqXdjlXlqwRlafMvnIpsluUHNNLhwLdBaymIfnTI) (seq (seq (ap i zh) (seq (seq (ap i ZEzvxOzvuSiegTQDjeZYCRnOMmjFscYfRTZFnVuwudVyEjE) (seq (null) (null))) (seq (ap i rpZuIoNytixybvorVXaMexRHomeMFiafvkbKLVLImEmXBYn) (seq (null) (null))))) (seq (ap i AqEkIbhDZurIqwGvWBtAyCyEztbdroYPOaYwKAbPNMzmoBHOKyfKuDbtkUqwPELpcQNHtycdjhPsyfQrZpImgkAP) (seq (seq (ap i DaqpiDilmefsxjOxlndkegmWjPRMpHFOLVzJUtevRdhTlsgTaxenRgIwuFuxIeuFTadeGPbJEFpFSIDMPakgVpapzoUy) (seq (null) (null))) (seq (ap i kaMBMgEqDpW) (seq (null) (seq (ap i QHIGpnoDEaElvrmHeznauesQUrrlTnnmccWeRBRlsXoGlcyBkQNOVGnCucJHauy) (seq (null) (null))))))))) (seq (ap i kJFnAsXUpheYIegVggCutfSyPRcTzTLgoNyAmURLwEGJamErjjIEeCuWTPqJjLuudY) (seq (seq (ap i yvvbI) (seq (seq (ap i YiQMaItEpsQyjAuzvCxUcxgNVpvLZhSssYTabFNSDHvqlOabVGYGzeGRAXUMngkVbGyQapQiXroyxRUvdrkhnGygt) (seq (null) (null))) (seq (ap i FksxCrVPVotjIxlOHYYcDJONwliRltlSAvqTXsEKsAm) (seq (null) (seq (ap i gQstqBlakeKvpNdrDdquMoHKcHGjrwkBEbxLdpWWNdYvKNSwLpaJALyVOfpvGmfeXOGBX) (seq (null) (null))))))) (seq (ap i FrFgIThnhUwYfRJRjCitPCwVkoaUQZKcHlGfHwxCynXGKxHmeuylXPUNBwpJkxl) (seq (seq (ap i xhDXlLotTnKVnciIWToJYjLaTwsuwrwmRSwKQrAeVBMywoHajfYniSsSUnLJmdLSkMDyYBCgbEnqQsxNEpbBTSHXXIeNxau) (seq (null) (null))) (seq (ap i WqHCyw) (seq (null) (seq (ap i BnPjtdokUqZYxCbfGALSnxhLPzpbZoWEzTRyBsPfmgVn) (seq (null) (null))))))))))) (seq (ap i KnNGdhRKpkowNrcqUDSqXDGVYSKsAAmzwIsMhkTAlYATOYEkvamGaxNfEYKfkmKXKIwzOvv) (seq (seq (ap i KJAiQHNT) (seq (seq (ap i BXKvxbOphsikFMvqcKXsvFzoqwDKfOmizgKjCeLDCqhdGLEyApWARfaXMqYYYwtqLFB) (seq (seq (ap i eJMZPubMGrMexArPgexeQbnkcmFSIQVtTnlzedYJJowSsrhtXcTWjyviNUzDudQmGUPBYFEjDaKozJoZXlNfDKEDaeFKMoaYsH) (seq (null) (null))) (seq (ap i JxEJwEhjcbfsapQmiuOMKJaVrJrzAGJAUVFOchvqNVHXLNqMLeZlQeCQXZqLzNmuASZAPYumDOlepcertuuwECWjPa) (seq (null) (seq (ap i diapHZSDIEAdkegZ) (seq (null) (null))))))) (seq (ap i lODbuMyzEPbbQYwrd) (seq (seq (ap i RCCxbdVNlnTXxGkLdtGPIwsIRbx) (seq (null) (null))) (seq (ap i ZxEvAUcDBshDzaipispuSgDHsgSrMPyFdi) (seq (null) (seq (ap i cYOfCbzqOrCRRJbmStAWvzBRcTUBpzYFZYxEjivzgqMXepmbJtNHlpAKwWeVtPnKOnZZCyJN) (seq (null) (null))))))))) (seq (ap i KTZmSBxHoCZynKnoQKUlqtraHgSSeaNpwEMkxILXBDbVoPOIeDoieEWodXVsIU) (seq (seq (ap i isqomcpBMJuMIrpEyQxHjuOpixVNMfRBHlMgyLrJfekEyjPuJZuJsPLjOorgWfquGaBDKlVSzNGrxmogstnPjCYcmMRvKnKCRvjS) (seq (seq (ap i TTJGtJiCTtIhLABsihhkCFEQCDnUONZPWSScxscenBkmQgfOmlyUgrvJpnqKnXsWxrtFlkbqZSdygUKE) (seq (null) (null))) (seq (ap i ecFgeqYMhPZjDEPYTMNef) (seq (null) (seq (ap i rOeNcAAskBNupbDpdLiCDCvErsuVMGmdmaLyRtICteZsJZkmEoBumjSTiTkZefRrrXcNABLAypvvj) (seq (null) (null))))))) (seq (ap i jTmyupmXDTOJayqqqeFqvLAFmUBbQUOWamKlkyeWIbTPRQmCHxrAkwBuCikzQbn) (seq (seq (ap i jglbmyZoMtFTrZBZkKekfaMCwddUtYVxwlWZaFmMguOcuuEirXpsmJsPVWiwBaSdQ) (seq (null) (null))) (seq (ap i JdtgEaqifDFrdgKBcuijqayblTyuAoGyQbmnVfPEZSbfPOVGPDPrMLDEBgrHY) (seq (null) (seq (ap i IOwKyokvqaEtSblUBMNkNCCDgwPDuKinmcIjvPmvEncDeGAxwUpBsZrlbmpCcNjncTqneEkXrG) (seq (null) (null))))))))))))))))) (seq (ap i DBompnaMiKAoITZNYAWJlLfoNKxxSdUzxSIGMY) (seq (seq (ap i JnnowtFJeAbBGpLDivkjUZIcfETwDKbBQFHAVmVbLnYtNHAIixshRYABtmMAmeXVGJbkIWvEHfzoIyfBTGPUdyKVislUYAnryBu) (seq (seq (ap i COiabVlmCVSWznxGdnWqdEeSWcfeqcjxdycxmHSWIiNXobgGQnFAXrJAptPWcxIzqGoWhhNK) (seq (seq (ap i BtlfMBdqgLZzCUQpaLhIwgpiMRdgzPYdgcrvYsTU) (seq (seq (ap i yuFHJwohwPJAPaaAPhatZZshODdmDoazRHMedqfUuRsR) (seq (seq (ap i mYKwpiAWmDgVAjNZJLNn) (seq (seq (ap i DsrTMVTHGlyghCrExsZeUhskmNPDsAuIkKppUSJsRTsqXPCQclXeWavfLXDNLSWNEbUUVCwROAcU) (seq (null) (null))) (seq (ap i mEOdmEYRyPFqBMUWBFVWjeGOxBSmjMPDhrOQsVfKGuWUfKLCJzXQztoggQoqcpASYabySmLeAPrNODKATpFjKsKPGMHzLBbfUr) (seq (null) (null))))) (seq (ap i cBjaobmAkRHdTZaJLqBbObGhLYqPnbjZtbwvgvvdsWyhXh) (seq (seq (ap i yBEzjMrMJuWYHJsNuzfMdapkubEkhLHmnGArlYHLDMbBCbhexOqfnscMixs) (seq (null) (null))) (seq (ap i QHQsIQyhredWNStgkWAgbmASjDMFpzuvufdwpKwPFubWKDfECbZkExigMPcvUwuGJyZySTivHw) (seq (null) (seq (ap i FuFJIvWuEseTV) (seq (null) (null))))))))) (seq (ap i QJUibLeRLviGYplPHZjVgIuDLqZnUdjkQJg) (seq (seq (ap i xHtdHkzYuWGiAAyKshOTcVyllRchTsJKrc) (seq (seq (ap i xjRAjqgeeRYJoQvIpmMDMKOGLXjfoRRhvYGGmHmPbElnbEMvvptBPWkWJLhRiK) (seq (null) (null))) (seq (ap i gQhvjfUIppJdxVaDDani) (seq (null) (seq (ap i heyOljufNbfHhxPQP) (seq (null) (null))))))) (seq (ap i oOmgMwzJrkkSydrviOutodYjHdaMMTYLfbKbxlyDbQGedufqLiByTmcslUzsVbsGkkkGEfkavHeydZGAiuY) (seq (seq (ap i WZTLAqzRpwUXTJAXcLumytNoerMMKUIQNIiITAqwwsFgYydUbczltnJcwwDaFLTGDmzXxKfHgRLIbn) (seq (null) (null))) (seq (ap i vrlLPIpboTGvpMuqERwnyqewqzRRNAOcaYCfbBPcPwcaWrQJkZXJzIpIRaBcLmKtOzjcKTnjGTitGfvRMFPVgRwTGoZvLGIl) (seq (null) (seq (ap i YJQNgbraRVodKxspIoFCsbgVL) (seq (null) (null))))))))))) (seq (ap i IlbBBoHMdx) (seq (seq (ap i tIyoZINcMPssPXBWD) (seq (seq (ap i JaVJiCzYRsIJWjMstLvLoISpgftPUScAplhvTLBlHzvhUvVnOZwgROzqOeGWRofhpmvdnmFqoijg) (seq (seq (ap i aDhLbJKrlqOWtDPXEzMywZJAvfynTTXZECjFcXIUhpvSKzzVaGvnsYVkPJB) (seq (null) (null))) (seq (ap i TxORGRLScBFIbBRuCtmsDmrgyeROhzOJezrxsMnwzvsHCrzzHYOrmvmlIKbOGizavUvHAChnNBiOYhPdqqZfNJRVgHOsBEO) (seq (null) (seq (ap i hIcMoEfnBigCuekdixDBnrZQukvHGegWJpArNcZjEsomWCEtwbrmBzOMHmMLgtJEAXKqvJrxnYsNZUxHgpkkLiL) (seq (null) (null))))))) (seq (ap i cwNCQtbPQnDsjVeKkhLefYctZZJnCjfPLTMtsePDkSkLcCIsu) (seq (seq (ap i FwtmEkoc) (seq (null) (null))) (seq (ap i VvqfNWvMbRGgbGumnTthMpDHKnrUIOvvNSiGhkVlIr) (seq (null) (seq (ap i JjevSXXeQIpPtMAWQTZpyRccMmOKXgt) (seq (null) (null))))))))) (seq (ap i sKPqQPAROUcPrviLXNEkystihWgcUiNExYnhGOTN) (seq (seq (ap i bNuKOTpxXuoezbQwrgyOHhkzvfuBElPTgpNGQFindHPmRxqwNEmeDWEVVlC) (seq (seq (ap i qykPphBfqVqIOOjhRCtxyRsGCTVedBHxvbMGmu) (seq (null) (null))) (seq (ap i SuqLgwraYLMaHmbUUGDHvpLlPhcYtnAtKzrxcjoPUAUqwgpxOdjXKLoyoZNfuyemCXFVjaGBvshsAi) (seq (null) (seq (ap i SPhWbFgzUlSeOoXGWBBfvwXpluejeFZXdLPPpumwHnaHEWDpQrqtbAWHMrtWnrmfBRSGim) (seq (null) (null))))))) (seq (ap i uxxAglgGzSSatKxBLspqAnIJlXYGKXjQkftOxSbZIOJNBClChdjKLViFMZismfXZMDTYRlTOkiWapvsFqXkMBb) (seq (seq (ap i XMYAVccdqOBmPrmvxfOXHgPDRBvoOusRGhKVnpJlprujvlnxxEYeQVvHvXZJKvacpkKuKtVcQGEgRpwbrAiIxif) (seq (null) (null))) (seq (ap i xaXtSkWsNnRxwyNhBEBTOWadwxcBIVqxwvzNeZaqHofsrngczhkfORKbPExcmS) (seq (null) (seq (ap i LEziQdHnPeESWUHDLyIvewzVhXjwKfpH) (seq (null) (null))))))))))))) (seq (ap i ZYQOlWpuCdMGuspePICeyfJgVZemokIzXYoSYGrBvEpQ) (seq (seq (ap i dxsVOOAvrkzHuZAoGTBZuDovnsheQWdRoarXGADfZ) (seq (seq (ap i msZifeYVFTALRGuXeavuaHwXzujoABMLMfVBuIVzyJHwHrT) (seq (seq (ap i tKzieWIsIbDNaPXwxuvwkDhAlJicAxGcNNWzCfTdCIPk) (seq (seq (ap i zSKXSQgAPnYIhDeZVlHBIuhpieFBZF) (seq (null) (null))) (seq (ap i rBNqByuONBYMrNZYofGxbmdiaKUAWUkCPIpzrCKoFnigVXQMZrgMhBwiSqOLDXfDepAFMCEmNpVQJNYxJxSByCHMtEaNufZjUxzc) (seq (null) (null))))) (seq (ap i pvdEWLHhc) (seq (seq (ap i HwbeJvZEktvzeiDrGCZEStSpXFBUdoGARtSEPUZeKhffyQYQBzObJWriamCMGNjmBXZCPWWVkFIMyIGZUAnGgNXpDIZZa) (seq (null) (null))) (seq (ap i BmWEMWHKfrLMCskAvtNHPHqGYeagKOWjXhBBDhWs) (seq (null) (seq (ap i WhfaegqgtnxAkGcyRpJNdymmUEuYXsFigxQPmzzTpHnYqBwNxBPEpvxoQCKPLDOkQKCvFosuCgoVKNPxKGHlBbA) (seq (null) (null))))))))) (seq (ap i nXlxlvMDzsLKTjSUeIHsjGPfmmVLdvFYlpLsICwikXNyBCzTRfNnNRYSeqCxUmxMGyTvvJceLjxeoEjqEDjBvxzuqDw) (seq (seq (ap i Tty) (seq (seq (ap i JrfDJauQbRMLyjxjiNynnxMRoLXerKgKgWVPrhwF) (seq (null) (null))) (seq (ap i pmBbKxmTLZwqGiq) (seq (null) (seq (ap i vTz) (seq (null) (null))))))) (seq (ap i LYMfIarPRKThnXsmTkuIghN) (seq (seq (ap i KOEvtwguinVNVhwGNtVsAaetfBxPwqmfPLDdkbfilvoJPfwBokDjM) (seq (null) (null))) (seq (ap i dkanbsWxmbdhHlWpnrqKdDkQyXTCWGftMFRvyhjdhSAPOfrDAfwThBiouhrG) (seq (null) (seq (ap i GZccdAZxVPnfxZtmHoAlGRNdXnginZTiQQgSAmBljlrvWNjvbptycXdEEJLyrjUdXInGRZvAWdlUXqvTOGJk) (seq (null) (null))))))))))) (seq (ap i pMegdLpczBsxPlkRg) (seq (seq (ap i WafjntoAnbSxTMcXyEtIAtqGWBIhoJENlztyluNKjNmCYRDTURlvayxxdMafOSCPpxqDexxNrF) (seq (seq (ap i aRDkwpBygYCkTeTahNzsmbrTjZAGbkGhfwFFcLJPsJMMSsLLbDUauSUnEjoGEAlERbKRICZkJqQW) (seq (seq (ap i tBatvwoZnxsCwlMtOCCkZcqFJzFelqJDBSUVUXkeJWbxmMjscFhaKNxcRK) (seq (null) (null))) (seq (ap i NButvWSXAWynZkjLockICrfcmIlqKIkUMjKcJjyUqHDyPUHRuBEqGAC) (seq (null) (seq (ap i oyvGavJxxSJfNEhlSTZVlQzHVQXqiFplrEKLiHFmaloHKYglYURqFPgzjr) (seq (null) (null))))))) (seq (ap i KMneWVrHSZOLOwWrHBOKjYDYZSbAriVzcAhyMkxOxIdaVBtHRHvPOIrAx) (seq (seq (ap i TQTsXznNp) (seq (null) (null))) (seq (ap i BDPCAFSVYquXMOUPsszuHLmmuQDaLAKqRapQdHKlzVMqEOVSklKoFhWADoakBrCsRmCbmWvqwTochdHJObTxnEkRpmU) (seq (null) (seq (ap i XDDuUNFCtWUslsbirSHytZD) (seq (null) (null))))))))) (seq (ap i cVZjjrjfCOOAZOYVqRcaxOasKT) (seq (seq (ap i SoZyZIibRnhNRmZcxeYpSnjpXdhVFiFoikIhFmvsOOoHHtSZXYmPz) (seq (seq (ap i VbKJXtRcQXBQTSNBmvGbhDZZBkxVxXWUgSVOSVjkdJDGGqzOvEYceWeluHrmnQyxzdxRHVqWOhIUIQTuCkRvqZsrbUtL) (seq (null) (null))) (seq (ap i EAeWQnCKUvjGuEiBxSbpj) (seq (null) (seq (ap i nyKXEPISCRFRrUeSNwMtAqEAVBPupsOztmUwbFMZuUKfHUhUMvjwuPyfYsERTNZLIQjuMjSVZYBtwGYmEsXpkmF) (seq (null) (null))))))) (seq (ap i SKLYhODBbMaQbeFESAjXjCwRSxVIBYMbtXMeUkhQyGmRBbZdUWoMWuganzhAWdwIxYeIvYaIxXgGMYsBrbCVVYaWtElahrfL) (seq (seq (ap i osPevJFucIOMJfdtidgEtPNnFfwbHQefPnQjlmKQRaPCHLPkmCmsr) (seq (null) (null))) (seq (ap i shJFBwSMvceqrGYABCqCQBr) (seq (null) (seq (ap i RECjYiMbahdHFMXtwNYtbRVMNhMijhxi) (seq (null) (null))))))))))))))) (seq (ap i euBfojEFIswJJHBynOHCHUXJoJtdfbHxeWkLcnyswalmXOmFiSKYaNxwHrPCzMpRFrkVmkEeeFYTmkTMXRNpMTAqNwwf) (seq (seq (ap i OKQDzdaawhApvQUbYmhjndnOrxszLFdiKKDrvnTahXeZTFDXlyzaAZLfKzJYRRYvx) (seq (seq (ap i POkrGdHhigoDcMYuOonPZLsHzvrzfuDUQVUxBaXLpcWhMQLydFFkRqilPpCksuqmyyhnXWGzOd) (seq (seq (ap i oPDgnGtoNa) (seq (seq (ap i pigEhhipXFyXYCoRnNOuOYfaqNazj) (seq (seq (ap i mLLHmEUvVBUhcYLiFGPuVamIJOBQJLEctTnSVoLWjZMdJZro) (seq (null) (null))) (seq (ap i qfspPLbHKTdwDABylAQ) (seq (null) (null))))) (seq (ap i ukfzNyHAPNhlpxZiFwSFDwStjYWjQOMCDAEnuAljSanKLpeahgpMeFrWzmcZOolSqpKmQpNWUMMvGVaXfx) (seq (seq (ap i mUhAqmgcWhhfgOWocdYmubuxAMrWWFMcHMxLGrBiYELmjzrxDNbepP) (seq (null) (null))) (seq (ap i RSvTUxlnke) (seq (null) (seq (ap i ErByUOSYSneGpMYlrXqvwdYgvzXukkBfXUmvkjBCUoZq) (seq (null) (null))))))))) (seq (ap i enfIyWOaXlaNKABteubrqqKPbODuzZoaheIKTzhAGIkcAHoQARdCUTdAFmfpxUlStBVcEHVuOfSBBWDOxhJfsOzGEduMPxBIrMr) (seq (seq (ap i ronVJhMLtFsLKFAoMFAtPKumFhpVHRYaEsLiUlhguQzrFCkXMfPEwwdQqmnBoIxZYM) (seq (seq (ap i JwUfFnzMisvuesqvUDfwvWVIFYjdlhPyjjTJQYkpzdYqWkRGyJREEbBNyWOrJrHaNEfEmjCjJbSzjfkhPCKaidjYgqyouqUJC) (seq (null) (null))) (seq (ap i FjclAGzcGXnwVLSROABRIwpLoTvvAxUFbFWgYRhS) (seq (null) (seq (ap i rfJBmgzBlocNMbjyPuqJFRbFOuXYKjfePeJUuqVEynSanpAdfICdNisjFuozHobaanhV) (seq (null) (null))))))) (seq (ap i AJIAHuLMrqswUlqIcOZbxGlmRNqYzUpBMJomlevBIQWyAukKFeSWioralkLV) (seq (seq (ap i enlXOBlRFZLLROeHolyGiPl) (seq (null) (null))) (seq (ap i cTLPbEQVVrxpcaHlHAWpDKcIllfKPnuVaMtZXantFgrKkEyfrvdghbJSJKjutfGjZQxnjZIvHN) (seq (null) (seq (ap i XTNQmnsSkIXepXjiJZBGwUQWtOyYcVrUtehTpfVzCwKgFfcwnnNQGpChIxHcwNTKGWecsbSGfkTpbavQqSOngRRNMwYmhpruf) (seq (null) (null))))))))))) (seq (ap i LRgOwsxOyAkEMdGkGeaTZzoaxMtZzdiKmOHAYxOEbyKgqPQlPpZyPnKbjpGfxZzRiJsjHxhFJM) (seq (seq (ap i USESnJMYhNImKwHTittZnVthfpWkfBABnnEyKRLeOXREnZHoQMgAKkTuZahIfXSmkML) (seq (seq (ap i SZBHiKbDgKGMKSEvhcYSF) (seq (seq (ap i rphfmAuvfhAdSuwlJneNWTyiZmzqVaTTaktnpxAjgxddmGFpfGWCpMBeAKCm) (seq (null) (null))) (seq (ap i mhyycNAZJDfRgVusYENpjnMQafdKHjASEmlRHLfmwgExOnVlCDLvGI) (seq (null) (seq (ap i vSPnFerP) (seq (null) (null))))))) (seq (ap i vHNRNsbRtyNCptdoLORIWkSSKEWPMBOMACegutUhDDnrloVtWoP) (seq (seq (ap i sCuldPXGjElptHtMrPEBq) (seq (null) (null))) (seq (ap i PNNCAzoZWEDYeNSliRmeWuzAkwtsAUuNaVkjcgSoJXVaimadTMPTfDOkMafGljfutMBzgXridGGpjkJfp) (seq (null) (seq (ap i fRNNTEuDlJAz) (seq (null) (null))))))))) (seq (ap i lwOttUmKfEvyrRgGKnHMDRDlDGUiXrkqTKoHMUEfrQPcYQ) (seq (seq (ap i YvKnitqyCtDC) (seq (seq (ap i aBGfFsYGVFigfNImVHWQtEMrsXxpNcxRYykzsTXukUqCwUfmlGSjPeNYxvlFXGFfeBZzCsMynaTminTZocIPKjvs) (seq (null) (null))) (seq (ap i rUnIKAVxO) (seq (null) (seq (ap i waeTZCuGvntNjapVAVbyAfbMpuPaFpLVmTHoxBbHXatlFBaiciOfayvZepzSNPXjGuRLXQtBUUxKSbIUqnqD) (seq (null) (null))))))) (seq (ap i UKAINvepoLZSIuKLSloOnnVHIJSXsMXCJcGErFWhxuSDWTRLCmUXx) (seq (seq (ap i QX) (seq (null) (null))) (seq (ap i aqFlRVEkpeNPRxDAKuwsQUofFgiaczABaQhO) (seq (null) (seq (ap i DJkMkpmSzYEsbXcVkizrGjmUsyqPfVVWYZyblVr) (seq (null) (null))))))))))))) (seq (ap i bVRJJdTOOsa) (seq (seq (ap i hZPlHIODXxypOUPbBBKUPMGbeXqHVrXM) (seq (seq (ap i pfcrYlmQmhlWQhHimCKfRoHgRpRuPokGhaoyULce) (seq (seq (ap i OeWXLOlKwxvSFHDT) (seq (seq (ap i AouImHgAaGSixGOqgDNaSUYv) (seq (null) (null))) (seq (ap i XUqloOvjLCBCBEvfNZmpoLrKuvWUnocpMmGteYJd) (seq (null) (null))))) (seq (ap i ciQoDVZLnFLecTjjIJJXfBlxxjuMQyDiOAkVLmfUTzNaXgawOedmqyvRpROnPkpQJTaDEdrmDOLfZzIYNPupSjJWUyt) (seq (seq (ap i fPJcHxSVzKSHQXbzLWKJjVzFtdvJUCcRVKoalekjUcrCMoeyMHjcoonqnlLCWzREUDuyTKChupTJQCdbgMAobMKKCxbujCMLO) (seq (null) (null))) (seq (ap i SkCEmluBBrfOUpXg) (seq (null) (seq (ap i XFtGtMLlUMVkfuCAIYFaSvUaIOBK) (seq (null) (null))))))))) (seq (ap i AYMtogQrWcVWYpjyBXyiGQRSNgWjReoKkCvURzOhMydqlqowKHOnSKIGRji) (seq (seq (ap i zhMIWzUqhYufbjUyRhJwAvKRnXeLzUCNHNDTcvHREbEWkfeiqZbbUaJBxCFvtjtCEEUiAahdBAp) (seq (seq (ap i EGFJZzQcrDpckEzytBLwSgTokjsAuGfbqcyxbsNCACBHMAwIZUsenDcZHFWf) (seq (null) (null))) (seq (ap i BAvvVNhLTQRqskQRfCCBCZrWBuquFCkEKOiQiHRRKwSkfijYmLjAnmUcNfHkKMmE) (seq (null) (seq (ap i VehxzscnfectLtDnCBCyjDPIDgEUHgak) (seq (null) (null))))))) (seq (ap i eXABnVhNXh) (seq (seq (ap i omQHieGMpvCsOCiagfRuWHHWjVRcldmqnhYinGtuPitIwjocnorNSGzJpYuvcqWPAGBm) (seq (null) (null))) (seq (ap i VHnpIsMnkaPuYpkMLdeeWUchUKOSrnybNMYogtLxGupEHUILKSYAXzqHmhxWeQUrQFnzZjjAOjn) (seq (null) (seq (ap i oQGOzNUgEbcEedDMjNsBUEhiUuGGukXMpg) (seq (null) (null))))))))))) (seq (ap i pFBfTGpDfWVQbdourLqCNgALWofFDEoGrTcorDcPKZXLQyiCqyJRKlknDLPmumqHunsHElziaQbrZzyYijSSzcgbJ) (seq (seq (ap i fcXHruKwpvKxriprADnWBvuHvNWBywjKegyvxxUJbtgwdYNEpWvaBTtSRsCsZijdDGgSdSpgZWPSBXQiXuBpCycCoaw) (seq (seq (ap i OvfbocApDIeAmRFJJqOZqmarToCxROJrPjVDa) (seq (seq (ap i DiHCeSbyttcLAMBhxoNiaWkDhXMYcsyPdrdoKSkewmKqzrIFKAhxXaHiCZWETUIhMVJTMWatjeJQAyZLhMbufoWpXhXlw) (seq (null) (null))) (seq (ap i HWZxuwYrHrdUauSdNZjVjkIndCokiRKhcGLdRlrfdMNdBAMeAfwiylyTUOVSLRrLRhokKCbMwdpIbeUkaXAYLcDNbY) (seq (null) (seq (ap i DhqhhJEJIAsnYYHthwuPrdpmotqOSrqPxTHpGHGonCsmuhgysraLIUQbmQsBMrRqOneQfXLgO) (seq (null) (null))))))) (seq (ap i egHdRoyZCUTBxtXLMBQxBulyVFbfltUBxophxwruKpxfumIuFFMcppxYzd) (seq (seq (ap i ehRvCCdGbsQlELXbKuDCWVDWFYzyCFuXHNmLdPzMPgeewgFPeNRVuOgYVdHMHGnnNEywKHBTxHrksGMEBHqRprE) (seq (null) (null))) (seq (ap i OogxayIiUOVYSqeuEVqSWxTvyhQHUWQBmXjCvdMfAyTpFJtcBETEolRTweDCPhREvBnKTiDKwvHESErzbPNWmDjYALXz) (seq (null) (seq (ap i iXGmzYWKrSvyGnhVAMEgvbctxrKwFUTRTYsfymVnBZCmwtcNyaHoqbAgXUEiXZknNmbgYAMqmWEVFQBByqcowwbIqjVt) (seq (null) (null))))))))) (seq (ap i WRULuJCBIFrrvipBF) (seq (seq (ap i coWLpwLQarVBFnESNtINkFnfcJjjN) (seq (seq (ap i sFgTYCxylFVYtlJR) (seq (null) (null))) (seq (ap i ArKzYJgnNLGsWByJHFjgqSsduFXP) (seq (null) (seq (ap i yoiXgVNyQwDfe) (seq (null) (null))))))) (seq (ap i KnzywgLenSLjysKCpDavHF) (seq (seq (ap i xCeCQKtnutjCmreJoxKjJZpwiROjRDNHZIoZPWlfCxtdlyBvZGnFbaiKdhMVkWPOcbwsHbwezdey) (seq (null) (null))) (seq (ap i oBNQMjldIxnjTkDd) (seq (null) (seq (ap i FhawaKIhlCuVqEfHPOJkzkuMGhSZZVJ) (seq (null) (null))))))))))))))))))) (seq (ap i TlfzhGXQsVCvlXSqny) (seq (seq (ap i cvagvyqsBoxuYLrwkKsIbQSdSYgbzarcQCqkfyqFEhMfjHDQQj) (seq (seq (ap i WWweKGhMOULGJZfpdHmhFkYNQpLvXTwNbhylJaQeyWhVtFiIcgVwVNhXgOvvc) (seq (seq (ap i wodynzcfUNcyyzJcJ) (seq (seq (ap i OCHDNytJjoqsonjehWnkUnzENYJiUVSFTHhFvuPbEIsOtaptGTZZyKkD) (seq (seq (ap i AswfXaLWYzYDRIGNStKVigpAyhUtsdCjDjbCqxuhiZNhewuoCGEFmaSCMJDhxCjtlIimzZhKdSSnMV) (seq (seq (ap i jEcAZlIZiXXkdHZ) (seq (seq (ap i zxNCXQHHnQuhWSJpZoAdckiiaAdwqdFRVlWIQirCHZyqAaBmAePeUiCTDcpCCs) (seq (null) (null))) (seq (ap i vfmIJwBdbEBCABdiCQcMeOTdgIYrcsjLZqrxdyRdSOihBTKqNlDnbCsaWASYjMPTxWXQrZPJSkSuzwCPsphjlsSK) (seq (null) (null))))) (seq (ap i GGiNWsrsRKorcEgjNpQwZcohuCMgAsXTjOOkIDqXB) (seq (seq (ap i XduOYtVJRevjpnRIzCDhFDvdcSCAWyjFVQIepoIJPxRDMvfuEdUeetcyCJBNAQerKjRAJZkyRCbxtXTmxQqvhgCd) (seq (null) (null))) (seq (ap i WQeWjomXXibBlORHGzuqVHrvUBVELEYsfPVQEZzViUvPErKhSfagnoPRqNMQjVxYhlfejjSNetFMYqyMduECl) (seq (null) (seq (ap i TwXPTaenK) (seq (null) (null))))))))) (seq (ap i NBpQxuLCJs) (seq (seq (ap i pDaBBLgmdSgLgPyAAmsoLsORfIYGFYxZPhyDgQzJbhNxw) (seq (seq (ap i dIOrlnivHKsrKpfBXGI) (seq (null) (null))) (seq (ap i qMFaYKsPJJhSzkBdKraauVQOdDvdSQTjVTsnNJQiVzFvwWaOQzFDXlBcFBrrJorSdvVvqhgbvqaOm) (seq (null) (seq (ap i inHHujFSjMXyaAcSSe) (seq (null) (null))))))) (seq (ap i uhlPCwGmhaEKKfLw) (seq (seq (ap i CLGVlEwombbQZxqWoskjAQemIjCERSuKSlaXLOknG) (seq (null) (null))) (seq (ap i beQTEESqNJwMqunmmhJgDPTkHwNQYjGeDPTvfIlhwcHSwfgXlwEulBvpAwzQkvEhkyjdlriKKAFsFKjRJmbPHNS) (seq (null) (seq (ap i gUNHHjnpyvoTSvdkULCSlbVxRWqwMnsPoWmbxwaCkXcajXPFrKQmPVPGACMZNEpyCrmWtlNysnikHXyEIQCwaSHIIwx) (seq (null) (null))))))))))) (seq (ap i gOrjUVDWwWrUEliRtCQCxoQVpBmt) (seq (seq (ap i mCwwlaZuDUkuNrMrovBzPtcbLIvvrhjtHRwenbVLndKtYhopcKkZZklyWRiXVKoxShefcChtc) (seq (seq (ap i OAXZuurcTJOzwpmaChUEHNRjXNhJxGXxFcvvWURZKzPKyVUFsUQhoMWrffbGFyCttQKmjjIxodIHiEzqJubZVMvThOTZUu) (seq (seq (ap i YTLYyycNGDSDNmJKXZJAruGJkJyqEHpOyTwgvwCbjqdPJrhrGJdSrrkhDFDkHeIEhlgUFpeNEZePYeVYinFPRgrMAD) (seq (null) (null))) (seq (ap i xXaHj) (seq (null) (seq (ap i tFUEgTVizWTZEuQJXiiyjZlIwrpfVJLnXhrrrtJIyUfOpYWMROTfuAxfmbNHMwSQacngvluCCiqEQPectyDfRtwAS) (seq (null) (null))))))) (seq (ap i HKLzAwmYslqWCbVkRIU) (seq (seq (ap i QtXXVQOBRXRUcNWqvln) (seq (null) (null))) (seq (ap i GtePbdEJVgEMRekbMrzjycGKoskBUWmazRrVHb) (seq (null) (seq (ap i xcKtmDXiFVHzOhbgplondPtVTgaFnGJEHRLxNlkEeblXLnYWQLGoFnNlSippFAWrdHPprUkzyTpCZyKghzjokWcuAFLgXFNMYp) (seq (null) (null))))))))) (seq (ap i nzuKrROCXGckIZxEnhhIEbPUldMoqdFjlNCHqhqSySfOQkMB) (seq (seq (ap i bFMDykczIfKZOEAyzYSualsiGoSNWZ) (seq (seq (ap i imlwNmlDiQBOkPLWXpBqqFNvoQbgOeOCqowGLBNyyO) (seq (null) (null))) (seq (ap i FqgjDULagjhYgomRtiXhOzKTamzPgJWoXfXmwoTrNaIZhJnLBpownbMdmbwamuBxTnabiAaP) (seq (null) (seq (ap i rjTqWTRBPkwbu) (seq (null) (null))))))) (seq (ap i VIqiYCVcRzCVEnglXkWtE) (seq (seq (ap i svOqMUzrtWAaylfrblqcheUyKToKiCRPTsLrCkNZPkQmGGXPShFwgVbtud) (seq (null) (null))) (seq (ap i YwvtfAnKYBOhZvKvnyIPqoZfkLXmKDrBXhEAIFlQUlKiPcrYhAOhDtsJtARXnXQkTwRJDTPCxBDZASzKVSLlqqPwzjbRvBOt) (seq (null) (seq (ap i HVqLpivLGfYDRZwqZLAeBrySwokSjRfwPlxbbxzmAAnBHiKxGlNTHBdqvGGgMRxsZZsEVzxbOdHgni) (seq (null) (null))))))))))))) (seq (ap i uuslVfrBleNgDKktSgauguGfZMsbujasoQpyNGCoNGNZqJwgnXAPaAiSJKYITHxJLcokDXwctVzrVa) (seq (seq (ap i wdlRNnujfndKbtsDFGXqKFNovAuzuRqqWbbxgwSLiteHmuqGX) (seq (seq (ap i vGUHtDtAaGjIsOIxkpODnqNZdKEbSGRhIfECMlgMVDVfbZKHUbSOfGHLBNrnVJFgohYPMpCFjRXAxUVx) (seq (seq (ap i kMgjLSOZHupZAbaYBGEeqNEkZPKidNTAMSAgKqxzUSHahtLTUbGlEhZSdS) (seq (seq (ap i hLeDXiFUiiAkRmnfkHyKjoNxxcTaskVeOGJzWIeIEzAQvquvqBDGJFjJwrgRyhFIKamLtnGQAAvfhcdlMcVctKhHJJI) (seq (null) (null))) (seq (ap i avccZAKVpzxYgZLLejflKGelzFMVVjMdxqDSDiTyMHcetCSSoSkiOTXbeRlSvbAbztqF) (seq (null) (null))))) (seq (ap i ANItkMTArkxIicoFHFsDObgcNOgiSUdfehWfGgEsiVFlXjWhSLNZjFsZmeJcGihjcXhJqg) (seq (seq (ap i XOWIPIFOYrHHQJpAlvrXGxNgJwlwgJFFIaZvWWggfMPdZWAbMqfZFXKiZOTdphuDaGDVAscI) (seq (null) (null))) (seq (ap i RtNeQBcdFUEBKqMMqODTtNilgpaAVJcZhzkZyKqazxhrgAnfoYomBZYbpDcqovLRAxlSTsYQPlgShGEveclOgJjbskJbsCMDY) (seq (null) (seq (ap i zVTczZrLrkmBhDHvNJIDtnTguDJWwgtUPAwBtsuugnGpqFpbsfkCCyRztOzXsnOXidOnJMAPDvmqVOxBrnwoLjqPIjMsxIUUkl) (seq (null) (null))))))))) (seq (ap i MtINubSggWDPXUgyTSkjDvRfdwdkweXFFipczZBrwATJaNkHQQjIdqlziikM) (seq (seq (ap i kr) (seq (seq (ap i UwgawtttbSNOLGiwpFdtopNunrwK) (seq (null) (null))) (seq (ap i pENTClYCJjMFivBoKFNzeoiMaqBjvoZtKfHgoAHCcIeZLKClSpqnknXs) (seq (null) (seq (ap i LUaT) (seq (null) (null))))))) (seq (ap i aVMSwktElWBVwxQqRIYbnTLWqGWdpdGmlrTMLojUdoZjCHnpmVAuWpQqCHbuUUDVeptCgEcmKtmOwLE) (seq (seq (ap i vrdZiEGdJlAiiEYmuYFYTTgCUvZdrS) (seq (null) (null))) (seq (ap i XyulqMWOCWkevcohmwswhJHGTuUzAXsnALjtQNWlKSryjlKIWdPCKRmGOUrNDqjsqenoXUeiHy) (seq (null) (seq (ap i dfqNBfthyJmRdaNb) (seq (null) (null))))))))))) (seq (ap i yNbkcieMEdKnJEIfwiJfWrInNfavALCHNrXPoQZrffddeHrPhgatdFlKkThsrqIQfVfXKKABeUtwoE) (seq (seq (ap i MNoBlsmHiNhuaaosLpBLvGMGjQGUKSK) (seq (seq (ap i crQiehjKtNgu) (seq (seq (ap i VDjuLynpAjaUSmrYFVNIQYuyXTSVzErPbVtSlJnKFRkNwatEDksDbgCOpvgcvsRYWwfb) (seq (null) (null))) (seq (ap i dErahTHNqwcJiDySyDHdosSQSKRLnrLJjhPEjuLZmeACQDePWeSiroeDavCeAAfSdtDFrijASMB) (seq (null) (seq (ap i zkBGSpeSuAOqPCKDkidjKkMpHbTQcVzTkcWbLUmkmxrrtdYiqOAwXEtMLwKw) (seq (null) (null))))))) (seq (ap i hodbBHKHDWrjLvayxDHsmfUqwaKChPilQnrjmlIkktKHsvuqkn) (seq (seq (ap i IayUpWkQzWFbElEPlbXJnSPPnpnHjmUoYvgNEeCYpDrpWZlJBMonVgMXguNvpdsaBhRBSCeohCyjRO) (seq (null) (null))) (seq (ap i IuGOgUZUwhSLDctbxclwqnTEkMvrrepRAiXckisVg) (seq (null) (seq (ap i opVxLffZSFaPEgrFuvJmQUZfYO) (seq (null) (null))))))))) (seq (ap i LEzCFycCEHPgpACUFjLVZAZVXBhAOxRCs) (seq (seq (ap i kppRnLGRfvhZfKJESqRWdItkClLmMEXCXIKqxvkrBAkePxSgWOcgUlCE) (seq (seq (ap i VtZalMyKrGTJCMYyujbYlNVIQZyGKDwstvSzbucUcYSJjsFBYbrQWRSrCdTPnSEzZix) (seq (null) (null))) (seq (ap i wfwXaEPIqVGbhhgtzDFOUgwzDrNkMWLkdgVSkyoPufggoMFzCGTrPgkDkAbPGz) (seq (null) (seq (ap i fuNsQBIDTEJNPaSKunDDSZUsrROfisCDCfoKOQICOee) (seq (null) (null))))))) (seq (ap i lDdBGZVKpnHDkGGZPShVKBEgFEBYjrtKwODpfIUMPItMvS) (seq (seq (ap i ByiRIUcKQZjdsUOfJdPpgNNeAmRtFIdzsl) (seq (null) (null))) (seq (ap i fEAPKoBVWYPmHuQVmUtBWzVzIbOjSBcpkYvZnxMU) (seq (null) (seq (ap i PTLTILx) (seq (null) (null))))))))))))))) (seq (ap i LJnEKpJiMSaxnmVFQHdivCF) (seq (seq (ap i pGswaZuTadxXpzTePjFuXIfSSnwicNXzVKTyAKGyNgdUuyOgqflEGgi) (seq (seq (ap i ZiuqLYtzUpfvMWmhHcvDGZxKMjnmqJVeALOaDqMxVZFXNHjvpWBbeNsBJfsYcTYJdgnQfafSljkzWIC) (seq (seq (ap i HPgkzOrdFxsrEKbKlyJsFNBqCDDcQFUhPFOS) (seq (seq (ap i KPNLpODjGIUuhpdtrTFwAsvPoKEzjVJvk) (seq (seq (ap i DQaGdtWJexuRvvvOVukhTphgUcmqEaXJBqxRjxNMSLbBMvYaufMjAvuZZcPJLEvfGReLLNqswCHOIXN) (seq (null) (null))) (seq (ap i XFmfmUiuEzqnvSdnjkOOSiUNbuBJqb) (seq (null) (null))))) (seq (ap i ddmFwiFNnSbtUJLumExBGAddyZFpxiDkDmHQpCgKnWpOmpETasmRoIjMrNlSQXgsVMKEQtgJhjsAWLlvY) (seq (seq (ap i VXeT) (seq (null) (null))) (seq (ap i BsNYsBxnaTjAQROoCkbmXmBswxkSxCuCWpyQVxFfMjxkqTPq) (seq (null) (seq (ap i gyOVQmuXxUNwqapNhGQcbUhDrVliogXQyUdjEfvecTlhKWfAPxKzfgZcOcJSDS) (seq (null) (null))))))))) (seq (ap i tdEztfDLTiTNpVPix) (seq (seq (ap i yKhfHOrChOKvEKOTFCRtYJAonTnrKdZRCdjcByuiHqsjtV) (seq (seq (ap i BgrzoKykgKajKbytuiIJAvodqFYkBgtITWlCyfyZhFuWulZNhMxtZwVbaxqRmruthlAjxRCJYicIbk) (seq (null) (null))) (seq (ap i BuleopNUrMtcNCiBARETtACvlOFmDVWfGSauR) (seq (null) (seq (ap i bzvnsIs) (seq (null) (null))))))) (seq (ap i jdBMAvBSdNsdrFWoJpQIDhzjGZcINFXTeUKUSzuGhcAdrFIzSEFLafXOAoqjG) (seq (seq (ap i qfESyErKljiE) (seq (null) (null))) (seq (ap i IVIawzPVeFsaSCtlnrbSJXKnlgrrRNpfBhkHKuqTbrnuVHACanIbanzNLWxnpBhvPFIyhDkcsAocBNBhHLzOnlTp) (seq (null) (seq (ap i iQebVGFstpulJGNwLCOxhkZcpPDIkmKKzG) (seq (null) (null))))))))))) (seq (ap i sSmNrTDTVnIvEGMQJSDptGxwUJebemUCuAKCtQIXvX) (seq (seq (ap i zXYGdtZyXPmdjj) (seq (seq (ap i wsq) (seq (seq (ap i wQL) (seq (null) (null))) (seq (ap i xpFXkapKUQyWPgGjoMhHxciALbAUPIPYKGWvEsidbvnTHWY) (seq (null) (seq (ap i cEYljEUYnAdliQWUqYRbOQvRbjDQoCXXNgvkMDvsPmtIHnEERFWRLjNAF) (seq (null) (null))))))) (seq (ap i jiQFnQUJwMsuGSHVTKvvPJDwGmGk) (seq (seq (ap i aoRNNnivtGPEuloacqIRzhxIlWEBgPzqLWVkbVzkWyWhIqAXzIUVecunCDcHLdnQTpvgBRwhREfzCNL) (seq (null) (null))) (seq (ap i rVXmetMNVAViUCsCINeiszOFEIyKyE) (seq (null) (seq (ap i Iw) (seq (null) (null))))))))) (seq (ap i OULUBGTLxKGLRMbEMnQfRIePVhiNimMTNpisyBgu) (seq (seq (ap i cncaKGscrLjj) (seq (seq (ap i uCYjVFQbvMrzlYMOEmEwDwIr) (seq (null) (null))) (seq (ap i JQapIBkzCwHfXoJZKcuTAROPWYGVkigPpbkIDiinmfxJbpPfGmokmbacUMiygMzlzKvfFiC) (seq (null) (seq (ap i juXOqBUNpOlRDSNZMbVhLotLhXcmeg) (seq (null) (null))))))) (seq (ap i NeVKolzLIwmpZGtMUGZCpoTRoqqhwNdvoNcvUiQOnEoZpDIJN) (seq (seq (ap i bHHqBblsuvfpgbyCCxSMDGNwuHkkurgfbelVJNbMcGoNtXbdMambfegPAlAAGyuEPpTLxkJ) (seq (null) (null))) (seq (ap i cRAvvliPRqGXvkaWJSutZhZoaVVIgJINycm) (seq (null) (seq (ap i gLIPruRKUgVbKPkPpyMHXuRWPxNOoIZCsPzOJteYjP) (seq (null) (null))))))))))))) (seq (ap i fCCnRGDYAiUquhdUvXavC) (seq (seq (ap i yQBjRaECASF) (seq (seq (ap i yerUguMQzgcvLdaItZplztFPSZfKNbWssVMUxbuQzcXLDeIpTzFtaXfDNeqdIsndfvfKrZTXwsFoXqsRoL) (seq (seq (ap i oFraedWPRNDHnARNGTmGRLXExLPzixssKgCElKVrurGWltrwUYMUxdbpeRFKhByBHhyvstmgwCuAUWPccfTOG) (seq (seq (ap i fVtoxnuFsbHHHAkTsEIroxPFWKimhmhIirMga) (seq (null) (null))) (seq (ap i OAM) (seq (null) (null))))) (seq (ap i qpCXftBjQLSbBifgcpusCPDLylIyEtHDpCpVFutTROsbIveYyxQLyhffYWSWAGvLSGsdnWYDFgVyoBkLFm) (seq (seq (ap i PulvkmvyxWrBRjGTBmUmuzyjPfkLqbnbDKXUhEqoknTqHRFutCnegHcknvFRqohJmBGqvOwTgVtig) (seq (null) (null))) (seq (ap i LrnYBuJcMWaYfelEQiNtSVGVeLGTBPXwkuEP) (seq (null) (seq (ap i AlTackqcxCuogRIVbLRODbjNsQIqJPgPprWmbYZwT) (seq (null) (null))))))))) (seq (ap i GRHaQAUVcnMr) (seq (seq (ap i KdrsmduoYjkPMriNZUHmbjQkeOeeKshgKFaRBBIFYUFvcOtJgnSwyI) (seq (seq (ap i oIvAdISHvTcjhkkTLteVkLzyOSoMoNwcwowUgOGPIcAuRBdOiMIb) (seq (null) (null))) (seq (ap i yRVzpSetiptHsZDVOodwphilxCUUSdMYINYoknnamjWtvAKnnAtNIYrof) (seq (null) (seq (ap i hVhzIiCxmjVbxvxEddWaLLfbyAqxbaSfoUlrvKcgxCNBqQZkasWmUWNUOvhQfdqiiSqazG) (seq (null) (null))))))) (seq (ap i fvrSiRHCvqYDQdbJwttglJipVdkhuDInKiVjggVZlAoNscfaCnJDJrorXcAKNTNNKJKXdBQCWZyFxIeXTFWsGbqyReOKRWPMsI) (seq (seq (ap i avbKFhdQgogKuMjJXLgogsrNsjYfllKPtKXRWGgCHDjronVTZIr) (seq (null) (null))) (seq (ap i RyLHpDMAxiBsUGbRfpbGksUNNdasJseQMjJfNPigYnVMLhGcIGnoooRackbNhlvzM) (seq (null) (seq (ap i VgxmlOXLguOyfNurckKeMDkorICcDWGIuuLgfV) (seq (null) (null))))))))))) (seq (ap i hXT) (seq (seq (ap i HgWWdbKPfavjm) (seq (seq (ap i FvdqfMHboLuLkvBTUNMnwhXcUaYMDMdrTNzYCnuGzGwVgZuJCtFdcPQNOGxFpmomTvuVNQaTWzjswFukS) (seq (seq (ap i TSIaBxycV) (seq (null) (null))) (seq (ap i kEFdwYLXkXNyoTZMvjrxdhWHXzgPCyfkGIQgpwmnJFpwL) (seq (null) (seq (ap i bMXylbeTxeYDhzqXfsWcAYNsTHJndYbm) (seq (null) (null))))))) (seq (ap i gRnHMlVnxAHtEuPOFFuHEkjLMDSthPmJWbTXjSOKxvHv) (seq (seq (ap i sotUaOOpgisoXtnfvfRDCsVVP) (seq (null) (null))) (seq (ap i pVwITFUdvLrEPpcDhImSrAgNpNiPcetGZdFCmBvzaCEhZXgmTuFhTVHmonIBnSnOrZuQpfbtACgxkeDOjyQsQtsaVCtouaxedgh) (seq (null) (seq (ap i HhEkeKdAVip) (seq (null) (null))))))))) (seq (ap i LaAjHZbNedKIeEWveHrJOXtvLlRkrHPIlyjRocrNIwkHmWIaYnR) (seq (seq (ap i IYccFsbKZZFNwnAGkAMeMiBcuXhbsiGtFNqDZgzdBWIGwTLpwMRRTUobSDgXGFbOEUiNpemWNGPLmwo) (seq (seq (ap i saMlbhBGnPFMLTCCJhrLaLGNIdcPaxFFqNuJEvfrzMFenCsZYisOOSatsXwDzvtkaYuxLqXKlN) (seq (null) (null))) (seq (ap i CRYMJAUAOWyrkJjNCKCjkjGPemTDZcioKxvyLiqTrNuXXJtolxNfjnmFGvkfEzWLI) (seq (null) (seq (ap i pUqmhIMfMtDaCwaZOeZhlwGLaIJdphGvffrifbuufDyfLjPeXRRRLNPkALTH) (seq (null) (null))))))) (seq (ap i DzzYJBmKbQBABWWeWgbEtMWhfbrHyuoaRxmsDnwBHDypaFSQQCSoEDfogKfsvbcPpEpLVJItXV) (seq (seq (ap i grsJtEjieZIwGeRQbnaMXbmICliwFnhjXfDwfHzHSResnYUbjIrhFDxMSwjbtstCsbGSwGBnkZpyZYogJrRiSWFYZyMmawYLv) (seq (null) (null))) (seq (ap i TsVVAtrJckIvqaWVEDvjirZRcOVmjLxoqBwXZOSnFeXhPGWEgWVEtgHprJwDlxLdUHMPDANgDa) (seq (null) (seq (ap i RqQyZwgBCwfGMAxrmpRoUAqmMsQZhAyJOoUgjNQLJwd) (seq (null) (null))))))))))))))))) (seq (ap i SjjerRNqqevDcEQdjQIUTdYxmRvYtTUTCOZagrbUCjpJYYpJGzudoqUyENTVNxFrRvKA) (seq (seq (ap i SGKJm) (seq (seq (ap i hNzJFwujYQygGKhCVSosmoxMNtyfQ) (seq (seq (ap i IpXFvGhuAqQGsGdlsRfQePKTOHVjkjpAkAI) (seq (seq (ap i ctpYZLNpxXpzZPluRsVUQmWiCLfkaLeTllmtwaokFFOlRhCTvImqnETOBsBihTAzxfwbeyMgqFjpEEK) (seq (seq (ap i slmihibkTDQrWeHgihQGFLOYgNRDofkIMxrVBRMUjRbbjTRvkflwGtbDcKonbhhiLPcFwmMbEtBWFvCIUxNscKrAY) (seq (seq (ap i vvfKcXSDCyKjTdzEV) (seq (null) (null))) (seq (ap i sNoEtfUDDIupIahLDCVqDQGRIAFWkvauNzrW) (seq (null) (null))))) (seq (ap i mzIRxlLWwhFIgTllwWrVPhJVWFYViDInuRWGXpobNHyUCAawsEpKImcOSRVtDJdySYAcwDOeFc) (seq (seq (ap i liQxNRRRuElYuEBYgblnwrJhqgEwXGRBgvTj) (seq (null) (null))) (seq (ap i XgRTcgmAxHiezjhSHRymDlRtTSIqjiLYpoYDcXoVeadUfse) (seq (null) (seq (ap i CfeuwSETUDJXamCOBbKKdvOFFcOZjvwYqaVWJova) (seq (null) (null))))))))) (seq (ap i XfSUNfjOcsQhPelsZzzKBVHdDfPhqqdDtjjBXSfogIlmMWwCQeXkrVFoApmbciXxMIh) (seq (seq (ap i TePApocwCMiaCNqMfuBgfRjEGlDdurnrDPeMInUWBlMGbblHJrYo) (seq (seq (ap i CgUMHsvQEOEjdFsUjXvFhsKRsdkNAOIoMFEYtIXvCkrf) (seq (null) (null))) (seq (ap i XoptoaFQtBYBhpxxCTPvbTYAgChUhrAxGODilEXXpWDjRVKgfKEhKlcxfLYgArOvrbiTPrBMnqqyRFvRTrPhhKxIwIC) (seq (null) (seq (ap i JEWoXbEoeXvdAyeUtctMWMTVmuvOpPIfRnTHFhNYyNE) (seq (null) (null))))))) (seq (ap i GVkaqdCpmGQrIQeJHXsk) (seq (seq (ap i OVgVWufCtjjjoAnwSoCFRpuArvuwESEtEChBNgAZvoRwYODDhilKsDpCazznOYbCCeBIOiankAioZnVddyoBcqvoxIs) (seq (null) (null))) (seq (ap i cJvlPbudFuUwaEKtRNVoGAWFWFsfyiDtchzPWolxihBqBauoTzbAiSyGUsnJsaunsGlLrVyeDwaDqxzJpfQMPWqOYL) (seq (null) (seq (ap i AiiKOCoScLhHudjEjryTcvSYLtkAAJrCCtdxrZqy) (seq (null) (null))))))))))) (seq (ap i PkWHPYAbHnBWpJsTYVx) (seq (seq (ap i VMKthxiTEXcVsXxhPeWLOlHnDsvOcjpMLKgtzxMqtyWNejOJZhTykcrHybYPbeOqohkF) (seq (seq (ap i FguNwAFOPUPejnPDpaGOAxiZUuBFkJDfUzufGfdasRCDvvHNcLEovsHCcCBhAAStvQApiPGzhotfBgjTLYfkDXDLyDPFiotWWL) (seq (seq (ap i vVnLlAFjiXNPXUsrOptpiyENqxISWvUyWefIppgnOHeZepSMsOqZDqlfwdAr) (seq (null) (null))) (seq (ap i QCNNRjREwauXbKsCjFKwJEmldtJPlOkMxddMzYYJwOgmnYY) (seq (null) (seq (ap i FsZCdypwcQIMcFluxeVeuEDcnxqVwyGlhmontwfPvAUQo) (seq (null) (null))))))) (seq (ap i LLaSeTgqmTdlDWtdgsrtLieCDXQOSCEBJvwCtbpwWvlfXRfeTjkQczFOcqtNANhzlXLQTEGBdGaWaSQQxgGqmkrqiKbUYfVvbPl) (seq (seq (ap i DeJsTxUwwORyLVCHnCNeFxi) (seq (null) (null))) (seq (ap i ULcdQjYNLbHTXzRBdlOALganYILTsAkVWjIBKQHFTPLxratLneyGRxKbtJmXU) (seq (null) (seq (ap i EiYyTvmzQNPmOEqNMWEakFEOjEhgcQjVdhgPdQCOQecnvjjxoYaQkp) (seq (null) (null))))))))) (seq (ap i SBVBJMBuisujUgcNyPFTiIHzTBRbHHzubzIwOstrBUurvpecPylaDUIIpLNZzuAWYLvjqxRcaUaDRNBjZCfi) (seq (seq (ap i rHRLKGtoJSefGzJeyzAXXWvHPvEXzPk) (seq (seq (ap i WgOwhOLeQMkBMglceRmAxWphCPZQfxWkElXXENhdTwrDZVJXmxOLByAoXkklzDsGph) (seq (null) (null))) (seq (ap i lyjJGvOklaEIbxbewBgGbxPEmDbdCIlgWuGydApkBSWFgBClthtabSwzYPlQUzrWwRtgRwkfPQnYkgVC) (seq (null) (seq (ap i ksqiADvOMLjXGdiLeedGZSqZmKfLFwsbipzSItHrICPBdxHyhHHrCIxtL) (seq (null) (null))))))) (seq (ap i sJZVVFeMZbshWvIxVCAIsclXjIEhmIFJClgSoUztDXJhZMUmInZAjqBSCrInbwsdZccoscZxkASCEInUbDREheHjhXEOuN) (seq (seq (ap i hVCNVzGWlQNwKPiWUbWABmhhnnXRDxDhTWCNoeeVCnMZJeOrVHxGsfjqmgCTpvRdHFjNTeNqhRzhidqhwrEXFenXNQKP) (seq (null) (null))) (seq (ap i xiFkDJrSEcxYfOFoZAHpZhMFqrbtgRPyVAGZ) (seq (null) (seq (ap i TsDCTpVJgNueDrbVMLxpaadXewtjgskYDWsiGnmeHoSXWbaFDjrlGGGItTkOwyALATSIQcIqPsruKBshLRiAUpqimrHpndKMk) (seq (null) (null))))))))))))) (seq (ap i TGjYNMGMLdoMCuYYWjebRsqRLilNLXDcFGVGVoVSXfJMWpWxnaXgiocfpRSlCqjshCHdTaUiLGzNXpSiPDabEikzZRPCFfsWr) (seq (seq (ap i pwHLlcIYesXNhuaQcUYOQqlSiqbWyTODRbEqph) (seq (seq (ap i tgKXl) (seq (seq (ap i LDDKKhhYNBRCWsAydjwkYjlLXYp) (seq (seq (ap i tidKNgBMaILoPRnjcrdNIRjmwiSTSgbTILabjnGYUUVvmwKmCxHIPGGUTjcgVlpZyNarWOUlFxVZei) (seq (null) (null))) (seq (ap i bJawWrMrNArCIJWHlnemxirhEJ) (seq (null) (null))))) (seq (ap i ZwfgioDdKUCJJXFJtKPEHrJPmHFxAJwxuriDAsZTCUUUINloJMoe) (seq (seq (ap i RgyFwRNaGiSGRypPWpoaqLoooImfXsOjAsBfwLiikyCPdqCYUnHaVIWlXTnTkBrrEHARNfqPlhYUul) (seq (null) (null))) (seq (ap i qraLUgsKOPRktsfLIGMVrmQkogIQMulliaMsxI) (seq (null) (seq (ap i yZOzOSMhiCGteJBOTUZiNkMrLUwIOSWXoTxMoSDAoCQRrqQpDsFegddgjWkwqPcDKDmvCRAGmhgHaurZzvktzZlefpANdcgLM) (seq (null) (null))))))))) (seq (ap i KFsDuKzBgPLBISVndITokNOrLernrnwFCZYWsMBhmWrkuMQgNMzQPIOUqxKHDQCXgknOnTrWzjvOJRBSxdfXUJgvVHkKmGaaJDkW) (seq (seq (ap i cwvqfcfTleoRHfbgQkKrLEGoWtYeTzVuwFEGDWcgSYbohubpiwykjlSyZbnabhfTyWkHCiggGsvWYheBbhEOgBRl) (seq (seq (ap i kfdOvdrbQAedrEwuzgvZgvDjdvShtFOXIGPavbTlEfgFoevfRRK) (seq (null) (null))) (seq (ap i sKuZvqVmpwsaEAUSnxHnqcXHHSH) (seq (null) (seq (ap i yysacRmFMPMqhDxnntQNvCvXCRhegnNqgxFiwpUvJYpqXcmvuxpgljnzmfsQxoaGbtcEdLFtDrkWZteU) (seq (null) (null))))))) (seq (ap i BaYAMfKZnHzqfuhnGScJhaDdWvdgRPkTmLHqjRtJZoKyFVgvaYKZ) (seq (seq (ap i cJAIZvPppCINjbwaGuepfiNDszKMvVGpip) (seq (null) (null))) (seq (ap i EHDVlVBslqvUbzsVaRpjxCMWpuxKFkIsTyvnIBpgHwOZkCmJuvcWl) (seq (null) (seq (ap i GEDSgfEhBjYbuKOwqGYVX) (seq (null) (null))))))))))) (seq (ap i aipaqcjcLfzdNjYWMJFURdTnqTlkbUhWzYJxajSRNzqaCeYEdyvxJKCDsZzpUVxxTSnvsSFRDGWaYVxkMasElDGuKpjNMZrh) (seq (seq (ap i JQvlMVXoDkJhQtHoQoUujCoAXaCFvUutPwZfdlIrhqnvwVYFJGHoQtmfAtVYGpCGCtxJQyV) (seq (seq (ap i ZiqcMCxSUfTREAexboKyXljeGDaWaN) (seq (seq (ap i LgVESXyQDTcqUYDNctwhjpuImruihuUDourZvVzxFUopHyizJmWmnsFWGtBgKdbczBrukommwWEDXViXmBrcKrSCvIa) (seq (null) (null))) (seq (ap i rOkIssQZxyVHUawY) (seq (null) (seq (ap i SwmfwIERohHIRBvhFDkCKHQAZRyihNgyRIUWRZjkRcUuEvkjlShsgsTSLjZQlwWzvhoTjRkQNlkfFIBD) (seq (null) (null))))))) (seq (ap i hgQDyQTekgdBLptzSnSqKbMRGXzvIaLIGteLoUJMaNNlsRsaWzxrLahkoZUjnzvliccX) (seq (seq (ap i ZghnISSEFHVioVIwrgbyzFredASPWIqNPTseRbzPGF) (seq (null) (null))) (seq (ap i gpuvPUc) (seq (null) (seq (ap i NODVjCXXGWUzmjAsPnWMokkbyDaTgeLUNDlRSEUtjAHOKGtDnTjhThCGlYNzHqbkKyYYhzZykfqfqw) (seq (null) (null))))))))) (seq (ap i GAzxKxwnBUVojlehftGbivjJcLMaDaQkuKDmAqyRgbfNOtijQuMttOaWinOhWuLUPgUfmAQilXCOYoZLHIgqLEzo) (seq (seq (ap i xtDMZQVfrcNduTSkobMukxXcEqHQVucWPafzGGuGxIpDdtgUoEtziukStnSCpBrERkOLXFpZLcbQCiqT) (seq (seq (ap i ZuQoYaVarVqyJAgOgopNyEANiuiYsgnoIaKLaYNwcLHklMcBKTsCdcKCNjoBNapDfskNKUrQztgAFiOByb) (seq (null) (null))) (seq (ap i zJtFlrLGrSrCoAaZhAxZHHkKvwlBeWZeTvEccuroieELFAkebGzYTiXygUKYiOafhrtlVYJgPiKpxDrzpdeDacCdhK) (seq (null) (seq (ap i hwmsUZGkfyhHQsaaYjeZTUeySwOLQIsLzCNMIhySrP) (seq (null) (null))))))) (seq (ap i iSKtblmuOyyTQbqAVrIsSMBulTMfXedO) (seq (seq (ap i YwOxUcokZRsJmyObxPzRrRNQVYPzG) (seq (null) (null))) (seq (ap i qJoOGZeWYXuwKgdXkAmoNBkekMomQXaVVqkgq) (seq (null) (seq (ap i DJaMIxrtiaMfHSeodYBhfGxwoIUBVagfieZyFcqxXGVYm) (seq (null) (null))))))))))))))) (seq (ap i hGmRunEIQlZHGmMdjKBikuHUGtG) (seq (seq (ap i pwFHJGxxkBQVOsGnLsARcUdcWj) (seq (seq (ap i xLw) (seq (seq (ap i iLQkPXGYjvs) (seq (seq (ap i JWDQZvpRLkpY) (seq (seq (ap i EGWhlFSSxjJIXsLmIOMIPDsrZnYxWKuRCPLZUYfJAgvpnYmhTjIUVEtymNTTZJNqvaufYXPBQgxUJQMQxBdFNfnfjQaS) (seq (null) (null))) (seq (ap i krermTBetzkJoJlRyRcaXYwpwxULHfbTWOgLgmwYbWEtTVBhcVPydkguzSIWEpEoHEiQQWeAFDCSXLEZZfsnlpQCjLBjdQGCB) (seq (null) (null))))) (seq (ap i eKWSbzrCfTltCzOfTSMatSfzhrOwYuZeiUihcCutMHFfkvRgjbT) (seq (seq (ap i OKuKhPLLtKTFMtoxRkEOzrWlydBZyRgmWeYNpOuW) (seq (null) (null))) (seq (ap i GDVYBJGVnMsxGkqTKYRpyVaWDevQlLpPNAoDEBlQBGVBQlkRrbIRCGUJPg) (seq (null) (seq (ap i OOOXFozOcDESGyCdFzQNOkhFfGPPbEQKUrmgHeHxPdEsqIweVdlAaaggKTFJpNHsKFEmMSMOKODt) (seq (null) (null))))))))) (seq (ap i QqttTshWfvMArSfvQqlXUqzNpyJmKCtcmxgdwArIAesvDUbBmCpUNQhyMFMbcoOcnTJENNKcGdJVvpxYBMFMGUbs) (seq (seq (ap i WUaqCWxdwRSkYSWEMyWbYRRBzfjJmaXXmHYdomd) (seq (seq (ap i aRQdNSYOHMmZFjyTjIVOIIFTjUCQNYwPliEEXykGtJuAcVCcCpFQJiLQNgXKUVXWicyyVLlHFZTWomIDUUHniHxVFqHZIJNpKP) (seq (null) (null))) (seq (ap i cKjFXKWeglJjvHEPijVXq) (seq (null) (seq (ap i zRLbRetHtPYwHuvufRDchAhFttvFfhERcX) (seq (null) (null))))))) (seq (ap i PUGyiBzZUjOsiYKgGPaqDZX) (seq (seq (ap i ZAMIlOsdrpQwebuhSOGPQsMAOzdjRqfhwUJyBrOZkBKueIolHCkSMFNtrkFs) (seq (null) (null))) (seq (ap i AHjNqSAQMfEiypdYYlyzRyLTAmJQxdfSZYJGMbKfZrB) (seq (null) (seq (ap i TQpWytMQXpLJDpjWpnJwQ) (seq (null) (null))))))))))) (seq (ap i vYXGRRHxhWNUQGeVoBnIvkMRRYVGdoRrfDoTlxabCFijJQrjCPqjsQkOHKRBvnRlNpZsfTS) (seq (seq (ap i BQIuFwekvrqoWKuCQMiHWKflqanKKIAUOJNgJZwKWUNfJhtwMfNmsJoozzRu) (seq (seq (ap i SeiYXLaWxRjEOLGKkHTjYPUKjymZBDhKYefDENknIezEDVscIzCErQzEpFnMXDC) (seq (seq (ap i FjWtAs) (seq (null) (null))) (seq (ap i cAzHyRDUfNXuSmAbwxGdlrZpHHoPFWbuGGRVcHbdcEpC) (seq (null) (seq (ap i sVAoqlDYVZh) (seq (null) (null))))))) (seq (ap i YhDSBYrqKTZviUFqpPzgOSvzcmIvRpxChXAsucTiDhRvnmiPbMkBpuiTxXKdHWbsZoCZPfqxzbufNuwoeXHQyn) (seq (seq (ap i JuqSjMwSzolmPpHNdIPXaimPeCjimIQuVZiegPfcyKdYEHNqkJHzDLccvpaVvLVEJHxjJggouBrvyJtgODcvb) (seq (null) (null))) (seq (ap i ZUnoqICOBtNJdXmmRwCXDSxZgHixUjaONnWxDGvzBCGfNjgMXouDjSVxwpabXKD) (seq (null) (seq (ap i gTohAvpCdkcuYhApmQnQfGkmETfMELpkNBomLORlyYPmWKvlruhDmBGaypInangExLdFXPaWVQQdaBwaaGKFKbJkJoSyPZzxJeL) (seq (null) (null))))))))) (seq (ap i flcIUEXujQsDMmwlyElhtlHXdVYljNnqNNMoPiKRTyhXhpHVeXWbUrSWLsnQmOWLNmnrtmHahTtnkWzvEfC) (seq (seq (ap i DzRcUbrIpJsvMOrbsQlypGhKwchIfdbUPmBGDbTumRuxOlpOeKmlcBzLMMvSxFxxnxCfvOUfVjCeHBqtxBhxdYL) (seq (seq (ap i elqkdOTFGAnKCepknkICVAUChKqQASYYlXepmfDaoqnWTnbBRCOkCYbUBuZ) (seq (null) (null))) (seq (ap i SAvRQHBxmecrdbqbzcJksXTGAbAspARVfc) (seq (null) (seq (ap i vtYTOTeAXSxxgsRZSNmqHRYMWrbKvkSSDecPlwELbzXKARRBjownxRodAFS) (seq (null) (null))))))) (seq (ap i NRsTLJVuawzbbXjH) (seq (seq (ap i LBqietjbjkixmfUnvxqbHhQBPoRtRNAppGXzSYQYAhgBNAHdbWaHIZ) (seq (null) (null))) (seq (ap i PiAVXfYFLhsioKRhGTumNrXRgJzwTMJnoAbynYzjCRSBIPmuzKwZYP) (seq (null) (seq (ap i NVeSgxThXSUKyezImLkqcQLiUVuczoAxxWZiAnPNqALWbOXVkbWcfFXaqctFdrpABBpAiAYU) (seq (null) (null))))))))))))) (seq (ap i sKnCboHmpsNrBIbtkuNhJGLIluoYdhHxuyLAuBRJAjowXZfLwGxmpwJJEpzFKVSUGnKDtEIoLcbmLDIwBqLEpvXCvwBJ) (seq (seq (ap i NsWdJiacuoFVuofPNwEoEzGCEXrUspmccORwbJrLTJdSJrROxUMnCFmGdYlKuNQdgWrhsiIqmWOlzePRQpzRUM) (seq (seq (ap i SxLEFUaFd) (seq (seq (ap i BmgJFshFPZOPbpvKshBYNm) (seq (seq (ap i ZKmSCvTuVDKflegRjmJeKOLmBdHiJtBscfwGsmKGqEuzqvoPDzMzQtWJojYhOdR) (seq (null) (null))) (seq (ap i ztwvEYRTBfRpfBrTRTWgPdsjEbL) (seq (null) (seq (ap i gXgRUb) (seq (null) (null))))))) (seq (ap i pChhQxTRgFaGppehmYRcwNJJsNnzffeOiTzvlqVZosqDjCcdjWYKK) (seq (seq (ap i zyatGHPfSNhUhXPfHDEiwFTcZsJGrZwRYPzmMCXTRCGlBmWCSYdyeMJJspkshCqIqUsRaDWKOJXLHLdVQqCHnLMeqWHJs) (seq (null) (null))) (seq (ap i piDaOeyRbMIJLpNlhklikLYUKlfFeHyIroKBZOuMZUUEIDnDxYXksCgHoeOWmnXByJmz) (seq (null) (seq (ap i nitdegQDkADmmEJwvziTTBHsJfqtARKPpCVoAooPShHdpCJJN) (seq (null) (null))))))))) (seq (ap i oLoKodIyRqDpiGYnUUogYMJEOcsSrnH) (seq (seq (ap i KvMMzuHjArzPkDfIOomoKjolVuPsZZPcqBhJDwcfQIPx) (seq (seq (ap i XeGkUGvVWVDbgyGkxzuzIknWFPTmrzpvWpXdAoXAMOMWHwOaOBkMKLiuPViSFcwJSZfoMAjUizw) (seq (null) (null))) (seq (ap i YFyBtyuiAgGCRdQZfQvGPWxGZaOOqfmvwiRrJvglWCZlP) (seq (null) (seq (ap i KZvKxcoGOFPUmemTUIEFTrMGzDJHMuTetCZABcHdWAzKXekuHgfbILVXUtAtYGIZFd) (seq (null) (null))))))) (seq (ap i LTJAqNjcvTyvtNFZKlW) (seq (seq (ap i ZgOHOnqYDxDVrDMkkLaqGVSCnysneLgBHMfnvONZEYkphTgzDsmxShcVnqmtjzrSDYCuAtBxbytUXdMJBmXQdFJUspYgzFwLBYx) (seq (null) (null))) (seq (ap i jqakRBaafTfTnRRcPhPDMVSEhriwNTnMoxyEFRMMRztsQ) (seq (null) (seq (ap i xKIiaauDewIVIAjsRRFxhvgoxuaufcxXTpOBGIsmpsKsxuniajLfNraEnowYyPIBWnhYetMxhybuGUiKhcnZBhheOmRB) (seq (null) (null))))))))))) (seq (ap i GMozTquyrCnEizvmlPVMoXtFMQbcNuZICqFahtcBqYXhwcDgnq) (seq (seq (ap i nZbAbpDsXNagpAAohcRfWXlzuDIMUeBiCULgfOLgYFokvgyUigNzBtTxQrsGaV) (seq (seq (ap i wAoAxAYQHCvuNsKzTMimuZikCKzouCtFaQZaudCNWLjtJBkcsnbqfKtmXcJojkaZnNGB) (seq (seq (ap i JwhHpKJEMAnwZvLwACrVCoUrcMveSETsvnfqRlaHQLVYVXLazBYZgBADvSSGIXkvMdydeZqWlZKAvNPURYjSLsbQRUsybsAZp) (seq (null) (null))) (seq (ap i VAnUlorZlmICDmcoJBN) (seq (null) (seq (ap i JZHiYAXODTPtwRPSTCtxCisShLJevKQNgvSPPqzktm) (seq (null) (null))))))) (seq (ap i GTBNHHrbmkqofkADVgOscSsbJZlrvXXaoxkB) (seq (seq (ap i TeCcBLwaulnEBHeblNEZTXXcVcPFArjjlDjcoGvrYipvzNxGajnzHHGBBuqkELhzOOWcMLJOd) (seq (null) (null))) (seq (ap i EBgLcsTIpRtJerPUzcxI) (seq (null) (seq (ap i aHWEPlJryDvybRLLClaLIPleVyIJFpwgTqRwyAJnaKDOjsuBYukVMKxScyTZLVoWavbsNmIlnlzDdsLRBn) (seq (null) (null))))))))) (seq (ap i RZMGaNsubNSPAYBvPWnUomWsoAJIVOeSqnuIhrndQyOthcbdmmQUFhonIrUJRywfGKVFgAVOnbaQAZJDHA) (seq (seq (ap i XVFKVScBrhXjdvzKPIIPdk) (seq (seq (ap i YGdxqQgPtbyPthsaMNMxhklKvsTUeIrwWpEhQcCzNzfwbADGdfKgT) (seq (null) (null))) (seq (ap i ArShuX) (seq (null) (seq (ap i tFGHsnTDFtvvhGaqoSQpHaRdbFQAmGYiCCljCYKoLzhcEbpLvTIJfxUEEWAZZjEKqJYNkoDagYbJoNgyKTJvWegDU) (seq (null) (null))))))) (seq (ap i XGBNrDcFQhshsEDKOBtHiDeRZIa) (seq (seq (ap i iEmJSNmJlFpyGz) (seq (null) (null))) (seq (ap i lZZahqLmykxfhjkBrSkNXxfdGYkwqdYNDveMUIZsreocNOZtTTasuowSKPDrYNrmhkgiMZxgvhCa) (seq (null) (seq (ap i wbvstiVlvgJoEAwaTcNiOcaXPqobXVskUjpgnxIvDDcwyQxVSMu) (seq (null) (null))))))))))))))))))))) (seq (ap i ubeycauw) (seq (seq (ap i cFbcbwFOdqfzDxgXQFverccUOtdcoRADUtneicZIvQLgNG) (seq (seq (ap i PcwCLDJABGofKwNqXQvOlTmIhAXPkyoOXqZDixJmGwUNPYyriboorU) (seq (seq (ap i tugafEODqaTnoXZgsgCZJEBXKPXKOmWGHCdoeZuezPIMbdpjSSNHDmwiehzmmFnM) (seq (seq (ap i mFuBvzgKYpzLYeltxnFqPvyprdHUGozggeJeIPeDiSBpfTkfvlcJNwFftKzQWTCpzcFxbvP) (seq (seq (ap i kmJpklWssoDTQbxSXuFaqVECsGDsAsuDWUwHzDaTLKHXQGWnIEgYDroZASDXSyJawEXFKcdmILLz) (seq (seq (ap i aIDmPDJrPlYkSKSLgzuKnRElEbeHjOdBdgDhNBEHALmhJEhcorwuHwvTzEhR) (seq (seq (ap i HRwnDMmfjXsWoLbVZJdxRo) (seq (seq (ap i dTFAvnohyhYFYomVcBMDErcUgFZBJgSdYfaUdjyFVpKEVIaBKIAjcEcAKzGbxsautNERGFmuHxKgxYUctisjcdJuh) (seq (null) (null))) (seq (ap i SsVceiePfykCWcmHzCvWbtYZIjnCksUgajzYTdTeGQxFPdiJhdSIVOcHbKDpIRFnJ) (seq (null) (null))))) (seq (ap i ksqlLFOartatxrLVEFCUTPwbCDCXlahNcGxEttosVbSDcBrDuUxxqaDSEPjQymOgjWQEiHzGJRzRtYn) (seq (seq (ap i KvitQWTGVorCBgg) (seq (null) (null))) (seq (ap i rRctMlXLrIdfMZtEoeWOR) (seq (null) (seq (ap i TwhFWfxPjVjoAXxuqexAElTCtsmWTEvkCbhqQfqOmqrTkXaCuFYzoykR) (seq (null) (null))))))))) (seq (ap i jV) (seq (seq (ap i yVpojqDJEDYQAmDpKbEaMNvqnldVxSNkMvpMSrXuAOqkTsMNZxYKFXbrpKzvvZhIDRnjxCHFpWPCkMAqMXQxmVpcISmeM) (seq (seq (ap i uSIbnrVxYEwYZYCbLbckbcLMreasMryV) (seq (null) (null))) (seq (ap i bIMMlgBwazZBOmVXiwNweeGMoazbpvFfBiGSBHkgqsPtsAkNFFNOlegcbaIxdcNfnXSWlsFKDFtgechRhcZFEZAnby) (seq (null) (seq (ap i ghSQRpPNqENeHPSagqFVehvYgvBmtxmXsAqsluJBvWykipPmQvtVyevdawuiyAHOtOk) (seq (null) (null))))))) (seq (ap i fFmhVmTeilNBWnXdbFJBVRSnGlWjkXrGoFzETZSpiyKc) (seq (seq (ap i KuQZJtlRJwFCUqguHtlcVwiKlidlEbtwmAShsDPesjiGkBsBtKpBXRxDBHmkkNEArIpBtjWxIlUZPZeruKISxXzwuxBV) (seq (null) (null))) (seq (ap i NCIEtsvogqcKGuUmdpZFdoMGIJreOkoCkRxorufnqSKVrWmgeVaQACiaAOICXdUEFnzUcyFCcSMbi) (seq (null) (seq (ap i MHtumgmnBQdHAEuifBEikkarBNWSvJTAkeRjGmPKLXCgiaeqZmrjMxVJhwuVMIpcTpPccpVezPZCrBxmnNgwerDzgLT) (seq (null) (null))))))))))) (seq (ap i tpXXP) (seq (seq (ap i eltHpjUQXEXlZUEsDPuGaNWlQadBViVWjIBDUWBXuMsCxptOFAVVVHUotPKXSmsplXmYlNNnFbaeuDIpBpcJ) (seq (seq (ap i NramiLdjEgRHSxObpvJZIIjoUhJkiREwPtvYZAhdRDbIwlOGoQjsem) (seq (seq (ap i yAqSDydMmiVnWCPRkgOSsqerLJjcumzLtXkjzQLOuqvJzGWRXLmhmfSZooYRZLupo) (seq (null) (null))) (seq (ap i UzrqSTPsGrfAROwGFhWfceaaZmOcBGOrEhIBBjFthbxsXYaFf) (seq (null) (seq (ap i ZAehDUBMBqzVmadGuhMwUCckdri) (seq (null) (null))))))) (seq (ap i WSwfFHyjXGEgvHQmLHLhjNXIFgBTTYMhQhXdrZxbawZaAVFtSYoLmdEqqqPavmdA) (seq (seq (ap i GZrFeyEPMiMvIVflULWChuCFyRQxWJlvWXwAlOxTezntKwOznqKhjJXubfCUZgwMDbPibtWOWqvhZPKNFhxkIMjYAtwun) (seq (null) (null))) (seq (ap i bKsjGZcGkUbLaNkiSZvMbdIoLhOABqDFmqZuKbiFHNuZePEQzrNcSXEXRWWUNijTJsVqPrv) (seq (null) (seq (ap i ocEaLDjNjidKwXeILYsuyJaiJDRdzrWYOpWAkgDPoBccDnfpbDF) (seq (null) (null))))))))) (seq (ap i AFtEmhFxahJReaiuvugIpFPKjnNcQHjtPbQlfOdfGGPuSVAzxkQfaVjXy) (seq (seq (ap i sUVmPASMTLokNOVSfWwDBWXisDggOASVkjOPIsFnFRMSwbyWBkeTRXxq) (seq (seq (ap i yEMyQITDbLQuVBbqXLgKPnmNIpqLPZEHKeBJoTCdikqWjjWqqifweX) (seq (null) (null))) (seq (ap i aUlJcrVosYNuJVXbluqWfLsJokSUTznepnsACYngvCteyPFRmIhfUGRBhPGqu) (seq (null) (seq (ap i vyqM) (seq (null) (null))))))) (seq (ap i PvZBnHMgbf) (seq (seq (ap i sApvvuDtDvbiGURilIExndmgpyOMhSMauywKvULZmshuRkqURQEFvAMvinNVcPluYpRbrHfVCfaGprAXgrDQ) (seq (null) (null))) (seq (ap i ZCHYPIuTpEWAtVpqTTmeDmwldXAEobopkPMJIJLFCGqtcwkpHemmXlNWLU) (seq (null) (seq (ap i HQLAgcLTHXHexXXtbwPCnOeNkhveMCLUURdoyycoBViUT) (seq (null) (null))))))))))))) (seq (ap i PorxXedUgpQdnCEvClIXuhhscQaDmpTfCjdStBaarHaWZsasymBOXhLCuXlOzahaUCaKSsYnUGuMTt) (seq (seq (ap i chQelOADrpLmuwfsh) (seq (seq (ap i VkNPeBFnHlfoUOutjbCiIFcuBtkwtEDuR) (seq (seq (ap i efRxIoGNOBFNpYAdcouBWsAzMBfOzGkAnuMnuWxUbZkuCFbOaRikhVicAbZPushlny) (seq (seq (ap i EBlUqxWUemth) (seq (null) (null))) (seq (ap i LPxUCofHoKupWHTEHzRNUiPuZAIGeQsqApiYzPRVfveTNSwBN) (seq (null) (null))))) (seq (ap i axpeGoOSjSezXmmVSqvuTznmg) (seq (seq (ap i LpNcQEGkgKPHirOUISdgk) (seq (null) (null))) (seq (ap i joAeIjvqbwijUuW) (seq (null) (seq (ap i VxzQBCjKiirZAQaOoDuMDaQvULnlfJwoHhoKaWdBizOQIC) (seq (null) (null))))))))) (seq (ap i EMEjIOzMfhtJEovsajDasNPAnhSvDNMbNnrRcNHYNqPmTGlPs) (seq (seq (ap i ZOSgjbwVireYWmhBDiLssOvGkPK) (seq (seq (ap i YSIPvWcXSEkusWUoGAXPxQhIImDgRQcEgtWFTFyJcIqiXCuJYlosAWGaUvSZCjrYSnHwMwCLIKkyJQfxn) (seq (null) (null))) (seq (ap i BxMOtufbhLjvwPgqDnDroOBkpIDUbweOHiHoPpnYYkaLlBtcBFgFUOroFilE) (seq (null) (seq (ap i jVdKwunpESCEmCgCCXcHOpALruTVcCZgXtCcImXStNyjsFtslgkLweGtbPcxPRTuRcwMGBiEZinm) (seq (null) (null))))))) (seq (ap i HDZLniSoMMBZMXIRpruIjHJclFcXdSviOaeUvaSERVycbgLSlDFdpHBeL) (seq (seq (ap i CUhSRnygJYAeYueeIJQapVrEGbtvFNBnoiVXdXtywgJmOzIeFAHQxUVtjtJxcKDuEXYtfKZICqzaoKjK) (seq (null) (null))) (seq (ap i aQdqAJnVi) (seq (null) (seq (ap i MmpKEFCLFc) (seq (null) (null))))))))))) (seq (ap i dkzFTnCvjoxCgRUxGzxRwBfayASmPTkMVvMkXKWvIPZIZ) (seq (seq (ap i tuvxcaqCkHNXNgtafUuBttaOkUwOzMYcekYJfWjUKJhekgCTqKZKtYmmUGMhRifyF) (seq (seq (ap i DzRjopZWetYGBqnvtLxyBYbWZIfdIHjTSGOWIdImsCOFaWkkiIHMOTaIsfNefhtTCDQGvB) (seq (seq (ap i REJNgsUjZosIKmnTJgdTRYuoFHJSwcfStqEWjLavhgMLWfHyRvYTfDSCqESaFxgtSLCrRvTwrQbXdyZDCdEzNrmH) (seq (null) (null))) (seq (ap i GEfORviRSUodyFPbcaWuhbGBwZ) (seq (null) (seq (ap i TUJEyVLiBOtXHESrmWhrwBlmdWZecmoyBIZOekUiLpxPVNQolRVTNZMmXeDagmuweoDZqlZ) (seq (null) (null))))))) (seq (ap i yxoGAFgudTXQKRkJAAsQXekhwBkOQPmXVAeqCPuerNczlVguZKHdGwfMQElHsiBaVhdXRVyGXgvNvMrfbL) (seq (seq (ap i OsDyysuRuKZVXGMtpwfEGjskiQHpdzIaPrypoFNnfwHbhDChJjcPuByjnYVOGNUgIH) (seq (null) (null))) (seq (ap i AVfLYBIFcNGDyIBvkEqaCI) (seq (null) (seq (ap i IgkiZeLkFLsaRGuvDVmEQvyICLJpPwMjDEHjkJftXjcgyxvpqsaZkhaANGFmsJMesrYzGMIbCdlRvxYxJDzKNWlDhTErGi) (seq (null) (null))))))))) (seq (ap i RaHiEqAgmEyQiPvOJrWRMNkaeZmTmYAZyFaNzeqxGefGgEtEwAFycRosWqnGEssp) (seq (seq (ap i HSkFOgevOHXEREDNOTjyaYuLorcTIGbljQGSwILJlQbrqZIZgXKhtTiDwigkJiXdZezEAyKrtGBDNlqFRDkzSKjKRNLJir) (seq (seq (ap i TTwDDUpsQtrnlDNemoBvvvduLTPADHsAbfwfaEAqcszzjyBMoDkGn) (seq (null) (null))) (seq (ap i JzciMRrrmiWHtpUoINkJabMbXbmnhGisGQrwrjEqYOgcLVUfQmnIAbkYKlbQqCCCtiCiJvytYohclfPaMGCJQny) (seq (null) (seq (ap i ApDePFWlYCGygagSbKBemdscBBmVvIlCSwzdvfZBWFsIJgvZSFrZBBuNYakXheyNCPULDsVjlTPklGUiDOfaVMXnI) (seq (null) (null))))))) (seq (ap i TEGuZ) (seq (seq (ap i vpp) (seq (null) (null))) (seq (ap i odNdwzvawXWrOfPrOR) (seq (null) (seq (ap i sEokfkagzrr) (seq (null) (null))))))))))))))) (seq (ap i GnzcRCnRJJYpcmoigsGjglnCXxuzLiJlIoaqHBlorYyqoSKNhidjuLBnMDDxMAGLrRFUkSwBKgF) (seq (seq (ap i usIsvoyQSHsRBpUExCiXuKZBqDYaUkysiZRr) (seq (seq (ap i sjICckOPRxGgxigEyZgUywxxztaaXbKdXderhNopFDNJzebOrKLAknpEQVztIqtkmGgzez) (seq (seq (ap i kvbAJNQjMTotGEcIIZDspYKEdPAwXruXgpLoawEOUtCGhxcGrZTqCigwmgKBrrDuBlvggtJooZijNYKUvsiWj) (seq (seq (ap i geeXfQOtFafWZrhLrxWenElxxxxHVIpUYBqOtgJjnQfFZpswNIaPJnQQcAKSwKvd) (seq (seq (ap i McYxjGHHGQYlBqLNcykcYHOvcoqgEeFJKOkdHkDmSixmEaTrPeEMvYdvruisvDLqBvfngbAujEekDMi) (seq (null) (null))) (seq (ap i RVsH) (seq (null) (null))))) (seq (ap i kTlmdOLfXhNCpLxpJVIENZUxPPQxHUIfvBJcPeQkGv) (seq (seq (ap i XREOAOgSErHFWLVUzZPtIHavyYLoyNHrYcHgdiwekIQKQSDMSESeBQQiICBZWvTsQaYPZqeOKNRdJXIGrGvhSHamRwx) (seq (null) (null))) (seq (ap i AmpsGLUzOEFFHgrybLYXpZSKoYWyxnUSjhdJiLGiUZfocWLQnpWZdNwceISalOdrvjifpCYUEPRkgPayrsfTfjE) (seq (null) (seq (ap i ThoZgxEqSeusCNyLuPlxXQMZGsXteKyqOmyESKxPubjuEWcWnYvUkZJABdGHuwpFZ) (seq (null) (null))))))))) (seq (ap i kKVVRRnwooMIvEpowbVNcuhqIWBWzGCWSsVOiKqoFtb) (seq (seq (ap i cLJNAFzpxnRjxCWRQjqWkcxWXgJUJJjqyqoTIBEWxLHnGYXWcFkGLIiu) (seq (seq (ap i nysEkwbHhhaKUoE) (seq (null) (null))) (seq (ap i zgjSAZYCCsznZadfZwTGYxhFXAHOUwAGnOJXElxpUNPIYasEohaePqEoevMurKsBmNtVRSQSnATt) (seq (null) (seq (ap i NnUzIWpcYCOLSoEFTZozsEmzrsijJzIpFFJExIAGUhQSCfPiwNBypMfCsamKz) (seq (null) (null))))))) (seq (ap i kpBmdaXGUHXdnWYItTdbzZeejNFalHPqNzSUUBySbBsrwGEFDCwxzAJP) (seq (seq (ap i BhfyfacUnqEfmQcHBaCqfFEyUXIXlnHqhyH) (seq (null) (null))) (seq (ap i kvLbtTmkDNbIPFCdPcCseSCmfugTFvYFuyVYSbQPJzNhqLecjQhezzhOdNpIBPvGjflqgwMEiGLdYazNtBciJGorLWwURlCCHwL) (seq (null) (seq (ap i SRRfbXPpqtzSuuWSIAMhhtaKheLUvfspKGYpvDdliTvGZSwRkYPeJAPdAhajRNSQrBqiKW) (seq (null) (null))))))))))) (seq (ap i XxXHtouvJwlSwRvBRGfFKXOYOVNzjMMcRfEchnGWHf) (seq (seq (ap i pSFvWdqQePQlweqQVClwAuJqaKQNlthJkwdcIoDkAzfZ) (seq (seq (ap i qAXFdWlMibmlGjsYicGLzwzcDBibVeqXLwlYMKFIBKKFfzFBOaJvpkBBtwy) (seq (seq (ap i IgVcblVyHWilCsDUNDTmRlaFOqNKDltxZK) (seq (null) (null))) (seq (ap i hcEhhaUJtRqoZlVfnOqBbZNYWXUTcaigYEyAKsOORyyzGWWuJvyCJxr) (seq (null) (seq (ap i AEmHnthobBgQgtBxGRbrKaPHCLwpkdBfKCLSGoUKtEHZopHNuSTtNEoxrpNjsykkfCpEtmivEZBixAWvlCmwbIxoXINVDVz) (seq (null) (null))))))) (seq (ap i RHCnQqIDyaqGVIzCcYNJxJLKjxobVojMXIHgzu) (seq (seq (ap i JLO) (seq (null) (null))) (seq (ap i tdCtfLAbaNdApaLLEhZqotBFGXsrKhAZXrUdUrutWgeanPhFDUP) (seq (null) (seq (ap i ZckAVRJCzcTTASrIXvzVjExwHXfasBBfmUAlDKNxYreaJcpLzGejBKOecDlBBY) (seq (null) (null))))))))) (seq (ap i DUeWfOzezXRprqChrvPGrFGToJWV) (seq (seq (ap i XBlNQhanXOVZdqQyVzNuwDxOGtHyeYgUTi) (seq (seq (ap i SCkHixZeETKssitEXXZpwhDHtVsnWCEjuuvePAnSOQvdMcHACXkjssQSpmeNIUeGgtLchVVTkzAzDYuzhPzaxuEksV) (seq (null) (null))) (seq (ap i RwkiavVMLhJdqpGprRlvLKKiODfYRtnYkTMcvXwXhvNAAqMLGHznzMjyuViWwCOcxKpYTxYUG) (seq (null) (seq (ap i jqzvQYLHAPXeDmTcrmhHiZRfxcOnnjfB) (seq (null) (null))))))) (seq (ap i XwUhrGkRbVcCMMVNMK) (seq (seq (ap i kdjmibKeQsdxVjm) (seq (null) (null))) (seq (ap i qoCzrhJcNJKcSvFygSjAqJzeaWIRnGPQSeIhYibiugdXFbCxxpARytzGGRlliNZCiclXqyhDWS) (seq (null) (seq (ap i BIlmDcysljQlbEQToXFGhDgEqsjOvwMfZEAnQKPCKbkqfYihGehUVXFFLpflwgTwOwivRtphDArFQZucInNcKmOEiAtSkHlJREi) (seq (null) (null))))))))))))) (seq (ap i dbdUnWNtMVcyWKwoxxTHnsopxhQqGlHcKzVKnHNtEPoywGQuWEDVeCwxwJnKOlhMAKTg) (seq (seq (ap i yzNZpMBJCVgYlnnZzQAJBKkMcmJOMBgtTJexkXPIRGSZhjWoyEffbcnXgJIKTjwfjJyQLCRDGMoptxxItpcOQB) (seq (seq (ap i kheHmmGHamNtFlTjcWwUmNaUbKlYGblGCkIttbUQtujEyBrANhuXvWdgqCHh) (seq (seq (ap i UfPMUwJrSlintzqodbWLuLjLnOSrryhjQqEQmRNxMToS) (seq (seq (ap i HrAtAOKQgDeqhUiWohshbFnfzFKCKrrxi) (seq (null) (null))) (seq (ap i ffUaJgSNrHwxjaasPfWBjzDmkHUEeQxsbYHlssgSWlQbTdDJMVmneiKkumvpPFPHAQfyucTBdtBKNFznAbQe) (seq (null) (null))))) (seq (ap i mLA) (seq (seq (ap i wmQqpzCUQoEiSMMDtNHucdoQHfEXDPqEemjtYUtwaEjAubmtOExXRGCwPnnXvzYVOaWosdaeaQxXwWAJPTOoxs) (seq (null) (null))) (seq (ap i XpTpqyZvzLmFMwgGfNJMeKCYgFwLKDUPgzyVhSRZwSjQzzoBywavg) (seq (null) (seq (ap i wDJNpRQLgiiKacytOGpvRbSBe) (seq (null) (null))))))))) (seq (ap i ihOWImiPFBQMA) (seq (seq (ap i NkYGveERRQSdzlaEGZrrheClkOHRhsskiITVvxejlcCUYNAYPKiiAluAvuobJeQNPJyYRnVrCiu) (seq (seq (ap i jcSrgedcRyCIROi) (seq (null) (null))) (seq (ap i bMrTtKhOGHDFbYVlhLIHlqfCGqJYeQelEiqMpReYbdXDVbhRUCvTytGRhTSBrtPRSp) (seq (null) (seq (ap i PYXqZSTeQxcwLJSSLtPjVLHIbdGYUqTtWNOGxTcwVdsInXtzRPzLrjlRSffTipDQo) (seq (null) (null))))))) (seq (ap i OWghRKzhHuMoizneynkyaOShfsaMZUmHhtMBALvpJXBMzYFkKADrwqVdgS) (seq (seq (ap i sEKhIxjmvRYANzRCrxvAcUsccwb) (seq (null) (null))) (seq (ap i Vp) (seq (null) (seq (ap i JyWPVRYVCheFCVZIjcBMPwodXeTCycUzDEWaqzPtGsOtuYIUlUtzvLTZLLTvFAHekFUsYFveRPuKyWzcaMlf) (seq (null) (null))))))))))) (seq (ap i wfwgvRKmBJgbTnLdmQNqDzHsTcUCesbMpnHyVCCFqYmRNNSKIBSnbxtOvlDfdnwscwxCYpt) (seq (seq (ap i jCKzCfDtgFyhX) (seq (seq (ap i xVdCezcXwPDtmCqqGpbtVLoUjBLnezWYTVkTmgwtNnkdsgUQgWfvgUQqoTD) (seq (seq (ap i tYlqUOdJEwrAtWRYXKYWuxxYBuhOiOUOAPwozvxFkqgstPTftjmULa) (seq (null) (null))) (seq (ap i MpAfbpEguo) (seq (null) (seq (ap i wIborBMwYqVZrmJsfWPBSyhgMqdmZcYnGzgLyPKFiZjoonyWftTuKGoHszBcFGsuMTrvdXaBpeIOGkKqGHhnxxRNRqAS) (seq (null) (null))))))) (seq (ap i FeUyoPmkDzLXwhUbmJEgrSE) (seq (seq (ap i QNBXBfugPkVYmJpEHKGXaxDXUXnbAzWVgA) (seq (null) (null))) (seq (ap i KHBtfkxZXPpFGwSom) (seq (null) (seq (ap i oqKeLn) (seq (null) (null))))))))) (seq (ap i bTIWEjfDAEqCHHQykwMPuPqHmoEMadWCNnegomzfBuDHdzjRQaeQQgesLlXO) (seq (seq (ap i MBctQopTWCDOnTawzQavhRNCeXzAFEcrlxyNUnMHPBVIzNCMJBM) (seq (seq (ap i wMWatouvVQzPowTMVSbXIyGHOEnIwrINvgNgmACrqofuvEMMcqFKIZEHLAImyITsCGqDxoCyQYlgihtmMhfAWYpajrt) (seq (null) (null))) (seq (ap i meXGZCQCuYX) (seq (null) (seq (ap i jWGIfWoABlFCOQTkpMFwVj) (seq (null) (null))))))) (seq (ap i LwcQtLTPmVXCBRcWQOffW) (seq (seq (ap i kIOjPDzxPUHRAndROBHfIiWefgMWATvOakNpwxCJdTUuzRA) (seq (null) (null))) (seq (ap i UUNFjelDXfDApphlDqQhrRFH) (seq (null) (seq (ap i KczdCTzGcBSobHjgAsaJDGquwElIOkxUqlMhfVsIuRqBYDUwfO) (seq (null) (null))))))))))))))))) (seq (ap i NXtNiWoWRUUXzKBGUXYWoNOdubKkvlRSgrpJHmUPeZlDsPyndTSPJRdDpVsXMLmlIzqFajewTBSKlswRFAgHVzBweRhUx) (seq (seq (ap i yvUSpObojzFaZLpgArTbiqelCLLsBNKtGUaKwPwtDprTnPZVqfwzSxaqHGE) (seq (seq (ap i qSv) (seq (seq (ap i CiNCDxbQT) (seq (seq (ap i ZjDLoUignSXpRvRqOGdEVEMoiNSqnyFOlRDrzwvdZZVhmXaCwGTktlTTigwBehraJmURBUWPlAHPllHNGgKyDbNKNaldWPt) (seq (seq (ap i IdUnCjSbTatYGwhFMbDddwhjMualcylBevYAVVUhygjUgdkdBsHGEMiecQCRVdLVKfCwphoCdDkDyyRVcFkfnLghp) (seq (seq (ap i JzFHivAcqzGfaHeP) (seq (null) (null))) (seq (ap i dKiTNJRywmRIdbXUVsPszzsNaEsYHvzKnsXmtfkQLomtQzNqisPHZwesxSJhyVSqAfHUpGuWliRFEXHYnDDFIJKKrfdcDuBHGKcq) (seq (null) (null))))) (seq (ap i AW) (seq (seq (ap i GYRrBtdEfSoZTOAlRfNTmjGmTeKfre) (seq (null) (null))) (seq (ap i NzYoSKDjtVVKaIffPipaPgqUWBCEuwpmtHqEKbUdaO) (seq (null) (seq (ap i YFAQUIZzIGpEifDPCkNYOCUKAhpYeEJBqZThoLqAKJQfNMoBhUkmlKqpfzYATXTsGrydiLEvuLCoqabtoqtzZVhWYK) (seq (null) (null))))))))) (seq (ap i aXljwBKrjMVyEGsMihwiaTsTTTOUKuJaaBxBZfglFpYLuBGlIAxTkCxYeeMsn) (seq (seq (ap i OqekPnAhtpRdGrvXEioZBWHFPzLauAXh) (seq (seq (ap i gPcd) (seq (null) (null))) (seq (ap i ToxVxBvtbFDpNoRqsIZvEBWmEIoOjfasyosBthpfdjCEDOHZHXNEPCNwOskNIV) (seq (null) (seq (ap i aUGNpSUiWBhPxMpsVJRmxwotodZYOeYQFzLnbGQNEbjSotbLeMqbzzfEYYCgihQN) (seq (null) (null))))))) (seq (ap i UGQmxBUDoFvfzVDAlongSSGJS) (seq (seq (ap i QYrJUWbufNHzQAFcEYvtCeUtmiTZAjgHUhVKLoBVJPbiXPQsQaXHNbHC) (seq (null) (null))) (seq (ap i OLWkuAJNQ) (seq (null) (seq (ap i ikjbtCoSJJiFqfjuygHkKEmTlZVZTvNyUNsSeDUjWFpoYNWUMfvBIwPFDBvXwVnamsyPhJgEkxkeRJwWA) (seq (null) (null))))))))))) (seq (ap i xAuMWRYEUB) (seq (seq (ap i IiGDKRSPiUlLXIzsLFjubbohldDHfllmcPwPZdA) (seq (seq (ap i cSKZHUyCfB) (seq (seq (ap i voRUgNIlTtHPOIIVMAGMocVwBfnIYknZdBnKs) (seq (null) (null))) (seq (ap i qPkaGfQKTxjAYlwoGHTxmDsAnYxfGniwgQqBamoSkQcyRlJEZQaarjMdYzfUiZDy) (seq (null) (seq (ap i AUToNBJkHtIapFUijIEOxQEwHUNAkzDuAgsbMsaGqAppnhdmiGQdoyZoxqgSwXMgmfBgLQeKtaFFcziBWUwkpHVVdjeTWXR) (seq (null) (null))))))) (seq (ap i xvBodPXDtFxbUKfFaCJyDdFtNFOWHzstZCGlSBBioVTzKvBwIUcuDogTxxrYpDazjmTaNU) (seq (seq (ap i RloPwIorBcaRapvtdnZBxRBqz) (seq (null) (null))) (seq (ap i PKzVwcCTVJqWqXOANsVirMHabGGjERbLhSTYzLOleOZMLqEDGGiSUnOOtdFsqsrIjFLxYBhGrrjboqTIugJWxoIQ) (seq (null) (seq (ap i dADCYaQjMTDWRnkRhZFkUXdAkicDvSUWaeGNZ) (seq (null) (null))))))))) (seq (ap i yvYzEnpOosSbeJzfGsFclgwSvRCSqaPbIFydOzpsnkZFImyisCnWeYcpgcVSSGqIaMkPpukYitdwAiOOTHJKX) (seq (seq (ap i mqlhfGsWXQmDoctpdxwWPfPooVGVxBXToWlItbSQYJYnKURZVUxHNjrZFTeGpUbMMyymWlPyRFbHIbkXUkrdueZkX) (seq (seq (ap i jFxHNIvBUkNZdMxNLeLRlcGwdaPhRqSHVymSUNBJtiqWEMndAijcFgIFrhzVToUNmCCZlGYbtnLZZJYMDdXxb) (seq (null) (null))) (seq (ap i MgkEnZsvcrGwROsldEJIkDrqeUmiLuUkvGcFRSjOMzmjBYQSndknqAFHBRYDCEXmvPLvNhmiVw) (seq (null) (seq (ap i iQ) (seq (null) (null))))))) (seq (ap i rhSCvIYrzgkAzjnKEduYNWocoHvMSTkyYbpnVJeLRqbPxwOb) (seq (seq (ap i PrVXGNDBCkFlBWQcOTdtgleEGPPcCqwfFOshprxQhvUZGvmlOYtFgKzbFUxzonMlcvRGDYSBsizgqoIAL) (seq (null) (null))) (seq (ap i lVTgfcQFELJKqvhYqdRnZetKQVedxnKkfixpsYkUXVWpXQafGCpkZR) (seq (null) (seq (ap i XHmzQAjVxvFwntwIIaPAZIqivdDLAmgFrMPHsauuIbqyKQNuSFEMCbNkKKozTqljOqgYZBGQYHANmXXKVtuIxfYOWz) (seq (null) (null))))))))))))) (seq (ap i aqimeUgmGNplQCxocuTXHibryqYuavPrEaDBW) (seq (seq (ap i tiUEcbbgWmEYIbNArdKMPvPzUXYESPLYNhjSfAjwCJIcMGDThHQTYAXFdWyGniW) (seq (seq (ap i ivhJNyWUFMQinYkAHZzkPjpiLnVdZcaDWePnfLPHTwftDpCUjXuqmNnhFIlKcORdnPTodb) (seq (seq (ap i nrdRHaNhLnKfpJOsQbFgvPMsUTCUBOxqdJRSuRmSqkuNMmeUzUIMfDeXHJacDVWtzRAPTtafYvZdvrdfyeGGfe) (seq (seq (ap i viAmumDYDaLBRxuiXFAMaNCjJBABZvuKmFfTxJfDsizFTtPekyXkVBBlGtgCqDAJdWS) (seq (null) (null))) (seq (ap i rwVWLDpLqSr) (seq (null) (null))))) (seq (ap i EFeCRRuBRoJqKzrNunzKjyZBxhPvEANuhTZHPWeZ) (seq (seq (ap i XpCrqVgbAjGJoRSMuigOslrrGHIYVAKaIfWHUfvTHNaKNxTxsv) (seq (null) (null))) (seq (ap i vSHHCDgsDCvCykLwaWovvWtjjvqSXQytwzsoHvsTEveTRbcrxyeFZzBysdKkgyLbl) (seq (null) (seq (ap i jcpLrBTfzlKoqwtWDKzXIXJDYdgJhSlvbQQncIbCKUlwCgKljzufIruAEVFMQyYkDWcwWToVyBrMkpyetBY) (seq (null) (null))))))))) (seq (ap i HIJKDoNotIMgjJcPGcUkpgLTMDArWAMLfQSoxBvLsHPRJttRKdYoUBMXNMzROXyzTwQsGQJ) (seq (seq (ap i ZbpSCtxpdZPnWxIGFfrAyzDocYGElMexpdMdJXVDQLugpurdZxLRkWbNIGy) (seq (seq (ap i YfanWMrxcaVxBnhcxUokTABmIApgZNULQSJizFSvoFBPvPoPLovcuedXenlpoCfPLULVlOCYEWfoWGyPoLOP) (seq (null) (null))) (seq (ap i ZfPpNYKjGymAUbKvD) (seq (null) (seq (ap i lDzgSsMMcKKPeMsGUalIZiMkXHqzTBOrPIfQerooKSEaQAyNKmJhPLZ) (seq (null) (null))))))) (seq (ap i XTZnGxvTocJBZJFIAxSpyGZpjybrA) (seq (seq (ap i wdbKcTXrnLlhOsjgwPVJCUFtKhLJnevuqRHqRKitrmWgPqBKyQT) (seq (null) (null))) (seq (ap i xjJXzttuFKeFgCAslwOqwZiVVFxZOUebtrVrYYQgEiPmYswpvaYEHwYucJEOWZ) (seq (null) (seq (ap i zWcpbcQiwPhOvXIqonD) (seq (null) (null))))))))))) (seq (ap i JhfhvGEQvzuIFrcwZAJJND) (seq (seq (ap i lI) (seq (seq (ap i koZMNDlQhxaVoSGLcmIpLgVDwzFWbyCfNfsiggeRvMPug) (seq (seq (ap i kwkMVSDswpXeSdJWhzVaHdHCAAgbywiUXPSYwMWJroWW) (seq (null) (null))) (seq (ap i xlbToLPuRruCSfWgqmlUPOGrqrZOjIxCq) (seq (null) (seq (ap i MweEPHawoWJAgXAlHnZFcDuNgUBDpjDRVgsnCRNzeSe) (seq (null) (null))))))) (seq (ap i wmepKADaDNQobrCxFUu) (seq (seq (ap i vWWMJyXLRIvOxSRRihZdsyFMWiWiWjEMSkdJPXiwQgJSBHrVxKYKYNQagVDWGvEdfUUgHISWvcRMfLGGXcQXLoUXZJ) (seq (null) (null))) (seq (ap i PFXEEZoTbDdqaGsBKNRxHzHPCwQGqYaAzdgKoGAXDEDVAlgjlPakBEZjhPbeLNVnR) (seq (null) (seq (ap i PjGJDBwTZTUxVyjXIBLpgplwgkYrhnDtFSXgenwHTPWjqmjIv) (seq (null) (null))))))))) (seq (ap i AbvJhniOEmMvXtsqDGVOtDUayASDXZbLhN) (seq (seq (ap i ZeMcnoraYPhmCGNuxDWMpHBkOMOQjlcmXyHPvKhSoTvwhJwjJeQHVPtXMfkoWCRAdcXDTzVafIrTJdlAVBxP) (seq (seq (ap i NZAKdwBkowKmcEWDqNstgoVTiAcCJpuMQkHjowOXDTvgbqJzUfelrmMWYcinrmIeEGkfxNolmT) (seq (null) (null))) (seq (ap i xhVvLZqrUUHkvIbENAFuNZD) (seq (null) (seq (ap i PkbHUNEwVmlmNhiCQhZCXeOAIZrYFPeidDsPEATNikWjQsVeJzeJeRjXSqSVN) (seq (null) (null))))))) (seq (ap i IjMkcZpnabrWwkvKpMMtnLqUYnKfwEWPyjdChoIisQtzEulVSYoExeEKKtjmPwiBmebnpIDcJBVCPCUZaVRzNqZ) (seq (seq (ap i zHKVQtiFHhb) (seq (null) (null))) (seq (ap i grAwxDIRNiRvyHkYjsKWbeDGmJGnERoPADWtawFve) (seq (null) (seq (ap i iDI) (seq (null) (null))))))))))))))) (seq (ap i GLzCJZyZOTvDGdWavIbemnmiWDekvySqZFXMBZyZ) (seq (seq (ap i uvTZQRaGsIryyiqPSz) (seq (seq (ap i YIHnj) (seq (seq (ap i VKLQcPenIkKZnKoyr) (seq (seq (ap i gDKmtWScJYOJktzsqbOSgI) (seq (seq (ap i AcPjNvzlfOp) (seq (null) (null))) (seq (ap i cCkcNGDxWxNjePYVZCwlZcnNunvPQbxEPJpcSZHcDvpoeRtyhmCqnfCVvTwXKmESlmrsUTIfXuKMjEPipMvkxCbPZBFMKK) (seq (null) (null))))) (seq (ap i iCyOlTkDwHTnxhzjZxgKeXMwYjKTbiccDyBmcRQZZFAdXYTNrtVJlillhjuoNMWnVskZtJfa) (seq (seq (ap i UHvsdjFZknB) (seq (null) (null))) (seq (ap i NQPKXZTIMfwNdBaSRDmDuXKWdtPQEdZENxCoLCgAVRvgqOtD) (seq (null) (seq (ap i lQDWaNjqOkIAlqmGyJRqVtzFcRzVdqmgiRUEkNCQjVljVjbJzWLjwHzpDXmjQgOZTHTEyxRYVqgxHFs) (seq (null) (null))))))))) (seq (ap i qbFSxavPtmNtbxchWTwJEzMFASBhsoQorlYeeKopzuRPQYHcZbG) (seq (seq (ap i XdaKgHKhrvKKYaEFwBYOXyoWizkgmdgfDvicpsnQbaakIpmvZWeoXygkygvhkkUoTx) (seq (seq (ap i ZRqJOAdBJLXiOMmhLAIjoeaHZNyIsporBoCCsGJblATlxkhKuuGLMkegJaPpZnzQBTlfVadVYg) (seq (null) (null))) (seq (ap i jzmujFEXIieQjocXOvjPcXgxuWPlhDOdPFkWuO) (seq (null) (seq (ap i OwhqUXGkjOKcaFvJCBmUPiYFsuhtKkrGOYItgWlQmogDeDGHRFGQqkDPZLcqJtmRGLxYgLpXAZBMhkQ) (seq (null) (null))))))) (seq (ap i LYWUffkCnnuqAVqHRIqOkgaSsOsOucKUUaea) (seq (seq (ap i UWhEHqrKSVDxvTwGYegkOmxOcMwslEfGAfarRig) (seq (null) (null))) (seq (ap i TJdJufFNnbVlLGRclTwMrkCbxwwbLdGeBFkAokv) (seq (null) (seq (ap i NHgqdsQGLOxiBkzbsBX) (seq (null) (null))))))))))) (seq (ap i isuSfSUxcTGcloQWJVLUBpuoaScIpLUwkaJAJsylluSRgqXLAIgMbkVTiJAhDlXtrHvoj) (seq (seq (ap i yWmHCxICwZVApHrFdapWGqKlTYZI) (seq (seq (ap i GrHoIOUwhUFzRQnqlhrOFARXRfxQqIUVdQosKAoEmL) (seq (seq (ap i rDUrRxhXfJoqGilXfyzVSctiywWoxGoYrwKjdOqDNLZ) (seq (null) (null))) (seq (ap i XTLYJuSkOGrzxgvnIEnVdQcxjbJJUiMnxRFCAVCKRsVArBYjfVChKtX) (seq (null) (seq (ap i gQUvjaRaCQDinXClDfkjwHJzvPnVAvqjFDHrlNscxOcZfMZOesDnPvaohFXcdtTuqXRqdSugEvmhWWpcgQGRIdL) (seq (null) (null))))))) (seq (ap i gqzAqCTRJEgwKnejMwHdbpZXiTjYLIaiwBIlXG) (seq (seq (ap i sFJwdtejGlKKLogWXMRWgpcDOUxqpSQkPENKHMwxyRGoTMQpktDfsLEPlOqIzWGxHSUjxpaueOMejwcJIVQTnU) (seq (null) (null))) (seq (ap i GWcTIgzAgHuUNDTgStFFgdT) (seq (null) (seq (ap i uwIqHrXeaWtxChOYtqADTCluexpIiTFtyIVLTKVJbHPqwDRwCKoozrlxuYMQrDvNASYHEZdupQIquSGZUtpCUc) (seq (null) (null))))))))) (seq (ap i ACYFtNnvliIFOSgWyrOrBtAoHuxnFEqHawfepCTHaKJDXvEhtevMwbvCmiJlqpuyfmstJUIQKWIOiM) (seq (seq (ap i QDCJeEEPRJjsaJBGdYbXjYFDBRuqkZIobBvLFMkoTfpNMWcYEPUzaNmpalaixdzpIJuezcUXUgyoE) (seq (seq (ap i pxRpGkqBRtnnxvsrKAropptYFIEMsgDUSsrVcvQJnmVqVgxHnVJpeHaqJeXKHBunGnVsEPhIqPBsKcwWRLwGNtb) (seq (null) (null))) (seq (ap i UvMClBcNDQbARyyavfXkHNBipgYsOxLbvtpDdKPARPQpKlkiIzjSN) (seq (null) (seq (ap i KdDJQoBGjgpuls) (seq (null) (null))))))) (seq (ap i mrZQvVLOVxhkHAJMCUAVyzseepmvDjuOseSXCybQcYGIIOoZxILdqWYgc) (seq (seq (ap i aquregmUbmYRBDBqpWmSYVrmfdWDooPPqMMEnHNUqTrzavrtCHoCXIcsZsWTPCLATNisrcJnDutJTUgf) (seq (null) (null))) (seq (ap i hcdkUZaWsxYLfwBVvpYGuFlaAMbkEDswXEMgeceDnpaokdpCv) (seq (null) (seq (ap i YgJFyHcCMuhjAsVnceaCoyakROvUztgnBRcvfvHFUkSWWhWLTGiusjEQmlCLoWNFj) (seq (null) (null))))))))))))) (seq (ap i adXspzDfZmgOXFiLlecfPnCasSSLuR) (seq (seq (ap i ahL) (seq (seq (ap i WnVOjxLDbUHgXBFaHmvWWQDiTWCRaKszfGGTGkntYEbnMYqHgbIsvZcbykJWIYTdJkXMoDnnciWcnHQzSEsxb) (seq (seq (ap i LvtXNhTUxYbSdaEkAUnKICDYIAqaMoCvQtEcZyQ) (seq (seq (ap i DYuAJsyNHbmlugMDFDrmKOLSRmbnRYUeDiFiHFHitRcTLrINSKuwNTFPFIxapWWCeeFgZsCQ) (seq (null) (null))) (seq (ap i kehZwskzAmpFKMsiDEUGdq) (seq (null) (null))))) (seq (ap i AapoaMDqKNTfIIPjpaUPTVIgOfzyAVEMXXuaNsCgVXCmhqKKz) (seq (seq (ap i YXAncWGUMGqVBVGjGgnCsdgRYiGWCLs) (seq (null) (null))) (seq (ap i aQEjvDMvrwBfUZxDfmEjevTVDKeMaHEjiFUZsxViJPMisTUNaRCrtmEbnVARrMOCPpRzipyVbTVFaqBnoPzRNJmzE) (seq (null) (seq (ap i hGYilCTxFLYc) (seq (null) (null))))))))) (seq (ap i RPhxM) (seq (seq (ap i QQGwxqLqBHRcFHZnYCHSaRJBNcuEYBCZiOkczYOzUNgIYAOegxjDivzawbjhoroegyvzbWcxV) (seq (seq (ap i ESPpiyPUPLDAuxCHrvEznZsIClTmlkZwPdxrgSiDDcFlfUvgKGmkxOqyg) (seq (null) (null))) (seq (ap i dkSnu) (seq (null) (seq (ap i cPdkoEtQ) (seq (null) (null))))))) (seq (ap i TPOctnpCIXDqAIejliYTcFaevwWJsEOlydFgXQwmFgDbeSZFsWMxLvHwqvWCbaHBnuLDyekWohUPgSsQHXp) (seq (seq (ap i jhmRydHjTPiDlULHRVNchVRUsKQyNANQULxAhgLalZjPPIdywnx) (seq (null) (null))) (seq (ap i dEmXUibWzwhRtbBZjvVsDrXLOjncZzUPdfHTONieqVdKJqbSNdchahrwgmlSCKGYbiE) (seq (null) (seq (ap i iRXBoEyNbvMkyXjDIcBvYoYNirNBoXWPCXzRJMsdaphkfHmLKVatQivjBonUbgddHiELCEpUGAUxFMNbzrOBqaBdukKgmlPb) (seq (null) (null))))))))))) (seq (ap i fSViCfJNqkaItGhtLMrP) (seq (seq (ap i RptYzvDywvBXdOanlPsozOVhAkoxtDeUWMTHLaDixaCmtFIRQOfNNomfc) (seq (seq (ap i ZhWPQxYFAlJiuHtHaWdVoyfvtVzKvpjsrYPMylw) (seq (seq (ap i jNsSLOvhruTVQSyljkMdULEwIqbDbalHgzupfuAsx) (seq (null) (null))) (seq (ap i BqkdUHCllclTDAJmIiJRCRIDyPWoEskbJdcWZFselpamAuRMhwmTxKPZehpQarSlgjSfnRKirjDtfxbcHPnJXdgN) (seq (null) (seq (ap i ltLeMehvwTKVJstYBNegTuIheHoMxzulrtMuOUpEpgutGBpeERyoLmZrLxYDYCLkRQViuqPNxdZrRUesHdnthFVvzpExAtEKMQvL) (seq (null) (null))))))) (seq (ap i SDiPtftBKjEHJzERRNBzwyhaKtiLKEqRkxgBEmUnkSRyMzYUeUtc) (seq (seq (ap i BSRnfPrsCOSZiIhJFeUKcOTrWjrCSIEAIbn) (seq (null) (null))) (seq (ap i KdHtptVxchExEjSefSxzBplCOKPSVGzaXxzmVvC) (seq (null) (seq (ap i ZQEOraZRFepfFrHpW) (seq (null) (null))))))))) (seq (ap i YZPleVjGbqinFwzGwKPKeGbTXbpiSZvqasORyslOHiLbiONiJlHAzoQjjontVmaJSTSOJDXfUYZNfBiBWQyrVYT) (seq (seq (ap i JkFehPDXQWhjGzBAKeNBJMFlNQOvttUAOKTaYWbunWqQdISSrOTHuZMoXkjoVLfZxnAoCdhAQKVYgvQsFayGmiMlpbQt) (seq (seq (ap i mdKSFGykkijpYol) (seq (null) (null))) (seq (ap i iXfdvZEaxlvExxxXKMmywsmtlBIIyaCscoIjJxbdrt) (seq (null) (seq (ap i SCKNhjxQvTRZASfMSHpZlXnTneRBUzymTimjBCPgrCzdOgvoPNBqRPpsK) (seq (null) (null))))))) (seq (ap i JTKjbldXiAYlROZdEDSvJjJnQSWvoUfyiOPdiEvqhKBJhSqkKALxOfvXjgiNl) (seq (seq (ap i cGrExSSNCKKPSBGBejjaDadABGsZXRvgPZvZxusJZxZSVMKtJTaYJbYmXhiscFDVNiHfWsFzgPsGIjyZRrSVY) (seq (null) (null))) (seq (ap i ulqScZkeJOKTRtMwYWKWBnMFGEWnEFDxiNiPAjpAUvXc) (seq (null) (seq (ap i xVTAPSMI) (seq (null) (null))))))))))))))))))) (seq (ap i PZWHUWNEnoBonMnLperzQNgPByAjTmzveqAAXgkWpFRQPBVHIftvnWrRxwGiqEfzlyUqwPVaMHKULmCNaqnAScocabCqSwRW) (seq (seq (ap i goEjXkWZzTOVlGjXKYjrIUPvBIFyOqorhsTGmqyMOELaWNgJTpKBuUWKKdASdjHGGUZzlYEukz) (seq (seq (ap i IBqvalHyYTzokSV) (seq (seq (ap i trxNeLxqHIxqmBardkQthQyGVfmcNwXnRCkomRsbsN) (seq (seq (ap i DgSEZWFnOEBIXBvwlZbpngtECpvgSOGqJJOUfysaHGbrnmz) (seq (seq (ap i KiJtWJdCeeGlIJKogoSWOsdojLhdNzOriFcFEOrqcbsDDTilENuwaksAmZEDPpvpxSyTDCvkNyzsAzIJmtSsEitieZYlxwpDKHmn) (seq (seq (ap i fxssAnFSn) (seq (seq (ap i nazXoQZOsITDhLHOiFHfjbwnrEhCalBqOyYDVoKazJYxqqEqPdn) (seq (null) (null))) (seq (ap i zjTsIEXKygaX) (seq (null) (null))))) (seq (ap i IXJIHjHkxPMaUklSh) (seq (seq (ap i ywnJoGTajUfXAXsdmmAiNEBCAiiXIDwblGhypgXBqRTgxmIZjbThBzSwOSZhKNTUCgdAcORXTErsHENUSzcsc) (seq (null) (null))) (seq (ap i WLBNO) (seq (null) (seq (ap i AFidFgtlTWpHrQHJiJQJdYlTpDiiEVwCJkNuidzTOminm) (seq (null) (null))))))))) (seq (ap i KqGegYbaoJzCmggGbnxqTLVQCcApklBQd) (seq (seq (ap i ulcHtGUSSiilott) (seq (seq (ap i SysWYgdSyvKUaffIMVzEVcmlldXuUHVUpaekl) (seq (null) (null))) (seq (ap i yylvNzCIhpvwsqinxybUZaSdAwSPiRlDQtZIYEEzUzNDEchKiQiwnFQWtYhKYgCGEffNHbFLxlfpdRFSV) (seq (null) (seq (ap i XFHDMwWdqbrQIBMUgrKEhireuTXeEzSdwAVHLekAEgZhyXeBpxMMHNkwzbTTyhaLJEJmCIzucay) (seq (null) (null))))))) (seq (ap i YPormftSsClxSzYJELfGIIqNWzuZYjVbcNaAyivLoGScwjArLIBYVO) (seq (seq (ap i grEutbSFBqHmTcWNGUyAhmPu) (seq (null) (null))) (seq (ap i pLuDkVfuaxLPwAinNzdbeOCvobHKuClujFOZlnhfzmGVnirbeOpQXuXjPUGrjRXEbObfEOxCTrvLEhT) (seq (null) (seq (ap i ErQRCRxhASpmTFWsPpHcb) (seq (null) (null))))))))))) (seq (ap i omWwJSwFxqGfNYavrRVUHMlsa) (seq (seq (ap i HQLRNtCwSMwcgmnmcux) (seq (seq (ap i VhaHZsXSDxNuuKsDdOqIXvIUYcyyAAqnwDoHVZLzhKWpDEWEiw) (seq (seq (ap i MGKPElbezWGALSGsLnZeGhAwpaEzzuGvCerYqVItHwtZcIvfaGWMcsRqHcYItvqcuVazoAJemlysORJjlr) (seq (null) (null))) (seq (ap i PklDTIfLVNhLeRgmvnSqQqktxNwdyFwSSTjmBxyVhmROfGTgkcRYiznqRrioFOU) (seq (null) (seq (ap i cZpVtHYbssLGkdywJKPCcBFHxbQmbDDbcPYdNShUvh) (seq (null) (null))))))) (seq (ap i BlDmhBaVessLqoErZNeFmsLSpwhgidAcdVkWZHvHIIpQnlJQwKDSiEVyFZWYfWrDveuMzQIPKsTZckI) (seq (seq (ap i xxCOZtZSvlUlPiIHpmjnOUkMHzTSmoTuuBbUoLFnMehDilpBqxNLlxFAiOLvsPXnYpIjtjJbuier) (seq (null) (null))) (seq (ap i GUvYEvMoxEqryiYaHgrazxOYCQnflGknbCdptLWzNWTBCtIXFBotvIgcrCLrXBNAIBycmvNxOrQnGxgEVn) (seq (null) (seq (ap i rLXXUBSvRNhRgSnefpPnUbiLHCeBedZHsIoUUYqXJvCavZBVbccKnHNuXMWDGcBT) (seq (null) (null))))))))) (seq (ap i ZDvpqWfigpNGASHBHMS) (seq (seq (ap i vIKhvjHFYGOJsotiqQeKNvktsWtkuOrmUUXpJMSglxPYkXPsDEkFUUHaahbSifZ) (seq (seq (ap i kRffSDqCzpDDksVOpVpFOnDbdccWKfJdIfaWdTxFlluuLZFEf) (seq (null) (null))) (seq (ap i KBloolFntwBgQkX) (seq (null) (seq (ap i mNiRrXAcRaDXUyESSgmvmJnpCKBSLBmcfJOqtyDSMUrxmWfOGgjgpIworojcVkKCuiivXKakGTsql) (seq (null) (null))))))) (seq (ap i ZnMSRhAxlKvGtfhapCIPjBtXDmJOPeNNKjmnVTAsvUCxnYzKXLuyvreNGJeRltyyjMYWScbkxzgezRjL) (seq (seq (ap i cDYqegeKMwOXvBjpmoIPkRzSnqLCGYpyWpDQOVUBElsBbnendVAQMuPjpgoNUYshDqgCGvTqqFyIENuFtFVoRduxDdhupIrNoBd) (seq (null) (null))) (seq (ap i DETzYAunsXwPTyjCSbUCQawlGhwddVujBXFFQYtxRthWzNAvMFSyMoyHpMAkvhPgGJfTjuSZQcShsUw) (seq (null) (seq (ap i rTRXLVgnTYPzOxuafaJdXpuIhlkoNfrCVACHYfrvlikSeaURoagzaYfCAXFEvZqrndaAHI) (seq (null) (null))))))))))))) (seq (ap i eOwQZsft) (seq (seq (ap i dYtEZNAQhxwmBgWiCjlSkVOmeyiBrzDhnNPIHjmmpKYBzDTNBWwqqUSGKVnZCyvnOa) (seq (seq (ap i RibfGDvJyOzJCpMtwBDtQQouvtjeNwHCqICEVHZcgvZgHHwOHhZRXtteqgqpgbqMX) (seq (seq (ap i uFPLvhrFfwQNqBLMKttQNzYnwaRwCrslURmibbBQyVGTjwlINEwbhGhNOTOANnW) (seq (seq (ap i dblChwzVKUIdiXvVKyMXXdiWtqXliSjZcCGuCjPKWYLXutaaoGeZKuaIkzhMiRzagDFarJZKHPv) (seq (null) (null))) (seq (ap i HDfsJCKVoSBbcPpSPJFHw) (seq (null) (null))))) (seq (ap i UQOndnZqCvlggQbEXxhHxsgcChbUCW) (seq (seq (ap i xFCqqNtBxxArcogGnrCejmQpKZWyKBKypSLBGlZjiwiCcynStqVeLzmafRyTJopVdiSMxnVwYLLNOmIyUXKcUKZDZoNgZdwwUMjL) (seq (null) (null))) (seq (ap i wuSzAAAjxXMsngsvlSsvcTlFbyxuGzHQFTXRDaJKP) (seq (null) (seq (ap i FTGIfwpicNGe) (seq (null) (null))))))))) (seq (ap i WzifvXRJTliGMWbyIQZexFbFREeQlhyJNlMdcpcXWxpjhd) (seq (seq (ap i DgxktfwggLzZpVYAvxYrJVXrIujisoPbgg) (seq (seq (ap i amZCHoNnrRIxraicbFFiMOFgvYfDSqsEfvnJdyAdtc) (seq (null) (null))) (seq (ap i IkgAAAtYmcMhenCCMOlwohCOQO) (seq (null) (seq (ap i aqyWFhifmgopsiXrhTIJdGkbgJtFKgZSImESZbXErxwuFUfbeXZRkgpaGOtHaAWANsFJr) (seq (null) (null))))))) (seq (ap i QMRtDEquHAvVn) (seq (seq (ap i PaHKKPvwJhVYDquTLRqhgQiNXVuJndFjQsZZqDhUzkexdOXdSNPqgQgKQAeCSZdMBcQTuslXQzuEiqTOwCBlEXBoK) (seq (null) (null))) (seq (ap i sQtEyAMJWRMMPpbVfULaBeqOsQmTBJtHrHvPNImDJNOnSUzGSpHJhOQSghh) (seq (null) (seq (ap i dxAsYTESGKIchExOVwIqYIIWrhtvJtgQWEwaKyapSrYcAxLRrPVAlBmIE) (seq (null) (null))))))))))) (seq (ap i Yb) (seq (seq (ap i zbXeVQrSEdJCPtcnXXMZ) (seq (seq (ap i ggllRJBEmaKbSAcHGSltmAdQtPCnnbEhFAtJlMlTCFPSPzkrJNWkCOkG) (seq (seq (ap i gaBaaiWxdrMCZEnAqyJkmTAUSSScjYmhZnJPyXOEAGrYiMXlpLrsykSV) (seq (null) (null))) (seq (ap i kUUthyxScEPAdDhpOdpBFjLTVjYmmIrQBiKFqIYuTGcwaRmymfYubXNxkphUqEduVaTAHtOqwSjsW) (seq (null) (seq (ap i eXgfGjSZSEOAVOaYwYNObpOlzUbMoWRvtPFVBuedOxUtFaGfeouEkyLmITkLsgJKHrxnKSbqYSgejYN) (seq (null) (null))))))) (seq (ap i imMYhNAwZLNOdFWQszFcFMXsUpvBeohlRnJUIyssHjbUyNLMXgoFYFKZqZKdZIQaXJtzTzQtiVTOEZfpQULTyUvVVKTjfJOfb) (seq (seq (ap i dzGZXyuSCayTLHmXJeHQzAuJcFSMFXdNBXahDaJZlgq) (seq (null) (null))) (seq (ap i ZIKeRuoPXDbtWjrrftwPylDMhBavHyDqSxrpOFJTmMEzHUtRoUvvksh) (seq (null) (seq (ap i JEEIZMJqvdrGZrWGJuDXlhOPQHswipIkZUlbglcTyPBLzgREiqQfKHiOxkCZryNZoucHlTlsxCziUTAkPmW) (seq (null) (null))))))))) (seq (ap i PSEsZTxbXvdBFZQIUHDAbIzNrjXQsauDlbZzC) (seq (seq (ap i DJiJJDQlBXNKlBHsBtZWLumt) (seq (seq (ap i MsRoQFMbwcYsxJNYKBlBnmAhXjTzuYEUAVWxhIVRQrDztJpUNCFIOCdgSThIMazWiQaWNqZWtyxtFityNzuuvdOQwLdWwgLDSCv) (seq (null) (null))) (seq (ap i uIjXzPxAfKdTEDXactSgEBsQqvFubuqFoVvgr) (seq (null) (seq (ap i ScKiXBXFvTfPoKrUkImPWsWLyFGhFiZthUEXwshYWOffqAInkkylbIWgKjQLnZWokJUxEqqaZlEhd) (seq (null) (null))))))) (seq (ap i nziFedsWFwzpVwAlxdjmLaPUxImRPpT) (seq (seq (ap i yFLbisBDfcYYzYWYehBwHRgJxBVeWoeyPmJIFEeieJoNETB) (seq (null) (null))) (seq (ap i PHsxQLYdAtWuZQgvsIUKaYyfXCczjOaaFmpU) (seq (null) (seq (ap i raKNhxRfhZKYcttVHqEvqTsuTiVhJOTXLoxMmkywcvjDA) (seq (null) (null))))))))))))))) (seq (ap i lmbABSaoEQnFAGWbRnuCJMCXtFcNOIhjPBlhvvYqifegVTZOlkRjWVCNegRVtbPDVJEWGKjTXSoNrhkndLZhrBjKs) (seq (seq (ap i wyjEmhhftbOtnzHYTpcdwDhTu) (seq (seq (ap i AbawqdvLBiJtwhqjbgWYZQMWdrnGIqGMIsCqWyakKGWdALtjVkplLdzWCjibMWuwkCf) (seq (seq (ap i kdAjEIMopWV) (seq (seq (ap i smTdPQuHldZSdveQJ) (seq (seq (ap i VVPxFuRRgEwVVandOvhRqwruWFQuoWxcSpYwNBAjPbovarkEhkDUmEhmglPCGPSpOnUqcVJaQHmIucjyqS) (seq (null) (null))) (seq (ap i aIqAnDUMnmVTHlYVlCjJKHmm) (seq (null) (null))))) (seq (ap i ioeUAPyYDqycIgCVTOnOiBBMCTVZHtlvyMJURWpPbACwysAFVyaWkCOojueoRtVNkpxvin) (seq (seq (ap i DXsijMqelvYzUjo) (seq (null) (null))) (seq (ap i pHvzkeBTxmAfITjcOareagFxmrArMRjfjPVtiEcNmHKwnxMbMzSKlHzNpsjfcduHquqmwXmDROkxouDXYKviboSt) (seq (null) (seq (ap i gQmMhzXmMhYbUhVLQjiwKEgyVLmIAvaAZFsvBmBBBkhPxFkZmmDEnAypkSXpIwdGLaF) (seq (null) (null))))))))) (seq (ap i igVaLhOnngqNTFyjvECGyqvjqQZiUUnhoYThGyS) (seq (seq (ap i ETwNSotvoUBajAaoNAVWiPVoYjwjCBBrNrdzdHHJtvswlJLCtccqHEUyfQZKyngwEYlFODBetIgezKTFcgyRAUh) (seq (seq (ap i wLHhjTcpwwHmM) (seq (null) (null))) (seq (ap i FyLzbGXhTMX) (seq (null) (seq (ap i cFXZkOpXuZjxtzZZgKgomcJNwPGmeOMxTjjYbyneyaempBeYVBXlQYfZpJlArGKTBkOIXWGTmlcuCpKjNLHUOHjoxcwMiD) (seq (null) (null))))))) (seq (ap i GkdNzvfhrHhFdwbMDnnXRAoqcoxdaJXEHvyUdERMOo) (seq (seq (ap i lSwxxHWhtzTffjmLcCbhNVfOEriNQSZQXyAHZhyDZRkrtSNCNLScmZQhoZfVmCiEjzFoMmFSgDSXZ) (seq (null) (null))) (seq (ap i Eia) (seq (null) (seq (ap i pfhcJPkFtwbIsJtRpZDtSASHY) (seq (null) (null))))))))))) (seq (ap i XsafTXYChlenZjIQihvoYskBnYXpKhnXRQ) (seq (seq (ap i LeQrKPduPBLqpoeluNxYzlVImtYfgyIJcmWpnEaJumXYxIIScpLBPmUTxEGIDVmGqJWxNvdKYRAFndvfqCAidxRBSKRDTybQd) (seq (seq (ap i hrxNmfIDJlOUBKiMOZYFHTBhuuiMOulxjekCqDAebJAuFeSNwrmoyHwpEIfzJlFii) (seq (seq (ap i WQUVtXpGJHkLaItMOFnRLbVABBYd) (seq (null) (null))) (seq (ap i IYMvzyiJUhZaiviGMuGGXMbaZQDqbFyGLZxopKRDrhLMDlWQPYTFv) (seq (null) (seq (ap i xNnPYWjkYuqIkoVDO) (seq (null) (null))))))) (seq (ap i AGiDpYXJyAKNWYfbnAPoAbRutGnQDnIzdmXwejssoMkOhS) (seq (seq (ap i sUTwOcKZpkhmZ) (seq (null) (null))) (seq (ap i GzGvpjVJWotVxQiPVMpTkLLiiaJIfdzEkr) (seq (null) (seq (ap i OHMwvlxQGypWIbVuRMeTfiDxNwY) (seq (null) (null))))))))) (seq (ap i cELuSYFYdLmzKILkWKKaLRVpDlijJPEJVTBEoon) (seq (seq (ap i cnRYwZSfCxTSCWWqFpp) (seq (seq (ap i wqVOtjxsOrGwzFDZNVkmJPUbbYmVriCzmzRVlgrWWRNqMSfknt) (seq (null) (null))) (seq (ap i WNEeSBmKBmCvPCmCaVfregHHPHn) (seq (null) (seq (ap i GudVhLNCDxTFSWIPqKOEQikhjnJNl) (seq (null) (null))))))) (seq (ap i TPMzWzDmtSGDJPifppFIzOyMCrk) (seq (seq (ap i FeBSajiQ) (seq (null) (null))) (seq (ap i ZYaJMwiDcWdufTtiCJgSETtrghuehpHIaXG) (seq (null) (seq (ap i xPWbIAqjzYvJdsUUsveZaZjvvXMAZBiLUMzzaRYUakQCNjkpBTQfFCOxwyexVGHHKpQzKqOTwOdSjWbCgWDFE) (seq (null) (null))))))))))))) (seq (ap i dsdeIxFPdWbiDhFdvOoahcJSysAvlWNIAlUBilYBvWFtatQDWDvHPtGCvmvHDcFFg) (seq (seq (ap i uQFKSogQWHEgWlylmLbq) (seq (seq (ap i yObuYBiYPvJzfsEwkKgFkmATHmNENuFCTLTBmwffUgiXgZYcmjeWFwIpiRLAiYgCvpZQszkqOofcLmSEgoSeNkFJDcbKwqHks) (seq (seq (ap i IbZYnMSw) (seq (seq (ap i ELQgoOiob) (seq (null) (null))) (seq (ap i yZclBHAZZnJjrmkVYxoVdfwkRQhexZzxifyIykXEjGoJkjWnEEIJRLyIIjRNfRKZijgwMPSzhZBKrAh) (seq (null) (null))))) (seq (ap i ixUgqcTgFmNEBpPTcNlebXFLxPGtgtIqnYJDmZRHtwSrvuzMfximBiatqZkidlaFQuJFEwKSdZTPN) (seq (seq (ap i QacXOVQJVHJqgKcEmxnttiiMoYsjyKCiqtiKOOICBftuedLciMOvvbdIzkStwIbHntftoVnWcvAm) (seq (null) (null))) (seq (ap i zvOiyWAUVlKjvGbPVkEYrSXeDCKjGxBgQwarkuQEGEYCLVjJfzUNdjTPv) (seq (null) (seq (ap i EaSMlBxmliHvaumlFOFoeCim) (seq (null) (null))))))))) (seq (ap i cnBAWQSsEVigryMaCJCzo) (seq (seq (ap i rzxhKCOT) (seq (seq (ap i FRAynCRpMSUWBdnhWHBbEmEcPhkxSLSjUAEriwJtYymaJRgWwlCXxoYjLFUheNuaOPaspLoWKORuziHOivrBOALGutjNpBc) (seq (null) (null))) (seq (ap i OwVZKuajkiaragDwjZeRlXGCykQnQiGrjzAKbiTepXDSjfdPzTBYmllumSDURRcuZkLlWSHuZChnYRzGpWtJNNYOWVjmevkRHPKL) (seq (null) (seq (ap i voBPnLsvNdOsfHgUJpRZlYfDxDPqbuFEpZtEQLIVTGKhvoEiJYYjcbEiroeAwJCJMIfiE) (seq (null) (null))))))) (seq (ap i itqqegbfTxYukUVdpUgYoyjTRnRQTxvleIgMxeWhFIzWmgRLNmOuBvsTgvHROyP) (seq (seq (ap i UuPjhSgMlbmLFeEhHLRLDbBYpcUkhaCAYwdXZusDcvyvYxScdQmSEFKWIiAESRcdRWTSPMLmukqOTO) (seq (null) (null))) (seq (ap i uzoPCKbaDXxVqW) (seq (null) (seq (ap i JybSjdBFlaxRjwWJajGXAKwRusVEJFPzGZaZIRywgruOesVUBNnVIrMVCaByhTITnbvQcXWLkHJMutzjItWLDaOOHqyZojF) (seq (null) (null))))))))))) (seq (ap i LUVAWqnCXSeiAxkKlLGGzWZEFxHIdmaBQNZzHJmRHnKHcnUxcSPSAFdhhVWbhOTVqTQnqkmIUipcUHYDqjnXmkZYnbsdCDXiBx) (seq (seq (ap i kJqNIBbHxvOgSnxkeKNXqzbV) (seq (seq (ap i CWlzCyfgykkSpvunQGdMbHNDS) (seq (seq (ap i blfzSjlYwbJf) (seq (null) (null))) (seq (ap i oHvmNtLRFlUkUeITtswukrKuDqUNYjQwpTqRwBuQkehGZJgPIeZKahSTljQcdibX) (seq (null) (seq (ap i CnRQoJiGgKxfOAAfQVkOBsxYWivpjenGmUyUHXjZxaLuPITcfBzLODtIs) (seq (null) (null))))))) (seq (ap i EDqPwqovYusZAYHQ) (seq (seq (ap i xuNYNlojyhNqihknwaAZGiWwaoXtaYYcnIqKGnWfOvftZRcpudgvOaktIMZXNjoPHsNtPePWdpvjuueSwGTVTa) (seq (null) (null))) (seq (ap i WFzsmLWZOAaqqEVUEaVGfzPPGRJaJSmvoTPYBfRbozFKtsIMzRuVsAb) (seq (null) (seq (ap i DSPfAfaeSqAEgdNGuwuWvINSJwnkdJxZGTGHUqCpkOtmmqEZUTLhCrZLBRaRtAEFCZEixoDvxSoDZmTyKc) (seq (null) (null))))))))) (seq (ap i WjqRNGdABOuQoLALnNJnmPoAgJTDCwWhNnINjVQPezCTBjGjXPnhwJgCGRqlGCfwfDyIOucyfyC) (seq (seq (ap i wKkCUTabWJBQYyegbMnsNIEDlDNgUDTACgqFLPOHZRGoRsZjgl) (seq (seq (ap i mzOoqHdagOXSnWKAUARYrcqqbzKtw) (seq (null) (null))) (seq (ap i fS) (seq (null) (seq (ap i xRGdeyOHHhanJdLtYVWSWKifXdZAKeEjgJRceAUhJGfyrUU) (seq (null) (null))))))) (seq (ap i vzRXvQBWECDFuBRCTZrOElhNDarKuOnUYeEOnMXaLxyBa) (seq (seq (ap i NhAPLyZOiSRXrfIWEOfsGpHicaMoSWsjQAXVToinGGeplGdeeOAczdEcE) (seq (null) (null))) (seq (ap i nAdkmmxCjlgDOvOQLtdhSUVjrREpfRMvMNHiJKlCTZlMudzaFIxKGZxjTGccUDVFaSHjJDmOFJgVAxUB) (seq (null) (seq (ap i iHzgHUqUjtaxNtVglqudwieDQzMiOTXJKZjXMSrcrcGXsxyIazlagfbNTUdEPrLQDVtgirfxhKv) (seq (null) (null))))))))))))))))) (seq (ap i WfbtvPZWlVddjvnmUSxpyqKqiiWiGdvgwqvTADSNcMYDqbRFNTQvdlnJQOEczOGEWS) (seq (seq (ap i PtjSSYyPrQ) (seq (seq (ap i jQvAlAtNoCCTeLLGPvGSrfbLSqlzFedtQvdBCyrtAgHBlfnhMaJpCZ) (seq (seq (ap i evujiXqffPdkiVrgPGGrfHALcQmdbfoqbLXFhCfAwLEhrLI) (seq (seq (ap i aeGHpHQUGxsVJfRHIfGKWsuGShAxixfOOBhLKvphTHMqEznjgqZkCM) (seq (seq (ap i LUAtfgbFyafuabzbfRqzoGDJGmP) (seq (seq (ap i LPuDCmXYZWCssClhWGHzNkJzaoUbCfOIgJWPmZHQUoPujxBkANFGQFkNWnVCJMJEUvENEenYCtrnTcPmFQuPbSfXW) (seq (null) (null))) (seq (ap i XLKoiySpDAICsWShoZKReXUaOnTeNhvbWOZXaJANtgpmijIJEuJVhdgHrHidMzAuHNdSVWDRRzuwvgkfKZIE) (seq (null) (null))))) (seq (ap i qnzPxAfDVGTlfPKnRXXqcly) (seq (seq (ap i azHVRvVYuupIiWnqyqjHkeZUpeEmNjExEFmtFqxUfVtditECnkSHfQELcxQNilgvQmVbqXDLzrVRoQoPTgaGfk) (seq (null) (null))) (seq (ap i ayDcFafPaYWrxpomGrYniEofoIIXiYYmDGKMooqAhlAiHcaddZ) (seq (null) (seq (ap i EIMpBedcoVEzVZwPZsWPPwAClnyIuerVIY) (seq (null) (null))))))))) (seq (ap i bbOZqVdFikHgajbyCOqXkRlgNVfLDrxaWqccykiWUusxITtnUtrxlziXCKPGNkCbNibuZZC) (seq (seq (ap i UdSXpRjNSOSzWDDxxREjJWfqFkwudCTPUBCbmKozieMRgSFyVdpBIqtmGyTDoozSuKdSXtIpVQZYZiISqpkFIS) (seq (seq (ap i BoYjGdpyVKvzATvbNaQjkkPxkJtJDbFKllmC) (seq (null) (null))) (seq (ap i UBdODycGARrqxnaaSdlVQCKdwfwtgLLWosjzxsVQHIfEGacBMiAlLqjyBSGYCrWfWYzKuuOOofXWxfehubvxiHTFV) (seq (null) (seq (ap i zYkyYBEMFWrCJbKsfhJLVDAjbbgOoIJlfnDjrZRQbbBhYJvJWbxQqMEy) (seq (null) (null))))))) (seq (ap i JlKMvcKSACWtWujfkATvhPzWLQyFHgOnpfiRcEavUvKLRRSPbQTAlmEzebcunUlCIZrAjdSkZEEXKahXxALPImKak) (seq (seq (ap i tXsshvlkIqWJUtDmXaOShxhMNsCTPEubAunSGVJRXVUTGePGAECmdtHqrxkiWBtkyZysMTBoKqkVWGChBnRtvhTOE) (seq (null) (null))) (seq (ap i tUWEfGWLcrVBspEvQuYhpiDHksvpNnEvBWpIEukCuaKizhQmphXUYiVqKdZntWDMZkSQxszFVRXpFgDcgTRD) (seq (null) (seq (ap i ZwiNArwQFSxbntGHuFsIhOtfNIUsQfzSQfUOxPjYQJbvpSNHIdieMAWssiyfPnALaSPdMAksruDwqKiSRZZQXWM) (seq (null) (null))))))))))) (seq (ap i BKuyMmONIgSjgciEIsfkoHxfByWRRQjYYwBybLJuqQZmHEICdAHkhfGPyjKZXFeRm) (seq (seq (ap i eBuIqFQWZWAnelwyeVgfanYVmwzyOvrdvRoYVXeZlSmq) (seq (seq (ap i VQfeGFLLGK) (seq (seq (ap i aCEbVsuWSBHDfxKXBGfCgQKmpLYglUbhX) (seq (null) (null))) (seq (ap i LMorRvDqgHwmCISFTuzggTYmObicXweGqfbPZJcHAwbClpupsuhGhjrfWKygysZhjIr) (seq (null) (seq (ap i AXSZFifTJAAJoJfiTfZggHyRZftpVFDpjSdqFD) (seq (null) (null))))))) (seq (ap i tdqCbMzENorOlyiKKFXHCIbVMWoQOGAu) (seq (seq (ap i CnwaZEYIfnfWzrdkgckveGjuSevpvLd) (seq (null) (null))) (seq (ap i fviyayCZXtzpcGUpSFJovGIQHWK) (seq (null) (seq (ap i IJeBPUcPerZOdInYEgSUXqdScPMMxVdTIfOfaEhGFLArkkCKcEOmwUIGzJdjLAcSGALcldLceOyMOiMZrOSTXtCw) (seq (null) (null))))))))) (seq (ap i PsTkfBomCiZyMLIAjBvrYVzKmoVyBokWMArkzspQmPepxB) (seq (seq (ap i oPATLCMwYzvrxOJHXAtjqDeJ) (seq (seq (ap i pmlXmpdKkgFAXPnsDiKZalXZPWBgFRJowgISwLtwd) (seq (null) (null))) (seq (ap i oUObLCxSzwEyWmNobLbKdMhmwTlrnlhEJIxjBNMxzyIPjFLoukNUxpjQTwCsWdwadHiGmskMScymLbAwssx) (seq (null) (seq (ap i fIjerNYfwyroAnwGCXXskmWPOTZJKvRzvGgFqtIDwvdVOlGAXFPgULvLZYPSSxnoJTgl) (seq (null) (null))))))) (seq (ap i jIvFLjPwCemjwEyWQnfTcIPrabodnewEUwlMzZZhvl) (seq (seq (ap i lRccNFyPWZbutpAazwyALVtwcpTCCTZZncByOAhMuCkAeD) (seq (null) (null))) (seq (ap i DrsYWJTTcHeArMRdoyGPXteifwFkDFdaubXexTVNZEOgLrZJrolBRvKnqOofWpEvqmQEbhOH) (seq (null) (seq (ap i BmaLIxvFWff) (seq (null) (null))))))))))))) (seq (ap i srcuNIcjmzbZTbSRKyvCYxuwvsbvDwNtplm) (seq (seq (ap i nAbxyrfgZJzgurxGgzEIoQVfFC) (seq (seq (ap i AjhFRURBHVJpqcUUEubh) (seq (seq (ap i QrcPzUvpgayzVCfQjaqGnbpcJUKrxgyxRPxdRdrEEbUAcPqBdVjTmuouZgfbMmBmNReMHlrdxzVSjuXFNjQuKPm) (seq (seq (ap i wlenctuqKFvMGEMxYDDXFStyzxyAiKqmBGnezomobAneCmIqYXiuUlpECUrGusDoQoSicybZc) (seq (null) (null))) (seq (ap i DrVkyPKeyhjHbW) (seq (null) (null))))) (seq (ap i uzEHfJVzSniMEZhrLNtiJmvAicmVQOKmxOuGIvMRpOenwiIzAhXLZfoJeIymJKBcTomEilWOeXuHb) (seq (seq (ap i TGnDwPqljvgoqAnAJYOYDOndKhLEKfypCyNLquccRYVvdtNgmScStZ) (seq (null) (null))) (seq (ap i MLzVrjFwpAwmCxbrJfJBRXfVFtFPRrbHBIBXdjIHgUTNluD) (seq (null) (seq (ap i LOhjxTrGjmWAEvpzLsyeizRfxsOkEVclAmbiXKJNEgFUNlpKalSbTAmlmvfFecKYCjRKMdODsSmZXdZUj) (seq (null) (null))))))))) (seq (ap i StnAfjgyFHhWatFJOtCjQtQmowFzwOHoBHmlr) (seq (seq (ap i hJXKBLXFGDpsnRFPDvurAWPRvMwQxxWfoLXlmNwaWXmzMEDoOUimhaqSumzWiDWneCPbaibaXspdjWywbJysKhMWfLVOxECK) (seq (seq (ap i YBRNwavUyBe) (seq (null) (null))) (seq (ap i hOCwhNbKhUErkUrPOLTWGlfJWYtwYAphMfvjOIIhnVNWfLqQtZmzxJbzSUdpwSZNMqPcNlReFBYGPUpVJZg) (seq (null) (seq (ap i lntyQDzjAbneZisadkVPkkRXNbMxKjoIIELs) (seq (null) (null))))))) (seq (ap i LsTEttbrgboTcNPkivWqldYesiHvWMiITtaVZlqXwgoznVCjmWk) (seq (seq (ap i bHHusuxaASCEQbnENpxnRiKsrkRinolALelNmYOnGOTAzeaCIavuQzycXTXjkxMEJyUECDiIvkZemZxNgm) (seq (null) (null))) (seq (ap i dPEJzxDKEnrktdrJtHdtIKivqixdRHlVUQrENYtpRBFlEXszXKlhoqsB) (seq (null) (seq (ap i GbIm) (seq (null) (null))))))))))) (seq (ap i no) (seq (seq (ap i bvvpTtJGrjHGmZIlBfXZOSpIygDhSCUbAumdyYRtNyIRptghxf) (seq (seq (ap i rSGsVMNNTYEJzizojSdGIfMhshkJpqDwhZfwFkujh) (seq (seq (ap i JjJuJkjXLAvcqrbecTEuRsUEyNqEPKXrmEYGfLELYBbmjDIUDQVeOuarnVgBAApiCuYLtdAMBZIAddTYkdjJkpFqQTxsTmSzvAvW) (seq (null) (null))) (seq (ap i ofzzRIYgRIwjUDDpysjAnxuYyUSvQHpawPLLpBJGKVEkFSkyhcHEzlcJWXElsghPwqwPjkpOudn) (seq (null) (seq (ap i OpwnMIyOqbNGwkebCwlWVnHaNDTUrJMMuPxdektIDQxi) (seq (null) (null))))))) (seq (ap i IEQhbfpCjiCDJVbaidGjjIyBgxsjxUNfzjfatXiOIgFvXtSAqUlitmQIOUyZjUUCuucrtxqRHsFmrEspF) (seq (seq (ap i kiBh) (seq (null) (null))) (seq (ap i aTNYauAgTqPAEfgFnbONmyjmAJuIsuImaeCJROLeIbPhhuOxtDHwZIFH) (seq (null) (seq (ap i pbsjZXnOhMuvAeyQSBfXXagDBFKnJoJUZXkZidCtaRkYSpaBwZhgLpyMgDRWSa) (seq (null) (null))))))))) (seq (ap i gXfdfZfuoNkHdCGzcvjzazZzs) (seq (seq (ap i VBltwIbnmHpFQpUcWySnxfAXUifoLAyFeKDZRZehobsuVFExAPZKrReMbkcERrOKDzziqN) (seq (seq (ap i XrDsoWnnVELGeuNIXhDrwvenTEZpwcEwWWeyRNdViJwdOEkhwZRlDQGFHiQijVMflliEENnUSCKjZvhvDPwIz) (seq (null) (null))) (seq (ap i ztgANYehHEjDaLWcjnTxuCURnbRnCXCNKOJZKtCVRxbKfUKwYCqYkMJEfjeAouXzxkyavoBypoSujIrNalxBWqBokKbgk) (seq (null) (seq (ap i SoBQGLjUPHJkv) (seq (null) (null))))))) (seq (ap i FTqlgjPzJbivZaxYjIQNrRLwCFwafZNiCGuFEnIKIr) (seq (seq (ap i oRTkiyADYfbARDOlWcpHCTBthaqZTQGOKcBnMXSNgEZrrezdOsQWnjbiNrCTSbqCAHiFIET) (seq (null) (null))) (seq (ap i OHcaOzRkkRgLiRPOTMnTCNyBwKybFewbcNvP) (seq (null) (seq (ap i SZrstPpjawIrHVrAtBXIVnNy) (seq (null) (null))))))))))))))) (seq (ap i APUSyyImFJhJGCkhajFGGdKormcumvZIqUkMjcgynmZnnYRPcmnGWGgEpBCmTpCYmxMvNWWzaiZoCAscQSxxdp) (seq (seq (ap i bvtVyDytNdZdraZOQISVcDbVSrOskaWRcyjdidhUDHToghqTaIXVzxKGDEFoXeIhQUJZABHALTEyiBdWlJZYiXyDkwgCooRFp) (seq (seq (ap i NSPKdHPVPYQaWfOdaqahvAVmKjFnqTuKEXmMikurDjTXTWEpwapjxiRfDgXGxhSxKorB) (seq (seq (ap i GtWRRigmkOgdjrcqhQCvvyDqrE) (seq (seq (ap i yKSRupMVvGwNeYEHAlXYHcPpKDOywzRlPXqskUGqStcjzzIKDBUrhQVRTOYWYleKdYkwNRduaZBHNHqEp) (seq (seq (ap i jMAhwXcxNFGEazDpSQyaynSJWjvYaGjpaJevdeSMwCrADfbO) (seq (null) (null))) (seq (ap i ASUbBCgbbGFbTyaleQqJkyOxWCdCtBaGGiwAsUSclxZBIaMusnDeHTfIqRCeVgkhXTrWuKqWnQOu) (seq (null) (null))))) (seq (ap i pMaMSFIJVVWNQvJrkcCHDNOgYgBZOzBAyCfLItOufdaMlEDtrBTvqpVBszqHyrbIRiWDB) (seq (seq (ap i COtlzpsBYyxrCMUpYwLRNJGdItpjlKagzWj) (seq (null) (null))) (seq (ap i duKwCKEGVRCmxydPIHNSGZvAarlpnHMzFJDDOlQkJOfoHsNGdHepNxkjmUYOdbOVbqDovCvwsCcyrhRD) (seq (null) (seq (ap i tUEEQtHYumDdEBypn) (seq (null) (null))))))))) (seq (ap i liMvSOmARs) (seq (seq (ap i pPrgCHKBiLfqFDvIvkgJvrzXbxVHHpUfAXtSLKsPbkZKMguuMgxLzNSHAcoPaeRid) (seq (seq (ap i KAMooGLLKLMngwDChYVZhCxgiKZmwggMWIbeXqlkNUdSbkGvvROBueVAjtykxJc) (seq (null) (null))) (seq (ap i IakksJGYEbHnYIVRcVLAewXqkfCgVTsOiLdfdKqxhCQjqBLQrGpiOxbqwDxMwdtNilqBl) (seq (null) (seq (ap i APUlGAlwTnSQlPJXnSuiqkUnCjiVPreozOymoQoSTkCJRGIXbmwgkwOXYUItcXrgXJHbR) (seq (null) (null))))))) (seq (ap i iDxAZsinZoMhmUEdJldXumjDnqiamROqMvvcBcnzBLBszCsAKHVWOQykBhEuVmOKmbHcPmmuIxJmGISmDZShvlKAhHbbaMLTS) (seq (seq (ap i YQshNidmhfkQyShJZnQKuwiTofVvDMEFpcPzurfFpuZRIMawKpdgreljvmrfztLDVqIWhhnnbfwbVRndUCwuCvhF) (seq (null) (null))) (seq (ap i DJDM) (seq (null) (seq (ap i YVQmGgbNNXnCCsXPJBLbpzWznuVQufePLCBlNZyWBjxGLXvGdWeFoHrXhdgBmbAEEp) (seq (null) (null))))))))))) (seq (ap i ZzmMugJEdYaBLERjiMzIKnfzqFBadbFlGgCvlobPHMNUXOFmTMEpioeNmOScgOpVdAQHrLsiRMicrRUubDiNpdevzOdIkgqUT) (seq (seq (ap i GytpCUchVBgLY) (seq (seq (ap i FWMJiolRzDyDPnpMTFtUeWJIVyGHaEpFsqkHpysEwDYoGooajwqzKbgUVPcneXhvErWwUMFGQIqyDLVELgFtBFuoBXA) (seq (seq (ap i LYZENtYwVJha) (seq (null) (null))) (seq (ap i GUixQivUHuYfrIfDVRQtTaeHylfJNSkoQOByxJPaQYlRMsdpGPnbZLWAQcaocDfkEDCYPVESlxvpoYYGeP) (seq (null) (seq (ap i knxWXjkDXnjwgkdFQFkpdOczpeaaOLoNxRSLNZzHmhUIPGvYBDDCJZWQDFghEFtvpzCHRdarYvYfIZsBUzJhbMyuGk) (seq (null) (null))))))) (seq (ap i coOARaRqTwwSABuBEdmlTpvXZZRRkjnYViktXJDJUKRnfgzv) (seq (seq (ap i GGyhZzYTXOLgSGysbqruAUwldQib) (seq (null) (null))) (seq (ap i Onnwjq) (seq (null) (seq (ap i EMEfNQWvDBepkqSuVeXxDUSOGUGfzlXJtELImogNQsPbEXgrduXgpgWnPPVPZMpRaI) (seq (null) (null))))))))) (seq (ap i POGPijRyCkNHqJLNWFWmmUjva) (seq (seq (ap i uVlKNjNSyoCkdFwOizQiUFModJzSicBoRNbkZrrSAfoXTwBcFPepUzErVOWvcLFTNQTnoPlAxDDVKVcJpJUeNjZkm) (seq (seq (ap i gCGQKvNVBbwFbHybGGpqWZhEuqzmgrDsHQCERtaVdvjbZwXWBUUNNzLDSQoJXSCQHlNEypMbbumrMcUtCUytVQRmcqtkhHtvjB) (seq (null) (null))) (seq (ap i cSUSatsNkPzkZNWmtnElhNNdqreEflzkEHJUzKHRtLKSnJ) (seq (null) (seq (ap i yOTDtureVWkVLbsInNwLhAZZstKObJLqoYywIokPGRpcDQZjjuWCJfQLDLYBaiy) (seq (null) (null))))))) (seq (ap i MYUnMWIbavvGdvyUEDZKlFYvtQYnUDfpJENGHUffcWZfciveQvpEcICFF) (seq (seq (ap i YzyueAOcgHItFrDFmZyEnjofWZdfClwsILpeKCAcTwxrKVCTzp) (seq (null) (null))) (seq (ap i VuIUhvZuPaaMjyiFdtbsfTjrdZhzbGavuHAWNbnpHgQykRPKGabJpkEAAA) (seq (null) (seq (ap i crSIGVXuMPdRwTcQhOLjJHxRJueGBwZzmmkyGfTxPEOcavEXhQhrKvDGtPQJIxXTWgPGMYONGslboevUgvKDfOFTgzav) (seq (null) (null))))))))))))) (seq (ap i uAYZyTOkVJwBvRxZnlMBGUbTwZpAwMalSUPlaVijCAzcKFd) (seq (seq (ap i ylQNSmMiNopiBnUiIRRFpRTOkghRbYMsnXekINYADLrRsCTlBAiunoGSgGzcyKymrLVpMv) (seq (seq (ap i oPIpfiMFXKQVoWHwACqyYxcbMoQfvjcyvKIDBrqyKUqnOdFqLpFmCRrDykxNHyEZIwhEFeeFIWzYMPXNoCZIIHRsA) (seq (seq (ap i GAQLuCpRrWWlqAOCEPKcOmjQAZKsUjVGsKrKwjIvUJZspqFkiFMaIdZnVjfqwhxVlAVYbz) (seq (seq (ap i aocGyubJCqZSHfET) (seq (null) (null))) (seq (ap i ggWNIEnWEhnPDNKHmRUORejDawjKuFM) (seq (null) (seq (ap i yvbgfVExKEvrOKhyZKhhbdXoKbBk) (seq (null) (null))))))) (seq (ap i rrSoowLTqXnXtPGbrgLfpGrQVFdrUMlPpFVZPaBwYhflf) (seq (seq (ap i bkUltmDOAEtGyahUaNZhOdqoSvEHexLqfsqUhissGYA) (seq (null) (null))) (seq (ap i mOiiRLIgKQfWEVmwpxLBhjkZToFcESpacoIiEpHqnSjifgApwupmSioASlaZdxwVMpVkopeSZdHnoGQYqMzLEUtaaUOLw) (seq (null) (seq (ap i KFVxNRakdwnuBEjRZQeeiPKOQhVLhuFbZudbmSsyodmqAS) (seq (null) (null))))))))) (seq (ap i AKSTQXzsdcgyKlTWjPGTWRzbMEmtakBKldpVauveZtHrPAlJCLijFHa) (seq (seq (ap i izVhA) (seq (seq (ap i ZZSDVyBuMhR) (seq (null) (null))) (seq (ap i uJlEGYnIYquVqWCgt) (seq (null) (seq (ap i RfKUUvzMOyIYVCXieCGUlPNxinwbWSvcxgSqMqKYsJrOAvSNzWgYQyaWRrqoWwK) (seq (null) (null))))))) (seq (ap i ZiHJe) (seq (seq (ap i VodusLakvtYIlSminwSzpLklz) (seq (null) (null))) (seq (ap i VoCFkHJYfrqhgSRpl) (seq (null) (seq (ap i iAbhIcSbtKwfRTVzfwziCRSMYHYlNXzjOBrrlOKYpqfKvpM) (seq (null) (null))))))))))) (seq (ap i dTeYv) (seq (seq (ap i bPgZhNVhJlf) (seq (seq (ap i QCEmOEiplTiRTB) (seq (seq (ap i zorCOUiZvzjGKUfvudUqonDYPakDBTQgFkMEqzTBUkkVjJVMBSupGUUmPCfcsImFiGuxAfCjYmYUmyuMwGQHcDY) (seq (null) (null))) (seq (ap i uiucBHtCztyVjLmSDCNZyPFgtpFwGcFZuMfEpboWnlGhcQKNropEQ) (seq (null) (seq (ap i FMCOxnocmpoohKZtZkqWYFEcNJTPILWyXWProplIFZzvoEIZphfCzQQloEZtZagcoeOWewlSgoaqPTUxwGVMWFIdb) (seq (null) (null))))))) (seq (ap i DhQqefixmceRyzndGZLfxkDxSBfsshFVYwBigHSZQJmKiLhyQyAEQdMHDthaU) (seq (seq (ap i OwvBnRMqqcFn) (seq (null) (null))) (seq (ap i ZeUudvYtSuATvFeAFQVwIRxFnSMzLPyGcjLLWjxaVxmJhxXrNRCUNj) (seq (null) (seq (ap i hweKLNfNNDGuMTqroJGIDrzFoEQRPcHWlMlmIbeYqRQBLjtmyDauOeYlahpBTnuc) (seq (null) (null))))))))) (seq (ap i TgWPqkxEVfBdjKvUEhGNWPfpEAZkydUyTXsIqkKEnX) (seq (seq (ap i vLdbSPdyRrZcEoqkAHhLWUiZWOGkpQOihlpLJzghWltCKHojrOurOczYBumh) (seq (seq (ap i PIvjYjIIsQFDFqHEeaUWSnFdofGPFHyEbWvlJTNNymTcrAZOSJFvBCWvYcXXBqIxx) (seq (null) (null))) (seq (ap i QkctBrXcXlZ) (seq (null) (seq (ap i bheXDYXVdNJzuWwUqthLCSbZfjhvNLdQHhWyZGMKOsGIbOXytealWfZhqw) (seq (null) (null))))))) (seq (ap i qsJDuGyRirfZjmXKvbEoKDQRnbcshIhWzSouciAcBwHVEdNddgzIGIVOduuQxqAZWr) (seq (seq (ap i fKabjmekfxIULSwAICJLFuJiifaTJJaXKabtXUsUluZZ) (seq (null) (null))) (seq (ap i geUpAmPlAqZQxRkmryomqeNIyzjoDoRlSLRekBNnqlgqUZ) (seq (null) (seq (ap i nOnkCSqOTZsydwrcnATrjjdoFRmCqlwjbmVzHYESgifENHjgQeKBaHBsQFgqrzBASfzuIAzYqKktLzalG) (seq (null) (null))))))))))))))))))))))))) (seq (ap i xOwgcKriXnDTkQfydLExNfgFAIrCgbxeMocIJdTWFxUjzbAQDaNsSvqoGmgpNfyTxFibzNyjgGRGaTqUPtWKFrhdJEMYsDLweRg) (seq (seq (ap i UjYCOPRgqTKZBpFDgfYJpyIxjoXIvpMGpIuofwCljuSsXpntSUcwhbvaBKiVscPK) (seq (seq (ap i LnWEYainqWLFmPvJclXJ) (seq (seq (ap i xmIlxXEkmuVYvgnMpRZsyTghAskGsxl) (seq (seq (ap i OfepTMHpahyreJeEPBNcyblBaRqxdq) (seq (seq (ap i MwNOZepwUIWdLNaBGqdqFMgLsmQNUTjZhdqrJsfhbhcODaowSKrSpkHRNzDHvYwkEibcpFZnXOSXfFbXBrUeJalzzPF) (seq (seq (ap i wuawGLplnELZpcIXfOrlveEGnpYGlOZFxeUSlDg) (seq (seq (ap i PgzLvyDaXRBxuHLo) (seq (seq (ap i OlJiSWOMFYXxhjjllZRtAvBtEywckM) (seq (seq (ap i eHUWuUUqCyDYEPbqFyfRrZZpTWON) (seq (seq (ap i UC) (seq (null) (null))) (seq (ap i RUDKdzkIHMqzTYLlOPQaHaVywUyVUGSVztVwjuvXubmAEeMsUsAJVoesHaCHxdmY) (seq (null) (null))))) (seq (ap i gqPYqLGAkUxOLbFMsZqsCDyTfDaEZCuu) (seq (seq (ap i tBrOAtjexcILsJMoQMoJYMUtolTenaelKMDRxPKkEIfYZweGHDRBUTnckUdwdXqgkCyuKPYV) (seq (null) (null))) (seq (ap i CqsnFlKVEBrMOUpcymVNDtabuwIXKJpErujHOoazClcOcrAuGPyIJCOZMPSvPOACtJUnbzYezI) (seq (null) (seq (ap i BmgzVUVjyIDRrOAtBHujBQlmGRuyngv) (seq (null) (null))))))))) (seq (ap i oZfNRxTheaFQBqXQXWkcCypBGdyITcjwlyKlmRmJlRzinQeWsAmEcaWuW) (seq (seq (ap i fuYqchJsHDQMYzSWPpqEyjFXeqfbyARfUTRe) (seq (seq (ap i xjSgzhhUNXrlqgIdFsSfRtLDvIXqcvsHPdWqCCjiqVWsSRVfwWDQbOBhObkiqdwSTSpVoIrYmE) (seq (null) (null))) (seq (ap i LaDYnNeGRGGjmqAjlHNGpLOrmrhUkuantjpquoQQwmHIcoHhlxGoXYsqIRMABnsiofZyHmB) (seq (null) (seq (ap i xpvAOMVHcLhwHTvQyZtjVMxzgweenZWnMgxnndYAoAIVmayfE) (seq (null) (null))))))) (seq (ap i HG) (seq (seq (ap i LYNXXiLethjQRpzbVyuTITmlLRyTvlhZWEAERnJRyKHFnEqkWXQFPcmXLEHHApxjXELCMLRSEfYVTBk) (seq (null) (null))) (seq (ap i oX) (seq (null) (seq (ap i qRVAHhgLPjqrAyJgjfboeZHzORmgBpcUczrwdtasFhNMupSYDblpmnPgZgzAgIfQXALAapPfQgfGZqhE) (seq (null) (null))))))))))) (seq (ap i tXjjofdPNdDtknXsDZfLnKpzGSrgylmLkfPczyaveDjEfZi) (seq (seq (ap i qILXDXKkNvcbkqFJRqqzoCXjduUEdJoQwQbWlpQxvOPMTzEJNTKndBTVJaHozKGdpSfDfUOJbXjdhzbZzNb) (seq (seq (ap i GMAqksFDmdYakhYzkkAlR) (seq (seq (ap i SoibKFypoXbyUMIGZSrOiMSTFxRVERkRPXdSZspLopnjGxIFUALOFwZAEsymPbUBNXieOZTmjLSWmDPLhvNNloiFKyUXjutPZLe) (seq (null) (null))) (seq (ap i tydUzWybPybjfAfpDuJwjwyvCsbpRpMOhGzezqsieecpuOAwhBsBxOQNgOml) (seq (null) (seq (ap i bYvdw) (seq (null) (null))))))) (seq (ap i XKuNHg) (seq (seq (ap i tqJsFPHNJyNihHJRGFqXJoQKloREScav) (seq (null) (null))) (seq (ap i IfNPCYtKwzskWGyKeFdDVnsywhUKmsaYAmRRWLtlfOSjlNggMxea) (seq (null) (seq (ap i ShAmSnBIslNewiPjEPxpQsISEpQiVMDfIiTpLJbSusWowRwmgoaGflxeRJsNAceDaLIETRZTw) (seq (null) (null))))))))) (seq (ap i xlMLVoatBYstutvshWtvrrbuilMezqa) (seq (seq (ap i BVvrIuTQsMnR) (seq (seq (ap i tViEjLnXZsQlVsaCRiBBzcDqHGQpJquXxFjMk) (seq (null) (null))) (seq (ap i fDdYNKtGMSvUfMWwIHQrwLYcmlnIGKCzemGANQEsPa) (seq (null) (seq (ap i IUEbfvXSyPTCxREDDRenPfJQwanzxpzhmNqztZKiWufKqcuNpaXBaIpFrQKGjfIMJxvZPovdatQxYGLjNRXKFZpudasrZIn) (seq (null) (null))))))) (seq (ap i QIKgWFAdAiZgKdLipbjzpzJoPkEZdXfLgFtCIrBrvadUhfNQUwwBwVMoVZfOAUgiYkKPWlJWoZcTq) (seq (seq (ap i LygPwrtNGPmDCiCNecUTGObzAZKdCqhdQvUCeTWiVdL) (seq (null) (null))) (seq (ap i fFdrAdnSCmosyMdsRTaYhYbeoBlXhp) (seq (null) (seq (ap i uKxjubCuTyWKQdKBZTJfIYrnANwxnbpynsKAxnJXxRdrZkPTBZcjWaPCYljETkrlfATJgDd) (seq (null) (null))))))))))))) (seq (ap i PQQoUQawfauthnbdRgPbvGWAmcXMmebZmuHYESbSTKOlAbRNuUEI) (seq (seq (ap i dDDoTRPlibsyFoRgEoQXtbYJupnThaXohmIOQRerAeQBghfCCuUVOHgPceXehQVHeyKHPdeYLjWgUAaMTkwKIXhWBmOqeGmVodni) (seq (seq (ap i feJmzUTtFDQYkbFcKc) (seq (seq (ap i vxtoFvTOrJhcHTEpeHCRVLrluMzwBMPtSXjYbkhrvZTvyWrcIZgGDqXpmavqFKVYmFTLXCCvXcZUeUuvRZs) (seq (seq (ap i qynkEWsXpCCenhJROEZyLGOSPYzJYJvkbwgsZbJxNKHcvlKluRTLcZjxoloqovgFoUvw) (seq (null) (null))) (seq (ap i BUisRubKgbzImwmEswsoMevsSNwpxylaqWKknDoVpKhJhqYvFoQXmeKcUkdXVrafFUZTjsmsslxhHDuCuPfFEBOtQIplacJ) (seq (null) (null))))) (seq (ap i AxdtsUXkjNXqRnODRfLZHmUKQAJODAWNngYTLDpOTZZctulBBOIGrXLXndYUqRogCkwOPpxMtizhZKFcJDFaAnEYI) (seq (seq (ap i mukfzgRZgwDAXMpmKtzmlZgrskGfUmDZGoRadnyLBbQqbXcFiFJqFFNoQLARlXarKiTJQzqcjPTVDEGrqwZaCHFnSDT) (seq (null) (null))) (seq (ap i ZGHvFMxTkaNeiEjpMJFPJNNlVkxQbNkvaSzitMPJxMOXxQyZDQOAi) (seq (null) (seq (ap i dTmebhYtFgHVNSIAyCyxMEWSNUZJbtoRTpTyEomlOPQMTjdHJriLCv) (seq (null) (null))))))))) (seq (ap i LKezuqeHVeULiScLmGNxqkjzNvqrJuJhGUBoHvidXasngSeMYBWsrHjKAdWii) (seq (seq (ap i bGFTFnbvWenyksNtbjCDAtjLIDGdgEepUshwlNauVciRuUT) (seq (seq (ap i xjcFDdQDYytDhRaFaEjZBWixvSDaKrHsKNLvLNkzYJqtSWzdcceDpcyuDlCSlGvmVDkHFRNvCvfNtCzr) (seq (null) (null))) (seq (ap i FKMfIiXlKgOFXPKRUMVjqflfqbBhLKNsNHfKUCAVAOc) (seq (null) (seq (ap i DFgvaHrdpAUvFNUdALLgNEhnoktKvWpvqHJKAvyC) (seq (null) (null))))))) (seq (ap i NgIASovGcCoUPedLfKlSSLJEFwkdNdjGjYWAGcKHFMgrQFCgPamrcoWVDc) (seq (seq (ap i otJzcXoJDnrXFfSCmnEtkRgEZVGkuWeMcIWXCIiNURet) (seq (null) (null))) (seq (ap i DAaYzVFXgpJeDHqmcAjulygoQYOZdWwKdnJUgcDfvkdOrSIeEMPE) (seq (null) (seq (ap i OVASmO) (seq (null) (null))))))))))) (seq (ap i CdsAdiuqmzanyAJiVllNDblbPAEuAbfpaslCPvCzaiYtbJXTLYjmCkxYiRdnbjVFgoQrdwfnUIsWvOcZNKuFgvOZkOfAJifpc) (seq (seq (ap i fEmEWPwkGPpaDfnGaxgHD) (seq (seq (ap i NsFCGUrKtL) (seq (seq (ap i VOyYZjfTLroDwyAevWjxucxaRNhhIefJumakkWmLWQuVusnJgAWwvIpZYcPtAKSjoUFCPRANrKNuWfaYVCeiq) (seq (null) (null))) (seq (ap i MnjLgpglmFjPjbtSCXfRLikpwSohxVCngqAdxBcwjumSrUReyvHyoIEzLmPeAJBlxcwEye) (seq (null) (seq (ap i NhHwTBwNBfEGdDTxVJbrwUBAmxhwmXBOJgIjMeuyxWfAiUkGbqUDyRtVSzvbAiLyROQMLutujnwyCSxFbPiMVxF) (seq (null) (null))))))) (seq (ap i rALsBCXQTonqtNMiyHNtPjYaExoBxSknATkEZvJiMrlxUCeCixfAWZSsuGDcIizRhRbvqGVtV) (seq (seq (ap i zByJcwDZlFnHNatskWXQtfbwSGIe) (seq (null) (null))) (seq (ap i vpEqDxkXXThvGMmy) (seq (null) (seq (ap i zYjWXpKsGZvVKOsyTcXAmpYujtGerERHxO) (seq (null) (null))))))))) (seq (ap i knzUwdMzqsByUlwzMeZaGXuKSQJErLsrTysHTbAAYelYnYnLhPAOSDdlwOcdFKMIDbImU) (seq (seq (ap i ErjEQeHeZOtBMHdoJNzSLXXnlUEJliTrLfqObTayBnYQfLzPjqBAkUDEyqMensbsJezTG) (seq (seq (ap i pJldwNdhpbQOzNzwtSDOcKskYujlELlfSJtQFfRwPMiWLIeShkFeGcaLTvTHRHDANCouHv) (seq (null) (null))) (seq (ap i rqkTIJBkmfVSBomXGVdqnarmxCfEmyjwCiUnzNWZK) (seq (null) (seq (ap i iCdWkYizSxXjqdMpjTqnpGJRiyESvRIDwFilBCSpgMzcFSWePtj) (seq (null) (null))))))) (seq (ap i ZMprwxADDZopKmWVypwOPcnRRbDuRvVUeSeKIFynkGTbHfkRhnBTmTPOiDzoyKLXGTQwrvoYHU) (seq (seq (ap i mZJasgReCFjDVkvADzQqwrjpqUyihkSsPEaiOtuplzSrGNLfVReGvYnRqvOsHOTjHjLSQvfWSgyNwjsWHMU) (seq (null) (null))) (seq (ap i qrUCwuWgZIPxAuvEoqaglpmwqmavEqlMmGnooCvvPCyxKUUEWmIafNiBqhPiRyMmzxpmGDZdzjDTkozKPyhhJaWuffGq) (seq (null) (seq (ap i eIqZaQCtZnfjrYMvNTsMAKJpQgjwHZtgcUNjV) (seq (null) (null))))))))))))))) (seq (ap i VSoLRcNJLqsrEvpkzdLTprF) (seq (seq (ap i BxVBvJbzMkrMcjygtckbdfhzBreQEektUMvEgrHJDOSVliSYPwxwlfOJRsinwuEOCABCbsEjHBXeFF) (seq (seq (ap i IqSEPIaCuNedBCllFTENnjxMjaAPbMlVukciXkeCmMnVYzdfjVMdLVJzADQshxUetFDj) (seq (seq (ap i MDnIqFArwUpzYmPfqyxNjroBctVpDosciuUtCDrrKglAREJwlXgNOLkoSWShBXpiFhCiQpBPYzpTiqfMJw) (seq (seq (ap i AlTENvwiEH) (seq (seq (ap i jsQbSUdFFIdMyvNqcJcFGSfwWQYUiaoTdQQTRBcltBrOvTEX) (seq (null) (null))) (seq (ap i lrPUuakgXTJYyGzqtQustrODxTlGtZenmuppOBsTaAWtCtzEWkXVsDjvwmkOMRcpagzDcQmrQVLDizprhmr) (seq (null) (null))))) (seq (ap i uQMFIMscdStUceHliWnhZWxGDTEw) (seq (seq (ap i RZyPVBXGalzRbZQvWnfbNqcmyMjcbSQvWyxIeZNSuzoVZKOuvWLQgdbYqXXrmRWpKOFVobalYKXKgHuPzkjTyBvBUCcPLyvIzeAQ) (seq (null) (null))) (seq (ap i cHcrEdptafyzAxyqDIrKlRKAuMtfaTPMyDgXtaVidbgkdJLiUD) (seq (null) (seq (ap i MeVTJCUYQjEylRhwuuYXqRAQCvXaOorJLdWezzAFBWzwshZDutGKrlVCpGFOYLVKqDoZxIvOFdJulQOpzQzUOmhxTuM) (seq (null) (null))))))))) (seq (ap i xGQIaDGGUmModdtCRhDVNyGedGEEYSxcFainvFYBtNgHcNqwUUxjNvaATuaLoGdKdlopDLHxGbHRfOJxKOMcKqlafNKuPyhyUbg) (seq (seq (ap i ZkMblsdUQGHrNQtyDljELTyMkDgaJXIlIAxNiBxmdHKZhCUWoBCqOPBTYhAlqAorqzKuvqzglEeS) (seq (seq (ap i NhIjPVqsoZZpsQwLvKCLHsDhEuFzCJMROZMtEjeEpKuwURHGVfRrnMBWvFWRyWvHPaooBwoPFvIQGsqonBGigtp) (seq (null) (null))) (seq (ap i MdPEtUVSTShBMbeoiJAGtaKWUjVWzaqvMoXCrfS) (seq (null) (seq (ap i oYYJjcqjaxGeJu) (seq (null) (null))))))) (seq (ap i JeALwXIXQJmiurqjUBniYMzYlguSCGGohVJyslhOcKPvVlCMipEWcYRPCtpkTqohyvhXkWJKtdgyQg) (seq (seq (ap i tWReMYgaoJxcUuFQEXhouUEQaM) (seq (null) (null))) (seq (ap i cpIvZxUPpCjWQcbXggieNZRjIlpCEkJIWcIwVTPVboLllikjOoT) (seq (null) (seq (ap i eLBiYiKAbAFqnRmdnyLdZwECUEtmeGZnifqquUBpUyiWHFzhSTPnHrDinCo) (seq (null) (null))))))))))) (seq (ap i zRWXxWQbTUydyySEjZBlngpRjTIpRmdAmncutMTPfszzXNI) (seq (seq (ap i gazvOBdoKOtmKTztzKtRdYyNnApJFpzzpCEWgZpgRjTasmOIfcmmooqjxqhrnvJBBGkQaaNiVNOwT) (seq (seq (ap i Ctwvwjkl) (seq (seq (ap i KwdudNWNLCmOWFHHFEatGslUWsdKmAxejErDl) (seq (null) (null))) (seq (ap i qogHyQRwfHWUHmiJVGpfHSeHzJgzJOQPMBXaczUvnqq) (seq (null) (seq (ap i wlNoLGdYIEPllHqdJcGbeZoGJTpYyODZkLvznqs) (seq (null) (null))))))) (seq (ap i KIbyeUDgbiSEcFuvrUbSW) (seq (seq (ap i cQeoqZtKRmTCMbPOCfIgxdsXztisNtEn) (seq (null) (null))) (seq (ap i cfgVStkrKhpdkrFAXhqoxHuDFJQr) (seq (null) (seq (ap i AMKxdGpdYNbFXWesazojfGDsATPMWyWElndnEaRtWrUsBXeRsYRJlfsUwDkgl) (seq (null) (null))))))))) (seq (ap i rjCosJHhCQGTzvsVXMwvylJWEVZeyFYSVYjfFdzDQMaufArcVAbCpRkghMqcgxXDfXABunHXG) (seq (seq (ap i mmOEasueMnGRQuIuzbQjGMstUhGCQAbrKfCBSlJcicTzotYQQEvzKVirRJYgZgvM) (seq (seq (ap i rRUolyrxpmEFswsELKhyxdprtNcvzkptPZfoPAinJJPBpwEprgioXMcanyBDHJbbeNDvApBWHiSalgqcPuEptqJw) (seq (null) (null))) (seq (ap i dGfjQXqhPtTlBCcCqHQsrPfJyQDsVOGOPdeyPZPIfehjWHoJzlcO) (seq (null) (seq (ap i KCDVteDmUUQFvvzdKKr) (seq (null) (null))))))) (seq (ap i jLXyrTzQDduzjucXhfutFWQmZhqyZoLtoPxGNwBjiOJyaJREBbKeMXiSCbvMhNQuelSyjGzTaDLrqoPc) (seq (seq (ap i hwpVqFOsbOxqeKRLTHbdnNLuNcrclIPwKFtVUzdx) (seq (null) (null))) (seq (ap i QlByWETZKCZFdiIORRNgKGlRixCTjQquqlEbDJDRnMFRfcAywbpKAcdypNzwLoaOXxJeUPcpcY) (seq (null) (seq (ap i FXMvlYFtvnJq) (seq (null) (null))))))))))))) (seq (ap i fQwqkEEwVeGkoxVleYOJxOcBAaJYDzKlDAwsNmmEmlQIfsYonarKOYxPVuDNl) (seq (seq (ap i urKsmNvUBRFuDOTOVNmqzNeIc) (seq (seq (ap i VJuIjcetEbzVRvDYzRmkipgFRDEjjjLoISuGwnrcqEliPNWGLcPvEbXuapVNuMwInJxTKgOSmgOqxbpvPugCyKZPlGiCrDN) (seq (seq (ap i BrarMrhLxIdifdWJTkDPEqQrBai) (seq (seq (ap i TXwneGRmekKjxayaVxcVCCniBqcCwBZPSMCYeUJZQCYdGRLFUsZVhzRcolqzWxsmfAiDzpmgnqJsjVPODRfWHW) (seq (null) (null))) (seq (ap i AbcDSULhYFBGWkPcBnkOcrGFNLlpTsGDJGkhHfUvjPiVuKVABgcDCXKKINiStnsXqlSZzyouPTlUEsWTqpaxU) (seq (null) (null))))) (seq (ap i mRSPVfDPkziwjYQZunIiHGVzdMmnBRdowdhOxcejaAHkEBbGCqIxcjgEMrJlbrYbCkdoYNWcMYaNI) (seq (seq (ap i aAoWFNMVrbXFwquZYgeLvpHwesLAUDwSvJRYoXKZnakPXrXfgHfYIcYLglb) (seq (null) (null))) (seq (ap i zznOPJsyStspKDmgPJqibLGMUfpkFRNFnJwbltawHTJMQecOvJrowsWXHMieddFRDinid) (seq (null) (seq (ap i jgRKxmyIMyoxgGapWRVDFyNLwFvmPnlXEwZuEabDFdiIxLSbtfbqOIQeiWfCKKcAGgaDjsVaRHBFEACePRbUnnVKkBMvPrTgcHth) (seq (null) (null))))))))) (seq (ap i rAVuVGsRClBlJabwMnRYTLozmFTHEWnhXQKkTCdtMHGICWCbuUeqzFk) (seq (seq (ap i agYZyClSaFTrOFSqAvweNSlfzPAaEAiEScKKapUfYdnbDcNGdiygKeSMOEPbFlWloUIkYJkPhRwNECKxVjwwryYkBJa) (seq (seq (ap i lNMgSjKYwGuYUqiZdSPmbPYhukLEiveyUohbQNsWQrZJnankSKgjtGhGTQylIxcGDRfPgfgTLIWhBKLKxxuteCvsOLJegI) (seq (null) (null))) (seq (ap i yWELKxjKeuAcoFdTa) (seq (null) (seq (ap i rWEWiWHJDIcFKYjFfbuEzrvJsLTrZCHPGX) (seq (null) (null))))))) (seq (ap i jNBFRQBGUnygSxIRhvUVwiqxeqvPGGPsTKTxAEhdivfPondfvgRknuDexcpYTfmeNogqsZWeytB) (seq (seq (ap i FgCiiDmDHVfpOiOsNBYFjXCPbDNXdCfMEKoOqxUKuRCRUmWbVnCNjzlmrYwmVSkZfKzTtLrrGczDdlYotMHvCYVDWkLFJY) (seq (null) (null))) (seq (ap i ilWtZLsEQSDniHMCTxIdBHOzrXEZAxhwHkpWgFUcUziEeFIImgUhbtsnrqmukHoWttEiiMxZDwsGwOgTYuGRHBro) (seq (null) (seq (ap i rNFCufhPLTxlvg) (seq (null) (null))))))))))) (seq (ap i VySXIeBRmpfExPctYVOyuHTMomkFVqKsIbrpmWHWZjxhNdXBjfMvMFnEihnHXOwxm) (seq (seq (ap i SSyb) (seq (seq (ap i PnHSzefoHY) (seq (seq (ap i ZlVKueZIKCJUVNzcrgPRnqYETjLqn) (seq (null) (null))) (seq (ap i swXemUZIJqdPxEGAhhuBHdYPCraYFVUdQCy) (seq (null) (seq (ap i OpLclQsZwFgupNeWOoHzDhDSMHpMZnUZoZQVtMnxyFUCaKRCWswvRFnlsFjMsVgAQluSyDhOzUT) (seq (null) (null))))))) (seq (ap i zrGZNuINETuRPVxKGYnWjmQqoXFNMRXYtmfFzekXMetzgnNPyZEBNCgHjNsgVXmcxgLWhSeugCnCrPYMTEYJpogIjzGVuLwx) (seq (seq (ap i eyHZJHgAgVEOSXugEnVZB) (seq (null) (null))) (seq (ap i YFOwbyxsLOBeOLClzFiDptOFQJBdBx) (seq (null) (seq (ap i BOngEijyfijYkTdvPrmSdZZgZFhslVbvVbJSktAmzBIojHYfwpIaIJzvjiGJHFkMYCNqESdrIlATsjiWtEHq) (seq (null) (null))))))))) (seq (ap i jqCBNgZJnHKhrKspvAnDBVIUxAmpOXekqRWELGsgNkpmpOhaWYjbBKfEKLHDgsE) (seq (seq (ap i JtdTxiuTeZAZGPOqYKXYflSkCaddnIuChmkTDHoXXXqUKWAvYtVyCKsagEqS) (seq (seq (ap i dsBmvKwVMkYgELjxM) (seq (null) (null))) (seq (ap i fodsfzhvtdvOGKjmCLaFIAbagnaMrJDEpojbrvCgZ) (seq (null) (seq (ap i hlpyCQtoAFmCHuvui) (seq (null) (null))))))) (seq (ap i CgopMklfMeAbDiCoPxEgYgbvSeBY) (seq (seq (ap i MvpSbgihrcKqWZrjYHRwGDRyhOfiFPDSLEtEBcHjkzZsEXEsmADMuigpeTMhrRcZjJYItHYWbfHMmPDL) (seq (null) (null))) (seq (ap i ZfulSZZQUWUpPHWapzxJCRpIhgdCKv) (seq (null) (seq (ap i ScjtLlZywJAevHHdjswEHbnQVysGFbqIGntbWCsyVdNRpMrHTgiLTUxjvwKgDYrDRUNtxG) (seq (null) (null))))))))))))))))) (seq (ap i mnnFL) (seq (seq (ap i KBRLyXNxeCGopAJnaNsxYXaVmVtiZiwmQWXSibE) (seq (seq (ap i uYjplzflMPFzavIKfaDJPuIJbSHQSnasaeltWhXoBYTqYqlxgnbhEfLyThKgaweCLerUUwUNQIDsjbQLlFGKCCnyyGywMa) (seq (seq (ap i EauxmDwdRXGBbTHsTpDHtolMrqPkhqxAsp) (seq (seq (ap i cAcggAOJOUfPrdbIFBrxvkZSiKjgkcxNiSqBbBlUcCHwkhihMpwFjGtwcJznNINsuhytYolBqByNyqz) (seq (seq (ap i sYdkbIc) (seq (seq (ap i woY) (seq (null) (null))) (seq (ap i XAGPBKhsVpgggGtyhdSjiFmTXZUcsOziuvltYfDSEHPwtbNUMBLcNrURMTFUQSrDgfGtFXppxFQFPWEtfIeBQcpqOCnSvBt) (seq (null) (null))))) (seq (ap i CQdtivrztuEoABTmURsJFw) (seq (seq (ap i BoKsHrsOMhLKWNzETUOHOFJOtruCFGAbCIWwzZBOkiBRoKxMkkKKNgYgVPCqZhgoEZyIOYzbHqvJUadbZyfXXcsfupzLZVaKzWFH) (seq (null) (null))) (seq (ap i PtTqCAuEAAXtBlFFUoDrBfXzJXDDxcTDUGraUdcZYK) (seq (null) (seq (ap i VQhfBqhuJEadDTts) (seq (null) (null))))))))) (seq (ap i iJsHMVYAMIPBmxZsTkEfpeErzaIHQfngRrTYfshYRZKotwaNAXAIrDpIZSdpUKZZkBvSQQVMyubXAlQBKeTIFNEIAZSzy) (seq (seq (ap i tMyrkJAFmdLevQEpGFOrqXhdoXsFuKdiaoiRaJwNQBIipdaJYaIqzOfBQWxAnV) (seq (seq (ap i ZjvdjfFStMpxnkQGvACkeIuUeotLkWgtTCZGEouxanmTaqaSglif) (seq (null) (null))) (seq (ap i VnMRfuK) (seq (null) (seq (ap i JKfGVlZZmaapfIdxDXwwvuQXNcMqAFO) (seq (null) (null))))))) (seq (ap i AgrCeuzeUAvtaFggptPbkOqUhpOyXgGbmkgrzOHouRiKXJhVwPEwPyrdpcZTHWFLZILlclZXhnFeUSxXSdsuVIWQtnkgyFXBXQwC) (seq (seq (ap i FFVscAZSLusYgbWfhOQwQDaDaBESFSCKiQmtcdbKuOrPNDtsgcCnxCygkeWwHuIErBd) (seq (null) (null))) (seq (ap i USKgYWhCgFIwQdedpkvTYGRRbfucYKsumejTfkiENmStHwenbOgpnvKjQCZdFMsrCHlxbIlcWNGEjuY) (seq (null) (seq (ap i OZDYHEBtlLUFiOgCTWDGkgRRJhkHwVHEIjsPkzYgooKXWveZFojhFZfzwqHVzFRuTQjfwRGKuqhHsHkPNnCpAfKniiGQXO) (seq (null) (null))))))))))) (seq (ap i NUhmQDNuFBvV) (seq (seq (ap i NeyQLlfyhgb) (seq (seq (ap i wWVeoMwxIxnfWtImiDSlcklqYcnKkivbbgrpbvvJUTNwDJfJDGBUkNduTUovcIDjUyz) (seq (seq (ap i BVRTzPoeyCKESbkDvCzGfYqdTzUAxfR) (seq (null) (null))) (seq (ap i UhUkkySRmkauUsbVyMXAjkwEHEFi) (seq (null) (seq (ap i xQkdFXwiAxObLOisXlUbWWtqpkYKcECQUiGVvbcfDcAEawouATlfzCVlwHjGaOVbsMtdckCYbTWQp) (seq (null) (null))))))) (seq (ap i klsGxxmFowpPjYbqm) (seq (seq (ap i qIzfxWYdgtesvLrulvfVJWUAigjWCnvRiWjPbSZuMDRGLwYoiWxmJUWJUCKmRywgDtSdqbHyflOp) (seq (null) (null))) (seq (ap i vbZrSFKAQiNkmXpQfxQzAWMpjbwvFtzaulNfBFhbBWBACEGcdyKbPpOmShdrfpPYszz) (seq (null) (seq (ap i gEbOTfCJDjTpgKFCbIaOTVPqFlFkyzRyMCitonaNljRqntmuwMRhRdgfHxkbBcjVVRmQYAMqoFyIPyfknpLnXVIDdHgVCaTQlO) (seq (null) (null))))))))) (seq (ap i drJTDZYpaMGiysGcQEzahgVGAfy) (seq (seq (ap i uRycxsLgkUfWaaRURMfIlOnyQP) (seq (seq (ap i deCXqLXVhdeSXCewkIfHvOlTzAMByeZVIUiOzanWiJdYiuPbJuLGSJXsYZ) (seq (null) (null))) (seq (ap i hKEzAudbcFHTLHuLzeeZAA) (seq (null) (seq (ap i UCpGeNHNoBTWzlBnFYZDrRwiqTZZ) (seq (null) (null))))))) (seq (ap i MfOcqQbTUncQRQhfLsIlEXvpGxLGwDEemzZfFVlcEXJKPAUunTnFgBfiSfYcvYalIcqGsowfcQjYvYPTscCjsvtVgS) (seq (seq (ap i xPdIztgjrEhGiNLVPYX) (seq (null) (null))) (seq (ap i yeofJvKOsXDSrUElsvPTL) (seq (null) (seq (ap i tHMieZYIvdtaZatVmogHzsBRFLBlsRjQezmwpwaGKCrclH) (seq (null) (null))))))))))))) (seq (ap i aPXTtdzLFheCZAiwgYahsBGMXnyHRoxzhgKoTHFyRqONyygFuiJGDOiILzSPJujeUHQuroxVcVkyqZg) (seq (seq (ap i XXhGFZzgLvKivVmTNdbnRxAMAoJcygaQUJtcjARtovIEEqxiJwotqdUifMqucgxxOEkbgNfRhMiijKIh) (seq (seq (ap i isMkOHNeUDAPOZwtJWEmJchkBWcQeiNtHtwaisdJEnZVlCMlLUJWSzxQtneXMNzzWyemrrEqUBAzfxzGwamAVxtQPdvhDYgyi) (seq (seq (ap i qNhlgMkIUKREtkSpDTl) (seq (seq (ap i LwIfgTBbMRJuju) (seq (null) (null))) (seq (ap i qCRSGDMkiVkqnmJbZjDFDSlrttpwAMLyDHMmkX) (seq (null) (null))))) (seq (ap i dGGJfaeviCZRbSyVMtksxVGnWFgszmoVffuwarfWqfvJhTeV) (seq (seq (ap i aeLoVHkLFdSvuUitFYWQXZMZLiWuTgOICSagQbOKwDJoofhfUIolvZchJcWPZWLhBmtdjyJWznd) (seq (null) (null))) (seq (ap i mYWeskViXgjmtwQbomHuTcOGvOPnLnHILHlnyDMlIaTSIadihggBPVggexGfOIcCzuMCJLXbkYaYuG) (seq (null) (seq (ap i lQggRZSdvoeGIlQjzunQfJKbJLPoyfnWZviMtVdRKQcSUaOIeRQ) (seq (null) (null))))))))) (seq (ap i zVVmZKnxtwwPWxbrPDUdYfxviHMCQld) (seq (seq (ap i qsUTvPpAIXBHYTZhgYuptYHMiNnoxQNSvtOyGQXgxVLkEchwceHWkFyiFOnVugEHFY) (seq (seq (ap i wqkCLUYwOwYAmUsHjVIAO) (seq (null) (null))) (seq (ap i KLauMvmfCbfqogmEwzvEgMqjoMfqQJnhmVScvASsbuywsUmLetDhhvplasKIVrWYU) (seq (null) (seq (ap i XkhnHeArmqlmBrWF) (seq (null) (null))))))) (seq (ap i tbSrOQZZx) (seq (seq (ap i CcjedaLqokNfZprpQmuEdWX) (seq (null) (null))) (seq (ap i QGKWEpFMnbyUJwbscdAkcSFyjaMCuKRXfEDRngQQJrFXZxukrfzmDuzzioacKILNNxBnoTGobdlpqAxEF) (seq (null) (seq (ap i JDBlqmCPVeGBebiJmiIrDgx) (seq (null) (null))))))))))) (seq (ap i kaMkYyxOmZxTI) (seq (seq (ap i tMWYXcIHgbpUExNnzgbGJEurhxrRJioyPMgoorWtSfLtilPV) (seq (seq (ap i BqnFISaQvLqOROwiIYRNeDISuTXwYiZkVNFbqPWtCMAHlbWGobyFpfQCFZ) (seq (seq (ap i JkPmmKFaWlzpYdtqbPgiTWNTuEkcnPsmjoGwcXDDsuEAUNnbOKfRtisVpWfVlDGsFcljmjJaSWucaRLyqWEwmNu) (seq (null) (null))) (seq (ap i uEUOFaqzNbIIeLtEynjfxjBzJHkmusRmiSYWonlUBqDahemmdczfUyNhizzoimRavjmvxXRGqyrzkCjBPqNThGABdGAEts) (seq (null) (seq (ap i LjbLtvMiPQOMYiSZrGKJXKPULBMsPfBxSrhEsXKHwrqKHHKVeqvyHedGebWFYEdwrUJqNLMYKcltzTsbhyUpDiYRTmKJWA) (seq (null) (null))))))) (seq (ap i calSKVZFntRTamjFoKRAgCNfyGfTiNZWUQlllDkbjbQmJezjBYAmbn) (seq (seq (ap i thWgTtJOutnNQqagocuvTFSGMtIjEiwvduhtypIwpOjkRcchuZXRqkRscucoEMBMMXfNETfWgTHbJflmLxJYWXjddqXAxN) (seq (null) (null))) (seq (ap i LrRIeVDEcwARxXxtflXJvcJvRegevsrkwpgIRxAFJnVwEbznYIQPqIHptnjVojgxqNGbxQGtYGtihPPvYuhrnsaWExKWahEtaux) (seq (null) (seq (ap i ULQpzBpteFghdWzuTriRcATFgjCfOUCeKciRYndGSTQ) (seq (null) (null))))))))) (seq (ap i kIIRbqrxKKOkZzyubdehRKwqofsQpbxbkIagE) (seq (seq (ap i WQtFA) (seq (seq (ap i zXAHPCRLtpfYRTKWupcqsCSyV) (seq (null) (null))) (seq (ap i ZvghIGqiwMdIDRZMyqQHzTizNGxqJZWMLCyHXghQKaHUhNXQLTJDfGgolXxZTVt) (seq (null) (seq (ap i nTOYEhjLYRrrQNdabZUajwBGEwjgzwvkwadEHjZJeAufpPAHsZGhTZHAnSYQsKQYCoFmlbAIOFXGndCDZd) (seq (null) (null))))))) (seq (ap i dcZnRYqErCJdVnUrdMMMSQORDdWtawodpIRhDAADDzpJzuChowHFkMSVXvnDEYZGwgHaVwtnSQmd) (seq (seq (ap i jmfrXusMKloUkVwUlXYPkVnCXbbbecvzuSfeWQgXozIosUBSeuni) (seq (null) (null))) (seq (ap i DMmbJjvetGnWwJysnboNXoSrSQsjLeFoWXswRZnHXbXhqssQKXqTwUDxWQdiZ) (seq (null) (seq (ap i wETDHbwUlPCSIRicZcAdPgiF) (seq (null) (null))))))))))))))) (seq (ap i GIvnpnScnXMAfcUYjJxyHZUMLtanspuvxtrCGqvUaoDzmlzBgXXXAueh) (seq (seq (ap i fjolAyRhcRmXmslgirHYLwzCeexXmjmWIRfpqVIxcQZoPGKEwGtWqHZsswQUIrqLaXwUg) (seq (seq (ap i fJTQWMCXYkNTGnqqUgjEQQoGrjkUJbrXgOvcyuldAIFKezWcfIVENIjFuNSZmVqrCrWZEHwLgOflbpkcw) (seq (seq (ap i TyQWeZMuHqzYZoNnJwPMWtNkNOmxAvyatFi) (seq (seq (ap i VshoKxRemFCwNQVWzgftYnEoXDoyEwUIGIQMCavULXlbnXywlbpDpVeHzcNrROevjMiXZSjVFHvOLCKcDmlyKkQEulzcMAQs) (seq (seq (ap i NdaWnfLoRscr) (seq (null) (null))) (seq (ap i tnlgibKBCqsFfLvlNwUYgeopYEBBzjAmPtxITgMIZzJbuOQDURmPuaBudOHy) (seq (null) (null))))) (seq (ap i vVdtYdskuFmRHMwYLLTPFzbkvbllxZUzvqNrwGkrOLkKWfuFzJqpWcmlRyxBWWixqkcqqnkWOeQLYGrqpDXUsFdCT) (seq (seq (ap i cGHjVzSwDXVgfKqeHCpajloLzvdgfYuBoZxYhiUAlpgWCgefJEqvBXkK) (seq (null) (null))) (seq (ap i VHbevsOMIBwCFMDfPeYGf) (seq (null) (seq (ap i XmOKRbDgoTFiVFxLHKapxvzVDjCneGpT) (seq (null) (null))))))))) (seq (ap i IdCWtXfSfkqlfCExENOyvttdQyaOMhNECrivWWUJauXFZImCtfMLpmiQIumUV) (seq (seq (ap i offEnQCRfGMoCePwCzrpqlfgzFdksRtNqtwXjOsIYVfzJnfahDQJoCoaQIFWxIjgfsNjXnidtourCdWSKfaduVEnCK) (seq (seq (ap i YrQqDcOgIrPppqDCMFyxYprEwXJyFhWvjypeZIocamsnrXXxjep) (seq (null) (null))) (seq (ap i wMWRqdGGBqxFDzjnGxsxeaitbBZRXEbOx) (seq (null) (seq (ap i iHfPFvOIQlzZcmtRGzxabHNQmVaaJeFVidMkRthgUhLfIkFDbxPJVDbUEtUR) (seq (null) (null))))))) (seq (ap i udsxMDeqGFADqknkWixlFfMaAFqiYKJYwuDiLN) (seq (seq (ap i vfxkJLrnUewxMgtRNCatNswGoeonFLKuZXhjjCMKAEjblzQCvsAltqKgxUDMgmHXIMvzZxJBOYFPVqlVeAvqm) (seq (null) (null))) (seq (ap i FcnIqhvNJmojVIHfEwYGCNKn) (seq (null) (seq (ap i YtpAdlPaLrsibCTTMBWyhiSyEVnimTirAaVGanPVAHRWkJtqNyKpLfiztGCWexeBwtoqTZs) (seq (null) (null))))))))))) (seq (ap i IEFRqXfccTlhKLUHFgiPdYsuPUyJrAmZULwkgdNkKmagGsoViLaSQIAJfCfJudvmbxtEmIF) (seq (seq (ap i eAqeczLehJYIKiXZljemuhEtYHDcEUyZQYDWJVqWomHFDbURYvcPSmoixgzEaVhujtNxaaU) (seq (seq (ap i NGNdihitAETDXGYSWgpmIHoTkxMtQfwhfBZMhiVhTiRjIWoaTpUKktS) (seq (seq (ap i jMydkwHorajuJOdvEoisByMoSONwoOOQVfSAhOnMBkmipWYdxpJlTKcOeROyrgevbSKXcSnbYPfHjtZoYrep) (seq (null) (null))) (seq (ap i UedzAwtGFqXEbAsXUpWfjoQMxdRWLTECFmVFcVLSVrAEnnbEaKclJBWXnqxfhsbamwDhFVWtxvrxEpOVfMCkSPZSgJbpNmEaBpd) (seq (null) (seq (ap i teZYJozDryKVvBSkeSIhb) (seq (null) (null))))))) (seq (ap i GjNMnpmrwdKcAxtkPNLJcezGsvoVXgyUuggvHkUgbeqUKrbSkeaRBPVaYpFgNCzhrKvLderNaIxVXOBtWxUSyQxQFmOhwbBWK) (seq (seq (ap i vgwnnxYKdvzbZTAyBtyFmwMwjmKjJSrqeJFmKZaFkUHZLSPUfEnIlVpqVCRMD) (seq (null) (null))) (seq (ap i QLITqygEaEvxP) (seq (null) (seq (ap i MWqRvecLmgVybMZceHGLVcEbOumEWinhCgqqpflUWQpBQfDgimaNQptmqoOekuxJrYBiNPkZwM) (seq (null) (null))))))))) (seq (ap i hMfKbVCeuluvnUNluGlTcljiHHbgORqOImJVszOyxIBTBBjLG) (seq (seq (ap i DzIqzmBzUOzaFVqnmngWBZrnMjtdBnFTARsFbOuHrUlLBNMETE) (seq (seq (ap i hCnnoeZHMFsXTWFzI) (seq (null) (null))) (seq (ap i fKdBqZWwuttWJbjAugxSsfagLYcqnuOVXakfb) (seq (null) (seq (ap i dmAowTFllbfqceUhivqTfXddsjxzNexLFAtBbtlZLbcnmrhEZQQUoPAVVSGTjTEqIsIfwSOcVLcaItVsFZTi) (seq (null) (null))))))) (seq (ap i daduiUxPqWKhbpExsWAkwQKpQeYDZFvfJPMYuKAdSGBneKbsmrvrSgpbKYsCGgeKQnLLOGZ) (seq (seq (ap i ioNaXU) (seq (null) (null))) (seq (ap i YYBudUGtViIangPCivvbFwgEShIFJeAELHKVMsTUofCTmtQUoiMRWLsAs) (seq (null) (seq (ap i tFwXIwjXZdDkXbtEPJgOXfpvrELWEhkTrENMdwBDpXYxGjfLcaOjHazeaZQLUkI) (seq (null) (null))))))))))))) (seq (ap i BWfFkUeDzJClahnFQrzX) (seq (seq (ap i EyYGCGfHXTtPBXIKlfM) (seq (seq (ap i uQCBzPHvuZwbANrmUDYrwhUSqZyFyXgSObAjjjJYeFvSDkxysRjdxlCKKoSHBODf) (seq (seq (ap i VPBuSdVkkhzqydWGkd) (seq (seq (ap i iYIrHrRZAojUrFrHQXllGaHqRggJpJlTlFJForQYcnFbrPHqvyTKsj) (seq (null) (null))) (seq (ap i QJZesFrYxQzuOTAvBgveetffScHRQDrmKqInjUqziyKDefeLhTolvXkpGxiTUUikrXUS) (seq (null) (null))))) (seq (ap i TGEOrXnibnncJfvKzuBcASTPUIpEFWyZOyipY) (seq (seq (ap i CHzIrVjzTCjeWXUqfsbgUojcYNXLtZMCUfmvrReFOHxVfVyuMSLmrNYIVyqXyyTwoLASNKmAvmtpFflc) (seq (null) (null))) (seq (ap i kGaowBweMYQKFLeYtRLbLYPTSYXIWshNmMAZwYIFgfKnohTi) (seq (null) (seq (ap i DcMfXvBRsBsCrYTnhrvRaHOkTeiOnmyJBkwxRyfGSnTNu) (seq (null) (null))))))))) (seq (ap i lGCtfOXjxLFcCuJsOIXLFJdMWrEQEDjkpilAjNWFgBRifNUtDUKwiZwtWOVQCxJISSXtzRKOLYzHGeNvWNSjlDpHVHwZcHvtMMu) (seq (seq (ap i pgeMOZfLjMuxYHDEkImWtwCCjJsjvTDeilexHCISVPvcuZuPkgiSpeMcQmaOKsfQrzQWoYU) (seq (seq (ap i HICaPqVdFmCMODNgNaRRVcUhzLtjxfiVreVUUgeIULbebtiSYqWAsYXVLrBPPXVBRebOojMxHuqEJVoJG) (seq (null) (null))) (seq (ap i uTSIXJDlGMWVilxgAOSr) (seq (null) (seq (ap i zokctQicVyAxxHIduIKhAhDEfKQIjVNYbGLBlfJWKWdVckfGHkIDLJugfyfhtkITgwcJCnruff) (seq (null) (null))))))) (seq (ap i dTOqNihGCHpwXrMTxHlMiXdzrFAAhygpEzz) (seq (seq (ap i lHBGbONFsYVXIDTDXRoetVTcyrmcTQzZzQgOXTAHindfaWezQooIbSZoPcMwMEuutYvgRrbtPaxjDFpRGufyJZa) (seq (null) (null))) (seq (ap i fhWyzHytKPJeM) (seq (null) (seq (ap i GPamFrCdxYUSqtPQDZhpJSaidrCtTMBFbZxcTX) (seq (null) (null))))))))))) (seq (ap i vqxtuLhwIAHANdPvLjLmlmyNZtDXZwTcnUulLZLttSRqOAihGIwkKkgICIriqoMDdCxWadoq) (seq (seq (ap i lATFoCxfZuXccwmPgJdmJweJRKvKERhTGRCyJwVeLODIiZScTATTJdKegyRgOuKTXuNzIKxoUiqjXvUZRSDyiw) (seq (seq (ap i upGbWvZPrfssDrNTXeyJesVqmswYMnlpTUVTDCqWwCiBR) (seq (seq (ap i ddyXRXFJRPhlferCqvrgUmBQkZbEMabtUiKePxLwAQvOnspNFaTSpRzZYxdXTvihDxxsnDAZNoXlobiOAqsKzuVyDuIKcKTU) (seq (null) (null))) (seq (ap i FCWsfMaaUrfdfSeCjIeugniVzBInZIH) (seq (null) (seq (ap i uPzlNedZDLZHFXfqOebXyYwaPDCUkEuDHLevxEFCumJSCVitIjrVDrejkffpcTTtaCrCKxJyLcDQGMYkZ) (seq (null) (null))))))) (seq (ap i KwHjBjOFtVHslnFFOSZVIuoxHvlKiujjFbqjiidRHSXwC) (seq (seq (ap i CmnoMYwHF) (seq (null) (null))) (seq (ap i qNgvOKxSMDbfFpBMpuNpqEYmweLFYTYIvomNwvaflrjWGfNOWGLSgkZmcjHqkgQDYxN) (seq (null) (seq (ap i YwDchbFAeeHsZqeJUxunUUDCDCcGlYJWivXAbSlJAcHtafUaXIQxQmfwMtrIikdgtDU) (seq (null) (null))))))))) (seq (ap i quyvLMPSkgZWrhPlBrlMNkVXUbYfsvTIltK) (seq (seq (ap i aCWXLqpfqKANCJKWVDKxqpGViVdeuQhIzepJibzjOhUqpQsfPBnuwYeoYxrFyBibWxNTeykLYauTckvFgdsxpgxOdIFAKylfGiwZ) (seq (seq (ap i UqoKUxpUvXbNqnjpMibGOpQqtyLTawwECwljBvsfPevSieGEhHrFzaRdzJxojxJyvIApjAP) (seq (null) (null))) (seq (ap i aJrpdNIgREEYPoaVYnPXidOvvJmWlfEkaWkcnehXQfDFpsZqJxuprNQQopgOP) (seq (null) (seq (ap i wWhCeKXisCjfiCRpskjEbmnYvVwLYJoQWeQPzoWIFRhxmuvrjbHkxffjKLLiVEGtwLAbJscOkdyAlLXpOarhiwBLvR) (seq (null) (null))))))) (seq (ap i PDZHUamISrFUIYcvDBDGBhIEGTHkokNxkkKSYjBjyrgsqpUaQEB) (seq (seq (ap i XfBCbKoZoqNOPpgGcIZGvmVvHlpNiLlpxxUKeBuAmqr) (seq (null) (null))) (seq (ap i cIsuQALxCBfrhQxfIBkgscRMruZQzDUaIgzrwEiDwQADwgHUiyNhusamSOwgfSOBMFwr) (seq (null) (seq (ap i yEqHQtkVFrMcphcvYMinXYsSauEuswrpSauhVHebVIuQAoHJRLnnaYZBdcCJvc) (seq (null) (null))))))))))))))))))) (seq (ap i dmIUrUKgIDAygCsKDwZbujxVRyZtMyHFBDMsnauxtaoiTsBuKxlLQyHoxttVuhAHOKyyVMUGVpcrTGiPmDzjdVobIxkB) (seq (seq (ap i pAvpbhkkBvrtEIAFLANaWiQkyVvyWvdVSgELVDfVNPLzHoFFOIFZAroCuIsRkMMNMKBMp) (seq (seq (ap i XprUJGILqJOSTEadIXWIKjqpLlKKQFVQMADyZZnqdNpaobqBDGaoprZezCGoK) (seq (seq (ap i RMXdRrOIyuhzGSvyiwyqoS) (seq (seq (ap i goUJvIplcoFKsCZSKgFSIsbjppjUiowqtWILgrgEZxZGibnKmSUXjhqftfjzNedGNSj) (seq (seq (ap i hQtZHCewGaLqKGrfSSfEqqTWLoEZOMcuymFiQVniJS) (seq (seq (ap i pOPryhLcQkholPcEZRERVRRRdCFUbkkKmbpgBFnOctrQDSUANRBQqKGbsWDsFfpPcaaSSVzrY) (seq (seq (ap i XXyShlvYukglMypMSAycjqMFJVbcDRC) (seq (null) (null))) (seq (ap i DttfIlumzJUKXgGbjZWqZ) (seq (null) (null))))) (seq (ap i UYXgYJzdxbrJToLxDeEaySKCKTWjBvJriNFwaXhAnwGOOmUkkcLKPvksUuCtuciXXjTHJPNtYNAd) (seq (seq (ap i YdlZSWqfyFKlitkYeRYpYVVHdVyjUHqTqiAdEcTaUfnwlkkYjgTcWIazj) (seq (null) (null))) (seq (ap i GLKzlsdvHXtBFfNwYvsfetzqWfsBICZbNvoWvuKZeL) (seq (null) (seq (ap i KzLiGmRQNTuchmRLzzvbzPJGZjhxThqgyRgCIhbygAEjUpHWmUjUkZh) (seq (null) (null))))))))) (seq (ap i MfoRNPCBidAkSMfXtvYSKLzPBmOfMEKJmNGTPruOUnHSDnFLvjciZipyKyr) (seq (seq (ap i SrlbzZtBCfSAdv) (seq (seq (ap i aRwNkfLOqAmgHvJfWYXrPCUJLDOYPhxXZDgwMTStlcHkdLFXqjHfYswgSHnreLesofbBNOyfXJkiGvVa) (seq (null) (null))) (seq (ap i EYyMahFmCkzsTSdhfTtveQNQjGWIGGkPkEoWissKaukfRDmywUjnVCXSBkswvJniDUXjoHUKSeWsZboQbwHyBSUGYWrj) (seq (null) (seq (ap i jhakMFCxcRbgNFTeTxyHOmShiMCtVfmvzNdbROZYVyvlSVt) (seq (null) (null))))))) (seq (ap i VXziuhDwZXpKVRnQeqmPJPoygRIYmnqAbdCpMgTkmSSFPWmSYRCXPqGkVXitINxhefvgJn) (seq (seq (ap i PwNWMSzieAqYGFOLklTvSFnSgCMXXWMzKEkMkYsibKMHqurCpeCFfvjrWAcceKGUCBLlHEeIOsObIhxiriMshvBzCl) (seq (null) (null))) (seq (ap i XDQXSFnqcPsXFAsNTSpiSRojrYkWIXnkRORflzOcDVfaNWWxfe) (seq (null) (seq (ap i OSoNmUTROZzmYQuxSHBKZqdfxxMTVnpFvNqHxewI) (seq (null) (null))))))))))) (seq (ap i yNkzlZXqAZHzMhdUHwErXoAMvwQpBaNFUUupQkoko) (seq (seq (ap i vzLgqaPastRYJFVVIgDlLIKUEFqrkrvWgdMIcvGYagPYgsmILEYnhDpOYejY) (seq (seq (ap i NIELrjsyVGSTvpVgvIOdCipuIeN) (seq (seq (ap i MaTAgfhffOLIRSJNeoitIxiJMzxTEEkhRLvMGTuLczPyIWDfgcWOfFuTOtuDrhKIiJPO) (seq (null) (null))) (seq (ap i uEbnkPTEkTNRS) (seq (null) (seq (ap i DblqDZqFpPidRgqaLRyyCBnDuAoUlgrBwEwPBqIPrDkCkkhMqahVcGfwfhyDUstkQhSJE) (seq (null) (null))))))) (seq (ap i zcbBUUSNziQOJLmdUEQKHHEJKbUqmFDwZVgEkGEHm) (seq (seq (ap i leiukeEWvmossaJGiCUrkafgPyvycSRQxzxTQeyGycbxPi) (seq (null) (null))) (seq (ap i AStXcDBNpjzzaGeVLbFReDvhDnKaJQrKFEYZxyKj) (seq (null) (seq (ap i KPRRYnYRmfifIWVXklDmgGTVmRMAobUopsVrwf) (seq (null) (null))))))))) (seq (ap i QTwGLdByYEwqTtwkUjxlSoiqdGlGnpJkCRYVZtLonICOTJWHocXFCdbahwmeFFiWFJoIVzGQIAYkMwcishShCMfqovl) (seq (seq (ap i gxEqTZXuucENTPcasgfOeYPPYXRxcuEIEfLqBcccWwKmEDhrtConDpudIfbJqUWqocvxiuOgJzVkI) (seq (seq (ap i OnldYoWhdpcsvCuFBKYtnkwVtrjsTnalbauX) (seq (null) (null))) (seq (ap i kNUxenKGYudTHKHPnUfdDoQuSXNPHYGEluqLkmIICRLCaLBMbARktxMZbstREBNEXoSdmGEqNswGvdlfHFBgXYdLeZ) (seq (null) (seq (ap i NvinOZQjnYVXCMMpOhWZReoSMSLzjAyFuMEdXcQpgVZjvhRTCuWuUILypoJvGZWoupJQfQRHCDzfvekNqYPbmGkMia) (seq (null) (null))))))) (seq (ap i oBOyzzqlnQuJSnyqBwMVmKJmEyiCWDpPjGslVDpSfRNJubobiHnLxHiiVSZmRdFSswOjmCXj) (seq (seq (ap i yTbRCjtOchaqNvNqepmTE) (seq (null) (null))) (seq (ap i gHSIxOakaeGvvxHhlaCtUIjdpfdDKNVDJmSwoMKPWWsrJjYMtUUSiBcFa) (seq (null) (seq (ap i JtRXWpyLcDBvNkurdaaZrHswnEQyBbRFebkv) (seq (null) (null))))))))))))) (seq (ap i DPbUKYOmYGhzGOjLeHZiXIrJhqRBxYSGcvgugcTAkHTYwSwcMeBttsSvPOGyQIdJrHRCAGf) (seq (seq (ap i SERNScfnTKnoBpHNGEhIZPGjFpVdsINJFicnncY) (seq (seq (ap i uGtZblPtLhBOunKVhrkBeHpKchJAjXIjmnujLLdDbyiacqitdOYIxhNqjQSsdgKzSrYDflmbdjhsHPEEzEXZWBavuqmmv) (seq (seq (ap i jRUdqcRBSlICDbyweBWHJVpNgycOkqpaeDMgSyxwBOwfUfVoJQoPhaAJVxXxekljqcyHoSTZprciXDenSDvWoyohojwewasEHJt) (seq (seq (ap i xJvPYXuBOTCGgeXEHIYJxqGNifTfFrCrbuERpIIKTULZofCpkWtCRpnEyQrtpgZBSbOVnYDbyFnCXEVBjWIsNLeECZeduqboZgU) (seq (null) (null))) (seq (ap i TmYfuRCoKOxbhQZTDZxijblfaEybNCQrBupQNAwerQRScdRPQkCJAyZRerkCvAJcCeJuXAdGMTSBvQTogRGLHceQEGOWonVwPa) (seq (null) (null))))) (seq (ap i QVuBsHxVjazEgKovePjjrIEAlHTopDHkSMnmynidNnDipcEPIyMcYUyrKviZlVlsz) (seq (seq (ap i MPpolFkzLOCDCBOHYwiziVKEYFXkOJxGPDDARJAHTUVDaAKbMumwCrpusMDuWOOXBsuvwysXYNVQxFmWFRhmbFUy) (seq (null) (null))) (seq (ap i quHFfHQrmqgkgvHpEkiwkrlGpwRVqKIxdIFiKdJotTlEmigzSmFehHySXgIasNYbFQLyBvhFwsDxk) (seq (null) (seq (ap i fzUNgiq) (seq (null) (null))))))))) (seq (ap i XzVBgnDDNLeGYPuhSXnhrQHvcxgGiPPmtMVaJRuKCDALBfWP) (seq (seq (ap i nxSmJHbZL) (seq (seq (ap i ZMNmeqdWbrBFH) (seq (null) (null))) (seq (ap i RGTnYWAWiIqQKZpsaISYRXGMxKLxKdXBFzpTjeJ) (seq (null) (seq (ap i nIoLWmj) (seq (null) (null))))))) (seq (ap i nsSlIwizRgKjFmDDScccz) (seq (seq (ap i nYiDRHObSkdXNXjDlMCuPkTqlaWMLYOQMBkptHTrhEOlCyHdTyWiAcQxIjIf) (seq (null) (null))) (seq (ap i cPAAUcldqZhEazLVgflvJduJJnNnqmOyyHyBfE) (seq (null) (seq (ap i FhcEMxJprcMhQXFIIgYEWZgxsFZdIWjhUYKYhJJbFYQBZ) (seq (null) (null))))))))))) (seq (ap i CjEAXzUkVdFUWcrGfBVqMSsjfkaPEnHXmzsWKOTmvbFdqxNZSiNLyhDTUwuciDVsbgWe) (seq (seq (ap i VSDyAiRSKMVpeRvHtFFxZEodNWwQXwwItTryOBBEauqC) (seq (seq (ap i sWkbwWPnUmvEqoGbCORafDmmCchOKdENUEphbIgnBhrbnMyOmwpHO) (seq (seq (ap i VDeQnzgXkMOgNFepINzLSfwQsRlFdopfteJFZPwoFqKGyMzRvDHSVNskmDRfYnKceMLUQFIOtDV) (seq (null) (null))) (seq (ap i llDADcUnGfzMgMogwuHRfsEFFEJvrQLvXJoTuHCqXCiHEL) (seq (null) (seq (ap i RcPsXpMIeWBzMDIsIOfmwCZjNLpwlldLSfsODoFPdilWaxDCefmPRWgaTNGVjyYdBcYpdAXKsYIULQtpj) (seq (null) (null))))))) (seq (ap i KLcdoZl) (seq (seq (ap i CxsFCiSPyVNCxLzifHtvhBzXBFwQOZyghnUbbcSHUsWaCuq) (seq (null) (null))) (seq (ap i psBfnxwVFjISUkHjbDbDuMNKtPQGvIRXIDxmUiauFWANgvnVY) (seq (null) (seq (ap i zddNlTTcWstTTMFgJM) (seq (null) (null))))))))) (seq (ap i gbGEqHYpsEdgUpRtvnTFgzGZuczSodomduPyjsWBHSmirEyI) (seq (seq (ap i phsFUcFejHMurDDedcldNRPAYnghXnjSEqROTemSkdEVvIrmCZxsGMzdczvffkJmsadyEzpykdeIhdTLJacfjfosYDMYNmeQAas) (seq (seq (ap i lrwOPdJISyDjORf) (seq (null) (null))) (seq (ap i DJgwphhtpSfBQTG) (seq (null) (seq (ap i mNpxfCxNsDRcaaEVAXQYRYIvyAtuAVqxVWMHyaDaAdRAmwqbxAfCTAbsoEAFIeFOgdwOPgyYUPWJlrK) (seq (null) (null))))))) (seq (ap i ehYYMcKWXRqumzWELjpobNbPrJItP) (seq (seq (ap i qRJImtbRwhsdmCnamVemHbOsoFaaeDNAHAXFZxGbkZpdEybKyZKoPtehnPhpBI) (seq (null) (null))) (seq (ap i mLHxWAnWblMxFkoL) (seq (null) (seq (ap i zrglYabHKmvcJiHwHUcMlRWRwCFfXzepjLLnCcLyAHUvKqAHtVHSvDyVmFNFiXCQGxRctJloDb) (seq (null) (null))))))))))))))) (seq (ap i gIiFdhstkFZrJjbKvTYmUQEpoeTxqdxGWIShLIbCElIYgaIWWiVHfqbDaxfbCisHkOyjQjeJbvOygpIrsHvYI) (seq (seq (ap i ORZjQopaeNtPkGAnRFVzbfPJclWDWoGrcofIyTVLDjwpvLzuNZgZwGgjyGCWdUablhAsSeVA) (seq (seq (ap i GhnUuIkalGxHJzPELhjHewhiQu) (seq (seq (ap i vHKGkPeiDVOOtPpOsxBESkAdhKCWGJiSiJyauqRugUuA) (seq (seq (ap i SRVapuedCTUBItLMkTgIVaDvpnhLSrrefYqbvRuOpYXhbXYpuKRjgRtnqEiJnuBuwHIafMhUjuZwI) (seq (seq (ap i lvQEgpfKtXunfmeCArADjQfbMUhmOSNcgNXOX) (seq (null) (null))) (seq (ap i kJBpXKWTQJvWNYxgFYpnmYVtklabMnUfImeYczggDoxjUCYlGkEZSPUEPLVYwLukImFIRLGAdKg) (seq (null) (null))))) (seq (ap i qVuWLhJCrsiWqczIjAQbwXfbyKDCRAB) (seq (seq (ap i YBUhAoLekrsvGrcRSMojINGgGYATCXPUbIYyAhn) (seq (null) (null))) (seq (ap i MmCFImfnfgJMyrcoYXNZrnIfY) (seq (null) (seq (ap i xdwgNdXwZXdvhFHSGYhojTARULmgLvEjIZCTucgjcJqcaMSl) (seq (null) (null))))))))) (seq (ap i iKzfWgZzyPUGlSyAZRXUuiOeBbHdTScbMvgLcWJoVtiZPOeLCcpoKGPNeIo) (seq (seq (ap i dKCPrvQPNvnzIFKiGocgPeHKzGmUSQJqbOvCxqCiqOUJPdTiiYsQGpGHmDSuShyFTBg) (seq (seq (ap i FkgBBGkRivplWgabDdXLtbBQGnZaKiiwQMRZORtcDkCvHpEyhrnSJSIGTdAVt) (seq (null) (null))) (seq (ap i rISsMBZhrNjUrSphDPlUvOfLStlusRs) (seq (null) (seq (ap i DMwUzMOdrPNTebaEnBxGTjypMPEoxOEMppGwxFbIDogXghiFoIhkJGnCkXaRoASGOPZjRVPHNgUIhpWluZqTIaFVFNFZlPpIXhlb) (seq (null) (null))))))) (seq (ap i GxlJUOknoyaJIzlfiwUMHJlMIWHrSdlOskTGOkPiSRlekqKxXnqLvcRGWuqZ) (seq (seq (ap i qmEyMayenEXuUELZxfwjRQspmdGOzSYhfcNmrihmgDfwzpMdxPAozfDzgpSqMdHqCLIFQdHZQvuqdTGvDxVnp) (seq (null) (null))) (seq (ap i uaPauLtiserghJtTDtBOIaxxaaWmuUItbLXl) (seq (null) (seq (ap i MrQOniPdmgghIAnWBnUsuPhAFPMiEAXuJfEKVLD) (seq (null) (null))))))))))) (seq (ap i WaDhQF) (seq (seq (ap i cN) (seq (seq (ap i etYwWxbAJspqhMaoOamWvI) (seq (seq (ap i cuTRdtYVjEebHdrzNanSsjsgAgIBQozxyhIOXziPvsGQdyyIbPeK) (seq (null) (null))) (seq (ap i RiMlXXfbAvkuWqx) (seq (null) (seq (ap i JulaaulMQxsKZNRESCRyvbUzhbTkttpGwXujcXkusgQEtMOVcYrlABZXVZUiyQoRXSoEaeO) (seq (null) (null))))))) (seq (ap i oaytNbkYMmopZgVtQOVWhsEMqbNAHUCJhAtW) (seq (seq (ap i GIfTRWkoteUVVfGeRlCIssnFkgOIZkVj) (seq (null) (null))) (seq (ap i qOaRATJILDfwXNxbncpWNrSSCPaVQIECVCRMvjLRiTZRTKdfkvYOKpvLEFyYLdwdq) (seq (null) (seq (ap i WIlZjWAdphJcaxNGYddfjEbfySBgGZkaPy) (seq (null) (null))))))))) (seq (ap i BzRi) (seq (seq (ap i pavASjWFwuorsQxffWBHEdWMedbIT) (seq (seq (ap i GJbGMpY) (seq (null) (null))) (seq (ap i jXRoUbIcoIXvEljWYibnXguWTxlhkrhydZHnWsFoKNBnEqEOzkLgoDSYwJoYwjZEJEJdKtRMeRgXXTjVIDEQrPjWPPxvr) (seq (null) (seq (ap i WxzYCWNinwBhcxKinBFUnXPfIGkPexzuiymc) (seq (null) (null))))))) (seq (ap i PQKeFPehYFPKnDUijSTxBdplAehZPZvNJtDXOuhNSPXCJ) (seq (seq (ap i klLWHF) (seq (null) (null))) (seq (ap i TDhjLvRcInGhzFhbRhrcnurzoJiPZclLznwjsRiSDcatYaLVjhxsDPcMrJqGYmTQGfayrgWN) (seq (null) (seq (ap i mQFUBhjGU) (seq (null) (null))))))))))))) (seq (ap i GnPJGEqdmPaoguESBDCGPMaOMKI) (seq (seq (ap i vWuctxwzbSjklBGimcLAMNGNzfVROYhHbayruZFwUHfEWAAtplclKLvjuAvLZJLWJiXpj) (seq (seq (ap i MiGKWCTZBHXrdxhFapoZXXnRzdztqBIBKn) (seq (seq (ap i ABlIYFOpjGpKaolEpQXPsTJgcawcIbvHZhJwoHkLxyPHmL) (seq (seq (ap i zafPSpqhFnTgmEwIeVTJZofsrgzQeOuynOCFExLZiuDgLIBYjfvcSehApBddUxPxQyRvXWsTrB) (seq (null) (null))) (seq (ap i nCwRyUuiNWgVWNTifelEcviNkvdGCPGFIQitzpodjrjXbI) (seq (null) (null))))) (seq (ap i zMtJnVyEMkTNaPFQyYCNwwbUPYWrPSOXpTCoMChoQRn) (seq (seq (ap i wDordXleBSkOpPPWvKNGFNsAXSPUbtvChAnCIwMttqtjZCKhxMycSNbWijnmakHhXpQhQwZ) (seq (null) (null))) (seq (ap i eWMKRTaxprqLQAuxsxXKwjUZEyswMCNTGUOfGeAxhXJEjRCocUkGOBOZsINopOVJjuvUiJrOtuznGGcr) (seq (null) (seq (ap i JiYBAMGShdpaxaiuNPPnCiK) (seq (null) (null))))))))) (seq (ap i TzxOHbljYLZdZNqEvEeRabGmySSaFRetKTJyLcYlDINpvYFeJHLimJL) (seq (seq (ap i MmrOMPWuiznYOotMyzqSG) (seq (seq (ap i PAiAPLylxusgmrofvepcMtrFwcaAmFGJsDhQYwI) (seq (null) (null))) (seq (ap i tzHTRiAxZGriDjSqRrWRmYIVnauRJFUxwUVnLJgWwyisipRxujyPmFjdIcJmqRdOePLsDhMIUuqcMCKBtbGJNbiDkfBMKYucz) (seq (null) (seq (ap i tOVJlUMYiJBFoijWcAwwfgLWfaRKwYnkigSFTUf) (seq (null) (null))))))) (seq (ap i jJlySUDHcnlqmWOOZMZefIdBkoAZDwmlfKUehZGnFsRBuwxRPLqVeHIxRrJbGS) (seq (seq (ap i uwiRqzNyNRLvJdoRV) (seq (null) (null))) (seq (ap i PunHTaVDiquXRHtXuyOxLZxJZZ) (seq (null) (seq (ap i KwKkOkTMEaruHWYgRjLHajkzrXGDAMwEjtJrzgoNvc) (seq (null) (null))))))))))) (seq (ap i GYVCtQkzaHFTXQBsjwjJCxaERorHZYwsaBtaqEQJgpSzNDaNVixsCNrtEhNeLMhpCQlwFOWpSrMufjsrpG) (seq (seq (ap i CqRPhHpxoKStfTijMquRwiJztyozFGdVMskudCEfcohVakjnJdQF) (seq (seq (ap i kECGgAJnrKnCoaquJAuBLhoU) (seq (seq (ap i mHYRtcPcsJDs) (seq (null) (null))) (seq (ap i PydpqmHoSxdTlQUpSiveVrdFwZLzHnKNFlfHvSrmStHszholmJc) (seq (null) (seq (ap i oUCQUAdMcXhUTGVXZQUTXAipTsCnQkDJvkxLCuIbdmWpUagRGTDmobzJjpFrfTbeyUgCpYKAiZFctSDGVhZqBdpHBZA) (seq (null) (null))))))) (seq (ap i uTxPEktkrqfjcrexbgknHsMWuszSjWBmstMIVZFBrxFsgCvJaAegRbnTDvTlAcSZXkaCirQlxLBkFnixrxHdmlCSwthqak) (seq (seq (ap i HDPCxEWBZyYfVHVzMCuKMpsekYsQkyuJNeghwhbbDiIyfHxjKmLbdPgLeaRne) (seq (null) (null))) (seq (ap i gLuYetUCVn) (seq (null) (seq (ap i luEmxXzXbRCVPgXPltmwHPjKqSnmMeCVwGJVPEWPJTZNssHKEeNkTQZErThmHPeoK) (seq (null) (null))))))))) (seq (ap i ltDOkoigmZAwmubSNCLyEvplxnHKEqHxpwZbZrVaXKRoDhvfpQdBBtmZBwDRAcWbRJXWKNYbAY) (seq (seq (ap i NfCAUAMaXKWervswZuVSurdPniufBmNmjzANkpVyARwJfdl) (seq (seq (ap i ETrAjgUCkkFmNdhuvCOHfRPrMkZQqXLsNmkLFddVuCHmR) (seq (null) (null))) (seq (ap i AuuhKvjAztSRrSxwPojGJqUprePh) (seq (null) (seq (ap i LnqZipmDhDGnCwDUCOtquAtSAYqWKnkCBQeDUkHZCt) (seq (null) (null))))))) (seq (ap i RaNegSRDDDFbBGZahkvxIBo) (seq (seq (ap i SwlxtRbmCpFFYOzixwyLZZQBufvnIXEqozEuZnYmBRfVYPNicoYxI) (seq (null) (null))) (seq (ap i jUEHfiZIquUtkhJVALCCThMOyXmolCglZJtDYOpYcIPLhEQVTLZmERblpwtguxhOuVhpfGUcILXFFNCMqHOzQJuUh) (seq (null) (seq (ap i EKPZCPxQDBpUOvdvzLydwoAxWqjRaagpXsRAzErKHIXflDJUNlkLifywUjCIqNwbrkzNKSUVHebqDhrstTIPE) (seq (null) (null))))))))))))))))) (seq (ap i eCGAktyPTJbfDVHAooXbrXIZafIVktWWPuOXmVzkMDnVK) (seq (seq (ap i OvFpUcPiVgYvf) (seq (seq (ap i FuCaMqsGCvxpkcYTUkIkSFELCGcjRtKzOopIbLSExbZrmmFXMfpFnkoPRFmiOxxqnrZ) (seq (seq (ap i nKXHxQeDIbOuu) (seq (seq (ap i HWjJLGUBNjjUsfLxLFSxdonnzCGghnCqDSxYnGvRIjswJweQUfETmPrMbiRlVDgZKmBNDch) (seq (seq (ap i dxpcDkstjndMiExOpAIWBApScIMLRnIAxQmSzMXkEZaVTmwps) (seq (seq (ap i SciGLPjNkePU) (seq (null) (null))) (seq (ap i pEHujdQKFSHKAlHVaomaDxtQpAILAevsXChCkfOqJRrrDzBuReDjQMMDOraoIrQFBtSXUkcpUgpqYirceWWoevFdUQG) (seq (null) (null))))) (seq (ap i KdivReSkgacFjTvqUsDnDqWBqpGiKBx) (seq (seq (ap i lQMjRyPgHFQkiEJxzlgoksqpgGN) (seq (null) (null))) (seq (ap i bsNFCVpfHbSfvdxTrsbCljxIUqCn) (seq (null) (seq (ap i QPFLBcNzIsayRHrLdpsLmXGgnohulRXhmRmWTrdOhRBfxAfQUpacvQLHNbLmlqeKnKOlxYAaKhBOVLVUXKKzXvUXuZSJFzyO) (seq (null) (null))))))))) (seq (ap i WENDWksUiRKJsrulGZhBLJKBMqBkPNOgtBdVKQjVgBBKwJgogYDNUoX) (seq (seq (ap i ynyqSJWKAeFzPQnGnvGkdflkxduOJSsvqRdtKXtTW) (seq (seq (ap i NsUeHqhSyHnVWDLwLtgQnHD) (seq (null) (null))) (seq (ap i SaXobmUwZdojZyxcVdcyZtoXqIDdoyhCXr) (seq (null) (seq (ap i QFrLSWQDErlhxslAuagVaBIWdvYtvuxphfgesqUIEDwyXIqEXwrkLqWlKtTSCPVSRtKCoaTnAqhjCYRmV) (seq (null) (null))))))) (seq (ap i eKKBTPgefLxxDyGuKZaiyLlglQ) (seq (seq (ap i VFUfbisNotUqKbqkUMmOUcycYlmyzBBTeMcgcHCeGYcFbrevGvJFQFjqjrXnjZCETLGdriPfde) (seq (null) (null))) (seq (ap i WWharPSMwcwBrtPeMdUFtFjmvLYCeqVgQyYKyHIyduuooyYogWfuJbyQvYpEMYlRiIEUTA) (seq (null) (seq (ap i pHETQYGSeiMHeMOifYtKm) (seq (null) (null))))))))))) (seq (ap i zEByzsWICgwkYChDLXnNiBdzKzUSQkFahCwUtmuGFuJAGSa) (seq (seq (ap i tXPbzmcTvaqQImrzKnuhAzQMQezopIvSPRjXZcWwrFGylxktVeqxVVZQEeNWgE) (seq (seq (ap i szqqOgrvnhILaCBVZGeFaBViYEnPDstNIMQBGETKAzjuXCGHMcnAHboanjzGmsCHEjYvHdAfjrfGOPnBVXivVYgzoBDxLWqxKZ) (seq (seq (ap i ApxPgrhstOlCMFrdZCmzvysbbomXSwBRwdnvZQIgWrNirhtRRylGxoZkYTMQvGnLvQlQEcXpZhcbNqkAGsBArzhSJxwLFRxe) (seq (null) (null))) (seq (ap i IFBpsIZBgSqoBVxhhClZxnWfLDekLNd) (seq (null) (seq (ap i FtOy) (seq (null) (null))))))) (seq (ap i HTtoujBqeSkZXWblzZvzhSyHXAuKQBbcEiY) (seq (seq (ap i EfOzIrCjgfGVPPibKpVtyvgCaNSaYTlvydcrFfG) (seq (null) (null))) (seq (ap i GZkvKicBHMyejcMLuAwzmADbhHxUKxbjeoUZqYYDdSmitUKqbiBhWaUFFuzvMMXEhSMJGHnWFKqeOgWQfpJX) (seq (null) (seq (ap i naANEwHxjXJSrjrepZkBFdnaSMPQjjYCeCTZZHITYn) (seq (null) (null))))))))) (seq (ap i GUkWCTOJYRzDRNJZcVDCuZLIizNsesRETuRbgskuLnLBQlIRtuOgNxFIWlUnJwsQvMNSCNyhtskHcsIZGAjxkhxoICuM) (seq (seq (ap i LLAzDbPDfsNoHChRyWJmzMWliUFEBebCmTrssUS) (seq (seq (ap i AsNEqkBrwmagyDfCQtCvQyHlZvsptghuREbBUVBSIsZuEuDZslTbUbFkNpcqDOXxehPPCJQc) (seq (null) (null))) (seq (ap i yCWWArHsAzbqIXZOxTCi) (seq (null) (seq (ap i STPawYymWQJXIXHuwKxtyJscDzzGJudZ) (seq (null) (null))))))) (seq (ap i dDtffhLLdUUKbGfmKjqBFnHEIMM) (seq (seq (ap i jRbaqtoXqFCfqPlSYhOPPhnDAWVuYyisPLAPPRyGFmccrlepXFHaIM) (seq (null) (null))) (seq (ap i ZflJpPd) (seq (null) (seq (ap i vBZULPEvYNEAabHgTJmlWVFhjbBsZbMAiremBIbOIZ) (seq (null) (null))))))))))))) (seq (ap i PMuoSwXlNumbzpTIeFkjHxdPiBerzizxwqkvx) (seq (seq (ap i NzwKzUgxGHRkpUuREZIcQZARBVugPlFKRINcpuPKfQrFLBnNnmlvLXpu) (seq (seq (ap i NlclSgLiLOrogTkRcxcxNMRFEdbsZMWLWBQtycQOxoXtdOAIiBJOKaDHDyzyWywzGpxkgKYjOYgiN) (seq (seq (ap i HigUVVgxrWdEyjxGigqrXRtjuLywHzLHnhwRvJuxLoXaVqoQdACCgayokSRFrAqBbgTDEXhsikaeRxGu) (seq (seq (ap i cBbziSmPzSZAUSIbBFgCigvQJqcdCiUzHFdbjgoyoCNCuoosKyv) (seq (null) (null))) (seq (ap i xefhqFFxqnmjqAXslAiPzUQPGkXrPlCIxbPwSljnHLQ) (seq (null) (null))))) (seq (ap i YWjGzJMVrpVEfmH) (seq (seq (ap i fPEAEQjypWIgaSuEXhfGeXCjNXXKVemwisstvWivnEPJpnTIgepJloVavEwizy) (seq (null) (null))) (seq (ap i wmMfjHHYoLpPZplBzINjnuMnLjehTsfLWHkYofvxCVZvHOyVEz) (seq (null) (seq (ap i DSmlwKHkpgvtxjTsZrthYTfhRZSqON) (seq (null) (null))))))))) (seq (ap i GOvvTIslD) (seq (seq (ap i oXjJoIIzPFMiEoQGBfesfSPrhVUOFVtSiliNMhXpGbFoZOWPaxuPFd) (seq (seq (ap i YEXsiZbXqHrkhpdgOWkrqaWWwjbpoJnOWxEVCKlOJlyMbgpOHFiZpkujQCpjJWepxpLuXxVTcqtALSCqk) (seq (null) (null))) (seq (ap i lgZicjJhDDAnPmOmqKPlqhwExuGxaLhIqmDUBRzWFkFOihxrtZkTVGzBqvANYWVpOVWnQlBHHbmHluW) (seq (null) (seq (ap i NEVviVuYwyXCpYrZEZuzkCcFcCgFCIhTXUBhgPxVTqqTspkXLhBJArFpPohdtYFCKpdMpeQXhPCxisKJHyJB) (seq (null) (null))))))) (seq (ap i MYqNofnUkbWexQQOpminqvkaxtm) (seq (seq (ap i CYWScQrsEAzxizGYzESzFmTgHTGhEVnisUhjLivd) (seq (null) (null))) (seq (ap i JTMxIcZBMUVgcuBYDJrwACfOmpotaHlmkAvqzpsyYbPv) (seq (null) (seq (ap i JBxGBtrDXibxeCcvUUylylFKPSNNxJkVIgKryNpYColAx) (seq (null) (null))))))))))) (seq (ap i GnrGVUZCExconHXANV) (seq (seq (ap i CT) (seq (seq (ap i cjOlkIdenHosISjaKFRxDLvJolfXYMoYwmpVaIrobqLKZxtxXgdsKsSTTlOdmbPFDhRl) (seq (seq (ap i aAtshjnvUKCZevFXryhwmBvXMBnUnLZNwTVVYzKkmuCVivyzAWDnQKJCpIRXpzsOFWUhMXgtQcBLxUConoLwOYmCVPgEt) (seq (null) (null))) (seq (ap i lTzdhkCcxzhUWyHfISFbIQtAHyWkuaArCBtBIXijNTMfAMYMduzOMAjSebvUyeQjQmWPWiYvtbyJrRq) (seq (null) (seq (ap i daCWTUkBlBFCTHEyniuheFwvevBEioiPRxUpNhhfzcoIrqijiTbpaorvakQLuKEJzxKTaeYXyBaPm) (seq (null) (null))))))) (seq (ap i JOVuSdEPKsYgtgxlGGhwajOKbTUwUvlqdfFMXWNORSGNewrLb) (seq (seq (ap i epUMHQvfHtmOaAsIgsuGRluWBcsRHiaFOlwbGVfKJtDZHdhlfIojNZr) (seq (null) (null))) (seq (ap i RcOGK) (seq (null) (seq (ap i zxxfOKxYfeSEXKUQpNGBkgLXHlzEFYpSxiAOnizkNEKzKQqrsZekNvBgTMNUsLnbpacqsSrkUychMiXuxHcUwuShdebfZ) (seq (null) (null))))))))) (seq (ap i NzzGAetKHFMdAZZNJGjHOvTyzESPNRfDalriCMBcKPsUFLRQnZJblbdZQywVQNDkYdtRjtxoAbSVjOVpB) (seq (seq (ap i RBToceSiUSIOBYcoIlDFVuKsciCtoarqVhNThugwZwlevjEsGJIZySSOaZrJRLrhsxOPMWhLIPbRXFNUFmSkuAyppzQJKXjLy) (seq (seq (ap i JnmqrHYUkClCXzTYSkOKREJvhNnfkZOVrZkxLbLucjPZASadGuPcbuHzcmrMoKrngdrkQj) (seq (null) (null))) (seq (ap i OozRVJjRLCEYwGYgHBJvlWTBkWqXMQSUYLQMLgPorveKGQimiSgyNkMMiBBd) (seq (null) (seq (ap i zSRUNSAAgtefZOHvwhjRksohXXvDGWiijhbmYugvtulAmDALFRayhQfB) (seq (null) (null))))))) (seq (ap i OqFtECzDfphKRsWjQwcqyHmjCBznzcVNDdKFNplNbhlcuMkBJqkjXebFsVWIKFUNTuAhwzPrdjOcxhLCJlKJhsDq) (seq (seq (ap i WOWddObtlvOlIgUIojiOZrHIHXxQmsQCBaOTGxjFqUiUnEbueiuRJRaYvUJXg) (seq (null) (null))) (seq (ap i xBbqosDJAyBuSkDMKtBwSMMPEDB) (seq (null) (seq (ap i cnkISLLgILAuGjvszHTYSJZVDanVQCqHVTxCPQffujfohsLxBGfzxphqshqMoizTDOJDUviY) (seq (null) (null))))))))))))))) (seq (ap i WtMSeGCpqdDrsUWXwbOBZoDSueJUeqSWDUToNqxiCfbGkimVkIFRhDiLVfIrnAHnDXEfZvrxdcCSnVPJecvcelXAmrhhZKWFC) (seq (seq (ap i ozYmTkYgsNWNiwvfJilvnAAFXqtw) (seq (seq (ap i gSJtYdsuTcLFZnglNzHedFRfPXPpmLRbDDLKShdZWsWyUkiIhXzGMyeSnOraoLnmLbIufrozhYFSCQyjW) (seq (seq (ap i GFmxjCOPWjrMkkNCDtEjFFibUxEBFGlvTlrMP) (seq (seq (ap i IXfgJVaKIuoMucdTiVSRcBRHAGTKeeFtYwmPPxoHqUBoAPqUbYkkvXVGsUTwcxKeBjUfj) (seq (seq (ap i WSzpxgWLDabvrYCf) (seq (null) (null))) (seq (ap i lopzoXBhYOzyvBZhVNHtiokcYlLsomdfTCFQJTtRWLsHs) (seq (null) (null))))) (seq (ap i crqvxlRsVnHymPiUzXHGozq) (seq (seq (ap i FckduGxzLTwmXiKPBASPosOCFDKXsH) (seq (null) (null))) (seq (ap i huEdlIckRzRqwCFiNYvG) (seq (null) (seq (ap i QWQyfhyAVQwYVjgPVxhboTUnvISsMVpULiTnONvAsUlkhgJAxuVvfsJaNKOtjdKDOXfMuowJyGdNfHQRdntdX) (seq (null) (null))))))))) (seq (ap i NwgzuTIxgObW) (seq (seq (ap i luOxPxAozFcEbGuLJJwKfiXrmyEVqBurQDYYlWtsgGURIFroCaULflfqBegJMsqcqdBUoEWfMMAeLX) (seq (seq (ap i bWJfxjxIdpCrYlxLOgVxvXsShgWkEbsNtkgZG) (seq (null) (null))) (seq (ap i YMPTiLyWlsBgivYHJnIuFnegZbLeIokUFbawBlnKvnOEyPlWcAizLDikvsEjdnFVbFohelEmWYbnrlMhKuEDJsZRIjk) (seq (null) (seq (ap i UfLzEoMNGvcAeqDHeIItjrKXHLUKBMDWLvRSPRvkgXGeFUCnlKUEEIBsFa) (seq (null) (null))))))) (seq (ap i pZxAniLcHWSgPzcTUlfqyHhICtkSLpRNIzRkklYYaUXAOPXlEHkKv) (seq (seq (ap i MlNdTe) (seq (null) (null))) (seq (ap i CdTEVIWidMWGEjqvEYDdoLQwtVkdjtSQGgkoUNuXrrAtTzrWqGbCuxSGKcNqwDaxWvIrpqgcgxILCwLicaFlbKC) (seq (null) (seq (ap i mMLRdeukDgjgDfJeSwNeWbBPfhZwWwKxPcdGtbfTyqSVLIrcWgKicRgoocpVNHG) (seq (null) (null))))))))))) (seq (ap i uooHuPkkSUVJiNaBAMNTKlxdRK) (seq (seq (ap i JupQcrQaUFoIMchTUOsMnoInBMzMXbHATJSBbqIJjHUogOYmydEbfpkhVfBWTY) (seq (seq (ap i UDyvzqHqLNaTePyDkTDiYXClmfdPKSse) (seq (seq (ap i RmgtRPIxPDHQuiJLbBsBLFwYrukkaHHomoFSpVY) (seq (null) (null))) (seq (ap i qEGJsTHaNNoo) (seq (null) (seq (ap i gesYLcLwboK) (seq (null) (null))))))) (seq (ap i ELAllWQsjuXXaGvSNUZkuDxzEYonlnNfpTEu) (seq (seq (ap i pcqSfEqcQEqmeFVEvLOsjtdXgnNyQbwFJkEvQiNShyqRZKhAaYNOoubjFZuchmzZXqhtCCqxLnjQvCfRHDOXsEcnyewlBRiohk) (seq (null) (null))) (seq (ap i DBSVrQkAJsaSyAEkVJVxwdVBFRafZeGMqOtiJJgKqHmbJoMLgZmjXmiKbwOQioYddLebpzZMbwHYAFmnlDlByzvkafJaOzIWw) (seq (null) (seq (ap i oPdIRVnTnlYNNxlpOdFRVgBZDqePIlYoZPkWlTDXaVKOwwsLPsxPmsphGufZArFesBnUxfJjTzYratFvNgqBnykzfBkRu) (seq (null) (null))))))))) (seq (ap i HuzPilqImgnJPaDWebIcbXypWBzqkEgvxfXgGCRmvdNORczNHgzxDpeWqlFBWPRtCQscHSjYCWMSMmValtoSO) (seq (seq (ap i YKrtZWwZbaYdtvVqrAbLdRgMxjaeWQEjbLkzLczYoqBcuhkIinvwfqqbKO) (seq (seq (ap i aXLStaKZWhfHWTOhZTyQTcnslQzKDKlOAaAmnboHrzpaCDJgZrUTjdSZEqkGavrvNmJUbjxjnWhQKJBASfgxDIliYrYcpR) (seq (null) (null))) (seq (ap i HNZvrQyGIbTzqmGEArkyqRkUpsgqQOVBFlLdHznlhaGyCYJ) (seq (null) (seq (ap i JbAD) (seq (null) (null))))))) (seq (ap i CzQkTDsmlkygJhrdocSmTHuOWOjYpDatOjTGJHQYIwDRMadnLnnJmtXccYUtlOIdRHpNhi) (seq (seq (ap i GQgBbXFerzhsPDFZfGKqEBlZuDqvSWZrWzgSotblrbUnTgfyrPpzXGBgZHGrvIbJ) (seq (null) (null))) (seq (ap i cmVUMIkoxdOSOGKIsSmCbjeIugyBWhZZeYUxLJjNINlmWJzCdCAODCSwSbqvmhlrNqzXLsktKsoYM) (seq (null) (seq (ap i wkIH) (seq (null) (null))))))))))))) (seq (ap i IEmhcFJMZeAFyYiPztLfIRpAsxtuwWnvl) (seq (seq (ap i bwngnqRXfNWAxOIBKJcekLDgmJtCsSwSHoKRjdUfDIBPXeJsbPAQRiq) (seq (seq (ap i fbXHCAWIUmwopXAvDNhOhwGsSxFRGDvPlJFkArAjGzElqlHEwvhTzwjve) (seq (seq (ap i ArXBtYGMQhoFacPQzdEyIzrkqiiKHXLFqpTTxoNVBCmVGpLRVZfeYIufVSMonmOfWvjvwQbPwFAjXDQkfy) (seq (seq (ap i JWCCrSaZBkNMXDImBWgyzrVPDylyRiGvNafEaMUVLosvzoHBygRCXDzjGWhrctpdidqxGRJpesBsLky) (seq (null) (null))) (seq (ap i pGCzrTUifAEItmMxRVAJTKEdagjNbNGAHjRyqajjmecOXZIeQbgFOlfnCKTeiMnUxZoLqwOUiXSjAHAtpaRhMUPyjAgiKLE) (seq (null) (seq (ap i LcowOCoiMubdPRKNLdqovTnPsi) (seq (null) (null))))))) (seq (ap i UwDThbGO) (seq (seq (ap i pugxG) (seq (null) (null))) (seq (ap i eLuTHoFpdnlhRacNNAOZfPRpku) (seq (null) (seq (ap i cbYKQpMinUtEBxUPaZQON) (seq (null) (null))))))))) (seq (ap i oCoXmhapZcxBxVaPJhTJAmVQkJzGOxXWbWzCSZdLSxCQgDcSqZ) (seq (seq (ap i KwuVqahaJmJvOUWvnkrhjYWLFPshrSryixvtEeMYEaotwceypxUvZMxSsSYLUmfCLYKTtyXsGRcaUxmDngxuEfJVANLSixbSCQ) (seq (seq (ap i gFMeUECjsElbwprqDylRBqTotgHdhxfkIyQqZoftrRFMOLnmgaYEYprZtQblxoSVVGnkErQLRrNVMuhPjRN) (seq (null) (null))) (seq (ap i oFkyuchZDuzfVRyisClYDaXAxtfrxQjkQsQvMDUrzArzwAmUednpeHgzxw) (seq (null) (seq (ap i cEtJPdTWyprGRYKhP) (seq (null) (null))))))) (seq (ap i yXOSDMdDGfSIGyFzZgegZyHnkXAYzqvUYEjQRKcHynJmJFRajSkFsKCe) (seq (seq (ap i ii) (seq (null) (null))) (seq (ap i KHYlYqWmXpjktDJJbvaJCAnzdskykoYYQkfVCVfiHPgHTgtgepJpubNFOqzjVrWtmtFeZdQBIhvCxR) (seq (null) (seq (ap i rhGbLzffUCFNxZLrLVSsjivWMNlbreoEfMPQxRIwKoVgGYZFXaYHafdKvOTczFVkDnOPS) (seq (null) (null))))))))))) (seq (ap i OBlicoZJgVdcEHkPHfuodsRrkXODLEwQOPMfrHPExrPWdFrCUNxvVIkSIZugbOr) (seq (seq (ap i tdAejbFLNtPiTtfgqMsT) (seq (seq (ap i PsZQlMBYigtOFWmjlWWxR) (seq (seq (ap i HsjEtNsXFOETFfeLgXUDkLpeQCQuUlVCstDBhTBUuQprPykfHWiazrUPsybvxbKZJaSfMRIJ) (seq (null) (null))) (seq (ap i tYLXAxSWVjIeVySxktwnIZoddkucwDXlFsrAVXLtpZasYKFXUTmDCMhmsGclDhkDsWs) (seq (null) (seq (ap i ERhRiYXFQlAxbIvqUtAVoFjmqqwwuoMfrwmDWyPBIdIgnhJZHQdiZjohfIVUxqRMUyocVUffGThcxlxiMkyko) (seq (null) (null))))))) (seq (ap i wxwLZeGrFlHEqlQDfCVTmGSUklJiYVCbzJVdzgrTvZMdvpKGFgp) (seq (seq (ap i YrgHRXNZnkeianBfpFHFmDeltUmeBwJnTqDuDNmqqoDNeDVSldTrXItOLQiRpNEwpguaqGRJoanzdVgrKwQfJDalpDdyAxWeKE) (seq (null) (null))) (seq (ap i abmsEujhZZevuPEPnCETLmiCwOvxhZPPAfOxdVCQXdYkrujyUYxrdfdPKpQNgeUJJWDnCRzFsrQroAVfEhRpKXIRvPI) (seq (null) (seq (ap i PTuoeMfZVWsEdHbvuVsTAeGEYiSQKaDFptKVdwWtZcuKYmmqJrlSwFqMTjJskeZCbSmkddoImnOFeJNLcT) (seq (null) (null))))))))) (seq (ap i EnRhwHmDQMoQLRQgrCVbELqrvvaOFfeFvKlgqfnpKWaCIfAFoyYAsuXXFjBsSKioKCBEsoLcMejgwwwyfvQr) (seq (seq (ap i DDDujvLOMLKbRsjLYdrVDQp) (seq (seq (ap i UmpnLkBLulahkIWBvZDttVFdNfpkemvWxUikmuCurtUlGbuJUtbcop) (seq (null) (null))) (seq (ap i yEfcNNpmEaDdqrFBpziAjMVrppKupGTZqBdpExtkZqTGOISsyxPyXPpPZDlCqKDrElJikWIuwLSGVeumlLcLXpiqLl) (seq (null) (seq (ap i VtuBslrMMOzvewsjtfyeaLlILxljOPQ) (seq (null) (null))))))) (seq (ap i VXcJZXNmbccToOFSYdHQTpNvhTSYgZdbKMKGNxoyQjKbVmT) (seq (seq (ap i dIJfGIYtDCQpbgborAmHXUcoSrFTuYbPIzIseeijrkGGxNPxfnbdyVfMppZalxhuskbwvITmRgHnUde) (seq (null) (null))) (seq (ap i gqjLcfOPaWtaagLmptIYZBomGF) (seq (null) (seq (ap i THIpTqfvWxVybbxLQzstjrzsEDgoUMxjPkmlhCeAhsfULQsVL) (seq (null) (null))))))))))))))))))))) (seq (ap i osZLmRywWEvnAbMtfXLgxGW) (seq (seq (ap i lEpSfDLCTWmojhKxYzmPdeBpXRshYRuTxGHsPneMBAvkR) (seq (seq (ap i HWslYGXzhFpBnFmKiEvImUtgYqKxCrkMHfBDYKgqBkwXLbaUrBKtvqxckEkQHa) (seq (seq (ap i qcmDRwBUiArn) (seq (seq (ap i sPYOlgYrDPxQtgPtDQtrLnDLpRLLWkueDXhNCqFUeqLcqnRdCjvoieTaKhrzwxtLgDMlCTpNvhysUwfIYiqWcsIngRpTtHOKmMAG) (seq (seq (ap i HjKvfqjYtWOZkApWZkbsCGrtdCZUYbOSedguLcLsMrCXZNYmeoIJrLYqSgxetGPmgYZFupqRYbqgcxjvYWZCQpAwycDqEWJnaFMm) (seq (seq (ap i JkOxaVAmzFxQepBbDUCQVeMDdmHyNPnolRxngStDJSDeOtwAgQrzUUndnAFpGEANWWMXOuSh) (seq (seq (ap i uCENwCQRxeklNEwTXHLhLHYqnQDktjDWMRupNCAJfUomHzdRNhD) (seq (seq (ap i BFbsUwdkRVScmPZFAAjqTgFkkVvMAnZDTMwHdwEsHFaWDvIVoFSRJECTf) (seq (null) (null))) (seq (ap i jhjXmuNOynfdXKSVUylabKUAIQARYEDKxLhPiVhmEQPcDfoqVzHJOoZxNmUeaoGdFSleFNjWOTzcQ) (seq (null) (null))))) (seq (ap i eevjWUxSieFGuuPUCoSuUHULIEFKWSqYJIWtbjxOttuBKrBrpfzSoWOErMezvhKeFozSipGtYEClpuBtqBO) (seq (seq (ap i XUvLbsIrvQzpixqx) (seq (null) (null))) (seq (ap i IzYeHXcxkoOHtlFtZjtWXTSweHhOxnbuOwMjmrgzAUqriegYdPGIGAAghyouJOeqyHTnsNPoEeIJCGOfCCOmnjrdHyLt) (seq (null) (seq (ap i EgvYTxgmOtuQPRbEroeTAXsvAPmCcgLfUxnHuNopkaxokGaVigNKspTaBbiXIYom) (seq (null) (null))))))))) (seq (ap i FxkLAEHqGotwJcIbYrrZjoGfFlNrGnigPGRsmxqiXvxBYVuBDmptQOcZFeqIzoabDwRPcroKhYRKiEXMKeWtKuQunbYo) (seq (seq (ap i pUdzqVOYYKjIjdnCJiDPZfyWGiWxFnkDcHvbvANjGLDn) (seq (seq (ap i ZriyFkZbOzHuoOAPBHjwlffxxqTzwmqNalTbbnsQmyqQBLifiHL) (seq (null) (null))) (seq (ap i nEeNQILbHTaLDYUHbZYyAvbEmITNEFaInLXhGsblLCPqFzfsCeUjoT) (seq (null) (seq (ap i qedfwzXGWHEHyscEXN) (seq (null) (null))))))) (seq (ap i HOilQpThehL) (seq (seq (ap i llGUaCLSOhkfSWnYKiCOzsnYbj) (seq (null) (null))) (seq (ap i exsBlJtqiQgYDyZmkfJooeuyAeBdpAEadiFxUDfOAjrxKPAyrHLxkvnWyV) (seq (null) (seq (ap i BghyzOzPIkVNQjN) (seq (null) (null))))))))))) (seq (ap i owlieFAiomrFBrI) (seq (seq (ap i FoRXnhVElthXBjthoKQkPWvxXCccTAidftEtkcMMNqgAAUQqevYnxlTDggHTZV) (seq (seq (ap i cbhyapHKpVAYBbfljpBKlIoaUrmRaxgdeRUrzvGVgvszNEUFoMMnNoosfUxF) (seq (seq (ap i XXpnyRDZocnOhPiOVqLSJcNbGtHMNwwwBgiuaAaiHRcWjvjnhCKAd) (seq (null) (null))) (seq (ap i OpuDgQCxGBLGtcJcseKTrGzjzaDcCjqduyj) (seq (null) (seq (ap i CNuvRmdWPQSPVLKldOnTULoyPzpyLNLYJlZWqMQsgJXvzdvRmzsfKbZHPkCWoEYzeLncaLMKsStCYqkhFXEXTHhSZEqtOQOEj) (seq (null) (null))))))) (seq (ap i ibMNIgfPlWvfDuJBOHyEBCdPKSIcwdYlMsnlGfrafgFrNGnkRmkvQJxQMnTBnNwhf) (seq (seq (ap i HdYHWWUzKTWPyelnCMhzkivFpTVTkPkkGWHmGwrdEWjDAgSmTlleVTJNvkAJEyyQrZglvQezyJNZjIiklaFUHF) (seq (null) (null))) (seq (ap i MeXmw) (seq (null) (seq (ap i BcIoLgUzHHlwufPcYJZEuBCuYizQsWaOySdQpbKCzfXcOPXbNaAolCgalK) (seq (null) (null))))))))) (seq (ap i heqpWgSVGHtgzzPEOViFWmGZuesRBvReNRuoiOxOlhSwgOZDFpucDawmHhkIewWXcvIJAmsSeELJczUAyxjmZVsqCEPJhqsoRvOm) (seq (seq (ap i DxXVWUCmxbRqQghEzkLqFWBBndGHEhrrBIGnOVjdXPDq) (seq (seq (ap i DNnDbBcoxrPGjykOYPbNjSELQPG) (seq (null) (null))) (seq (ap i zHCJnYpdOoSIaqsrffXuqktPfCvzSMwWYmSRwUSIPJvpbFgBzd) (seq (null) (seq (ap i lUHadiUarpKAuhTPtadIBuIjSGlOMNChMNsVUNoYxTzOYZExnPBJbAPBSTvaSSUYuEAGKYCziKhVjoXruNIwtKyBnGRSUCjBkrX) (seq (null) (null))))))) (seq (ap i UzzhCfGmvzifbjmrzMUKevsBOUAgxbNvrOFYGyreGovumUroSqIsgOYfEaoJHhuRBBZFZfMyuUfWarIxgotvRsuCdSVEJkdVxzK) (seq (seq (ap i UhaswtKFISIarrqfTbEvlTQaNcjnZXYVvmkc) (seq (null) (null))) (seq (ap i pFiuilKIeKRyIKxdDvTTRncCkdNLtwZfbmrYgPXpONEShKbrBjpNdRhpEAQJrBNs) (seq (null) (seq (ap i MQySpjLrdCrnxmcsTMIsNnhFcbGzPAkSFWWmojJEZgHloRIdocoyBJnjmBHHMCqgMLgqZMHtpKtn) (seq (null) (null))))))))))))) (seq (ap i qsDHneYVNW) (seq (seq (ap i lAJHsCffFnpBTmVGSeaGzScXmYvuGFEYBOmumyIlAWdNPwcPYueDsxGICpdTgDjNoZraXcEsvFdMSsJrSmowN) (seq (seq (ap i EONnBiZNczbwGKJJbpvfROJnkNfjtnbTWVCbuCPCoctaFQAwZcXEHJ) (seq (seq (ap i OPJhibgIIKrClfyIYkqfRvANeMYCyPcvCIuYgrACrUdfDTrNZBRGarlGIlumORlIbCJTq) (seq (seq (ap i GPaSgM) (seq (null) (null))) (seq (ap i rIfrFermNynoUAxedfZatilkC) (seq (null) (null))))) (seq (ap i PefsjIUaqEDJuujkSpZEPNkEfbaHxKLyt) (seq (seq (ap i ePEGZBvKlHlbTozWdClnJWLoIqnQmLwCFJMnLXwwUfhklCnqwfc) (seq (null) (null))) (seq (ap i KzHXKGIKyuo) (seq (null) (seq (ap i Vi) (seq (null) (null))))))))) (seq (ap i bgynsKUiqGiSIKQXXoYujRubnMjHreFmfblMHqhJmFCmHSyrCIrJRjYDAcyVjFMo) (seq (seq (ap i OWqSakMDoBUDeGuNqodRLvnfkPoNdzwACyB) (seq (seq (ap i zlsOMQkpdCuEjXsbidtJTJhdjcdjdCDzw) (seq (null) (null))) (seq (ap i KjGBnSnLxENqTCyAwyMiHYgLMlgCZUfgeLzXepPRwKoamaeYgkQZ) (seq (null) (seq (ap i INBNYWopUmBheZUkZhFwUoFjWBenCclmf) (seq (null) (null))))))) (seq (ap i krZflpMWYZAYphSOoVxTDvvloXeToxCIcQQmpLqzIUqFajJfjtcBKDdVQjtOLuWPjWOTHjDiwekqYKZsiQ) (seq (seq (ap i iGcGwyghpHEAkwVKrBdZSlNueNJoypLLsogcdKTxClvwnzsFoEVAPSDOxVUAhnQ) (seq (null) (null))) (seq (ap i HfMTnnAYVMPGtYmKjmpTzAhJIkmaHBEzoh) (seq (null) (seq (ap i ErruynUgUPecnRABpyUmDFdrbstjDDXdISBZdkGtmlLAHrDwPfavXwHMVUGhARhyHOEGMxrJdijVbmwgczrMAfks) (seq (null) (null))))))))))) (seq (ap i BVrWzDRRJSeOWjpeOvEHQHupDxxHJPYFxVkEQHrAhdfftGVajUPkDWcuObzyPiyihGchclaaGOYqxfJXzQOOdzPbAUWvA) (seq (seq (ap i XMdwKIBtDGplTbrbaQFSQXNdzkXFOtySSFbChwLCovQQUuaoplqiuSMeam) (seq (seq (ap i RqUWitTztpJQSHKLPHOFnabNMuQUMRSInSzZxtOIAHLuwHhfEYfsVP) (seq (seq (ap i JigzhtDAIdsCpXzMsefxoXNOPxpYGFvXEnsnNuoZjoummtjUNVVHLpP) (seq (null) (null))) (seq (ap i HJsRSmbJttTyxXllBRhXqJoazKRusVkBDknDVE) (seq (null) (seq (ap i GueMopgGcRdhPcYYmUaRKXSLN) (seq (null) (null))))))) (seq (ap i yWMYrtMjDKzQEhsSDeUdRpFWJbxcnIohIWVkRIexuYWirulzlPKkGamENalsfvhDhWoHIITANrmaBUacPkQEpp) (seq (seq (ap i JAJdvrxWxDSAm) (seq (null) (null))) (seq (ap i srxSVKNiTAaCvBWTrYzpOZkHDorVGdfhHNZyEWF) (seq (null) (seq (ap i VmpPRTxGYRYxIiwyPIEaGVwHoE) (seq (null) (null))))))))) (seq (ap i VxiSRJhFICewBgNByVQkECIZyhxWwGQkZfjSHYDinVWrzcOfidodtaQowdNcZUqM) (seq (seq (ap i JeaTxqcauulEhnTiBfMiZbfl) (seq (seq (ap i LudGfjVrgOQMJrrYaTGHKTMOoLAflwBFQWrNoRbmRYCKVzHYaZzGyBuYqBmsGaOzbjROoA) (seq (null) (null))) (seq (ap i ygvDVldrAGneskLpBkumvdzBbrEtKIXZPFbmFXriAqaAPDTSkZNiqyBCuEVkQymZudrLxtjyFswrdCBdAHxyyjzRyw) (seq (null) (seq (ap i vPCxfibWAeJExxXxzYTzuawiwLWrCkBSXZCHcIIFawcDyRBALGZFRbJvXitORHbmIzMyhzmAVJRSPucvaSjbcImgVc) (seq (null) (null))))))) (seq (ap i GNBuRMRckhjjKenQmvGPeyftlfrpoMlZrhqZnRMCQYKkXaFStjHvoOqUvoWoOBZmuvkm) (seq (seq (ap i muwcywKPYgJGreRfcuTzikAzyvuTGECddcXIuuIWWvCaBTzDDmFqgXhPzsUb) (seq (null) (null))) (seq (ap i kUsWcODSvTBIYMIspjgzLaoLCBItzgZNUuEJnYIHZalDsszlIwt) (seq (null) (seq (ap i MYfdEOnPWRrlcxzHqnttUSYLNTwON) (seq (null) (null))))))))))))))) (seq (ap i vLsnnMWXRBxCnAhsPQWZkpwjvPtOHEUlSAyBltTEPQElIaAokKBY) (seq (seq (ap i soEYKEgdwkTZEOQvbTdXDva) (seq (seq (ap i afvcPKfHheEuvaesqUBiPVyiQaLenFkuDMmjZGFCttKbosatZexCBsFDvDwpwUsOOnfeIYUiqMWPdKRyudTwVidQs) (seq (seq (ap i whJpEYGtPphPbjqHOcBpdXlupJVQdEMBvhaSNATNmfUBKcyBVmUZHRgZvAzWMJKZXfaDYcAmskWFgKhZUydjWiLCOYivfF) (seq (seq (ap i hMmrtsnOUqxnNOdbzHSPXXbTkYZCEoLjxMkbJiFPRKNpnUgntZjOQpiQisLBhEVGpnxxTUwIrGp) (seq (seq (ap i kJhdkVhAHMNDiLmimWCNFlzM) (seq (null) (null))) (seq (ap i PZyhHPOSthERIDOvgORtkpRIsXgmPqmdVZYpJvtrOFcyBjJZZAXtuiuXwcdspROYBCEPlZbJojmEobchBr) (seq (null) (null))))) (seq (ap i msdmXZpLiRxsZTdxJbJSWmEWsAWkeCkAXSkcssbxgJDLEgKptyBqAglAGktem) (seq (seq (ap i hcfNoHUHbmUyQvtDtrRKuOygqZLFOAiCMvZoQFKuyBrLsj) (seq (null) (null))) (seq (ap i PmzfSNDKbmwXSklGkVoRYzHcFOSHJSRjQkipoamDcgyaSAt) (seq (null) (seq (ap i emrLPdPSSghEVrzGVdsQPmNaXAIfBNLMTReFGMrzpqNfHwSQusxlUhoKaZNFkPWGHKHZMcWO) (seq (null) (null))))))))) (seq (ap i OAOXtGJgMKZjdcSINlahFiHdvkBoHlrVoxmooZwLjkrdohHIM) (seq (seq (ap i vZojvkDvsxyUCZ) (seq (seq (ap i UKQPoczwPbpUBkiVYeVXrtIimHcbLOeBFfOFftPIfFtgr) (seq (null) (null))) (seq (ap i OjEoRjsNrRrYApHZRZenPYIScIyTCh) (seq (null) (seq (ap i yGRCHEeVHSuqcpCiKMnYVGgmkaNVNCJ) (seq (null) (null))))))) (seq (ap i DVzfGgTVYxxFCuPzrqThoLuGVAeWWpuzHTpJWtcBzvfoRFgqXSywUtmmEDbrW) (seq (seq (ap i EWzYdbMazUUDtctPwHFqnhupGhZRZrBmdfFKuzkH) (seq (null) (null))) (seq (ap i kUYeHYVvVLRBjKsUFshqVTtALCDPocXYSr) (seq (null) (seq (ap i OiKpuQMLXXwyvHkWpeBVvktoKreCjzruTsmTSNRSoNMdEULyPVbLIDoYoDVV) (seq (null) (null))))))))))) (seq (ap i dQMpNeUdbxJRjRVdwkeWYHSRzFGbTUZFZQbaMtaCqQsHOUEGoztFPObIKxuDcyBcvfoVorMizeRGCr) (seq (seq (ap i fHEzhRgtuZEpEHkCYILFEiaMCYAZExoxiPmhdVLuLCspWzbtYAKbfTXzvQiBOxpRBtvULbBdWHbb) (seq (seq (ap i bmRkxTGyZGHCrbuyLSbyUYhWILiUYttKxQPgvjhDXBJWTFxpfcpJpfJfcfQykXDeeCoMoSk) (seq (seq (ap i LSepKLsKzAlLjeFwZZndLf) (seq (null) (null))) (seq (ap i WDNRISaAbgUjppYwWDISckxURgWHcYvNfmVtxuMhYwPJyamuzi) (seq (null) (seq (ap i OqdXZeYGxgsOMixolJozxpYfvfyMLABrsJbOrtDsjYnGmo) (seq (null) (null))))))) (seq (ap i XrvVvheLDRurxQUIqLhrAVkWFQOeOIPlojDzrsEqHvE) (seq (seq (ap i NgoTolEroCPkYSvpkTVHOxbERinpEJEoAAUUikMwOMY) (seq (null) (null))) (seq (ap i XdXeiAzxFvdHTXSyXSZwUbRRTttAlciomYZFDORgdYBOEwqlRqGCFqfctMMVvbpNdIIFTvgDfQLmXidmzHhvZ) (seq (null) (seq (ap i CkBgkWYLjwaLGNmirExqkRciKRyuPZQfOErOaSqeiGQEYJVIwHjinzcjReGSTFouJAAqfJDnnYvOdTiUumGbkck) (seq (null) (null))))))))) (seq (ap i YTUVWARBMksQEFsyjWA) (seq (seq (ap i NkKoGxOGQsWNGmUubYpjTeySSouSeNSosltUwEYuQeieYKNjpHQeYN) (seq (seq (ap i JmrGeMLZlPVUvFWTOHTwJvrgRsLWhcNrIJZhAiqEIcOdCSrtyxKpdsCjAGnbbfEgnDtWrEnpWnRyyPsnpWhdVh) (seq (null) (null))) (seq (ap i WfuytiddQkKQaEENXoHKXSAQpnYsDzOuObdsoHtvRKfnlTLjzunNetCnIsSvQMEWaXjFiBtKeyeJZvohtLopuOvWpuTTVWeC) (seq (null) (seq (ap i AtArcgqunKqCfzhxOCMUvqcgzvpHwpQaeVlfJDrFhplaNJGKhWHsAFzSUiqV) (seq (null) (null))))))) (seq (ap i RMDJOcdsiHTSGcskXZdxbSRJoFDBVIPAAjNDNMBBgUJ) (seq (seq (ap i PUjWzdJBgiazFbtfNyvpuRdkdZkQxgFWuWjLzykxeavEdEufAAdlCsgaCVFbq) (seq (null) (null))) (seq (ap i vCkIsNfEeLzWwBsZYFjaGbvSasDanzbzEsbXvEsZhMwNFCpTfDEdpFgdimpPuNsjZgZJlIDlhsXImyJBw) (seq (null) (seq (ap i wHMiejdknIwHuCviBlTyTEmDdrwxKwiEfJOUzkCJIzoiAutyPrzSAtixeEOZfOwlUPjbJYLVmkvOsLZabpUkQZUrbDZmonjOuXmQ) (seq (null) (null))))))))))))) (seq (ap i WznyRulFGkCheJlAjChxWEXShDUpIvEQzbeeumdhPMHmSvwKHkigkcwHUhkQtSSzidaykMFBYtmhEgCIGKajBUz) (seq (seq (ap i dxBxsFJrRNMDmWrFyTNHXcHnxmDZssXTZmwUDryfWNaYYRtH) (seq (seq (ap i OUZzNszMCXtwqphOmTySkvudGqyJyIJHGEfWZtuEcDqjNAMotITRNSQcolvARnTATspvYvWOUXUPBFoCKPqbMIrvQTFZ) (seq (seq (ap i kiQdjdwtUDEpKUIhaIkXApblDfGOIvLDLlZNKaQlDSkikGzCZWWwjJDMdNoFJOqVeYtm) (seq (seq (ap i EDOGYRMApQGboiFjTzYrEllTvijVgnXoAQNuRHDnnkjqMZXHggexcMEDGTgyqPJjLNfHLuSVgoWaOvGIv) (seq (null) (null))) (seq (ap i gqatxpDHFzHbuZHoFzRWLcQMdjCNgAmdIUIhpRmPghcHapAaRvAbTptu) (seq (null) (null))))) (seq (ap i ovuSZahchhCeeplJDreKusASAdiopvVqvGjuiErByQWsYKdOMOicICTxTEgDWW) (seq (seq (ap i lsorPVNnXfgpaGXgkAhYRzvxhuhwhhxxWGT) (seq (null) (null))) (seq (ap i gGDqxNVvQngpsVXcVrrijCE) (seq (null) (seq (ap i cVjHeQUppxsrIEvnnMGDDvLamxypzuvqFLVzSKzLKwyjRBNWa) (seq (null) (null))))))))) (seq (ap i quadxwLweYAehgHcju) (seq (seq (ap i qjXfgeGnJgigmyoZKvxdZWOJEURvoIYzQcrczxhSOYVhFWdZcsbWqbyfRVuWmAguVJiJMhlutcrdTZimvcxHWohPcE) (seq (seq (ap i vuNCOOfsOYizHGjdquGaFsqztAoFSkz) (seq (null) (null))) (seq (ap i uMeyRtzvEORurTOmxbmBZfuYJGIakfeGXgxSGBcYEQlAXzqUortWtbaxAZC) (seq (null) (seq (ap i vVFfQpmoASTCIg) (seq (null) (null))))))) (seq (ap i WnJALTPDsFckfPaKGxrpBbYSXIoNQKiAJSDYDmqZTM) (seq (seq (ap i KZsVxSTgHSBmRzcsYFsdUyEnlUieNNgSqBWNMFLzyuvjQgdWsYuTqLsRRVRUAPbeBChixdjjolCMmushvld) (seq (null) (null))) (seq (ap i qiaWWUYuZRRGTSMvos) (seq (null) (seq (ap i nrWaSPsDrtuCYYtKTSdWUHwbOUnWoIbQyIWujCZuwtNqWXhzgjaHndRLZPAVzLWlhHW) (seq (null) (null))))))))))) (seq (ap i xEJUPxkHfModIPyqKNLYweaiLDqAczWbACtEjYiySPIZkhNHwdhuPsZbJrBhcB) (seq (seq (ap i qKHSINusjzRqNBzFKKRHrXCJfDXkrBEcIVFoFB) (seq (seq (ap i TVTzVIEsvHhbYgSHmWBLn) (seq (seq (ap i YtHrxESzABPqLNpoODxKunSLQIQgVPDfxuVuYLgHmOgSERIsDhWtcMaIBfmLTGLMFamcDeyAClrqMJSPVejHCi) (seq (null) (null))) (seq (ap i BGpzzOLLBybdHdjSqPGojkvfOusVTEZUqbykhdGJPdHNUHeJAzQrCNgmfbkAGulueiciCHxmOYZucJcZGBanLL) (seq (null) (seq (ap i ZGerUgjBPbZVmFSHIOEVZleTpRTNfHysGXOKWaBdeGwKWwfYvptIF) (seq (null) (null))))))) (seq (ap i XFTxZYYEYhzWWjmQBOxmnXbwljgNVkzGhGcHsjNjFkkhOhBzLyTnDmJiuFVyKfLJWWIaUsJKqOgYr) (seq (seq (ap i XVoqIFXTiutVSLoerKJbvHkaYhjdUUPLQknFMBOkofMBOOYPU) (seq (null) (null))) (seq (ap i irFdzREaXSxzqcYyUhLyGWzvMnUIvDjyUoWjchCkmBgmZg) (seq (null) (seq (ap i dvKdYqEwIAETGyZszoFelMlUFrsJeZwKY) (seq (null) (null))))))))) (seq (ap i VVFwxkObzHsoFZaQKxwSGQAqxdYcWmACbMpNGdlTaxduDdTqMRPKHsEYlGdRLDJdBzoACGAIHEBXhNztQVaheiDmMBAqheAqxUzN) (seq (seq (ap i FWUqo) (seq (seq (ap i cirglWbXPclCO) (seq (null) (null))) (seq (ap i dqwemyyDivksrEzEAtPmaQccLorfnljEEGorrTqHUDpApescmdyfCX) (seq (null) (seq (ap i sceStqCQoKHjCCBRKmXRIzCpkm) (seq (null) (null))))))) (seq (ap i DYPicqWGkcnmkFAsKdCnUsJBfOakVWPCqNrQalD) (seq (seq (ap i PZBoGgvvnLtrDvBUKcaCcBtRafCUZCAujTsLooJthzIkVAQmkEWqALvjarVcQPZB) (seq (null) (null))) (seq (ap i sividIZyuecNcpCuoNpTHNtqKWevuepEzpSjDPvVhWulIyYAgupbQSPMVcDyuORoGllrgivOHqeeCvqtYqi) (seq (null) (seq (ap i gxWbBgmvMxmZAnU) (seq (null) (null))))))))))))))))) (seq (ap i EfSPNDisNhteGhdFWVqtYUwPHZVEriWxpqRaYiXORadLhzeUeWWMniDAxZtJUkhkIcKddmhSzYTYvzX) (seq (seq (ap i pvXhPjuCSZnMJlRxHLUdfvtsEZvKbKotqGMPPRntQ) (seq (seq (ap i dBoSwkCMCYRdtGTwqEhoMfgCkRVgXIrhBtkRJCvjY) (seq (seq (ap i WmpGyVHNWiPjDfEgcWjEimjJCABwkdFBhfEQBQLeJcOKzVbAsOvnlJFmOGfhMhTQhcJwPUQspjMzGotiCpkdDOjpuBFVly) (seq (seq (ap i HxAHrnzwrwshDNEgzrSIlIRbbcuFxJvGlFIVARLUgRWIFjxFwmjuS) (seq (seq (ap i PwcAdLSRfRrOzVgskJogVFVyP) (seq (seq (ap i oyFbFTxgBEYWzSkBgmHeovugjfZfFkTDBrusk) (seq (null) (null))) (seq (ap i xCJmLflFOUAGnbAbYpIHdIfMmYZPZpUdylczR) (seq (null) (null))))) (seq (ap i puXXZSpWtXafSoReqBmbETrwEOMBrNcZznoXtrFaThgpdlhcdDILnx) (seq (seq (ap i uhIApNgRjaJyOXSScEx) (seq (null) (null))) (seq (ap i TNMXSCIuQwxppkZnzFXSeaSynohyxaenFkojyxVLDLxGIiYUIZPBNdWfdcHmukVwddvZE) (seq (null) (seq (ap i tsGhwtmjeiPOtPBPiuOAJhV) (seq (null) (null))))))))) (seq (ap i rtXBJascVClOHssSgPttEDTbkjdsRuZWUwMXhQGEyoLlgmzeUVOFkfWhtqZUyFojzEzYbQJUUWX) (seq (seq (ap i jiswCucUlquXWeNfYLYRIXSzAfDXWRsPfDMktpNScuXGWWAbvsjXwNoWfmvvIkCnWwtbDDyYKvXQZkUQFNIZWClCQMYoVpAtrF) (seq (seq (ap i bcTFUJpFbjHopfZkRqvcttkIYgrBVgCYWuIfcHefqdhKDXImMxkCxwhkwr) (seq (null) (null))) (seq (ap i KjOZrfVsGaaVxziQcTJnmwruuUMEdgVRSOLzBIFjznOjMDBuBjbTyWUEzZisrnQshujoGhAURk) (seq (null) (seq (ap i PizymIbimReYHMMsDrUNlVeXscFORSfJgUWzsAUJiDZZsCMFTCKAXvikkLuYjretAHBPFenEXlZktgbrKWaMRUigjEaBtpkrxURy) (seq (null) (null))))))) (seq (ap i rYg) (seq (seq (ap i yCCMpSOZKtswLaxCXixtmOCXSQASldhylGzIdhhSzZOTvphnxhZMBMdujXBSWeQtaNrwAbUryYZpvfpgYm) (seq (null) (null))) (seq (ap i zSbTEQfmmQTjmthaOujQFxUM) (seq (null) (seq (ap i WiKQvmWnhndxJmSF) (seq (null) (null))))))))))) (seq (ap i lFRMmoypYrMwidnVEJsujPsvAzsStkXDJIpifQnBVZbMJtXYbuDvtkJxuJmrHaIhwUnmPqKPUhrmuMIpjunUqEnrXQjelD) (seq (seq (ap i QaungxWFozuKbZITDPpBcOwAtokceJSsgwQczZEfBOyILBRYsFEkDuRWxegMlLcGgxBZAM) (seq (seq (ap i AzvdtTtnPtsOgzDPpIoZhsWqdlVfzbWSPwjTvJjckkfWnV) (seq (seq (ap i wcACcwHufBsZRitcVUQnIjDYgKmbxZgHPPVdWfhtP) (seq (null) (null))) (seq (ap i BrnfvfYzaGltGpmPQjhqanBKClscwRScsZZiFoZrCWcSkHzgEfEVQmtKYkDYxAzbFeZmiom) (seq (null) (seq (ap i Qz) (seq (null) (null))))))) (seq (ap i loBtbAvBsJlWgmCRgbnXksViQOgXCFvBcHgFEmfebHHrpkLldkKDXdjMJpxtnfPhdeNwnTLxEGshh) (seq (seq (ap i DbuAQFbktNmfDrfKRpzVxYCmHGxElWgMPgznRHvuPrFBOaxAFLNVbFjhxYjIToxNVkLTvaHjGtREZXRPHtETKvGYT) (seq (null) (null))) (seq (ap i MKViTZSRDRkmUhfFKYElmudIVucMzVPUYMDcUhWTDKhUdoJgOhDqJuJnuHQLWMfepRpMUIYu) (seq (null) (seq (ap i pPnTHPIIjmyGulNTYwHyPyonSLpQAYbWE) (seq (null) (null))))))))) (seq (ap i WDCwNpQIvOXROUQjVfSWaFkxNPSNLhjDAs) (seq (seq (ap i OWRHlsXgXrirWAhPITIilYUYwnsCmuMPhkRLOTZcqomulKXtIfHVtbZxMMEJjDEoCPqGNxMpuLO) (seq (seq (ap i GdIxzZpoRFgSQRmhcGWhvjPviKcgfShqQMAhoyXirlqkU) (seq (null) (null))) (seq (ap i KLZVLiWZSNNxNJNJazmbtbgFTObjmeRrQlrAMGdRAcsXehKQpJoqHwaZKizzKTLVTRbDN) (seq (null) (seq (ap i sTMMdThTnDfviRqIJZmVcvrtsiWSsjbHhacdBdBywlslHAgRKkkplUJVIBGndtQLNcmOhvZXyZTBkX) (seq (null) (null))))))) (seq (ap i mdFqhmfHQQwiYpbeYpWlcNPinQdjMIktxoAjeeUleonQDpZoSHXHrQmXXMJHnXoB) (seq (seq (ap i OxyFYzqbpJdadZeyFONVCBemlVmViGtuowLxWVOfQXLtDTqKjcyESfeBnZKQEvSGjMHAhW) (seq (null) (null))) (seq (ap i HuHYLGyVzLYxTrvQCcTRAwNzfXXwdpJgkoegmRBMgvrGLmKNpQJSWnTxOHjJPphNqMYNTDbNsOPmLkggBJwUVpMsiiGNBhR) (seq (null) (seq (ap i fCoqlsmhpVIyXgHzMhojSGeYNXoyGKiZHDtQimMcGCXVNxLDXPBXsbnJOQsybhrLIwGoTijFqOUXKsWzOYuEEjd) (seq (null) (null))))))))))))) (seq (ap i XvXNiAMkgRTOKkgSxlzMYSPSYtpgyrZCBgbQPNcujinidgOHzKrfyiAdfPHcIxYqCUSqqGELmDKAKKBhQKJjaVpdBMCoTqNhMr) (seq (seq (ap i CFJMUDkLPmQIdGHcdjuIMglHAQBJvEbVZCyIQJjdprXORvAMCbypbZNTasABhHTmTTewcqaexbdOPZrNhMUjlkJQLJlMKjEhqpG) (seq (seq (ap i PIKewQbFYcOowrUpHRMUQEoAPyyJYukQhGyKiAlbQFoCGzsxCiMhtSJSMXnMzILjdilMKQlczdNHObMqonglDnOBSYmAJ) (seq (seq (ap i CRepSTCiMYLfvxVGC) (seq (seq (ap i IxyhQBfsXQTuZqtALSqo) (seq (null) (null))) (seq (ap i PXeTuEFMTfpClhcNPOtUnZkAYNZWBEXMLifvupQKJuKRRTgiZdJqrnwZxMQMVqWloWKNRvzeeIeOAPWzUwmedwNhrqsnRMR) (seq (null) (null))))) (seq (ap i isJPUJIkOUXcIbgXgpQqbvOzojKHDAHvLroeMlccQjcVdBxHggbbQhSL) (seq (seq (ap i bTxmauzfYgNFhMUJsRPewSBDAyoueWEOTX) (seq (null) (null))) (seq (ap i WpdwaDxvRGBlfFXgCPQWftjXVfktkkLgPqUzAlioptvISvxGZABLWLwrzwkeorZ) (seq (null) (seq (ap i XHknljFnVVQXZwmshda) (seq (null) (null))))))))) (seq (ap i ncySSWtNkLBrbWFdKekELENjk) (seq (seq (ap i dNXcyGwFcCGEhJ) (seq (seq (ap i spnSrKNoEBweeAckhKRovhijnbkUuCKCwLbBlIRxqEpbpUxHemHfercRnFerlJlpzfEXn) (seq (null) (null))) (seq (ap i udTMIrepkwKBKeSZFmHiNKLcOIrCzpAjCRfAcFYNONXYNTtnLhKIukgIakMEzpVjjjycOLySfa) (seq (null) (seq (ap i XctDXuYefYhNtcFOkQZNjlZaZwGlEPdFPSsKvahXRerSgfpbCSAiRbUNPBTiqvYNxvLJDVmuYTJkKthWSd) (seq (null) (null))))))) (seq (ap i uIdvnuBAXNrZUqlmxCrqjbweRDpJRESaQGlEJjRTkuBYnzbTocadyfUsKQWAPygmnHu) (seq (seq (ap i YbCVKYhbhDJnwUDsuyQabvEZwoiSZQabBaLrTOvflnY) (seq (null) (null))) (seq (ap i GLzvWmDVIMUpvzXoPCtYWiFYFixKFIPhJviJvgdwMNi) (seq (null) (seq (ap i QyUXwlFrrcvtgUERmkBoeTYpBhCZxuZlqyqejvAXmRkLnIlFIXHSk) (seq (null) (null))))))))))) (seq (ap i BufHJmyHoQxIEpXsVKvqiCbqQctekfzlysPXYAUrJQkpRHRXcyPhJlftOEyICYnyXZFgRdfJHjnPUkvJXfuC) (seq (seq (ap i Av) (seq (seq (ap i huXlVLDx) (seq (seq (ap i CUwAonlDLyVzWRnQBjRZbBZkdIWPEcrInaXmLsDIFMGJFnQNONOfMYPjobjxiyATtbJcoClAQx) (seq (null) (null))) (seq (ap i alllOxKRPZVprCw) (seq (null) (seq (ap i TwNsgnfIHOKUWBrinUrGNTnIiIUXTRddqyAqiCQsmYqggYTBkWlDpvEyci) (seq (null) (null))))))) (seq (ap i dIWRnqXjfYMLmJyHEiASYHJZzorSeNmtgUIPduLPZMIiCkboFFBYbDKeaYqbYC) (seq (seq (ap i wFJSMPQsfUULGLmILwcKrpkmZKGoR) (seq (null) (null))) (seq (ap i HSoFPsYvmRzZdDZYUZCtWIjuFJKHcYvpVnuhnTCBWOKevmvhmeXEXhxosXrVCYjCZTBwYSBWaFFsNKbldcG) (seq (null) (seq (ap i ESogADQQdD) (seq (null) (null))))))))) (seq (ap i pePpedDPdMFCzixsuEQOVHJwpPhqTPzpaLztJRDCMcmjQDggsixYIbcGpPcodxarUReDbvLRlvqGuZqYRcqZCAMOHjxRjbZeEI) (seq (seq (ap i TmRbjQjQaFomzosyDPEOINUBunBIRgALrnKpkJNhHkTwOtNGhfMCDyBWWrsTvJEZAbpnBEnsrDAzUldjFK) (seq (seq (ap i WTKLxuOikxsgkNPjTdYuBWH) (seq (null) (null))) (seq (ap i odkOyYsoRdZERe) (seq (null) (seq (ap i DNpaBl) (seq (null) (null))))))) (seq (ap i TOTspeuTlCGSouaMNVXmXJgdjYUKTWywMiUhXpSHjOcpumECgtocAMGkEvWUWjNjoOEoWFMDnHCFUrKBNda) (seq (seq (ap i fKEWstREYeLIsrmOQbCccKiFNcRjzkTazcbtuBxpTKHvWabbhwpoIPgOISj) (seq (null) (null))) (seq (ap i TcpoDulknXoOApcBLKoWcApdNilQKSQyYCjAOHBPpYEHiwcTjUkWRaNr) (seq (null) (seq (ap i GHbGrxsmqevUGCCqlgbZEnAoQTQyVtBMaBCDQGnKV) (seq (null) (null))))))))))))))) (seq (ap i lWsaYCaguGexrpvxTVDlQwSUqqaDGusWowiVaSQOrPFQxQRrUVrgoAWAMBHnNofIuM) (seq (seq (ap i FlFxIeUpcmGvGzcPrNFgPSLtNRbNhtNJQiiHSiQZZeAWcJEviBKpzyvJuC) (seq (seq (ap i rHZgngBStsVRNooKnIXTqcyfHVAeYaccRSqZueqNjtgxiqFYtMadOdWJFcdvMwcMtOyTPuKOkE) (seq (seq (ap i OnxTysShriZalQHoVEPhPYMbfEqBBBNHLVlamwBRrFnGzEHqKFkP) (seq (seq (ap i ubEfAwFXCzYwvNEzdpw) (seq (seq (ap i HszpbULGbrGOfZSevmYUiZNLoMlkLYOAcXPYQqfjgZqlUrWIrLYLBqSrHmH) (seq (null) (null))) (seq (ap i uYiCmJnIMEFQcvlcLgEHOOpjIQuJevTGJlwQXjLaPMlPhYATLlQZDLZkLBGAGPAaATuryZlSaYbSwkaDbRShXExCCoEF) (seq (null) (null))))) (seq (ap i YrFkUg) (seq (seq (ap i dbAcaNcGzYzzjS) (seq (null) (null))) (seq (ap i jXOpFSOttfnFrKuEgvqLLQECuozvxhsxhPqnkJiCqBLYJoMiSlDgIkKUAbds) (seq (null) (seq (ap i VazqtRObzkqLfymtiJJpRDPMOwXupqvmYEzOsODDobrLIzzinOVwwvpFiOJHxeGVsSSddGeTElbGxruMkdjeFRPhUo) (seq (null) (null))))))))) (seq (ap i lwRquejkSvXZBHtvPYuaROZoKAhDMYqqmMvMHzZUUkFLeMlgarTgwZKXEkoLe) (seq (seq (ap i pReLhbwtKwgjfpPjFhPTnheBkJxYHoOzlUIcMyMpzLNitywJRpmFxWiGAvqNOfLbBxweePIeceVumdJsQArVUZRclIO) (seq (seq (ap i qCP) (seq (null) (null))) (seq (ap i ZyDAGjwHaCQuFyJnfFZidvcR) (seq (null) (seq (ap i zjUhaPlQ) (seq (null) (null))))))) (seq (ap i qAqQVAUofZaUncxtolnqqHfWIJnlURjyIwhTAepfVvZ) (seq (seq (ap i LMVaJRV) (seq (null) (null))) (seq (ap i bRaoYhHWtXFdMDYimAXBKOuuVursXMMEXygjx) (seq (null) (seq (ap i HVmuTzOUAtcyNGULXJFQifPwPlaTfHyNekluGiskZkXVyqEQZmzdsqaJwWvOHfPhqGEQzhTAYYgIzJoSxuMPpkGVYajthZIwMBmD) (seq (null) (null))))))))))) (seq (ap i FGmknNVElgcePvUMkQhpELbChzDdXrsssjGIwYeqkGdIpZCgHwhBsdXbnaTenGYLOmkevtPXqQUe) (seq (seq (ap i rwkewaCvHxDonvAnSbwylddqacyRCMwJIGvICCuBxqsdthjNCnDYptuxBxpqyMLiyQUlIRJBuuSKCfYuKH) (seq (seq (ap i PjNpkVcMgJFMQfqETpXrTpYEVVGy) (seq (seq (ap i ZVGXSdReRAWxOGHgxwmafoeli) (seq (null) (null))) (seq (ap i uXMraXoKPesyriakSgGdXUzlPfiWcP) (seq (null) (seq (ap i dSSXBJOUDjUjfAWSxUtMcJAYaGyMifiBOLRMSmdWZcVWIzRsoTRVqjKuODGjneVGZQRVPQcGnKlAEcpUzAPryuKUcWiM) (seq (null) (null))))))) (seq (ap i kCoRtvffqweYhgtEwtyMaH) (seq (seq (ap i KSgSDDrdSPyebqnw) (seq (null) (null))) (seq (ap i QuzqRYnVXtTrppZHBhdlcKQQZNQmKapyzdTQmYqCRrUqPOuPCVxsPwDZrJBdoijYcDDlxGuncqXmKKObUahCtE) (seq (null) (seq (ap i FsAYcRUTQTlPRRZWrubKHExcrjwmoKNBViCustwhXniIVcOiOzMukXgvwdyiIlvtojNUwSINSdhXIGIjyiUcAtwBAKer) (seq (null) (null))))))))) (seq (ap i LPZMVwLTkHmbtiqebJEiEbjNmuJtIWsiOhrubPvyBHHzLCWVdoaWCHRvtApyqkUWC) (seq (seq (ap i maBIBVDKnRKVli) (seq (seq (ap i doVjKXDtTYqUTBEqkYzgvQflcoBIlkhxHjaFpywZZzuijmRlGhuAGpqPvRgb) (seq (null) (null))) (seq (ap i AcqQknNoqqoJRMwpXTGxCtgxNgRsJaunmdydTDMgYBvxUADBhDnQPfuVcTNerniVQfROPuDLHZhrWEqmLkfKwh) (seq (null) (seq (ap i UdfApMSdredNaNlJYPqyTcUnKyVczROiulLqOxPswePEwuZdiFsAqwkUYTQDMhDnEQz) (seq (null) (null))))))) (seq (ap i SwFNJJwjDXKAApToTfDEWPeGjvwUTAhExrnXpBopNzDBGfodfzVmqo) (seq (seq (ap i tvoVZEWjfVbFzyQgtNcETpQqXtUbmTgDvkMEtQqzgedepQdoNqApvpbhicnGo) (seq (null) (null))) (seq (ap i dbWkclOmIeawDfEegAZXxlNwJieyNEHgibvLohAhJMjpOUQdbOGudKDNtimxnPZpIfERzKbXZeJIiHzd) (seq (null) (seq (ap i uiZnRlLzOKfARStKQefsfRSLuOyZEPXiQccUwGzrcsXSFarQOIvmWeaJrv) (seq (null) (null))))))))))))) (seq (ap i OGRbsehMgnOSJAjotFetLTXRjIHZGEvVcNZVeuVBFTOZrDHjtVFkYHyjNWyMsOADdHcVUnmZTik) (seq (seq (ap i GmnRzknfHRRMduTGoJPkOVVGDUtLtkcxfDFfMmVlKaevcFmOduGdCdBjRVeEtttSykJxhzcj) (seq (seq (ap i tjLqRlYKCrGiuEoUQvHbxzbXYLwks) (seq (seq (ap i vOyKfcNcZDNrNY) (seq (seq (ap i ZjDYBihRPtUkEPFGOBAtmGHzYX) (seq (null) (null))) (seq (ap i bjqipEnLVFFrDPVUzuBitaP) (seq (null) (null))))) (seq (ap i FMQBXMxH) (seq (seq (ap i LgGyoMjYIizJdwjIvkdpjezgSKdchaIQBwNygrOTlxWnAheYTADyMsPvsYFQemQPCNMIDrBtDBOLDSA) (seq (null) (null))) (seq (ap i BdIgYrVFDFlPSDdEycLamtkvvvxlOwpoAtZkaVfbuRyUjMsfVMinLEVtbmALI) (seq (null) (seq (ap i OvVPLHOzKOvbKJqjNExYZefJSnWWMdZqBTXtECZtLWKcCLdUQHUDTSEWwtIfYBJvnvDabfQFLDDWadEpXdhv) (seq (null) (null))))))))) (seq (ap i ndyWXrezZuWXtuZkHudzTHpxiGiTkJoBmJuTteDhyKQTuHgJPUdwgoDhfGKWsnFprhfhpUvKhMdmKZhnqqNMLmvOAI) (seq (seq (ap i OFPapWltOz) (seq (seq (ap i pxpoKxjfeGxWcOkAhRwoDigwatMuPfwzZrymnITvvrzwSxiuAfwFuPLgGjaxKTvbxHkR) (seq (null) (null))) (seq (ap i Fs) (seq (null) (seq (ap i WFccaXJRyOnaqAeQFwJkvJFuHXdnHWffmuKzGNRqPJzWOcwVihUsrLClWxSdNBdxVnHNcbOAnsIICuIBgqsA) (seq (null) (null))))))) (seq (ap i QJmDuzYQCYQdUeZeRzI) (seq (seq (ap i TOXRRtSSwFiqHxtEUrDdAMkyCGerFwPNylujdlmwhUkyGXIyPQhGmHnVT) (seq (null) (null))) (seq (ap i mDHnsXKUZJjqLFFJElOPrKqpOA) (seq (null) (seq (ap i xdjSLbWLWHzfTtxwdwLFQRXdAakCpzzSQgIFPgmamETPRvWrMSajiQNSGltXGPNoOjUOODQbVuYbzpYQxubCDmcmdTHy) (seq (null) (null))))))))))) (seq (ap i QlokQTMXwZqzljOPygQDMIogKKiZLmaeGFmaqMDw) (seq (seq (ap i EBKXOBOgUOCstnTXoIlvXQGjxyeAtSplOgxSFxDwOGHXgyWQsktpTSJrHBkmpxGjzCWgZUUoTqdqOeZ) (seq (seq (ap i lpMJDXFpbZkIJWWRDQxOd) (seq (seq (ap i bqaPKKvnybbBbEmAUIWPIkmsLrqilSRDAOWFlEIBXhGdLiqJDoIfKmCEwkFrkvDvL) (seq (null) (null))) (seq (ap i KlHDBeCqFTFRTSCqivdaPVMevXXaWnvTCOomuoIMvyYPfNAIVsSSLdSNEthdAlpYbKWITXoEeuHSXLkNcCxwXFPxSQDcPxpt) (seq (null) (seq (ap i WlmqzCxpezsThbLECati) (seq (null) (null))))))) (seq (ap i FEkdimGoG) (seq (seq (ap i ZGgjGwlwMABGxJGXkhuYcDeEKQAjwLrLUzuZEMpwoOYZcfjHomtcyssnjVWnCkOCdnu) (seq (null) (null))) (seq (ap i JoMCCWZKBEQYOHbUrlXgCtapkuAoALKvGPhCjdBcYBjsBERpxkJlGmVfmzBjuPnqMDawj) (seq (null) (seq (ap i dQVKCGfwftkSXdHPGpqvSIEKkPfpek) (seq (null) (null))))))))) (seq (ap i XRrWNArvYHhgYZoLloTuRkDMunHUALphBdHwXODCpmGVetWESjhtDSsCqKyOV) (seq (seq (ap i rSzImwFwAzokVwebeFAcLYikFyBbPoGXqOHAjxZGxHCShOicgkXzwcmSfTSHxXnTtxJzjP) (seq (seq (ap i DlZYjMKtETnyEsLFNlC) (seq (null) (null))) (seq (ap i UoIJNWNtbnezGKsaSHWNyBEyHIcRGGVjZoXNfbxJidOXfjVQKFID) (seq (null) (seq (ap i HukTaMaCijMaWnDXHpKPobJZNcsqENhGblWbFmefhRtzwdxlLQUbRLGmtFCXoGfOKPboqaybpgCnPHZrNN) (seq (null) (null))))))) (seq (ap i FhedaeGSYRAPpvHdgEQrHsXquOiQFHhrKKfChbVdMQVZqUdgVBBqoKPsXMWqDLiGWTgdLIYoBFtILZgukRLfjsOBznAUsrngs) (seq (seq (ap i dBcLnNTmdRrjWSewxSVrBCGXrTxorYKNoMumvtBegepgThfJUnEdbISBSznVpzu) (seq (null) (null))) (seq (ap i wkSAkjTjwuuUDZXIgTPusWnGJGysYWCjTaAbt) (seq (null) (seq (ap i uRvnLASIMBssTXLQFCXevsPpLHJWWfRmyiUj) (seq (null) (null))))))))))))))))))) (seq (ap i AaKSInkJRhKnKMPAbkSisehqSYOuriDcacW) (seq (seq (ap i RDMsqDTNXKGoRCeClXlMNffyvZTcoXJSpSkkAMByMcOVKbcUWMZVsAGiCiuHODoHaMcXXmhc) (seq (seq (ap i HKqMOaKdoemZcFoKSsPedqbCxjEEefLWUYxNdEqhOByPZgZjQBOZgNwtXurtZhoRGxCjmnXoTKhUqIYEOTKr) (seq (seq (ap i nXcgqxMAjmQALZamsQTMLanYDovIfDlYfpzgcUyasi) (seq (seq (ap i EPTglnIbCRaklwAqSxKLvSkrGkcpRbqeGuGEiUgUsSoYOAdNN) (seq (seq (ap i ffUxNXCWafCSuJrCYWxqxQKkaUWzknYIynXCSzuxsXiaWYQVyLXwpNKCPecPcuIYDnPcPUpvFrpgBxtEP) (seq (seq (ap i gmWhomtwMxSnNtgshYTxURxaPFEXzgEUBJCpqZczrRZXfWRcIIRaXXPTtBltsyqlxJCRSQrRRKVnRc) (seq (seq (ap i QMhaqkDFQXzgzKTsRKIu) (seq (null) (null))) (seq (ap i cLExkrqHDRzysWdXbiQnZxTJHYcbEfBOyqNWhSTlkZuFgDcXzzapHhPxPjfYdFRbwghhCafNWsIH) (seq (null) (null))))) (seq (ap i dByunipLcBcx) (seq (seq (ap i bvNGzeWRhKTddkWFVplelmaodzskOAINNTORYfrIqNKehQJPxmQzGfSOAvFDlcfASOqdMcGtnkdbQYCkQiPNolbBwACkYbSexzD) (seq (null) (null))) (seq (ap i BvMMPBoTxMjDcZHOQkfzxKufOzEeUFVupDAQENkMyvbSxpDKMlEmiVllPDgDOegoopOShErKMyqmSvLsJRWvtGjIGGDlrYlNq) (seq (null) (seq (ap i dQqUbQeSaoZhMgNCqtMcgGntnSqVpDTPFzZTSWjUNLjsNhIQeWUlAscCjJUqWZLWcyKdhOjUTjkbkAWeIWSvdAtTUjibJipDbS) (seq (null) (null))))))))) (seq (ap i ildyXINhbhcJXRgwvfHQbILuABdySDqtQOQtXxboHuMP) (seq (seq (ap i xHpHWPWXppBogelhVopcfHUCgCgdDFnylWeFTHLzVTIZQAuKRSSsJmVtdJxVKz) (seq (seq (ap i BJaLVpLauBCAlJkCyEevkVMsWrgHRvzzWaIUkaRHmOXKNeyxQMXGEzasyGZ) (seq (null) (null))) (seq (ap i StJOsIiJlDJMDCfJPhoZnjrpwQgfcqiXkQhZxYJWUesYRxjoyGqffopJC) (seq (null) (seq (ap i bvxOZrepgsqRavAfYzCRBZRKhqFEBVgi) (seq (null) (null))))))) (seq (ap i ZWVBgi) (seq (seq (ap i XGeLdKHenQSuwSZbgCCQDWbLNKBPKteIPVbIiratGhlSZXDWUitkfhJbGWuYI) (seq (null) (null))) (seq (ap i uEGAQbTYYVFhnDHkVAwwdcGjImWQKBWmLVbQGaASdYtuhCtvpXCXOFfEhbkyCORMncFocUfCMjqosKrUsarSzzpurwQyEcMPEdd) (seq (null) (seq (ap i FoKIqJdPuaeNbINYIFbpQPPhHHTClZVkAsezXOBqgzlPCRZ) (seq (null) (null))))))))))) (seq (ap i GtTneQbTLIj) (seq (seq (ap i TCgtNKCJMtKYhxHExCsHLsNFQrNoYHfDU) (seq (seq (ap i bVIgiMwERwtFlXwtdkLthoEvrMGMQisdrmdSOiINcOkInXDikiOnxpdsprWVSPDXEZZxNsXbmabksgstgkzZYG) (seq (seq (ap i hukAcgIJxMOnWbJaiNhBGSTvOqTTSzWNWoRMmaVLGjn) (seq (null) (null))) (seq (ap i ohoPXtiGLFxjcdjlpntdSTutHhMHAAaJsHeOWVoUNUVfrpOxtPjPBjv) (seq (null) (seq (ap i PqrbwsWaKmCCPpaRXkmqZMUOumjyxQRWGkxCPlFkMaslamVJiLMNpvI) (seq (null) (null))))))) (seq (ap i eOzpuozhtNWQkVcOKKmvaxlSGewEAkEhARJfKiXpIWFYVWgWLxrxXYimrUJRaQTVadTKihPwTc) (seq (seq (ap i IWGttzINtJIYdY) (seq (null) (null))) (seq (ap i LltMvpmLYsBmzRreKtGNgPObWwmZtJaVXbHUoEvbRslVKEadoMAZVLbSgULYWlcGKA) (seq (null) (seq (ap i cwWubJmtnDqoEccoAOAjKhfLQalZrESvkFIaZnBUCQaTIGxZKn) (seq (null) (null))))))))) (seq (ap i OxpiTUwPGEMDzkvIHKFJrSjZNiOngZlACUjtzkiTRWAXRj) (seq (seq (ap i LRfUVVxRNwwWNSRqUFEpSnwBqtGEHYbgpwdWZkicpNYogDZCGticczNZzryHIiUgOnJtmRTKnyozBxcYaotJVBVqDIDyecncQMai) (seq (seq (ap i FWzCyXGiaPWrYFmEQKUEtz) (seq (null) (null))) (seq (ap i NDnXBzVhFGhqKhWJmpsmzjdkQWaJJCEbudOOOTMIlPtdpOHcgEeVPAliq) (seq (null) (seq (ap i BjQxeTL) (seq (null) (null))))))) (seq (ap i PKQDzuaCGGiZBJveUwxsNzeAXxEiNsawSqlCrMnOmxExUugSoFpnCRoVmPptNtCVLE) (seq (seq (ap i vkzpvaOboajMsvaedQwwUBSAOiKbYyGSaBUlLELlngzrmXhAKgOjIttiDVUYHlVaRAAwQXx) (seq (null) (null))) (seq (ap i sCpYqajGVPIKfSrOkeaORccWPbnojeFVENHPweiNQdWGeDNdtUlhXqkAzBWusullHMPzkYCqYFbeLOi) (seq (null) (seq (ap i YNfkNGVNuRGAvPmTcTJojTJstHqyDlVQbzUIjngEJGVfcJKGjRbzrUjoCSpbiwkhMEuZuyUHKgBgjRI) (seq (null) (null))))))))))))) (seq (ap i YsSJAJozGEGItjbGwoMRZOCtPLblLhdkxRVatKTLlYdszdVaibVFkliBaudQWbTwwCvj) (seq (seq (ap i kOQpjjJspFliQxNteQpTQOlkdLykRSxuHpdYfxdUMdVCPQLuVblQalYuiXbEYJeBPsNSrtVi) (seq (seq (ap i jxwxxkwPYGMVvduSpt) (seq (seq (ap i xXDNjQxgLCegkUKCarrxWtBFNHuACfM) (seq (seq (ap i HqeuiyCgpcQyZwaZuVHDNiNVfQzKTlSCAFrpkwPEAWSswyYSvpGncDRofpVIuGEHUesPaKQUPJZUcDYlWpSBuDlWVWA) (seq (null) (null))) (seq (ap i PxpzpEGFkXWlEPYxjkJAqDdMfCAJtNCPSfIgClvnAvtOtlczSqHNzuNpaLTLsmEpKhcgtyNLsltCQeFvomoaFHPpmbTxdGtNnrmQ) (seq (null) (null))))) (seq (ap i ddgKnFcysGI) (seq (seq (ap i EdghhlDywzKgHjpTYZhWEgjLUxWvWmWVwer) (seq (null) (null))) (seq (ap i SisKPSPptcgStAbsUaREIcrgmRLuCViMUxztkLHntWCbgMHytriymSXBpPYOYxuGlaZwsO) (seq (null) (seq (ap i PUdtORrVnROoSOipMyVrSCWkBUNdCAvuSFvLUDaSlbsvQqLalokCqbRyRxJmRWgUcmznMyZPbqqEZtUlxwgzhrW) (seq (null) (null))))))))) (seq (ap i GimcpaxcbQpntYQfBVqfalk) (seq (seq (ap i XdSPwVHpWsvKTJzETnknulDMOUYSiUYGtwlNlZ) (seq (seq (ap i QRWrYLJtAmJIaFfiDvwCGAmnZKXwlipmVOymWPJUaKkWAWcflDbQgOZqJtzhVsFKuXohCQkdcksziJDLHRPRVGNqMPAGmOht) (seq (null) (null))) (seq (ap i QUsTUmUwmWVUwvsCwXaORdESrVQoChLkTorVrGJtyCgkuaCGQoMahNLnHjiqytalUbmO) (seq (null) (seq (ap i qtyURpeluBoJWVeJPXGxZxisDBYuLisqawtkPrjeRqmeRZXxZzclVGoIEgrOMibAYckGWnEeqDXFuPGiAaBjxD) (seq (null) (null))))))) (seq (ap i mQBTumbjyiqHthfrcKumSvLermGYzRGjWLAqTgfCWqBxdpBPUICfEmAXtUxPVlXOo) (seq (seq (ap i sCmmKmZWkHtXmOodcIfOcFO) (seq (null) (null))) (seq (ap i yJUyZVWIaSiFIydgJfGrkUGEWWshWMmDUMuJtGcNxfSNEPrSvCPDXKxbRRhKDfxqbLDOPV) (seq (null) (seq (ap i NTuwsrRWMJpTpLAPomanDRhYUQJocMcLfzLAAFyFRmgbFlCUkfcXadAzByqZOSLmgoHEuaYiCubhReDOJh) (seq (null) (null))))))))))) (seq (ap i jCzlUS) (seq (seq (ap i ZjJwtthiFpGpYTRyrNxAmvWSXFdMatgnmNqQmvlhgvoUlDgpVvwKl) (seq (seq (ap i BbRuBzZzCaDlwXWhxDuGpcWBUxOOKdhUCZRXR) (seq (seq (ap i rbtWixaEbjKGVFUUnxnecztEbnBMjFgsdcd) (seq (null) (null))) (seq (ap i UwqwkPOuVxIFLQARKFJMKkoGRyXcArxQgofyNWgvgEhTrzWtwywQDh) (seq (null) (seq (ap i zOcZBKcvjXWSQUCHeeTFyRMXAtKeCe) (seq (null) (null))))))) (seq (ap i xUzFeDIDGubEeZAgBjxBAuoARqMKfRvbgNpseNPbsceXXoYHlsLyEgHJqHTQEzeeIwkiIUFtxnTfLImNlTOMKPE) (seq (seq (ap i fPnozrRmPzPAHACfsWxEDSSuzkQpIufVnTGlVRPwqDWXeChQMOztYZvTdQyFjPrnHEiKGgMmAHeV) (seq (null) (null))) (seq (ap i ErvjNYHJJdhcssTmseBpIGYRgJJcBiURAmeaW) (seq (null) (seq (ap i exbpfyDvQvgaSjYdHYHbcWukhLjEiCMIhMWumFQohPIxNUqLNMdfSXuQkUYFkyMOXyehwnSJZgBDjqkEmuPOLwP) (seq (null) (null))))))))) (seq (ap i URKyqEAIFkSUDqsuFpxAVwPMLYOIXiKsjweDTdCMHjgxvpiKybiBsIJJmYIqRaemyrJmSmzCSTGKnzVIC) (seq (seq (ap i hPEynLTKshjdEvPntIeFacOPErcyvXDghDrAaNktf) (seq (seq (ap i usnFUEYKlnmOnFuLkflKAoDinfcHQNTDfVArkH) (seq (null) (null))) (seq (ap i VStUjotfCZJeFikclbVkrPFLUMYMoSwHbMnpVUNqeTJteXidAaHmftzBSsbcrIOwWNHSaPd) (seq (null) (seq (ap i gHWSESaYBZijieoiAVajTdfJeVycxeSGlSXp) (seq (null) (null))))))) (seq (ap i XhGyhFUkwYmo) (seq (seq (ap i PVhIywIGwiYmTDDHVJLMsZumnwFzNUHFpoxnR) (seq (null) (null))) (seq (ap i CcZXCHlnbmNpqPOteNxEXBOtAKmsbXHDUQLrfXdsrDYHkSZqxQZeLVlljLKcvusM) (seq (null) (seq (ap i UcecYyBgJGzbAVjdLzyopzazkUdhiMSousZtznSOMghY) (seq (null) (null))))))))))))))) (seq (ap i slfqUYiZgRKKGvwMNiCSzEiGMKhZPBZRJtPKxXgWDLpeHwsrKXcTDNU) (seq (seq (ap i ubsqCqSUhBQ) (seq (seq (ap i zoLUjHimsYv) (seq (seq (ap i qBOBoAUtDwArZwbqrDVVqwRLUyyjZvs) (seq (seq (ap i iOdaqHcbXtgIIAwFSxa) (seq (seq (ap i WyYWSywvtJxdJbnwvkXNtgbAbHZnKDXOaivPFQaLnvvcmybkthrzaGEBuKUcUVSzHCGUEKxcHaTUhgBffigCxjshVcZVlyeT) (seq (null) (null))) (seq (ap i JWibwjNHcQO) (seq (null) (null))))) (seq (ap i JHcqdzcrpqDrzMzqVwJKLBmTmoUUtAnGiAyOdoRjN) (seq (seq (ap i VPCPXoONlFgEzIGavwNgOBKgxBhfnmouxiVGdXlPyqRaOkAqPtSXVrCmZUiGGrbCjKeHJOxoZvM) (seq (null) (null))) (seq (ap i vDClKAudPdDeFiWLgtZhmmXpNrLmLUFK) (seq (null) (seq (ap i ImVbskxzsinMRVJQDhzHUXNRZcpFcjmjWRGsiBWdXUxFLBcAOYFqsUnRPuJZvUeAscKXNhijwvhmb) (seq (null) (null))))))))) (seq (ap i pjadDqaqhyLOTcMsqKscHejXhJPcThPOOXre) (seq (seq (ap i mAc) (seq (seq (ap i HatZMTBQFFnuQODfcrkVhlBhVUdFsIsnxpFLLvQyvIMysSlknfMeQYZNrhxsfJiZhszNFKRrPlArSDSKakSfHkYxjSfrJRbNWUA) (seq (null) (null))) (seq (ap i FdQY) (seq (null) (seq (ap i HNVQWaceuWTuacnwwQAwKmaJwmuFguRxIKtFItNCCgwPYAfiytGYAlIzItDirFnKygdjTuVTSWGHNPyh) (seq (null) (null))))))) (seq (ap i iWqLbQmTBcIgrpjwFWgfdTkNwksccTmvuambqzI) (seq (seq (ap i wgIYdPsZFdxohHqpCnegFHoiRQTRczhsajkkUsnTOdrWlRrGe) (seq (null) (null))) (seq (ap i RYMvUUMISxwtKpoJtuICdsJhLlUdExfFzadtkCE) (seq (null) (seq (ap i KGYJKZhLlxjcOzhflpFTxLmFNYZZALJ) (seq (null) (null))))))))))) (seq (ap i FsumZpBMhUwqkIPkMKkDKpoUQNhxJgJnluwksucHAclKbedQAxRxwBEOftlkBWVHIqzhvVyBNKivduBeVnJMMEmALFQARKgveh) (seq (seq (ap i ZrNFRjKggimyWuOPufuGtdbzLlnongVrpvUtm) (seq (seq (ap i FFBLehhD) (seq (seq (ap i bmNBlWQPjAWHPvitPyEEVDjkcTAHEKwsCddnIguLLBjgYVmNPNDJqHTzRVTtmUaDogQNmlGR) (seq (null) (null))) (seq (ap i KQzGKSHuQmkXDwEiDTqBDBKqgAtr) (seq (null) (seq (ap i JzrKifiDRfDEcSRIpOYUSOuokOuYOaURraKfG) (seq (null) (null))))))) (seq (ap i NBwxzuFNmgPzSUHzkOBnPesvLCMQeIZYsScEBwMdcAcK) (seq (seq (ap i MBMhBOBHwKHjBnUzEGdvyWmmbicgIoOnyhotgVagIjolvrhGgonbeVKijKq) (seq (null) (null))) (seq (ap i mdTjitRMphGaaDlTRvARMbbKftjyZAEV) (seq (null) (seq (ap i AeCNTkheQmolBtWZTcHtWLIgHWcuyGNihXuljXKJlCVeGl) (seq (null) (null))))))))) (seq (ap i wnWoQXvrJycbBIemUMytAZUjQUhInNOZupPoHYNGvEUzvsdeACBMLajskJviZZWEN) (seq (seq (ap i zQDurTiihaVLmvHeUzDfFTVhdsbTDsoyUjkTYTRwmXbZokUvLDIlaX) (seq (seq (ap i piNzpfLfeXsZEJgOOklXUYQELZAdproFlWRfQSDXcQmPbwgZteIeLNIiVmlh) (seq (null) (null))) (seq (ap i kfEryxxPiUhmudjgXOhCutnORzQbunzAuqFUNoHihYhihvtFpNDSFovg) (seq (null) (seq (ap i RlBUAlgFAdJzBHiOScrFCkDMAvVkMckfCfIKLGMNBplKWUo) (seq (null) (null))))))) (seq (ap i GFUYoTaEoDeQPLhqyPhtYqqCnhdyEhVXyGNrIkRrKeCFSDIadrrGgczUXIpYtjysKPFxrlVFSeYZR) (seq (seq (ap i nzXwEQeekgoPxVDtqkfQNRqzAiMHJpyYtRdyigSOKVxDLhvPwQeYoDVNhWuBJm) (seq (null) (null))) (seq (ap i nMKLJMTRHCJyioNsxQIGClgaSoCEJsIMusDpSLhLVptNogurUZzsUhzrfSvdJYUxpQaGoaFFpMltGPrL) (seq (null) (seq (ap i OtsVePplHdeYZAwdZldnEytkduqXXSqgJhtfthmyLzyfSLsKGVLAYjmrcKKzTUktyXDEGHrEn) (seq (null) (null))))))))))))) (seq (ap i QqPJmlthHqEDgbdKYkxIiXtslLlarBxhCJrOdCCSeIHQQeXvakBcBjOwzJdkrfsLBOAkDsfNErnKSNByijRTCuQomyBlSOwIk) (seq (seq (ap i yNEtmXdElOioNINXzOCFouOJRZHaxzY) (seq (seq (ap i KgVqYutJCqOKuzLClVDAtEgopsGWXs) (seq (seq (ap i MSffmehoeeRIxqXnzulBHxzIIYybheGV) (seq (seq (ap i jWHNpqQVddfhTIlFUBzCqQggHMSSzdVOQqCBWBAXglhLQdqprpnilMsqrAzfNaisCmevkbIQSFSrZKyOvBldC) (seq (null) (null))) (seq (ap i xfKywBawvcEleZmCGacnSJctgVvKyGHgMbEcaxi) (seq (null) (null))))) (seq (ap i fPdAGtCdrrveKovwFvUGfGetirslsfCOmIAmoROPImudobQqdcyOvBgDnUkX) (seq (seq (ap i MZfoQLwjYjFzePKr) (seq (null) (null))) (seq (ap i faVCLAcuhoXXEU) (seq (null) (seq (ap i IlPPJyQFAuhG) (seq (null) (null))))))))) (seq (ap i wppVofdLPADYbfnraKAuzbJOXadjmKGVyK) (seq (seq (ap i ELiiCULdhaIykhZrZWudJaaYMCUFbmXPNmGrYfqYHBbBYKqkvGaxprbTQPWrMZWsEKTbJxxRUOgzdQVGzxVeDyqRCBbOyaamA) (seq (seq (ap i MMjlMhmjkdG) (seq (null) (null))) (seq (ap i SAkGTsHiOLgQzaSaBdeeEYcwXkNxrvWnCYTEMXSahKGcDnngLG) (seq (null) (seq (ap i SmnGJGeDqdreDNMWlpTIJIYVoySTaiCIAcdMXMLbzGXYDqTeMUSkSxHUHqEcKE) (seq (null) (null))))))) (seq (ap i aoOYUascyExzNbmDnkeLhUyCgDgXqZHAsIsAhnHuFOildKxcNGOPHewokbsdQr) (seq (seq (ap i ytpiSIgqTSVOmZrEeDFipillzLmcwSDtIgFTedWvTAzsZihSESSumEQmqNoiZJs) (seq (null) (null))) (seq (ap i BbUBpZrJiKGFhwJqslZOQAsdnElaXnXtWKUdgqsiVYonhJVmkOzXwGMAdRZKBrM) (seq (null) (seq (ap i USMmSEreTCALhrTEXfDfMLFEfgSKuXmwPxjlxRqXWgfNaatDhjLdqw) (seq (null) (null))))))))))) (seq (ap i mdAdb) (seq (seq (ap i NPwLzNPeaMRKCllKndSq) (seq (seq (ap i jvilIOmtgPCUHtRAk) (seq (seq (ap i MkDZRyfJsvuJEAVeWlJALZRqGwweDB) (seq (null) (null))) (seq (ap i QUARehPLjIXBIGhGGLcFTYIsOWMApCLvqiMzHiGunKdQranZZGrxvwkpnAqGMjMFvDbfToJtkEiJaSvRrgVOJcbQcaRuYUmiT) (seq (null) (seq (ap i MLTXmwdmGUFLzCAoVxCyYdbxFQQJBHiyEnfnfKUOZQVO) (seq (null) (null))))))) (seq (ap i DXBqzlGvUDaakIGNrZlcZXe) (seq (seq (ap i NbaCCeHvmUNHtoAslljMBpneTHVuUMetEFeBnaxuhTjbRaaZaIL) (seq (null) (null))) (seq (ap i xhLVDEfADZXOrCBSdQFYhBaYyofgJtIXKDGumtFVZV) (seq (null) (seq (ap i VhPlEJtOZLgrcrMFq) (seq (null) (null))))))))) (seq (ap i nOmBNJUcIfzHtqxOtzYZjEHxOrPMXDUTORWfyEWsFACebybteNpownJKK) (seq (seq (ap i AOfUSXhxxGsXjorDRaKTtRKYrJxYtLfRnsSXqcBWPAekNuiDsHBVgmasrkJGjo) (seq (seq (ap i ZfGZmrRWAWNIGDejcgICIAlvuDwVwHsfGQlBPgFxDvoRHJCMsWBfkiZGXArO) (seq (null) (null))) (seq (ap i MeyHHlKHNnNjVmKtEggMpTiufyqHqWcnwTGsTZoagBNzHgNbQUaE) (seq (null) (seq (ap i VGkvqoDadwNgaEvgcudgNvSaWovvJysqMElIjgyneREnGxAaWELAPqNFJcMJaarwvDqUDfURPOWzIrojyTZgAxvwTafQ) (seq (null) (null))))))) (seq (ap i jWpYzZQyxawxDJNsrmbPHDKC) (seq (seq (ap i OiCJMKuKwCBnGwBfbCoZDwgTBEtf) (seq (null) (null))) (seq (ap i tOOEgKjhmXzuwJXrjWeiyTyGcAOSzIuvtuNSSgUdfeAJxrysXeecHuJAaNxfRwQNPVQeDvRLdHzrswJmPChfAyhQZnXz) (seq (null) (seq (ap i GoKxALqIempEOtpBakkGbfguYzYJnLxUfluDRrCdRfEuurZGvuOapfSUjSjXeQWnWLp) (seq (null) (null))))))))))))))))) (seq (ap i muzaIuMUqyDiiVKrUPAwAZNKpiWelEGgPpIWosOfMCbTcquWwQXAomLJXFrIzrlekFj) (seq (seq (ap i pOqJlenhOevtkRoe) (seq (seq (ap i IsruGBAFwIuk) (seq (seq (ap i jjqPEhGXRsZmRWanIZdCYrrbOeFRttvFFBXYAEdHyLxPLsflthzadszrhpnPEyksVVPaXCaMMJaqacLf) (seq (seq (ap i PtqHsFTEYRdRHDteqnmSFiZthIVXgSSPFDDwDkmLFmVFYgCCIVwbSgpntwLcBPJjklKSfVPpDmdkqSFzjQWnkspvECPzlCBwZX) (seq (seq (ap i RiOABftxhyZenJHsXMAfAQWUDxAXeFMWEcxeogbEndYdafPgEfRBTALiGlNRAgqyPBliqHLTYmkcovdqlVXmFepfA) (seq (seq (ap i CKsEa) (seq (null) (null))) (seq (ap i qGYyFrXslifsuIBwYfhcQlLWfcTJRmzpUADtJobPPuqJBfGmnxCNxxrUvnqfBtUdCIsPfmwYLKemxhXJnxEnRxsUdAsQX) (seq (null) (null))))) (seq (ap i mXZBQhj) (seq (seq (ap i KPsDrmUdAbBgeGZeIapJcJtlNIJqJBmLdtvGNDn) (seq (null) (null))) (seq (ap i bnFMVxDdGsbnCUvgvKqgEdWojxdueToCBuHfCCxBHvhJUBjIXbuluanmhhptsmUC) (seq (null) (seq (ap i bO) (seq (null) (null))))))))) (seq (ap i hfbjHULRYNvPlcYkKpmzvltioiMVIEZZOjrnXKKJzasBgpsveluctespwCGJtljeWhHtiHCxTxLdCMlglNTElmoJmISXHHYEIV) (seq (seq (ap i vYJsITMMiczfZRywtXMVEMQjJdflKkiflxHYHkuZIbU) (seq (seq (ap i tBzCxfRUdBXkGDpbWXNItxJijTrbQlDyVhEoSALZuJuAPvPeJodGAwEnAZjAPQ) (seq (null) (null))) (seq (ap i BbQUXdVdCFZQfJvgimJRBDNXtsvDVlDqZilEVvMXaQblzMFhTCgJOqQJXWPUCgFRbaOWlSNGzprLBoNlUwlSUBDVqnoKgZRYOji) (seq (null) (seq (ap i nMinsKyaLHZSbOzgYAtnrMbzdWHOVQihdGlnDDAndIwhyMEWkdbIacgdhcQmcKEvuVRAifwcQIeJfDNcE) (seq (null) (null))))))) (seq (ap i PomxAwTFavpROxsvDXqKvBbBsTISXhHmfyAEgUzZqVkpAggtstXSdpnm) (seq (seq (ap i PGlvLtVqPeommpzzhgebTOuOYrixGrayUzCW) (seq (null) (null))) (seq (ap i VduJTApinPdFYiDNNxdJzpbbLfreqKhhPvDyHNdZOcRLiOcTmSOsscFdSbTccltRsKeHImdLuC) (seq (null) (seq (ap i JmZFpXmQITeMeuzyhnHAJrKtiaejllALy) (seq (null) (null))))))))))) (seq (ap i ydacsWjPDpovSeEDbKsqhZJkgjfpRfYuPRLUCoFhRLRuerVpWfxvaXiCcLSrruKRGe) (seq (seq (ap i LLLjMHstzceBY) (seq (seq (ap i vHsLtJn) (seq (seq (ap i boRgAGSSNcUbBwnUOfFVZlCviIbPEqlRQcTCUNXbCtrZUuBQpddETCTxwrIHdIiFFWTtWXEmRAbNDzmdWJCTEvfXpZGDrVx) (seq (null) (null))) (seq (ap i DzmIAgEfyviXPhbQaEmDYHwdhcNdMtxYzWEcNQQKaprjclBexbMzxOgPUfSixDABBrUgbskGHyyBMCUYZhaYjAxwALVMs) (seq (null) (seq (ap i PAnGniwPmsznbfevXbihyRoqyPUTSUCSmhdKTBKhmotNVUrTYlpqkqWSnbeEqKbbT) (seq (null) (null))))))) (seq (ap i CEyLLutabsbSAbJpfZGDczXYRJUIHHhqXJDrvcKkVtPvHrvjPBlARpWCNbgjzziExdMh) (seq (seq (ap i tSDIoVqlIywyrOjvqpoqPjTJlEMRv) (seq (null) (null))) (seq (ap i dorMseeOtFZcHBMfrMj) (seq (null) (seq (ap i tRmnPBahtnIjnrxGAicDGrhFOnODZFBmPwKdTQAhzwWRHehhOlBMOAWuGbiNZPbyvOolegBdmDB) (seq (null) (null))))))))) (seq (ap i tHfkyVtdQZxwNETwszcalrsnSCQOHmnxMCeBSWsqQIsRsaIFIwCHpSGEQcUNGKnknTPBHD) (seq (seq (ap i kHeyaio) (seq (seq (ap i VZGb) (seq (null) (null))) (seq (ap i SwKwUsBMIWgQevVNbLIUEnlIXKzadltcfcwBjMyXnSiUEYPuqe) (seq (null) (seq (ap i rKptigVJWWhVFxOwwSMXSiYPhnnkcMPYgPilvGENbiwLeLcNPmnBnDdgYOfAZCyCGzklvxln) (seq (null) (null))))))) (seq (ap i hQRjZHtFGGjpFGHvXeqXSh) (seq (seq (ap i iiAgqrtoXqqcuFfCgHzfWbONvobdWBTjyVBMWklLlLAakxKGxpxheUbgUKBaaHIXOpfYBeSeZOkjcuSqLfhJ) (seq (null) (null))) (seq (ap i nQrGNhpkbOZoeQeoKMtWJKJGMXcALDbpFXuPSAyHLhSovpWbTOwMLfOSdZpBCoXDrwJdD) (seq (null) (seq (ap i DEfXxMSeWHXKBtvhtXAbURzIsClBLsXFMsUlZNHBM) (seq (null) (null))))))))))))) (seq (ap i xRvBsKqOIMjwXWaAIgghfzNGyiQKMakhxyKPrhKTqT) (seq (seq (ap i CLZSEKfaucBeRMMNbSMsNVDQaPBocyzwjLTlnEohkivephsMocweivBWGUhURqAdMIOwaHkLQEZIxVsExbUwaksBlSxbiSVnmnqD) (seq (seq (ap i DgGnhfQQvpqdAcvohNMuSgkZODQaY) (seq (seq (ap i lZPHjiIRSuXuyrQOUmMvon) (seq (seq (ap i loCHYWbgGPRuvAzfznPgaYJaRzLGtisMSZktDOYJbqwnCuVkmL) (seq (null) (null))) (seq (ap i ZEunMOeyXTYThofSwbaoZKHsmjssbLNRojDPHOQnMcxcejLQQUAD) (seq (null) (null))))) (seq (ap i hFqcZgusOmnwuRdbsKULDXajNkDofNFcrCUcmJDgcDzCbkhFnuDweOvDxVCmaz) (seq (seq (ap i kWPYbCpqOWAaEGMDfkCGtULnpWlelpNQliLOXhdKqVwMkOANbnmnWCIiZY) (seq (null) (null))) (seq (ap i EFpXyaWtuLqMkbLMbctCrwLvKjlQRHPCSLC) (seq (null) (seq (ap i iqwmPKG) (seq (null) (null))))))))) (seq (ap i dmbFkxpMOETCKtWtUDsgsgUhHgrlJZQexRwRRsctsDaDPdYMLqlqCgCdk) (seq (seq (ap i eDgmRCaJYwiaQCLHwMAXuoZkmAngNlqMtjxjCQjwVMgGlJvryCeLQaNhawWxzAlntuEnLGComjMNSXwrcUglCLEoOWiq) (seq (seq (ap i kodNqHodVOKBtKWKYbCQmypTYHRVHpsvZbAACOXMqxPEnKaGQptVqmpXYreZIJpYutXcQaACHeYWihLQHPlqodqOWEsAMUFQ) (seq (null) (null))) (seq (ap i pNAJvMNrtsGSyJzgF) (seq (null) (seq (ap i lujAqykfetxdiTRCV) (seq (null) (null))))))) (seq (ap i MPyQhALeAPeWvqERHBCgDlXxZ) (seq (seq (ap i QCYIURZiQFmChniuXrToFIiRz) (seq (null) (null))) (seq (ap i jsExMCwCYFEkxWpcJvNEghyqjPmhVFDpHvAYsbMHijnEANgUUYfkTdrDdLhMh) (seq (null) (seq (ap i tlnBLwRJETswtHSFHYpjTYJddcsnuihYJbRrBxVIaKqYjIefVMZrdAyblaZhVqxPswcHqRiAjqbAnHNXuHiNPEPGBeecX) (seq (null) (null))))))))))) (seq (ap i pHgUhwEeownYZpUTyOEucNTJEbBHpMkGADUbkZcebuAGgWbfyhCukPbekoyfoTQdWYsoKrnYAefttNOnNO) (seq (seq (ap i pF) (seq (seq (ap i wrmL) (seq (seq (ap i MTkbxOrFImaxTbFiHJiyxoNhkGMnlqFGvRITcckGmCOFEsjKOMWQYQoZDawDSePv) (seq (null) (null))) (seq (ap i eFhIfVgvUqMdIUhnXysUfiJchnbXEhRkOkjUSDJSIOPUTauUjJpBBMsjLqywcmOcMQSYofcEgjg) (seq (null) (seq (ap i ubjjNWRbcPvgSLRywxmKbeANMnYNeTcVoptsECzhvkwtcPFsimNQPExAkRcvPv) (seq (null) (null))))))) (seq (ap i SHetCzxlRiVeVMpDfhrFPQAlOnSMNEMDVcydtfEv) (seq (seq (ap i GeYvKoKFZpMSCaevKvUlQmnLvETaCMASFZPcInReyvGrDcDLKiGueznXmHWHlqQC) (seq (null) (null))) (seq (ap i MTjkfYcawZvtPdqaKovmPw) (seq (null) (seq (ap i dEGtKduaJvUdSmCqaaYjuSKvxnZTDfJOkIbtVCAenpVtvCJxUEBLXNoNF) (seq (null) (null))))))))) (seq (ap i qsYnnPSTklWGLEokREQDDVHDHxlkGtfydccRoxgmQPhdCGDEqDApwCYfMwAbddDwQEUxvCGKKmrGKUMaBBGLCqc) (seq (seq (ap i jZCexlcadjFefSVjqAYNBbQFyTeQVuLoRnuOwQfuJfWiiSwRkbGMlzB) (seq (seq (ap i rxgXFhljjaDtKZSxKPtqnGAiMvnWzWchXVUK) (seq (null) (null))) (seq (ap i fmlUxGkxdxawsGbkqZgTmbxqGXfZQcouWvvUlHMmLgQNVelenjeOjyXQQVcUGyifYPRZtkDebHNAgDjVWrVLAAHTIXjfsutgJSpK) (seq (null) (seq (ap i ZDvPFtnDVmqdQPwvKGKFIzxBVTJRNpJRpLjXDSVQAhqJwjhAfBHmQraZqsfkQxNgExbsFZuTPwsTmbgkgVhIcJgVCgEXakHlv) (seq (null) (null))))))) (seq (ap i TgSpDzikBZGsepPTQiesehpgj) (seq (seq (ap i erfeOVuwbVZhWE) (seq (null) (null))) (seq (ap i wghMZqllyCXfCdoFQLPQXKxSrMjBzkHIAJnqcsLdgUVGXaKwHEBxSvLVP) (seq (null) (seq (ap i sBUhmHkicUgKPKqFFhGShVOPKwjaqGxTDEjwiYkTa) (seq (null) (null))))))))))))))) (seq (ap i KYklOLLVuBvazoQsioetUItpaQJMWFyHQAKWrSlcJazLfahRHPLxHqPfaAMk) (seq (seq (ap i uMduYyqHZkDRNejMdH) (seq (seq (ap i YCKpAjVuwxZqRKTmaMaaNxDiFyRlPkNUqmAhmtEwrXrPNltecSTWuFraZWJvAQ) (seq (seq (ap i scvCShwxbDKaBdMBGLbjXRKcPNdKJhtMuBQCfgFBAGziuuRcDukSDeTLJTHxnxvyzkAGDpzn) (seq (seq (ap i CGXSYoKKrvPqSXMJkmIHCKJmLVMbCrcmQCONvivTgAVKgb) (seq (seq (ap i zAzYbyK) (seq (null) (null))) (seq (ap i ptMeruqTZMHVLYKOyCtHNGoBAzGDychcsXYHqhGCcPQofEafEbxsUVjzbwTvbAqkbrSficvwUScGwpFAQkhXawaXhDS) (seq (null) (null))))) (seq (ap i IYTdSHCCTDzdaPXFKq) (seq (seq (ap i eFKLuTIfqvYohHcfrXIdPyljVVmwTLxZnFpATpimROFkDXOrRLmPgnrWRJgqivGnTwzuubAdlwzyRdainXqJdg) (seq (null) (null))) (seq (ap i XkoCLfQNY) (seq (null) (seq (ap i QRGyajVYgyVi) (seq (null) (null))))))))) (seq (ap i kgwvmXizRyQaMCmeBpdqJpkfYCFHmEcjzdryy) (seq (seq (ap i xUIRuNBEoSsDTlLXydHJUsGCnnoXUdYRVbGiCxKbj) (seq (seq (ap i KsXLNmMGvHvmzqGAHxjJjgofbFggxxonbbvIiSsvSEPWSjklrWbaipYAVxzgjb) (seq (null) (null))) (seq (ap i GSRyCKWkdjNPZjEvLviuGgjDUgLVoCmLcwUXpPCFEIOJKNtlnOFojIiRkpsUsqY) (seq (null) (seq (ap i QKBESYkYFi) (seq (null) (null))))))) (seq (ap i cJppZZFnCxSLIpUxEaObVUayGNAtudXREMLjQyuKtsKEIwWTtztkCZIgOzleFZvlzYxAVzHVSVtoyRHi) (seq (seq (ap i mqsilxPbsOMvNpkrgrUBvKzAvulRcEEpdagxrxCrgkvyEkPzZWGeUOUXgmReBQyvuYr) (seq (null) (null))) (seq (ap i DKChjakTjSIrBziNUmSyTloMEhNfnEjNmlOxhCarIAtmMzlsZMUYmcaLRCbsbxZRckhUkBy) (seq (null) (seq (ap i xTMLuWMEpaCPGBWitwevvSgbMxzbUhnPuCzShopHQRZOVOXbmwtH) (seq (null) (null))))))))))) (seq (ap i rRQomTicgVfzRKFbFQToUZCFLiFIuUBGxyIzFYMFIQKaXdAOgQubqrOrAFBqvOoSSIMuoUyahfNpBt) (seq (seq (ap i IzhEKDLhwGEfKgGsckWzZYFV) (seq (seq (ap i OvqWueXPqIkJHwRxKAXIqHYdEoizfHqSmwmRKFYlIKNfqYdTZKbgyWUfMAX) (seq (seq (ap i iaX) (seq (null) (null))) (seq (ap i SvnImEKbdCxfOiOZlhOyoVRVLRxojpQFAFTZPxrdOsUHrbWwqXhNAePlkekjDUqcGL) (seq (null) (seq (ap i gsVKvsYHBMpsDoLbiWrrpjhjlDassYWQDRxQqP) (seq (null) (null))))))) (seq (ap i kisSXy) (seq (seq (ap i EKG) (seq (null) (null))) (seq (ap i OeFWxoWZcppWAClAgoaJpBxutUBNaPUEozwzm) (seq (null) (seq (ap i DerDwFBssPFUgnNeMhQDCoUeTTSOLOpNRy) (seq (null) (null))))))))) (seq (ap i LNPlVEcIISDD) (seq (seq (ap i VYPjBrDtdmisOfQkUTyowJvdGFOFewdEaSRlgeDEMaccpEXApfYFDitS) (seq (seq (ap i BCcpKSvmdQCjoyxKRLWritWDedeafZaztXhMpFkKZrQGVXhREGAxHFyFWeuBgvppsykdKycsRHIBKrE) (seq (null) (null))) (seq (ap i FMtxDRwXDrIHQqXArFcLq) (seq (null) (seq (ap i vMUFPPwkN) (seq (null) (null))))))) (seq (ap i IkT) (seq (seq (ap i TcTVypGvfvdtqUDnsLyumeFSnlNBKYPhfDLR) (seq (null) (null))) (seq (ap i mxBCfbEBgfQtZCCGxXiyRESIEHkzGaUlxKeuLKoYwjIkLrEHvxXIasdSPxIvYGLHPFpobtHaMGBMOWSJpSZ) (seq (null) (seq (ap i uyMNYaU) (seq (null) (null))))))))))))) (seq (ap i eJhYyzjBajNzkUjJBzdjvvYZQJEzAEokcksEUBqdozOpWByrQljNA) (seq (seq (ap i hoyOVCSqtxGVMvKwxgNQBFnZnvZHRMbBELIiroADALTUeHEHnhUalGnDYBUhOZqoTXHrmPzu) (seq (seq (ap i sHikJeRzFTZnYXNDigIrdmesqgTfaBtKWroJYYgbFFlTCIaBdksjdsNyMRWksXCyQVmcDPyOdVqMmInUJZJzjqkl) (seq (seq (ap i FCZZJfyFLmSmsNxzidAOSYpZpEezWVoHQhjBEKcXlFJaRQSLYIqBhYYrMEyZCObpcqTSoFQCtoqVhTxfRM) (seq (seq (ap i sJHitzhWNLafPGyVjfxnRZRTpPJsXzCLTQOVacIGPjQrApjTxyVjlWkHdPxdaphxlyfYxOZVtPaKnZFTARrvWGyHVAJBAXm) (seq (null) (null))) (seq (ap i ummusEEpgpXb) (seq (null) (seq (ap i nWuseSMppLPCZBAS) (seq (null) (null))))))) (seq (ap i EogtVVwKazXIcFvWnSmodirs) (seq (seq (ap i vDojpTHLXL) (seq (null) (null))) (seq (ap i aN) (seq (null) (seq (ap i niyoQWbSrQIkAGIYmQgQXfkZLxsJm) (seq (null) (null))))))))) (seq (ap i SHKSQlfyBeizGMoCzSA) (seq (seq (ap i sIUykKZEPadaTgmaD) (seq (seq (ap i DsPeHOPEdLddDhCXfrfklkUiOsolBoWwcDFamntesrDGSyvUjbmYQfnDZXodqdVSAmsRlGliNcIVUgsghDmCfdv) (seq (null) (null))) (seq (ap i GIZUNAcrQLNATBrWFHznVXENOnCaBvRa) (seq (null) (seq (ap i kftspZRYNDwXTpClNMMHpSBceBVKpvVKqlLwzLyfYrFwpkDoMgUbSsWLptnOsEflbeSZuojxymQLjhrXUIgIjYvw) (seq (null) (null))))))) (seq (ap i GkigRqSDRTAEgkZFxpBNfYemSeogpTFrVXbO) (seq (seq (ap i FOVPNCtFtgGXbVinswhLAPfSJPEJTpQPuROnYpFGpmeMFKMhxsbSECNrERfUQOFJZKycwhiBdhNHLHtyn) (seq (null) (null))) (seq (ap i YzHSoHwtEdjOBWxKofFUvxnhmWDyNoPzOXgNUeBsVcYIOiLCEAz) (seq (null) (seq (ap i eKSaZRjwgRqmpMTyLtXbEkvsAdeofxAsvJqSVsphpclUeOGjPmJyjcJoktiWBxAGEMiclciMycl) (seq (null) (null))))))))))) (seq (ap i jvlxWCdYNnpMvWNcFNXQaslKdkILeCBvNvcKnfAHTbUcGMYEpxAOlAnuSkOeYMQeJOJOsVEHWyrHZLVyNv) (seq (seq (ap i qGBgAmoJpRFwxkiXmlANtLawwAXdiPpoQUQTNJehjCIvNECqKLNsspIEKpOBhAQBYUVTaFLlaYppxNqGJitMOTOLvuFE) (seq (seq (ap i ESpiepKZvsfjCEnv) (seq (seq (ap i RYhjDBpSypXyNDSaZOTZaXsunMXBXOXB) (seq (null) (null))) (seq (ap i ItyutwfwdudwjYYsfdqzeCdAjtmzpFoDrElVIKOVsarNzFRgAWInhqLARpyAzpwZRztzzPLXBQDaiyYCdhWuukMHIqdnjKA) (seq (null) (seq (ap i FvYsl) (seq (null) (null))))))) (seq (ap i XAiyhQSbZFUFEfQKNJRkPFnwUQCRKFqPCZrbWnZKFwqeqxWtPjMfuthUofzrcdjkrmEFvVQQjYWYOzj) (seq (seq (ap i LpsORpjAOhwGabGIrACVLZpNYFcswJSimsmnLXejUQNeABwhYWZFLxKbOhTloeWvktdmFFjjrRToNqWGXaAQLbg) (seq (null) (null))) (seq (ap i WuUTJWzZuUrYWLdegpSoiIaNOaSxbfuVs) (seq (null) (seq (ap i xWiKzlOsZUITsy) (seq (null) (null))))))))) (seq (ap i tvcTBPDhYbIzfyHCXxuOvBKGUPixmlGzsVbkLICBvPDobjVNtcopUptbvFfXUwpRkFhCJosdvoXcFw) (seq (seq (ap i dvbvNdCkLUvbFvYKbViFSkCoQGmigHrbrCajrbgPubXqYPnmY) (seq (seq (ap i VHyWdKIJVt) (seq (null) (null))) (seq (ap i wxWKzdPAUvJY) (seq (null) (seq (ap i IlAkjcKAYzzvzchWjIGOknUqNJhFbNHaVaFG) (seq (null) (null))))))) (seq (ap i gxMUvABBBIXGHjLgJnXiQIONZQivOmjBsAkrZHImGfjoMGyBDbVqGlxDgiCTiWxoiePIOgAHaiJLoyEjqtAkqmjo) (seq (seq (ap i BMoPow) (seq (null) (null))) (seq (ap i wGJYDWitOqfayfJatfUXBgxDQcGthAuHcZQFgLKDcAX) (seq (null) (seq (ap i UOWAuikdaMoKvEiKDSDympHiPgSzFwVZTiTfltkcRBQUxLDAFBcsbiyLFqZAQixeiSFJxNXbvcMSI) (seq (null) (null))))))))))))))))))))))) (seq (ap i dlVTbOGHnkgbaEijhkrKLnhKkddpHxDgJnEdAQTKJfVfayWQENBJaQpAKNnamJrvHjGdzxjOIE) (seq (seq (ap i wGUmiMMwtZlwdXViOATQoXOhXOCnSpSFsOznBOJQqlnefxzwntPpenqFfBMTDaG) (seq (seq (ap i RKPsIjuGkEvScamqzqqhNMSkhUAktGCcwHRJFgAQTOn) (seq (seq (ap i ahSsajvQNq) (seq (seq (ap i GqRTAjTMMILsqYMLorPjVkLZtdFJrUPvSxwMdBGBDXPLlDlphGSOdkYiV) (seq (seq (ap i DPgimpJIyPoWxUaxZbVpeqgOrbiwrcbKwNnHCWf) (seq (seq (ap i luaTACnRyoR) (seq (seq (ap i nTZtVdQoUCeD) (seq (seq (ap i dgHIOLhowStWpSsjjhiIqzfAIc) (seq (seq (ap i IaKKWhvFetAzpVTeBJZkE) (seq (null) (null))) (seq (ap i sowfJANzVPhDBbqonGHLPwfDeIOccYZLShrCfjJ) (seq (null) (null))))) (seq (ap i GcpGgwzywZvPjkYYRmorwnHpcWlateRrspp) (seq (seq (ap i rknfePpaalqkHStcdYtCVfuQWXxMMtVWVelNCQEZXXEFlpQ) (seq (null) (null))) (seq (ap i KXocYqMHNTIDHTqLGCAygDWuHYZBfWoIBSRzwnqHQotRxdrpZljBVrwgnaOIMQcCbuIfEwYu) (seq (null) (seq (ap i qiQDKMGTqSSiQcynNQHMYDvjTsesKAaYBWJDINkbNmPsjaWUxHmuzedUXhWldWmgQahdPuQPsPviuyYukIRKeGBlSItlywwJPskR) (seq (null) (null))))))))) (seq (ap i YmnlYpzsjdcoTWvydFnpmnpbhOofHvcyfITjdhDgkzIhhFHToapjehe) (seq (seq (ap i phzIjEbhzruGiSxDDTKqWHHnaaSTGzyVsLtFfllVKT) (seq (seq (ap i WboueNXddiUHfgYZUmYPSRlQgJTxFFQpjwcyBROLFClDgRYtmLuoXmooTjyQGhvWQiRGhMIMkzTnLbPhPlOnIgbOSREk) (seq (null) (null))) (seq (ap i mLUsfNQsIZoCKCEDVpQOpVAiKy) (seq (null) (seq (ap i LhxAaJ) (seq (null) (null))))))) (seq (ap i xttkHBJwpJPpYWekfwwScvD) (seq (seq (ap i kVsBHwCmeDoaiACVqyRzpdwGxcMSaNWolTufZGyCDSbDRwwSsyjmhnLXHGiDTCTFKIaqQbwTLrHpgtDaoCrxgfMJKA) (seq (null) (null))) (seq (ap i wvbBbekXVfxPVaDVpvQdwIEEQZunEBWOlbMsCYzlehLEItleJRvTbWPfEVA) (seq (null) (seq (ap i YDTdsOXudKYpTVrNxcycMUTlhHuihuovzgjhrYRIWSNOvcO) (seq (null) (null))))))))))) (seq (ap i mqEqIIIpgEXBmuzbjRdFxtngruNEedudQ) (seq (seq (ap i OaVVVCehrUoJvRidOTovsnPVmSeZvtZ) (seq (seq (ap i cEnmUmEhQRtvZFecCCHtqpkgODnBIRAzYjuhnQHeboLLroeb) (seq (seq (ap i NJIZeOsPTIfDcKeWCEPoTWZbFRwtgClavywvJKALOFKwlbHqctpPaxKWCQCEjMNHGgqFrygtaLZyzxNgWtnnZehooIFoyzXtOmow) (seq (null) (null))) (seq (ap i WFecLwxZZlymLjZricUJkStOtAcWAQZXItUHDvFR) (seq (null) (seq (ap i wjvtIyADyXwLayRMUCyfpyjzeUVnoUDlUEZlmgCBmDiqdckIqabSUhzcttxujQuQVkapsifHOhkdqcrWXNBhRTCXHU) (seq (null) (null))))))) (seq (ap i rsqfRbULkGKdNbHziOlnsQUVMAZbZLL) (seq (seq (ap i swtToxCNeiokzmzAdl) (seq (null) (null))) (seq (ap i GPUzKGxYibHMRZFZePLLDqtFOvbVmglQpFYVXkvTFMgfduhT) (seq (null) (seq (ap i mWkfjpHSFDVprVQwNMnwHNwCxPppfYZPJCTywlbfdwaolHzDooxNpkkMVPMGVZsU) (seq (null) (null))))))))) (seq (ap i oVCYaDjmaVFLraF) (seq (seq (ap i oJfDebRIhXukRoTUHHeWhyIwZaXEUpzWplZ) (seq (seq (ap i cdyGbhcAQCuzyOiMfbDUmHYXhudNrMJDFEJxswCQWXsKCdOmGxEhjJBHnrTNE) (seq (null) (null))) (seq (ap i asmoKTuRDzTxBvImhlrnBDgYBlY) (seq (null) (seq (ap i SzHgMowKdpfOAR) (seq (null) (null))))))) (seq (ap i UjsPaEVZmK) (seq (seq (ap i GNRDYlcxLyEfhlKXuKFvrDeRXqlvTmVCFwNmnKJREsMNtzHggeYMLDuZHGGPFtxozcLjzYncKcP) (seq (null) (null))) (seq (ap i xwWWGHCdaRuWoeQymYPfqTTxSXSfAiThnLdsfpAADzzoGanaKpAXgfqWhjTRszxnaSBiNURROliS) (seq (null) (seq (ap i alCDWIGPNwRkjIkWaZylmmVAQySdOJrMHAbEHwIMPMDIuZKwATIPoDMBauRVSiQAZuxjDxAPBZTUVrDej) (seq (null) (null))))))))))))) (seq (ap i aaZgyI) (seq (seq (ap i cCYhcUpJEcXbPngrFhDlKvthgyLbqaiEnISuODnAMONcELPJEJsbzyHikIHDLjnajpsfvakEHmZvVGPpXg) (seq (seq (ap i DTtERoQoJQJTVeHFBHUaiaSCScpBNbcRsNibhoyTdxWpCAfgNfltDwaqNJtbrSmoElILBHsVEBZfO) (seq (seq (ap i PLBzVyahiRkVUbGZu) (seq (seq (ap i IVteuzcJvOzwMPrcbbmVJffuimBKYWNm) (seq (null) (null))) (seq (ap i rGWbjhDHXpGfElisWeHDCmEHVvmwnmzOLKggFBaVIjBaQGuujdWaNTqjEQAODnBiygJVJnfFUqhzTDllYnhSwrKM) (seq (null) (null))))) (seq (ap i ZGTCTMWjSWUswjCHoLqSDyuCaXpxdSrquESGk) (seq (seq (ap i GVwyZPOhJeVJiNFPuyBlCngjNiJbNPOpXewOLxsFFBPrNUhnylNAejrWDdkFRGFTDAvXVpHlESYPpuUFGH) (seq (null) (null))) (seq (ap i HDrLUrAdCyfXivMiYLwKEx) (seq (null) (seq (ap i JMpGM) (seq (null) (null))))))))) (seq (ap i uZSqWxZ) (seq (seq (ap i nNOkZXxlawRwBoTJuJmeMiJMkmzVtUIbDfVSy) (seq (seq (ap i hIWsnhjQMZcKvVqXhjSKixlBLGyxqOoyrczSnCHJ) (seq (null) (null))) (seq (ap i wpcHqLpPrHNZJlUHRFxbhMQTbYDTZCkjAHjZealaaMbnrmwqVACqRWVTHXiGkwbQokDTvOgDreklONBuUrZZkEAMUUIDTLDcxc) (seq (null) (seq (ap i SyniXXgHRDvKp) (seq (null) (null))))))) (seq (ap i nUxScGNXexCIHarnVqiOFQgljjpQfSXLbyBwwqsJzVTFWHrphTqCIukwGSXFieebpaQJpFX) (seq (seq (ap i WJofjesklqJgNZZnBFEArkPiRYAOxZOBY) (seq (null) (null))) (seq (ap i EimNJoLRXckOVaJpmjkYnjthMGzjEqrFehCdiJwSKGHMiGVWRhLekqlud) (seq (null) (seq (ap i OuaDsULYglNsrwmCZzSSIJoOjG) (seq (null) (null))))))))))) (seq (ap i zYTdYJjVgaiiEXBjYdQMsfpCiqjwcQQdqQmbQVCedTbTrHVVaLdUAIPiMexlcCPBQPvlhFymNvyFaRGGHTtIXCYWkDFBoOQrm) (seq (seq (ap i ooqELQJsOtLaohtmlLIZgdZdoGuAWEYWaDhLCUGSDXjQhZalOaOOIUoemvAwZGoXPPC) (seq (seq (ap i JVpJKoafdYGbMqXfNDCgeTQEEgJLoWYPQnZvpqQZhHxMSrdgrgPMBGqEmIGUuxEPBlZB) (seq (seq (ap i ikmtxpdiqyP) (seq (null) (null))) (seq (ap i MuCthaSIHEFOqzwhPWvNvGTixPkSlaMJp) (seq (null) (seq (ap i ojQhRcaEyeCrZzlWWmAxykSBnlcMJzNdanYDjbEtJNZXfWfqvQsZrUPsAGBl) (seq (null) (null))))))) (seq (ap i CnkQREmSpywnWSoaihKSsjUsgpApSHgKeEiSBhoupwiwTlJnYhIlBpYaJpyODUEvOZDXHUFjtwcyTTwjTfmkzKDcyKvJnBfUV) (seq (seq (ap i AELdsdYWCemuWUGKaVsgfDvPDsRWqqXtKxFuCEmjhlGXuPPMtUvcrHhgRIBltQmoRAqScnQKKDeO) (seq (null) (null))) (seq (ap i oJkIWhISSOpB) (seq (null) (seq (ap i ujfwbdVLfFWMFzMXhJigGRkrCxmhxN) (seq (null) (null))))))))) (seq (ap i VdZvfWVZEcHvZLIcMCOYsGJaOOMLXhQAQSfcf) (seq (seq (ap i hiZxfDrkHJsgXosMmvPJVoZlufWkJInxdfdGVnZAuaOfIbaeLilRiESrnShYHNKcMTbtlKUjK) (seq (seq (ap i TACmxIGvNtJQSaS) (seq (null) (null))) (seq (ap i yvOTYmYwyBKQXmMVapPygQYoFArRM) (seq (null) (seq (ap i SDuRgsweFgfTcOdDnOxszBXjyQSzWlIeMYBJdYFdTeBxTDszWktogCyfCeWRJpiHddNCgFGUjJGFnILIRbVh) (seq (null) (null))))))) (seq (ap i QuOxVpSLxRFSXysEZFEJXJPYZlxcoHLmqJPZRvTNcVwELSAOZIyjTURldqtWxApFqlppkKRilbWTyIoZxqOTspxoCRsvzmAlCw) (seq (seq (ap i EkKSmQxGLxzawZvgkGJhOILuBoLqMnKbtGjPhyvZiHhRmqDjOzAPsDtsyqSKpOhAyUpWWarklWgz) (seq (null) (null))) (seq (ap i zxHYAwjypQiysVMJMhJSgnBJYTTmdhATpHLgIatsJJPojfKwoHcJCoRQpXnoNrGKLIBnXDdvsPWuFx) (seq (null) (seq (ap i spNLKc) (seq (null) (null))))))))))))))) (seq (ap i EwrztLtCzuv) (seq (seq (ap i hroyHrASfDvFMhZRifUZYgcItGhLYqSDk) (seq (seq (ap i WKzEvTcmCTrhYgWkZLIcGNEznVEIMxFuBlEpcXJaJkEHjVQgfuRGpQDFHFVkDOCcmWS) (seq (seq (ap i LjEGzxldCCCQLMoidDkM) (seq (seq (ap i aGQXqqYiGohYZdMhzJXgafMxbLqVHKJveNqxKiJxKlGX) (seq (seq (ap i VojlM) (seq (null) (null))) (seq (ap i BQVzbHsyFpVETdIzwgbCaWiAOyWEycQF) (seq (null) (null))))) (seq (ap i dSMfDelgZpYOKwrlFlEiWuKtJkbIwQIkZbCTUqzPoWyhhkmyIPMJiNvMLGChXjuAmyVDsChujdKQvjuxIKkVYDS) (seq (seq (ap i VizVajMfIOvWlrBfcRGcpJftxnusjDlwunNcWsTTaVhfgpnCVGguyKgtkcaVAQYr) (seq (null) (null))) (seq (ap i wbuoLCWYNtvItSTVjDawlaxRbxnBRkjIjxKAfMOZVGcxoOSqYHckmWSoesdrNsIIAUQPzQqdDYXEsmF) (seq (null) (seq (ap i FgrpwHmKbPKDvLZmmlgIRVbBbcrMgJsdWoRmxkIFchFGzIRWVSUBSWvORgVNQkozBFkJKZdeMrNx) (seq (null) (null))))))))) (seq (ap i lQvMIJhxdudqhRRQbEcPtYuvTJhXBkyPZInCOqENgrzlcmYgnjnyOskOygGBWkEhZThLV) (seq (seq (ap i POHHOqCvvBqdnON) (seq (seq (ap i COtCvBoGWTrCnBpgLuVtGZbYkFSQPcvkABUwWHPWxQDQdpAEobPJUykUHjFwsd) (seq (null) (null))) (seq (ap i COaEANuXIbXilcgoUfeuHmupeuaDyQPRzJRZLyUJXrmIDDIdmitelsWutjRtmrZITpcbQdMLxYsJUzyjhuyJbABxwLsxLWf) (seq (null) (seq (ap i BWRPwLkvREHdJTVqvuwUIHrDTBRrNdHzhgbSfkTuQNoiNnQqcPGYaZtAFZBKOtGbLeWUOnuppwvaddDXTdmJK) (seq (null) (null))))))) (seq (ap i suRvUBOTjnjvWPOWFWnbEFrkYAVbWtpCoCxYyAKyxOxPhSigtLnUhhKsFyQcGHGMTuOBEtAgjiQrvEwMbFUiDQRwKDvtQH) (seq (seq (ap i BRx) (seq (null) (null))) (seq (ap i wAzqeZtMBohHwCmKWxiBLxcdzfVTsIfxvkYGZUlUghtqQpvryXkVTMDgJlZyoYplReEkFqRKEVCmXKYEpwjJGbrzayTcfDCPnQe) (seq (null) (seq (ap i XsWLMPnNaYtaHzMIGdqSiSBlEPDliPJOfnaVGkgqxLIPYiIUHgkQzGJHEiK) (seq (null) (null))))))))))) (seq (ap i eAZpqYgAgvnyEMQBwcfWdibLNyBitjspqkWIuZxZwuPbGpdgBjuubzigQSv) (seq (seq (ap i Own) (seq (seq (ap i sSybquPSnX) (seq (seq (ap i eyHJbuiraofoKaAFqKmxPbhCvtBHRfpGzzssgNLRbuNxbYylINoPDVfuTHP) (seq (null) (null))) (seq (ap i wJqsvdpZBBHufPwtIBktJgFyVFYnfWUYZbaoatZEBEhdsAvXP) (seq (null) (seq (ap i gdzyVjnQRPSqQJMZZIDrEhAVCOWhpJGCVUKOeaQVicTrFLBCNKiVvg) (seq (null) (null))))))) (seq (ap i DvfDGjCRjWeIXamDGzLnzgKEpYoksdaPFkdJNHELpjvobTnFxpdngMwZGvjIXpPBcWnArSvGYlqFUvgdSAkSJHeyCdnN) (seq (seq (ap i ufRHRsvObmRvRTlOkgllxHgSjXYo) (seq (null) (null))) (seq (ap i vxhOKTUvbjiRrnEVRRfqjuXaNZjuVgKFvWlhUlrSgCjAmdPfrPLveWPpPvQVtyYtzirXvGJjjuQNDrINx) (seq (null) (seq (ap i lazKtOPnMEzYPSLUEPiEAHGnsyAsdCcfRSLMHtGXxcMBHwTHruCkzQ) (seq (null) (null))))))))) (seq (ap i hIPdOsdFwgLkDnxXWfNHERyNWHolpZQJrLwggLOjWrqbMqSBSzMquToxvJejJYFDulIBFbQjrUGYdCnrSTej) (seq (seq (ap i WyEITTDIAbCNGjlBRhBdXKGmVgULkCWwmC) (seq (seq (ap i tkoalTEjEaoSKcZkBAxUTfAXxZftuAXAuHIQYXCPxYHLFSkaihmhYKjaxDszPbpkxvBXGadnzASfaKNwBcbbqHfkTRHMIvm) (seq (null) (null))) (seq (ap i dGeTrnJMzxpIjpDrGQupYOpepVmZIdNTJDtgIpYGZL) (seq (null) (seq (ap i FYCBGhUCQRHVCIQuWKFIRPztiAqRsOrBAaueWG) (seq (null) (null))))))) (seq (ap i mcNBVDPTnxPCNYJKdBUCaarSZkLZogzRUQSlfWQiXBVrTkgryRrzIPAtKSCmINms) (seq (seq (ap i dZCizprbivVuwohYonYraUvlANzUbmHNZveIiRzgE) (seq (null) (null))) (seq (ap i fBtPaGEoJtEhriMbdRZhAIDsWjUrUgCtgyFHNRDeMIRhLOzgUiVSIhRHnrXIPzgfmkOufHze) (seq (null) (seq (ap i gVArBEJNbV) (seq (null) (null))))))))))))) (seq (ap i BQiDVZCMfQCeOVNXpREDZERciJPyvAhrgcXQTqAMrNXOz) (seq (seq (ap i RZgxAsgMfYpmxZhDLTqPCIhSqrjGAKYzYSkSgzKDEoDTCm) (seq (seq (ap i EWmnSHL) (seq (seq (ap i tVQRRVqgoJuTDYTb) (seq (seq (ap i DGfFhziLVcHYfokawlujIOiZlaARLNweeICRACGYKcUONAtfYDmyhGJwINnqZOZKKdyCHwuVgcUbgPXgR) (seq (null) (null))) (seq (ap i epwzlHOFursLrMAxxWKvJvmzlWomOKkHQiZPWldZKwLLIsfVOXHHFSZxaUpYOxRdDAIjkcMmjRipDOzNVNOUmCRolVtfDBm) (seq (null) (null))))) (seq (ap i JHZxtNtURGtzJoVPxEul) (seq (seq (ap i nKQIJAONKDYupDFsKrGmoUEOiOHpmsJCgUnZXEPjiG) (seq (null) (null))) (seq (ap i ZZhjyeHlESIRRgZpxEbRxymzvEyjpXBovhATTeH) (seq (null) (seq (ap i kZHGoEiLZNgjOvcrbyktSOlmhCJhFUSAuvNnhXApFEQPjOSJPyaUAgmsRZOiVZsZqgeFVGtTcYw) (seq (null) (null))))))))) (seq (ap i VJZcAccunGtRmzvXppcvctKDJfDKvIaCFRHNoZlkoTwGHDccnkZdGFMHRFaPzZmYFwpbZV) (seq (seq (ap i ZVyOLPLzQdUppdMELTJWcbbAIUAjoHLDYRgLXKdFKsnYmoNeyhmYpuLskTeGfjELskKtsMyqffEzldmTKxIWsgRLHofrtw) (seq (seq (ap i rzqlWcLZnddRRItpCMKVDiZqIWglVaEzdEyylUXBixrrczobzditjjivmjMqVKpGWfbbrPOmaD) (seq (null) (null))) (seq (ap i uWlyuAXzXrHgnnzOODd) (seq (null) (seq (ap i fhQvEMDsxhQypISaTlefeYjHYYgYDK) (seq (null) (null))))))) (seq (ap i CKJfGDbXGINbopNeJiFSIfqRJ) (seq (seq (ap i OlSKLpskkZzBrarrFbMFCYZPiYcQNSjLTLmLJAngozKBhdZDoCvchwuyazZGtBLCtELJoPAprIWaMzGR) (seq (null) (null))) (seq (ap i JadDPGcmgYvGSuBvLvZWPUYtXfcyhhJvXkhVGePqsFIOuCPUU) (seq (null) (seq (ap i DElhdhNUWXIyZ) (seq (null) (null))))))))))) (seq (ap i hqLYDsAUemIAUKmNUEZuIVNHtTgMdfbdubGfWzjcIxomvIKe) (seq (seq (ap i iiyWuYcNDEtKmjuyESJwXNbcLsFKYzyfFOZafFVbLFtMVjYTAPbeNDIvOBmAFtsqcQEcKYHplJBlchvqGVtP) (seq (seq (ap i TWtLhfFflqUomrsuhoDsvdYRzHcclnuMmmfZhtLeltcSGnNNYXR) (seq (seq (ap i QuueGB) (seq (null) (null))) (seq (ap i xFgKlacDVRKtNRUVwebbUBHJJRhluvhdkqYeuhPCTP) (seq (null) (seq (ap i TkyblPfJCcegibstvmRmHHmpgIPxVtxWSNvybZoOsxd) (seq (null) (null))))))) (seq (ap i qfQUaDIGAlASMjyClidXJtPhNHIYjuBhvpOkDgKHxfKpn) (seq (seq (ap i iuzaUShrPWNFLpurGZlxYhbfSurSBQxIojviSDxFMBDAYIecLGtDrivTrACWRABTQpCsRGtMcYBKAGJoIyqihCbMQCKW) (seq (null) (null))) (seq (ap i MHGThDsEfMScccnqc) (seq (null) (seq (ap i PPPjPjVimEDztraxYiumkbYCcpPvpSYniBgJjmiqpRY) (seq (null) (null))))))))) (seq (ap i DWEZy) (seq (seq (ap i hBQFqDEWasTdsPGOPrlALnnEJmMMpHh) (seq (seq (ap i hCxMbhMvvQIbtvPDhNmuQYJwAaMSirPAgnhOJNzdHFHxGInVCukSX) (seq (null) (null))) (seq (ap i VeoemHpVlknKBwfFMohaQjbSJwifFNqUtSkdrVMGVEDs) (seq (null) (seq (ap i qXMGzk) (seq (null) (null))))))) (seq (ap i wdWnxOezTfFdKsuWrHzUyOzBntxiGRYKSZZWIzEhrifqjJJgDO) (seq (seq (ap i cYOmzvfoPcveLIqILCwOuvzNaloqArtrxIBCLdEdtPu) (seq (null) (null))) (seq (ap i KkXVimEvzqihntVneZCTFtjyxwxOJRJrGWJbIHlIWUlyHTuAgVZeJBlvGmxUBiZkDWWdzwbENNrJxNLxRTiOCOgtIg) (seq (null) (seq (ap i vSSLRTRfsSJxntBsS) (seq (null) (null))))))))))))))))) (seq (ap i SUvNJnDHFaqunkekkwftNsGPvRpShZtmvCWBKbtWStXXmDZNhlFjaMRTpGYrNdS) (seq (seq (ap i tgkNBLDyJWYsFFKk) (seq (seq (ap i eoVbndXrRAqjDobBuMlVWvhzikUUuAYOsMdPKCBgTYOWQltByRaTuuRRDHhQjmaLokNgDGVjAAfvOeRWQu) (seq (seq (ap i lmXzzDVCBEneNomuNVHJltKfLZtiLKJaQqAwmfEgoRjXhvWaKEmFPlsrzMqmZNc) (seq (seq (ap i xYUXTRGykMYgVh) (seq (seq (ap i TnuExqSFubAtXWJEyf) (seq (seq (ap i GeqESerFYPCRBeCisWVkqeECIQMnvFLVyoHhixRKwcQRVsrBvqEgeceDqyqwyliZBJBDfEJlqCwAOEpqxAiZdaz) (seq (null) (null))) (seq (ap i HwriNeyWEcJvHmzNJGJmtDWttwdmOnRUAzHPhiLiGJMvznZLGfXLjNxupwfRNhZoxol) (seq (null) (null))))) (seq (ap i INaYmaTPzlGQsFkQRyudkekHTVDcTuSQOBpbQAfdXogTeRrUGwvBOigSfbrrskpGHdLkXTvprbZ) (seq (seq (ap i kWBfLJyXiwICGZFpxTWEVWGjjdKHKXakikwYNKVlVplylMkLuLCsaeFTGTNyRmZpCZNnaKPJyaKcgpnJzlxOWbDMZDqvAR) (seq (null) (null))) (seq (ap i QmUXuKOIJRGUIreDPfyKxZzoyCkQPbJigGMevMzHdoIGDPLZgQmeBnxWuaqdPOjhtdTmeGHDQmqVrGcgAJB) (seq (null) (seq (ap i GWPclLBhvNKIrVu) (seq (null) (null))))))))) (seq (ap i mprzmiUDmorKRnBEYoInZrznlpZNyIvyBAib) (seq (seq (ap i rHN) (seq (seq (ap i roJIQaXwaHsgFixHxFLgBkiepqhAgTbzYBnxZKfNSGZfmHXTyPbWJwknsmCSfzVZFayoapxdlIgyqlNUzNRfNBlmwEq) (seq (null) (null))) (seq (ap i ZRjPjIOTcGzOYeoeekMnsjvJJQESyxJivWBZMGPrNJkeUmFCGe) (seq (null) (seq (ap i mtGv) (seq (null) (null))))))) (seq (ap i StGeFVSYQcygmlccTvCeJZFRwVatiWMOhXoRdvRBvtHCrRqwx) (seq (seq (ap i RCwKmoeoADhVRldGCnHhmVAsFWyQP) (seq (null) (null))) (seq (ap i tLkfZgOB) (seq (null) (seq (ap i lsWFsiNHYYOkXoSyjxlchCzyGDTCFIjmGOWcuGDTvqWpppnYmLRknBHqWvkkxBFRDDwGnJlYLHItwGHmVqavkaNxyS) (seq (null) (null))))))))))) (seq (ap i BuhENkbgIcpEIRoPUnXEoSEUjoJujwWO) (seq (seq (ap i WADAlmlqHdbPmHARSQfTaBUcGnMORDutWbeBzcIjGOkmuEX) (seq (seq (ap i sRXDKWbIbkJCbuNJHJGoXwkGvbHWaQxPcQxncghpHrfQnjzaXbMoTo) (seq (seq (ap i mpiAPXdZdqFMFMyEOydkhjKctwGUyyLfmxbzH) (seq (null) (null))) (seq (ap i DBJaOXrvxnPjeOvzySuGCrlegcYl) (seq (null) (seq (ap i BiwNXypFT) (seq (null) (null))))))) (seq (ap i ZvneJpuSFVRBkfXcQmxUTjBIOTITprDJNktVRVzAVyPdwOVAG) (seq (seq (ap i AmzCuXJZFjTOAGERtnxhBEGovlITVySiFEsaWDrmHXTCWGFZuyIqLsnpttKOVAEhFDvfZpsslEscYmBGibBUg) (seq (null) (null))) (seq (ap i aTaiRUdfAfArzmHKqsFLw) (seq (null) (seq (ap i LAtfiqRXtntkoUKnOiYvDWjGxJxBXqUNsa) (seq (null) (null))))))))) (seq (ap i VoOcGZCJBbtQobQWjxyrSiwbwnEiZFJkMDYL) (seq (seq (ap i JKXqGiuimuQiHVsApQSlxPmkeaVyUsuBjMeBXpLgBPKpzBruMxHshWxXUcjoyNAeEBNpiDwlkLGmZ) (seq (seq (ap i EVCqHXMGRKPmrKXvDorgbBmZhlQqiKCqCyafPaIPAYUPSfXWhINRWjOyTLVksINks) (seq (null) (null))) (seq (ap i mSjhtnksE) (seq (null) (seq (ap i ukTQrieTgzMFQgqtRvBVsWUWzZcbEbTUudirygykZpEKfTjyCOgwxaBMReCZkytoshEuAKXVcJaaEsh) (seq (null) (null))))))) (seq (ap i DsKlcFJBbSXEnLhrKOvCcXiIvhjRvustUArStfdmWbCvFZYcUVgsczYvTpBtvlmHABWMcpDnVHMcmgKnhlkETctJXcPhvka) (seq (seq (ap i tgaiAgItrYXVUuJEnUKcIhlTkdrnRsTskUvKOLfPFhrlcebQURqqsb) (seq (null) (null))) (seq (ap i hOJYwMatWGpsUQhmQtGnBFYpkNyiZsjDo) (seq (null) (seq (ap i BlBbHYuodLVmvjiegsTg) (seq (null) (null))))))))))))) (seq (ap i LRRINIajMAeFNyZskwhPFwCmxAjJoHMsYAaWrftqeGSdyMvFlvWfJrHbzRbNLyWrFYnOGPSpjJIUQWYuzpjx) (seq (seq (ap i GVsl) (seq (seq (ap i IjcGhREatAELSMyQXRAqpGwVuMYnsfDZogpQWepqjQXEUqzxwghFXaROhHpdyRJRBVRzyZbAfkM) (seq (seq (ap i zKZUKSIepWsiWIPhHesBfHusMdjOVAFhkTclqvRPvzIiOcgPybhtuHjygoHaoMO) (seq (seq (ap i xORHSjmNOxvTlBngeRXIQweRcAhUaSEISsXP) (seq (null) (null))) (seq (ap i PAEl) (seq (null) (null))))) (seq (ap i Sk) (seq (seq (ap i QVvUHsaWqrVTBXaiijtQZaIvhRGGmuKowvIDhDbxeHWZeLDr) (seq (null) (null))) (seq (ap i UGQhlWyWHiBgFCEjvOXQiWzhDzrjcYZtNotBgwHLOLUnTlcw) (seq (null) (seq (ap i GOuERIGGzteFSIjEVMssZUnSMYPsDoBsRnqzdYqbbQVlVOQHojFTbYIeNiDucuZnPrmdaqVDJbcxmtQytlEKdvuOHoysEwFzMaM) (seq (null) (null))))))))) (seq (ap i fWDfFQfbbIAYedKClIlVbwWCbUpwJGxMFJJGdOmMEn) (seq (seq (ap i DkgfKYQTQJSvkPUsNIKIUwAghmtvOWNByhvOHweCGYJJnSYYqayubbCxPUxKybnqUFQkLLrdbvhHKqVuwVvTDd) (seq (seq (ap i hiEGjRpjjHwKAnmu) (seq (null) (null))) (seq (ap i kykH) (seq (null) (seq (ap i tmAYwALjVeUHGtVUDuhjckFWysXRgvyIfVstuAKqBziD) (seq (null) (null))))))) (seq (ap i mMaAY) (seq (seq (ap i IGFHdTCqOryQxlyiqPEbCQxhLahnGrUmbWBKmeIIrEKNVFlJzBUKCotiYopMitjCgqAwsiAhbvDKzdtCqUPk) (seq (null) (null))) (seq (ap i hcmLPGnRWxBnHbBTGKZTPXLBeJpitFcdOcWvUKpQMARoekStVIjTxZFWKxBzpYu) (seq (null) (seq (ap i mIEMPJbuLimpqTGxWdqFjzOgysDEwQrHOuLrwbkqXxBBJJ) (seq (null) (null))))))))))) (seq (ap i ddrvAKqLzHMgWOPIcQQASZQVJQqsmWAgPICplRqMtWNDKhXWRXIWniJcNxtTDSpypBmjkrssXLoVeMA) (seq (seq (ap i IiTIVeGAzmRYawpBVYYCrwchkHZPytdIPkmYQKTEUPcxaGVxzmjDwkrxGyNjPcsFAYImirLh) (seq (seq (ap i zt) (seq (seq (ap i ZdaJyzOLruCfqWxSihjCnVQEsQVFSbGNtqwsrdvtlSgYAmuqfmKLMqjwhfygPziwNfkevIwlaNADZpZZQs) (seq (null) (null))) (seq (ap i OuYNZZRrzbndZyKeoOmZrvqTAgYNsywSjHXilkVkdu) (seq (null) (seq (ap i xjiqEtgRHjFbDgERGeBUxSOLvwRZCJXjgKgsaDsaOj) (seq (null) (null))))))) (seq (ap i uViQiYbxLBcVdfMUEJRwzPjblGfWKNUZFnhyLYSavWXtDzluGtJhNrpHRcWUTyefAKbzDcEhChVKKyMjYdQRzGBUoNYeV) (seq (seq (ap i zasDApBGFzcXYvOtrAczHWnspKtombJEPEjbvevUqBIYxPsymeMWkvTzvOnVmw) (seq (null) (null))) (seq (ap i gjgusOp) (seq (null) (seq (ap i sCAWmQLHlIrBlUjvUgnfaKDNvspTsTxaenAzyCNtRZxyhAoxNQLwHnxxolPZNWPbRQ) (seq (null) (null))))))))) (seq (ap i YbJISmITxisgnLoTUPPptkEsNgtbpivWIrkfyqCQKOHtsttlpNPDnhtY) (seq (seq (ap i OMIzPrRfFznuccmpAKPevafGqylhKbYMZLDCbnlmbFrdOpCZGUpqnWgCzOXSVYYBUQrgidAH) (seq (seq (ap i sweqGuispfpycOVevclMtV) (seq (null) (null))) (seq (ap i UziQnXKDkBnGkOtwSNvRueTyDxphwTqEiogRRPmGoOpmfEjypJfhElvrFVJalZdRENJSnkPoDwaBaqBeNnbX) (seq (null) (seq (ap i qXIwPVioAUiUkksJJqrpyxldqFHapQ) (seq (null) (null))))))) (seq (ap i rtZksdEOyTpMmpvDbUDFKJSAVujGTmicIweZuCZeoSphtJFXRpXcxCcelejNDwMsHemvJCbbNKhQesojkQEHHzRaSNuMcCQ) (seq (seq (ap i qkVOmAztvQnZYAfBffhgVGMCRShXwhZqbyQEcTkdaAzpLmiKOOJXMg) (seq (null) (null))) (seq (ap i iBzKoNFNVzwnLQzZHwFSUnLoXyUVsjzfmzAlNVTSYsXIATv) (seq (null) (seq (ap i vZmZAPzLMTRSoLSpFugycXhnxeSCbaprIJbdJgHZDDGyhOn) (seq (null) (null))))))))))))))) (seq (ap i IQThGkyKjipBQKtgutQQmZqNblfNYlUshobXmuGjAspJjEWkqqsbgDaACqdhXsothYnAqGzMLT) (seq (seq (ap i btdDVZCuOsMOwhujYaoWRnPxaNJLWRGGAEMpuWABCvmsSNvDeqajTXcujSHnaNHyGENZGYLYADMFZoHQVxMWM) (seq (seq (ap i nhdJyAUDqePrBHPzkmTifSEzpCbSQlGEQZTjDh) (seq (seq (ap i MumaTQnYvWllffKfICxCkfxeZGmoyFypXihHxpCtSpkYtCAXwnbTjfybQAHjKhBsr) (seq (seq (ap i OqQeSvtncEolzNiIoBHIrSrP) (seq (seq (ap i QEASrLHCtMyoXFKCFomHrwVdVaJAPoHoPLWabqNYpeBfMMuWWMkckKSpkJzNxvzcyubwa) (seq (null) (null))) (seq (ap i TGEJttqRjXeR) (seq (null) (null))))) (seq (ap i XHIaEhbURvUurrEtNDgXdxQkbCgplsqutDLKZMskggPXUOFpTAlLEXUndMTiLTypmlOV) (seq (seq (ap i jcvUsKcLSjsJq) (seq (null) (null))) (seq (ap i wgUcGksejGXlQ) (seq (null) (seq (ap i DanYwnVuuJYIVnddFBxuwZXIdNNtWScIWhLaOqGtMXYpYshhbdXSjV) (seq (null) (null))))))))) (seq (ap i jKQeWzYLwEjLVsmFDopzoymXnZkFKjWVLVD) (seq (seq (ap i bwdbapoUZpAdbjTXbQwCmdfvChVLvjeGDBzEgbakBNGBouTbTrpcthyQZMjK) (seq (seq (ap i fw) (seq (null) (null))) (seq (ap i sJwVtzEeDkfXTahICEDouUBqQpKAYGrJlSOld) (seq (null) (seq (ap i JOErXgACsOoQlhnzMktXZMQWwXMxaZuRrZOMlwWYlY) (seq (null) (null))))))) (seq (ap i BMKQtVcxxJrXawiQOMDiXQlquIenWcYOXpwxVTyWMfFrLYStfXVnWVAl) (seq (seq (ap i HZAufYVbMANkZugeooHsVrhPGtCGLmcgOUHnVzQwSEYVVzCofzkiriLQjosdFjoduVOHJriAwhsheckTMAy) (seq (null) (null))) (seq (ap i MKVWREgynkzYmDanvZxcdGweuiQTftOOgrQkgllqlLwZJwIuwrDywmehQcbeLTjEotTLmMzUUKXyWayzcoZZXiWXuwLTykawKas) (seq (null) (seq (ap i qCSpILMROPlOBRRkTcWNmVNoTgDwAyvilFfKgcwuKdDSYtoyrQaEkRIKszAmqCRdGaLfWzUmlNk) (seq (null) (null))))))))))) (seq (ap i MYUetTEAPysZdXckQsBQncbsUcvtDntOj) (seq (seq (ap i hWATEAvymqAsxgGNUpMlDttvmjtOkzTyYUrSwfaZIUfgBfFhxyteK) (seq (seq (ap i aMpHFwIfRMiiOovWAq) (seq (seq (ap i gaBmNSrrxjChJsPwWDBoEMfLwOChyVoBRyHliCqBxxkAREoybVqnFwTMVNArAlAVnNOxYnFSCstzBNyJCrJ) (seq (null) (null))) (seq (ap i XiffAdqtTPIAKwlVgfyywXUmKKzoTQUpDAjSiDvpgMkdIqmSbYIhiPmReQEYYTihpuQxYbJZX) (seq (null) (seq (ap i qnRUXEOIJF) (seq (null) (null))))))) (seq (ap i sqbbyVJeNBECydvUgeMwXRLdDttaCumBmWovgQxRkNhlARzWyTxKcwfFPwNLgFvjVkAMzUGWqkpMGMkmXK) (seq (seq (ap i puWrlQEFGPtBHHCsOGaFytOfRtFanXjqVvBd) (seq (null) (null))) (seq (ap i RRrenbiUvljmyfLiRsELtBFZEzjitvtmKuvnzoIsnQTluojDgRuZWVpJPQZR) (seq (null) (seq (ap i fByryANTSGJsWcWmzDjFWrkLKYyVBGvIDGIqXAZKxRMb) (seq (null) (null))))))))) (seq (ap i kyUhgkSUUkCinZLxoqWIxSqjMajvzcrXdKs) (seq (seq (ap i tDFxLMHOSfGAWcy) (seq (seq (ap i qBBKHW) (seq (null) (null))) (seq (ap i AdOdbHaLiRXYNYWcJkXcCwTqNKRGodKrmKtAKyTmrWWqZI) (seq (null) (seq (ap i ONBHTmGgKQAHqOdDyvhAKNXDXJUYstxKKAWonniQPJNcBpxYepAVBlaN) (seq (null) (null))))))) (seq (ap i wQNLNlJIPsgapVCKgRmIPjLutAsjTLOwEJLAuUWVGSqSxdmumicxlhgwAnmrqpHhIhrjcQCyRnuXsy) (seq (seq (ap i hmRSFfSaXEddsUkJvmXslEOvXHTYaSYfkWWnkaNpSFCSGfbQDwqbPuQRZeTJQAboGna) (seq (null) (null))) (seq (ap i WLZXJXlsMKEbAbHdufsIVdZXtucwxqHLbmAtmDbqGcnZLEveRQUOnmCPVaxznsQurppXVWTEAvmcp) (seq (null) (seq (ap i JuJIRcVTvgXELLNH) (seq (null) (null))))))))))))) (seq (ap i vJtqrBPXjWlPasXFZEDQdSCJCpQkoPkJheNwoNuCcfYfreEZRtDCMpdlmopYqa) (seq (seq (ap i PSOPEfhsTMInuuaVuSnORBCdnjJSPSHZfJMxWDAQhvvYfVrWNgrQrgFvMRsRYMjqohs) (seq (seq (ap i LBbTgxneMYEIDrZFQAqSXiqYvdTtydiJtBIdtZPILmmLhWkMdNyuxiCNHjluakvZiAXNVDBLL) (seq (seq (ap i NplbsPbwoneogVSZmiBpzSOfBRERGcasSYDAnhHPNbeuHz) (seq (seq (ap i TUZioPbgCyvNJPAfPCulHSHFMtNtvholTnuulqqzYwJR) (seq (null) (null))) (seq (ap i Qo) (seq (null) (null))))) (seq (ap i SUBETkVFbaIMESkKOLEkRWBRBINpgpyja) (seq (seq (ap i LwmsPagpZzwtWrrlAVJLMbTePXURFjwifmVURfHcQEXacDQze) (seq (null) (null))) (seq (ap i feMFAtQSAKuSoPIpDQlAWWTWeNvKBLNfiozVPkEqvSmbHpShBDKFdeOFMfcwFPCtxefMBzYlxIYgZSOiwqu) (seq (null) (seq (ap i hTmsBviasopwcyjZmojvIdmPrZHiEOYuHtyhqRtpUUWTpqwVGCBuhGDxGrEKK) (seq (null) (null))))))))) (seq (ap i NInpj) (seq (seq (ap i BYyuGZoKAIkRgzXOacAmVYBGLzKWGizcTBvIXDytHbEaIqrxHcjbzFEnMkRepHrxuFNHed) (seq (seq (ap i gAzdjiCUQsPBAAebycwIqbwCHuzZDTeIEsZqbazbxslb) (seq (null) (null))) (seq (ap i XVOttuWfmsEmJkdrwtuLMIigeTeLHexogLiksMaUbMfqyvTZXNjOUeeRYqGUGbePWaPoST) (seq (null) (seq (ap i bCca) (seq (null) (null))))))) (seq (ap i QAmBmYCrkTYsvmjWrAKZbnWxSxbOARUKoR) (seq (seq (ap i PFiudlzjoeBOANRePaEXdHVudETpxVYteAlxqRrFOOOzTYJyDWrPZ) (seq (null) (null))) (seq (ap i lVeWandMntxtKFsFhyayjo) (seq (null) (seq (ap i vyQDEQlhaOdQpbGHeNFRjkwWZoWxGwerlLxCbiGkylasVetDbwluXFtheBOHXSJCfs) (seq (null) (null))))))))))) (seq (ap i OSCQPhVEWCLsVsziJlKJEExOHDseMtUXDRRwbM) (seq (seq (ap i VvENTlzgZFhhPkTDlVsPyEAjwPpCOzIZtRrlqLssfHcyehLJSVMHjNKGXhVtJbdnVKuTwnFkDKXd) (seq (seq (ap i snkeESTSIavRuYJPuIYxinwGPjAgZKRNhE) (seq (seq (ap i JHVYJFoeQNFucNwaJOttFKAPWXkWgBMisIYWTjsFZGLQJtrDYDIuVf) (seq (null) (null))) (seq (ap i REsPYPERtEqKzkRIGxuR) (seq (null) (seq (ap i lOhseJjMnvgiobbQXlGiLlsxUgKIzwHEFSmLhLRsJzZnxq) (seq (null) (null))))))) (seq (ap i itnTNkBaoSlxonjHQVyBbSdoMWbypOYgCVdmhL) (seq (seq (ap i LnRxKLrnKHLkQqMVKYRuKFkhMVUTHYmESPSQifAuEWqchykxdfOaDVXNaOFtwfKvEVQoDFhiymZbAS) (seq (null) (null))) (seq (ap i QNvJefGthvdeqQlONoNGVEUNrkvZW) (seq (null) (seq (ap i vDLXRTHlBcUYNOC) (seq (null) (null))))))))) (seq (ap i dyLUaHvdZsfKHDhBUDAohzAB) (seq (seq (ap i mLfKlOhTQAwhdfcCaQHopUDugBVBdJekXGeqmLMuz) (seq (seq (ap i JulttxmxmGRNIVXLQKIeDtQPrKTE) (seq (null) (null))) (seq (ap i XvVKVbEQDfRYBJgsngdb) (seq (null) (seq (ap i LzdkbPvEGQddiWjIKJJEygDWsgVTxJzxKJYNkgrXSiKXizLuwsLPXQNTvLvEqmIAUTGmIgEl) (seq (null) (null))))))) (seq (ap i CVATOuzudLidohNmlUOTZjFsmNdzHwNPTxvscrsCaXX) (seq (seq (ap i JPhNXQtbexbpWaWeieLcQxzjRJQzkGPHnphZajhCvOhrrVsXUu) (seq (null) (null))) (seq (ap i VzGLVeLRIQZelgHXJRzMjRIUcUi) (seq (null) (seq (ap i zUQdGNALfXsRHNCGxhBGXTqRscKnYCqEGwGsztKbSuLaYBjTBidXSGSnXJtqQPhNUYLZn) (seq (null) (null))))))))))))))))))) (seq (ap i OFVLHKPJLwFVcFhqfiqKpXpaPNEBVRddRjwwBcmrFhfiDGkTzpnRw) (seq (seq (ap i FINpCCiHxnhFXvyWsPYYWrmyjrNmmpdVtrwbAURXtOUixfWXsNFNtcFsaNelECYZmMMJy) (seq (seq (ap i WEgECTgWhNLzdKqUMGJPRbnUQQHjIwIFGWfMoNFMEBmZPSrqrZTnKnM) (seq (seq (ap i XQVgrLEXpJSPtotodtlHSOWGywCWPrDVEzgYZQOcVLENCueVyNppVpDFGkcYxsIfJVlCbEKgpxUwyH) (seq (seq (ap i SzgpGIcEIqEFpAuDqxKMLBVhnZSTBgsvqIRjugQbQrgoTUORNMmJdaVKZAhkoyaRqJZhrpeBCgMCUIUfRxxOxGlFieWlYMteRd) (seq (seq (ap i mQOFySdpKloDQHBFtmgnmceKarwNdvAMrqobndaPEHvzJJpcJuFvBrjiVudlaA) (seq (seq (ap i OUASmvNxeFgDogoosmlzPkgYpaXoPSpjqUaIKdLjEKYTUjfLWdsYDUIITuttVFofxhYLPuSYCGBRynYuMKMFsrekduhfL) (seq (seq (ap i HmZpTnhxWOLVjNYbSXfiqgVraTOsLVqrtfaVYifCEKrChHvjPFqPLScxVqIWciwHObwkaBfy) (seq (null) (null))) (seq (ap i KUGRCMademTYZgHcJbIgNMJnrqLoKSxZiFdrDREqnAPoBoPshYsBuLxiWChWDZNOifrWuztVXpszfXxzk) (seq (null) (null))))) (seq (ap i bhHvxJBWKxYMkatlNfxZfsYsavXMDIOIhJs) (seq (seq (ap i xCpjEOVkjFDUHElUYbbulzLmLmYfeWCiclaRFAWVwiwuU) (seq (null) (null))) (seq (ap i mDkpotmTqfzvkTdZXiCXZgXHrmTFlzYWMxqzPSqRosTfEbGSFHiCdJ) (seq (null) (seq (ap i lNoLYAfuHHbjMOP) (seq (null) (null))))))))) (seq (ap i ZQqCJkFtkDmLaaxuXebHmGUJXuGXiJUOOAtmOGyBPf) (seq (seq (ap i AAoaL) (seq (seq (ap i PVIZbQHCMnZfhSYUlxlkHlNXULliGwBALSwPiNOmYoEaFIbKCdTBzpvZzwcMLrFHLNVMqwnlHUHvxuL) (seq (null) (null))) (seq (ap i JqSuDYvBHRtlQVnehOcTDDZLixR) (seq (null) (seq (ap i KDNFuMsHAfVvbgyIumIKWImLnpQVHqvfpRXRnIvdbNrpzdUPtxNPYBjAXRWeQkTTiMPRmGxKNgFNU) (seq (null) (null))))))) (seq (ap i YwuwRwHsNFNcDwkRzPnuNSePsZBaLpnGvjpkavAdfLxwnq) (seq (seq (ap i IaZGuDzv) (seq (null) (null))) (seq (ap i GZZyoxPCLinON) (seq (null) (seq (ap i kyKMBhjIJrizPdNs) (seq (null) (null))))))))))) (seq (ap i bUsUJnHIrqNJTXPtGPVvvMgeTDO) (seq (seq (ap i tkyWzipGPRpNXhnaFSFrPkGzZPevqIeeANl) (seq (seq (ap i IrXGpccSguIJwUWSEcrqOQPS) (seq (seq (ap i oZcqGepyBGePsvdmleMloZPEAklrCuWKwSzdGwHKGwn) (seq (null) (null))) (seq (ap i bYgDUPmEAeKlBlFexzZL) (seq (null) (seq (ap i FoUPZwfbUoXnCDXkScyAuaCspgcobIjBXzxRRREBfScMHRLKxHzSdKm) (seq (null) (null))))))) (seq (ap i vMWhlAUTFLsGkerwvTZyEfTPa) (seq (seq (ap i EOPuNfbggzedMhBvSZzoDSaXshTgIvsjpVoRkyO) (seq (null) (null))) (seq (ap i PV) (seq (null) (seq (ap i UXzpQWoMJvOKtCMdaAzuQF) (seq (null) (null))))))))) (seq (ap i xBOJIGwmQtaCIxBRxMZWcYG) (seq (seq (ap i UwzYRKqKlxQEqJLQcLYefYcPWLjeezggKlUvnCuAS) (seq (seq (ap i iLdzFoSDLxBdRqwlVBzBRutcxRrnpQADlYqsrHkcojvyQEYPfJsxDWJ) (seq (null) (null))) (seq (ap i hqiETcXhKDqwxRiHGxzTqeNPEKBzizWPvEUfmNzfinKaObRVXbRDmnDYSibbyuQRTcquWORFHNWkODDWuBDvgQhP) (seq (null) (seq (ap i aNiaceJBUoaypmvFZnEzdToCmXwKMCKXbUcZZOghVDtpvFfIMWEBDQpAefmCw) (seq (null) (null))))))) (seq (ap i VyGJERgicn) (seq (seq (ap i XADXNyoYPZlyiOknSje) (seq (null) (null))) (seq (ap i hkcFTSTTiXR) (seq (null) (seq (ap i RjiLelsJNDpycpSBnrOQdKahltcbWExksUDvvhobCqPdWDyxjVHbQjdQDDkcKVCmsq) (seq (null) (null))))))))))))) (seq (ap i whRXorVDCTLbIXrBxNfZJZuaHFwLeLaNhoEXFZniVOBkvigravOMIizQi) (seq (seq (ap i mRXKxtXVqAbBsrrAgOgwAogDUIlqzomLTgmnjFHIAGzjvTlJOcdKeyzLbZXMymAnDavWlWHTpQMPwf) (seq (seq (ap i mJfLytiShhib) (seq (seq (ap i qRplEnxpfcAsaoqURvIdoajzOVfryIUUMpTOwvrGabOFrcPWytxRxeeHDwzVKXpNrbCwbnCCQEox) (seq (seq (ap i yyNfmdrmqxinZTVvGkdtzKRvvzGhQphVRFDtGgkSlEfRjMonYLpoSfGpJwEaprryeUIdzDwwBXWRPSXZPltX) (seq (null) (null))) (seq (ap i tNbguONAHmlywtIiAQZHkXWImQDsnyDRc) (seq (null) (null))))) (seq (ap i pMjQcHnufLiKisVxWRivJabCMuruvDqlQYRWFCTVZPPMfVznISjrFafAYdZ) (seq (seq (ap i KcWnnREmUPxaHBWlviiyvhCmurxTzIUBPMcemKknUlvHVVKglreLYqJVjcBaTwMjRWrIstPdqCTIYuInbNHCQWciNZZVViL) (seq (null) (null))) (seq (ap i iYbEhEyseLqjd) (seq (null) (seq (ap i eFvYwSaoZXFtfQTgauqHdBJfiOxJIujqIwuiXwAkrogAEEDPvxEkoCuLSsTjsLUxiuqQRYgWXzveryH) (seq (null) (null))))))))) (seq (ap i zLKbuTnPXOTHTYdtzoAWIPBJsIijNqyfINysMXHlEIaUzIpFBDXgTnkvZLISfVAVz) (seq (seq (ap i hvccDbmGGdPyLPmnmnUfzCTpdFKIFORvNqNCJQtAbGJTrpuVJaSGzoboiUdAmxofrAjEkbYNwxWDIBBdXhECAiCXYHWq) (seq (seq (ap i OeOzsWZlzSQuQVbJirUNLuDvAQbKpLxbPAJuc) (seq (null) (null))) (seq (ap i nDQJpgAGphFviPMsMSVwdeHyhSBUatRdQjdZWsUi) (seq (null) (seq (ap i agHLQePTfwaBwdMxrdCvgMmwNMktXmJDoqzGdIMsHaLhIYYqQFPXRbCysIkDbgGpjGDeyvlAQAGLQwKxiSZXRruSuJaPpkxDQeu) (seq (null) (null))))))) (seq (ap i cxHAxqqkGcNE) (seq (seq (ap i gvBEQVvdpUTXRpCjObXsgemugtiBLhsKpbdKOHJunLwPAqCsRexsbaJbUuskONhSTGmbYKcAGGQrvDUAGLNQS) (seq (null) (null))) (seq (ap i sxyGJcESsSHSyfmhiLFFPqk) (seq (null) (seq (ap i KIIdHorpkKPcrktinNOHsMHWjJTDBFhnjHXvcqFeBiUWMtLguCFxxTPsHsIQtIondcByQdAEYzHfkhoNbILHlrtEOsyjAtV) (seq (null) (null))))))))))) (seq (ap i ZqTuXpHHFsVHmGKsYyDpeIAGgCPedzzUEOWnhfrDpypvgjbHXtvoKcGGzjlZpsAqSTrkXyTMtp) (seq (seq (ap i lYoDnhtLrzOFWegUuyACEECejbWurweNADnowUDxlIGInBHHnqIDSiWHGKBlEbaBwmmeqFnZb) (seq (seq (ap i ZaKDuMXUhRlZglABXQlXKfJwtVpKQZDP) (seq (seq (ap i aElTPlXZHXgZrulFDiRSUwZPrJVkAmuEmsXvGHlmQTfMMnSyAauarPZMagAimZJCeSTjtw) (seq (null) (null))) (seq (ap i XMjOXvqXcUTpCClDIZtvcUeQqDDqPqqRaKyjhpzKTabDJfaTzVIxJzgSmMEbNuYIFeNATgRvHZaoXHoAmLrfdrXWnTfDqeD) (seq (null) (seq (ap i vSGsND) (seq (null) (null))))))) (seq (ap i DhbPNYQzanQOYvYkSDU) (seq (seq (ap i pvCarSEVIwQVCxkZDBBfjVUcJgKyuwOkhX) (seq (null) (null))) (seq (ap i ecqxoMRQXoQHACdtsBAdSImaowsldGimQTyIZPzEntClHNMbfNIwzP) (seq (null) (seq (ap i sqoikfeIfbgsNgOlcPwnqcrwZwnEXPMWhmYQQuhAGtEolZOjtRwXICILOlI) (seq (null) (null))))))))) (seq (ap i lXqmcERhNLktJxdBfsWz) (seq (seq (ap i UtQVYoUffjzQspDTdLswTPAlyWlpAuLEGYJhODmrIlpvUO) (seq (seq (ap i uNlpEwnGmUEQnCDQaVLYKwiMonQIGcPlcPejwAtrDNu) (seq (null) (null))) (seq (ap i StITVQJZDQiaOVWLZVbLiuggGAKbkFnoZIVmCDlDuwjIHiEjh) (seq (null) (seq (ap i VkqVmaMxUypxpTsNZShXhnBDDeXuuKsiHIHFqkFfpQEaiAVUsSUZXwv) (seq (null) (null))))))) (seq (ap i yXrdauhHoeLKeTyMvDQNsqrxuNSsTFHOEyoMBYkQcjtYjRrYQhmNSilOsROLhDAzCQwXykqmUSAReCXQjclcbaUDyWyngVavYS) (seq (seq (ap i usnwhYUoYYdIzbWxcAAMEJMRvYFzwuyzAUsbNkuwqBshziiKoGXOKsUFIVMgTJHeKZL) (seq (null) (null))) (seq (ap i YBpGBZtNvrCUPgGMVoyAIXPpeyAiBFPOiIEaMjLhjCsuYJ) (seq (null) (seq (ap i cbYsvGurflTqBnBZ) (seq (null) (null))))))))))))))) (seq (ap i DZQOwB) (seq (seq (ap i QtMfrfYSxiaJjOpWgIStFJvWwzrztEIjFutnjfhgDKtIDQtrxPpGfkvpDnqGXRBhTXWqntSDOHZSjytajmphfQeEsUqfuzQR) (seq (seq (ap i qqUQAZinuDmuRHUQHoFYZEBQkNdkXbmuZsuIG) (seq (seq (ap i lwNTOhgVBhNDdlpjkhxJdABcfKVbdGQcGnKCjOMPjdhbkSaHoAXbOosCoKNSFCMyNqbTLMgg) (seq (seq (ap i DJrgjfudpCjdjlhBLCqNogYcLUXRIxFrBTKdtDXbErpioaVrMwBugARj) (seq (seq (ap i SognCujeMkqgQKNBmqlphPXTlNL) (seq (null) (null))) (seq (ap i grIROsjNPNyZAsGTfCeRvhNxTCMZVVZEeaxurzTAYhjueYiLyGdFhWkvpGHTrYx) (seq (null) (null))))) (seq (ap i ppJPfsBuxjEYCYfBJKnC) (seq (seq (ap i NZygMmMKSXDXwIHCWaFfSDAHpgNTmJZxRGlplOAiZCVsilUagsxdlmoPubsRATPfD) (seq (null) (null))) (seq (ap i UbNTVuFWUUa) (seq (null) (seq (ap i eaBufBdzOQqZALxeIROAYpAtUQyTrNjyiQkhdQfNlgnKTCjzywOqRWWyGauArbnncLSG) (seq (null) (null))))))))) (seq (ap i axHBxSBSYmTDsFeKztjfGKBzdCtHAMmJiUrbgofbaaSSVt) (seq (seq (ap i oKSmfZuMbnqKlqSmdmMFTHlAeZhnemuSOieVOYcjUjxckSoumqLmsyhtfPxWxpTPSbvYUBwRjnsLxMSOLUgKNY) (seq (seq (ap i pRQBhWVmYfvNvymxpRkBYLWmDugJmJwdFlJRfcjaZZmyNjKAvycMXEKlGlyLOp) (seq (null) (null))) (seq (ap i AjYfDyIaKNzlkORqQtOrhJAHz) (seq (null) (seq (ap i CghmefZvbENhihCctBLqbFzQpoWUpPsocAxwqSpUtoYevqPOjelhknTwypEQHRWUVWkExQCOioPgPENpVdBCJyWdMWhFHSQlse) (seq (null) (null))))))) (seq (ap i gWQMjYMwiCBoeMCupUIDEJtsfwDfjyUsSIrdHebhOblnmcvWCStVokFiBUiBCDvpeiABSMHrvxdLsIApIOdR) (seq (seq (ap i efJStEbLuPzSbzgmkUkqvGomXEEcSCfedjGdbKSumcHWNnAHvzVsbBeaf) (seq (null) (null))) (seq (ap i rdFMGLYbzmKRjYEnZtTFCZmWArthnwWDjjmzIBWMeoZfZRkSbFPNZYhdHSGJrxnlSbGGWZe) (seq (null) (seq (ap i AoHysQVXHSkSGvtiRVRasVmgMtnowQrXvEJZxWBBUXsXWxEHvBQTXvevUOLxEiOkZHjLxGQKU) (seq (null) (null))))))))))) (seq (ap i PJWzWmHGmWGWmjPccPeMrEfVYTENIArqTjyQGsiX) (seq (seq (ap i AAnIQSxsFxFONIUbGWQRgaHLzZlsVXXHqodkvbpwCVCHjD) (seq (seq (ap i lEIkgDMJqsGmoyBScsgMFXpwxTpxcBLcuKsElPRPPUHGM) (seq (seq (ap i DBTtpMMfWSLmLZUwwsGVqBNEaDeYVShMDfQAHWkAyGqQIVxhwsyjxyVrcAPsHSlGSOpjvUvlAgsEgQIpVbFZbmyZRqzyETsBHVdZ) (seq (null) (null))) (seq (ap i pWNKIEPdtcZoJpgKbRbaaGtxiCMCZsccwBCCusu) (seq (null) (seq (ap i cgZUuKTPPcLXdRMSiCcSpSLHHZtDRNvysTMibkbfiRzMaWTyVXBzpcVdXew) (seq (null) (null))))))) (seq (ap i RhuARBRHOkJBrYBezHzzzrxrVottiwvUvZXnZRfukM) (seq (seq (ap i ofzPuBvsZCAnfZDYUWmyiFajxHqAQIwZcNKIdxtrRJMaTkojqDcqeFHGmAtbyDikzV) (seq (null) (null))) (seq (ap i dfqpjsJeqnmLwsrUFiWgNO) (seq (null) (seq (ap i dUNOrNpOwfRwmnBwDsrhsXBmYHpQuTUsZFonXJryYqstrUjPfolMOqNvMldBptqgMrBLddNinQYKpyLa) (seq (null) (null))))))))) (seq (ap i rKokzwHWjAuGIFKDJGzIxQFGxhtXyyavvVLPWNnLonxHf) (seq (seq (ap i TdNerFzAjCMoSdLjtYjzzKXWnnXzGssJKYSzfLYyHXAYHrpFGaOPLBZZsjWorONkhWwMlgeSLAxelJyTPDHzbZITsUIvBPtzDtE) (seq (seq (ap i yVhyDeYjKJvsuqTDVMbKBxeaLTJjNYqHZVDyFjImAVDok) (seq (null) (null))) (seq (ap i txVtLWjFUmmiHMueiqKaMdiaZXNPXBqreTFpqeofuERYUBGWobKpkBzoYwmclYdrkDRtwYlkkKoozbwMUspEW) (seq (null) (seq (ap i dKgrbvdEheHjIPSOyatBDBMCYrdtAAaHWcIxWDSJsWlbygrUr) (seq (null) (null))))))) (seq (ap i FqstAShNSHtdOCNLmhCpOdekSmqVHTISmKhPX) (seq (seq (ap i vOgNcofcpr) (seq (null) (null))) (seq (ap i nHteCKAnddrfBoCcaLMBacLIwBBQyos) (seq (null) (seq (ap i iglXUMECuLfk) (seq (null) (null))))))))))))) (seq (ap i BrqwrxWygeJUZpQIfrqhqwMjhtJMvtidYXCCQeGdcjomGHeqMDpxNcGKtxdviZXTiRkMtlV) (seq (seq (ap i awpjgxdLVvCYKNKCTKIBMMytFdcwbMdasVncZOOkdoxcuXyuUoypRxwCUdZGfBpjFyxHrDzPLqkiqGCkieRIX) (seq (seq (ap i UbTRGtSTDDnnmYsDsGmkfaffTytKpUiIRpXVjftPOTxexMparFVKzBruWqtKuBTYUgQKIpYDpfdcMnEybpmKEaJlTLLtcekKNP) (seq (seq (ap i zQhgp) (seq (seq (ap i kMPfDgzKqYaYlMPEATyJXVRdUeuCxPMWwDInhsfOrrDUVwjsUOVPKmGFlKuWIjmaHfgdB) (seq (null) (null))) (seq (ap i BWRQPfcFYjsjsbgVVyJCQkKvZLlrnGQM) (seq (null) (null))))) (seq (ap i ESFiNpBipKTpabRMgHNArjoLEixxDowVAOlghilOdQqzaAdsRiMyVcbOZJfYwqKrYDLUSFrLkezvFLDPQFbctMJWzD) (seq (seq (ap i CFVIuZDVdfcMdwSVyxccSUTJp) (seq (null) (null))) (seq (ap i NUEgYlCKMCDLXVvQiGTwwznpJBkQN) (seq (null) (seq (ap i LNtNUPyeERPGxPwKpmOwEuNZlQxbWrygBkcnSZeory) (seq (null) (null))))))))) (seq (ap i JAoENuEtmbRftC) (seq (seq (ap i sUbtUYFakcvXUxMNLxxTzDQjeeugQGfmwIlGIzevJdOlSMMCPtRKLRbOXMTFJo) (seq (seq (ap i vBJTKIMgZDmVePoreKlErfdhwogOiNIKpjGKzzRvLEgamJgaxgxtqOYnvICOMguYIqBZZkZXiUZkOFEuA) (seq (null) (null))) (seq (ap i egoJKcdMmwjTzVJKPpagSYWZwnYOJNUeWjVQhcQTqKVqBfvqzj) (seq (null) (seq (ap i NJJNRVcFZtnSflZpazuCaBMMifmeBftoqheHXrYkxfSlvoYylAscOXWPMTDkcDMZcgiwCduLZTZYXiqiDjskuETGvjHcwhDl) (seq (null) (null))))))) (seq (ap i plvVJqUBGsHIQGSIeOgjjESEsKshIyvySJYTmDyboJkqclpSoBClvLZHaJyrzrmJCScClinGRB) (seq (seq (ap i vZWQujpQePUYwAlaEFGIzhaFegkrIRaWLjdqsGsJFqUmDSvjyqpMNuJawMAJNKEUW) (seq (null) (null))) (seq (ap i QgPjjOkNVmwnBrll) (seq (null) (seq (ap i bPUpUGtmyJCCIwEhiYvEzBAexHveksr) (seq (null) (null))))))))))) (seq (ap i kVPdxDPCLdgQJZGSmPEJTbpglvEc) (seq (seq (ap i jQpGiUZSoUjgXoPHzCTIUTAxLqQPNxOdHdwfFahMEFCPHuGrytGQFGmhG) (seq (seq (ap i aoNikOgNahXuYlnJHEBWWNKraQlQqqfblKswRWUwIGhykZVksreGNswnRTesHPeGbnaczvMqYYMDllVk) (seq (seq (ap i elYIRGeSzYZTmSJtBYCOQlThuuLQYtJDhXwVYiOsDsQlxALEyrzukNFoyiSsrGCkLfwwVHMNirZwsWBjBiQTQAVnLbzfZmisN) (seq (null) (null))) (seq (ap i gMndJRfcAuviicVwgcLmzl) (seq (null) (seq (ap i HdQSCovKJsYMaOUityaXbIwExwwRUbGuJGYCmClRKUE) (seq (null) (null))))))) (seq (ap i gYcYmxUEwmXqEhumpOWDRpyFsAUlgEmS) (seq (seq (ap i uyFtVNhndBUekTwThoeczzZgodyWBtwHTlKUQhKEElmOwAlH) (seq (null) (null))) (seq (ap i baDlNQzuKhladNoltGfxevhyogQkBebQHFltbsSAVKiIhWAEtpKHJBIWIcTfkHcivVzlFHrftblgWHMUCVQeKKqtXACjA) (seq (null) (seq (ap i hzPmTerYGeVCckLFNWpLjfdUlPwAGDWscepTHvOBwKyQSqkEzfczsJYXpHuifHOihOrCNIyUEvTriNIMsGimdbw) (seq (null) (null))))))))) (seq (ap i rpIVrtKYtLyQaXbDXzNkiGhFtIqsMG) (seq (seq (ap i DgyPMDSLGXPIrXyKVeIWMAIjAXkonJrDLzBGfvEoJlQtZbESkhk) (seq (seq (ap i LlAKGHVxDhsfRiddLEytxHWhoGjOnNpWAjYSuGqtzpRGEsFhgNcdVHVDLYTMcvlIFxuIUhWQxLJwadMgKVAQdb) (seq (null) (null))) (seq (ap i oWchTXCTitelkScNSEBXbbIcbMZipYBmXeRatLvwtRcFQLlAwwdHbGshyXLRAUHuskvAXxrFOxUvkQcNbpFXedtt) (seq (null) (seq (ap i uIALFwNTbYsxJaIuJWDnPWwNrdzVTNMMaLkjpxOfGIHNZdBsz) (seq (null) (null))))))) (seq (ap i kfxq) (seq (seq (ap i DyXApFgHN) (seq (null) (null))) (seq (ap i YRNfjKdDeMDdsJfnaTjpDEaSkapZkABlYnffveLqlZJUlkJRQTgiuoOcNpGgCdYkiUWXpboeQvUbski) (seq (null) (seq (ap i JVpLjsChIruDNGVCiaabLqmvUCLOmcOJmnFMvDNHLzzAGOFHPIiPZVkPRbhdzOMXYcU) (seq (null) (null))))))))))))))))) (seq (ap i YSZOwkilXsQHLrurRPkeJfhxZQzdJoYgB) (seq (seq (ap i EoIkwmJAESvCFUlOZOQUGwpaUSLEefMFTOVKDUBO) (seq (seq (ap i oohTnzQViBcVpyuojvWUuGKPZYtHHsqJSEPlSotlQwPqODbzKET) (seq (seq (ap i khfrWYeVtWXVCNyHpCxBTENThCPvDNSMutRkEKctdjKvtUpywQxwYGsTbXqnrQEzcnp) (seq (seq (ap i at) (seq (seq (ap i uKCTsuqlwlGqyeYKZhPwyEs) (seq (seq (ap i KdUsGugbhOyAkpujaDeBchkIiUrdgOtoiqfIVxChjdOesWLVCxfsvSJchvCslOIYTSSpyJjqrGKQBtNxkkKqxxqbKdvSYzSyD) (seq (null) (null))) (seq (ap i FRdWIlAJmfthlRPmZdUCUjrDLUiMTCkTzJY) (seq (null) (null))))) (seq (ap i vNjAauyXXCkfLpDDmOotQkOKvxwcqLmlKHKwXrrePLEIoHqTvFopsZoBBlMqsIllWxYPHyemVhwLkDJnFTJpblJVIjmEVzgQH) (seq (seq (ap i zlFEtVXMwpOKytQagESfzGJzHanIYbsRZwGODjvvH) (seq (null) (null))) (seq (ap i YVjbwTqO) (seq (null) (seq (ap i ljqElgzkkbEONxqyIvpmSdBdiyPm) (seq (null) (null))))))))) (seq (ap i ubkTcueoIWSxAQclIvnUEDrEfiGYKsbkiMc) (seq (seq (ap i qVnjHBAjlEJugtvtUKNhVwctfvykQbvbyAKQcANbpRCeRauwFttkFcBgididPefDvTYuBMt) (seq (seq (ap i PrpRdkyeDLpEqpjHjWZXkyUruZy) (seq (null) (null))) (seq (ap i KAILlCEWzJOTTthjhSBIXZvbKufNMmtsxFiHVpXfqjRhIJtoEnBLyunLUlCsyHDwKwBrcZBZAPKYNa) (seq (null) (seq (ap i HJKecMPQlpbbSCdsAIzDyKszJEygqWZIMpNzQPAlNdVd) (seq (null) (null))))))) (seq (ap i ndWIkqiqLePKtipkqBmfepHUEsEGRBwukzwWcT) (seq (seq (ap i BJfyZZVCGGNujpvOHjIaOFOyMMfoFGSbHDrDHtcTpgDNOabEESgOQBSKrhfKQOYJffFuWJXcK) (seq (null) (null))) (seq (ap i kEINZlQHjoPTqnVxkLunPmauibGAZcomcqbOnQDXmNFt) (seq (null) (seq (ap i ClcmFKWkAtLeaXiJfNSZUEg) (seq (null) (null))))))))))) (seq (ap i QZhlaOozMTZLmHFeyMJbNnRUIqZFRXtvAqUKHsoMNQb) (seq (seq (ap i JWkhVZpSIyEQwvSQLFd) (seq (seq (ap i sNmlJWVwjxmzxkucIT) (seq (seq (ap i RaryJJSdbBJGWWKjlupHYFvZIuGFyhfHZoDuPaxXe) (seq (null) (null))) (seq (ap i fuGSQXqJrTmENAVsXNEAWnDVKYSqVNqjBpUJImsPjcZveIvoxNfmHM) (seq (null) (seq (ap i lsWnAcPHPTrHhAGEQtcxqzcxabJnhJZVUSJqWlRMW) (seq (null) (null))))))) (seq (ap i LExhhMurfQyqGLxTZMUeiQFrMfnkchsnLzUcMoSPzMycZXuZyskMuinysXuDDZyIqomMqAqSMRzr) (seq (seq (ap i UpwAXJbeOLQinqFsLXISbvlMJTQYDN) (seq (null) (null))) (seq (ap i VWbalOMPVCfpqvFREKxAsNBIxLrINRrjvhFOVDrlCLTJ) (seq (null) (seq (ap i qnVjVLCtUdpUuzAUaiTfOvMZYUwKPPpoTGtisooBrMhBYJDZBbVaRUbIeJhHJqmRuYjVzUG) (seq (null) (null))))))))) (seq (ap i ztepBnEPyHjLoxjgtGkSDaASEhUewLvvhEckCIOWrHmJizHdVqBxOxkbsCrRZNUEDwvRdoRVMOmMAvltEJGlIxSbnnIeqTmBb) (seq (seq (ap i PMqcvUOdVMEIErEeI) (seq (seq (ap i TLDTogNzRUSYXwbdawIWvvIfLbcjrtHxsyRIGNWvxYGKftGQjstKmQgdoiPVoNxOeOTrNMSc) (seq (null) (null))) (seq (ap i EgGGoDqcoEPSkwrCMIOySzfjTlJyfRC) (seq (null) (seq (ap i yYvnmpFCeMJeaHQWoVBdrlIPOqFcLqFLBgfcxDzMafyGQOIgZwLGMtLCfGnKishFXEvyZFHhxujTWCcRniaebtQaGcPj) (seq (null) (null))))))) (seq (ap i VfVCXXrBKUNMIJBge) (seq (seq (ap i EPwAjsdxHYEaLLbrXvnWvKZHvsYwJA) (seq (null) (null))) (seq (ap i xGOZoNCFKbFnLEBaKMJroPocutdCfL) (seq (null) (seq (ap i hVeohVkZqyyVmPiIiJoqWItuRTVTyIthtWEAskLquLKgoBtpzrRhhRAgVdCawDTfiMnTSsDI) (seq (null) (null))))))))))))) (seq (ap i jsCtlUfYxoZ) (seq (seq (ap i YrAeYAywwNThABxzlYbqNXqngwCMDcfLaABfZhtyndPJgCHplcwU) (seq (seq (ap i niEgCvyppTKfdOJlFCunphgTGLhtIHKIHqoJDWqyqUspcAHJPOVytmxBCFmBUMLZWnzUOIoezorbLAWjHBZNG) (seq (seq (ap i tQNKneEvVQGahAgIckLSZokecxYU) (seq (seq (ap i zOgMelrKhemPVVHpAJSPVBKZCHiqWqIViGBiMHwoFmARESJYSBD) (seq (null) (null))) (seq (ap i rtMlKoUIKLVPlncSeTBe) (seq (null) (null))))) (seq (ap i ECXcxQRqjrxtLTJQDtoLbbIZkNdPIzZQxVwKAelarjGYNplQlMV) (seq (seq (ap i YKKTnBrShtZhPjPZyaPEPgmPFqrvIElDuovNIChJcRlpIjafJeGoNnnAHwQQwQtWquOoBuvrKGmvEYyBHmuQwyoJePJQvWHR) (seq (null) (null))) (seq (ap i zDWYHoiWmpEZLeRjQTPwPRguezImxqLipmddnDcKSHLlCNvedMLiUObuFLybeNGgCcdadjWHFujhCYdywnVNWhYHJqB) (seq (null) (seq (ap i IKOighoNAJhgRrqRfSUUbtEWIOO) (seq (null) (null))))))))) (seq (ap i RaWFsPjbuTPJCjUkdMbJcjCYXIUXuIePgGjOZPxecMyplsSjtuLETElgc) (seq (seq (ap i qZLBRFCUUmpyewaIbTRCJI) (seq (seq (ap i XRKvwPXtZTczvKNLFAfCNsXdZyUIMMzjDLCCvaHZOTLTSPkVxLuMQXVndIaMnDDSEsoPzHA) (seq (null) (null))) (seq (ap i UMXvnDGZqLlKCGTadgsaKvfRmsnYWIbgGZwKkqoSvHTInskkjOqnWVuxVtSMrMiMefDguOYcIhUqHYvLKnvddpZDktvCvOEhwP) (seq (null) (seq (ap i czCmgNNOZTQeAakSjVwmWSRGCnzYMNdZZEKkBdhpiOgiGjGVMckQlQObKouQYUUJOgjcVgWwsZzAeeJBbmGoNDfSHgBqmcjIenFy) (seq (null) (null))))))) (seq (ap i xbrKnKMUfeJthxahXoTvStTtYCJFzeqKLyGSTsPEVWQDBYuFIrutzfjsyjWMAmecWBQHsAKnSWcTOx) (seq (seq (ap i IQwlmbropKSauPHCSYrGQtYOZigtRCSxErDUuIPqdVHDOCXoDRgyKQpDVZgQeBMGXIhPhmjcovhWGTgOuAzbmMxdblWpgSCH) (seq (null) (null))) (seq (ap i GCsHMgdvisekDLYXYwcOtvDiSIxfFrKHsYXkGvnbLEezFOEJWEXdwqYcAYNeQEe) (seq (null) (seq (ap i KlDJuVGEYEGzlfrSBRIJGDSEjKVlqXUINjFppzI) (seq (null) (null))))))))))) (seq (ap i QXNFWausexoZKuwnLfntqVaeydaIjwZzheKpbgLzjjiQoSrPlerZ) (seq (seq (ap i OjoFColpmNWsjjurrLqBdnYCjXIZbrBRhNSIdQZBNRvkhGeYbpWZeD) (seq (seq (ap i jWMBXAkhtiVdqOgmSgzrFMyRHfbRBgIqRzUdyHgfFN) (seq (seq (ap i xUBOVtNnVgknkOCjmsEoVIzaWSoMNGkOEsNivCSqofGHVBLuaPazRtxY) (seq (null) (null))) (seq (ap i MCeBnBeEKqZUboTyBgdqrUSWvipZjzUjFiaUjBrigkildjjHcfHpBTaNck) (seq (null) (seq (ap i RPlyglExnKjoNdzGUfKgk) (seq (null) (null))))))) (seq (ap i hlPMULqDdhbkellhCVBkQZMmARLjCnQTIvVZBvVwkxjJkuJow) (seq (seq (ap i vOOcnpBTaPqxHRFpPHAneHmtBoNsDLULGPlQWPfVRUDYiqVbrUULIoLToVLzseCbjiaFxdRHzSdRATLCQydcXYPfbirB) (seq (null) (null))) (seq (ap i JlMBr) (seq (null) (seq (ap i EhyMkzcAPAPmYZtyxzCiIzyqzbcutRFo) (seq (null) (null))))))))) (seq (ap i rpbkxirD) (seq (seq (ap i ZEwSwySjLUDxniNxNKUhxLzH) (seq (seq (ap i oOuihidBrvDNaYGoenBfInRCPbUHxPCFFbhgidLGblnGWRqPnXLsAnSVEjxOCTTNxEGfzthPXtrMqsSgDCgnMGncuQ) (seq (null) (null))) (seq (ap i WTDNvTmAmkVrJxUlQuTNhEnDWbiXFwPiLCGiAGXJuSZAIRkEQDrXbxfHpFdtoDFQxJGTSoMlD) (seq (null) (seq (ap i fuyqgbRc) (seq (null) (null))))))) (seq (ap i fGCRILcYVxMP) (seq (seq (ap i iWrYdjzihLWEGDRGnQoukMGcIaxnftbidshBKViAwKAzhdQeApqRpcMBAcTfekUMdCzgTgtDUbzhK) (seq (null) (null))) (seq (ap i oQhTIOnPllnmpwN) (seq (null) (seq (ap i IorkOLwvjAybBiJAVysDGYVTvLTzbqilxayoZVBDZkbVchkDINSmymDzkGbdmunWogTXIUGPqxnayGH) (seq (null) (null))))))))))))))) (seq (ap i jCnDbRYIRMFvwULUXUQasRfwVYqOOddJdbGxXPDNfykNuetnk) (seq (seq (ap i lzokeJnxAwILUQ) (seq (seq (ap i bqtJbcyDIILxIWcrAkFXfibBffitdtdlltBRqWQG) (seq (seq (ap i MQjHNTJlhwpjrUXKzFkLJoZj) (seq (seq (ap i PGiiJkbTJXDHgRwllkKavjUtUGTFVPx) (seq (seq (ap i oBPXOMSsBrrgnjuPCKkAUDgS) (seq (null) (null))) (seq (ap i LWQcFdNg) (seq (null) (null))))) (seq (ap i ouirLZymPeyaSrlcoXuLzAEjkmvibSWvflMKoDkezbfBLVYljBDCOTzJNGhvhBOMWYtZitZoCdIos) (seq (seq (ap i CjwYzxPOpWEZqQWmcfsqrbAfRaYLkXpzjZaykVHuWrOrtrjRUQlnACBhDerpESWDXTEZEteWDsMmrffFe) (seq (null) (null))) (seq (ap i dINhauLuQDcJEhZtwrZpJLpNvYtgyUXtBDUZsJLKFqjdBSaAWfDqtONSnMjTjPPpXp) (seq (null) (seq (ap i ghWVUSzBRJYkTFDzmdvMWoDIkHKWoyPpqzSgwmkQddtIPMFQDMMFbcYnvdAKyyllhcNyrZDdMwkBbWnwSj) (seq (null) (null))))))))) (seq (ap i FmIGnlyVslNgEEaGFrRAHkmPUDOLUsizNJHSURgYVhinIPaDchhyYYDkLkmNMX) (seq (seq (ap i LFrkvXuXVNhqpxraRNPyZYHnIRUyqMrrZHhQFyZBvJtlyoErcDJEITenRNPqwFcT) (seq (seq (ap i huXVDblCqAzWBudBHvOnMVeghlRahDydgGFcqmKaDHc) (seq (null) (null))) (seq (ap i SPTKTqxCwkWLzPojGWXhkyzpOtBVlpExBlRQMJlhuQFosqRuOgkmolCECrOmoJG) (seq (null) (seq (ap i cvUax) (seq (null) (null))))))) (seq (ap i PThRXcMSGzkSajJvXYMMHJqBdTjrsFGeZFIuObiEBHTYSgK) (seq (seq (ap i TQuwJWNxcbxsHCwmLhJw) (seq (null) (null))) (seq (ap i IVIBdZIHviJufYnZoClktZgwmeUDGmUZnY) (seq (null) (seq (ap i kwUnAPv) (seq (null) (null))))))))))) (seq (ap i sgMMyGktItMJhEEEhZrWKV) (seq (seq (ap i vOfHrQHbiyDTWvijabXKlehsqXGrNdmJvnwoaIgTkjvkYkAgwaAtrEURAypHgPbLNiaC) (seq (seq (ap i nPNvOihRXalBDOCIgWLFOfnSVqkceZbUFdbLcfkFOUZewr) (seq (seq (ap i aqhwHYyiiOAJlmTNkTdgXlbPwRRoqW) (seq (null) (null))) (seq (ap i qtpLfiaKUsMbkZSqDfr) (seq (null) (seq (ap i niguExB) (seq (null) (null))))))) (seq (ap i RgdqFXXmAsMQUXieBoHmJJbGSYdVVAVrnJQWcjyghWHn) (seq (seq (ap i kfvzbIUdxfjRALbwIpmyhgNcYQLkWZJJYuSDXzDsuYJvkRMWvipedKDTQXBqxPKtmUpQiWZWOAskTuiRxyGvKvXljZix) (seq (null) (null))) (seq (ap i xiepLQhfomAwjkdYLuXCidaohUOzAmiYCTKwgCaKzcXNZsezRlJWbBZCeCzestlXb) (seq (null) (seq (ap i vvdGYWZcbHUamQuFlAkRFMBEpWWArGwLyDrDHB) (seq (null) (null))))))))) (seq (ap i wKsoPsRBcwocdORjUbkvWwkrumcqTAffJSJKPUyhoPQHnb) (seq (seq (ap i DBw) (seq (seq (ap i WbvhUYaPavLYXBAMSWhuUZeflEgRGfhLRczzGGDrBdBWkmypkDnlNHUxvkpxSfQpzqgzBYOvHmfWHs) (seq (null) (null))) (seq (ap i VoGwvdEwwuoTkSkcArlcenwtrSTpzkyuxFGIEVlVVwkjXLAiEdxhutMesdUeLFozarflRGbtGeNGzdv) (seq (null) (seq (ap i YxoRscVdnHNPvKCSAhJjHoGzXEuqyKljMGquiaQTMUBpDadDfzGfnkDWmAKmaVehEyzIBApRuacaNsSuFZPjtCukSKfsijG) (seq (null) (null))))))) (seq (ap i SPnkRQsNBzKaTOquSeuKFi) (seq (seq (ap i kxQMjSYhmYrxoTIXXfJa) (seq (null) (null))) (seq (ap i aQYIwRevmubgcXbXWAZMjaxpFKHBJmJxtVdkdAIkDiAOrNZYhqPaSWUpJGTwLZTQVeBEDOkyFyqWMa) (seq (null) (seq (ap i ZOVyfOfbgHRkVIZnveMFkxzZqchpOpeDMVUKcTLakSklLFhqykjHjMUWBLvKxQgXYfuvPIc) (seq (null) (null))))))))))))) (seq (ap i aVsjMEeUfZnnzhUPcmHjJeuRvDLXMHtrZEkxV) (seq (seq (ap i nqdaXkXvDKFNVHCTmIatglEoExlsWbvQkOaPVXWqUlUQQJzWkJlrypksWLY) (seq (seq (ap i hCLWeuQhJUnmmzSAnFXBmmwpenVgWtGMcdLOMfyqpD) (seq (seq (ap i rkdnjJhXVsPQsVUxyDqvmYAPriribbl) (seq (seq (ap i VLIuPaRQekUvhVeJBkvobOPaFgyts) (seq (null) (null))) (seq (ap i zGi) (seq (null) (seq (ap i opKSttCGgeiITLnpHuyYWhCOtidLOLZGRioAvKBjvFR) (seq (null) (null))))))) (seq (ap i UylHoP) (seq (seq (ap i GvfjdjsQLuyNSFtCVyXlWLETXSBGniEcQAjxnPF) (seq (null) (null))) (seq (ap i nrLqrcAfSVeXpVlNnsPVxOCpruWnedLlrkMJCwExE) (seq (null) (seq (ap i iOscrfpvzPGBolmYgfRnADROLQuWlwYR) (seq (null) (null))))))))) (seq (ap i nArwiCtciidQtYmcvUWXYcZqVYAjlQRzZ) (seq (seq (ap i UKqCERZIviUmKzKMCSMqNtrvxqqrmFKPOQSrIAYmArkMlQWWQUggKGIMeyGEonYvpXEKczAHPvKTAwBbMQUkgpwdDgHidhk) (seq (seq (ap i mWdSgTWPiDdjaLdVOKmxLcqbTAwNWlmnSJnxabgpCnYwSIgtyCWfiqVaFMrIcOvShclbnFmbaD) (seq (null) (null))) (seq (ap i iDBdKbjusmLANOMJjMyZShaELoKIqWObTPnHAQOVBBjeEyRdDYKaHHsXqeonLqZSLSQ) (seq (null) (seq (ap i jSYHkhCwOiEtkQxbKSXbDCvBkCueFydgKBQVLiAaReBEPrhuEqGdUkhqKzCrtzvRKkNj) (seq (null) (null))))))) (seq (ap i fUEPQqLtanCERSFkqybGlrBqwOOXJFzxStbvAFlJTYhJDAEiXyU) (seq (seq (ap i ZxjAaejiWRdoiCEaHehfWecawyLtQANSCbcgVEgS) (seq (null) (null))) (seq (ap i jyvwlagzLBCfMxMnlJRhTVRIlbUQ) (seq (null) (seq (ap i jbMbDxVqsRJZdVWzfqUGsDNvCKjdRpKevkDcWHGC) (seq (null) (null))))))))))) (seq (ap i XEncgbfIHMIanAhbfuFbVClmUMLEAxfQdeqtUmcqb) (seq (seq (ap i LxupfTvVRnkYl) (seq (seq (ap i OnfHiBXaLJdCMDgxbrvCJEENDldMVWdZhGsBUuxUdYEznQNMSizknmW) (seq (seq (ap i XCDAeHrYNVFKSzNJohsPTHAazLHvfEVfHQKUbiOtOeQhryrzNqeClMVfVDKMpfHofnfGylLayyeoMjgsZAOFo) (seq (null) (null))) (seq (ap i MiJIltzEGpWTSsThrrxyolHXhdPoWvmQkgijaimQoJLrsLCDONfLtjhBQNgYZzDkNYjhm) (seq (null) (seq (ap i rycgEygOAGrTUzCfCHnLioAyprJEOffGTkHEpyywAMkSqLceaykPcUFAYSGdHAmFuypMNgxWgjUkvuNNRkHBQErOvbJvyBoC) (seq (null) (null))))))) (seq (ap i bIlTObvcSPVcijePiMrcJkYiuqZiyJKUTCclqVWQYVWnZEBaEBUopODIymhEGHwTUthuRGvOzNsSwfi) (seq (seq (ap i CGTPjMUcrQpzCZZkO) (seq (null) (null))) (seq (ap i LAmWjSZJHlmYvLnYEhVNjgtwosZcCqppCMIHAJtrxlqiyNtRsIICdVZaKOwrAawFnNTO) (seq (null) (seq (ap i bYjWTNwMG) (seq (null) (null))))))))) (seq (ap i IZBRAYiawlVGdjaDuptvIUjUk) (seq (seq (ap i VxcOWYymvG) (seq (seq (ap i mFAQLsyAjlLTTBmqGTn) (seq (null) (null))) (seq (ap i QcGDCUXUDpHGTdYSKvTGMsnYrNYoFOzpmesOzlaSiHshztECUVGWLEypokrIIfzGRpVNKZPheTmHjkDbJisHzzxbHeIKaixzut) (seq (null) (seq (ap i azZVoBCbSPSsvmraqNAYQKuxFu) (seq (null) (null))))))) (seq (ap i QmHWzfPCHnjMhrLkbCEGWKcKhBTSMvKTCVwzawWPxktmuFCyGIGhYTetXYsj) (seq (seq (ap i lroxiafABqxFpjNkDZrgmliJpZsEGEBXwoaDjTGSidjGFMBrzJcomqZpgfhlsKDsuGfOQsJIok) (seq (null) (null))) (seq (ap i vWGRqRldEtrGlmjRvKWKVYEIxBZxROrgywEAFMRWUdSfEnHCduDQxIszTECRWitqTtzvCsJEW) (seq (null) (seq (ap i eUKLCQDtDofiTFwNZbcbKKOMokNvzJiWjukDWitREglJeArvvoBazuUYHWXRo) (seq (null) (null))))))))))))))))))))) (seq (ap i qLTzk) (seq (seq (ap i FShSnaZpJNxZCHUMXcRcCcjZAqTtLIYefgbk) (seq (seq (ap i LiXProplGIpEbEKTKgPQAofDJvnkGmmGFfhGiTMiCIdYXeOtmaePgisVX) (seq (seq (ap i dpPIvvxVXkLSUstlwdzxziyokNLhNmVuFRAshL) (seq (seq (ap i feIsGEFTsXSVcK) (seq (seq (ap i IvKSnGizaxsVuKeWgWApponFTvRycwbBKqYUYnNWEzN) (seq (seq (ap i zZjKWGuvQeocWAqtBgotlvzzjOXMSqzECsLQBpsndsBeFWFxfqZqGfMUS) (seq (seq (ap i saCWLtPMoMtYpxJvGsjuAqCSBRPfRaJQVFFFHVPCWfQFEazRGrEuYPQQYPWUKrXZSAdPFLZmZzSbDo) (seq (seq (ap i UFnJWJbHoBqibhSxlS) (seq (null) (null))) (seq (ap i wAiBtqKnjoHvWpYWuJewBXSkkEMLODXaABjvnDpTyrHjGrMnrUHHAIwJysXYelacYBZYtqdQAxghBpoZcknpSemVONuZArKFRe) (seq (null) (null))))) (seq (ap i MadfMtTVQEJtgfmXXQgBQgBstOCrcGyCxZGtAzzDrAMgsEqluRNTAXrIJiyzjqPILXlHQUkk) (seq (seq (ap i PgTglVNDJzbTjgTPDfSIGXwNVU) (seq (null) (null))) (seq (ap i yUkB) (seq (null) (seq (ap i RHlNyWkxhlkSZmvaGEDpADxwckgqPobBBJOsIHnZhVCBj) (seq (null) (null))))))))) (seq (ap i WdjxYUdrzWC) (seq (seq (ap i nTbSdfBgPXbZqUZuxFmpesDgavFWUVLReSFGTwmrioRtCZTo) (seq (seq (ap i wSeuXxktbmZdIbcebjnVyeKdZGtjackBcpInwbxAnNWgYKDQNLyLbCNGOFYvZzrd) (seq (null) (null))) (seq (ap i XaUJNJbuGXVppDbYeUBnBbDwtDUEQYlJcQvIdoUqoLClZytAKYxSPXJEhzZzULxIMJaDkmpWJQgsndsYsxVcKcN) (seq (null) (seq (ap i FFOVlFCWdAhkhKRSjrqhqHgLFFGqseTiOnXfZrQLziRDHqJ) (seq (null) (null))))))) (seq (ap i CswwqXIaoxjPjwFOxwsWVQWyQOlyQPEaJSHUpNJSqubdrjYffiJrevcTILApAHH) (seq (seq (ap i NZnMIdqXReQqyxFUtqibMDhsOQWlDtZgOgCzRHhoHVLfvzYDSwbhRZKIrmFBmUYyfhsdb) (seq (null) (null))) (seq (ap i lVAwfCmdBbgpu) (seq (null) (seq (ap i KHPhMaAqgjRravIabxPnCHWzKWIDwAUXiUJoZhfHW) (seq (null) (null))))))))))) (seq (ap i gNzAgBXlsayMiBqTvRBGhjMbVZAVjYeKtdYbZByUoPfelWVQJOzX) (seq (seq (ap i fJtLsWteVWeImzxcuwpakrLSBybNUvOEfswOYsFVIPChbWCIcZkqGlXZRsUvZORdgoXULKeUieZFurmXOXRRLezgECgB) (seq (seq (ap i nWULcOqMMKicdEOEwNJNhfGmCExdWHkigKKFNTUxVBFqWxlIxVptMdNvkVpYzzMBYxgBQL) (seq (seq (ap i qnwNvywDPdppylmAeHcPjQ) (seq (null) (null))) (seq (ap i CqfFIwvCIubbGrtLAkoGWXSEZpEDwteuvvuzhSPtlZnXpRXDuUoyuyfMgoIGusBwrSzExswxoNdFZXisURdtPPwiqbIQvZbRTFt) (seq (null) (seq (ap i eqZAhCYkcLWPplpXcTOCfYRaPopVswRDvubrZhYVJmaMCMX) (seq (null) (null))))))) (seq (ap i MeShKKoIVfRNSaXYYPVONBEaqGxh) (seq (seq (ap i POcVQHBgYngMJaiuRUGgnXjAkJIMtqyGigxuMMcouammZlovoZfGqHKKHLanL) (seq (null) (null))) (seq (ap i GMfaFhmapPMebFLjosqLyelMNKRWseFhdUulojybdKqKlJKaPDunNdcmbEmuHKMxaCZRMdEMwbVjpUjMgd) (seq (null) (seq (ap i tFc) (seq (null) (null))))))))) (seq (ap i zMlkkapJiLlOHTjIGDzVxrHbUjNCphBpiqqQJGvwixOrtQOrgbXiDKBpJkDODXHcQPCGZcJYdpOtYhacmaBak) (seq (seq (ap i zFcLiZsOReynCEeLhWRRaKgJzhxPvbhODAHQfKtt) (seq (seq (ap i gTnFOjqhSAbGKAQWYoLQzgyfuvNiteVKAkHRgCeaHJqhnayTiNSLnufJTGQmMzAcyxm) (seq (null) (null))) (seq (ap i TomlqejRpNBLtVkOMUjSfQCjwtsPOhgcVsgldjaLAlIHOQEShBYQkHxupQgNxQXGqhZMbViKwGhuO) (seq (null) (seq (ap i iKehECMHBRooHbm) (seq (null) (null))))))) (seq (ap i hRXvYbrHPbOtkQEsMAltWTUfvMntSlLeJMFkQDaXgwsRnSDhQWnlcoDfVSKffIPfMtxkuxqwSQHseSOrOIVnqEkCTFoZW) (seq (seq (ap i EEUKCNeVKtYVBmCSxEyXIFyLQcrGTYNiOJNplCPdQDcYTAYWzkAZPldEXIcUDzinXaWXx) (seq (null) (null))) (seq (ap i LZmbnEdEGwvC) (seq (null) (seq (ap i uRbgEfIGjfYFyftSksqwVJKbHyIa) (seq (null) (null))))))))))))) (seq (ap i oQUszKgInhdpwdUPIGiGwCQQnUAljOzOfDZzGeEQNcssRzslPJQSefnslXxFKWauPfNvvcDLEcNrhiNNYmblFcwONj) (seq (seq (ap i HOoZkWeTdWYnXTJogbzeLMCrIAUlfXumpbFafUYWGurjpanMfbWgddffjEONHISmcPcGmuuthdluNKCtjrR) (seq (seq (ap i tbuwXJDOjukfvOkBdRgkjtyOMHZCqUNEaMRYqyUahxzpVjFsIipBossOSXdMhVtoSRfwfJnTRjfzLhlzMnBrZgzQQktbrvtZQaU) (seq (seq (ap i TxKlQrGmYwzYKGmuSDkFNxRWGpKxHNIhuNzOfDxrgzUbzTabRvVtpNpTxjknGTgNlkKIEeFaiEzVMNrzRQyrvbuUUYqZf) (seq (seq (ap i AYxvVjfOSoFntHpgbSyGlio) (seq (null) (null))) (seq (ap i YlaCrCmNhBjXktgsTpAxYUjxbrglyOEZgeKjPFOsCrcvJHKsYiAsooY) (seq (null) (null))))) (seq (ap i hMqYsdUyNGZOgprfxBgyXafeAieXGgObQMbvDxfQhrbqseusQotBdzMBvSxNrRTgZ) (seq (seq (ap i DCCNYqpgINTevUqgPZfxPgRyb) (seq (null) (null))) (seq (ap i YjMUIDkHFIRnrArPYQLZUPlMhqKrSVeqCNNkTfkDGhtXVPYgdVLThdiJMFkKMjscUqgKocdkbUiZkprCWfYR) (seq (null) (seq (ap i ggeKkNHJRmmDzFerwnVgFBJVKbAYYSCEAPnfCzRaStAwZrTyumGMOmUemeToCvaXTDTqVDlLDJglCpqELCOtOMcDWYINyJUqB) (seq (null) (null))))))))) (seq (ap i BerRd) (seq (seq (ap i xJGFzgIpenlWURLZvXqKyEwSNljpIsIieoOzGeNQurCdCtUiIkR) (seq (seq (ap i CANQlBRjNksIuRNVSpmZOOWpnMxARwYOLab) (seq (null) (null))) (seq (ap i yPHNUYNKploytaMhvsKe) (seq (null) (seq (ap i BqPJHloSmiTiqXwuuFzZHGzOEMfOOIwjbdyVoidlBgbKAqWIrHaJdCcSDdIithFGFQBhhoiphOonnYSRd) (seq (null) (null))))))) (seq (ap i AxyhljxYQItsHFCGMUMpecCSAyqdQbztzRKKOhchsXJXv) (seq (seq (ap i BVrBoiTmD) (seq (null) (null))) (seq (ap i eSuTMwbrayt) (seq (null) (seq (ap i jKTGqFSNcMghlFRNClJQEUCUMfVuGHhDuXKMorAuPnFtUlmXjKLehVujd) (seq (null) (null))))))))))) (seq (ap i gOAGXqwCNPBJLHTYVoHeTbjvvaCfposQehraeijCPuFQZONpwTPeIJpyncBhHl) (seq (seq (ap i MmgEPatRMyJuweIUieWLtEBJmlsOEfuCabgk) (seq (seq (ap i EXLFiikhjOsMhMzDNLXpwJhOyKfyaqTgOdmJVQUyMRlgcIDyFXWTgtteLnBqTdftkf) (seq (seq (ap i mraPraBGPfqCeRdiAffWkBlIsnohqZqVOMUrlyuTEmbfkyUUbQ) (seq (null) (null))) (seq (ap i jVdgIXdyzFXuMBsmvEVggVulqZTfqPSYJSiceFRpIoGqlcewKyftzpsRICDtymXdaihDRspZg) (seq (null) (seq (ap i XUMmmqsPsZrdmXzUgdfkm) (seq (null) (null))))))) (seq (ap i Bz) (seq (seq (ap i jTEIcqLaYtKryrqSzXqrOHKoGAXRVCgPRJAtYaPEjthZmEchVzTbbkfddk) (seq (null) (null))) (seq (ap i SfXppEaUYKNfnChQEFLMFzCLPCTtprkBkUThNjZDUSMaeadDIfbNvclqlTRhWlRFcRrdxcCfQZcTgJhnevQYqzhmYBTIcJEDJbl) (seq (null) (seq (ap i DCrhHEOwBtIHNNZBWWSPuKcSKwqoMNiRqRXdJzSaAeKYFglEfoAxpVATPpARGAEAwLljxdXySiRjvSGbwzjrMMPMRLsjXyhrYHAH) (seq (null) (null))))))))) (seq (ap i nQLvJaJ) (seq (seq (ap i zDSRTjJKClJAMbDNRrywGOCTLqRHfGEYFqvHSIqJyCaqdtJHxYdBxSQbdGfAGDWAOzgXM) (seq (seq (ap i ZYyNvlkOudUcjuBVrEWekRrwoHKdYGZoerPxYQThCEoXoCmxTPXfISGLszXGMtidkomYQpBxlNlbrSoymFnkclFrkH) (seq (null) (null))) (seq (ap i tBMGbbcBbIKluiVyXGzmCwZhmWeOfyHxAZqpIokEkgosMVLrrZdwLDweSvbtfAUZuQpmImDLqgvnvjSgINVBAGq) (seq (null) (seq (ap i rBKESxVwAw) (seq (null) (null))))))) (seq (ap i KugwBctbvEIIJPrEOniAIJYWdzJTgobxqjJCjqxniAgxMLWnywLNjsuCnHlTebujEqSABDeUsZJhSNshKghBxZJKXfvZ) (seq (seq (ap i VhXEuYnrtRzWdxyfGDWiFSzcFyFOwkzyihUNwueciElluevAzZ) (seq (null) (null))) (seq (ap i FRjxYkogvdWpAcXRLYQhPPgptEfECENJgjhfSDPHNvfGgSBkGszGQCevKPKIifQWKkqU) (seq (null) (seq (ap i KJCTwKbJLXMhiizUaWHvKTYToHgPPNwZxkNHvcvUQszbcPaeFXEXtALpNmWqQjNPHddwHAJwotYA) (seq (null) (null))))))))))))))) (seq (ap i QIPGKMoCCaDVIgnnfQqJGLvugWYavQEVYlHgKeLhyoowmDkQbfDqQfqeZgOETgyMsKabEXEqDPJfXjeOWyGVgoKyLG) (seq (seq (ap i AHsCsYEdN) (seq (seq (ap i komrmrMhneeexKZrbpOpHAxCsWvTrOwbaqe) (seq (seq (ap i dpiPAuncWexQPhrqjZmrkXdoKRtMvHnjCPAMrqPyaMBuqxBiRuGluvPGLRcoWWFRDqqpBmVlefcQYdeOaFgHOeDwkEcQEn) (seq (seq (ap i GIDIUKdWPiaILScKAimioTLhvUNKzwZtOOmxrKYBHnmsOmzIOvAiWsqqicSzhyGYBsrYkHynJEHYzwAnpmlWmkuBzFFfHsqcAnS) (seq (seq (ap i duPquviqZwIzucSfztwQandUzbluZTnkAKEvmLOYpdphkghNQlo) (seq (null) (null))) (seq (ap i RQGr) (seq (null) (null))))) (seq (ap i nVFBUQtG) (seq (seq (ap i bPCZPaNCdIPrzRsBJoZlAmwIPRoMIxrOq) (seq (null) (null))) (seq (ap i eOKmxGpeDWpzyvutlpr) (seq (null) (seq (ap i kxmXgHRJxuy) (seq (null) (null))))))))) (seq (ap i zOfQUmbflsgkajvuqpYEIhffFQPBtEvIN) (seq (seq (ap i qdlVrBTuxrSy) (seq (seq (ap i fagimOMGdotkYHIvCyGiuHzvXqitKYmPmiPKyIOEuysY) (seq (null) (null))) (seq (ap i jHLyIaEDdxapxnYqdVxecbIiKIpDFUlqZsmpHNEPNsOWnzxRaWWcDBRLJSkFuiWGvCtctfZkggGbvcsUBzVBDurXNGdbuu) (seq (null) (seq (ap i NmNLGTbJSRXyzMreFgIXWHylESmplRsslSyvukIKDzNPNYchXLLMFbjDqTVuKwIg) (seq (null) (null))))))) (seq (ap i haIEqOjmXvvyqyucosDluGimZhuF) (seq (seq (ap i vMkaPJcFQdRynHAeNWTFjXexicJQqVWPeElFnQTWszmWNIgCwjVHIMVGaEybHmEKQPUqztycMPNlkZtVLjeTyaGmNzCp) (seq (null) (null))) (seq (ap i VXdefsbWVSIJQCUWGBZJVOdDfJfqMDKtOmoIU) (seq (null) (seq (ap i oGnihniXEceEvJoRNGEuWhQSzWjzqzbinBIMgnspmNFUXBXDiQzAqGLFAPTefFEcIjzpxtQmVTinWcsJHaXigJyYibCSHLG) (seq (null) (null))))))))))) (seq (ap i ogLoRMaiUsbKXuMHyniiIbBlRKkSVLwmUTkhLVJLkGyTMQLeWDQVMWeAYvPK) (seq (seq (ap i WBsQSwLeWOBJWYIOAwNKKjC) (seq (seq (ap i RPMzhvtPLJWaMOeMPfismJheCKJWlFRUTArFGiLcByVMkPvEguVPcVZlybAjyuAfloSOKcciHDDxooCjPjddYTwSE) (seq (seq (ap i hljOOqQTyZxJyHPJpydFMtvCpWzAynmfeaNPixRLlDNuhwHCQpydzovWjeShTdtEatFzDxqVSMbxlNNMXCjVw) (seq (null) (null))) (seq (ap i HDaGfbLodhehGAdcSphgCorJGOfruMjpzBtujzLfBmmmgprsOKMDpoggVCZpHsyDDXdUKB) (seq (null) (seq (ap i XHGfggD) (seq (null) (null))))))) (seq (ap i XKkEHjrrqHYgGPNXXsHuHxijOvnvBJijoAvPWVFWrhPbAAgzhLDiuuqyEevSGTMsMRXtavWhpUuOulkMjeLQdmCnATLZjfwAyZ) (seq (seq (ap i ADflZyLbarbFDyGaQabOUPGDhTVeUwKjRyZnhCkz) (seq (null) (null))) (seq (ap i uKAGLkXUseHaNfkoAfkiyJtviTvuQYtQpmqmfxDkAwkrwiduPVpdfgrxNBIftQEg) (seq (null) (seq (ap i oxVndLRjSpcdRJagnEoPDXxUwBlgMGDXlymbQJnBBwabFcMwngkoTPCYMlMZreaZXcRbVZfecjMyUEqAJKc) (seq (null) (null))))))))) (seq (ap i iRlYyTamusGDGGRzyTsSjHEsUaVPezBveyApvsshfgKoZvMFgIejzlrtDIuEzZxaUaOjZSXgzhsroeiaqyeiFEgFRExUW) (seq (seq (ap i QGfuwTxUQEu) (seq (seq (ap i vRQsrSAgHqlIgkXLduzrCwUVyQPPMMmKnebDveIEZEhpZzlDYpGAlOrtBNCYbzFCItrxuSrajlbhamIH) (seq (null) (null))) (seq (ap i sTAsVmhhrQuhJNPVlHQNuoWwSoKfMVaqiDGXSIPNjVjGYCDMMpFMvkRcQCCcbUpbWewQDZcxxfwA) (seq (null) (seq (ap i dfmRburrovRCHDDHBJQJvprEFBewAZVmAtZNpYbcykseElVbAXTJqlpcRrAvDDIkwMaXjtaTLfTf) (seq (null) (null))))))) (seq (ap i QccSYdfudJYuQnONUFAJjRbSTyyGJLMftAJEWvY) (seq (seq (ap i BUJIZzVGcWAsqHjcggkoBTbRGaemdpocREXYqdZrrbxmoT) (seq (null) (null))) (seq (ap i KzsRLBcaxMkVOuGubddjmApwZZaQfdAlJwjeWbqrmJcgeMUurunFCqOQAfHYLhQ) (seq (null) (seq (ap i HZgBQDHMCRteBlUyniiRaspvQSYXINDqCjrTaVRsILlGjBCfuNATvPiQEIVmAlSKJxDJHRoDINUSvVblstfiWMlvJkIXbllurJ) (seq (null) (null))))))))))))) (seq (ap i PbWXfXuChNmFkhrSkwlsRBSdkWczszguAxmvFQEq) (seq (seq (ap i KeYmDijKBgVWkLZYBfbWfWadfTMVStHIVRWIyRVKzKYKsYQsxOZkFgjarLyiIaMXArMMslYgkAsDFegJgTcjWDDAxQTi) (seq (seq (ap i RgOTaepeXKGyrgScVtTXUkqnHEuIM) (seq (seq (ap i UXcIgRewfucxnEeViWG) (seq (seq (ap i CAvyyibzPDgdZbCNJQOtGFALxhiOZa) (seq (null) (null))) (seq (ap i tDOyTzGGgDrbljtVfafTgvmtDVWRfjJqcaYrnGzOaaDMcHW) (seq (null) (null))))) (seq (ap i XIQgjqoARxxJdfaFcMxnHl) (seq (seq (ap i sLSdaPA) (seq (null) (null))) (seq (ap i QGlHXJNyuXpwIsgmXjpmiOyUAoJeMiSfKsCQLPeDNyddoVyodmMvRwESBEvrmtcPhICvmMoXHPhSl) (seq (null) (seq (ap i kFmBrEoczUVnXLZRjPwlRMFIMtOzrHKAsxIflEXEOwebgutzHQ) (seq (null) (null))))))))) (seq (ap i BUcpzVakzGHeelwTnUfKVDDyGQrXqbDxRNMrJdFsinuZzuQRi) (seq (seq (ap i oaKIHSUQHZcWbIUohMbrlstwtxgjTVvqLaQMvwtoYmkhehpsgxPvZXZZhGQUwUWIeUYEuNDQAqW) (seq (seq (ap i KBiAtPsmMQdmcNbbUmcyabWmfsHWaDKrnJGucNeywnFGNczHy) (seq (null) (null))) (seq (ap i SSkoEKzPxDnAUzXJPnyCyLUYgwuVOHhQaZzMtbrPoCttiLHFnCimOdXdVyPaYlwaNwDrZjPuFFthNdezoqMSburjLLuDRFkycmfR) (seq (null) (seq (ap i tdACheNtxPkYKDqnrUZHqeDVUcAHasETxLZQZ) (seq (null) (null))))))) (seq (ap i dvEFlFMsUPyQQsuipAAHNkHHGWbmGVTAOiGbOxBpBJGdeFCHKAhKKaspJMhcPdMVCJdKYrnRShPHObf) (seq (seq (ap i AZhlLyPEOGJRJmlncghKjhmpqoOrjapUkSGngdMfzXdGIQqhmfGOAgVzeiNlmvU) (seq (null) (null))) (seq (ap i jQTLOkvbHJUJdnksVmCArlXsZacvJOqxpTFkYDnxTuwqkIlvRAuCgZlqfFhgqXQmhItaMBMugUXD) (seq (null) (seq (ap i VhmMSJbmVEdXrlMyUrpoFXJvbRRlWXspxz) (seq (null) (null))))))))))) (seq (ap i nKxlvUnyXYWmbJIttMkunYErSJrpAJViGNuvbfzAGrlZGJYWqnIzAwXxJLvAETnZEbVOnrHPYUDDLKCAfIzefXePxyzdcri) (seq (seq (ap i MuhlaiPbSpteryubtwfmWLYwIBJbDffYXWsLyACgdJldIpPHsMxqiWnhoSkkMKqjAmEDQQOXAdyIXZJUqoAAzFExFqzHq) (seq (seq (ap i JriqBwXiluhjqBoGzfOOqjJTPYJVyLShKoZWkiQRAWbdvbxabEIJjLXZYPxkVt) (seq (seq (ap i FCAxlMxBLGONRuyRkZBkJfpizsiHQpiaHcFelPOGMAnUOmCHSnXEnEHgAOIoA) (seq (null) (null))) (seq (ap i cATROJWDWXmcdokuGdOOLrqaNXuZdAaDwNcxZQTeaGpOYmSBOIAkGetBBaWOvugXCiCzqicLpFrvTyKsnFhWoctPAypyN) (seq (null) (seq (ap i CwMmdfroBzuzUAA) (seq (null) (null))))))) (seq (ap i KVcKHJdijJiwBnGnpi) (seq (seq (ap i hboNMusLDLtXjrfcbNNCnPAjUzeQCUekQxMY) (seq (null) (null))) (seq (ap i qRxXHDQlwfDAhOcMsRyQrFpykURFxWvoGEeLWJreznzhxHwgofukrwdelDSDkqzPNTcAoUHoBPmJwCrlJlCuoA) (seq (null) (seq (ap i eJiBhbbLb) (seq (null) (null))))))))) (seq (ap i QAIqqOtQepMwhFhuEDkZsKpaJjMKYpIwEApBmPzczvHhNrmUrcoJLCqOtvxe) (seq (seq (ap i ScAXENackaJAVbgJTpuQtREGT) (seq (seq (ap i lZIxfyDBrKkBUITosqWDiQdrdgMcBXubKnyHauuZomyAUxZRzeqEzf) (seq (null) (null))) (seq (ap i ewHIKcgyEas) (seq (null) (seq (ap i DuyWKgmKyxGuoNCsEkRjlPmcJDdQNmfmnCkzACsJBTyAFlFkdXqaOeTNiTKvePLStwnVqrxP) (seq (null) (null))))))) (seq (ap i NDpeSogBsPEDYNFureqnXUqENeJSuKhmFndRgCIWAzkVwpUK) (seq (seq (ap i tyDgenJmwdCQOQ) (seq (null) (null))) (seq (ap i UZEZcPKPdcZvTPsoQGlajxohhWc) (seq (null) (seq (ap i hxHmRFySBFaJrarxpWANiGFqPzXclByBZunNrCoQOokgnwAPYkQCBltdKdAOPRpOgBWrIerSToYXbCfXGIXdxSdUoznMlOcckb) (seq (null) (null))))))))))))))))) (seq (ap i iowzFMWdmpLGBtLyTczelQFTnoMofzTuuhjmVzhSNiKSMBgAteQdOhxcBlhzgmuVfRkKMF) (seq (seq (ap i rfjMVmnovZurQPTTPaRkrmvYsqFqvSrGyqMviXpMlzxlolurtWOeLLndCosPxyWTCYgFZkigmdXtxueRMJGMBHjoF) (seq (seq (ap i jhSGQnXoLxtthXATOKGfMRxzKDDgyaKOBtaCSYObsMMIJGWTxserkBdhmfnJpxeUblPMMrWXknClOOpWZbMDNHfAcLHaZVEJbos) (seq (seq (ap i gsDr) (seq (seq (ap i eZOvQRRLIongqoidAJQxIsNodBKQdObuMxQoiiNooaxRYKwfljGopcewdhPhHzI) (seq (seq (ap i iEaHWHwDJwlXbXLJDgJbiDKyolSoetOUmFFIVefV) (seq (seq (ap i xlNjXKlLobxBJbrwpQMFRruNZGLbEeElEKtUk) (seq (null) (null))) (seq (ap i dGsiHfEBLOcJlfFCoeWpSVPRbYfkFkFLYIOaTcBpLrzrVdkLbysLBwCBuFEaLtnLcEbuCUCrgqFfNMyhPcibdqNwLwFGDY) (seq (null) (null))))) (seq (ap i YMFgoXVtHSfYylrLqbzPsmiClNdPcuxJVeuFUdEEzeIicUFqmYZWjfkrMoTnWFSPdXBJKMnCQOdUGAEaUPCIhypabOUyS) (seq (seq (ap i QJBMmAipFiGvyefVvSHjOJnuwfF) (seq (null) (null))) (seq (ap i RysWVGOxbnhpCYeWmA) (seq (null) (seq (ap i utYJhUgbtGfcmPHfaZQLStYseykp) (seq (null) (null))))))))) (seq (ap i qvqVvsaQvoUbLbZsppmMHsXllYtYOCqLOUNJOQnxpFjhWn) (seq (seq (ap i bBNNLItaHOGLarXqHPIMhzAlxgKxCpktcHePnRTWjouWajowfwfZizkfkyCEPfLmIdHbRhHnauNUtafYcsqPtaymAcSVVdyKr) (seq (seq (ap i QjTbEWaExFQRpbcWjSkZJAendTgGircvaiVlnXtLYHErH) (seq (null) (null))) (seq (ap i IfxfqkzWHOjupwPdsdcrDjyeROnwCFYqpWOtOzhtoHqgFfSPjRprQuaZKrhAyiGHGbAObTXzhdlnyVFmpSYsyhSypdYONsD) (seq (null) (seq (ap i anBVZmcMdwgqZhUNANuFEMgcICNmcRGZRcBtYODfglVbxbvHPXmZoVGsSkkFnQunFKnzPicgnfxGlLg) (seq (null) (null))))))) (seq (ap i vkepEVsHJJgodLKKAmRVuWjUHFQoeGSAGqctbdruVqmXgGosBNqnISK) (seq (seq (ap i ZgYxhyUNZZfNXbOQIlieMBmHpgQjCnBvlYIEKeEqKYufsoFnBKZ) (seq (null) (null))) (seq (ap i yxpnlrfEOnFIcNhFjRF) (seq (null) (seq (ap i QyOxYFFenDHbJobUJHykWbIBBVHMrgzvQgFlzMBH) (seq (null) (null))))))))))) (seq (ap i OQpBdOXiQOhCqkcJitvmPGlLjgTkeADNBePPrWuzpnRlfNJh) (seq (seq (ap i giRcddgOSgKhipcnmGITxTklH) (seq (seq (ap i ZcSeAfBLbixVmpkFLSfgUqoXhUyHyLpfiwSOUXsdIXLAWCLnyKCEikkEyaVpGwypHBdGQHWzYSExHvBI) (seq (seq (ap i vGelPbKbHxlTXQmVudIwWHSiISJTrrVSbvwAzsXNfkYwKBTldFyPjEDF) (seq (null) (null))) (seq (ap i FDGMtnhwFkomPUZOFmiyowtMKtuFk) (seq (null) (seq (ap i gFdsCtGXOnYsZLZZMfGKvycHbUYjXJVZGIvcilgxXABdHzqAGQDiodFfXRkbAIVpfwbe) (seq (null) (null))))))) (seq (ap i uZJzdUxzhIDOomMcZnunmGhopbULnSVlAChZuVPzjdzWbVi) (seq (seq (ap i iBOEeXkJpZMKTcsRNNWgdoClrEceiudrvxrrvFhOhHyxoexYh) (seq (null) (null))) (seq (ap i uOdbJcGYdJbbqSHYzNLlXDHdVrGrJJDxROHwOqkxiVQrHPrZpTNQgCvsRA) (seq (null) (seq (ap i jjXtEqfQIvfRcUIBEvYkwtGecboveQtNpRCXtUjxCuyoTymUXPbSiLVgdNl) (seq (null) (null))))))))) (seq (ap i UzsRKHAzBCeWtSBPDVDEetCMdFTVXXtQPRYNNgqvESrIbweUnokgNEiuqkGeAmIhbWHNOojJLgSPBqWhKrhogzSiaNSOmAy) (seq (seq (ap i UXzpYRVPTlVLpITcPIwKuNqWPsmfmAMZLNcgmnmzdabCkTlaFjWhwHfDawtuuFNpScqZYWuxqBWdTshjJR) (seq (seq (ap i bBhkleYePruGghUFFXibUBpBNwlZsYpsYZdbrZkNR) (seq (null) (null))) (seq (ap i pNMBmkyeEcDJoNGooHwyvNUGtYguqreFWfBJhsbWEaIrbPkeKZoExuLsVItNJjivzhFGuThsEtVmefjsqjqeJGj) (seq (null) (seq (ap i nFGiJtDbesBMLxQBJIZyAKblzZWHjAuYCaTGJGOwPunioAcvfIdnfAiPzgj) (seq (null) (null))))))) (seq (ap i ScwLGikwKUyvtQIiyZKGTNQpPVYcahAVsyPpQBWUrHvXbhMG) (seq (seq (ap i DQZYOAukcJSLLaWYrKvCJcaghWGBIkgaNpORZdvZVNv) (seq (null) (null))) (seq (ap i MwpkSqWhFBZmypiulnYcttutrGoIctReeZdkBnvlkkLjNIoppPIzluqkkGbPgxnniNUgSiqvnGXmG) (seq (null) (seq (ap i EmrNGVelXgYaaLzhixfRBAsaBltrVECVcevcQqjoewPWgnMsfBbsMdEvtqskhkIEZNRoaGHIQzCClZZkmaoMnGlRWy) (seq (null) (null))))))))))))) (seq (ap i gZYseYLjVNzIlYRcjLbXLOOGNPrbclZQE) (seq (seq (ap i kDLfCXviUigQsXLNIhQpGjUqvJIVMmqoEgEwExiRqHbKmFABEppbZiSTokjUGqnFlZVKAK) (seq (seq (ap i nUfIRoVsgAgRoZLAXgwtQHpfwiaOHZUYIdIsVSYbTtLWQUdOgMgIRncoVEnRknpWPQZnQIupmZavqKwVgpMZPdqMN) (seq (seq (ap i eePIMwvkPNPCyImteDisrXvAafmIxKPytLzfmZZDsxkvtxStGHwfXbGAtSYbbCLMDAOvElNtlmImtKxfOyKURQZAshoJ) (seq (seq (ap i RbTkVWVPeLLYJVYFhDFjedmdNjuLdircRUwUSepVGlAgNrsFvDujvWYQubUzUrvtPTTSLoDagYVtzvHIMxvtzovQqVdQsddIaX) (seq (null) (null))) (seq (ap i hGVACvWgsgzANWAwExjStasWBWvwvZuYoriVWBUGtJdxgoQeZhaxqatYBFKmvErlyFyhHlGPAGFnAKlRnTgmbvUnmRcYlmzcdJ) (seq (null) (null))))) (seq (ap i EZTCUEwAfsIRckIQQAXy) (seq (seq (ap i pCNDInPCcdkKjaLqhzkkPWRnNyUImvwRYxAZrqYhTlsQVegPZAciTslMToyFgREmpRrsUBRjSFKkUxucfpllAAOCGbySkaFJ) (seq (null) (null))) (seq (ap i JZHkRyRlIwqThCAnRVuBHvVQqFgPQbtnUGMHbLGjdStegXkhUcZEhNptoXOUtDNsWMTsbDlaTxJKXIFiLZtrrirkWDOhmkpcptGW) (seq (null) (seq (ap i sGGVhMFIOBvNyfvSsuxk) (seq (null) (null))))))))) (seq (ap i EBdcsXDTlpUOfvePvoPWIYcfpUaVVVecAh) (seq (seq (ap i CfkxXLfgcymbWceXKrzzhJExIMbsxdnPCTnrDXdZcHiXJGmvEcYUYUNNAYTxPUEPzjC) (seq (seq (ap i jHgEpIDnHQXN) (seq (null) (null))) (seq (ap i nvLZ) (seq (null) (seq (ap i LDJXiyHaILXQqeJsGGInEnsHEcd) (seq (null) (null))))))) (seq (ap i AhnKYhUnqWTIlpzUxutWehNWbqLdpOKDkaasKxcPapBJxvumRPaQKosvbD) (seq (seq (ap i xTdHZwJzgbnmZcbWPoQZeHNkiAcPVgjYsgVutCJXKnysQXPMccxoinwtpLPSBLcBRpxwNejHCZWnSEiokumUjYMniKoLt) (seq (null) (null))) (seq (ap i mNXjazqYlfvRsnHUhsVxuwWfFjk) (seq (null) (seq (ap i nGsdRBdcYZqpjQSpOLllNDiSBVlepQnBRxFqJJxJoPxc) (seq (null) (null))))))))))) (seq (ap i nsqJtfxvWspYkJxFcyZqVDBkxrejzfMmhoapNHdHgUHIAIwPnLQtkvusiuCFSXyytGtlKfhNjQRaDTCy) (seq (seq (ap i gJSfORItIbAlJOXZsPsVwLBYbRPGyYLoJEWPsvlLjGhgGhHYjgtsVLqZQiLThwFtThVxlXvqRY) (seq (seq (ap i pXSMoQqTcsBPDRTphJjpXgRaXsenbTnWZmOEegIfLkZwgfqoafHLjROybWKLYlpObxdMHVEtmzZFd) (seq (seq (ap i BJTiplsxQwieeJkiEhcTPteiKUjacIaJkcBJjmuudaoyFuCDgrVRYQaGtzxmfxWQTGIhmPxPNkeOMFzjDxBdxsamfodEXIANin) (seq (null) (null))) (seq (ap i qFqlohRcvDuPEDUSPLGlXySJomGqaAynRAjjbGkbxIsaFVRTikeQWMcOADbwIwSKdUWenvPuNSiafhP) (seq (null) (seq (ap i UlZnSrHEPmiOfUweRblKqqLvqQJTQjgWSdMzgnAaCfe) (seq (null) (null))))))) (seq (ap i cnqBKleUVyZsltMzTpoBr) (seq (seq (ap i WFKBERqjRfiyVJjCNcOuzecfmDYyBmdjsnbAtbAmBrcnJeDJnxkczEVMyWHaKvbXeAxjUfOQgxQCdIILLmfgKQE) (seq (null) (null))) (seq (ap i qLUgcmWoZJNJQakdjLkkScffAmXVuSFQO) (seq (null) (seq (ap i FRkzxHqkpobzwFGCJiJuWjsmiLBPawrcldMqM) (seq (null) (null))))))))) (seq (ap i dDPDiPAezCv) (seq (seq (ap i wNgwgbPgDwRvuKoytlqxVMNeGmHfsbRmiAOHfCwCLFXvIIypJndOsrjKfkPcOIRippMRLeKqlgrLrgVXHMtXYfpmrtZAFkZLnW) (seq (seq (ap i wYEYAPXhGnk) (seq (null) (null))) (seq (ap i wuHkTvwuWSBQpyCGAtKzatDmxLUOxzahEIdBQCzCuSnPdPgMDrUuIJuhGspOgBVj) (seq (null) (seq (ap i alvFLroihYujHNxZZGrMdABlGlVePmbjBOA) (seq (null) (null))))))) (seq (ap i kbpqpKvrUimUWOenbGsEkErMNXOdtLdqXRwoibMDWEngEPKEhqkrruQKyRUpZhWWQcqASJMQqmwzHFBrKjKLhOuJ) (seq (seq (ap i iGrMnhgBcbIoLqXeeiPiioWCcjGnWsNSpFnptCPYZRyKAyMohSOFBZZWJJWjVKnvXygCfgYbKLTbAAYaDCajoCQCerqqxJmP) (seq (null) (null))) (seq (ap i tZFsiBXGLlLBAKrNUMWUPeMYaZhMSfRjLQILFYaHUHsIatjdiuSOFnLQjy) (seq (null) (seq (ap i iuWNtLKuinVKvZfLPsXnKuGGeACKxUxwuD) (seq (null) (null))))))))))))))) (seq (ap i vkXpjilhFUYXSkuuUOhykujRwJZTpzkhYkcxrMRnpIsqTjWyFYTGQqQTkgNnnmFVJS) (seq (seq (ap i WgsvLoakGdulTLhuq) (seq (seq (ap i SsqElgsICTVWdlAuLrbvPKKtbVQKrzHVSmXqpsci) (seq (seq (ap i MYiGtcgyXruFZBuWogcJLVwHzO) (seq (seq (ap i DWNlcCsCZJtzTkWkUpmvGbTLQ) (seq (seq (ap i hxEWPfxJManMUWITCcygrcbagoPCmpfGeHDdyaanxtvuckuOhwPEkWkvYvflWDXwDiWpxin) (seq (null) (null))) (seq (ap i vssUyluUHTjuHDSowaQCQNChYaJoejcJIUjmTKrLjbQcTSH) (seq (null) (null))))) (seq (ap i DSfYEUMdClpvlsGxxneVJJfwrycZH) (seq (seq (ap i YmfsDbfsdkWeyrKuYwDIRttqtzSfyLVjCHqepsrknAVxfPNxhXxHuMYrPUwrjjdLzWOzBpqRK) (seq (null) (null))) (seq (ap i cMrVTUmkGLFSocLMpkcRZnnsYwGJuWyxqzOOYzEQYvFDLMXILJjefcBHGuMcUbKfvGYUhVKgkOKpHxdZyHCExeyblEBwKQHBvK) (seq (null) (seq (ap i TGVZesuUOozmmvwlblXSsbPlXcEJjtvATvfWSJeocFpwEQZy) (seq (null) (null))))))))) (seq (ap i fbxCWfdNIBsWSgAvwSBVkfHIZ) (seq (seq (ap i mQKldWkxhFNcIlrgqHpugQQeQeyhTNjZFBApQUxgjkpmBmxLOXAryyLJnJxNEgNJcsctbGxOkESfYWfxhwxPYG) (seq (seq (ap i TFsXBmOrDoNTFIETNgrEapFpEftTHCH) (seq (null) (null))) (seq (ap i KkPTvbbPCwzjoiuLgWeulWGiofylesUEohFyVKg) (seq (null) (seq (ap i PvIdJbhHzCPWUuGOKyyWsrEbgqPTLcjUFUexATBjABmFyQDOHgWBqfqtwOEaRHDAjvybhpvjMDuWruztdYzUaxp) (seq (null) (null))))))) (seq (ap i llASYddxusFCDnkoJkSGaFERZOOZHrIUaqhDTXxYoIOcGmznFs) (seq (seq (ap i HtEnDWQIKXQPAdcOwFJYagEAkxbUGPEswEvbSkYfswUyZycRoWJABOoZWieptlqERTFGbVQNXtSFGzEw) (seq (null) (null))) (seq (ap i QBLGVGZsQyxROrFp) (seq (null) (seq (ap i gpBtwFSLYxfytbLzCfKgfZppvqXnDXAmNUJlqfxHqMWiOhcfRJCykXJqZJg) (seq (null) (null))))))))))) (seq (ap i rKcMMAnIyBkHhFgTyjgrhuShNPXYIjwykmnGGWfYSGCjLuskCcH) (seq (seq (ap i aPxO) (seq (seq (ap i CzPGjgPDMcHhiJYgoTdFcNzwdhpvteKSigHCcKQURzVHXRvgLAgsAAcorvJimYSmzoajwfzPAKQHLCgIMgxKMrFo) (seq (seq (ap i gJiRztQZHvlBJTrRIgoBxpuh) (seq (null) (null))) (seq (ap i tcJau) (seq (null) (seq (ap i ydTSKBOhEzSNVQcXQaptetZioYlHqTesyairipmnJIeTt) (seq (null) (null))))))) (seq (ap i AtOGSos) (seq (seq (ap i dBPeuWKBQCrmRxiDScrKXsL) (seq (null) (null))) (seq (ap i FVSexbvfgKPLd) (seq (null) (seq (ap i pdVwbKMwJKKQoKrrSGAZZwCiGJlmDL) (seq (null) (null))))))))) (seq (ap i BlFlHEXp) (seq (seq (ap i WgkkBuHujVCWCODTZUCFvdIIWrfYiTYfKDYArXoftsZWiCjcrTNzpTBXmUXxSOLZBrYorKZgQWCMcYsPTWmcjLTQTpTGJxSND) (seq (seq (ap i eBEdCtgieryUfTeIQpJxewGwPbxnFOd) (seq (null) (null))) (seq (ap i qCqQnnXZTyCirJncPkmBrCQuGseFkEeWLuiCtTXFvwAsnvmWOjQvBlEtKDjmuxZChFzjHEgJkqasdYL) (seq (null) (seq (ap i cKDLFflAOrXtPqMGMJuutyTvGxXjIFFALNQslVKBb) (seq (null) (null))))))) (seq (ap i VETwoohdhqmHIcJitJcKMcfZ) (seq (seq (ap i dMJqdUvXjpijXFvnyZxuMsAIyDMrvaMukUhzvnI) (seq (null) (null))) (seq (ap i UlvtSAYlHNDm) (seq (null) (seq (ap i ENqRjcJzcdnTbbPumMZIJwdXZjWnkpeHTeJWwYmSbRwyTevHlnBYWXzphqypBwastehHYiQBaDdUCxMOlrDPiEWEcHMQbQ) (seq (null) (null))))))))))))) (seq (ap i HXqMikdRusdsnSpXXLGLlvlDyejugsJvDsKYqBUsbgw) (seq (seq (ap i OxAFUbtpbTyejYHvPiXtUKIbpqMDYEYQuMwDPtTOSQyGiStBepWIvKGduNxbBSsvVdLOBIojUt) (seq (seq (ap i ISyzJMruPGGiYVfVkhncCZCP) (seq (seq (ap i uZXKCXplyjZZmjpiEdHG) (seq (seq (ap i JNgfdwONPZQyAwTwMPIcjgLAiyVQRCCwUgShRQKjuoAhYCxEKADHTDJjjTBxPBCpDpfoiQFCzYZBn) (seq (null) (null))) (seq (ap i FNMVOKjHkwpJiDAMxPFkvpghEsrkiailNHtaVePWiFgIoWljWJSIOzXgbjljCoqGLmnnfzlWEpAtNMPccAGofgtOm) (seq (null) (seq (ap i PDVRKgFZVDGjTlhSqauZhmbXMUgQRUfTKZdpdqnmyn) (seq (null) (null))))))) (seq (ap i eeOfGNdJJdonCQYKuEExdDnhYnPUKFRKXhVvMjNVoHNHiwvPKTWZqrwDwACVephozyeFnKcbjbsdjOemETyZMIWghtbg) (seq (seq (ap i oNfIiuZMYa) (seq (null) (null))) (seq (ap i vZNtaWtZTNiiXwSkkBtQUtYTjbIcULCuuyCeNWGlfkWriqQWAydPGWYyCMXij) (seq (null) (seq (ap i JYj) (seq (null) (null))))))))) (seq (ap i EgeoXdlGcLOmBaurRyOxpmUHNuEikFEpWjnLVNnEUfJQTrLdMreiCg) (seq (seq (ap i SyVvcaINzNzWpJTYYsziODRqWVwKijGAWzm) (seq (seq (ap i EEufZsRyieXPmchmRmkkcXwxEjYWQdcqIJRxeWTwqAZhKYuQtARyzFMLIPslHkqYheqFmeaxQElolpaYHLElZ) (seq (null) (null))) (seq (ap i DwTeRYZbGcXskDmGNeCOLLBtIXSuxGTviOwxlMCUMsvBITnqaudoVUwOTBOCbjPNTMCTWlzMdtmfgXimZIoVmAvEqwchfabEb) (seq (null) (seq (ap i ipiKTGEgOWmVwsAMizrNkgAOxLAOhkHkqEHSpJ) (seq (null) (null))))))) (seq (ap i kEuWsPQtAqxvIgywxEqPVKmIJDxjgKLYppqjRTpPKSWXyenjavGvxyurVWopccqlOGLZoNjoOQmmWxHEeAYdWDlrBk) (seq (seq (ap i TcxqZEgZiSogtBmmsYXygOFdSbPKEHqaDlPDpGgxAgQDZXFZzxDgaNNWBCZSOF) (seq (null) (null))) (seq (ap i ZlFijIZbtohwGYkFvhw) (seq (null) (seq (ap i iDxKdBcCuPDpSlmVTEWungahclQXuFTRcGZazzGpOmjGRfQP) (seq (null) (null))))))))))) (seq (ap i RVyBXtJ) (seq (seq (ap i ezglfNwwmDpsruRbQGejmYmXxhPFZdEazmyXmzFuHbOeCtOJUSxGZCmQRySjbqCOJtIMHHjaniSaufWzPiBjvJ) (seq (seq (ap i RJOrZBMAuWnlbeRVuRyoGLdVnEqxZnYYCELPsHgDAnEftBTTRIkPKZdGCinMVhJBCbTRIeFxfixpxANlGcHr) (seq (seq (ap i dChplylvOiTSaUrHnltYZDZSaDAehrCpzQqAJb) (seq (null) (null))) (seq (ap i ZiDKsdtEFmpRn) (seq (null) (seq (ap i rFkwxrImTgUTikJCmkIjtk) (seq (null) (null))))))) (seq (ap i PttsLJhKQQIPbdmGmzLpLaXuXIevdGlpmjcAUAtFRmzVn) (seq (seq (ap i efKopmwlUNFmUkHiUniSaYIFESdjttmYkvEDmnmhkjQqqdWEjqsmAbqSTVifD) (seq (null) (null))) (seq (ap i QgxeikpGsIKntpRLjNrmjKRzSTcZMjxRUEJRFgt) (seq (null) (seq (ap i cdvtrldhXHFiHLQfSdGByhraWJuYAGvlfdnE) (seq (null) (null))))))))) (seq (ap i uqTNyuktlvYLBkjinHTdNbfFuaDqggniIjWpmrLvfhlBNPPbounNvIihKiHJuomygvsJxKKKflGXCdBIPQvHpxgranNaYAPSW) (seq (seq (ap i mPuoOvgReBRQEcBdwdYQVUwgyQimjTOHyrjcaGQoShYiUEalWrDFv) (seq (seq (ap i ZMXxnqLUwrjSMYqhFTJSbMrCOalVolXGyKAyPHNMVdXfduZYPiwnbjYAQwaeEHnzYgYMQwAenduphKpsQaTAImBVGWkLwQ) (seq (null) (null))) (seq (ap i mKvsFKnsuZlanigBJXFUOimdGeanLvMkWyeFPgiGdYHFNEfoItQztLaTVNicEjkqwtDFRueFQNOpHXnpCfFQVw) (seq (null) (seq (ap i REVSVKTWUgcZIzuagAaabpCiGNOOmuyzHEzABHHUinCZgvzvEZGFxaEgEeyZsVxtaHKmrtULxkbkBiXLkMIVortlN) (seq (null) (null))))))) (seq (ap i ZajWsOtItmxYUmEADBOkdMVOvxVEeQHIQsiKzHxJZjLSAdOTVYOjiWDBmR) (seq (seq (ap i ylSXcZjqFahjwGQxJdwCVDkFwmUj) (seq (null) (null))) (seq (ap i WhkxO) (seq (null) (seq (ap i LgzJBixzBclNnGrBlPYjFPtfzttscLJFnWoxvsagHCwMQoQawMroC) (seq (null) (null))))))))))))))))))) (seq (ap i gYCfiMUhDtLzOZiBPPoevqblokcdiHOMiUhNk) (seq (seq (ap i VOmsrtQ) (seq (seq (ap i ZYUKGCVxYAqIWHidWDVdmxkHGTuPGIViYIiryKPXonNifaZDOqxcIFSRhXtLGCUQEEamCAfShTnBowjbWELZVtpOjJlMGp) (seq (seq (ap i TCOjzXwHlsBFXkCAEJZpPZNTJYoLSSuMCoAyILWMOtjRtIbkGvPdaztoOpDrGPFthJq) (seq (seq (ap i xZjPTQuOYOSVDYrELGTIIJjjateagHEfDisoHzcVKNBenJmtdVfiBnAJHoWgvInSnYCLjRUR) (seq (seq (ap i qXtmjfbSZaVUFamMIleyuovqirneDyZdoifTiPJzHFGDPnRtOGuFHtxHeMyJupucIMgn) (seq (seq (ap i PEGYVpeK) (seq (seq (ap i fevUqBwPfoamAbWTzhleXCfaVZlmSPxQjvYbiJRLpCqfzfhLRGtaeclOGAVLZMC) (seq (null) (null))) (seq (ap i ydhlEmCGavShnpoINnqwOLSLsSkgOjMmXGuSNIQeuoxuSlucuHukBMigmfmKMrSoeFbKPKxJzIupvWmtrZjLaZ) (seq (null) (null))))) (seq (ap i itoUtgFonXrAVWRKpgUtrpmxjNOZ) (seq (seq (ap i enczLBlUaeqRhZiQOjsTVufleQQFThAtViQuT) (seq (null) (null))) (seq (ap i lUwdAIkdst) (seq (null) (seq (ap i UnyZGYroCvHZGjvYVSbaEyafjBF) (seq (null) (null))))))))) (seq (ap i iUVjOZjVYOLrYkOlDNCRqlBpRwEOjBGDWZRehGUsMXnQKOwkmCStpWzOmGNEIsiYBNLqQtbvXJKQxbjd) (seq (seq (ap i sRSWtxtcSTzZoOgQVQBSftWcZDcZqoPeHIIvbZbXRqSccDbBnBfohuMiIhudambANruGIA) (seq (seq (ap i QwUxvJqQdLjwqgtZCKRXiyQTUmGYcdnbKRrjjgBKwNezSUwdtrYdEm) (seq (null) (null))) (seq (ap i ktrrHCLGTWCMCQbaBBxcrWzqql) (seq (null) (seq (ap i QUZ) (seq (null) (null))))))) (seq (ap i dsqjkkaYTrwhWfuXBJyUtnAPJGbOiIeywVjxNwxGHni) (seq (seq (ap i OVrjXMNxMbtPehVeYossBwjqAoubPxLrXCuQGxpLdVdosOgDuSnvE) (seq (null) (null))) (seq (ap i GsieMmMmXrAOquyDxGctESrkuzCMgrOfUTqmRslIoyeigjJfCuRjbFuoKHLANwqppQwZmDOIQmQED) (seq (null) (seq (ap i RSVfXNjekK) (seq (null) (null))))))))))) (seq (ap i gUI) (seq (seq (ap i ChgeSzlhDrilTMNtnHPJkfLHgvTNIXnAaFGHpBeuCMXNkdADsunoQSKpqtTvmoHB) (seq (seq (ap i OReOrzCBTfKrUiYUKOpStpUmFNlXgOqCvzWAtugQXHXIfZikTHWxstJmEp) (seq (seq (ap i osmpoEfxWcyvpetLomtAuAuCLJJhxNCiAeu) (seq (null) (null))) (seq (ap i tNACsjkzTMoKueryTGYnRXDifYzTabZNMVKRGOwJJWkkOwwAuQAgAmVWsxNUthogjoIvyAggMjGCYPPmH) (seq (null) (seq (ap i TPdztHjlDOodyWyCOJRjRXRrdzWnBoeivbQifdRCDePgnhMFhIUcfiBSMBjnYbtpUkZHNgHSygjomoB) (seq (null) (null))))))) (seq (ap i pjfwDZHKgbkZjMWMlfYArnihFfuYfpxNOROyKGBRmUVoSHIpUTA) (seq (seq (ap i vxmjPfiaekHskfPcfHhteoEnivTfQoqwvnIsZeOLjKzFrImvxzlqhHidIuUmDHHpadRIuUGNFLGzFXDBGKAESY) (seq (null) (null))) (seq (ap i bxHGYOoYipONnocqLlQjJIjoLks) (seq (null) (seq (ap i RdGqzXXzjvyWnZCbbjCroLXtRUPImdaiATUipBOWSaKDHIlSHHxV) (seq (null) (null))))))))) (seq (ap i fQHhjPmJDCTxBGvoQW) (seq (seq (ap i qISvUwosbRxkDruGPrFIhLWwYMjOozGSCcQesvlvvKfJUlodTCAgVXLRjFzyGbWAUmB) (seq (seq (ap i uKamqITtEdSOTGTqkuKpHkYmfBbCYwOycxSQOWxTvdFRVRprrYTwvICRfJQisOPkvgTLrEj) (seq (null) (null))) (seq (ap i nXnieInsNctGIjuMJGRFmOnHucIxRIubGiFRdZVVsvrDQPbMZqDeNHpcLnTbBkpiPv) (seq (null) (seq (ap i NNsxwrQvUdTAyztoXbdyILVMUzTZgXJDyfJZETVPknNmczhRDyqBMorGtDziosJXajMcl) (seq (null) (null))))))) (seq (ap i zKTrbVWKUFdZHXOAHrnBwRKzvGXQIWrRMhNpIibYWpSNpqhCPqHTocOzovBtQFKzOkyieUqvwqHdVEsQ) (seq (seq (ap i ZmlwxdlugrEGrEPwKuXCMaaLhpXhFYeolpoznxIcopLAIEyGmWZGMNChd) (seq (null) (null))) (seq (ap i sqCDImxKmHWKWYKOBIqueBjPNFzJhPZXjSDnFJUmXmarJcQobG) (seq (null) (seq (ap i npPFvyxYMgzbGGgXThRZB) (seq (null) (null))))))))))))) (seq (ap i yiCjAIPCQSYGBNonxOMGdTxIkOUmIlpkUnnoUlDMVuFRfwZqpPTbqtnVmPiqkzENAMlvoDWXPO) (seq (seq (ap i UScixShhzBxktUzpmdLTyyvfutlJVuyIeREwTZdbEwYiByNE) (seq (seq (ap i DQmGYjAkVLqImUfXeNBIXJZTLmsioTGlfSpTMDlDSYatheaGLdtwMLhRry) (seq (seq (ap i ZZFdukqFrkyXaHeCYZMBthswuJVpBhpYQLEbQRrwXjorLrattKWMVNKrPlcIsXfaWHTrgDMTSYlYNBewnAZnqLDI) (seq (seq (ap i RcXVnesBlvJVweffusiAkbioRYxYHilpVhbvyRDoiVAcTjpZEfzKwZLKnYxzybZuzSRzDIDrUTRXOgkERb) (seq (null) (null))) (seq (ap i KWLntFNILmPqNmILKsJJixvUBDnPpkOmMgZWPKUvCxfUjQqBR) (seq (null) (null))))) (seq (ap i kCbiEwjOyrUsjrauqhcMdNmNHVfQYyKSKcIhbFnGh) (seq (seq (ap i iTFtksPtnIgFRScsnKVIPIEUSAYObGWXkwNiTdyABDYQNwOMnOXvCY) (seq (null) (null))) (seq (ap i cfuxBbABedTMERZblJeTjZqPxqWfZvlIMmjTQfCVCjdTWAHGihRWllTdbKWYpRThKUpmFTWVpyWcp) (seq (null) (seq (ap i wityLCAHKJylp) (seq (null) (null))))))))) (seq (ap i QHePLWKkbIuvEfbbkJcTeAkrPLcejlzRxBeflxVThooOoRQAdpusJPUShlklsbNQgglXxBLGhIprQ) (seq (seq (ap i UbpCuwJWUZrHsYzCOtUhlCuuJZlNAFUjxhZhbIJFpBttbICisnyzJIQzyNBJboiouXYR) (seq (seq (ap i vBuoXiCXfhLmmuGrqjsXszAHie) (seq (null) (null))) (seq (ap i kdFckQDTaByPbnAB) (seq (null) (seq (ap i xOYDWVuzoThWBbxaBAQywsZFksthlxtKCABZZOTr) (seq (null) (null))))))) (seq (ap i cXMVkRePdAZQWlOIwtaCjKWnrQksEwpqsTliOzdRGIwtuHeAtcbmYzwxtasExhlHhfXNmsTYXOrfmYhrpdAOdLQmCRXIwqqCeqDZ) (seq (seq (ap i fGzFuDwKHLlSVDnwIjWPMmRwTUMyRJLKtwHLzBlqxayhso) (seq (null) (null))) (seq (ap i jYvljZihBvlgqHgYsFDIqXkMWthQFuEHioBbfYnDgcTJLxXFWofYXIkzvJOFOB) (seq (null) (seq (ap i CiGSSBODorsTNVqTuKOnpXEEQiegBgOLGHMJxeZkUuXKyNl) (seq (null) (null))))))))))) (seq (ap i KYFDsPjSpCsggqeZKPInumnLrzswyoZeLJQzxhDVSpxAoTKJliCZlSTbldezsJiiEzIXgxNFfnadvHAggxtesardBxOQS) (seq (seq (ap i WBUZsoxPrLIPjAqbBNMIYQwcyPy) (seq (seq (ap i WtbFFXHYpsLGeVTZNXwYhmawGdMBxwRTNxQSASjOMmDn) (seq (seq (ap i qprJXqMzULisyKguxgkLUWhZoySoeWIenyCmZZLruwuIMPStIIELwhzhKhWgXRAphfbLOY) (seq (null) (null))) (seq (ap i ShLqYVZ) (seq (null) (seq (ap i EigaSfwslpHBYOaSgVVrDOoLjU) (seq (null) (null))))))) (seq (ap i LoqVcpqPFAiMQKZDLIjnWEEtachkejTglEpXVINfJZcaZzG) (seq (seq (ap i bEGGXOEsX) (seq (null) (null))) (seq (ap i xpMIjFwtTKbkDAjUjSLQmMpQzlPKBsEUVompYqGnQomMRFbwvdy) (seq (null) (seq (ap i WQTYmXXTrBICtAWAsumvAEdyDcQrDLxyswHlRwyJRNHqmOzJu) (seq (null) (null))))))))) (seq (ap i RAHFNckzCPREGEkrYCPpxtjWdJggcdusNISiBexGKJFLuQYtCDAkQlMktOagExtCUaLrHEQYeYfuzkAJKItPKal) (seq (seq (ap i nq) (seq (seq (ap i qiSXdvXoKLHhKqsjXoRjJCzpZOXKsypmEDvbfHpIBriCMLwmRGEJKsDmQFHWhoSgapjkHzAAPYxawSbkiLZ) (seq (null) (null))) (seq (ap i EwMciyjPTSQRdbrgBhAfJqYfRpxZNIXAGRowjGRaPioLYPMEglWgc) (seq (null) (seq (ap i OckYpqBLRBdfCjNbHZNNFGbjEZsPXrTNigSuKieBOQEVirQKdtQlYwHVfHLRD) (seq (null) (null))))))) (seq (ap i NCVQwqT) (seq (seq (ap i BjwNBSPUyL) (seq (null) (null))) (seq (ap i LBNmYQJmGGQuAOIvQocOpinVKSHVhEcMDRpEZaSmwyFvBqqFZimPyjwQysfMwOTXBI) (seq (null) (seq (ap i MAUHeJbLgsrnnIbSAuSYCyEqDmCUonqjlcAIfmzzKqAClKSRagJawPDVyPpRunQoTbdytXSwkFHEwXHfaoXKPRTINYb) (seq (null) (null))))))))))))))) (seq (ap i EXWxNYtPRkqUsoaQZiihblReUiSdihUbNUEBQemvAGWqXLiveUUfFCKLscNSgjFBfDJWIYbxYscMhsUWvXSCXseFvJcsrAr) (seq (seq (ap i XYqKbHBdaAdmNJWyZZLcEecdzgUHvnISjJsZDXo) (seq (seq (ap i aeIcnQBLQWrrQ) (seq (seq (ap i kTWVnQTasBoUtNaYBAiycMQz) (seq (seq (ap i PAMFKtEFCmvivAKObGEjPzRkqBjtcwnfOGYuTsnoLBifoRpCIvrdMUTOfsGsNRKqPDENQrOBLRmlAlgWIN) (seq (seq (ap i mMaXeTePqHcbUhQnDcgVyOQdhOxxrRbKEStYaMktaZQhwDTjqXOLxJXsOnhLpoZzekagsGKMgTOGGqsoVRbNeaoItGdGkIrxQLc) (seq (null) (null))) (seq (ap i dDpOYNRzOKhabMiMqfthfaDdqquEEjlpPMXcgGmzXqBbPmV) (seq (null) (null))))) (seq (ap i KQgyEBTjVpoytwOSdKlJhTKNdxysLWKlEycYDF) (seq (seq (ap i KiiZsoIskzHGP) (seq (null) (null))) (seq (ap i qfrJCXKDBUxHtZMBOnrXOSlbybjTTNEtbsaBxBtzagGJTPjMVTAeW) (seq (null) (seq (ap i bGzDTUuFOmmuxciHRCDDZUuGziBFSNVwpMCI) (seq (null) (null))))))))) (seq (ap i ttVMQdWKxuNOrLegrRWncwSfpRUWRWZXkMqMuczfXLPqChQYADgxUExaGbnniVRxKFXPTjOJZuUyrcRIVpoyxShZWGtNpKiX) (seq (seq (ap i iVuSKrzWbkmsUsgHrdasNDyFnvavGURiTuzMkuYAZeZynwaAVQxNqlklqlSDXQVGVrmLZTrxKnywjDmpayHgWusDQCeItHxkFV) (seq (seq (ap i piwcACHIcqQqEbJHXZsrFkpmCBvZACNwOlkczJxkQhKmSkNFyGfiirdEEEoffEUFYKssdY) (seq (null) (null))) (seq (ap i MLwXfnfnixzEvveYZxfjMuluZMSeoxOWNGqmfIrYvZDqGMxBiZJDGflPFlmXQBsbZrQbMIQzrgHqIshiepNzUAjxIaRs) (seq (null) (seq (ap i CGIAMJmwUNVkPmipxTgBpUwaenEVkKafUVUI) (seq (null) (null))))))) (seq (ap i jZ) (seq (seq (ap i pmAPVaetkgGSCyyvWoyRoIGUIMSMLqhZMYFzQzHcHioFecLPlrkVsGWRtTuwRhbllNUVfDYGxkQkCXCymkBNmVKCVKUqAvE) (seq (null) (null))) (seq (ap i gXLvGKBcXAaCXinkgIusLVgZcxIZ) (seq (null) (seq (ap i qJPfUZrWdUgEHcDOpfbTlXhqcExEUqmAZgzFfgIXLwSJeELMvfOflTnRZkvxJFdICDM) (seq (null) (null))))))))))) (seq (ap i LAqMdzqrXIBKkBRUBofctaadYAQYRESybRSQhfRThcVNIGY) (seq (seq (ap i rZjvZxmJaFdwFHguYQ) (seq (seq (ap i jHlNHnpJdcGHzZdhGWVNWdqvKqInfDdoUIVoqXwUYjhJvcaZuTta) (seq (seq (ap i nogXmpTIMQWjpYogLzjTbhbadrAyzhKoLqiNVqZeeqdrYmjmdtgNsM) (seq (null) (null))) (seq (ap i gfFnXGCsnbdkZMNSkWMtSClAbCZNfAwFpom) (seq (null) (seq (ap i ykbkUOwfbEFpoReETZYwhDVgklhYmLrfyvpgzuvKhJWyFfncjqEdeHAwoYyHObmvSujHPfbYL) (seq (null) (null))))))) (seq (ap i PxpvToYykYZXNmiJVmNGMOdLYGKVnADVEmnacxPrDCoOwWwAgHbAUXCuOlyNHsNQU) (seq (seq (ap i VUBZxAxStXHNSKGjTDrZshDFyzdYm) (seq (null) (null))) (seq (ap i cChxrEtEyaxgaeOKSUIyOAtEDGByFMpaNDcGbdGU) (seq (null) (seq (ap i djIHQiDYs) (seq (null) (null))))))))) (seq (ap i IWzIXeBREYtGwSNcpLgLeVsIcewUAUQdTRBRY) (seq (seq (ap i RMLQOvhKTbCTgRGsPoADLucynztmGofMtxKAvVKmGMeCRTXLZgVXQRryYzvCfTtIDdAMYpLyPwvFftgdd) (seq (seq (ap i HFYSwortGuhoscuCnoBSqlbVXLQxVuKNOajRWdPDTdvmhw) (seq (null) (null))) (seq (ap i YDmESppOKuJIuZqTrBQVWchWDxdHcEgIPjfmGGXtuzfpBnTemDrDv) (seq (null) (seq (ap i gRHdBCgRKkRC) (seq (null) (null))))))) (seq (ap i OzYQPlJSzEQnRFfajhaMsuFaIbhIcYlSNoYunoUsnhdaORjwHJdVHiEbQExZOUQaIselcUXyNLhwUyjwCDgAvwQ) (seq (seq (ap i BbWwnoxgCwwnvDtUkAOPKiJgucAHLnFNCDRrVewryl) (seq (null) (null))) (seq (ap i UoTTOSUTtzQdtzNWSactVmr) (seq (null) (seq (ap i nPMEqewwAwIxklCzFRMzCbOTMRImwNvjcgdDJnwKuZVCrVLoohLOXkCL) (seq (null) (null))))))))))))) (seq (ap i boURhcMCrBYABoCaSecZqDjAqiYBWbOoUEFVDtCgNZACCKKWBKFcTrBIMydYYroROmHBBQcQjd) (seq (seq (ap i IWTKbuClijLNWEOeQwgErhqeQAlBZnZWnyHyomVyeQjFJbxmtpWsAULvH) (seq (seq (ap i fdOJpUickFnRKswgIzCCcAkJpKGUIBrxxgwiQxTZkiOWnHlBYGvrbaZcHesIZDjHJboRYozYRTGDlMeXHkhMKIcNLzmgJ) (seq (seq (ap i DpgHopzosnbwTHOgJTXuUollGPdRhQpnFuTtnchgFGbjIAkpddJoILoAyjTtagfcWyIXP) (seq (seq (ap i gjIYvltRhsiolOdBgwJGfWAUpCOvDYrYCgVFPatwtpaxivhmurGyLdokfiAakqxxbqPhqGHwDggxlEZYJXzHxawoaBEYoZCU) (seq (null) (null))) (seq (ap i NTSRQVpNUcJvnMBSClPKFtEvMJbxdLqzNEZzUvVuXjTNGeIZlgxwirpsddvJYYmtqchu) (seq (null) (null))))) (seq (ap i atLtJovEHNCxlKtXHHJFRsUGGBLXlAVdwaNXVilASNjSOphcrnpL) (seq (seq (ap i GRwespRnGbhXogQytloFOzmnbCysVLdfhsYebdmrVlnvrouUFKimFydoclhuxwWaELWQsqNHeK) (seq (null) (null))) (seq (ap i WyMkBwhBShpWAXJzrnhKTNNmNGLQtlbCXOWbZXXNQxVLgKcavCElvJoJUTqCMkHGFrIZItD) (seq (null) (seq (ap i GxnLwcFpnGjkPSwthhobUzm) (seq (null) (null))))))))) (seq (ap i vNRGIuxUZjXhqLdTUnmvDrMhfVXSuoZzPmuZSnwXKgZBhBZMnMDvghUYtFxiTXzpzHnbeviHUNfoloFmVrOqVLF) (seq (seq (ap i JxBUBLkQKTniYgEmk) (seq (seq (ap i fuSuLQXSvWPdxbSQLMXHJDQGRNvigQkwPsdkEkbpNtGNsIAkMpScnuLNqiTvEzF) (seq (null) (null))) (seq (ap i SgQjAZGORIPUcurWHciwDKHcwSSxjUKIz) (seq (null) (seq (ap i FEdKnZYwgUlsA) (seq (null) (null))))))) (seq (ap i YPVyAlhCYlKpteKYVbM) (seq (seq (ap i bKdZDlBmkgHDrGlVbJOClewBOMmKSyVLgaXnmUzZnAAHTblTQuKokGlHcwINWutOaYkZHhWqdRXYTFvDNTzsjUmvzGpzboArUWZ) (seq (null) (null))) (seq (ap i QGzuLKRVlHiDfwIFOzJqrjOBitjbddhhGuYUwQOdFmVmVJskrkSLs) (seq (null) (seq (ap i hxwVaKtvGQIULyWtiIhKJNOJQLXWxRTjxOyyMtmwnfQZgPuLqIlqLC) (seq (null) (null))))))))))) (seq (ap i MxQhIiXRucCaLwxVFeFrLiChSEugQVagOExC) (seq (seq (ap i lfTgzPCTtxsRxEXoghUspLgBpsYxrlMcdzAlrxAUgGeHYp) (seq (seq (ap i owJEpY) (seq (seq (ap i vseePHaKfdUyprSlDGkMPKwTbzHHhOqhHyiGaEADOekJVLgEUTd) (seq (null) (null))) (seq (ap i kBqnGNLceeqBaDgIM) (seq (null) (seq (ap i cFnCAwVrncSHAcjQLtDWFhGQwzfeqEKaGChMlNWQbOIzFCDnCRlCmTkFJKIEFwBkIdSFOmlXvQPgNErmFNLEFmYSeKowcFwMMFch) (seq (null) (null))))))) (seq (ap i UuWPYKjQICPegMtX) (seq (seq (ap i CJxGYsSiEmYbjtZExhLHuOPMKRapPHXFvrWFFLTPRFSAxHSbpDOCDpFfaRoJEXBLuEbZbKqLiYkHTMhZdelVMXmEDT) (seq (null) (null))) (seq (ap i WxeRhdhYmDyZpkpXUMFwXKWZbvFxwLSXRolSsMcghTVjDGeoajLk) (seq (null) (seq (ap i ffpwZQocVhxmBDwhXoCi) (seq (null) (null))))))))) (seq (ap i wGebIPUjLaafQfPhJyNpiFJSlnZOxcdWxHdOKynsoSReno) (seq (seq (ap i yQMyJHfTwyKRVtGfgNjTusmIcYBpGmqbzpeJDmlxrqpbaTrwyAchFl) (seq (seq (ap i eENLKWFmQFNwlyGKpHGnlDFUolMxWmmLgjZEgLrpnqpkRgYWpeZWdNnnWiYjtfeBrSSsCfIOlihmHjTDmItTmnXoAlan) (seq (null) (null))) (seq (ap i uUxWlIvzBGSyEepfPuFPqbnNvAWXXdvzEjcWVpgPWVfVtaoWHrezKtBmUVvNSPiMBLYtIGChTXzofIsMDUg) (seq (null) (seq (ap i rHwkhrDpDnkgxqDHSxk) (seq (null) (null))))))) (seq (ap i PxeJgJCUuEnnzOcKIQYDuXefNRzgOjteXTnOgragMGmwUpeuXvlhFMPjXsPibRvCPPqEDZVeUkadYrhAKVJ) (seq (seq (ap i FxpQQfUwUqmRMadxRpFSYthPyQLpotDUkczNYwTghBuDRKmeyxdwBGWUu) (seq (null) (null))) (seq (ap i FhQaWuFHkbqsKGwuWOTxXgjOyFrmKovJnIPxkpVIGGd) (seq (null) (seq (ap i cYGVYrkLApvZfeRHqIReCCvdGDh) (seq (null) (null))))))))))))))))) (seq (ap i FKrszOAbnGFnrhUNDHZIOeJSfKEOdWCkRoECaFTMRKRbMxmlYwaMCJafYIRSREzXX) (seq (seq (ap i nErTCaeBVnfTgUrhbHRFXRCelgSspCrWhUrkEvwSnxGQatGdORDzGWQgBNpckwdqXsZsULFRTFnT) (seq (seq (ap i yTCfygJBMuOvsPXiQZPzXrBXYEzwKMjjPlUBpNpuonAilbhqCyqzJHuQqUoCQgoikqopRkLXkJPjRbzurkIjdIJtV) (seq (seq (ap i ueltxPFmYELyHQGSo) (seq (seq (ap i KEEUrrbPvTBIOmjlYYcIkdCKwtMhkrrqfNNNgXNVfUJdBeLcwhSaB) (seq (seq (ap i wofeTVssP) (seq (seq (ap i kquUS) (seq (null) (null))) (seq (ap i QNzExXtYAVmSNUGntWzxLYDwTPFwcvifaom) (seq (null) (null))))) (seq (ap i OxfknKVyQqKtzZWsWlpQgjtWavwaTVDHn) (seq (seq (ap i TkqQBIRmjXBWvZnOmuscApBoTjTXWsS) (seq (null) (null))) (seq (ap i QgZaUtMysxKcJHavKEOfkqgYmxVIiWtSfZBUFzNdtdVEJBpxkinpKgYHfQrttwqlpsEZSGdbtqIVCe) (seq (null) (seq (ap i EadrOXdZcrXpvPxhPXwtvoJKJfvWYAlgvjMJJUddHJDksoUnQpHiBEajYoYcGTgxdaaTwGciCvzxWUSFLCCLKlbJNucJOYkbCIJR) (seq (null) (null))))))))) (seq (ap i RGQdQaXNfXkFJBEpFdUoyxXDJhDooZBMVmMiKKOtakExqNrNyRqxZHnaNcwjAlBJdXptqjoUpepIiGNYIBZD) (seq (seq (ap i PTCElxnVJTPFwKiSYgKHvOPgoMxQA) (seq (seq (ap i rETYIGKlUzcxtrJJUqfVTddV) (seq (null) (null))) (seq (ap i Puvoi) (seq (null) (seq (ap i hlET) (seq (null) (null))))))) (seq (ap i sXXQdNYyLrtuVQEsdRIDHGNfCSOpwVFPPpCdiTLmSGGYHoAYiUFfMfPxWLHBrmHZGNGyCxvmlPSkMq) (seq (seq (ap i IdYHfYWwBjEmQHJVNrroVeNIyh) (seq (null) (null))) (seq (ap i wlOlsBPvmTKxsqzFoqEgaRppqqMqclRUgJarErySDyOXpWBOcLoHJdCHuadkIbAz) (seq (null) (seq (ap i RsRDtrmBcwDjjYwdgWpKKgMfkklpOQtgsUWGqKaXNaKtmjUmZVWlcIILITNbgYFvPmPpcFIjaW) (seq (null) (null))))))))))) (seq (ap i MiohOIcrfSpTJouQOSbkKpGarMgWOKKhlJCihbJTKVITPOWDGESYqBkDQKlsKPAbfSUzUUQsQFNrbHEbKSYrIIeH) (seq (seq (ap i JSQie) (seq (seq (ap i ojdoNOqqCyneilXhLROrtaQDOGKbefGDiqduJ) (seq (seq (ap i zWsDUVkTIlqkaDXBucaiYTNrloXOiWBNPgeVbjSWwrhwrlRzPdPJanuAwDtIuuKTnXrNyHQJDQVKukrPviuFN) (seq (null) (null))) (seq (ap i qibLKqUpvgqGSAjcYIZaAylupShJZPuYHRmUpioZYWBnLvDgYxNgoqRxOjDdzNbjZjmXyggEyBLmmMFKjihgfIhNBRHjNQ) (seq (null) (seq (ap i uNvhPwtKyFQbaOcruxxEfUt) (seq (null) (null))))))) (seq (ap i nuhMLRXZGWHShokPxwbFQxCnOkPbbRNsPsgBUGIVYjhJxJwjQQeJmLJygjQfFVeERUOe) (seq (seq (ap i MDuteaZXOuycFwRwqHNTtvmXrMBowqdNKdHHAqbrVWnNxiBHcayIwOPFusbnWPsDzXoSnqhxjIyiWRSACOjxbBxlfmeBSfY) (seq (null) (null))) (seq (ap i CiAhgYJMZMoJLhOYVVE) (seq (null) (seq (ap i CAhAfnRGCJOGUyzqzmcQRtMKykeWSLTqgwEuBSSlSwjzZoY) (seq (null) (null))))))))) (seq (ap i sXrJEWCgTVuItEooDgajxRhGPVMRhfbbiFDekoqXUzsDRJehnaRIDzL) (seq (seq (ap i joOVhrZOYngJgzHtQUmqLvJEMmYhLTPGGqpJjYybvSYmUrSOtnpMEVcImAGsapINjjArUgANounNAfgRggZT) (seq (seq (ap i mmIILPsJqadmSNeWKEqAvsgaEeKVOLdZJCOTnucjftrvDOOFzMMawsNnKekwoJGjvPODOwJYwqdAhTewWoXDOjlgySyg) (seq (null) (null))) (seq (ap i hKxtSGVOugDVlSGJXyO) (seq (null) (seq (ap i StNZxzRnigQKZkKsqVmtEYczTXsVeNZddEjoGioCqePymbeLdhzXQJdSsPtWNVfNddJZMDoQNzolAlixeaRGlI) (seq (null) (null))))))) (seq (ap i okwMXbJmMvUwdTRQhXpOyJMVxGjTAGBcxGXiE) (seq (seq (ap i BtShuUAnfQaIZogYopDsPLB) (seq (null) (null))) (seq (ap i oswYzixltlvJhlEUBdRKOfzZVVRNMNMrAnGwQeiAPrULXihLgLpvfMVAFIHn) (seq (null) (seq (ap i TDJqCDuCXMNynvwhuJXMQIDuXxiBqbzRKOUvugofoJPVGxRxUOisasRXVdIlMS) (seq (null) (null))))))))))))) (seq (ap i ahUjgeWYHpPtGKuLCStOLxLqhMKSWjDnMQfmCMVACzrpnkEYbsykPicYrLdNmshhqvMRkKlZTXWGKF) (seq (seq (ap i GgNgaHCDVGzfnXSCFKePFuPpUzSQWEpgcdVIaGrzVwxwylFIPBayuSvlsOYZ) (seq (seq (ap i fnfAQwgFzpGtjdgjhUpoUNaFlswoCDMhlXImPIxIBCHMAtuGyUTfflkFns) (seq (seq (ap i znR) (seq (seq (ap i DKlZkmNMvqQJOIxGviabuoyEHkwEoADCBXferyxFfMGoluivTwdSPBdAMDAccifVuCeAvOwjHBmbzrfUkNSmxRNKn) (seq (null) (null))) (seq (ap i CRogZhZxGhNQbdvhOjewCdatEqBpjDxDWUhUrcnstRjfmttphWGOdMNquxTGUFeRvlgskHdJVrGDmKk) (seq (null) (null))))) (seq (ap i JOwrxCcObInzEjdLtFjnBuFgJuLEKgdg) (seq (seq (ap i GIolkk) (seq (null) (null))) (seq (ap i qoPvZWuctgitVwCpHQ) (seq (null) (seq (ap i KGjQAnkKfOlLrHsNnGANcHdKcSGXZmVxeIaHNYQyps) (seq (null) (null))))))))) (seq (ap i OijbTOKObhDCapkadFmLtsLDuVAcotLBFNPbvBbSmfjvyvsFpUkmzUvJPYSfCOmlnrqbaKolnvwprsP) (seq (seq (ap i ZDsPXCFAONCAEDTMurLlegdLQKCKPmIoNByExaHkKZYtTysAwPHdGYKjyMBxmqHVKTZiqzKTDEjOEkhOKdBqwMd) (seq (seq (ap i JXrwYvLkAyKRkkAqJmJGHbhiwztxUhqkkKoVlPtLmzHQzkqXZEyMONRsqzUCgshM) (seq (null) (null))) (seq (ap i UChsaFNZTCeonuL) (seq (null) (seq (ap i yqLeIRxFpATXXhWWQrqJHeTASKdGWmevhLGpxnGIxJTkapARZVNmzQlddLzpvfbrgPgnuggE) (seq (null) (null))))))) (seq (ap i dEblVJjDPJisCDciqmQSOVYZJqxkpYWlPZLKzBPPBFrgKlYfYcsmrLQTEkSthlfTCbPxYvRoTbGoWtyfKzSyukKIy) (seq (seq (ap i gLZ) (seq (null) (null))) (seq (ap i OMbkqLgIDXASeDvXvPEBSUFUlSEIqxLCZjmTLKjFRRnebKdFn) (seq (null) (seq (ap i bEIMsTtZUvFCEBPUqKcaIyPMbKrbqWhTKhewKMkzGrZkHCHL) (seq (null) (null))))))))))) (seq (ap i hoyNjLyDYJGogttQkqkfAaskLwNNIKGrCtXgMCED) (seq (seq (ap i JhkPrjTzUteIoIbWfZzKzidEazfaoTbjpMrRscsHIYeOkaxqbevrcRGaDwyEpowDRtRIHNKQtlZZGItHKjEWy) (seq (seq (ap i xatzjvZthowUbPIgNtZBokxjobcSZBWbUuDqqxBLfXxNZSTQbzqZzfvvunrkIjBokEfPPIcFLR) (seq (seq (ap i YrZqTYvIjvKwQcnbrnVVAxHrRTzebXfyLokpxuusIjHjkELiRTy) (seq (null) (null))) (seq (ap i lvuEqdiccuaOkpVaUEIHkpBAHvaFrkaTJKqGFQUMqBianiktgXFklomUdnpySUXZQB) (seq (null) (seq (ap i ScxcnasxXMnEcJHlnZutwUpgggJDpZzwNXIsUpumXdEtoFalzlbfeyMAxtqyQNmbWsCKjtAgfRhqwlBmMAjUwCzszupBvmjBX) (seq (null) (null))))))) (seq (ap i eggLFilnDtPogOzxLpfEjnPhzeojyofWSkTHOH) (seq (seq (ap i JBFidNFEdlvSpxrdvWnGIfdaorVthRACcpvsJusvwQcgxTymmTEQJWBcmiiiFwakFZsYyglvYQgyl) (seq (null) (null))) (seq (ap i bXYLXYUgOLaMMCwOvLeEFYHsnGKBLpWtrCCKotDMUsuSliVSySQLkhbUSsAzN) (seq (null) (seq (ap i xrLbSlWOPFGDayvZrFvmCexmwlAYUhvgAjlQGpARDuvFpxjMfFCGeDTCQLWJwyhoLpbwiJQjxRxvrkZFyMekiFhifiiJEDBuETU) (seq (null) (null))))))))) (seq (ap i tHDoyPnBhGWgyGtxpkKYCSRFFlXjQNodiMteXUWynpwvQPKvzsQWOcVDoDPnLoCuVKKqGNspIdUzeCWYSOJJbaGxl) (seq (seq (ap i FycLNTtWRqqbYUNmByEiUZmnJqNkvizj) (seq (seq (ap i tNEEgumujwcnOxOLADUOK) (seq (null) (null))) (seq (ap i sQnzMicaOKFljtFKCjeqUXvwPskJCSYedJLsQHKZQIugXHWAyqeqRiLoFdxucuFZdaM) (seq (null) (seq (ap i tugvbvhODadErAkJWuETZflnrcmPPSZYHypagojmFcrwydXB) (seq (null) (null))))))) (seq (ap i VeDJgMYrWyoXDudrgGGibjowgzayPnAcIQtteKLQUGTYPiCgSCuOvOFRuxuPxnanxxyYKHfpRhGHLAqhWJBlj) (seq (seq (ap i idGEQhRqPPIofEIrIUYNobqcQFwJyKbqvAvdyxAaQflzGtIogiwXvCaXaSeqJabXxQpKJFiifQvdIyTQwbMDqPxwzrPyfME) (seq (null) (null))) (seq (ap i FaowCisAFGUgwILGjuhxhsakwpOVfytZnOaBbQJLqnlPsdHkkzBQEsAeEVanFzOMKGTbrc) (seq (null) (seq (ap i Yxc) (seq (null) (null))))))))))))))) (seq (ap i UPZUXLufmlMHYFnGajvnfGVKUHkDLGocmHRUZFBrVMXeyLHoAXDGngPqzmagig) (seq (seq (ap i JAWAStgQhPkyDAfmWmPNRcLwnpRLptQxlbanDNtwyXTUYNovFFWdKda) (seq (seq (ap i turJswoqrQlXhOCssgedMPkmRVhoqjitNJVRuWOKFTIOORjcEjzquSvnqoRCYtnioNvAiKWSvHYZIpVSDNBSB) (seq (seq (ap i PWNXIpRyLarkPAgOAjXCcznzRNAXJGhePAEfwACYgUoWPlRrzjLprqgBpaxybWyRWYwarLruHtktacuwBcmMJVLENHqRs) (seq (seq (ap i uQclFmvcMBuRhNEZxzXJbFxMecMNwbWZZOoXDniIDMiZiw) (seq (seq (ap i BOQBcwKjUrscnihBruYrpoTtlQjQTNyhLQXlTRBWTvMIVlkteWmoLPCxGIpuOKTdVWglMBnjCtbEihXEvTrtyEIZJotBuNjhK) (seq (null) (null))) (seq (ap i wkMn) (seq (null) (null))))) (seq (ap i rnHWdsTEQrKHZcjdtSbPYSxNqIJpkwkuocHHPXhWzWFMcbBUfIGkoIsMlsRHBvPyQyEsquCGNfwMQHVsssky) (seq (seq (ap i aBhWxGbMEuYeCcFOnaHQMJIHmKlDhUDYsbIeWgzrYMvqfejNqvF) (seq (null) (null))) (seq (ap i jhxeXLqINfeSIWqSnvbemlhjHFVzaJwjhQkggetlKFYFWiIHjiNcSUQZN) (seq (null) (seq (ap i TZDSXWOcACHUCCTvIiQwHyHeKbRGCMoyOiagjHuOybcSaUDjnN) (seq (null) (null))))))))) (seq (ap i cvFwy) (seq (seq (ap i ZLhQzUJEdPhwhzrerkVLJBFv) (seq (seq (ap i rizmyLUIPZLzPlEkgaEMIDOGPNzrOcLJsdgpytYcKjkbFqBSGzZUSWMharaGflEvKwywOYoBxMXvnCZbdJwntFfTeXxcRJGw) (seq (null) (null))) (seq (ap i XXzOHEXhXaENWuDEpibeZHHMVbPkQSXwXgjaHQYmxgzltqXqCjNAV) (seq (null) (seq (ap i tWGJbXbvOxsDmVeMClTMVxdkZFGvuVfwdNZPijnyyPbyqsCSQCYhBIQceJPJsTkKQyOlFsTjmkwdYOlgULAOnXH) (seq (null) (null))))))) (seq (ap i pqyJ) (seq (seq (ap i lvWtswrNgVgZUiMWYZMyZPODsvQSvfYpBES) (seq (null) (null))) (seq (ap i vdKuGxOZIcEWHuyOxNCmDZtAZRJlnAmJekfJiXMsgS) (seq (null) (seq (ap i dZSCuwjZdBgJBBjGoeAnMXUWOvVzRLIncTyEbaaNXEjmgJfXHGXEOHZPzsIOFEjqnNrPTlkJtNabmSOinLucjlLDIUkfYQoJ) (seq (null) (null))))))))))) (seq (ap i DzOubLfftyTVcLdsXwCEx) (seq (seq (ap i JNPnyFkxhckr) (seq (seq (ap i BXrQfzvRSIHEYjAjxgbgjCqyQevdwdOCI) (seq (seq (ap i sUaCbqLdvkzURnoIbYntQXCzcjVbAjLxijBzZATUuNSTHYJbzSzkavleqsUrrkJvFLavrRPFtvubLjhtmxHaVAqoyXkNbOt) (seq (null) (null))) (seq (ap i EmLl) (seq (null) (seq (ap i SrRYAmoCvsXyyhrVfKyatMDakOfiZRLweAoBlUqfdqKnKxHNIjfADGNJCAungRlABNMeTwA) (seq (null) (null))))))) (seq (ap i YUzcHWXjWTAzaOeiQeXXQhbhPoROASnbKjHUSPMZMDodpwANgzsPhDVlADuqoNzIjVGylmInJiTlgXjNYzMxqxiFeXL) (seq (seq (ap i nTcUilKEoWPGWgjZTcvYIESBgZ) (seq (null) (null))) (seq (ap i oGvKmHOauLzFzGwMPSoSKfPHaVCVqvjciyVPDaDrSOFJyIScESyrYJuYwdNhZniZoaVoqzxHvLtwPuMlvUfC) (seq (null) (seq (ap i mKJaPRutTCEqIKXKwaeZwKHRcDeBfnJYpeMQKexi) (seq (null) (null))))))))) (seq (ap i pePxIMOekogyEHxPzeBDJDLAqMewEORcHgquTSYVhOOSkWiPkOGoOYTdjBtNOqsSYZfFQknVKbuCUzlf) (seq (seq (ap i hlIKWwZcFlXmoPEgHZvljLxdYSgOfNwccpBjysxBKUmLOLBGcDjhRpUlaEoNyanbQpULEQTPnEAWvbGml) (seq (seq (ap i pYvLKSqMbMmEMZShhrtoeitbPFzpG) (seq (null) (null))) (seq (ap i zIFGbZKPyeBngRMDCIeZcczqchaUWVVrZfjYpUMXqukLKjbmBeOTwdq) (seq (null) (seq (ap i RSNPZyYPnAUBsvJIyQXWSvTfaWyFrphOIOgUUZQsvYtfipTAqsOCjeqnqXuGeUNZmR) (seq (null) (null))))))) (seq (ap i OAPiJjQVrMTmdRfcTYwlznPdhBQhyWCyE) (seq (seq (ap i XdKOEbhMDpUFYUK) (seq (null) (null))) (seq (ap i MjgEOeStIKwwZIoXTupOdeXGAyWoOaN) (seq (null) (seq (ap i nvLoUb) (seq (null) (null))))))))))))) (seq (ap i tXSiJAyWIWssCWHRNRsNZCLvSQUYZJoaAwJohlZUIMDBaiFKxCaG) (seq (seq (ap i dMaxxMhfHlbXMrXbZmujyEpbzzAMScJhwOcYHGxZUrvEhDInd) (seq (seq (ap i rrFkBjgsJpPBYc) (seq (seq (ap i EpkzvHpDMTpnkrfWuBMtSbXgSEZYhBNTWFFtXyEBlwItUUVkqxEITGpHUYbXPxsHSPqQjv) (seq (seq (ap i gLqllOzBJDbQyLrxkjzSnrmlXsqaxnFFuzgphNHuRngvBWVxNJUKKOHyjMxdlrfljeQqnbRBjNdcKurDiLd) (seq (null) (null))) (seq (ap i mLSIxmYlqqLamrzOPGrACkZPpMpBFxsyQKxrdRRmCtFliGpHaqLVPKGw) (seq (null) (seq (ap i oqNnhYxCqDxxtctskngWLQgamukJQulRUaHhPYBFTIaTeyisBBHvhLHkXdfe) (seq (null) (null))))))) (seq (ap i zoNdWt) (seq (seq (ap i kZmtDHFkOEbrZXLvCcgZDgeaDkrWzeDlEaWlSAZaaSc) (seq (null) (null))) (seq (ap i sDborg) (seq (null) (seq (ap i nnAHnwsjnlWVNMBcLHbuxHDgFwLWkqRZjdELzyxajjDXpdTxQjSPfrcOlAkjtSiTzGARYPsacPVHkebUhe) (seq (null) (null))))))))) (seq (ap i uGQBPNCPIQYUXmmydiqvVMbODtMEGszOhmcXCAxVYEgarJO) (seq (seq (ap i lTXHzgaEyxkKpnELdosZCEUrEmkIyutrkiutxFaEsTjbDwDJyYvOydKDJIDDuITIlkCXaMkWiJoLmOI) (seq (seq (ap i nLIwiALvwCcZJkAnDYeLGTusSXZVclHBIQOndNShncHDeMBanpVtPLHTUMDvUJQGbPqu) (seq (null) (null))) (seq (ap i eAzWAnEaWocQjBpZquKPGDMdUgGckdzlVioUzaAevfKQAwRjLoPoMAUqgGZvZdCZdM) (seq (null) (seq (ap i ZUeijIZmmKupizZcAp) (seq (null) (null))))))) (seq (ap i yYuwpVLtlskGuZqtADysszQPPvT) (seq (seq (ap i RuAlzHrEcsthLrKKzPQhcgpReuJRXIjPmN) (seq (null) (null))) (seq (ap i lADHWpYPa) (seq (null) (seq (ap i LQKvil) (seq (null) (null))))))))))) (seq (ap i IXEncZznevYCGrTUSadmwVfQEqmEHjLZYnoRAM) (seq (seq (ap i FaVOOGPpKEAKnMZYfkpkQyMGEHPPguydecIbSrVnKzppeLUiKsKyqFKsyrLZrpUSkJaMvaNQFWhCssbjngQhEukvPz) (seq (seq (ap i PXUlHUxIkZPkPWCPEGFODLqeUoeGlFzdkrHHCWvCptOiAIrPNyGeEEmkIGqwaMAJBMshazwuO) (seq (seq (ap i LRWdBplczbx) (seq (null) (null))) (seq (ap i qFSZamCULKFZDoRDWTiVYvVtsbfRmRaeySNH) (seq (null) (seq (ap i hAMTiPAPKUXLIsixvrFPyChgDQgzgVxheevBYvPbMqwuUxMgiHiaCCBnLPPUUNuIoxrJEqUKMHoAmxNGLggyftxcm) (seq (null) (null))))))) (seq (ap i FPenQUjxriQuyT) (seq (seq (ap i EwVvcbumjrOZpbdRkzXojFGE) (seq (null) (null))) (seq (ap i nNKEHkZVVIPMhGNvnaSKFJwCLSpYIWAyfIxMaWQHyzsXXymQEktZIXxzcWGRGyscE) (seq (null) (seq (ap i oNTCoLLLCvYghXhhwNwRWsNCPvZWHCfWOXHWNDvMwoNAhcgRUmHgOpaHxHCoaytOIjsWeYIqEh) (seq (null) (null))))))))) (seq (ap i hSAM) (seq (seq (ap i CShXgNPnIbpbqDaCdnKpsNrzXrHWgLcyGXnFVYPxmtqXpwNgQCHWcvbndSBZPQTthkZwMz) (seq (seq (ap i pqJRzLEALTxemxmRRdqLcapgmyeu) (seq (null) (null))) (seq (ap i uaacJcycgbxRGyFStXpiglanCVmGlDjdyGUgLfudeZpQNlcCPyGwUhnHpsSZrZjEGnvltXqObusvOlYNNMxVNxcaGqzLrAIQN) (seq (null) (seq (ap i RVBJcATYFumfZsmtnXqFhIhRhCzlcdTfQizxfIgYnhuFnRNkUlZXgVrcXIungFxC) (seq (null) (null))))))) (seq (ap i kidotVQg) (seq (seq (ap i VsHZCZLKRMsLtxkpz) (seq (null) (null))) (seq (ap i ffyHKWtHHAZUAWnERgmSaiRJwPSFyLeuQcHMLlktcwqrABPQpIpmSb) (seq (null) (seq (ap i ZSBcCEtoEoTkHRGFsSGpQVMejvxyKFrZMjrSKWLutrAJXnZUxdbeZRPRSwDqjVVeQ) (seq (null) (null))))))))))))))))))))))))))))) (next i)))) diff --git a/crates/air-lib/interpreter-cid/Cargo.toml b/crates/air-lib/interpreter-cid/Cargo.toml index 0b98b791..d10f7de6 100644 --- a/crates/air-lib/interpreter-cid/Cargo.toml +++ b/crates/air-lib/interpreter-cid/Cargo.toml @@ -15,3 +15,4 @@ cid = { version = "0.10.1", default-features = false, features = ["std"] } multihash = { version = "0.18.1", default-features = false, features = ["multihash-impl", "std", "sha2"] } serde = { version = "1.0.164", features = ["derive"] } serde_json = "1.0.95" +sha2 = "0.10.7" diff --git a/crates/air-lib/interpreter-cid/src/lib.rs b/crates/air-lib/interpreter-cid/src/lib.rs index de55c260..29d32bca 100644 --- a/crates/air-lib/interpreter-cid/src/lib.rs +++ b/crates/air-lib/interpreter-cid/src/lib.rs @@ -30,6 +30,7 @@ use serde::Deserialize; use serde::Serialize; use std::fmt; +use std::io::BufWriter; use std::marker::PhantomData; #[derive(Serialize, Deserialize)] @@ -51,6 +52,7 @@ impl Clone for CID { Self(self.0.clone(), self.1) } } + impl fmt::Debug for CID { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_tuple("CID").field(&self.0).finish() @@ -121,7 +123,26 @@ impl std::error::Error for CidCalculationError { } /// Calculate a CID of JSON-serialized value. -pub fn value_to_json_cid(value: &Val) -> Result, CidCalculationError> { - let data = serde_json::to_vec(value)?; - Ok(json_data_cid(&data)) +// TODO we might refactor this to `SerializationFormat` trait +// that both transform data to binary/text form (be it JSON, CBOR or something else) +// and produces CID too +pub fn value_to_json_cid( + value: &Val, +) -> Result, CidCalculationError> { + use cid::Cid; + use multihash::{Code, MultihashDigest}; + use sha2::Digest; + + let mut hasher = sha2::Sha256::new(); + serde_json::to_writer(BufWriter::with_capacity(8 * 1024, &mut hasher), value)?; + let hash = hasher.finalize(); + + let digest = Code::Sha2_256 + .wrap(&hash) + .expect("can't happend: incorrect hash length"); + // seems to be better than RAW_CODEC = 0x55 + const JSON_CODEC: u64 = 0x0200; + + let cid = Cid::new_v1(JSON_CODEC, digest); + Ok(CID::new(cid.to_string())) } diff --git a/crates/air-lib/interpreter-data/Cargo.toml b/crates/air-lib/interpreter-data/Cargo.toml index 8836f11a..c55ebf75 100644 --- a/crates/air-lib/interpreter-data/Cargo.toml +++ b/crates/air-lib/interpreter-data/Cargo.toml @@ -21,6 +21,7 @@ air-interpreter-cid = { version = "0.3.0", path = "../interpreter-cid" } air-interpreter-signatures = { version = "0.1.1", path = "../interpreter-signatures" } polyplets = { version = "0.5.1", path = "../polyplets" } +fluence-keypair = { version = "0.10.1", default-features = false } serde = {version = "1.0.164", features = ["derive", "rc"]} serde_json = "1.0.95" semver = { version = "1.0.17", features = ["serde"] } @@ -28,3 +29,4 @@ once_cell = "1.17.1" tracing = "0.1.37" newtype_derive = "0.1.6" num-traits = "0.2.15" +thiserror = "1.0.40" diff --git a/crates/air-lib/interpreter-data/src/cid_info.rs b/crates/air-lib/interpreter-data/src/cid_info.rs new file mode 100644 index 00000000..e35e73af --- /dev/null +++ b/crates/air-lib/interpreter-data/src/cid_info.rs @@ -0,0 +1,111 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::CidStore; +use crate::CidStoreVerificationError; + +use crate::CanonCidAggregate; +use crate::CanonResultCidAggregate; +use crate::JValue; +use crate::ServiceResultCidAggregate; + +use polyplets::SecurityTetraplet; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)] +pub struct CidInfo { + /// Map CID to value. + pub value_store: CidStore, + + /// Map CID to a tetraplet. + pub tetraplet_store: CidStore, + + /// Map CID to a canon element value. + pub canon_element_store: CidStore, + + /// Map CID to a canon result. + pub canon_result_store: CidStore, + + /// Map CID to a service result aggregate. + pub service_result_store: CidStore, +} + +impl CidInfo { + #[tracing::instrument(skip_all)] + pub fn verify(&self) -> Result<(), CidStoreVerificationError> { + self.verify_value_store()?; + self.verify_tetraplet_store()?; + + self.verify_canon_result_store()?; + self.verify_service_result_store()?; + + Ok(()) + } + + fn verify_value_store(&self) -> Result<(), CidStoreVerificationError> { + self.value_store.verify() + } + + fn verify_tetraplet_store(&self) -> Result<(), CidStoreVerificationError> { + self.tetraplet_store.verify() + } + + fn verify_service_result_store(&self) -> Result<(), CidStoreVerificationError> { + self.service_result_store.verify()?; + + for (serv_cid, serv_result) in self.service_result_store.iter() { + self.tetraplet_store + .check_reference(serv_cid, &serv_result.tetraplet_cid)?; + self.value_store + .check_reference(serv_cid, &serv_result.value_cid)?; + } + Ok(()) + } + + fn verify_canon_result_store(&self) -> Result<(), CidStoreVerificationError> { + self.canon_element_store.verify()?; + self.canon_result_store.verify()?; + + for (canon_cid, canon_result) in self.canon_result_store.iter() { + for val in &canon_result.values { + self.canon_element_store.check_reference(canon_cid, val)?; + } + self.tetraplet_store + .check_reference(canon_cid, &canon_result.tetraplet)?; + } + + for (element_cid, canon_element) in self.canon_element_store.iter() { + self.tetraplet_store + .check_reference(element_cid, &canon_element.tetraplet)?; + self.value_store + .check_reference(element_cid, &canon_element.value)?; + + match &canon_element.provenance { + crate::Provenance::Literal => {} + crate::Provenance::ServiceResult { cid } => { + self.service_result_store + .check_reference(element_cid, cid)?; + } + crate::Provenance::Canon { cid } => { + self.canon_result_store.check_reference(element_cid, cid)?; + } + } + } + + Ok(()) + } +} diff --git a/crates/air-lib/interpreter-data/src/cid_store.rs b/crates/air-lib/interpreter-data/src/cid_store.rs index f634a777..175cc33b 100644 --- a/crates/air-lib/interpreter-data/src/cid_store.rs +++ b/crates/air-lib/interpreter-data/src/cid_store.rs @@ -21,6 +21,7 @@ use air_interpreter_cid::CidCalculationError; use air_interpreter_cid::CID; use serde::Deserialize; use serde::Serialize; +use thiserror::Error as ThisError; use std::{collections::HashMap, rc::Rc}; @@ -45,6 +46,60 @@ impl CidStore { pub fn len(&self) -> usize { self.0.len() } + + pub fn iter(&self) -> impl Iterator>, &Rc)> { + self.0.iter() + } + + pub fn check_reference( + &self, + _source_cid: &CID, + target_cid: &Rc>, + ) -> Result<(), CidStoreVerificationError> { + self.0 + .get(target_cid) + .ok_or_else(|| CidStoreVerificationError::MissingReference { + source_type_name: std::any::type_name::(), + target_type_name: std::any::type_name::(), + target_cid_repr: (**target_cid).clone().into_inner(), + })?; + Ok(()) + } +} + +impl CidStore { + pub fn verify(&self) -> Result<(), CidStoreVerificationError> { + for (cid, value) in &self.0 { + let expected_cid = value_to_json_cid::(value)?; + if expected_cid != **cid { + return Err(CidStoreVerificationError::MismatchError { + type_name: std::any::type_name::(), + cid_repr: (**cid).clone().into_inner(), + }); + } + } + Ok(()) + } +} + +#[derive(ThisError, Debug)] +pub enum CidStoreVerificationError { + #[error("Failed to recalculate CID during the verification: {0}")] + CidCalculationError(#[from] CidCalculationError), + + #[error("Value mismatch in the {type_name:?} store for CID {cid_repr:?}")] + MismatchError { + // nb: type_name is std::any::type_name() result that may be inconsistent between the Rust compiler versions + type_name: &'static str, + cid_repr: String, + }, + + #[error("Reference CID {target_cid_repr:?} from type {source_type_name:?} to {target_type_name:?} was not found")] + MissingReference { + source_type_name: &'static str, + target_type_name: &'static str, + target_cid_repr: String, + }, } impl Default for CidStore { diff --git a/crates/air-lib/interpreter-data/src/executed_state/impls.rs b/crates/air-lib/interpreter-data/src/executed_state/impls.rs index a574d9a8..032f7fd8 100644 --- a/crates/air-lib/interpreter-data/src/executed_state/impls.rs +++ b/crates/air-lib/interpreter-data/src/executed_state/impls.rs @@ -61,15 +61,11 @@ impl CallResult { CallResult::Failed(service_result_agg_cid) } - pub fn get_cid(&self) -> Option>> { + pub fn get_cid(&self) -> Option<&Rc>> { match self { CallResult::RequestSentBy(_) => None, - CallResult::Executed(executed) => match executed { - ValueRef::Scalar(cid) => Some(cid.clone()), - ValueRef::Stream { cid, .. } => Some(cid.clone()), - ValueRef::Unused(_) => None, - }, - CallResult::Failed(cid) => Some(cid.clone()), + CallResult::Executed(executed) => executed.get_cid(), + CallResult::Failed(cid) => Some(cid), } } } @@ -214,6 +210,16 @@ impl std::fmt::Display for ExecutedState { } } +impl ValueRef { + pub(crate) fn get_cid(&self) -> Option<&Rc>> { + match self { + ValueRef::Scalar(cid) => Some(cid), + ValueRef::Stream { cid, .. } => Some(cid), + ValueRef::Unused(_) => None, + } + } +} + impl std::fmt::Display for ValueRef { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { diff --git a/crates/air-lib/interpreter-data/src/interpreter_data.rs b/crates/air-lib/interpreter-data/src/interpreter_data.rs index 5cb462d7..7f6c8b1a 100644 --- a/crates/air-lib/interpreter-data/src/interpreter_data.rs +++ b/crates/air-lib/interpreter-data/src/interpreter_data.rs @@ -14,16 +14,14 @@ * limitations under the License. */ -use crate::cid_store::CidStore; -use crate::CanonCidAggregate; -use crate::CanonResultCidAggregate; +pub(crate) mod errors; +pub mod verification; + +use crate::CidInfo; use crate::ExecutionTrace; -use crate::JValue; -use crate::ServiceResultCidAggregate; use air_interpreter_signatures::SignatureStore; use air_utils::measure; -use polyplets::SecurityTetraplet; use serde::Deserialize; use serde::Serialize; @@ -121,21 +119,3 @@ impl Versions { } } } - -#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)] -pub struct CidInfo { - /// Map CID to value. - pub value_store: CidStore, - - /// Map CID to a tetraplet. - pub tetraplet_store: CidStore, - - /// Map CID to a canon element value. - pub canon_element_store: CidStore, - - /// Map CID to a canon result. - pub canon_result_store: CidStore, - - /// Map CID to a service result aggregate. - pub service_result_store: CidStore, -} diff --git a/crates/air-lib/interpreter-data/src/interpreter_data/errors.rs b/crates/air-lib/interpreter-data/src/interpreter_data/errors.rs new file mode 100644 index 00000000..a1295588 --- /dev/null +++ b/crates/air-lib/interpreter-data/src/interpreter_data/errors.rs @@ -0,0 +1,44 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use thiserror::Error as ThisError; +#[derive(Debug, ThisError)] +pub enum DataVerifierError { + #[error(transparent)] + MalformedKey(fluence_keypair::error::DecodingError), + + #[error(transparent)] + MalformedSignature(fluence_keypair::error::DecodingError), + + #[error("peer_id doens't match any available public key: {0:?}")] + PeerIdNotFound(String), + + #[error("signature mismatch for {peer_id:?}: {error:?}, values: CIDS: {cids:?}")] + SignatureMismatch { + error: Box, + cids: Vec>, + peer_id: String, + }, + + #[error( + "inconsistent CID multisets on merge for peer {peer_id:?}, prev: {larger_cids:?}, current: {smaller_cids:?}" + )] + MergeMismatch { + peer_id: String, + larger_cids: Vec>, + smaller_cids: Vec>, + }, +} diff --git a/crates/air-lib/interpreter-data/src/interpreter_data/verification.rs b/crates/air-lib/interpreter-data/src/interpreter_data/verification.rs new file mode 100644 index 00000000..6a2e3473 --- /dev/null +++ b/crates/air-lib/interpreter-data/src/interpreter_data/verification.rs @@ -0,0 +1,258 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +pub use super::errors::DataVerifierError; +use crate::CanonResult; +use crate::CidInfo; +use crate::ExecutedState; +use crate::ExecutionTrace; +use crate::InterpreterData; + +use air_interpreter_cid::CID; +use air_interpreter_signatures::PublicKey; +use air_interpreter_signatures::Signature; +use air_interpreter_signatures::SignatureStore; + +use std::collections::HashMap; +use std::rc::Rc; + +const CANNOT_HAPPEN_IN_VERIFIED_CID_STORE: &str = "cannot happen in a checked CID store"; + +/// An util for verificating particular data's signatures. +pub struct DataVerifier<'data> { + // a map from peer_id to peer's info (public key, signature, CIDS) + grouped_cids: HashMap, PeerInfo<'data>>, + salt: &'data str, +} + +impl<'data> DataVerifier<'data> { + // it can be further optimized if only required parts are passed + // SignatureStore is not used elsewhere + pub fn new(data: &'data InterpreterData, salt: &'data str) -> Result { + // it contains signature too; if we try to add a value to a peer w/o signature, it is an immediate error + let mut grouped_cids: HashMap, PeerInfo<'data>> = data + .signatures + .iter() + .map(|(public_key, signature)| { + ( + public_key.to_peer_id().to_string().into(), + PeerInfo::new(public_key, signature), + ) + }) + .collect(); + + // fill PeerInfo's `cids` field, checking for peer IDs without a key + collect_peers_cids_from_trace(&data.trace, &data.cid_info, &mut grouped_cids)?; + + // sort cids for canonicalization + for peer_info in grouped_cids.values_mut() { + peer_info.cids.sort_unstable(); + } + + Ok(Self { grouped_cids, salt }) + } + + /// Verify each peers' signatures. + pub fn verify(&self) -> Result<(), DataVerifierError> { + for peer_info in self.grouped_cids.values() { + peer_info + .public_key + .verify(&peer_info.cids, self.salt, peer_info.signature) + .map_err(|error| DataVerifierError::SignatureMismatch { + error: error.into(), + cids: peer_info.cids.clone(), + peer_id: peer_info.public_key.to_peer_id().to_string(), + })?; + } + Ok(()) + } + + /// For each peer, merge previous and current CID multisets by determining the largest set. + /// + /// This code uses an invariant: peer's multiset of produced CIDs is always a superset of + /// previous invocation's multiset: + /// + /// A_0 ⊆ A_1 ⊆ ... ⊆ A_n. + /// + /// So, the largest multiset is selected as the result of merging, the invariant is checked, + /// and a error is returned if it is violated. + /// + /// If the multisets are of same size, they have to be equal. + // TODO enforce merging only verified sets + // The result is same regardless argument order, so "prevous/current" terminology + // is not used deliberately. + pub fn merge(mut self, other: Self) -> Result { + use std::collections::hash_map::Entry::*; + + for (other_peer_pk, mut other_info) in other.grouped_cids { + let our_info = self.grouped_cids.entry(other_peer_pk); + match our_info { + Occupied(mut our_info_ent) => { + debug_assert_eq!(other_info.public_key, our_info_ent.get().public_key); + + if our_info_ent.get().cids.len() < other_info.cids.len() { + // the merged map contains the largest set for each peer_id + // + // this code assumes that a peer only adds CIDs to its set, so CID multisets + // are growing-only; but it is additionally checked below + // so, we get a largest set as merged one + std::mem::swap(our_info_ent.get_mut(), &mut other_info); + } + // nb: if length are equal, sets should be equal, and any of them + // should be used; if they are not equal, check_cid_multiset_consistency + // will detect it. + + let larger_info = our_info_ent.get(); + let smaller_info = &other_info; + check_cid_multiset_invariant(larger_info, smaller_info)?; + } + Vacant(ent) => { + ent.insert(other_info); + } + } + } + let mut store = SignatureStore::new(); + for peer_info in self.grouped_cids.into_values() { + store.put(peer_info.public_key.clone(), peer_info.signature.clone()) + } + Ok(store) + } +} + +fn collect_peers_cids_from_trace<'data>( + trace: &'data ExecutionTrace, + cid_info: &'data CidInfo, + grouped_cids: &mut HashMap, PeerInfo<'data>>, +) -> Result<(), DataVerifierError> { + for elt in trace { + match elt { + ExecutedState::Call(ref call) => { + let cid = call.get_cid(); + if let Some(cid) = cid { + // TODO refactor + let service_result = cid_info + .service_result_store + .get(cid) + .expect(CANNOT_HAPPEN_IN_VERIFIED_CID_STORE); + let tetraplet = cid_info + .tetraplet_store + .get(&service_result.tetraplet_cid) + .expect(CANNOT_HAPPEN_IN_VERIFIED_CID_STORE); + + let peer_pk = tetraplet.peer_pk.as_str(); + try_push_cid(grouped_cids, peer_pk, cid)?; + } + } + ExecutedState::Canon(CanonResult::Executed(ref cid)) => { + // TODO refactor + let canon_result = cid_info + .canon_result_store + .get(cid) + .expect(CANNOT_HAPPEN_IN_VERIFIED_CID_STORE); + let tetraplet = cid_info + .tetraplet_store + .get(&canon_result.tetraplet) + .expect(CANNOT_HAPPEN_IN_VERIFIED_CID_STORE); + + let peer_pk = tetraplet.peer_pk.as_str(); + try_push_cid(grouped_cids, peer_pk, cid)?; + } + _ => {} + }; + } + Ok(()) +} + +fn try_push_cid( + grouped_cids: &mut HashMap, PeerInfo<'_>>, + peer_pk: &str, + cid: &Rc>, +) -> Result<(), DataVerifierError> { + match grouped_cids.get_mut(peer_pk) { + Some(peer_info) => { + peer_info.cids.push((**cid).clone().into_inner().into()); + Ok(()) + } + None => Err(DataVerifierError::PeerIdNotFound(peer_pk.into())), + } +} + +/// Safety check for malicious peer that returns inconsistent CID multisets, +/// i.e. non-increasing multisets. +fn check_cid_multiset_invariant( + larger_pair: &PeerInfo<'_>, + smaller_pair: &PeerInfo<'_>, +) -> Result<(), DataVerifierError> { + let larger_cids = &larger_pair.cids; + let smaller_cids = &smaller_pair.cids; + + let larger_count_map = to_count_map(larger_cids); + let smaller_count_map = to_count_map(smaller_cids); + + if is_multisubset(larger_count_map, smaller_count_map) { + Ok(()) + } else { + let peer_id = smaller_pair.public_key.to_peer_id().to_string(); + Err(DataVerifierError::MergeMismatch { + peer_id, + larger_cids: larger_cids.clone(), + smaller_cids: smaller_cids.clone(), + }) + } +} + +fn to_count_map(cids: &Vec>) -> HashMap<&str, usize> { + let mut count_map = HashMap::<_, usize>::new(); + for cid in cids { + // the counter can't overflow, the memory will overflow first + *count_map.entry(&**cid).or_default() += 1; + } + count_map +} + +fn is_multisubset( + larger_count_set: HashMap<&str, usize>, + smaller_count_set: HashMap<&str, usize>, +) -> bool { + for (cid, &smaller_count) in &smaller_count_set { + debug_assert!(smaller_count > 0); + + let larger_count = larger_count_set.get(cid).cloned().unwrap_or_default(); + if larger_count < smaller_count { + return false; + } + } + true +} + +struct PeerInfo<'data> { + /// A peer's public key. + public_key: &'data PublicKey, + /// A peer's signature. + signature: &'data Signature, + /// Sorted vector of CIDs that belong to the peer. + cids: Vec>, +} + +impl<'data> PeerInfo<'data> { + fn new(public_key: &'data PublicKey, signature: &'data Signature) -> Self { + Self { + public_key, + signature, + cids: vec![], + } + } +} diff --git a/crates/air-lib/interpreter-data/src/lib.rs b/crates/air-lib/interpreter-data/src/lib.rs index 07f9faa0..01f9b1c0 100644 --- a/crates/air-lib/interpreter-data/src/lib.rs +++ b/crates/air-lib/interpreter-data/src/lib.rs @@ -26,6 +26,7 @@ unreachable_patterns )] +mod cid_info; mod cid_store; mod executed_state; mod generation_idx; @@ -33,6 +34,7 @@ mod interpreter_data; mod trace; mod trace_pos; +pub use cid_info::*; pub use cid_store::*; pub use executed_state::*; pub use generation_idx::*; diff --git a/crates/air-lib/interpreter-data/src/trace.rs b/crates/air-lib/interpreter-data/src/trace.rs index 7426d5b6..70bab0a9 100644 --- a/crates/air-lib/interpreter-data/src/trace.rs +++ b/crates/air-lib/interpreter-data/src/trace.rs @@ -88,3 +88,13 @@ impl PartialEq> for ExecutionTrace { &self.0 == other } } + +impl<'trace> IntoIterator for &'trace ExecutionTrace { + type Item = &'trace ExecutedState; + + type IntoIter = <&'trace Vec as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.iter() + } +} diff --git a/crates/air-lib/interpreter-signatures/Cargo.toml b/crates/air-lib/interpreter-signatures/Cargo.toml index 8d53f722..1a00cb42 100644 --- a/crates/air-lib/interpreter-signatures/Cargo.toml +++ b/crates/air-lib/interpreter-signatures/Cargo.toml @@ -14,7 +14,7 @@ categories = ["wasm"] air-interpreter-cid = { version = "0.3.0", path = "../interpreter-cid" } fluence-keypair = { version = "0.10.1", default-features = false } -serde = { version = "1.0.164", features = ["derive"] } -serde_json = "1.0.96" - bs58 = "0.5.0" +borsh = "0.10.3" +borsh-derive = "0.10.3" +serde = { version = "1.0.164", features = ["derive"] } diff --git a/crates/air-lib/interpreter-signatures/src/lib.rs b/crates/air-lib/interpreter-signatures/src/lib.rs index d33b8439..3c80e75b 100644 --- a/crates/air-lib/interpreter-signatures/src/lib.rs +++ b/crates/air-lib/interpreter-signatures/src/lib.rs @@ -27,14 +27,17 @@ )] mod sede; +mod stores; +mod trackers; -use air_interpreter_cid::CID; -use fluence_keypair::error::SigningError; -use fluence_keypair::KeyPair; +pub use crate::stores::*; +pub use crate::trackers::*; + +pub use fluence_keypair::KeyPair; + +use borsh::BorshSerialize; use serde::{Deserialize, Serialize}; -use std::borrow::Borrow; -use std::collections::HashMap; use std::hash::Hash; use std::ops::Deref; @@ -52,16 +55,15 @@ pub struct PublicKey( ); impl PublicKey { - pub fn verify( + pub fn verify( &self, value: &T, + salt: &str, signature: &fluence_keypair::Signature, ) -> Result<(), fluence_keypair::error::VerificationError> { let pk = &**self; - let serialized_value = - serde_json::to_vec(value).expect("default serialization shouldn't fail"); - + let serialized_value = SaltedData::new(&value, salt).serialize(); pk.verify(&serialized_value, signature) } } @@ -126,75 +128,18 @@ impl From for fluence_keypair::Signature { } } -#[derive(Debug, Default)] -pub struct SignatureTracker { - // from peer id to CID strings - peer_to_cids: HashMap, Vec>>, -} +#[derive(borsh_derive::BorshSerialize)] +pub(crate) struct SaltedData<'ctx, Data: BorshSerialize>(&'ctx Data, &'ctx str); -impl SignatureTracker { - pub fn new() -> Self { - Default::default() +impl<'ctx, Data: BorshSerialize> SaltedData<'ctx, Data> { + pub(crate) fn new(data: &'ctx Data, salt: &'ctx str) -> Self { + Self(data, salt) } - pub fn register(&mut self, peer_id: impl Into>, cid: &CID) { - self.peer_to_cids - .entry(peer_id.into()) - .or_default() - .push(cid.clone().into_inner().into()); - } - - pub fn into_signature( - &mut self, - peer_id: &str, - signer: &KeyPair, - ) -> Result { - let mut cids = self.peer_to_cids.get(peer_id).cloned().unwrap_or_default(); - cids.sort_unstable(); - + pub(crate) fn serialize(&self) -> Vec { // TODO make pluggable serialization // TODO it will be useful for CID too // TODO please note that using serde::Serializer is not enough - let serialized_cids = - serde_json::to_string(&cids).expect("default serialization shouldn't fail"); - - signer.sign(serialized_cids.as_bytes()).map(Signature::new) - } -} - -/// A dictionary-like structure that stores peer public keys and their particle data signatures. -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct SignatureStore(HashMap); - -impl SignatureStore { - pub fn new() -> Self { - Default::default() - } - - pub fn is_empty(&self) -> bool { - self.0.is_empty() - } - - pub fn get(&self, peer_pk: &Q) -> Option<&Sign> - where - Key: Borrow, - Q: Hash + Eq + ?Sized, - { - self.0.get(peer_pk) - } - - pub fn put(&mut self, peer_pk: Key, signature: Sign) { - self.0.insert(peer_pk, signature); - } - - pub fn merge(prev: Self, _current: Self) -> Self { - // TODO STUB - prev - } -} - -impl Default for SignatureStore { - fn default() -> Self { - Self(Default::default()) + borsh::to_vec(&self).expect("borsh serializer shouldn't fail") } } diff --git a/crates/air-lib/interpreter-signatures/src/stores.rs b/crates/air-lib/interpreter-signatures/src/stores.rs new file mode 100644 index 00000000..66ec0bfc --- /dev/null +++ b/crates/air-lib/interpreter-signatures/src/stores.rs @@ -0,0 +1,60 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::PublicKey; +use crate::Signature; + +use serde::{Deserialize, Serialize}; + +use std::borrow::Borrow; +use std::collections::HashMap; +use std::hash::Hash; + +/// A dictionary-like structure that stores peer public keys and their particle data signatures. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct SignatureStore(HashMap); + +impl SignatureStore { + pub fn new() -> Self { + Default::default() + } + + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + pub fn get(&self, peer_pk: &Q) -> Option<&Sign> + where + Key: Borrow, + Q: Hash + Eq + ?Sized, + { + self.0.get(peer_pk) + } + + pub fn put(&mut self, peer_pk: Key, signature: Sign) { + self.0.insert(peer_pk, signature); + } + + pub fn iter(&self) -> <&HashMap as IntoIterator>::IntoIter { + self.0.iter() + } +} + +impl Default for SignatureStore { + fn default() -> Self { + Self(Default::default()) + } +} diff --git a/crates/air-lib/interpreter-signatures/src/trackers.rs b/crates/air-lib/interpreter-signatures/src/trackers.rs new file mode 100644 index 00000000..6e49a925 --- /dev/null +++ b/crates/air-lib/interpreter-signatures/src/trackers.rs @@ -0,0 +1,64 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::SaltedData; + +use air_interpreter_cid::CID; +use fluence_keypair::error::SigningError; +use fluence_keypair::KeyPair; + +use std::rc::Rc; + +/// The tracker that collect current peer's CIDs only. +#[derive(Debug)] +pub struct PeerCidTracker { + current_peer_id: Rc, + cids: Vec>, +} + +impl PeerCidTracker { + pub fn new(current_peer_id: impl Into>) -> Self { + Self { + current_peer_id: current_peer_id.into(), + cids: vec![], + } + } + + pub fn register(&mut self, peer: &str, cid: &CID) { + if peer == *self.current_peer_id { + self.cids.push(cid.clone().into_inner().into()) + } + } + + pub fn gen_signature( + &self, + salt: &str, + keypair: &KeyPair, + ) -> Result { + sign_cids(self.cids.clone(), salt, keypair) + } +} + +fn sign_cids( + mut cids: Vec>, + salt: &str, + keypair: &KeyPair, +) -> Result { + cids.sort_unstable(); + + let serialized_cids = SaltedData::new(&cids, salt).serialize(); + keypair.sign(&serialized_cids).map(crate::Signature::new) +} diff --git a/crates/air-lib/test-utils/src/call_services.rs b/crates/air-lib/test-utils/src/call_services.rs index c9f5cf3a..911596a0 100644 --- a/crates/air-lib/test-utils/src/call_services.rs +++ b/crates/air-lib/test-utils/src/call_services.rs @@ -89,6 +89,20 @@ pub fn fallible_call_service(fallible_service_id: impl Into) -> CallServ }) } +pub fn fallible_call_service_by_arg(arg: impl Into) -> CallServiceClosure { + let arg = arg.into(); + + Box::new(move |params| -> CallServiceResult { + // return a error for service with specific arg + if params.arguments.get(0) == Some(&arg) { + CallServiceResult::err(1, json!("failed result from fallible_call_service_by_arg")) + } else { + // return success for services with other arg + CallServiceResult::ok(json!("success result from fallible_call_service_by_arg")) + } + }) +} + pub type ArgTetraplets = Vec>; pub fn tetraplet_host_function( diff --git a/crates/air-lib/test-utils/src/executed_state.rs b/crates/air-lib/test-utils/src/executed_state.rs index 07ca39df..938dbb50 100644 --- a/crates/air-lib/test-utils/src/executed_state.rs +++ b/crates/air-lib/test-utils/src/executed_state.rs @@ -24,6 +24,7 @@ use super::ParResult; use super::Sender; use super::TracePos; use super::ValueRef; +use crate::key_utils::at; use crate::FoldLore; use crate::FoldResult; use crate::FoldSubTraceLore; @@ -311,6 +312,11 @@ impl ExecutedCallBuilder { self } + pub fn peer_name(mut self, peer_name: impl AsRef) -> Self { + self.tetraplet.peer_pk = at(peer_name.as_ref()); + self + } + pub fn service(mut self, service_id: impl Into) -> Self { self.tetraplet.service_id = service_id.into(); self diff --git a/crates/air-lib/test-utils/src/key_utils.rs b/crates/air-lib/test-utils/src/key_utils.rs index 7a93279a..08d2fb40 100644 --- a/crates/air-lib/test-utils/src/key_utils.rs +++ b/crates/air-lib/test-utils/src/key_utils.rs @@ -38,3 +38,7 @@ pub fn derive_dummy_keypair(seed: &str) -> (KeyPair, String) { let peer_id = keypair.public().to_peer_id().to_string(); (keypair, peer_id) } + +pub fn at(peer_name: &str) -> String { + derive_dummy_keypair(peer_name).1 +} diff --git a/crates/air-lib/test-utils/src/lib.rs b/crates/air-lib/test-utils/src/lib.rs index a5662394..9aaccb6c 100644 --- a/crates/air-lib/test-utils/src/lib.rs +++ b/crates/air-lib/test-utils/src/lib.rs @@ -201,7 +201,7 @@ fn print_canon_values(data: &InterpreterData, canon_result: &CanonResult) { #[macro_export] macro_rules! rc { ($expr:expr) => { - std::rc::Rc::new($expr) + ::std::rc::Rc::new($expr) }; } @@ -215,3 +215,24 @@ pub fn is_interpreter_succeded(result: &RawAVMOutcome) -> bool { pub fn check_error(result: &RawAVMOutcome, error: impl ToErrorCode + ToString) -> bool { result.ret_code == error.to_error_code() && result.error_message == error.to_string() } + +#[macro_export] +macro_rules! assert_error_eq { + ($result:expr, $error:expr $(,)?) => {{ + let result: &::air_test_utils::RawAVMOutcome = $result; + let error = $error; + ::std::assert_eq!( + (result.ret_code, &result.error_message), + (::air::ToErrorCode::to_error_code(&error), &::std::string::ToString::to_string(&error)) + ); + }}; + ($result:expr, $error:expr, $($arg:tt)+) => {{ + let result: &::air_test_utils::RawAVMOutcome = $result; + let error = $error; + ::std::assert_eq!( + (result.ret_code, &result.error_message), + (::air::ToErrorCode::to_error_code(&error), &::std::string::ToString::to_string(&error)), + $($arg)+ + ); + }}; +} diff --git a/crates/air-lib/test-utils/src/native_test_runner.rs b/crates/air-lib/test-utils/src/native_test_runner.rs index 2f9837a5..3c643269 100644 --- a/crates/air-lib/test-utils/src/native_test_runner.rs +++ b/crates/air-lib/test-utils/src/native_test_runner.rs @@ -73,4 +73,8 @@ impl AirRunner for NativeAirRunner { Ok(outcome) } + + fn get_current_peer_id(&self) -> &str { + &self.current_peer_id + } } diff --git a/crates/air-lib/test-utils/src/test_runner.rs b/crates/air-lib/test-utils/src/test_runner.rs index 74627784..0916035d 100644 --- a/crates/air-lib/test-utils/src/test_runner.rs +++ b/crates/air-lib/test-utils/src/test_runner.rs @@ -49,12 +49,14 @@ pub trait AirRunner { key_pair: &KeyPair, particle_id: String, ) -> Result>; + + fn get_current_peer_id(&self) -> &str; } pub struct TestRunner { pub runner: R, call_service: CallServiceClosure, - keypair: KeyPair, + pub keypair: KeyPair, } #[derive(Debug, Default, Clone)] @@ -179,6 +181,20 @@ pub fn create_custom_avm( } } +pub fn create_avm_with_key( + keypair: KeyPair, + call_service: CallServiceClosure, +) -> TestRunner { + let current_peer_id = keypair.public().to_peer_id().to_string(); + let runner = R::new(current_peer_id); + + TestRunner { + runner, + call_service, + keypair, + } +} + impl TestRunParameters { pub fn new( init_peer_id: impl Into, @@ -215,6 +231,11 @@ impl TestRunParameters { ..<_>::default() } } + + pub fn with_particle_id(mut self, particle_id: impl Into) -> Self { + self.particle_id = particle_id.into(); + self + } } #[cfg(test)] diff --git a/crates/air-lib/test-utils/src/wasm_test_runner.rs b/crates/air-lib/test-utils/src/wasm_test_runner.rs index 54fb7912..227ccd0d 100644 --- a/crates/air-lib/test-utils/src/wasm_test_runner.rs +++ b/crates/air-lib/test-utils/src/wasm_test_runner.rs @@ -92,6 +92,10 @@ impl AirRunner for WasmAirRunner { particle_id, )?) } + + fn get_current_peer_id(&self) -> &str { + &self.current_peer_id + } } /// WASM runner that runs release build form benchmarking. @@ -147,4 +151,8 @@ impl AirRunner for ReleaseWasmAirRunner { particle_id, )?) } + + fn get_current_peer_id(&self) -> &str { + &self.current_peer_id + } } diff --git a/crates/testing-framework/Cargo.toml b/crates/testing-framework/Cargo.toml index 69bf9100..61ec611f 100644 --- a/crates/testing-framework/Cargo.toml +++ b/crates/testing-framework/Cargo.toml @@ -22,6 +22,8 @@ strum = { version="0.24.1", features=["derive"] } nom = "7.1.3" nom_locate = "4.1.0" serde_json = "1.0.95" +regex = "1.8.4" +air-interpreter-signatures = { version = "0.1.1", path = "../air-lib/interpreter-signatures" } [dev-dependencies] maplit = "1.0.2" diff --git a/crates/testing-framework/src/ephemeral/mod.rs b/crates/testing-framework/src/ephemeral/mod.rs index 9e6a36f1..5c3d779d 100644 --- a/crates/testing-framework/src/ephemeral/mod.rs +++ b/crates/testing-framework/src/ephemeral/mod.rs @@ -22,20 +22,29 @@ use crate::{ services::{services_to_call_service_closure, MarineServiceHandle, NetworkServices}, }; +use air_interpreter_signatures::KeyPair; use air_test_utils::{ - test_runner::{create_custom_avm, AirRunner, DefaultAirRunner, TestRunParameters, TestRunner}, + key_utils::derive_dummy_keypair, + test_runner::{ + create_avm_with_key, AirRunner, DefaultAirRunner, TestRunParameters, TestRunner, + }, RawAVMOutcome, }; -use std::{borrow::Borrow, cell::RefCell, collections::HashMap, hash::Hash, rc::Rc}; +use std::{borrow::Borrow, cell::RefCell, collections::HashMap, hash::Hash, ops::Deref, rc::Rc}; #[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[repr(transparent)] pub struct PeerId(Rc); impl PeerId { pub fn new<'any>(peer_id: impl Into<&'any str>) -> Self { Self(peer_id.into().into()) } + + pub fn from_keypair(keypair: &KeyPair) -> Self { + Self::new(keypair.public().to_peer_id().to_string().as_str()) + } } impl From for PeerId { fn from(source: String) -> Self { @@ -49,12 +58,26 @@ impl From<&str> for PeerId { } } +impl From<&PeerId> for PeerId { + fn from(value: &PeerId) -> Self { + value.clone() + } +} + impl Borrow for PeerId { fn borrow(&self) -> &str { &self.0 } } +impl Deref for PeerId { + type Target = str; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + pub type Data = Vec; pub struct Peer { @@ -63,14 +86,19 @@ pub struct Peer { } impl Peer { - pub fn new(peer_id: impl Into, services: Rc<[MarineServiceHandle]>) -> Self { - let peer_id = Into::into(peer_id); + pub fn new(keypair: KeyPair, services: Rc<[MarineServiceHandle]>) -> Self { let call_service = services_to_call_service_closure(services); - let runner = create_custom_avm(call_service, &*peer_id.0); + + let runner = create_avm_with_key::(keypair, call_service); + let peer_id = runner.runner.get_current_peer_id().into(); Self { peer_id, runner } } + pub fn get_peer_id(&self) -> &PeerId { + &self.peer_id + } + pub(crate) fn invoke( &mut self, air: impl Into, @@ -85,6 +113,10 @@ impl Peer { } res } + + pub fn get_keypair(&self) -> &KeyPair { + &self.runner.keypair + } } impl std::fmt::Debug for Peer { @@ -98,7 +130,12 @@ impl std::fmt::Debug for Peer { pub struct Network { peers: RefCell>>>>, + + // Default peer services. services: Rc, + + // Resolves human-readable peer names to real peer IDs. + resolver: RefCell>, } // it is implemented only for the default runner for compatibility reasons @@ -112,15 +149,16 @@ impl Network { impl Network { pub fn new( - peers: impl Iterator>, + named_peers: impl Iterator>, common_services: Vec, ) -> Rc { let network = Rc::new(Self { peers: Default::default(), services: NetworkServices::new(common_services).into(), + resolver: Default::default(), }); - for peer_id in peers { - network.ensure_peer(peer_id); + for peer_name in named_peers { + network.ensure_named_peer(peer_name); } network } @@ -145,15 +183,23 @@ impl Network { self.insert_peer_env_entry(peer_id, peer_env); } - pub fn ensure_peer(self: &Rc, peer_id: impl Into) { - let peer_id = peer_id.into(); - let exists = { - let peers_ref = self.peers.borrow(); - peers_ref.contains_key(&peer_id) - }; - if !exists { - let peer = Peer::new(peer_id, self.services.get_services()); - self.add_peer(peer); + pub fn ensure_named_peer(self: &Rc, name: impl Into) -> PeerId { + use std::collections::hash_map::Entry; + + let name = name.into(); + + match self.resolver.borrow_mut().entry(name.clone()) { + Entry::Occupied(entry) => entry.get().clone(), + Entry::Vacant(empty) => { + let (keypair, _) = derive_dummy_keypair(&name); + let peer = Peer::new(keypair, self.services.get_services()); + let peer_id = peer.get_peer_id().clone(); + self.add_peer(peer); + + empty.insert(peer_id.clone()); + + peer_id + } } } @@ -165,77 +211,100 @@ impl Network { } fn insert_peer_env_entry(&self, peer_id: PeerId, peer_env: PeerEnv) { + use std::collections::hash_map::Entry; + let mut peers_ref = self.peers.borrow_mut(); let peer_env = Rc::new(peer_env.into()); // It will be simplified with entry_insert stabilization // https://github.com/rust-lang/rust/issues/65225 match peers_ref.entry(peer_id) { - std::collections::hash_map::Entry::Occupied(ent) => { + Entry::Occupied(ent) => { let cell = ent.into_mut(); *cell = peer_env; cell } - std::collections::hash_map::Entry::Vacant(ent) => ent.insert(peer_env), + Entry::Vacant(ent) => ent.insert(peer_env), }; } - pub fn set_peer_failed(&mut self, peer_id: &Id, failed: bool) + // TODO named peer + pub fn set_peer_failed(&mut self, name: &Id, failed: bool) where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Hash + Eq + ?Sized, { + let peer_id = self.resolve_peer(name); let mut peers_ref = self.peers.borrow_mut(); peers_ref - .get_mut(peer_id) + .get_mut::(&peer_id) .expect("unknown peer") .as_ref() .borrow_mut() .set_failed(failed); } - pub fn fail_peer_for(&mut self, source_peer_id: &Id, target_peer_id: impl Into) + // TODO named peer + pub fn fail_peer_for(&mut self, source_peer_name: &Id1, target_peer_name: &Id2) where - PeerId: Borrow, - Id: Hash + Eq + ?Sized, - { - let mut peers_ref = self.peers.borrow_mut(); - peers_ref - .get_mut(source_peer_id) - .expect("unknown peer") - .as_ref() - .borrow_mut() - .get_neighborhood_mut() - .set_target_unreachable(target_peer_id); - } - - pub fn unfail_peer_for(&mut self, source_peer_id: &Id1, target_peer_id: &Id2) - where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id1>, Id1: Hash + Eq + ?Sized, - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id2>, Id2: Hash + Eq + ?Sized, { + let source_peer_id = self.resolve_peer(source_peer_name); + let target_peer_id = self.resolve_peer(target_peer_name); + let mut peers_ref = self.peers.borrow_mut(); peers_ref - .get_mut(source_peer_id) + .get_mut::(&source_peer_id) .expect("unknown peer") .as_ref() .borrow_mut() .get_neighborhood_mut() - .unset_target_unreachable(target_peer_id); + .set_target_unreachable(&target_peer_id); + } + + // TODO named peer + pub fn unfail_peer_for(&mut self, source_peer_name: &Id1, target_peer_name: &Id2) + where + PeerId: Borrow + for<'a> From<&'a Id1>, + Id1: Hash + Eq + ?Sized, + PeerId: Borrow + for<'a> From<&'a Id2>, + Id2: Hash + Eq + ?Sized, + { + let source_peer_id = self.resolve_peer(source_peer_name); + let target_peer_id = self.resolve_peer(target_peer_name); + let mut peers_ref = self.peers.borrow_mut(); + peers_ref + .get_mut(&source_peer_id) + .expect("unknown peer") + .as_ref() + .borrow_mut() + .get_neighborhood_mut() + .unset_target_unreachable(&target_peer_id); } // TODO there is some kind of unsymmetry between these methods and the fail/unfail: // the latters panic on unknown peer; perhaps, it's OK + // TODO named peer pub fn get_peer_env(&self, peer_id: &Id) -> Option>>> where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Hash + Eq + ?Sized, { let peers_ref = self.peers.borrow(); peers_ref.get(peer_id).cloned() } + pub fn get_named_peer_env(&self, peer_name: &Id) -> Option>>> + where + PeerId: Borrow + for<'a> From<&'a Id>, + Id: Hash + Eq + ?Sized, + { + let peer_id: PeerId = self.resolve_peer(peer_name); + self.get_peer_env::(&peer_id) + } + pub(crate) fn get_services(&self) -> Rc { self.services.clone() } @@ -244,4 +313,16 @@ impl Network { let peers_ref = self.peers.borrow(); peers_ref.keys().cloned().collect::>().into_iter() } + + // TODO it sounds cool, but actually, name and PeerId should be + // distinct and have distinct API for working with a peer by name: &str + // and by PeerId + pub fn resolve_peer(&self, name: &Id) -> PeerId + where + PeerId: Borrow + for<'a> From<&'a Id>, + Id: Hash + Eq + ?Sized, + { + let resolver = self.resolver.borrow(); + resolver.get(name).cloned().unwrap_or_else(|| (name).into()) + } } diff --git a/crates/testing-framework/src/ephemeral/neighborhood.rs b/crates/testing-framework/src/ephemeral/neighborhood.rs index 4321ea47..ec2a8d3e 100644 --- a/crates/testing-framework/src/ephemeral/neighborhood.rs +++ b/crates/testing-framework/src/ephemeral/neighborhood.rs @@ -23,7 +23,6 @@ use std::{ borrow::Borrow, collections::{HashMap, HashSet}, hash::Hash, - ops::Deref, rc::{Rc, Weak}, }; @@ -93,16 +92,13 @@ impl Neighborhood { self.unreachable.remove(target); } - pub fn is_reachable(&self, target: &Id) -> bool - where - PeerId: Borrow, - Id: Eq + Hash + ?Sized, - { + pub fn is_reachable(&self, target: impl Into) -> bool { + let target = target.into(); let network = self.network.upgrade().expect(EXPECT_VALID_NETWORK); - if network.get_peer_env(target).is_some() - || self.altered.get(target) == Some(&AlterState::Added) + if network.get_named_peer_env::(&target).is_some() + || self.altered.get(&target) == Some(&AlterState::Added) { - !self.unreachable.contains(target) + !self.unreachable.contains(&target) } else { false } @@ -153,13 +149,13 @@ impl PeerEnv { self.failed = failed; } - pub fn is_reachable(&self, target: impl Deref) -> bool { + pub fn is_reachable(&self, target: impl Into) -> bool { if self.is_failed() { return false; } - let target_peer_id = target.deref(); - if &self.peer.peer_id == target_peer_id { + let target_peer_id = target.into(); + if self.peer.peer_id == target_peer_id { return true; } @@ -215,6 +211,10 @@ impl PeerEnv { res }) } + + pub fn get_peer(&self) -> &Peer { + &self.peer + } } impl<'a, R: AirRunner> IntoIterator for &'a PeerEnv { @@ -230,26 +230,37 @@ impl<'a, R: AirRunner> IntoIterator for &'a PeerEnv { mod tests { use super::*; + use air_test_utils::key_utils::derive_dummy_keypair; use air_test_utils::prelude::*; use std::{iter::FromIterator, rc::Rc}; #[test] fn test_empty_neighborhood() { + let peer_name = "someone"; + let other_name = "other1"; + let (peer_pk, peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk1, other_id) = derive_dummy_keypair(other_name); + let peer_id = PeerId::from(peer_id); + let other_id = PeerId::from(other_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let penv = PeerEnv::new(Peer::new(peer_id.clone(), Rc::from(vec![])), &network); + + let penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); assert!(penv.is_reachable(&peer_id)); assert!(!penv.is_reachable(&other_id)); } #[test] fn test_no_self_disconnect() { + let peer_name = "someone"; + let other_name = "other1"; + let (peer_pk, peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk, other_id) = derive_dummy_keypair(other_name); + let peer_id = PeerId::from(peer_id); + let other_id = PeerId::from(other_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id.clone(), Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); { let nei = penv.get_neighborhood_mut(); @@ -267,45 +278,63 @@ mod tests { #[test] fn test_set_neighborhood() { - let peer_id: PeerId = "someone".into(); - let other_id1: PeerId = "other1".into(); - let other_id2: PeerId = "other2".into(); + let peer_name = "someone"; + let other_name1 = "other1"; + let other_name2 = "other2"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk1, other_id1) = derive_dummy_keypair(other_name1); + let (_other_pk2, other_id2) = derive_dummy_keypair(other_name2); + let other_id1 = PeerId::from(other_id1); + let other_id2 = PeerId::from(other_id2); let network = Network::::new(std::iter::empty::(), vec![]); - let penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + let penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); // iter is empty assert!(penv.iter().next().is_none()); - network.ensure_peer(other_id1.clone()); - network.ensure_peer(other_id2.clone()); + network.ensure_named_peer(other_name1); + network.ensure_named_peer(other_name1); + network.ensure_named_peer(other_name2); let expected_neighborhood = PeerSet::from([other_id1, other_id2]); assert_eq!(penv.iter().collect::(), expected_neighborhood); } #[test] fn test_insert() { + let peer_name = "someone"; + let other_name1 = "other1"; + let other_name2 = "other2"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk1, other_id1) = derive_dummy_keypair(other_name1); + let (_other_pk2, other_id2) = derive_dummy_keypair(other_name2); + let other_id1 = PeerId::from(other_id1); + let other_id2 = PeerId::from(other_id2); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id1: PeerId = "other1".into(); - let other_id2: PeerId = "other2".into(); - let penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + + let penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); // iter is empty assert!(penv.iter().next().is_none()); - network.ensure_peer(other_id1.clone()); - network.ensure_peer(other_id2.clone()); + network.ensure_named_peer(other_name1); + network.ensure_named_peer(other_name2); let expected_neighborhood = PeerSet::from([other_id1, other_id2]); assert_eq!(PeerSet::from_iter(penv.iter()), expected_neighborhood); } #[test] fn test_ensure() { + let peer_name = "someone"; + let other_name1 = "other1"; + let other_name2 = "other2"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk1, other_id1) = derive_dummy_keypair(other_name1); + let (_other_pk2, other_id2) = derive_dummy_keypair(other_name2); + let other_id1 = PeerId::from(other_id1); + let other_id2 = PeerId::from(other_id2); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id1: PeerId = "other1".into(); - let other_id2: PeerId = "other2".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); // iter is empty assert!(penv.iter().next().is_none()); @@ -319,10 +348,14 @@ mod tests { #[test] fn test_insert_insert() { + let peer_name = "someone"; + let other_name1 = "other1"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk1, other_id1) = derive_dummy_keypair(other_name1); + let other_id1 = PeerId::from(other_id1); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id1: PeerId = "other1".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); // iter is empty assert!(penv.iter().next().is_none()); @@ -337,9 +370,12 @@ mod tests { #[test] fn test_extend_neighborhood() { + let peer_name = "peer"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); penv.get_neighborhood_mut() .alter(PeerId::from("zero"), AlterState::Added); penv.extend_neighborhood(IntoIterator::into_iter(["one", "two"])); @@ -353,8 +389,9 @@ mod tests { #[test] fn test_remove_from_neiborhood() { let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + let (peer_pk, _peer_id) = derive_dummy_keypair("someone"); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); penv.get_neighborhood_mut() .alter(PeerId::from("zero"), AlterState::Added); penv.extend_neighborhood(IntoIterator::into_iter(["one", "two"])); @@ -369,10 +406,13 @@ mod tests { } #[test] fn test_fail() { + let peer_name = "someone"; + let other_name1 = "other1"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk, other_id) = derive_dummy_keypair(other_name1); + let other_id = PeerId::from(other_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); let nei = penv.get_neighborhood_mut(); nei.alter(other_id.clone(), AlterState::Added); @@ -385,10 +425,14 @@ mod tests { #[test] fn test_fail_remove() { + let peer_name = "someone"; + let other_name1 = "other1"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk, other_id) = derive_dummy_keypair(other_name1); + let other_id = PeerId::from(other_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); let nei = penv.get_neighborhood_mut(); nei.alter(other_id.clone(), AlterState::Added); @@ -406,10 +450,13 @@ mod tests { #[test] fn test_fail_unfail() { + let peer_name = "someone"; + let other_name1 = "other1"; + let (peer_pk, _peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk, other_id) = derive_dummy_keypair(other_name1); + let other_id = PeerId::from(other_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network); + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); let nei = penv.get_neighborhood_mut(); nei.alter(other_id.clone(), AlterState::Added); @@ -423,11 +470,18 @@ mod tests { #[test] fn test_failed() { + let peer_name = "someone"; + let other_name = "other1"; + let remote_name = "remote"; + let (peer_pk, peer_id) = derive_dummy_keypair(peer_name); + let (_other_pk, other_id) = derive_dummy_keypair(other_name); + let (_remote_pk, remote_id) = derive_dummy_keypair(remote_name); + let peer_id = PeerId::from(peer_id); + let other_id = PeerId::from(other_id); + let remote_id = PeerId::from(remote_id); let network = Network::::new(std::iter::empty::(), vec![]); - let peer_id: PeerId = "someone".into(); - let other_id: PeerId = "other".into(); - let remote_id: PeerId = "remote".into(); - let mut penv = PeerEnv::new(Peer::new(peer_id.clone(), Rc::from(vec![])), &network); + + let mut penv = PeerEnv::new(Peer::new(peer_pk, Rc::from(vec![])), &network); penv.get_neighborhood_mut() .alter(other_id.clone(), AlterState::Added); diff --git a/crates/testing-framework/src/execution/mod.rs b/crates/testing-framework/src/execution/mod.rs index f6f9e226..a5abfcb8 100644 --- a/crates/testing-framework/src/execution/mod.rs +++ b/crates/testing-framework/src/execution/mod.rs @@ -15,7 +15,7 @@ */ use crate::{ - ephemeral::{Network, PeerId}, + ephemeral::{Data, Network, PeerId}, queue::ExecutionQueue, services::MarineServiceHandle, transform::walker::TransformedAirScript, @@ -56,16 +56,17 @@ impl AirScriptExecutor { impl AirScriptExecutor { pub fn from_transformed_air_script( - test_parameters: TestRunParameters, + mut test_parameters: TestRunParameters, transformed_air_script: TransformedAirScript, ) -> Result { let network = transformed_air_script.get_network(); - let init_peer_id = test_parameters.init_peer_id.as_str(); - network.ensure_peer(init_peer_id); + let init_peer_id = test_parameters.init_peer_id.clone(); + let real_init_peer_id = network.ensure_named_peer(init_peer_id.as_str()); + test_parameters.init_peer_id = real_init_peer_id.to_string(); let queue = ExecutionQueue::new(); // Seed execution - queue.distribute_to_peers(&network, &[init_peer_id], &<_>::default()); + queue.distribute_to_peers(&network, &[real_init_peer_id], &<_>::default()); Ok(Self { transformed_air_script, @@ -107,7 +108,7 @@ impl AirScriptExecutor { peer_id: &Id, ) -> Option + 's> where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Eq + Hash + ?Sized, { self.queue.execution_iter( @@ -121,7 +122,7 @@ impl AirScriptExecutor { /// Process all queued datas, panicing on error. pub fn execute_all(&self, peer_id: &Id) -> Option> where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Eq + Hash + ?Sized, { self.execution_iter(peer_id).map(|it| it.collect()) @@ -130,12 +131,35 @@ impl AirScriptExecutor { /// Process one queued data, panicing if it is unavalable or on error. pub fn execute_one(&self, peer_id: &Id) -> Option where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Eq + Hash + ?Sized, { self.execution_iter(peer_id) .map(|mut it| it.next().expect("Nothing to execute")) } + + /// Push data into peer's queue. + pub fn enqueue(&self, peer_id: impl Into, data: Data) { + let queue_cell = self.queue.get_peer_queue_cell(peer_id.into()); + queue_cell.push_data(data); + } + + pub fn get_prev_data(&self, peer_id: impl Into) -> Data { + let queue_cell = self.queue.get_peer_queue_cell(peer_id.into()); + queue_cell.take_prev_data() + } + + pub fn resolve_name(&self, name: &str) -> PeerId { + self.transformed_air_script.get_network().resolve_peer(name) + } + + pub fn get_network(&self) -> Rc> { + self.transformed_air_script.get_network() + } + + pub fn get_transformed_air_script(&self) -> &TransformedAirScript { + &self.transformed_air_script + } } #[cfg(test)] @@ -143,39 +167,47 @@ mod tests { use super::*; use crate::services::MarineService; - use air_test_utils::prelude::*; + use air_test_utils::{key_utils::derive_dummy_keypair, prelude::*}; use pretty_assertions::assert_eq; use std::cell::RefCell; #[test] fn test_execution() { + let peer1_name = "peer1"; + let peer2_name = "peer2"; + let init_peer_name = "init_peer_id"; + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("init_peer_id"), + TestRunParameters::from_init_peer_id(init_peer_name), vec![], std::iter::empty(), - r#"(seq -(call "peer1" ("service" "func") [] arg) ; ok=42 -(call "peer2" ("service" "func") [arg]) ; ok=43 + &format!( + r#"(seq +(call "{peer1_name}" ("service" "func") [] arg) ; ok=42 +(call "{peer2_name}" ("service" "func") [arg]) ; ok=43 ) -"#, +"# + ), ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter("init_peer_id").unwrap().collect(); + let peer1_id = exec.resolve_name(peer1_name).to_string(); + + let result_init: Vec<_> = exec.execution_iter(init_peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome = &result_init[0]; - assert_eq!(outcome.next_peer_pks, vec!["peer1".to_owned()]); + assert_eq!(outcome.next_peer_pks, vec![peer1_id.clone()]); - assert!(exec.execution_iter("peer2").unwrap().next().is_none()); - let results1: Vec<_> = exec.execution_iter("peer1").unwrap().collect(); + assert!(exec.execution_iter(peer2_name).unwrap().next().is_none()); + let results1: Vec<_> = exec.execution_iter(peer1_name).unwrap().collect(); assert_eq!(results1.len(), 1); let outcome1 = &results1[0]; assert_eq!(outcome1.ret_code, 0); - assert!(exec.execution_iter("peer1").unwrap().next().is_none()); + assert!(exec.execution_iter(peer1_name).unwrap().next().is_none()); - let outcome2 = exec.execute_one("peer2").unwrap(); + let outcome2 = exec.execute_one(peer2_name).unwrap(); assert_eq!(outcome2.ret_code, 0); } @@ -250,96 +282,103 @@ mod tests { #[test] fn test_seq_ok() { + let init_peer_name = "init_peer_id"; + let peer1_name = "peer1"; + let peer2_name = "peer2"; + let peer3_name = "peer3"; + let (_peer2_pk, peer2_id) = derive_dummy_keypair(peer2_name); + let (_peer3_pk, peer3_id) = derive_dummy_keypair(peer3_name); + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("init_peer_id"), + TestRunParameters::from_init_peer_id(init_peer_name), vec![], - IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into), - r#"(seq + IntoIterator::into_iter([peer2_name, peer3_name]).map(Into::into), + &format!(r#"(seq (seq - (call "peer1" ("service" "func") [] var) ; ok = [{"p":"peer2","v":2},{"p":"peer3","v":3}] + (call "{peer1_name}" ("service" "func") [] var) ; ok = [{{"p":"{peer2_id}","v":2}},{{"p":"{peer3_id}","v":3}}] (seq (ap 1 k) (fold var i (seq - (call i.$.p ("service" "func") [i k] k) ; seq_ok = {"0":12,"default":42} + (call i.$.p ("service" "func") [i k] k) ; seq_ok = {{"0":12,"default":42}} (next i))))) (call "init_peer_id" ("a" "b") []) ; ok = 0 -)"#, +)"#), ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter("init_peer_id").unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(init_peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome1 = &result_init[0]; assert_eq!(outcome1.ret_code, 0); assert_eq!(outcome1.error_message, ""); - assert!(exec.execution_iter("peer2").unwrap().next().is_none()); + assert!(exec.execution_iter(peer2_name).unwrap().next().is_none()); { - let results1 = exec.execute_all("peer1").unwrap(); + let results1 = exec.execute_all(peer1_name).unwrap(); assert_eq!(results1.len(), 1); let outcome1 = &results1[0]; assert_eq!(outcome1.ret_code, 0, "{:?}", outcome1); - assert!(exec.execution_iter("peer1").unwrap().next().is_none()); - assert_next_pks!(&outcome1.next_peer_pks, ["peer2"]); + assert!(exec.execution_iter(peer1_name).unwrap().next().is_none()); + assert_next_pks!(&outcome1.next_peer_pks, [peer2_id.as_str()]); } { - let results2: Vec<_> = exec.execute_all("peer2").unwrap(); + let results2: Vec<_> = exec.execute_all(peer2_name).unwrap(); assert_eq!(results2.len(), 1); let outcome2 = &results2[0]; assert_eq!(outcome2.ret_code, 0, "{:?}", outcome2); - assert!(exec.execution_iter("peer2").unwrap().next().is_none()); - assert_next_pks!(&outcome2.next_peer_pks, ["peer3"]); + assert!(exec.execution_iter(peer2_name).unwrap().next().is_none()); + assert_next_pks!(&outcome2.next_peer_pks, [peer3_id.as_str()]); let trace = trace_from_result(outcome2); assert_eq!( trace, ExecutionTrace::from(vec![ scalar!( - json!([{"p":"peer2","v":2},{"p":"peer3","v":3}]), - peer = "peer1", + json!([{"p":peer2_id,"v":2},{"p":peer3_id,"v":3}]), + peer_name = &peer1_name, service = "service..0", function = "func" ), scalar!( 12, - peer = "peer2", + peer_name = &peer2_name, service = "service..1", function = "func", - args = vec![json!({"p":"peer2","v":2}), json!(1)] + args = vec![json!({"p":peer2_id,"v":2}), json!(1)] ), - request_sent_by("peer2"), + request_sent_by(peer2_id.clone()), ]) ); } { - let results3: Vec<_> = exec.execute_all("peer3").unwrap(); + let results3: Vec<_> = exec.execute_all(peer3_name).unwrap(); assert_eq!(results3.len(), 1); let outcome3 = &results3[0]; assert_eq!(outcome3.ret_code, 0, "{:?}", outcome3); - assert!(exec.execution_iter("peer3").unwrap().next().is_none()); + assert!(exec.execution_iter(peer3_name).unwrap().next().is_none()); let trace = trace_from_result(outcome3); assert_eq!( trace, ExecutionTrace::from(vec![ scalar!( - json!([{"p":"peer2","v":2},{"p":"peer3","v":3}]), - peer = "peer1", + json!([{"p":peer2_id,"v":2},{"p":peer3_id,"v":3}]), + peer_name = &peer1_name, service = "service..0", function = "func" ), scalar!( 12, - peer = "peer2", + peer_name = &peer2_name, service = "service..1", function = "func", - args = vec![json!({"p":"peer2","v":2}), json!(1)] + args = vec![json!({"p":peer2_id,"v":2}), json!(1)] ), - request_sent_by("peer2"), + request_sent_by(peer2_id), ]) ); } @@ -347,19 +386,27 @@ mod tests { #[test] fn test_map() { + let peer1_name = "peer1"; + let peer2_name = "peer2"; + let peer3_name = "peer3"; + let (_peer2_pk, peer2_id) = derive_dummy_keypair(peer2_name); + let (_peer3_pk, peer3_id) = derive_dummy_keypair(peer3_name); + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("peer1"), + TestRunParameters::from_init_peer_id(peer1_name), vec![], - IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into), - r#" + IntoIterator::into_iter([peer2_name, peer3_name]).map(Into::into), + &format!( + r#" (seq - (call "peer1" ("" "") [] peers) ; ok = ["peer2", "peer3"] + (call "{peer1_name}" ("" "") [] peers) ; ok = ["{peer2_id}", "{peer3_id}"] (fold peers p (seq - (call p ("" "") [p]) ; map = {"peer2": 42, "peer3": 43} + (call p ("" "") [p]) ; map = {{"{peer2_id}": 42, "{peer3_id}": 43}} (next p) ))) -"#, +"# + ), ) .unwrap(); @@ -369,7 +416,7 @@ mod tests { let outcome1 = &result_init[0]; assert_eq!(outcome1.ret_code, 0); assert_eq!(outcome1.error_message, ""); - assert_next_pks!(&outcome1.next_peer_pks, ["peer2"]); + assert_next_pks!(&outcome1.next_peer_pks, [peer2_id.as_str()]); { let results2 = exec.execute_all("peer2").unwrap(); @@ -377,7 +424,7 @@ mod tests { let outcome2 = &results2[0]; assert_eq!(outcome2.ret_code, 0, "{:?}", outcome2); assert!(exec.execution_iter("peer2").unwrap().next().is_none()); - assert_next_pks!(&outcome2.next_peer_pks, ["peer3"]); + assert_next_pks!(&outcome2.next_peer_pks, [peer3_id.as_str()]); } { @@ -392,18 +439,22 @@ mod tests { assert_eq!( &*trace, vec![ - scalar!(json!(["peer2", "peer3"]), peer = "peer1", service = "..0"), - unused!( - json!(42), - peer = "peer2", - service = "..1", - args = vec!["peer2"] + scalar!( + json!([peer2_id, peer3_id]), + peer_name = peer1_name, + service = "..0" ), unused!( - json!(43), - peer = "peer3", + 42, + peer_name = &peer2_name, service = "..1", - args = vec!["peer3"] + args = vec![peer2_id] + ), + unused!( + 43, + peer_name = &peer3_name, + service = "..1", + args = vec![peer3_id] ), ] ); @@ -413,81 +464,94 @@ mod tests { #[test] #[should_panic] fn test_map_no_arg() { + let peer1_name = "peer1"; + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("peer1"), + TestRunParameters::from_init_peer_id(peer1_name), vec![], - IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into), - r#" -(call "peer1" ("" "") [] p) ; map = {"any": "key"} -"#, + std::iter::empty(), + &format!( + r#" +(call "{peer1_name}" ("" "") [] p) ; map = {{"any": "key"}} +"# + ), ) .unwrap(); - let _result_init: Vec<_> = exec.execution_iter("peer1").unwrap().collect(); + let _result_init: Vec<_> = exec.execution_iter(peer1_name).unwrap().collect(); } #[test] fn test_seq_error() { + let init_peer_name = "init_peer_id"; + let peer1_name = "peer1"; + let peer2_name = "peer2"; + let peer3_name = "peer3"; + let peer4_name = "peer4"; + let (_peer2_pk, peer2_id) = derive_dummy_keypair(peer2_name); + let (_peer3_pk, peer3_id) = derive_dummy_keypair(peer3_name); + let (_peer4_pk, peer4_id) = derive_dummy_keypair(peer4_name); + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("init_peer_id"), + TestRunParameters::from_init_peer_id(init_peer_name), vec![], - IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into), - r#"(seq + IntoIterator::into_iter([peer2_name, peer3_name, peer4_name]).map(Into::into), + &format!(r#"(seq (seq - (call "peer1" ("service" "func") [] var) ; ok = [{"p":"peer2","v":2},{"p":"peer3","v":3}, {"p":"peer4"}] + (call "peer1" ("service" "func") [] var) ; ok = [{{"p":"{peer2_id}","v":2}},{{"p":"{peer3_id}","v":3}}, {{"p":"{peer4_id}"}}] (seq (ap 1 k) (fold var i (seq - (call i.$.p ("service" "func") [i.$.v k] k) ; seq_error = {"0":{"ret_code":0,"result":12},"default":{"ret_code":1,"result":42}} + (call i.$.p ("service" "func") [i.$.v k] k) ; seq_error = {{"0":{{"ret_code":0,"result":12}},"default":{{"ret_code":1,"result":42}}}} (next i))))) (call "init_peer_id" ("a" "b") []) ; ok = 0 -)"#, +)"#), ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter("init_peer_id").unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(init_peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome1 = &result_init[0]; assert_eq!(outcome1.ret_code, 0); assert_eq!(outcome1.error_message, ""); - assert!(exec.execution_iter("peer2").unwrap().next().is_none()); + assert!(exec.execution_iter(peer2_name).unwrap().next().is_none()); { - let results1 = exec.execute_all("peer1").unwrap(); + let results1 = exec.execute_all(peer1_name).unwrap(); assert_eq!(results1.len(), 1); let outcome1 = &results1[0]; assert_eq!(outcome1.ret_code, 0, "{:?}", outcome1); - assert!(exec.execution_iter("peer1").unwrap().next().is_none()); - assert_next_pks!(&outcome1.next_peer_pks, ["peer2"]); + assert!(exec.execution_iter(peer1_name).unwrap().next().is_none()); + assert_next_pks!(&outcome1.next_peer_pks, [peer2_id.as_str()]); } { - let results2: Vec<_> = exec.execute_all("peer2").unwrap(); + let results2: Vec<_> = exec.execute_all(peer2_name).unwrap(); assert_eq!(results2.len(), 1); let outcome2 = &results2[0]; assert_eq!(outcome2.ret_code, 0, "{:?}", outcome2); - assert!(exec.execution_iter("peer2").unwrap().next().is_none()); - assert_next_pks!(&outcome2.next_peer_pks, ["peer3"]); + assert!(exec.execution_iter(peer2_name).unwrap().next().is_none()); + assert_next_pks!(&outcome2.next_peer_pks, [peer3_id.as_str()]); let trace = trace_from_result(outcome2); assert_eq!( trace, ExecutionTrace::from(vec![ scalar!( - json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}]), - peer = "peer1", + json!([{"p":peer2_id,"v":2},{"p":peer3_id,"v":3},{"p":peer4_id}]), + peer_name = &peer1_name, service = "service..0", function = "func" ), scalar!( 12, - peer = "peer2", + peer_name = &peer2_name, service = "service..1", function = "func", args = vec![2, 1] ), - request_sent_by("peer2"), + request_sent_by(peer2_id.clone()), ]) ); } @@ -505,19 +569,19 @@ mod tests { trace, ExecutionTrace::from(vec![ scalar!( - json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}]), - peer = "peer1", + json!([{"p":peer2_id,"v":2},{"p":peer3_id,"v":3},{"p":peer4_id}]), + peer_name = peer1_name, service = "service..0", function = "func" ), scalar!( 12, - peer = "peer2", + peer_name = peer2_name, service = "service..1", function = "func", args = vec![2, 1] ), - request_sent_by("peer2"), + request_sent_by(peer2_id), ]) ); } @@ -525,15 +589,21 @@ mod tests { #[test] fn test_echo() { + let init_peer_name = "init_peer_id"; + let peer1_name = "peer1"; + let peer2_name = "peer2"; + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id("init_peer_id"), + TestRunParameters::from_init_peer_id(init_peer_name), vec![], std::iter::empty(), - r#"(seq -(call "peer1" ("service" "func") [1 22] arg) ; behaviour=echo -(call "peer2" ("service" "func") [arg]) ; ok = 43 + &format!( + r#"(seq +(call "{peer1_name}" ("service" "func") [1 22] arg) ; behaviour=echo +(call "{peer2_name}" ("service" "func") [arg]) ; ok = 43 ) -"#, +"# + ), ) .unwrap(); @@ -551,56 +621,57 @@ mod tests { assert_eq!(outcome1.ret_code, 0, "{:?}", outcome1); assert!(exec.execution_iter("peer1").unwrap().next().is_none()); + let peer1_id = exec.resolve_name(peer1_name).to_string(); assert_eq!( trace_from_result(outcome1), ExecutionTrace::from(vec![ scalar!( 1, - peer = "peer1", + peer_name = &peer1_name, service = "service..0", function = "func", args = vec![1, 22] ), - request_sent_by("peer1"), + request_sent_by(&peer1_id), ]), ) } #[test] fn test_transformed_distinct() { - let peer = "peer1"; + let peer_name = "peer1"; let network = Network::::new(std::iter::empty::(), vec![]); let transformed1 = TransformedAirScript::new( - &format!(r#"(call "{}" ("service" "function") []) ; ok = 42"#, peer), + &format!(r#"(call "{peer_name}" ("service" "function") []) ; ok = 42"#), network.clone(), ) .unwrap(); let exectution1 = AirScriptExecutor::from_transformed_air_script( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), transformed1, ) .unwrap(); let transformed2 = TransformedAirScript::new( - &format!(r#"(call "{}" ("service" "function") []) ; ok = 24"#, peer), + &format!(r#"(call "{peer_name}" ("service" "function") []) ; ok = 24"#,), network, ) .unwrap(); let exectution2 = AirScriptExecutor::from_transformed_air_script( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), transformed2, ) .unwrap(); - let trace1 = exectution1.execute_one(peer).unwrap(); - let trace2 = exectution2.execute_one(peer).unwrap(); + let trace1 = exectution1.execute_one(peer_name).unwrap(); + let trace2 = exectution2.execute_one(peer_name).unwrap(); assert_eq!( trace_from_result(&trace1), ExecutionTrace::from(vec![unused!( 42, - peer = peer, + peer_name = peer_name, service = "service..0", function = "function" )]), @@ -609,7 +680,7 @@ mod tests { trace_from_result(&trace2), ExecutionTrace::from(vec![unused!( 24, - peer = peer, + peer_name = peer_name, service = "service..1", function = "function" )]), @@ -636,30 +707,30 @@ mod tests { vec![service.to_handle()], ); - let peer = "peer1"; - let air_script = format!(r#"(call "{}" ("service" "function") [])"#, peer); + let peer_name = "peer1"; + let air_script = format!(r#"(call "{peer_name}" ("service" "function") [])"#); let transformed1 = TransformedAirScript::new(&air_script, network.clone()).unwrap(); let exectution1 = AirScriptExecutor::from_transformed_air_script( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), transformed1, ) .unwrap(); let transformed2 = TransformedAirScript::new(&air_script, network).unwrap(); let exectution2 = AirScriptExecutor::from_transformed_air_script( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), transformed2, ) .unwrap(); - let trace1 = exectution1.execute_one(peer).unwrap(); - let trace2 = exectution2.execute_one(peer).unwrap(); + let trace1 = exectution1.execute_one(peer_name).unwrap(); + let trace2 = exectution2.execute_one(peer_name).unwrap(); assert_eq!( trace_from_result(&trace1), ExecutionTrace::from(vec![unused!( 42, - peer = peer, + peer_name = peer_name, service = "service", function = "function" ),]), @@ -668,7 +739,7 @@ mod tests { trace_from_result(&trace2), ExecutionTrace::from(vec![unused!( 24, - peer = peer, + peer_name = peer_name, service = "service", function = "function" ),]), @@ -702,16 +773,16 @@ mod tests { #[test] fn test_behaviour_service() { - let peer = "peer1"; + let peer_name = "peer1"; let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), vec![], std::iter::empty(), r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=service"#, ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter(peer).unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome = &result_init[0]; @@ -722,7 +793,7 @@ mod tests { trace_from_result(outcome), ExecutionTrace::from(vec![scalar!( "service", - peer = "peer1", + peer_name = peer_name, service = "service..0", function = "func", args = vec![1, 22] @@ -732,16 +803,17 @@ mod tests { #[test] fn test_behaviour_function() { - let peer = "peer1"; + let peer_name = "peer1"; + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), vec![], std::iter::empty(), r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=function"#, ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter(peer).unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome = &result_init[0]; @@ -752,7 +824,7 @@ mod tests { trace_from_result(outcome), ExecutionTrace::from(vec![scalar!( "func", - peer = "peer1", + peer_name = peer_name, service = "service..0", function = "func", args = vec![1, 22] @@ -762,16 +834,17 @@ mod tests { #[test] fn test_behaviour_arg() { - let peer = "peer1"; + let peer_name = "peer1"; + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), vec![], std::iter::empty(), r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=arg.1"#, ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter(peer).unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome = &result_init[0]; @@ -782,7 +855,7 @@ mod tests { trace_from_result(outcome), ExecutionTrace::from(vec![scalar!( 22, - peer = "peer1", + peer_name = peer_name, service = "service..0", function = "func", args = vec![1, 22] @@ -792,16 +865,18 @@ mod tests { #[test] fn test_behaviour_tetraplet() { - let peer = "peer1"; + let peer_name = "peer1"; + let (_peer_pk, peer_id) = derive_dummy_keypair(peer_name); + let exec = AirScriptExecutor::::new( - TestRunParameters::from_init_peer_id(peer), + TestRunParameters::from_init_peer_id(peer_name), vec![], std::iter::empty(), - r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=tetraplet"#, + &format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=tetraplet"#), ) .unwrap(); - let result_init: Vec<_> = exec.execution_iter(peer).unwrap().collect(); + let result_init: Vec<_> = exec.execution_iter(peer_name).unwrap().collect(); assert_eq!(result_init.len(), 1); let outcome = &result_init[0]; @@ -814,15 +889,15 @@ mod tests { json!([[{ "function_name": "", "json_path": "", - "peer_pk": "peer1", + "peer_pk": &peer_id, "service_id": "", }], [{ "function_name": "", "json_path": "", - "peer_pk": "peer1", + "peer_pk": &peer_id, "service_id": "", }]]), - peer = peer, + peer_name = peer_name, service = "service..0", function = "func", args = vec![1, 22] diff --git a/crates/testing-framework/src/lib.rs b/crates/testing-framework/src/lib.rs index b98d30ff..f44e9df0 100644 --- a/crates/testing-framework/src/lib.rs +++ b/crates/testing-framework/src/lib.rs @@ -21,4 +21,6 @@ mod queue; pub mod services; pub mod transform; +pub use ephemeral::Network; pub use execution::AirScriptExecutor; +pub use transform::walker::TransformedAirScript; diff --git a/crates/testing-framework/src/queue.rs b/crates/testing-framework/src/queue.rs index c9be213d..0f751459 100644 --- a/crates/testing-framework/src/queue.rs +++ b/crates/testing-framework/src/queue.rs @@ -85,10 +85,10 @@ impl ExecutionQueue { peer_id: &Id, ) -> Option + 'ctx> where - PeerId: Borrow, + PeerId: Borrow + for<'a> From<&'a Id>, Id: Eq + Hash + ?Sized, { - let peer_env = network.get_peer_env(peer_id); + let peer_env = network.get_named_peer_env(peer_id); peer_env.map(|peer_env_cell| { std::iter::from_fn(move || { @@ -110,13 +110,17 @@ impl ExecutionQueue { { for peer_id in peers { let peer_id: &str = peer_id; - match network.get_peer_env::(peer_id) { - Some(peer_env_cell) => { - let peer_env_ref = RefCell::borrow(&peer_env_cell); - self.get_peer_queue_cell(peer_env_ref.peer.peer_id.clone()) - .push_data(data.clone()); - } - None => panic!("Unknown peer"), + match network.get_peer_env(peer_id) { + Some(peer_env_cell) => match peer_env_cell.try_borrow() { + Ok(peer_env_ref) => { + self.get_peer_queue_cell(peer_env_ref.peer.peer_id.clone()) + .push_data(data.clone()); + } + Err(_) => { + panic!("distributing data from peer to itself; probably, peer naming issue") + } + }, + None => panic!("Unknown peer {:?}", peer_id), } } } diff --git a/crates/testing-framework/src/transform/mod.rs b/crates/testing-framework/src/transform/mod.rs index 27305c11..8417e27a 100644 --- a/crates/testing-framework/src/transform/mod.rs +++ b/crates/testing-framework/src/transform/mod.rs @@ -15,23 +15,31 @@ */ pub(crate) mod parser; -pub(crate) mod walker; +pub mod walker; use crate::asserts::ServiceDefinition; type Triplet = (Sexp, Sexp, Sexp); -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub(crate) struct Call { - triplet: Box, + triplet: Triplet, args: Vec, var: Option>, service_desc: Option, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] +pub(crate) struct Canon { + peer: Sexp, + stream: Sexp, + target: Sexp, +} + +#[derive(Debug, PartialEq, Eq)] pub(crate) enum Sexp { - Call(Call), + Call(Box), + Canon(Box), List(Vec), Symbol(String), String(String), @@ -50,6 +58,14 @@ impl Sexp { Self::String(value.to_string()) } + pub(crate) fn canon(peer: Sexp, stream: Sexp, target: Sexp) -> Self { + Self::Canon(Box::new(Canon { + peer, + stream, + target, + })) + } + pub(crate) fn inject(&mut self, service_definition: ServiceDefinition) -> Result<(), String> { match self { Sexp::Call(ref mut call) => { @@ -60,6 +76,9 @@ impl Sexp { Some(last) => last.inject(service_definition), None => Err("cannot attach a service definition an empty list".to_owned()), }, + Sexp::Canon(_) => Err(format!( + "cannot attach a service definition to a canon {self:?}" + )), Sexp::Symbol(s) => Err(format!( "cannot attach a service definition to a symbol {s:?}" )), @@ -78,8 +97,8 @@ impl std::fmt::Display for Sexp { Sexp::Call(call) => { write!( f, - "(call {peer_id} ({service} {func}) [{args}]{var})", - peer_id = call.triplet.0, + "(call {peer} ({service} {func}) [{args}]{var})", + peer = call.triplet.0, service = call.triplet.1, func = call.triplet.2, args = call.args.iter().format(" "), @@ -89,6 +108,15 @@ impl std::fmt::Display for Sexp { } ) } + Sexp::Canon(canon) => { + write!( + f, + "(canon {peer} {stream} {target})", + peer = canon.peer, + stream = canon.stream, + target = canon.target, + ) + } Sexp::List(items) => write!(f, "({})", items.iter().format(" ")), Sexp::Symbol(symbol) => write!(f, "{symbol}"), Sexp::String(string) => write!(f, r#""{string}""#), @@ -116,6 +144,20 @@ mod tests { assert_eq!(format!("{sexp}"), sexp_str); } + #[test] + fn test_parse_canon() { + let sexp_str = r#"(canon "my_id" $stream #canon)"#; + let sexp = Sexp::from_str(sexp_str).unwrap(); + assert_eq!( + sexp, + Sexp::canon( + Sexp::string("my_id"), + Sexp::symbol("$stream"), + Sexp::symbol("#canon"), + ) + ); + } + #[test] fn test_parse_fmt_symbol() { let sexp_str = "symbol"; diff --git a/crates/testing-framework/src/transform/parser.rs b/crates/testing-framework/src/transform/parser.rs index 208e78b0..11991e61 100644 --- a/crates/testing-framework/src/transform/parser.rs +++ b/crates/testing-framework/src/transform/parser.rs @@ -77,6 +77,7 @@ pub(crate) fn parse_error_to_message(e: nom::Err) -> String { pub(crate) fn parse_sexp(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> { alt(( parse_sexp_call, + parse_sexp_canon, parse_sexp_list, parse_sexp_string, parse_sexp_symbol, @@ -148,6 +149,34 @@ fn parse_sexp_symbol(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> )(inp) } +fn parse_sexp_canon(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> { + preceded( + delim_ws(tag("(")), + preceded( + tag("canon "), + context("within canon instructon", cut(parse_canon_content)), + ), + )(inp) +} + +fn parse_canon_content(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> { + map( + terminated( + separated_pair( + separated_pair( + context("canon peer", parse_sexp), + sexp_multispace1, + context("canon stream", parse_sexp_symbol), + ), + sexp_multispace1, + context("canon target", parse_sexp_symbol), + ), + pair(sexp_multispace0, tag(")")), + ), + |((peer, stream), target)| Sexp::canon(peer, stream, target), + )(inp) +} + fn parse_sexp_call(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> { preceded( delim_ws(tag("(")), @@ -174,12 +203,15 @@ fn parse_sexp_call_content(inp: Input<'_>) -> IResult, Sexp, ParseErro ), ), |((triplet, args), (var, annotation))| { - Sexp::Call(Call { - triplet, - args, - var, - service_desc: annotation, - }) + Sexp::Call( + Call { + triplet, + args, + var, + service_desc: annotation, + } + .into(), + ) }, )(inp) } @@ -234,7 +266,7 @@ fn parse_multiline_annotation( )(inp) } -fn parse_sexp_call_triplet(inp: Input<'_>) -> IResult, Box, ParseError<'_>> { +fn parse_sexp_call_triplet(inp: Input<'_>) -> IResult, Triplet, ParseError<'_>> { map( separated_pair( context("triplet peer_id", parse_sexp), @@ -252,7 +284,7 @@ fn parse_sexp_call_triplet(inp: Input<'_>) -> IResult, Box, P delim_ws(tag(")")), ), ), - |(peer_id, (service, function))| Box::new((peer_id, service, function)), + |(peer_id, (service, function))| (peer_id, service, function), )(inp) } @@ -319,6 +351,7 @@ pub(crate) fn sexp_multispace1(inp: Input<'_>) -> IResult, (), ParseEr #[cfg(test)] mod tests { + use super::super::Canon; use super::*; use crate::asserts::ServiceDefinition; @@ -444,16 +477,19 @@ mod tests { let res = Sexp::from_str(r#"(call peer_id ("serv" "func") [])"#); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![], - var: None, - service_desc: None, - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![], + var: None, + service_desc: None, + } + .into() + )) ); } @@ -469,26 +505,32 @@ mod tests { res, Ok(Sexp::list(vec![ Sexp::symbol("seq"), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![], - var: None, - service_desc: None, - }), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![], - var: None, - service_desc: None, - }), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![], + var: None, + service_desc: None, + } + .into() + ), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![], + var: None, + service_desc: None, + } + .into() + ), ])) ); } @@ -511,16 +553,19 @@ mod tests { let res = Sexp::from_str(r#"(call peer_id ("serv" "func") [a])"#); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a")], - var: None, - service_desc: None, - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a")], + var: None, + service_desc: None, + } + .into() + )) ); } @@ -529,16 +574,19 @@ mod tests { let res = Sexp::from_str(r#"(call peer_id ("serv" "func") [a b])"#); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: None, - service_desc: None, - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: None, + service_desc: None, + } + .into() + )) ); } @@ -547,16 +595,19 @@ mod tests { let res = Sexp::from_str(r#"(call peer_id ("serv" "func") [a b] var)"#); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::Symbol("peer_id".to_owned()), - Sexp::String("serv".to_owned()), - Sexp::String("func".to_owned()), - )), - args: vec![Sexp::Symbol("a".to_owned()), Sexp::Symbol("b".to_owned())], - var: Some(Box::new(Sexp::Symbol("var".to_owned()))), - service_desc: None, - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::Symbol("peer_id".to_owned()), + Sexp::String("serv".to_owned()), + Sexp::String("func".to_owned()), + ), + args: vec![Sexp::Symbol("a".to_owned()), Sexp::Symbol("b".to_owned())], + var: Some(Box::new(Sexp::Symbol("var".to_owned()))), + service_desc: None, + } + .into() + )) ); } @@ -566,16 +617,19 @@ mod tests { let expected_annotation = ServiceDefinition::Ok(json!(42)); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: Some(expected_annotation), - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: Some(expected_annotation), + } + .into() + )) ); } @@ -749,16 +803,19 @@ mod tests { let res = Sexp::from_str(sexp_str); assert_eq!( res, - Ok(Sexp::Call(Call { - triplet: Box::new(( - Sexp::string("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: Some(expected_annotation), - })) + Ok(Sexp::Call( + Call { + triplet: ( + Sexp::string("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: Some(expected_annotation), + } + .into() + )) ); } @@ -781,26 +838,32 @@ mod tests { res, Ok(Sexp::List(vec![ Sexp::symbol("seq"), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::string("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: Some(expected_annotation), - }), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::string("peer_id"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: None, - }), + Sexp::Call( + Call { + triplet: ( + Sexp::string("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: Some(expected_annotation), + } + .into() + ), + Sexp::Call( + Call { + triplet: ( + Sexp::string("peer_id"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: None, + } + .into() + ), ])), ); } @@ -817,26 +880,32 @@ mod tests { res, Ok(Sexp::List(vec![ Sexp::symbol("par"), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peerid"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: None, - }), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peerid2"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![], - var: None, - service_desc: Some(ServiceDefinition::Ok(json!(42))), - }), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peerid"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: None, + } + .into() + ), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peerid2"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![], + var: None, + service_desc: Some(ServiceDefinition::Ok(json!(42))), + } + .into() + ), ])) ); } @@ -854,27 +923,128 @@ mod tests { res, Ok(Sexp::List(vec![ Sexp::symbol("par"), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peerid"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![Sexp::symbol("a"), Sexp::symbol("b")], - var: Some(Box::new(Sexp::symbol("var"))), - service_desc: None, - }), - Sexp::Call(Call { - triplet: Box::new(( - Sexp::symbol("peerid2"), - Sexp::string("serv"), - Sexp::string("func"), - )), - args: vec![], - var: None, - service_desc: Some(ServiceDefinition::Ok(json!(42))), - }), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peerid"), + Sexp::string("serv"), + Sexp::string("func"), + ) + .into(), + args: vec![Sexp::symbol("a"), Sexp::symbol("b")], + var: Some(Box::new(Sexp::symbol("var"))), + service_desc: None, + } + .into() + ), + Sexp::Call( + Call { + triplet: ( + Sexp::symbol("peerid2"), + Sexp::string("serv"), + Sexp::string("func"), + ), + args: vec![], + var: None, + service_desc: Some(ServiceDefinition::Ok(json!(42))), + } + .into() + ), ])) ); } + + #[test] + fn test_canon_var_peer() { + let res = Sexp::from_str(r#"(canon peer $stream #canon)"#); + + assert_eq!( + res, + Ok(Sexp::Canon( + Canon { + peer: Sexp::symbol("peer"), + stream: Sexp::symbol("$stream"), + target: Sexp::symbol("#canon"), + } + .into() + )) + ) + } + + #[test] + fn test_canon_string_peer() { + let res = Sexp::from_str(r#"(canon "peer" $stream #canon)"#); + + assert_eq!( + res, + Ok(Sexp::Canon( + Canon { + peer: Sexp::string("peer"), + stream: Sexp::symbol("$stream"), + target: Sexp::symbol("#canon"), + } + .into() + )) + ) + } + + #[test] + fn test_canon_error_no_peer() { + let res = Sexp::from_str(r#"(canon )"#); + assert_eq!( + res, + Err( + "Failed to parse the script:\n 1:8: within canon instructon\n 1:8: canon peer" + .to_owned() + ) + ); + } + + #[test] + fn test_canon_error_no_stream() { + let res = Sexp::from_str(r#"(canon peer )"#); + assert_eq!( + res, + Err( + "Failed to parse the script:\n 1:8: within canon instructon\n 1:13: canon stream" + .to_owned() + ) + ); + } + + #[test] + fn test_canon_error_no_target() { + let res = Sexp::from_str(r#"(canon peer $stream )"#); + assert_eq!( + res, + Err( + "Failed to parse the script:\n 1:8: within canon instructon\n 1:21: canon target" + .to_owned() + ) + ); + } + + #[test] + fn test_canon_error_wrong_stream() { + let res = Sexp::from_str(r#"(canon peer "$stream" #canon)"#); + assert_eq!( + res, + Err( + "Failed to parse the script:\n 1:8: within canon instructon\n 1:13: canon stream" + .to_owned() + ) + ); + } + + #[test] + fn test_canon_error_wrong_target() { + let res = Sexp::from_str(r##"(canon peer $stream "#canon" )"##); + assert_eq!( + res, + Err( + "Failed to parse the script:\n 1:8: within canon instructon\n 1:21: canon target" + .to_owned() + ) + ); + } } diff --git a/crates/testing-framework/src/transform/walker.rs b/crates/testing-framework/src/transform/walker.rs index 281a5063..96cc227d 100644 --- a/crates/testing-framework/src/transform/walker.rs +++ b/crates/testing-framework/src/transform/walker.rs @@ -14,12 +14,13 @@ * limitations under the License. */ -use air_test_utils::test_runner::{AirRunner, DefaultAirRunner}; - -use super::{Call, Sexp}; +use super::{Call, Canon, Sexp}; use crate::ephemeral::Network; -use std::{fmt::Write, ops::Deref, rc::Rc, str::FromStr}; +use air_test_utils::key_utils::at; +use air_test_utils::test_runner::{AirRunner, DefaultAirRunner}; + +use std::{borrow::Cow, fmt::Write, ops::Deref, rc::Rc, str::FromStr}; /// Transformed script represents transformed script's services' state within the network. /// Executions that use the same transformed script share same generated services' state. @@ -31,19 +32,22 @@ pub struct TransformedAirScript { } impl TransformedAirScript { + // TODO peer transformation mode pub fn new(annotated_air_script: &str, network: Rc>) -> Result { - // validate the AIR script with the standard parser first - air_parser::parse(annotated_air_script)?; + let at_transformed_air_script = at_transform(annotated_air_script); - Self::new_unvalidated(annotated_air_script, network) + // validate the AIR script with the standard parser first + air_parser::parse(&at_transformed_air_script)?; + + Self::new_unvalidated(&at_transformed_air_script, network) } pub(crate) fn new_unvalidated( - annotated_air_script: &str, + at_transformed_air_script: &str, network: Rc>, ) -> Result { let transformer = Transformer { network: &network }; - let mut sexp = Sexp::from_str(annotated_air_script)?; + let mut sexp = Sexp::from_str(at_transformed_air_script)?; transformer.transform(&mut sexp); Ok(Self { @@ -52,7 +56,7 @@ impl TransformedAirScript { }) } - pub(crate) fn get_network(&self) -> Rc> { + pub fn get_network(&self) -> Rc> { self.network.clone() } } @@ -73,6 +77,7 @@ impl Transformer<'_, R> { pub(crate) fn transform(&self, sexp: &mut Sexp) { match sexp { Sexp::Call(call) => self.handle_call(call), + Sexp::Canon(canon) => self.handle_canon(canon), Sexp::List(children) => { for child in children.iter_mut().skip(1) { self.transform(child); @@ -84,8 +89,11 @@ impl Transformer<'_, R> { fn handle_call(&self, call: &mut Call) { // collect peers... - if let Sexp::String(peer_id) = &call.triplet.0 { - self.network.ensure_peer(peer_id.clone()); + if let Sexp::String(ref mut peer_name) = &mut call.triplet.0 { + *peer_name = self + .network + .ensure_named_peer(peer_name.as_str()) + .to_string(); } let result_store = self.network.get_services().get_result_store(); @@ -102,13 +110,38 @@ impl Transformer<'_, R> { } } } + + fn handle_canon(&self, canon: &mut Canon) { + if let Sexp::String(ref mut peer_name) = &mut canon.peer { + *peer_name = self + .network + .ensure_named_peer(peer_name.as_str()) + .to_string(); + } + } +} + +/// Replace substrings for the form @"peer_name" by a derived peer ID. +/// +/// It works like a pre-processor. +fn at_transform(air_script: &str) -> Cow<'_, str> { + let transformer = regex::Regex::new(r#"@"([-a-z0-9_]+)""#).unwrap(); + transformer.replace_all(air_script, |c: ®ex::Captures| { + // no escaping needed for peer ID + format!(r#""{}""#, at(&c[1])) + }) } #[cfg(test)] mod tests { use super::*; - use crate::{asserts::ServiceDefinition, ephemeral::PeerId, services::results::ResultStore}; - use air_test_utils::test_runner::NativeAirRunner; + use crate::{ + asserts::ServiceDefinition, ephemeral::PeerId, services::results::ResultStore, + AirScriptExecutor, + }; + + use air_test_utils::key_utils::at; + use air_test_utils::prelude::*; use std::{ collections::{HashMap, HashSet}, @@ -150,9 +183,12 @@ mod tests { let network = Network::::new(std::iter::empty::(), vec![]); let script = r#"(call "peer_id" ("service_id" func) []) ; ok = 42"#; let transformer = TransformedAirScript::new_unvalidated(script, network.clone()).unwrap(); + + let peer_id = at("peer_id"); + assert_eq!( &*transformer, - r#"(call "peer_id" ("service_id..0" func) [])"# + &format!(r#"(call "{peer_id}" ("service_id..0" func) [])"#) ); assert_eq!( @@ -166,7 +202,7 @@ mod tests { assert_eq!( network.get_peers().collect::>(), - vec![PeerId::new("peer_id")], + vec![PeerId::from(peer_id)], ); } @@ -216,14 +252,76 @@ mod tests { (call "peer_id2" ("service_id" func) [b]) (call "peer_id1" ("service_id" func) [1]) ; ok=true (call peer_id3 ("service_id" func) [b]) + (canon "peer_id4" $stream #canon) ))"#; let network = Network::::new(std::iter::empty::(), vec![]); - let _ = TransformedAirScript::new_unvalidated(script, network.clone()); + let t = TransformedAirScript::new_unvalidated(script, network.clone()).unwrap(); + + let peer_id1 = at("peer_id1"); + let peer_id2 = at("peer_id2"); + let peer_id4 = at("peer_id4"); assert_eq!( network.get_peers().collect::>(), - HashSet::from_iter(vec![PeerId::new("peer_id1"), PeerId::new("peer_id2")]), + HashSet::from_iter(vec![ + PeerId::from(peer_id1.as_str()), + PeerId::from(peer_id2.as_str()), + PeerId::from(peer_id4.as_str()), + ]), + ); + + let expected = format!( + concat!( + "(seq", + r#" (call "{peer_id1}" ("service_id..0" func) [a 11])"#, + " (seq", + r#" (call "{peer_id2}" ("service_id" func) [b])"#, + r#" (call "{peer_id1}" ("service_id..1" func) [1])"#, + r#" (call peer_id3 ("service_id" func) [b])"#, + r#" (canon "{peer_id4}" $stream #canon)))"# + ), + peer_id1 = peer_id1, + peer_id2 = peer_id2, + peer_id4 = peer_id4 + ); + assert_eq!(*t, expected); + } + + #[test] + fn test_at_transform() { + let script = r#"(call "peer_id1" ("service_id" "func") [1 @"peer_id3"] x) ; ok={"test":@"peer_id2"}"#; + + let network = Network::::new(std::iter::empty::(), vec![]); + let t = TransformedAirScript::new(script, network.clone()).unwrap(); + + let peer_id1 = at("peer_id1"); + let peer_id2 = at("peer_id2"); + let peer_id3 = at("peer_id3"); + + let expected = format!( + r#"(call "{peer_id1}" ("service_id..0" "func") [1 "{peer_id3}"] x)"#, + peer_id1 = peer_id1, + peer_id3 = peer_id3, + ); + assert_eq!(*t, expected); + + let peer_name1 = "peer_id1"; + let exec = AirScriptExecutor::from_transformed_air_script( + TestRunParameters::from_init_peer_id(peer_name1), + t, ) + .unwrap(); + let res = exec.execute_one(peer_name1).unwrap(); + assert_eq!( + trace_from_result(&res), + ExecutionTrace::from(vec![scalar!( + json!({ "test": peer_id2 }), + peer_name = peer_name1, + service = "service_id..0", + function = "func", + args = vec![json!(1), json!(peer_id3)] + )]) + ); } } diff --git a/junk/cidify/Cargo.toml b/junk/cidify/Cargo.toml index f724c418..9f24bd25 100644 --- a/junk/cidify/Cargo.toml +++ b/junk/cidify/Cargo.toml @@ -5,10 +5,11 @@ edition = "2021" publish = false [dependencies] -air-interpreter-cid = { version = "0.2.0", path = "../../crates/air-lib/interpreter-cid" } -air-interpreter-data = { version = "0.10.0", path = "../../crates/air-lib/interpreter-data" } -aquavm-air = { path = "../../air" } +aquavm-air = { path = "../../air", features = ["gen_signatures", "check_signatures"] } +air-interpreter-cid = { path = "../../crates/air-lib/interpreter-cid" } +air-interpreter-data = { path = "../../crates/air-lib/interpreter-data" } +air-interpreter-signatures = { path = "../../crates/air-lib/interpreter-signatures" } air-test-utils = { path = "../../crates/air-lib/test-utils" } clap = { version = "4.1.13", features = ["derive"] } -serde = { version = "1.0.158", features = ["derive"]} +serde = { version = "1.0.158", features = ["derive"] } serde_json = "1.0.94" diff --git a/junk/cidify/src/main.rs b/junk/cidify/src/main.rs index 1089721b..76ccd293 100644 --- a/junk/cidify/src/main.rs +++ b/junk/cidify/src/main.rs @@ -1,4 +1,8 @@ use air_interpreter_data::ExecutedState; +use air_interpreter_signatures::{PeerCidTracker, SignatureStore}; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; +use std::collections::HashMap; use clap::Parser; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -58,6 +62,10 @@ fn main() { let mut data: PreCidInterpeterData = read_data(args.data_path); let calls: TraceCalls = read_data(args.calls_path); let mut calls = calls.into_iter(); + // STUB + let (keypair, id) = derive_dummy_keypair("init_peer_id"); + let mut peer_id_cache = HashMap::::new(); + let mut signature_tracker = PeerCidTracker::new(id); let mut cid_state = air::ExecutionCidState::new(); @@ -67,7 +75,13 @@ fn main() { if let Some(executed) = call.as_object_mut().unwrap().get_mut("executed") { if let Some(scalar) = executed.as_object_mut().unwrap().get_mut("scalar") { let call_info = calls.next().expect("More calls than call_info"); - let state = transform_cid(scalar.take(), call_info, &mut cid_state); + let state = transform_cid( + scalar.take(), + call_info, + &mut cid_state, + &mut peer_id_cache, + &mut signature_tracker, + ); *elt = json!(state); } } @@ -81,10 +95,23 @@ fn main() { data.other_fields .as_object_mut() .unwrap() - .insert("interpreter_version".to_owned(), json!("0.35.1")); + .insert("interpreter_version".to_owned(), json!("0.41.0")); + let mut ss = ::new(); + ss.put(keypair.public().into(), signature_tracker.gen_signature("particle_id", &keypair).unwrap()); + data.other_fields + .as_object_mut() + .unwrap() + .insert("signatures".to_owned(), json!(ss)); serde_json::to_writer(std::io::stdout(), &data).unwrap(); } +fn derive_peer_id(peer_name: &str, peer_id_cache: &mut HashMap) -> String { + peer_id_cache + .entry(peer_name.to_owned()) + .or_insert_with(|| derive_dummy_keypair(peer_name).1) + .clone() +} + fn read_data(path: PathBuf) -> T { let inp = std::fs::File::open(path).unwrap(); serde_json::from_reader(inp).unwrap() @@ -94,11 +121,13 @@ fn transform_cid( value: Value, meta: CallInfo, cid_state: &mut air::ExecutionCidState, + peer_id_state: &mut HashMap, + signature_tracker: &mut PeerCidTracker, ) -> ExecutedState { - use air_test_utils::executed_state::ExecutedCallBuilder; + let peer = derive_peer_id(&meta.peer, peer_id_state); let mut builder = ExecutedCallBuilder::new(value); - builder = builder.peer(meta.peer); + builder = builder.peer(peer.clone()); if let Some(service) = meta.service { builder = builder.service(service); @@ -113,8 +142,14 @@ fn transform_cid( builder = builder.json_path(json_path); } + match meta.kind { - Some(Kind::Scalar) | None => builder.scalar_tracked(cid_state), + Some(Kind::Scalar) | None => { + let state = builder.scalar_tracked(cid_state); + let cid = extract_service_result_cid(&state); + signature_tracker.register(&peer, &cid); + state + } Some(Kind::Unused) => builder.unused(), Some(Kind::Stream) => unimplemented!("no stream in test data"), } diff --git a/junk/gen-bench-data/Cargo.toml b/junk/gen-bench-data/Cargo.toml new file mode 100644 index 00000000..f5945699 --- /dev/null +++ b/junk/gen-bench-data/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "gen-bench-data" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +aquavm-air = { path = "../../air", features = ["gen_signatures", "check_signatures"] } +air-interpreter-signatures = { path = "../../crates/air-lib/interpreter-signatures" } +air-test-utils = { path = "../../crates/air-lib/test-utils" } +air-testing-framework = { path = "../../crates/testing-framework" } +bs58 = "0.5.0" +clap = { version = "4.3.5", features = ["derive"] } +fluence-keypair = "0.10.1" +itertools = "0.10.5" +maplit = "1.0.2" +serde_json = "1.0.97" +serde = "1.0.165" diff --git a/junk/gen-bench-data/README b/junk/gen-bench-data/README new file mode 100644 index 00000000..4020b18a --- /dev/null +++ b/junk/gen-bench-data/README @@ -0,0 +1,8 @@ +Generate data for certain benchmarks. + ++ signatures_multiple_cids + Lot of CIDs for single peer ++ signatures_multiple_sigs + Lot of peers with small number of CIDs ++ lot of own signatures + No, it doesn't seem to matter: all the sets are recreated. diff --git a/junk/gen-bench-data/gen_benchmark_data.sh b/junk/gen-bench-data/gen_benchmark_data.sh new file mode 100755 index 00000000..dc690493 --- /dev/null +++ b/junk/gen-bench-data/gen_benchmark_data.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh + +echo "Warning: this script execution can take more than 30min." >&2 + +set -e + +echo "Pre-build a binary..." >&2 +cargo build --quiet --release + +for bench in multiple-cids10 multiple-cids50 \ + multiple-peers14 multiple-peers25 \ + multiple-sigs50 multiple-sigs200 \ + dashboard network-explore; do + echo "Generating ${bench} ..." >&2 + if [ "${bench}" == multiple-peers25 ]; then + echo "WARNING: this bench data generation can take more than 10 minutes..." >&2 + fi + DESTDIR="../../benches/performance_metering/${bench}/" + mkdir -p "${DESTDIR}" + time cargo run --quiet --release -- --dest-dir "${DESTDIR}" "${bench}" +done diff --git a/junk/gen_test_data/src/dashboard.rs b/junk/gen-bench-data/src/dashboard.rs similarity index 85% rename from junk/gen_test_data/src/dashboard.rs rename to junk/gen-bench-data/src/dashboard.rs index 0a521c9f..1a8d0bd6 100644 --- a/junk/gen_test_data/src/dashboard.rs +++ b/junk/gen-bench-data/src/dashboard.rs @@ -14,16 +14,19 @@ * limitations under the License. */ +use super::Data; + use air_test_utils::prelude::*; +use air_test_utils::key_utils::derive_dummy_keypair; +use air_interpreter_signatures::KeyPair; +use maplit::hashmap; use std::cell::RefCell; use std::collections::HashSet; use std::rc::Rc; -fn parse_peers() -> Vec { - let data = include_str!("dashboard/peers"); - - data.split("\n").map(str::to_owned).collect() +fn create_peers() -> Vec<(KeyPair, String)> { + (0..7).map(|n| derive_dummy_keypair(&format!("n{n}"))).collect() } fn into_hashset(peers: Vec) -> HashSet { @@ -139,34 +142,39 @@ fn create_peer_host_function(peer_id: String, known_peer_ids: Vec) -> Ca } struct AVMState { - vm: TestRunner, + vm: TestRunner, peer_id: String, prev_result: Vec, } -pub(crate) fn dashboard() -> (Vec, Vec) { +pub(crate) fn dashboard() -> super::Data { let script = include_str!("dashboard/dashboard.air"); - let known_peer_ids = parse_peers(); - let client_id = "client_id".to_string(); - let relay_id = "relay_id".to_string(); + let known_peer_keys = create_peers(); + let known_peer_ids: Vec<_> = known_peer_keys.iter().map(|(_, id)| id.clone()).collect(); + + let client_name = "client_id"; + let relay_name = "relay_id"; + + let (client_key, client_id) = derive_dummy_keypair(client_name); + let (relay_key, relay_id) = derive_dummy_keypair(relay_name); let (host_function, all_info) = client_host_function(known_peer_ids.clone(), client_id.clone(), relay_id.clone()); - let mut client = create_avm(host_function, client_id.clone()); - let mut relay = create_avm( + let mut client = create_avm_with_key::(client_key, host_function); + let mut relay = create_avm_with_key::( + relay_key.clone(), create_peer_host_function(relay_id.clone(), known_peer_ids.clone()), - relay_id.clone(), ); - let mut known_peers = known_peer_ids + let mut known_peers = known_peer_keys .iter() .cloned() - .map(|peer_id| { - let vm = create_avm( + .map(|(peer_key, peer_id)| { + let vm = create_avm_with_key::( + peer_key, create_peer_host_function(peer_id.clone(), known_peer_ids.clone()), - peer_id.clone(), ); AVMState { vm, @@ -176,7 +184,7 @@ pub(crate) fn dashboard() -> (Vec, Vec) { }) .collect::>(); - let test_params = TestRunParameters::from_init_peer_id(client_id.clone()); + let test_params = TestRunParameters::from_init_peer_id(client_id.clone()).with_particle_id(super::PARTICLE_ID); // -> client 1 let client_1_result = checked_call_vm!(client, test_params.clone(), script, "", ""); @@ -207,12 +215,12 @@ pub(crate) fn dashboard() -> (Vec, Vec) { relay_1_result.data.clone() ); assert!(client_2_result.next_peer_pks.is_empty()); - assert_eq!( - *all_info.borrow(), - String::from( - r#"["relay_id","relay_id_ident",["relay_id_interface_0","relay_id_interface_1","relay_id_interface_2"],["relay_id_blueprint_0","relay_id_blueprint_1","relay_id_blueprint_2"],["relay_id_module_0","relay_id_module_1","relay_id_module_2"]]"# - ) - ); + // assert_eq!( + // *all_info.borrow(), + // String::from( + // r#"["relay_id","relay_id_ident",["relay_id_interface_0","relay_id_interface_1","relay_id_interface_2"],["relay_id_blueprint_0","relay_id_blueprint_1","relay_id_blueprint_2"],["relay_id_module_0","relay_id_module_1","relay_id_module_2"]]"# + // ) + // ); let mut relay_2_result = relay_1_result.clone(); let mut client_3_result = client_2_result; @@ -359,8 +367,17 @@ pub(crate) fn dashboard() -> (Vec, Vec) { } } - ( - known_peers.last().unwrap().prev_result.clone(), - known_peers.first().unwrap().prev_result.clone(), - ) + Data { + air: script.to_string(), + prev_data: known_peers.last().unwrap().prev_result.clone(), + cur_data: known_peers.first().unwrap().prev_result.clone(), + params_json: hashmap! { + "comment".to_owned() => "big dashboard test".to_owned(), + "particle-id".to_owned() => super::PARTICLE_ID.to_owned(), + "current-peer-id".to_owned() => relay_id, + "init-peer-id".to_owned() => client_id, + }, + call_results: None, + keypair: bs58::encode(relay_key.to_vec()).into_string(), + } } diff --git a/benches/performance_metering/dashboard/script.air b/junk/gen-bench-data/src/dashboard/dashboard.air similarity index 100% rename from benches/performance_metering/dashboard/script.air rename to junk/gen-bench-data/src/dashboard/dashboard.air diff --git a/junk/gen-bench-data/src/main.rs b/junk/gen-bench-data/src/main.rs new file mode 100644 index 00000000..11cc2232 --- /dev/null +++ b/junk/gen-bench-data/src/main.rs @@ -0,0 +1,234 @@ +use air_test_framework::*; +use air_test_utils::prelude::*; +use clap::{Parser, Subcommand}; +use itertools::Itertools as _; +use maplit::hashmap; + +use std::collections::HashMap; +use std::path::{Path, PathBuf}; + +const PARTICLE_ID: &str = "0123456789ABCDEF"; + +mod dashboard; +mod network_explore; + +#[derive(Debug, Parser)] +struct Cli { + #[command(subcommand)] + bench: Bench, + + #[arg(long)] + dest_dir: PathBuf, +} + +#[derive(Debug, Subcommand)] +enum Bench { + MultipleCids10, + MultipleCids50, + MultiplePeers5, + MultiplePeers14, + MultiplePeers25, + MultipleSigs10, + MultipleSigs50, + MultipleSigs200, + Dashboard, + NetworkExplore, +} + +fn main() { + let args = Cli::parse(); + + let data = match args.bench { + Bench::MultipleCids10 => multiple_cids(10), + Bench::MultipleCids50 => multiple_cids(50), + Bench::MultiplePeers5 => multiple_peers(5), + Bench::MultiplePeers14 => multiple_peers(14), + Bench::MultiplePeers25 => multiple_peers(25), + Bench::MultipleSigs10 => multiple_sigs(10), + Bench::MultipleSigs50 => multiple_sigs(50), + Bench::MultipleSigs200 => multiple_sigs(200), + Bench::Dashboard => dashboard::dashboard(), + Bench::NetworkExplore => network_explore::network_explore(), + }; + + save_data(&args.dest_dir, data).unwrap(); +} + +fn save_data(dest_dir: &Path, data: Data) -> Result<(), Box> { + use std::fs::*; + + create_dir_all(dest_dir)?; + + save_file(dest_dir, "script.air", &data.air)?; + save_file(dest_dir, "prev_data.json", &reformat_json(&data.prev_data))?; + save_file(dest_dir, "cur_data.json", &reformat_json(&data.cur_data))?; + save_file(dest_dir, "params.json", &serde_json::to_vec_pretty(&data.params_json)?)?; + save_file(dest_dir, "keypair.ed25519", &data.keypair)?; + + Ok(()) +} + +/// make zero-indentation data for better git diffs +fn reformat_json(data: &[u8]) -> Vec { + use serde::ser::Serialize; + + let obj: serde_json::Value = serde_json::from_slice(data).unwrap(); + let fmt = serde_json::ser::PrettyFormatter::with_indent(&[]); + let mut out = vec![]; + let mut ser = serde_json::ser::Serializer::with_formatter(&mut out, fmt); + obj.serialize(&mut ser).unwrap(); + out +} + +fn save_file(dest_dir: &Path, filename: &str, data: impl AsRef<[u8]>) -> Result<(), Box>{ + use std::fs::*; + use std::io::prelude::*; + + let mut dest_dir = dest_dir.to_owned(); + dest_dir.push(filename); + + let mut f = File::create(&dest_dir)?; + f.write_all(data.as_ref())?; + + Ok(()) +} + +#[derive(Debug, Default)] +pub(crate) struct Data { + pub(crate) air: String, + pub(crate) prev_data: Vec, + pub(crate) cur_data: Vec, + pub(crate) params_json: HashMap, + pub(crate) call_results: Option, + pub(crate) keypair: String, +} + +fn multiple_cids(size: usize) -> Data { + let data = (0..size).map(|n| format!(r#""val{}""#, n)).join(","); + let air_script = format!(include_str!("multiple_cids.air.tmpl"), data = data); + + let exec = AirScriptExecutor::::new( + TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID), + vec![], + vec![], + &air_script, + ).unwrap(); + + let prev_res = exec.execute_one("init_peer_id").unwrap(); + let cur_res = exec.execute_one("other_peer_id").unwrap(); + + assert!(!prev_res.next_peer_pks.is_empty()); + + let keypair = exec + .get_network() + .get_named_peer_env("init_peer_id") + .expect("main peer") + .borrow() + .get_peer() + .get_keypair() + .clone(); + + let peer_id: String = exec.resolve_name("init_peer_id").to_string(); + + Data { + air: exec.get_transformed_air_script().to_string(), + prev_data: prev_res.data, + cur_data: cur_res.data, + params_json: hashmap! { + "comment".to_owned() => "verifying multiple CIDs for single peer".to_owned(), + "particle-id".to_owned() => PARTICLE_ID.to_owned(), + "current-peer-id".to_owned() => peer_id.clone(), + "init-peer-id".to_owned() => peer_id, + }, + call_results: None, + keypair: bs58::encode(keypair.to_vec()).into_string(), + } +} + +fn multiple_peers(size: usize) -> Data { + let data = (0..size).map(|n| format!(r#"@"p{}""#, n)).join(","); + let peers: Vec<_> = (0..size).map(|n| format!("p{}", n).into()).collect(); + let air_script = format!(include_str!("multiple_peers.air.tmpl"), data = data); + + let exec = AirScriptExecutor::::new( + TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID), + vec![], + peers.clone(), + &air_script, + ).unwrap(); + + let prev_res = exec.execute_one("init_peer_id").unwrap(); + + for peer in &peers { + exec.execute_one(peer).unwrap(); + } + + let cur_res = exec.execute_one("other_peer_id").unwrap(); + + let keypair = exec + .get_network() + .get_named_peer_env("init_peer_id") + .expect("main peer") + .borrow() + .get_peer() + .get_keypair() + .clone(); + + let peer_id: String = exec.resolve_name("init_peer_id").to_string(); + + Data { + air: exec.get_transformed_air_script().to_string(), + prev_data: prev_res.data, + cur_data: cur_res.data, + params_json: hashmap! { + "comment".to_owned() => "verifying many CIDs for many peers".to_owned(), + "particle-id".to_owned() => PARTICLE_ID.to_owned(), + "current-peer-id".to_owned() => peer_id.clone(), + "init-peer-id".to_owned() => peer_id, + }, + call_results: None, + keypair: bs58::encode(keypair.to_vec()).into_string(), + } +} + +fn multiple_sigs(size: usize) -> Data { + let data = (0..size).map(|n| format!(r#""val{}""#, n)).join(","); + let air_script = format!(include_str!("multiple_sigs.air.tmpl"), data = data); + + let exec = AirScriptExecutor::::new( + TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID), + vec![], + vec![], + &air_script, + ).unwrap(); + + let prev_res = exec.execute_one("init_peer_id").unwrap(); + let cur_res = exec.execute_one("other_peer_id").unwrap(); + + assert!(!prev_res.next_peer_pks.is_empty()); + + let keypair = exec + .get_network() + .get_named_peer_env("init_peer_id") + .expect("main peer") + .borrow() + .get_peer() + .get_keypair() + .clone(); + + let peer_id: String = exec.resolve_name("init_peer_id").to_string(); + + Data { + air: exec.get_transformed_air_script().to_string(), + prev_data: prev_res.data, + cur_data: cur_res.data, + params_json: hashmap! { + "comment".to_owned() => "signing multiple CIDs".to_owned(), + "particle-id".to_owned() => PARTICLE_ID.to_owned(), + "current-peer-id".to_owned() => peer_id.clone(), + "init-peer-id".to_owned() => peer_id, + }, + call_results: None, + keypair: bs58::encode(keypair.to_vec()).into_string(), + } +} diff --git a/junk/gen-bench-data/src/multiple_cids.air.tmpl b/junk/gen-bench-data/src/multiple_cids.air.tmpl new file mode 100644 index 00000000..616e0a25 --- /dev/null +++ b/junk/gen-bench-data/src/multiple_cids.air.tmpl @@ -0,0 +1,11 @@ +(seq + (seq + (call "init_peer_id" ("" "init") [] data) ; ok = [{data}] + (fold data x + (seq + (fold data y + (seq + (call "other_peer_id" ("serv" "args") [x y] $stream) ; behaviour = echo + (next y))) + (next x)))) + (call "init_peer_id" ("" "complete") [])) diff --git a/junk/gen-bench-data/src/multiple_peers.air.tmpl b/junk/gen-bench-data/src/multiple_peers.air.tmpl new file mode 100644 index 00000000..dba708a7 --- /dev/null +++ b/junk/gen-bench-data/src/multiple_peers.air.tmpl @@ -0,0 +1,17 @@ +(seq + (seq + (call "init_peer_id" ("" "init") [] data) ; ok = [{data}] + (fold data p + (seq + (fold data x + (seq + (fold data y + (seq + (call p ("serv" "args") [p x y] $stream) ; behaviour = echo + (next y))) + (next x))) + (next p)))) + (seq + (call "other_peer_id" ("" "collect") []) ; behaviour = unit + (call "init_peer_id" ("" "complete") []))) +;;; TODO what if we change order? It will change the data locality diff --git a/junk/gen-bench-data/src/multiple_sigs.air.tmpl b/junk/gen-bench-data/src/multiple_sigs.air.tmpl new file mode 100644 index 00000000..0bed3b66 --- /dev/null +++ b/junk/gen-bench-data/src/multiple_sigs.air.tmpl @@ -0,0 +1,13 @@ +(seq + (seq + (call "init_peer_id" ("" "init") [] data) ; ok = [{data}] + (fold data x + (seq + (fold data y + (par + (call "init_peer_id" ("serv" "args") [x y] $stream) ; behaviour = echo + (next y))) + (next x)))) + (seq + (call "other_peer_id" ("" "complete") []) ; ok = "ok" + (canon "init_peer_id" $stream #canon))) diff --git a/benches/performance_metering/network_explore/script.air b/junk/gen-bench-data/src/network_explore.air similarity index 99% rename from benches/performance_metering/network_explore/script.air rename to junk/gen-bench-data/src/network_explore.air index 3d00923a..5d67101b 100644 --- a/benches/performance_metering/network_explore/script.air +++ b/junk/gen-bench-data/src/network_explore.air @@ -4,7 +4,7 @@ (call "client_id" ("" "") ["relay"] relay) (call "client_id" ("" "") ["client"] client)) (seq - (call relay ("dht" "neighborhood") [relay] neighs_top) ; + (call relay ("dht" "neighborhood") [relay] neighs_top) (seq (fold neighs_top n (seq diff --git a/junk/gen-bench-data/src/network_explore.rs b/junk/gen-bench-data/src/network_explore.rs new file mode 100644 index 00000000..bc5a52bd --- /dev/null +++ b/junk/gen-bench-data/src/network_explore.rs @@ -0,0 +1,181 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use super::Data; + +use air_test_utils::key_utils::derive_dummy_keypair; +use air_test_utils::prelude::*; +use maplit::hashmap; + +pub(crate) fn network_explore() -> Data { + let relay_name = "relay_id"; + let client_name = "client_id"; + + let client_1_name = "client_1_id"; + let client_2_name = "client_2_id"; + let client_3_name = "client_3_id"; + + let (relay_key, relay_id) = derive_dummy_keypair(relay_name); + let (client_key, client_id) = derive_dummy_keypair(client_name); + let (client_1_key, client_1_id) = derive_dummy_keypair(client_1_name); + let (client_2_key, client_2_id) = derive_dummy_keypair(client_2_name); + let (client_3_key, client_3_id) = derive_dummy_keypair(client_3_name); + + let set_variables_state = maplit::hashmap!( + "relay".to_string() => json!(&relay_id), + "client".to_string() => json!(&client_id), + ); + + let client_call_service = + set_variables_call_service(set_variables_state, VariableOptionSource::Argument(0)); + let mut client = create_avm_with_key::(client_key, client_call_service); + + let relay_call_service = + set_variable_call_service(json!([&client_1_id, &client_2_id, &client_3_id, &relay_id])); + let mut relay = create_avm_with_key::(relay_key.clone(), relay_call_service); + + let client_1_call_service = + set_variable_call_service(json!([&client_1_id, &client_3_id, &relay_id, &client_2_id])); + let mut client_1 = create_avm_with_key::(client_1_key, client_1_call_service); + + let client_2_call_service = + set_variable_call_service(json!([&relay_id, &client_3_id, &client_1_id, &client_2_id])); + let mut client_2 = create_avm_with_key::(client_2_key, client_2_call_service); + + let client_3_call_service = + set_variable_call_service(json!([&relay_id, &client_3_id, &client_1_id, &client_2_id])); + let mut client_3 = create_avm_with_key::(client_3_key, client_3_call_service); + + let raw_script = include_str!("network_explore.air"); + + // kind of hack: transform peer id in calls + let script = { + let network = air_test_framework::Network::::new( + std::iter::empty::(), + vec![], + ); + let transformed_script = + air_test_framework::TransformedAirScript::new(raw_script, network).unwrap(); + &(*transformed_script).to_string() + }; + + let client_result = checked_call_vm!(client, <_>::default(), script, "", ""); + assert_next_pks!(&client_result.next_peer_pks, &[relay_id.as_str()]); + + let relay_result = checked_call_vm!( + relay, + <_>::default(), + script, + "", + client_result.data.clone() + ); + assert_next_pks!(&relay_result.next_peer_pks, &[client_1_id.as_str()]); + + let client_1_result = checked_call_vm!( + client_1, + <_>::default(), + script, + "", + relay_result.data.clone() + ); + assert_next_pks!(&client_1_result.next_peer_pks, &[client_2_id.as_str()]); + + let client_2_result = checked_call_vm!( + client_2, + <_>::default(), + script, + "", + client_1_result.data.clone() + ); + assert_next_pks!(&client_2_result.next_peer_pks, &[client_3_id.as_str()]); + + let client_3_result = checked_call_vm!( + client_3, + <_>::default(), + script, + "", + client_2_result.data.clone() + ); + assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id.as_str()]); + + let relay_result = checked_call_vm!( + relay, + <_>::default(), + script, + relay_result.data, + client_3_result.data.clone() + ); + // assert_next_pks!(&relay_result.next_peer_pks, &[client_1_id.as_str()]); + + let client_1_result = checked_call_vm!( + client_1, + <_>::default(), + script, + client_1_result.data, + relay_result.data.clone() + ); + // assert_next_pks!(&client_1_result.next_peer_pks, &[client_3_id.as_str()]); + + let client_3_result = checked_call_vm!( + client_3, + <_>::default(), + script, + client_3_result.data, + client_1_result.data + ); + // assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id.as_str()]); + + let relay_result = checked_call_vm!( + relay, + <_>::default(), + script, + relay_result.data, + client_3_result.data.clone() + ); + assert_next_pks!(&relay_result.next_peer_pks, &[client_2_id.as_str()]); + + let client_2_result = checked_call_vm!( + client_2, + <_>::default(), + script, + client_2_result.data, + relay_result.data.clone() + ); + assert_next_pks!(&client_2_result.next_peer_pks, &[client_3_id.as_str()]); + + let client_3_result = checked_call_vm!( + client_3, + <_>::default(), + script, + client_3_result.data, + client_2_result.data.clone() + ); + assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id.as_str()]); + + Data { + air: script.to_string(), + prev_data: relay_result.data, + cur_data: client_3_result.data, + params_json: hashmap! { + "comment".to_owned() => "5 peers of network are discovered".to_owned(), + "particle-id".to_owned() => "".to_owned(), + "current-peer-id".to_owned() => relay_id, + "init-peer-id".to_owned() => "".to_owned(), + }, + call_results: None, + keypair: bs58::encode(relay_key.to_vec()).into_string(), + } +} diff --git a/junk/gen_test_data/Cargo.lock b/junk/gen_test_data/Cargo.lock deleted file mode 100644 index 647ad7d1..00000000 --- a/junk/gen_test_data/Cargo.lock +++ /dev/null @@ -1,3289 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "air-execution-info-collector" -version = "0.7.4" -dependencies = [ - "aquavm-air-parser", -] - -[[package]] -name = "air-interpreter-cid" -version = "0.2.0" -dependencies = [ - "cid", - "multihash", - "serde", - "serde_json", -] - -[[package]] -name = "air-interpreter-data" -version = "0.6.4" -dependencies = [ - "air-interpreter-cid", - "air-interpreter-interface", - "air-utils", - "aquavm-air-parser", - "once_cell", - "polyplets 0.3.2", - "semver", - "serde", - "serde_json", - "tracing", -] - -[[package]] -name = "air-interpreter-interface" -version = "0.13.0" -dependencies = [ - "fluence-it-types", - "marine-rs-sdk", - "serde", - "serde_json", -] - -[[package]] -name = "air-lambda-ast" -version = "0.1.0" -dependencies = [ - "itertools", - "non-empty-vec", - "serde", - "serde_json", -] - -[[package]] -name = "air-lambda-parser" -version = "0.1.0" -dependencies = [ - "air-lambda-ast", - "codespan", - "codespan-reporting", - "itertools", - "lalrpop", - "lalrpop-util", - "multimap", - "regex", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "air-log-targets" -version = "0.1.0" - -[[package]] -name = "air-test-utils" -version = "0.4.7" -dependencies = [ - "air-interpreter-cid", - "air-interpreter-data", - "air-interpreter-interface", - "aquavm-air", - "avm-interface", - "avm-server", - "fstrings", - "marine-rs-sdk", - "object-pool", - "once_cell", - "semver", - "serde", - "serde_json", -] - -[[package]] -name = "air-trace-handler" -version = "0.1.3" -dependencies = [ - "air-interpreter-cid", - "air-interpreter-data", - "air-interpreter-interface", - "air-log-targets", - "aquavm-air-parser", - "bimap", - "log", - "polyplets 0.3.2", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "air-utils" -version = "0.1.0" - -[[package]] -name = "ambient-authority" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" - -[[package]] -name = "aquavm-air" -version = "0.38.0" -dependencies = [ - "air-execution-info-collector", - "air-interpreter-cid", - "air-interpreter-data", - "air-interpreter-interface", - "air-lambda-ast", - "air-lambda-parser", - "air-log-targets", - "air-trace-handler", - "air-utils", - "aquavm-air-parser", - "boolinator", - "concat-idents", - "fstrings", - "log", - "maplit", - "non-empty-vec", - "once_cell", - "polyplets 0.3.2", - "semver", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror", - "tracing", -] - -[[package]] -name = "aquavm-air-parser" -version = "0.7.4" -dependencies = [ - "air-lambda-ast", - "air-lambda-parser", - "codespan", - "codespan-reporting", - "itertools", - "lalrpop", - "lalrpop-util", - "multimap", - "regex", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - -[[package]] -name = "async-trait" -version = "0.1.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.10", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "avm-data-store" -version = "0.6.1" -dependencies = [ - "avm-interface", - "serde", - "serde_bytes", -] - -[[package]] -name = "avm-interface" -version = "0.28.3" -dependencies = [ - "air-interpreter-interface", - "air-utils", - "log", - "maplit", - "polyplets 0.3.2", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "avm-server" -version = "0.31.0" -dependencies = [ - "air-interpreter-interface", - "air-utils", - "avm-data-store", - "avm-interface", - "eyre", - "log", - "maplit", - "marine-runtime", - "parking_lot 0.12.1", - "polyplets 0.3.2", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bimap" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "boolinator" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytesize" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70" -dependencies = [ - "serde", -] - -[[package]] -name = "cap-fs-ext" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d9cd7dc1d714d59974a6a68bed489c914b7b2620d1d4334d88d5ec9f29ebbd" -dependencies = [ - "cap-primitives", - "cap-std", - "io-lifetimes", - "windows-sys 0.45.0", -] - -[[package]] -name = "cap-primitives" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e41334d53bab60f94878253f8a950c231596c8bbb99b4f71b13223dd48e18c6" -dependencies = [ - "ambient-authority", - "fs-set-times", - "io-extras", - "io-lifetimes", - "ipnet", - "maybe-owned", - "rustix", - "windows-sys 0.45.0", - "winx", -] - -[[package]] -name = "cap-rand" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5ddc7e3565e7cc4bf20d0c386b328f9e0f1b83fe0bcc0e055a1f08245e2aca" -dependencies = [ - "ambient-authority", - "rand", -] - -[[package]] -name = "cap-std" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd840c16dee1df417f3985d173a2bb6ef55d48ea3d4deddcef46f31c9e7028" -dependencies = [ - "cap-primitives", - "io-extras", - "io-lifetimes", - "ipnet", - "rustix", -] - -[[package]] -name = "cap-time-ext" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c39790e8e7455a92993bea5a2e947721c395cfbc344b74f092746c55441d76" -dependencies = [ - "cap-primitives", - "once_cell", - "rustix", - "winx", -] - -[[package]] -name = "cc" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "serde", - "time 0.1.45", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "cid" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd94671561e36e4e7de75f753f577edafb0e7c05d6e4547229fdf7938fbcd2c3" -dependencies = [ - "core2", - "multibase", - "multihash", - "serde", - "unsigned-varint", -] - -[[package]] -name = "codespan" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e" -dependencies = [ - "codespan-reporting", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "concat-idents" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe0e1d9f7de897d18e590a7496b5facbe87813f746cf4b8db596ba77e07e832" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - -[[package]] -name = "cpp_demangle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "cranelift-bforest" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7379abaacee0f14abf3204a7606118f0465785252169d186337bcb75030815a" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9489fa336927df749631f1008007ced2871068544f40a202ce6d93fbf2366a7b" -dependencies = [ - "arrayvec", - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-entity", - "cranelift-isle", - "gimli", - "hashbrown", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bbb67da91ec721ed57cef2f7c5ef7728e1cd9bde9ffd3ef8601022e73e3239" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418ecb2f36032f6665dc1a5e2060a143dbab41d83b784882e97710e890a7a16d" - -[[package]] -name = "cranelift-entity" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf583f7b093f291005f9fb1323e2c37f6ee4c7909e39ce016b2e8360d461705" -dependencies = [ - "serde", -] - -[[package]] -name = "cranelift-frontend" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b66bf9e916f57fbbd0f7703ec6286f4624866bf45000111627c70d272c8dda1" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "649782a39ce99798dd6b4029e2bb318a2fbeaade1b4fa25330763c10c65bc358" - -[[package]] -name = "cranelift-native" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937e021e089c51f9749d09e7ad1c4f255c2f8686cb8c3df63a34b3ec9921bc41" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.93.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d850cf6775477747c9dfda9ae23355dd70512ffebc70cf82b85a5b111ae668b5" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser 0.100.0", - "wasmtime-types", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset 0.7.1", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cxx" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 1.0.107", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "darling" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.107", -] - -[[package]] -name = "darling_macro" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "data-encoding" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" - -[[package]] -name = "data-encoding-macro" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" -dependencies = [ - "data-encoding", - "syn 1.0.107", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "ena" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3" -dependencies = [ - "log", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "eyre" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fd-lock" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ef1a30ae415c3a691a4f41afddc2dbcd6d70baf338368d85ebc1e8ed92cedb9" -dependencies = [ - "cfg-if", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "file-per-thread-logger" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" -dependencies = [ - "env_logger", - "log", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fluence-it-types" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e8d8d5ed4d1f5d21ee5fcd0f6a7b0feea113d918e7ece4f3dd0f8a0b99caa6" -dependencies = [ - "it-to-bytes", - "nom", - "serde", - "variant_count", - "wast 8.0.0", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fs-set-times" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857cf27edcb26c2a36d84b2954019573d335bb289876113aceacacdca47a4fd4" -dependencies = [ - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "fstrings" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7845a0f15da505ac36baad0486612dab57f8b8d34e19c5470a265bbcdd572ae6" -dependencies = [ - "fstrings-proc-macro", - "proc-macro-hack", -] - -[[package]] -name = "fstrings-proc-macro" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b58c0e7581dc33478a32299182cbe5ae3b8c028be26728a47fb0a113c92d9d" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gen_test_data_dashboard" -version = "0.1.0" -dependencies = [ - "air-test-utils", - "maplit", - "serde_json", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap", - "stable_deref_trait", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "iana-time-zone" -version = "0.1.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", - "serde", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-extras" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79107d6e60d78351e11f0a2dc9d0eaf304a7efb592e92603783afb8479c7d97" -dependencies = [ - "io-lifetimes", - "windows-sys 0.45.0", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "ipnet" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" - -[[package]] -name = "is-terminal" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "it-json-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f91f4d5bc0e54de8cea8aff5da78c06609ad8816872ba3c521058321474df5c" -dependencies = [ - "serde", - "serde_derive", - "serde_json", - "thiserror", - "wasmer-interface-types-fl", -] - -[[package]] -name = "it-lilo" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14693c2c3696b46349b0bc54f8b39de8eb67951b6623f42ff6b6b2d129ff00e" -dependencies = [ - "fluence-it-types", - "it-memory-traits", - "log", - "paste", - "thiserror", -] - -[[package]] -name = "it-memory-traits" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d563f2a6baee17cf471b7951dfb96ab17fecc5e8947de39f1057cf3fb4cc906d" -dependencies = [ - "thiserror", -] - -[[package]] -name = "it-to-bytes" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729c74bb4236418898a219c6d96f14cba77456dd7c04a2e99e65e9c643709b56" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "ittapi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" -dependencies = [ - "anyhow", - "ittapi-sys", - "log", -] - -[[package]] -name = "ittapi-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" -dependencies = [ - "cc", -] - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lalrpop" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823" -dependencies = [ - "ascii-canvas", - "atty", - "bit-set", - "diff", - "ena", - "itertools", - "lalrpop-util", - "petgraph", - "pico-args", - "regex", - "regex-syntax", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "lalrpop-util" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4" -dependencies = [ - "regex", -] - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "marine-core" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f8bfd5e13d8791cb3f02d281fe007f2e96458b806e6a9d21ad3a680908c53f" -dependencies = [ - "anyhow", - "bytesize", - "it-lilo", - "it-memory-traits", - "log", - "marine-it-generator", - "marine-it-interfaces", - "marine-it-parser", - "marine-min-it-version", - "marine-module-info-parser", - "marine-module-interface", - "marine-utils", - "marine-wasm-backend-traits", - "marine-wasmtime-backend", - "multimap", - "once_cell", - "paste", - "semver", - "serde", - "thiserror", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-it-generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b3410e5ce417b6cefc497cd7e5c667b6af492b0e1d505f61b489e9f24b9bde" -dependencies = [ - "it-lilo", - "marine-it-parser", - "marine-macro-impl", - "once_cell", - "serde", - "serde_json", - "thiserror", - "walrus", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-it-interfaces" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fdf6c3d6ff2875d9c6c0ffc9cdde80ad22a4d61a1b4312d5c7ee83b2b7e273" -dependencies = [ - "multimap", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-it-parser" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00bb7e477431bf04d8eae80ee18c473fc87ed182d69bf024a14698478e1f56f" -dependencies = [ - "anyhow", - "itertools", - "marine-it-interfaces", - "marine-module-interface", - "marine-wasm-backend-traits", - "nom", - "semver", - "serde", - "thiserror", - "walrus", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-macro" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e03da22f641984aad5229f780d190502196d1c0bf908d3d17f5d6bcba73e525" -dependencies = [ - "marine-macro-impl", - "marine-rs-sdk-main", -] - -[[package]] -name = "marine-macro-impl" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca474b63cabaf8d7d9b38de87d630023cbc91ddc77e92f9c7bb745462a131b44" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn 1.0.107", -] - -[[package]] -name = "marine-min-it-version" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a501fd122de0e7ffd4b97ed0431a7ff55c09aaab0ac72486d09cdd0b9555b32" -dependencies = [ - "once_cell", - "semver", -] - -[[package]] -name = "marine-module-info-parser" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e0b20701e6f55911d341f2b659a7d9f36ba94ee15419b8166c00ddc7d65ce7" -dependencies = [ - "anyhow", - "chrono", - "marine-rs-sdk-main", - "marine-wasm-backend-traits", - "semver", - "serde", - "thiserror", - "walrus", -] - -[[package]] -name = "marine-module-interface" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc19dfc36acc161498a2eb02baa81467ab78535b2d0b0726edd8c50a80263457" -dependencies = [ - "anyhow", - "itertools", - "marine-it-interfaces", - "nom", - "semver", - "serde", - "thiserror", - "walrus", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-rs-sdk" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfeeb7b8cd98e32276fabfe6ab095a6aae793f3f080e7eb1c3d36b1b762397c" -dependencies = [ - "marine-macro", - "marine-rs-sdk-main", - "marine-timestamp-macro", - "polyplets 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde", -] - -[[package]] -name = "marine-rs-sdk-main" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43e6eac611bc5b96e80a3f3e2621eeded69fb56389aa83b6ea76ec0f243ef23" -dependencies = [ - "log", - "serde", -] - -[[package]] -name = "marine-runtime" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "becc06f602870c90d26b27a6d33fbbed31f3f8727e815fbad425ea4a7f237da2" -dependencies = [ - "bytesize", - "it-json-serde", - "it-memory-traits", - "itertools", - "log", - "marine-core", - "marine-module-interface", - "marine-rs-sdk", - "marine-rs-sdk-main", - "marine-utils", - "marine-wasm-backend-traits", - "marine-wasmtime-backend", - "parking_lot 0.12.1", - "safe-transmute", - "serde", - "serde_derive", - "serde_json", - "serde_with", - "thiserror", - "toml", - "wasmer-interface-types-fl", -] - -[[package]] -name = "marine-timestamp-macro" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ea4557a757e9f4d04a0b6afb047431a246963268a4cab56c62cb5355457cb2f" -dependencies = [ - "chrono", - "quote", -] - -[[package]] -name = "marine-utils" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e86cb57ff0e2fdc8e188a52d388287d38e5cc781eddd09a82d20f8ee1f48b80" - -[[package]] -name = "marine-wasm-backend-traits" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a31fcefa80ee7d067b22456fa834dd64b2f82de0443cfb7f51ef7df83f9255a" -dependencies = [ - "anyhow", - "it-memory-traits", - "multimap", - "paste", - "thiserror", - "wasmer-interface-types-fl", - "wasmparser 0.101.1", -] - -[[package]] -name = "marine-wasmtime-backend" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a8aeb3e06867363bd177dba64dee12b2166343bcf917a4d1b322e577d4f65a5" -dependencies = [ - "anyhow", - "it-memory-traits", - "log", - "marine-wasm-backend-traits", - "multimap", - "paste", - "wasmer-interface-types-fl", - "wasmtime", - "wasmtime-wasi", -] - -[[package]] -name = "maybe-owned" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memfd" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" -dependencies = [ - "rustix", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e5d911412e631e1de11eb313e4dd71f73fd964401102aab23d6c8327c431ba" -dependencies = [ - "core2", - "digest", - "multihash-derive", - "sha2", - "unsigned-varint", -] - -[[package]] -name = "multihash-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" -dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.107", - "synstructure", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" -dependencies = [ - "serde", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "non-empty-vec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceeba69aa8d4c53cdceeac8f17eb2656bb88b468bbe6c0889d34edfdea26ec8b" -dependencies = [ - "serde", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "crc32fast", - "hashbrown", - "indexmap", - "memchr", -] - -[[package]] -name = "object-pool" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee9a3e7196d09ec86002b939f1576e8e446d58def8fd48fe578e2c72d5328d68" -dependencies = [ - "parking_lot 0.11.2", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.6", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.42.0", -] - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pico-args" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "polyplets" -version = "0.3.2" -dependencies = [ - "marine-macro", - "marine-rs-sdk-main", - "serde", -] - -[[package]] -name = "polyplets" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c051f220264e391afae06b6dceda199d523ee1dc7ae8e8cba4119a378dd411f" -dependencies = [ - "marine-macro", - "marine-rs-sdk-main", - "serde", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.107", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rayon" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "regalloc2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "regex" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "rustc-demangle" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" - -[[package]] -name = "rustix" -version = "0.36.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "itoa", - "libc", - "linux-raw-sys", - "once_cell", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "safe-transmute" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a01dab6acf992653be49205bdd549f32f17cb2803e8eacf1560bf97259aae8" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.158" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.158" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.10", -] - -[[package]] -name = "serde_json" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c" -dependencies = [ - "base64", - "chrono", - "hex", - "indexmap", - "serde", - "serde_json", - "serde_with_macros", - "time 0.3.17", -] - -[[package]] -name = "serde_with_macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "shellexpand" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" -dependencies = [ - "dirs", -] - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slice-group-by" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "string_cache" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot 0.12.1", - "phf_shared", - "precomputed-hash", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck 0.4.0", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.107", -] - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "unicode-xid", -] - -[[package]] -name = "system-interface" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f355df185d945435f24c51fda9bf01bea6acb6c0b753e1241e5cc05413a659d4" -dependencies = [ - "bitflags", - "cap-fs-ext", - "cap-std", - "fd-lock", - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", - "winx", -] - -[[package]] -name = "target-lexicon" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" - -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.10", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unsigned-varint" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "variant_count" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walrus" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8" -dependencies = [ - "anyhow", - "id-arena", - "leb128", - "log", - "walrus-macro", - "wasmparser 0.77.0", -] - -[[package]] -name = "walrus-macro" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasi-cap-std-sync" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e90aedcb27963f120aaa7d27216c463f7e8a4f8277434dac88c836a856325dd" -dependencies = [ - "anyhow", - "async-trait", - "cap-fs-ext", - "cap-rand", - "cap-std", - "cap-time-ext", - "fs-set-times", - "io-extras", - "io-lifetimes", - "is-terminal", - "once_cell", - "rustix", - "system-interface", - "tracing", - "wasi-common", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasi-common" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6ce6df8b37388a7772aacb9c5d4e9384f97f0abb1984983f892471c952e5be" -dependencies = [ - "anyhow", - "bitflags", - "cap-rand", - "cap-std", - "io-extras", - "rustix", - "thiserror", - "tracing", - "wasmtime", - "wiggle", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.107", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "wasm-encoder" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasmer-interface-types-fl" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cd52371bfc227c904a0ab1ff478c287d2f74fa371fcff1d2e157444faf8fda2" -dependencies = [ - "fluence-it-types", - "it-lilo", - "it-memory-traits", - "it-to-bytes", - "itertools", - "log", - "nom", - "safe-transmute", - "semver", - "serde", - "serde_json", - "thiserror", - "wast 8.0.0", -] - -[[package]] -name = "wasmparser" -version = "0.77.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" - -[[package]] -name = "wasmparser" -version = "0.100.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" -dependencies = [ - "indexmap", - "url", -] - -[[package]] -name = "wasmparser" -version = "0.101.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2f22ef84ac5666544afa52f326f13e16f3d019d2e61e704fd8091c9358b130" -dependencies = [ - "indexmap", - "url", -] - -[[package]] -name = "wasmtime" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e89f9819523447330ffd70367ef4a18d8c832e24e8150fe054d1d912841632" -dependencies = [ - "anyhow", - "bincode", - "cfg-if", - "indexmap", - "libc", - "log", - "object", - "once_cell", - "paste", - "psm", - "rayon", - "serde", - "target-lexicon", - "wasmparser 0.100.0", - "wasmtime-cache", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-jit", - "wasmtime-runtime", - "wat", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd3a5e46c198032da934469f3a6e48649d1f9142438e4fd4617b68a35644b8a" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "wasmtime-cache" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b389ae9b678b9c3851091a4804f4182d688d27aff7abc9aa37fa7be37d8ecffa" -dependencies = [ - "anyhow", - "base64", - "bincode", - "directories-next", - "file-per-thread-logger", - "log", - "rustix", - "serde", - "sha2", - "toml", - "windows-sys 0.42.0", - "zstd", -] - -[[package]] -name = "wasmtime-cranelift" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b2c92a08c0db6efffd88fdc97d7aa9c7c63b03edb0971dbca745469f820e8c" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli", - "log", - "object", - "target-lexicon", - "thiserror", - "wasmparser 0.100.0", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-environ" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a6db9fc52985ba06ca601f2ff0ff1f526c5d724c7ac267b47326304b0c97883" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli", - "indexmap", - "log", - "object", - "serde", - "target-lexicon", - "thiserror", - "wasmparser 0.100.0", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-jit" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77e3a52cd84d0f7f18554afa8060cfe564ccac61e3b0802d3fd4084772fa5f6" -dependencies = [ - "addr2line", - "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli", - "ittapi", - "log", - "object", - "rustc-demangle", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" -dependencies = [ - "object", - "once_cell", - "rustix", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67d412e9340ab1c83867051d8d1d7c90aa8c9afc91da086088068e2734e25064" -dependencies = [ - "cfg-if", - "libc", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-runtime" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d594e791b5fdd4dbaf8cf7ae62f2e4ff85018ce90f483ca6f42947688e48827d" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap", - "libc", - "log", - "mach", - "memfd", - "memoffset 0.6.5", - "paste", - "rand", - "rustix", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-types" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6688d6f96d4dbc1f89fab626c56c1778936d122b5f4ae7a57c2eb42b8d982e2" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser 0.100.0", -] - -[[package]] -name = "wasmtime-wasi" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e749611f4ea64f19ad4da2324c86043f49ad946e6cc4ce057308d1319b2ba6" -dependencies = [ - "anyhow", - "wasi-cap-std-sync", - "wasi-common", - "wasmtime", - "wiggle", -] - -[[package]] -name = "wast" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9df3d716118a503b2f6bbb6ff46b21997ab0cc167b01de7a188e45e4b01e8d" -dependencies = [ - "leb128", -] - -[[package]] -name = "wast" -version = "35.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" -dependencies = [ - "leb128", -] - -[[package]] -name = "wast" -version = "55.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" -dependencies = [ - "wast 55.0.0", -] - -[[package]] -name = "wiggle" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2420f80af94fc0e6f54ec45de6f6eb5b06b9b9ad2d1bd1923ed8a1288031b4" -dependencies = [ - "anyhow", - "async-trait", - "bitflags", - "thiserror", - "tracing", - "wasmtime", - "wiggle-macro", -] - -[[package]] -name = "wiggle-generate" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93b0e0ff7e9d9c0b390475c07eedfeddb4e4259baba00032dacfe079616b689a" -dependencies = [ - "anyhow", - "heck 0.4.0", - "proc-macro2", - "quote", - "shellexpand", - "syn 1.0.107", - "witx", -] - -[[package]] -name = "wiggle-macro" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750332a587ddc8372d260ea1792a276b1c908cd93782e2da30c19db075d4d7a8" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", - "wiggle-generate", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "winx" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "129cd8ee937d535e1a239d9d3c9c0525af0454bc0967d9211a251be062513520" -dependencies = [ - "bitflags", - "io-lifetimes", - "windows-sys 0.45.0", -] - -[[package]] -name = "witx" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" -dependencies = [ - "anyhow", - "log", - "thiserror", - "wast 35.0.2", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" -dependencies = [ - "cc", - "libc", - "pkg-config", -] diff --git a/junk/gen_test_data/Cargo.toml b/junk/gen_test_data/Cargo.toml deleted file mode 100644 index b3fd724a..00000000 --- a/junk/gen_test_data/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "gen_test_data_dashboard" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -air-test-utils = { path = "../../crates/air-lib/test-utils", features = ["test_with_native_code"] } -maplit = "1.0.2" -serde_json = "1.0.91" diff --git a/junk/gen_test_data/src/dashboard/dashboard.air b/junk/gen_test_data/src/dashboard/dashboard.air deleted file mode 120000 index 152a5371..00000000 --- a/junk/gen_test_data/src/dashboard/dashboard.air +++ /dev/null @@ -1 +0,0 @@ -../../../../benches/performance_metering/dashboard/script.air \ No newline at end of file diff --git a/junk/gen_test_data/src/dashboard/peers b/junk/gen_test_data/src/dashboard/peers deleted file mode 100644 index b179313f..00000000 --- a/junk/gen_test_data/src/dashboard/peers +++ /dev/null @@ -1,7 +0,0 @@ -12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9 -12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE1 -12D3KooWBUJifCTgaxAUrcM9JysqCcS4CS8tiYH5hExbdWCAoNwb -12D3KooWJbJFaZ3k5sNd8DjQgg3aERoKtBAnirEvPV8yp76kEXHB -12D3KooWCKCeqLPSgMnDjyFsJuWqREDtKNHx1JEBiwaMXhCLNTRb -12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz -12D3KooWPnLxnY71JDxvB3zbjKu9k1BCYNthGZw6iGrLYsR1RnWM diff --git a/junk/gen_test_data/src/main.rs b/junk/gen_test_data/src/main.rs deleted file mode 100644 index 04d6b5b9..00000000 --- a/junk/gen_test_data/src/main.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2023 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -mod dashboard; -mod network_explore; - -use std::fs::File; -use std::io::Write; - -fn main() -> std::io::Result<()> { - let dashboard_datas = dashboard::dashboard(); - save_datas("dashboard", &dashboard_datas.0, &dashboard_datas.1)?; - - let explore_datas = network_explore::network_explore(); - save_datas("explore", &explore_datas.0, &explore_datas.1)?; - - Ok(()) -} - -fn save_datas(prefix: &str, prev_data: &[u8], current_data: &[u8]) -> std::io::Result<()> { - let mut prev = File::create(format!("{}_prev_data.json", prefix))?; - prev.write_all(prev_data)?; - - let mut cur = File::create(format!("{}_cur_data.json", prefix))?; - cur.write_all(current_data)?; - Ok(()) -} diff --git a/junk/gen_test_data/src/network_explore.air b/junk/gen_test_data/src/network_explore.air deleted file mode 120000 index e8be3f4e..00000000 --- a/junk/gen_test_data/src/network_explore.air +++ /dev/null @@ -1 +0,0 @@ -../../../benches/performance_metering/network_explore/script.air \ No newline at end of file diff --git a/junk/gen_test_data/src/network_explore.rs b/junk/gen_test_data/src/network_explore.rs deleted file mode 100644 index 970fad1e..00000000 --- a/junk/gen_test_data/src/network_explore.rs +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2023 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -use air_test_utils::prelude::*; - -pub(crate) fn network_explore() -> (Vec, Vec) { - let relay_id = "relay_id"; - let client_id = "client_id"; - let set_variables_state = maplit::hashmap!( - "relay".to_string() => json!(relay_id), - "client".to_string() => json!(client_id), - ); - - let client_call_service = set_variables_call_service(set_variables_state, VariableOptionSource::Argument(0)); - let mut client = create_avm(client_call_service, client_id); - - let client_1_id = "client_1_id"; - let client_2_id = "client_2_id"; - let client_3_id = "client_3_id"; - - let relay_call_service = set_variable_call_service(json!([client_1_id, client_2_id, client_3_id, relay_id])); - let mut relay = create_avm(relay_call_service, relay_id); - - let client_1_call_service = set_variable_call_service(json!([client_1_id, client_3_id, relay_id, client_2_id])); - let mut client_1 = create_avm(client_1_call_service, client_1_id); - - let client_2_call_service = set_variable_call_service(json!([relay_id, client_3_id, client_1_id, client_2_id])); - let mut client_2 = create_avm(client_2_call_service, client_2_id); - - let client_3_call_service = set_variable_call_service(json!([relay_id, client_3_id, client_1_id, client_2_id])); - let mut client_3 = create_avm(client_3_call_service, client_3_id); - - let script = include_str!("network_explore.air"); - - let client_result = checked_call_vm!(client, <_>::default(), script, "", ""); - assert_next_pks!(&client_result.next_peer_pks, &[relay_id]); - - let relay_result = checked_call_vm!(relay, <_>::default(), script, "", client_result.data.clone()); - assert_next_pks!(&relay_result.next_peer_pks, &[client_1_id]); - - let client_1_result = checked_call_vm!(client_1, <_>::default(), script, "", relay_result.data.clone()); - assert_next_pks!(&client_1_result.next_peer_pks, &[client_2_id]); - - let client_2_result = checked_call_vm!(client_2, <_>::default(), script, "", client_1_result.data.clone()); - assert_next_pks!(&client_2_result.next_peer_pks, &[client_3_id]); - - let client_3_result = checked_call_vm!(client_3, <_>::default(), script, "", client_2_result.data.clone()); - assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id]); - - let relay_result = checked_call_vm!( - relay, - <_>::default(), - script, - relay_result.data, - client_3_result.data.clone() - ); - // assert_next_pks!(&relay_result.next_peer_pks, &[client_1_id]); - - let client_1_result = checked_call_vm!( - client_1, - <_>::default(), - script, - client_1_result.data, - relay_result.data.clone() - ); - // assert_next_pks!(&client_1_result.next_peer_pks, &[client_3_id]); - - let client_3_result = checked_call_vm!( - client_3, - <_>::default(), - script, - client_3_result.data, - client_1_result.data.clone() - ); - // assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id]); - - let relay_result = checked_call_vm!( - relay, - <_>::default(), - script, - relay_result.data, - client_3_result.data.clone() - ); - assert_next_pks!(&relay_result.next_peer_pks, &[client_2_id]); - - let client_2_result = checked_call_vm!( - client_2, - <_>::default(), - script, - client_2_result.data, - relay_result.data.clone() - ); - assert_next_pks!(&client_2_result.next_peer_pks, &[client_3_id]); - - let client_3_result = checked_call_vm!( - client_3, - <_>::default(), - script, - client_3_result.data, - client_2_result.data.clone() - ); - assert_next_pks!(&client_3_result.next_peer_pks, &[relay_id]); - - ( - relay_result.data, - client_3_result.data.clone() - ) -} diff --git a/tools/cli/air/Cargo.toml b/tools/cli/air/Cargo.toml index 3df8114b..a1abad31 100644 --- a/tools/cli/air/Cargo.toml +++ b/tools/cli/air/Cargo.toml @@ -38,6 +38,8 @@ workspaces = { version = "0.7.0", optional = true } [features] default = ["wasm"] wasm = ["air-test-utils"] +gen_signatures = ["aquavm-air/gen_signatures"] +check_signatures = ["aquavm-air/check_signatures"] near = [ "dep:near-sdk", "dep:tokio", "dep:workspaces" ] [[bin]] diff --git a/tools/cli/performance_metering/performance_metering/db.py b/tools/cli/performance_metering/performance_metering/db.py index cd6b0b08..d5625b75 100644 --- a/tools/cli/performance_metering/performance_metering/db.py +++ b/tools/cli/performance_metering/performance_metering/db.py @@ -21,39 +21,39 @@ import logging import platform from typing import List, Optional -from .helpers import get_host_id, get_aquavm_version, intermediate_temp_file +from .helpers import ( + canonicalize_features, get_host_id, get_aquavm_version, + intermediate_temp_file +) DEFAULT_JSON_PATH = "benches/PERFORMANCE.json" -DEFAULT_TEXT_PATH = "benches/PERFORMANCE.yaml" AQUAVM_TOML_PATH = "air/Cargo.toml" class Db: """Performance measurement database.""" - path: str + json_path: str host_id: str data: hash def __init__( - self, - json_path: Optional[str], - text_path: Optional[str], - host_id=None + self, + json_path: Optional[str], + host_id=None, + features: Optional[str] = None ): """Load data from file, if it exits.""" if json_path is None: json_path = DEFAULT_JSON_PATH self.json_path = json_path - if text_path is None: - text_path = DEFAULT_TEXT_PATH - self.text_path = text_path - if host_id is None: host_id = get_host_id() self.host_id = host_id + self.features = canonicalize_features(features) or '' + try: with open(json_path, 'r', encoding="utf-8") as inp: self.data = json.load(inp) @@ -81,6 +81,9 @@ class Db: bench_info["comment"] = comment self.data[self.host_id]["benches"][bench_name] = bench_info self.data[self.host_id]["platform"] = platform.platform() + + self.data[self.host_id]["features"] = self.features + self.data[self.host_id]["datetime"] = str( datetime.datetime.now(datetime.timezone.utc) ) diff --git a/tools/cli/performance_metering/performance_metering/helpers.py b/tools/cli/performance_metering/performance_metering/helpers.py index cada28f1..90364e29 100644 --- a/tools/cli/performance_metering/performance_metering/helpers.py +++ b/tools/cli/performance_metering/performance_metering/helpers.py @@ -84,10 +84,20 @@ def intermediate_temp_file(target_file: str): yield out out.flush() os.rename(out.name, target_file) - except: - out.close() - try: - os.remove(out.name) - except OSError: - pass - raise + out = None + finally: + if out is not None: + out.close() + try: + os.remove(out.name) + except OSError: + pass + + +def canonicalize_features(features: Optional[str]) -> Optional[str]: + """Canonicalize comma-separate Rust feature list.""" + if features is None: + return None + uniq_features = set(features.split(',')) + sorted_features = sorted(uniq_features) + return ','.join(sorted_features) diff --git a/tools/cli/performance_metering/performance_metering/main.py b/tools/cli/performance_metering/performance_metering/main.py index 78a40215..46941fb8 100644 --- a/tools/cli/performance_metering/performance_metering/main.py +++ b/tools/cli/performance_metering/performance_metering/main.py @@ -35,12 +35,13 @@ def main(): run_subparser.add_argument("--host-id", required=False, type=str) run_subparser.add_argument("--bench-dir", required=False, type=str) run_subparser.add_argument("--repeat", required=False, type=int, default=1) + run_subparser.add_argument("--features", required=False) run_subparser.add_argument( "--no-prepare-binaries", action='store_false', dest='prepare_binaries', ) - run_subparser.add_argument("--tracing-params", type=str, default="trace") + run_subparser.add_argument("--tracing-params", type=str, default="info") args = parser.parse_args() diff --git a/tools/cli/performance_metering/performance_metering/run.py b/tools/cli/performance_metering/performance_metering/run.py index 3cd11f83..137aeb11 100644 --- a/tools/cli/performance_metering/performance_metering/run.py +++ b/tools/cli/performance_metering/performance_metering/run.py @@ -36,9 +36,13 @@ logger = logging.getLogger(__name__) def _prepare(args): """Prepare the environment: build the tools required.""" if args.prepare_binaries: + if args.features: + features = 'marine,' + args.features + else: + features = 'marine' logger.info("Build air-interpreter...") subprocess.check_call([ - "marine", "build", "--release", "--features", "marine", + "marine", "build", "--release", "--features", features, "--package", "air-interpreter", ]) logger.info("Build air-trace...") @@ -47,7 +51,7 @@ def _prepare(args): ]) -def discover_tests(bench_dir: typing.Optional[str]) -> list[Bench]: +def discover_tests(bench_dir: typing.Optional[str]) -> typing.List[Bench]: """Discover bench suite elements.""" if bench_dir is None: bench_dir = DEFAULT_TEST_DIR @@ -66,7 +70,7 @@ def run(args): _prepare(args) suite = discover_tests(args.bench_dir) - with Db(args.path, args.host_id) as db: + with Db(args.path, features=args.features, host_id=args.host_id) as db: for bench in suite: raw_stats = bench.run(args.repeat, args.tracing_params) walker = TraceWalker() @@ -77,9 +81,6 @@ def run(args): memory_sizes = walker.get_memory_sizes(args.repeat) db.record(bench, combined_stats, total_time, memory_sizes) - with ( - intermediate_temp_file( - args.report_path or DEFAULT_REPORT_PATH) as out - ): + with intermediate_temp_file(args.report_path or DEFAULT_REPORT_PATH) as out: report = TextReporter(db.data) report.save_text_report(out) diff --git a/tools/cli/performance_metering/performance_metering/text_report.py b/tools/cli/performance_metering/performance_metering/text_report.py index 37e00240..2cea5c91 100644 --- a/tools/cli/performance_metering/performance_metering/text_report.py +++ b/tools/cli/performance_metering/performance_metering/text_report.py @@ -17,7 +17,9 @@ class TextReporter: - """A generator for human readable text report.""" + """ + A generator for human readable text report. + """ data: dict indent_step = 2 @@ -42,6 +44,15 @@ class TextReporter: indent=indent, file=file) _print_indent("Benches:", indent=indent, file=file) + try: + features = machine["features"] + except KeyError: + pass + else: + _print_indent( + "Features: {}".format(features), + indent=indent, file=file) + nested_indent = indent + self.indent_step for bench_name, bench in _sorted_items(machine["benches"]): self._save_bench( @@ -83,5 +94,6 @@ class TextReporter: def _print_indent(line, indent, file): print("{:<{indent}}{}".format("", line, indent=indent), file=file) + def _sorted_items(d): return sorted(d.items(), key=lambda pair: pair[0]) diff --git a/tools/cli/performance_metering/performance_metering/trace_walker.py b/tools/cli/performance_metering/performance_metering/trace_walker.py index cfe9664d..48b86d76 100644 --- a/tools/cli/performance_metering/performance_metering/trace_walker.py +++ b/tools/cli/performance_metering/performance_metering/trace_walker.py @@ -97,7 +97,7 @@ class TraceRecord: ) -def _common_prefix(nested: dict) -> list[str]: +def _common_prefix(nested: dict) -> List[str]: items = iter(nested.keys()) prefix = next(items).split("::")[:-1] for fname in items: @@ -150,7 +150,8 @@ class TraceWalker: if "message" in raw_fields: message = raw_fields["message"] if message in ("enter", "close"): - span = raw_rec["span"].get("name", "ERROR_missing_span.name") + span = raw_rec["span"].get( + "name", "ERROR_missing_span.name") target = raw_rec.get("target", None) spans = [sp["name"] for sp in raw_rec.get("spans", [])] logger.debug("Message: %r", message) @@ -163,7 +164,8 @@ class TraceWalker: rec.execution_time += parse_trace_timedelta(time_busy) elif message == "enter": assert span == spans[-1] - rec = TraceRecord(message, span, target, None, spans[:-1]) + rec = TraceRecord( + message, span, target, None, spans[:-1]) self._inject_enter_rec(rec) if "memory_size" in raw_fields: self._handle_memory_stat(raw_fields["memory_size"]) @@ -195,8 +197,7 @@ class TraceWalker: min_size = self.memory_sizes[0] max_size = self.memory_sizes[-1] return [format_size(min_size), format_size(max_size)] - else: - return None + return None def _find_parent(self, rec: TraceRecord) -> TraceRecord: parent = _RootStub(self.root) diff --git a/tools/wasm/air-near-contract/Cargo.lock b/tools/wasm/air-near-contract/Cargo.lock index ff4d19c5..144a3d4f 100644 --- a/tools/wasm/air-near-contract/Cargo.lock +++ b/tools/wasm/air-near-contract/Cargo.lock @@ -20,10 +20,21 @@ dependencies = [ ] [[package]] -name = "aho-corasick" -version = "1.0.3" +name = "ahash" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8f9420f797f2d9e935edf629310eb938a0d839f984e25327f3c7eed22300c" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" dependencies = [ "memchr", ] @@ -43,6 +54,7 @@ dependencies = [ "multihash 0.18.1", "serde", "serde_json", + "sha2 0.10.7", ] [[package]] @@ -53,13 +65,15 @@ dependencies = [ "air-interpreter-signatures", "air-utils", "aquavm-air-parser", + "fluence-keypair", "newtype_derive", "num-traits", "once_cell", "polyplets", - "semver 1.0.18", + "semver 1.0.19", "serde", "serde_json", + "thiserror", "tracing", ] @@ -78,10 +92,11 @@ name = "air-interpreter-signatures" version = "0.1.1" dependencies = [ "air-interpreter-cid", + "borsh 0.10.3", + "borsh-derive 0.10.3", "bs58 0.5.0", "fluence-keypair", "serde", - "serde_json", ] [[package]] @@ -180,7 +195,7 @@ dependencies = [ "non-empty-vec", "once_cell", "polyplets", - "semver 1.0.18", + "semver 1.0.19", "serde", "serde_json", "strum", @@ -295,9 +310,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "bitvec" @@ -324,37 +339,37 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec 0.7.4", "cc", "cfg-if 1.0.0", - "constant_time_eq 0.3.0", + "constant_time_eq", ] [[package]] @@ -381,18 +396,41 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" dependencies = [ - "borsh-derive", + "borsh-derive 0.9.3", "hashbrown 0.11.2", ] +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + [[package]] name = "borsh-derive" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", @@ -409,6 +447,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "borsh-schema-derive-internal" version = "0.9.3" @@ -420,6 +469,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bs58" version = "0.4.0" @@ -437,9 +497,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -455,9 +515,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytesize" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" [[package]] name = "c2-chacha" @@ -471,9 +531,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "libc", ] @@ -492,18 +552,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time", "wasm-bindgen", - "winapi", + "windows-targets", ] [[package]] @@ -554,7 +613,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f76990911f2267d837d9d0ad060aa63aaad170af40904b29461734c339030d4d" dependencies = [ "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -563,12 +622,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" -[[package]] -name = "constant_time_eq" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" - [[package]] name = "constant_time_eq" version = "0.3.0" @@ -646,9 +699,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622178105f911d937a42cdb140730ba4a3ed2becd8ae6ce39c7d28b5d75d4588" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -669,7 +722,7 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -769,9 +822,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" +checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" [[package]] name = "easy-ext" @@ -820,9 +873,8 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" dependencies = [ - "curve25519-dalek 4.1.0", + "curve25519-dalek 4.1.1", "ed25519 2.2.2", - "rand_core 0.6.4", "serde", "sha2 0.10.7", "zeroize", @@ -844,10 +896,16 @@ dependencies = [ ] [[package]] -name = "errno" -version = "0.3.2" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", @@ -971,14 +1029,17 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", +] [[package]] name = "hashbrown" @@ -994,9 +1055,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -1055,12 +1116,12 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "equivalent", + "hashbrown 0.14.0", ] [[package]] @@ -1156,19 +1217,19 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.147" +version = "0.2.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" [[package]] name = "libp2p-identity" version = "0.2.3" -source = "git+https://github.com/fluencelabs/rust-libp2p.git?branch=rand-feature#79b3bdd79f393a8be06b682190780d2bdd41a05e" +source = "git+https://github.com/fluencelabs/rust-libp2p.git?branch=rand-feature#4143eafbff495aa7653e36a4fd6f44f8c2f91116" dependencies = [ "bs58 0.5.0", "ed25519-dalek 2.0.0", "log", - "multihash 0.19.0", + "multihash 0.19.1", "quick-protobuf", "sha2 0.10.7", "thiserror", @@ -1177,9 +1238,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" [[package]] name = "lock_api" @@ -1193,9 +1254,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "maplit" @@ -1272,9 +1333,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memory_units" @@ -1312,9 +1373,9 @@ dependencies = [ [[package]] name = "multihash" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd59dcc2bbe70baabeac52cd22ae52c55eefe6c38ff11a9439f16a350a939f2" +checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" dependencies = [ "core2", "unsigned-varint", @@ -1349,9 +1410,9 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "885db39b08518fa700b73fa2214e8adbbfba316ba82dd510f50519173eadaf73" dependencies = [ - "borsh", + "borsh 0.9.3", "schemars", - "semver 1.0.18", + "semver 1.0.19", "serde", ] @@ -1361,7 +1422,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d258582a1878e6db67400b0504a5099db85718d22c2e07f747fe1706ae7150" dependencies = [ - "borsh", + "borsh 0.9.3", "serde", ] @@ -1373,7 +1434,7 @@ checksum = "1e75673d69fd7365508f3d32483669fe45b03bfb34e4d9363e90adae9dfb416c" dependencies = [ "arrayref", "blake2", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "c2-chacha", "curve25519-dalek 3.2.0", @@ -1397,7 +1458,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ad1a9a1640539c81f065425c31bffcfbf6b31ef1aeaade59ce905f5df6ac860" dependencies = [ - "borsh", + "borsh 0.9.3", "byteorder", "bytesize", "chrono", @@ -1427,7 +1488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91d508f0fc340f6461e4e256417685720d3c4c00bb5a939b105160e49137caba" dependencies = [ "base64 0.11.0", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "derive_more", "near-account-id", @@ -1466,7 +1527,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15eb3de2defe3626260cc209a6cdb985c6b27b0bd4619fad97dcfae002c3c5bd" dependencies = [ "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "near-abi", "near-crypto", @@ -1506,7 +1567,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0da466a30f0446639cbd788c30865086fac3e8dcb07a79e51d2b0775ed4261e" dependencies = [ - "borsh", + "borsh 0.9.3", "near-account-id", "near-rpc-error-macro", "serde", @@ -1519,7 +1580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81b534828419bacbf1f7b11ef7b00420f248c548c485d3f0cfda8bb6931152f2" dependencies = [ "base64 0.13.1", - "borsh", + "borsh 0.9.3", "bs58 0.4.0", "byteorder", "near-account-id", @@ -1676,9 +1737,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", "indexmap", @@ -1701,9 +1762,9 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project-lite" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pkcs8" @@ -1797,9 +1858,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -1815,9 +1876,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -1939,9 +2000,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.3" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", @@ -1951,9 +2012,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", @@ -1962,9 +2023,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "ripemd" @@ -1996,16 +2057,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.18", + "semver 1.0.19", ] [[package]] name = "rustix" -version = "0.38.7" +version = "0.38.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399" +checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "errno", "libc", "linux-raw-sys", @@ -2026,9 +2087,9 @@ checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "schemars" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f" +checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" dependencies = [ "dyn-clone", "schemars_derive", @@ -2038,9 +2099,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c" +checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" dependencies = [ "proc-macro2", "quote", @@ -2062,18 +2123,18 @@ checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" [[package]] name = "semver" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.183" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -2089,13 +2150,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.183" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -2111,9 +2172,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.104" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -2168,15 +2229,15 @@ checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "smart-default" @@ -2265,9 +2326,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -2305,42 +2366,31 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.44" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.44" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", + "syn 2.0.37", ] [[package]] @@ -2396,7 +2446,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -2416,9 +2466,9 @@ checksum = "183496e014253d15abbe6235677b1392dba2d40524c88938991226baa38ac7c4" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "uint" @@ -2434,15 +2484,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -2452,9 +2502,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "unsigned-varint" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" [[package]] name = "variant_count" @@ -2478,12 +2528,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2511,7 +2555,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", "wasm-bindgen-shared", ] @@ -2533,7 +2577,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2574,9 +2618,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -2607,9 +2651,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -2622,45 +2666,45 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "wyz" @@ -2685,7 +2729,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -2694,7 +2738,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e61de68ede9ffdd69c01664f65a178c5188b73f78faa21f0936016a888ff7c" dependencies = [ - "borsh", + "borsh 0.9.3", "byteorder", "crunchy", "lazy_static", diff --git a/tools/wasm/air-near-contract/Cargo.toml b/tools/wasm/air-near-contract/Cargo.toml index ab81154f..318985cc 100644 --- a/tools/wasm/air-near-contract/Cargo.toml +++ b/tools/wasm/air-near-contract/Cargo.toml @@ -32,6 +32,10 @@ overflow-checks = true [workspace] members = [] +[features] +gen_signatures = ["aquavm-air/gen_signatures"] +check_signatures = ["aquavm-air/check_signatures"] + [patch.crates-io] fluence-keypair = { git = "https://github.com/fluencelabs/trust-graph.git", branch = "lean-keypair" } libp2p-identity = { git = "https://github.com/fluencelabs/rust-libp2p.git", branch = "rand-feature" }