From a1e79d65851a08ec9f941c70e08c410f1cfdb8e4 Mon Sep 17 00:00:00 2001 From: defi0x1 <34453681+defi0x1@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:45:00 +0700 Subject: [PATCH 1/4] feat: funding fee endpoints (#7) * WIP * fix cicd * damm v2 test * add test * add events * fix comments * update cicd * update * minor fixs * use uncheckedAccount * fix comments * fix load fee vault --- .github/actions/setup-anchor/action.yml | 10 + .github/actions/setup-dep/action.yml | 7 + .github/actions/setup-solana/action.yml | 21 + .github/workflows/ci.yml | 76 + Cargo.lock | 41 + Cargo.toml | 5 + idls/damm_v2.json | 6892 +++++++++++++++++ idls/dynamic_bonding_curve.json | 6459 +++++++++++++++ libs/damm-v2/Cargo.toml | 9 + libs/damm-v2/src/lib.rs | 5 + libs/dynamic-bonding-curve/Cargo.toml | 9 + libs/dynamic-bonding-curve/src/lib.rs | 5 + package-lock.json | 55 +- package.json | 3 +- programs/dynamic-fee-sharing/Cargo.toml | 9 +- programs/dynamic-fee-sharing/src/const_pda.rs | 31 + programs/dynamic-fee-sharing/src/error.rs | 9 + programs/dynamic-fee-sharing/src/event.rs | 6 +- .../src/instructions/ix_claim_fee.rs | 12 +- .../src/instructions/ix_fund_fee.rs | 8 +- .../ix_funding_by_claim_damm_v2.rs | 143 + ...ix_funding_by_claim_dbc_creator_surplus.rs | 125 + ...unding_by_claim_dbc_creator_trading_fee.rs | 136 + ...ix_funding_by_claim_dbc_partner_surplus.rs | 125 + ...unding_by_claim_dbc_partner_trading_fee.rs | 139 + .../instructions/ix_initialize_fee_vault.rs | 10 + .../ix_initialize_fee_vault_pda.rs | 4 + .../src/instructions/mod.rs | 10 + programs/dynamic-fee-sharing/src/lib.rs | 29 + programs/dynamic-fee-sharing/src/macros.rs | 19 +- .../src/state/fee_vault.rs | 42 +- .../dynamic-fee-sharing/src/utils/token.rs | 3 +- rust-toolchain.toml | 2 + tests/claim_damm_v2.test.ts | 130 + tests/claim_dbc_creator_trading_fee.test.ts | 349 + tests/common/damm_v2.ts | 279 + tests/common/dbc.ts | 867 +++ tests/common/dfs.ts | 275 + tests/common/idl/damm_v2.ts | 5571 +++++++++++++ tests/common/idl/dynamic_bonding_curve.ts | 5248 +++++++++++++ tests/common/index.ts | 62 +- tests/common/svm.ts | 114 + tests/fee_sharing.test.ts | 7 +- tests/fee_sharing_pda.test.ts | 5 +- tests/fixtures/damm_v2.so | Bin 0 -> 1254072 bytes tests/fixtures/dynamic_bonding_curve.so | Bin 0 -> 1354864 bytes 46 files changed, 27307 insertions(+), 59 deletions(-) create mode 100644 .github/actions/setup-anchor/action.yml create mode 100644 .github/actions/setup-dep/action.yml create mode 100644 .github/actions/setup-solana/action.yml create mode 100644 .github/workflows/ci.yml create mode 100644 idls/damm_v2.json create mode 100644 idls/dynamic_bonding_curve.json create mode 100644 libs/damm-v2/Cargo.toml create mode 100644 libs/damm-v2/src/lib.rs create mode 100644 libs/dynamic-bonding-curve/Cargo.toml create mode 100644 libs/dynamic-bonding-curve/src/lib.rs create mode 100644 programs/dynamic-fee-sharing/src/const_pda.rs create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs create mode 100644 rust-toolchain.toml create mode 100644 tests/claim_damm_v2.test.ts create mode 100644 tests/claim_dbc_creator_trading_fee.test.ts create mode 100644 tests/common/damm_v2.ts create mode 100644 tests/common/dbc.ts create mode 100644 tests/common/dfs.ts create mode 100644 tests/common/idl/damm_v2.ts create mode 100644 tests/common/idl/dynamic_bonding_curve.ts create mode 100644 tests/common/svm.ts create mode 100755 tests/fixtures/damm_v2.so create mode 100755 tests/fixtures/dynamic_bonding_curve.so diff --git a/.github/actions/setup-anchor/action.yml b/.github/actions/setup-anchor/action.yml new file mode 100644 index 0000000..38ee8d2 --- /dev/null +++ b/.github/actions/setup-anchor/action.yml @@ -0,0 +1,10 @@ +name: "Setup anchor-cli" +description: "Setup node js and anchor cli" +runs: + using: "composite" + steps: + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.NODE_VERSION }} + - run: cargo install --git https://github.com/coral-xyz/anchor --tag v${{ env.ANCHOR_CLI_VERSION }} anchor-cli --locked + shell: bash diff --git a/.github/actions/setup-dep/action.yml b/.github/actions/setup-dep/action.yml new file mode 100644 index 0000000..fa998c5 --- /dev/null +++ b/.github/actions/setup-dep/action.yml @@ -0,0 +1,7 @@ +name: "Setup" +description: "Setup program dependencies" +runs: + using: "composite" + steps: + - run: sudo apt-get update && sudo apt-get install -y pkg-config build-essential libudev-dev + shell: bash diff --git a/.github/actions/setup-solana/action.yml b/.github/actions/setup-solana/action.yml new file mode 100644 index 0000000..f4e60ac --- /dev/null +++ b/.github/actions/setup-solana/action.yml @@ -0,0 +1,21 @@ +name: "Setup Solana" +description: "Setup Solana" +runs: + using: "composite" + steps: + - uses: actions/cache@v4 + name: Cache Solana Tool Suite + id: cache-solana + with: + path: | + ~/.cache/solana/ + ~/.local/share/solana/ + key: solana-${{ runner.os }}-v0000-${{ env.SOLANA_CLI_VERSION }} + - run: sh -c "$(curl -sSfL https://release.anza.xyz/v${{ env.SOLANA_CLI_VERSION }}/install)" + shell: bash + - run: echo "$HOME/.local/share/solana/install/active_release/bin/" >> $GITHUB_PATH + shell: bash + - run: solana-keygen new --no-bip39-passphrase + shell: bash + - run: solana config set --url localhost + shell: bash diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..23a9663 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,76 @@ +name: Dynamic-Fee-Sharing + +on: + pull_request: + branches: + - main + - release_0.1.1 + +env: + SOLANA_CLI_VERSION: 2.1.0 + NODE_VERSION: 22.15.0 + ANCHOR_CLI_VERSION: 0.31.0 + TOOLCHAIN: 1.76.0 + +jobs: + program_changed_files: + runs-on: ubuntu-latest + outputs: + program: ${{steps.changed-files-specific.outputs.any_changed}} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Get specific changed files + id: changed-files-specific + uses: tj-actions/changed-files@v18.6 + with: + files: | + programs/dynamic-fee-sharing + + cargo_test: + runs-on: ubuntu-latest + needs: program_changed_files + if: needs.program_changed_files.outputs.program == 'true' + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.TOOLCHAIN }} + components: clippy + # Cache rust, cargo + - uses: Swatinem/rust-cache@v1 + - run: cargo test --package dynamic-fee-sharing + shell: bash + + program_test: + runs-on: ubuntu-latest + needs: program_changed_files + if: needs.program_changed_files.outputs.program == 'true' + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-solana + - uses: ./.github/actions/setup-dep + - uses: ./.github/actions/setup-anchor + # Install pnpm + - uses: pnpm/action-setup@v3 # docs https://pnpm.io/continuous-integration#github-actions + with: + version: 9.5.0 # Optional: specify a pnpm version + # Install rust + toolchain + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.TOOLCHAIN }} + components: clippy + # Cache rust, cargo + - uses: Swatinem/rust-cache@v1 + # Cache node_modules + - uses: actions/cache@v4 + id: cache-node-modules + with: + path: ./node_modules + key: ${{ runner.os }}-${{ hashFiles('./package-lock.json') }} + # Testing + - run: pnpm install + shell: bash + - run: pnpm test + shell: bash diff --git a/Cargo.lock b/Cargo.lock index 7c036ef..eac4fea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -712,6 +712,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "const-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c06f1eb05f06cf2e380fdded278fbf056a38974299d77960555a311dcf91a52" +dependencies = [ + "keccak-const", + "sha2-const-stable", +] + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -782,6 +792,14 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "damm-v2" +version = "0.1.3" +dependencies = [ + "anchor-lang", + "bytemuck", +] + [[package]] name = "derivation-path" version = "0.2.0" @@ -819,6 +837,14 @@ dependencies = [ "subtle", ] +[[package]] +name = "dynamic-bonding-curve" +version = "0.1.6" +dependencies = [ + "anchor-lang", + "bytemuck", +] + [[package]] name = "dynamic-fee-sharing" version = "0.1.0" @@ -826,6 +852,9 @@ dependencies = [ "anchor-lang", "anchor-spl", "bytemuck", + "const-crypto", + "damm-v2", + "dynamic-bonding-curve", "num_enum", "proptest", "ruint", @@ -1100,6 +1129,12 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-const" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d8d8ce877200136358e0bbff3a77965875db3af755a11e1fa6b1b3e2df13ea" + [[package]] name = "lazy_static" version = "1.5.0" @@ -1834,6 +1869,12 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha2-const-stable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + [[package]] name = "sha3" version = "0.10.8" diff --git a/Cargo.toml b/Cargo.toml index f397704..e80623e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,8 @@ codegen-units = 1 opt-level = 3 incremental = false codegen-units = 1 + +[workspace.dependencies] +anchor-lang = {version = "0.31.1", features = ["event-cpi"]} +anchor-spl = "0.31.1" +bytemuck = { version = "1.20.0", features = ["derive", "min_const_generics"] } diff --git a/idls/damm_v2.json b/idls/damm_v2.json new file mode 100644 index 0000000..62095b1 --- /dev/null +++ b/idls/damm_v2.json @@ -0,0 +1,6892 @@ +{ + "address": "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG", + "metadata": { + "name": "cp_amm", + "version": "0.1.3", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "add_liquidity", + "discriminator": [ + 181, + 157, + 89, + 67, + 143, + 182, + 52, + 72 + ], + "accounts": [ + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The user token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The user token b account" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "AddLiquidityParameters" + } + } + } + ] + }, + { + "name": "claim_partner_fee", + "discriminator": [ + 97, + 206, + 39, + 105, + 94, + 94, + 126, + 148 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The treasury token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The treasury token b account" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "partner", + "signer": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "max_amount_a", + "type": "u64" + }, + { + "name": "max_amount_b", + "type": "u64" + } + ] + }, + { + "name": "claim_position_fee", + "discriminator": [ + 180, + 38, + 154, + 17, + 133, + 33, + 162, + 211 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The user token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The user token b account" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "claim_protocol_fee", + "discriminator": [ + 165, + 228, + 133, + 48, + 99, + 249, + 255, + 33 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_a_account", + "docs": [ + "The treasury token a account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ] + }, + { + "kind": "account", + "path": "token_a_program" + }, + { + "kind": "account", + "path": "token_a_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "token_b_account", + "docs": [ + "The treasury token b account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ] + }, + { + "kind": "account", + "path": "token_b_program" + }, + { + "kind": "account", + "path": "token_b_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "claim_fee_operator", + "docs": [ + "Claim fee operator" + ] + }, + { + "name": "operator", + "docs": [ + "Operator" + ], + "signer": true, + "relations": [ + "claim_fee_operator" + ] + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "max_amount_a", + "type": "u64" + }, + { + "name": "max_amount_b", + "type": "u64" + } + ] + }, + { + "name": "claim_reward", + "discriminator": [ + 149, + 95, + 181, + 242, + 94, + 90, + 158, + 162 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "reward_vault", + "docs": [ + "The vault token account for reward token" + ], + "writable": true + }, + { + "name": "reward_mint" + }, + { + "name": "user_token_account", + "writable": true + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "token_program" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "skip_reward", + "type": "u8" + } + ] + }, + { + "name": "close_claim_fee_operator", + "discriminator": [ + 38, + 134, + 82, + 216, + 95, + 124, + 17, + 99 + ], + "accounts": [ + { + "name": "claim_fee_operator", + "writable": true + }, + { + "name": "rent_receiver", + "writable": true + }, + { + "name": "admin", + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "close_config", + "discriminator": [ + 145, + 9, + 72, + 157, + 95, + 125, + 61, + 85 + ], + "accounts": [ + { + "name": "config", + "writable": true + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "rent_receiver", + "writable": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "close_position", + "discriminator": [ + 123, + 134, + 81, + 0, + 49, + 68, + 98, + 98 + ], + "accounts": [ + { + "name": "position_nft_mint", + "docs": [ + "position_nft_mint" + ], + "writable": true + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ], + "writable": true + }, + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "rent_receiver", + "writable": true + }, + { + "name": "owner", + "docs": [ + "Owner of position" + ], + "signer": true + }, + { + "name": "token_program", + "docs": [ + "Program to create NFT mint/token account and transfer for token22 account" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "close_token_badge", + "discriminator": [ + 108, + 146, + 86, + 110, + 179, + 254, + 10, + 104 + ], + "accounts": [ + { + "name": "token_badge", + "writable": true + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "rent_receiver", + "writable": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create_claim_fee_operator", + "discriminator": [ + 169, + 62, + 207, + 107, + 58, + 187, + 162, + 109 + ], + "accounts": [ + { + "name": "claim_fee_operator", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 102, + 95, + 111, + 112, + 101, + 114, + 97, + 116, + 111, + 114 + ] + }, + { + "kind": "account", + "path": "operator" + } + ] + } + }, + { + "name": "operator" + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create_config", + "docs": [ + "ADMIN FUNCTIONS /////" + ], + "discriminator": [ + 201, + 207, + 243, + 114, + 75, + 111, + 47, + 189 + ], + "accounts": [ + { + "name": "config", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "arg", + "path": "index" + } + ] + } + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "index", + "type": "u64" + }, + { + "name": "config_parameters", + "type": { + "defined": { + "name": "StaticConfigParameters" + } + } + } + ] + }, + { + "name": "create_dynamic_config", + "discriminator": [ + 81, + 251, + 122, + 78, + 66, + 57, + 208, + 82 + ], + "accounts": [ + { + "name": "config", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "arg", + "path": "index" + } + ] + } + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "index", + "type": "u64" + }, + { + "name": "config_parameters", + "type": { + "defined": { + "name": "DynamicConfigParameters" + } + } + } + ] + }, + { + "name": "create_position", + "discriminator": [ + 48, + 215, + 197, + 153, + 96, + 203, + 180, + 133 + ], + "accounts": [ + { + "name": "owner" + }, + { + "name": "position_nft_mint", + "docs": [ + "position_nft_mint" + ], + "writable": true, + "signer": true + }, + { + "name": "position_nft_account", + "docs": [ + "position nft account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "pool", + "writable": true + }, + { + "name": "position", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "payer", + "docs": [ + "Address paying to create the position. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "token_program", + "docs": [ + "Program to create NFT mint/token account and transfer for token22 account" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create_token_badge", + "discriminator": [ + 88, + 206, + 0, + 91, + 60, + 175, + 151, + 118 + ], + "accounts": [ + { + "name": "token_badge", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 98, + 97, + 100, + 103, + 101 + ] + }, + { + "kind": "account", + "path": "token_mint" + } + ] + } + }, + { + "name": "token_mint" + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "fund_reward", + "discriminator": [ + 188, + 50, + 249, + 165, + 93, + 151, + 38, + 63 + ], + "accounts": [ + { + "name": "pool", + "writable": true + }, + { + "name": "reward_vault", + "writable": true + }, + { + "name": "reward_mint" + }, + { + "name": "funder_token_account", + "writable": true + }, + { + "name": "funder", + "signer": true + }, + { + "name": "token_program" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "amount", + "type": "u64" + }, + { + "name": "carry_forward", + "type": "bool" + } + ] + }, + { + "name": "initialize_customizable_pool", + "discriminator": [ + 20, + 161, + 241, + 24, + 189, + 221, + 180, + 2 + ], + "accounts": [ + { + "name": "creator" + }, + { + "name": "position_nft_mint", + "docs": [ + "position_nft_mint" + ], + "writable": true, + "signer": true + }, + { + "name": "position_nft_account", + "docs": [ + "position nft account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "payer", + "docs": [ + "Address paying to create the pool. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "docs": [ + "Initialize an account to store the pool state" + ], + "writable": true + }, + { + "name": "position", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "token_a_mint", + "docs": [ + "Token a mint" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "Token b mint" + ] + }, + { + "name": "token_a_vault", + "docs": [ + "Token a vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_a_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "token_b_vault", + "docs": [ + "Token b vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_b_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "payer_token_a", + "docs": [ + "payer token a account" + ], + "writable": true + }, + { + "name": "payer_token_b", + "docs": [ + "creator token b account" + ], + "writable": true + }, + { + "name": "token_a_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_2022_program", + "docs": [ + "Program to create NFT mint/token account and transfer for token22 account" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "InitializeCustomizablePoolParameters" + } + } + } + ] + }, + { + "name": "initialize_pool", + "docs": [ + "USER FUNCTIONS ////" + ], + "discriminator": [ + 95, + 180, + 10, + 172, + 84, + 174, + 232, + 40 + ], + "accounts": [ + { + "name": "creator" + }, + { + "name": "position_nft_mint", + "docs": [ + "position_nft_mint" + ], + "writable": true, + "signer": true + }, + { + "name": "position_nft_account", + "docs": [ + "position nft account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "payer", + "docs": [ + "Address paying to create the pool. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "config", + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "docs": [ + "Initialize an account to store the pool state" + ], + "writable": true + }, + { + "name": "position", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "token_a_mint", + "docs": [ + "Token a mint" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "Token b mint" + ] + }, + { + "name": "token_a_vault", + "docs": [ + "Token a vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_a_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "token_b_vault", + "docs": [ + "Token b vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_b_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "payer_token_a", + "docs": [ + "payer token a account" + ], + "writable": true + }, + { + "name": "payer_token_b", + "docs": [ + "creator token b account" + ], + "writable": true + }, + { + "name": "token_a_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_2022_program", + "docs": [ + "Program to create NFT mint/token account and transfer for token22 account" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "InitializePoolParameters" + } + } + } + ] + }, + { + "name": "initialize_pool_with_dynamic_config", + "discriminator": [ + 149, + 82, + 72, + 197, + 253, + 252, + 68, + 15 + ], + "accounts": [ + { + "name": "creator" + }, + { + "name": "position_nft_mint", + "docs": [ + "position_nft_mint" + ], + "writable": true, + "signer": true + }, + { + "name": "position_nft_account", + "docs": [ + "position nft account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "payer", + "docs": [ + "Address paying to create the pool. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "pool_creator_authority", + "signer": true, + "relations": [ + "config" + ] + }, + { + "name": "config", + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "docs": [ + "Initialize an account to store the pool state" + ], + "writable": true + }, + { + "name": "position", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "position_nft_mint" + } + ] + } + }, + { + "name": "token_a_mint", + "docs": [ + "Token a mint" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "Token b mint" + ] + }, + { + "name": "token_a_vault", + "docs": [ + "Token a vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_a_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "token_b_vault", + "docs": [ + "Token b vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "token_b_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "payer_token_a", + "docs": [ + "payer token a account" + ], + "writable": true + }, + { + "name": "payer_token_b", + "docs": [ + "creator token b account" + ], + "writable": true + }, + { + "name": "token_a_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_2022_program", + "docs": [ + "Program to create NFT mint/token account and transfer for token22 account" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "InitializeCustomizablePoolParameters" + } + } + } + ] + }, + { + "name": "initialize_reward", + "discriminator": [ + 95, + 135, + 192, + 196, + 242, + 129, + 230, + 68 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "reward_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 114, + 101, + 119, + 97, + 114, + 100, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "pool" + }, + { + "kind": "arg", + "path": "reward_index" + } + ] + } + }, + { + "name": "reward_mint" + }, + { + "name": "signer", + "signer": true + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "token_program" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "reward_duration", + "type": "u64" + }, + { + "name": "funder", + "type": "pubkey" + } + ] + }, + { + "name": "lock_position", + "discriminator": [ + 227, + 62, + 2, + 252, + 247, + 10, + 171, + 185 + ], + "accounts": [ + { + "name": "pool", + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "vesting", + "writable": true, + "signer": true + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "VestingParameters" + } + } + } + ] + }, + { + "name": "permanent_lock_position", + "discriminator": [ + 165, + 176, + 125, + 6, + 231, + 171, + 186, + 213 + ], + "accounts": [ + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "permanent_lock_liquidity", + "type": "u128" + } + ] + }, + { + "name": "refresh_vesting", + "discriminator": [ + 9, + 94, + 216, + 14, + 116, + 204, + 247, + 0 + ], + "accounts": [ + { + "name": "pool", + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner" + } + ], + "args": [] + }, + { + "name": "remove_all_liquidity", + "discriminator": [ + 10, + 51, + 61, + 35, + 112, + 105, + 24, + 85 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The user token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The user token b account" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "token_a_amount_threshold", + "type": "u64" + }, + { + "name": "token_b_amount_threshold", + "type": "u64" + } + ] + }, + { + "name": "remove_liquidity", + "discriminator": [ + 80, + 85, + 209, + 72, + 24, + 206, + 177, + 108 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true, + "relations": [ + "position" + ] + }, + { + "name": "position", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The user token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The user token b account" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "pool" + ] + }, + { + "name": "position_nft_account", + "docs": [ + "The token account for nft" + ] + }, + { + "name": "owner", + "docs": [ + "owner of position" + ], + "signer": true + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "RemoveLiquidityParameters" + } + } + } + ] + }, + { + "name": "set_pool_status", + "discriminator": [ + 112, + 87, + 135, + 223, + 83, + 204, + 132, + 53 + ], + "accounts": [ + { + "name": "pool", + "writable": true + }, + { + "name": "admin", + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "status", + "type": "u8" + } + ] + }, + { + "name": "split_position", + "discriminator": [ + 172, + 241, + 221, + 138, + 161, + 29, + 253, + 42 + ], + "accounts": [ + { + "name": "pool", + "writable": true, + "relations": [ + "first_position", + "second_position" + ] + }, + { + "name": "first_position", + "docs": [ + "The first position" + ], + "writable": true + }, + { + "name": "first_position_nft_account", + "docs": [ + "The token account for position nft" + ] + }, + { + "name": "second_position", + "docs": [ + "The second position" + ], + "writable": true + }, + { + "name": "second_position_nft_account", + "docs": [ + "The token account for position nft" + ] + }, + { + "name": "first_owner", + "docs": [ + "Owner of first position" + ], + "signer": true + }, + { + "name": "second_owner", + "docs": [ + "Owner of second position" + ], + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "SplitPositionParameters" + } + } + } + ] + }, + { + "name": "swap", + "discriminator": [ + 248, + 198, + 158, + 145, + 225, + 117, + 135, + 200 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "docs": [ + "Pool account" + ], + "writable": true + }, + { + "name": "input_token_account", + "docs": [ + "The user token account for input token" + ], + "writable": true + }, + { + "name": "output_token_account", + "docs": [ + "The user token account for output token" + ], + "writable": true + }, + { + "name": "token_a_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_b_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_a_mint", + "docs": [ + "The mint of token a" + ] + }, + { + "name": "token_b_mint", + "docs": [ + "The mint of token b" + ] + }, + { + "name": "payer", + "docs": [ + "The user performing the swap" + ], + "signer": true + }, + { + "name": "token_a_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_b_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "referral_token_account", + "docs": [ + "referral token account" + ], + "writable": true, + "optional": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "SwapParameters" + } + } + } + ] + }, + { + "name": "update_reward_duration", + "discriminator": [ + 138, + 174, + 196, + 169, + 213, + 235, + 254, + 107 + ], + "accounts": [ + { + "name": "pool", + "writable": true + }, + { + "name": "signer", + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "new_duration", + "type": "u64" + } + ] + }, + { + "name": "update_reward_funder", + "discriminator": [ + 211, + 28, + 48, + 32, + 215, + 160, + 35, + 23 + ], + "accounts": [ + { + "name": "pool", + "writable": true + }, + { + "name": "signer", + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "new_funder", + "type": "pubkey" + } + ] + }, + { + "name": "withdraw_ineligible_reward", + "discriminator": [ + 148, + 206, + 42, + 195, + 247, + 49, + 103, + 8 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "reward_vault", + "writable": true + }, + { + "name": "reward_mint" + }, + { + "name": "funder_token_account", + "writable": true + }, + { + "name": "funder", + "signer": true + }, + { + "name": "token_program" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "reward_index", + "type": "u8" + } + ] + } + ], + "accounts": [ + { + "name": "ClaimFeeOperator", + "discriminator": [ + 166, + 48, + 134, + 86, + 34, + 200, + 188, + 150 + ] + }, + { + "name": "Config", + "discriminator": [ + 155, + 12, + 170, + 224, + 30, + 250, + 204, + 130 + ] + }, + { + "name": "Pool", + "discriminator": [ + 241, + 154, + 109, + 4, + 17, + 177, + 109, + 188 + ] + }, + { + "name": "Position", + "discriminator": [ + 170, + 188, + 143, + 228, + 122, + 64, + 247, + 208 + ] + }, + { + "name": "TokenBadge", + "discriminator": [ + 116, + 219, + 204, + 229, + 249, + 116, + 255, + 150 + ] + }, + { + "name": "Vesting", + "discriminator": [ + 100, + 149, + 66, + 138, + 95, + 200, + 128, + 241 + ] + } + ], + "events": [ + { + "name": "EvtAddLiquidity", + "discriminator": [ + 175, + 242, + 8, + 157, + 30, + 247, + 185, + 169 + ] + }, + { + "name": "EvtClaimPartnerFee", + "discriminator": [ + 118, + 99, + 77, + 10, + 226, + 1, + 1, + 87 + ] + }, + { + "name": "EvtClaimPositionFee", + "discriminator": [ + 198, + 182, + 183, + 52, + 97, + 12, + 49, + 56 + ] + }, + { + "name": "EvtClaimProtocolFee", + "discriminator": [ + 186, + 244, + 75, + 251, + 188, + 13, + 25, + 33 + ] + }, + { + "name": "EvtClaimReward", + "discriminator": [ + 218, + 86, + 147, + 200, + 235, + 188, + 215, + 231 + ] + }, + { + "name": "EvtCloseClaimFeeOperator", + "discriminator": [ + 111, + 39, + 37, + 55, + 110, + 216, + 194, + 23 + ] + }, + { + "name": "EvtCloseConfig", + "discriminator": [ + 36, + 30, + 239, + 45, + 58, + 132, + 14, + 5 + ] + }, + { + "name": "EvtClosePosition", + "discriminator": [ + 20, + 145, + 144, + 68, + 143, + 142, + 214, + 178 + ] + }, + { + "name": "EvtCreateClaimFeeOperator", + "discriminator": [ + 21, + 6, + 153, + 120, + 68, + 116, + 28, + 177 + ] + }, + { + "name": "EvtCreateConfig", + "discriminator": [ + 131, + 207, + 180, + 174, + 180, + 73, + 165, + 54 + ] + }, + { + "name": "EvtCreateDynamicConfig", + "discriminator": [ + 231, + 197, + 13, + 164, + 248, + 213, + 133, + 152 + ] + }, + { + "name": "EvtCreatePosition", + "discriminator": [ + 156, + 15, + 119, + 198, + 29, + 181, + 221, + 55 + ] + }, + { + "name": "EvtCreateTokenBadge", + "discriminator": [ + 141, + 120, + 134, + 116, + 34, + 28, + 114, + 160 + ] + }, + { + "name": "EvtFundReward", + "discriminator": [ + 104, + 233, + 237, + 122, + 199, + 191, + 121, + 85 + ] + }, + { + "name": "EvtInitializePool", + "discriminator": [ + 228, + 50, + 246, + 85, + 203, + 66, + 134, + 37 + ] + }, + { + "name": "EvtInitializeReward", + "discriminator": [ + 129, + 91, + 188, + 3, + 246, + 52, + 185, + 249 + ] + }, + { + "name": "EvtLockPosition", + "discriminator": [ + 168, + 63, + 108, + 83, + 219, + 82, + 2, + 200 + ] + }, + { + "name": "EvtPermanentLockPosition", + "discriminator": [ + 145, + 143, + 162, + 218, + 218, + 80, + 67, + 11 + ] + }, + { + "name": "EvtRemoveLiquidity", + "discriminator": [ + 87, + 46, + 88, + 98, + 175, + 96, + 34, + 91 + ] + }, + { + "name": "EvtSetPoolStatus", + "discriminator": [ + 100, + 213, + 74, + 3, + 95, + 91, + 228, + 146 + ] + }, + { + "name": "EvtSplitPosition", + "discriminator": [ + 182, + 138, + 42, + 254, + 27, + 94, + 82, + 221 + ] + }, + { + "name": "EvtSwap", + "discriminator": [ + 27, + 60, + 21, + 213, + 138, + 170, + 187, + 147 + ] + }, + { + "name": "EvtUpdateRewardDuration", + "discriminator": [ + 149, + 135, + 65, + 231, + 129, + 153, + 65, + 57 + ] + }, + { + "name": "EvtUpdateRewardFunder", + "discriminator": [ + 76, + 154, + 208, + 13, + 40, + 115, + 246, + 146 + ] + }, + { + "name": "EvtWithdrawIneligibleReward", + "discriminator": [ + 248, + 215, + 184, + 78, + 31, + 180, + 179, + 168 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "MathOverflow", + "msg": "Math operation overflow" + }, + { + "code": 6001, + "name": "InvalidFee", + "msg": "Invalid fee setup" + }, + { + "code": 6002, + "name": "ExceededSlippage", + "msg": "Exceeded slippage tolerance" + }, + { + "code": 6003, + "name": "PoolDisabled", + "msg": "Pool disabled" + }, + { + "code": 6004, + "name": "ExceedMaxFeeBps", + "msg": "Exceeded max fee bps" + }, + { + "code": 6005, + "name": "InvalidAdmin", + "msg": "Invalid admin" + }, + { + "code": 6006, + "name": "AmountIsZero", + "msg": "Amount is zero" + }, + { + "code": 6007, + "name": "TypeCastFailed", + "msg": "Type cast error" + }, + { + "code": 6008, + "name": "UnableToModifyActivationPoint", + "msg": "Unable to modify activation point" + }, + { + "code": 6009, + "name": "InvalidAuthorityToCreateThePool", + "msg": "Invalid authority to create the pool" + }, + { + "code": 6010, + "name": "InvalidActivationType", + "msg": "Invalid activation type" + }, + { + "code": 6011, + "name": "InvalidActivationPoint", + "msg": "Invalid activation point" + }, + { + "code": 6012, + "name": "InvalidQuoteMint", + "msg": "Quote token must be SOL,USDC" + }, + { + "code": 6013, + "name": "InvalidFeeCurve", + "msg": "Invalid fee curve" + }, + { + "code": 6014, + "name": "InvalidPriceRange", + "msg": "Invalid Price Range" + }, + { + "code": 6015, + "name": "PriceRangeViolation", + "msg": "Trade is over price range" + }, + { + "code": 6016, + "name": "InvalidParameters", + "msg": "Invalid parameters" + }, + { + "code": 6017, + "name": "InvalidCollectFeeMode", + "msg": "Invalid collect fee mode" + }, + { + "code": 6018, + "name": "InvalidInput", + "msg": "Invalid input" + }, + { + "code": 6019, + "name": "CannotCreateTokenBadgeOnSupportedMint", + "msg": "Cannot create token badge on supported mint" + }, + { + "code": 6020, + "name": "InvalidTokenBadge", + "msg": "Invalid token badge" + }, + { + "code": 6021, + "name": "InvalidMinimumLiquidity", + "msg": "Invalid minimum liquidity" + }, + { + "code": 6022, + "name": "InvalidVestingInfo", + "msg": "Invalid vesting information" + }, + { + "code": 6023, + "name": "InsufficientLiquidity", + "msg": "Insufficient liquidity" + }, + { + "code": 6024, + "name": "InvalidVestingAccount", + "msg": "Invalid vesting account" + }, + { + "code": 6025, + "name": "InvalidPoolStatus", + "msg": "Invalid pool status" + }, + { + "code": 6026, + "name": "UnsupportNativeMintToken2022", + "msg": "Unsupported native mint token2022" + }, + { + "code": 6027, + "name": "InvalidRewardIndex", + "msg": "Invalid reward index" + }, + { + "code": 6028, + "name": "InvalidRewardDuration", + "msg": "Invalid reward duration" + }, + { + "code": 6029, + "name": "RewardInitialized", + "msg": "Reward already initialized" + }, + { + "code": 6030, + "name": "RewardUninitialized", + "msg": "Reward not initialized" + }, + { + "code": 6031, + "name": "InvalidRewardVault", + "msg": "Invalid reward vault" + }, + { + "code": 6032, + "name": "MustWithdrawnIneligibleReward", + "msg": "Must withdraw ineligible reward" + }, + { + "code": 6033, + "name": "IdenticalRewardDuration", + "msg": "Reward duration is the same" + }, + { + "code": 6034, + "name": "RewardCampaignInProgress", + "msg": "Reward campaign in progress" + }, + { + "code": 6035, + "name": "IdenticalFunder", + "msg": "Identical funder" + }, + { + "code": 6036, + "name": "InvalidFunder", + "msg": "Invalid funder" + }, + { + "code": 6037, + "name": "RewardNotEnded", + "msg": "Reward not ended" + }, + { + "code": 6038, + "name": "FeeInverseIsIncorrect", + "msg": "Fee inverse is incorrect" + }, + { + "code": 6039, + "name": "PositionIsNotEmpty", + "msg": "Position is not empty" + }, + { + "code": 6040, + "name": "InvalidPoolCreatorAuthority", + "msg": "Invalid pool creator authority" + }, + { + "code": 6041, + "name": "InvalidConfigType", + "msg": "Invalid config type" + }, + { + "code": 6042, + "name": "InvalidPoolCreator", + "msg": "Invalid pool creator" + }, + { + "code": 6043, + "name": "RewardVaultFrozenSkipRequired", + "msg": "Reward vault is frozen, must skip reward to proceed" + }, + { + "code": 6044, + "name": "InvalidSplitPositionParameters", + "msg": "Invalid parameters for split position" + }, + { + "code": 6045, + "name": "UnsupportPositionHasVestingLock", + "msg": "Unsupported split position has vesting lock" + }, + { + "code": 6046, + "name": "SamePosition", + "msg": "Same position" + } + ], + "types": [ + { + "name": "AddLiquidityParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "liquidity_delta", + "docs": [ + "delta liquidity" + ], + "type": "u128" + }, + { + "name": "token_a_amount_threshold", + "docs": [ + "maximum token a amount" + ], + "type": "u64" + }, + { + "name": "token_b_amount_threshold", + "docs": [ + "maximum token b amount" + ], + "type": "u64" + } + ] + } + }, + { + "name": "BaseFeeConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_fee_numerator", + "type": "u64" + }, + { + "name": "fee_scheduler_mode", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 5 + ] + } + }, + { + "name": "number_of_period", + "type": "u16" + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "reduction_factor", + "type": "u64" + } + ] + } + }, + { + "name": "BaseFeeParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_fee_numerator", + "type": "u64" + }, + { + "name": "number_of_period", + "type": "u16" + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "reduction_factor", + "type": "u64" + }, + { + "name": "fee_scheduler_mode", + "type": "u8" + } + ] + } + }, + { + "name": "BaseFeeStruct", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_fee_numerator", + "type": "u64" + }, + { + "name": "fee_scheduler_mode", + "type": "u8" + }, + { + "name": "padding_0", + "type": { + "array": [ + "u8", + 5 + ] + } + }, + { + "name": "number_of_period", + "type": "u16" + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "reduction_factor", + "type": "u64" + }, + { + "name": "padding_1", + "type": "u64" + } + ] + } + }, + { + "name": "ClaimFeeOperator", + "docs": [ + "Parameter that set by the protocol" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "operator", + "docs": [ + "operator" + ], + "type": "pubkey" + }, + { + "name": "_padding", + "docs": [ + "Reserve" + ], + "type": { + "array": [ + "u8", + 128 + ] + } + } + ] + } + }, + { + "name": "Config", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "vault_config_key", + "docs": [ + "Vault config key" + ], + "type": "pubkey" + }, + { + "name": "pool_creator_authority", + "docs": [ + "Only pool_creator_authority can use the current config to initialize new pool. When it's Pubkey::default, it's a public config." + ], + "type": "pubkey" + }, + { + "name": "pool_fees", + "docs": [ + "Pool fee" + ], + "type": { + "defined": { + "name": "PoolFeesConfig" + } + } + }, + { + "name": "activation_type", + "docs": [ + "Activation type" + ], + "type": "u8" + }, + { + "name": "collect_fee_mode", + "docs": [ + "Collect fee mode" + ], + "type": "u8" + }, + { + "name": "config_type", + "docs": [ + "Config type mode, 0 for static, 1 for dynamic" + ], + "type": "u8" + }, + { + "name": "_padding_0", + "docs": [ + "padding 0" + ], + "type": { + "array": [ + "u8", + 5 + ] + } + }, + { + "name": "index", + "docs": [ + "config index" + ], + "type": "u64" + }, + { + "name": "sqrt_min_price", + "docs": [ + "sqrt min price" + ], + "type": "u128" + }, + { + "name": "sqrt_max_price", + "docs": [ + "sqrt max price" + ], + "type": "u128" + }, + { + "name": "_padding_1", + "docs": [ + "Fee curve point", + "Padding for further use" + ], + "type": { + "array": [ + "u64", + 10 + ] + } + } + ] + } + }, + { + "name": "DynamicConfigParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_creator_authority", + "type": "pubkey" + } + ] + } + }, + { + "name": "DynamicFeeConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 7 + ] + } + }, + { + "name": "max_volatility_accumulator", + "type": "u32" + }, + { + "name": "variable_fee_control", + "type": "u32" + }, + { + "name": "bin_step", + "type": "u16" + }, + { + "name": "filter_period", + "type": "u16" + }, + { + "name": "decay_period", + "type": "u16" + }, + { + "name": "reduction_factor", + "type": "u16" + }, + { + "name": "padding_1", + "type": { + "array": [ + "u8", + 8 + ] + } + }, + { + "name": "bin_step_u128", + "type": "u128" + } + ] + } + }, + { + "name": "DynamicFeeParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "bin_step", + "type": "u16" + }, + { + "name": "bin_step_u128", + "type": "u128" + }, + { + "name": "filter_period", + "type": "u16" + }, + { + "name": "decay_period", + "type": "u16" + }, + { + "name": "reduction_factor", + "type": "u16" + }, + { + "name": "max_volatility_accumulator", + "type": "u32" + }, + { + "name": "variable_fee_control", + "type": "u32" + } + ] + } + }, + { + "name": "DynamicFeeStruct", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 7 + ] + } + }, + { + "name": "max_volatility_accumulator", + "type": "u32" + }, + { + "name": "variable_fee_control", + "type": "u32" + }, + { + "name": "bin_step", + "type": "u16" + }, + { + "name": "filter_period", + "type": "u16" + }, + { + "name": "decay_period", + "type": "u16" + }, + { + "name": "reduction_factor", + "type": "u16" + }, + { + "name": "last_update_timestamp", + "type": "u64" + }, + { + "name": "bin_step_u128", + "type": "u128" + }, + { + "name": "sqrt_price_reference", + "type": "u128" + }, + { + "name": "volatility_accumulator", + "type": "u128" + }, + { + "name": "volatility_reference", + "type": "u128" + } + ] + } + }, + { + "name": "EvtAddLiquidity", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "params", + "type": { + "defined": { + "name": "AddLiquidityParameters" + } + } + }, + { + "name": "token_a_amount", + "type": "u64" + }, + { + "name": "token_b_amount", + "type": "u64" + }, + { + "name": "total_amount_a", + "type": "u64" + }, + { + "name": "total_amount_b", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimPartnerFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_a_amount", + "type": "u64" + }, + { + "name": "token_b_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimPositionFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "fee_a_claimed", + "type": "u64" + }, + { + "name": "fee_b_claimed", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimProtocolFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_a_amount", + "type": "u64" + }, + { + "name": "token_b_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimReward", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "mint_reward", + "type": "pubkey" + }, + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "total_reward", + "type": "u64" + } + ] + } + }, + { + "name": "EvtCloseClaimFeeOperator", + "docs": [ + "Close claim fee operator" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "claim_fee_operator", + "type": "pubkey" + }, + { + "name": "operator", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCloseConfig", + "docs": [ + "Close config" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "config", + "docs": [ + "Config pubkey" + ], + "type": "pubkey" + }, + { + "name": "admin", + "docs": [ + "admin pk" + ], + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtClosePosition", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "position_nft_mint", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateClaimFeeOperator", + "docs": [ + "Create claim fee operator" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "operator", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateConfig", + "docs": [ + "Create static config" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "vault_config_key", + "type": "pubkey" + }, + { + "name": "pool_creator_authority", + "type": "pubkey" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "sqrt_min_price", + "type": "u128" + }, + { + "name": "sqrt_max_price", + "type": "u128" + }, + { + "name": "collect_fee_mode", + "type": "u8" + }, + { + "name": "index", + "type": "u64" + }, + { + "name": "config", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateDynamicConfig", + "docs": [ + "Create dynamic config" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "config", + "type": "pubkey" + }, + { + "name": "pool_creator_authority", + "type": "pubkey" + }, + { + "name": "index", + "type": "u64" + } + ] + } + }, + { + "name": "EvtCreatePosition", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "position_nft_mint", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateTokenBadge", + "docs": [ + "Create token badge" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "token_mint", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtFundReward", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "funder", + "type": "pubkey" + }, + { + "name": "mint_reward", + "type": "pubkey" + }, + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "amount", + "type": "u64" + }, + { + "name": "transfer_fee_excluded_amount_in", + "type": "u64" + }, + { + "name": "reward_duration_end", + "type": "u64" + }, + { + "name": "pre_reward_rate", + "type": "u128" + }, + { + "name": "post_reward_rate", + "type": "u128" + } + ] + } + }, + { + "name": "EvtInitializePool", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_a_mint", + "type": "pubkey" + }, + { + "name": "token_b_mint", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "payer", + "type": "pubkey" + }, + { + "name": "alpha_vault", + "type": "pubkey" + }, + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "sqrt_min_price", + "type": "u128" + }, + { + "name": "sqrt_max_price", + "type": "u128" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "collect_fee_mode", + "type": "u8" + }, + { + "name": "liquidity", + "type": "u128" + }, + { + "name": "sqrt_price", + "type": "u128" + }, + { + "name": "activation_point", + "type": "u64" + }, + { + "name": "token_a_flag", + "type": "u8" + }, + { + "name": "token_b_flag", + "type": "u8" + }, + { + "name": "token_a_amount", + "type": "u64" + }, + { + "name": "token_b_amount", + "type": "u64" + }, + { + "name": "total_amount_a", + "type": "u64" + }, + { + "name": "total_amount_b", + "type": "u64" + }, + { + "name": "pool_type", + "type": "u8" + } + ] + } + }, + { + "name": "EvtInitializeReward", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "reward_mint", + "type": "pubkey" + }, + { + "name": "funder", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "reward_duration", + "type": "u64" + } + ] + } + }, + { + "name": "EvtLockPosition", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "vesting", + "type": "pubkey" + }, + { + "name": "cliff_point", + "type": "u64" + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "cliff_unlock_liquidity", + "type": "u128" + }, + { + "name": "liquidity_per_period", + "type": "u128" + }, + { + "name": "number_of_period", + "type": "u16" + } + ] + } + }, + { + "name": "EvtPermanentLockPosition", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "lock_liquidity_amount", + "type": "u128" + }, + { + "name": "total_permanent_locked_liquidity", + "type": "u128" + } + ] + } + }, + { + "name": "EvtRemoveLiquidity", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "position", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "params", + "type": { + "defined": { + "name": "RemoveLiquidityParameters" + } + } + }, + { + "name": "token_a_amount", + "type": "u64" + }, + { + "name": "token_b_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtSetPoolStatus", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "status", + "type": "u8" + } + ] + } + }, + { + "name": "EvtSplitPosition", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "first_owner", + "type": "pubkey" + }, + { + "name": "second_owner", + "type": "pubkey" + }, + { + "name": "first_position", + "type": "pubkey" + }, + { + "name": "second_position", + "type": "pubkey" + }, + { + "name": "current_sqrt_price", + "type": "u128" + }, + { + "name": "amount_splits", + "type": { + "defined": { + "name": "SplitAmountInfo" + } + } + }, + { + "name": "first_position_info", + "type": { + "defined": { + "name": "SplitPositionInfo" + } + } + }, + { + "name": "second_position_info", + "type": { + "defined": { + "name": "SplitPositionInfo" + } + } + }, + { + "name": "split_position_parameters", + "type": { + "defined": { + "name": "SplitPositionParameters" + } + } + } + ] + } + }, + { + "name": "EvtSwap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "trade_direction", + "type": "u8" + }, + { + "name": "has_referral", + "type": "bool" + }, + { + "name": "params", + "type": { + "defined": { + "name": "SwapParameters" + } + } + }, + { + "name": "swap_result", + "type": { + "defined": { + "name": "SwapResult" + } + } + }, + { + "name": "actual_amount_in", + "type": "u64" + }, + { + "name": "current_timestamp", + "type": "u64" + } + ] + } + }, + { + "name": "EvtUpdateRewardDuration", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "old_reward_duration", + "type": "u64" + }, + { + "name": "new_reward_duration", + "type": "u64" + } + ] + } + }, + { + "name": "EvtUpdateRewardFunder", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "reward_index", + "type": "u8" + }, + { + "name": "old_funder", + "type": "pubkey" + }, + { + "name": "new_funder", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtWithdrawIneligibleReward", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "reward_mint", + "type": "pubkey" + }, + { + "name": "amount", + "type": "u64" + } + ] + } + }, + { + "name": "InitializeCustomizablePoolParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "docs": [ + "pool fees" + ], + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "sqrt_min_price", + "docs": [ + "sqrt min price" + ], + "type": "u128" + }, + { + "name": "sqrt_max_price", + "docs": [ + "sqrt max price" + ], + "type": "u128" + }, + { + "name": "has_alpha_vault", + "docs": [ + "has alpha vault" + ], + "type": "bool" + }, + { + "name": "liquidity", + "docs": [ + "initialize liquidity" + ], + "type": "u128" + }, + { + "name": "sqrt_price", + "docs": [ + "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value" + ], + "type": "u128" + }, + { + "name": "activation_type", + "docs": [ + "activation type" + ], + "type": "u8" + }, + { + "name": "collect_fee_mode", + "docs": [ + "collect fee mode" + ], + "type": "u8" + }, + { + "name": "activation_point", + "docs": [ + "activation point" + ], + "type": { + "option": "u64" + } + } + ] + } + }, + { + "name": "InitializePoolParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "liquidity", + "docs": [ + "initialize liquidity" + ], + "type": "u128" + }, + { + "name": "sqrt_price", + "docs": [ + "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value" + ], + "type": "u128" + }, + { + "name": "activation_point", + "docs": [ + "activation point" + ], + "type": { + "option": "u64" + } + } + ] + } + }, + { + "name": "Pool", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "docs": [ + "Pool fee" + ], + "type": { + "defined": { + "name": "PoolFeesStruct" + } + } + }, + { + "name": "token_a_mint", + "docs": [ + "token a mint" + ], + "type": "pubkey" + }, + { + "name": "token_b_mint", + "docs": [ + "token b mint" + ], + "type": "pubkey" + }, + { + "name": "token_a_vault", + "docs": [ + "token a vault" + ], + "type": "pubkey" + }, + { + "name": "token_b_vault", + "docs": [ + "token b vault" + ], + "type": "pubkey" + }, + { + "name": "whitelisted_vault", + "docs": [ + "Whitelisted vault to be able to buy pool before activation_point" + ], + "type": "pubkey" + }, + { + "name": "partner", + "docs": [ + "partner" + ], + "type": "pubkey" + }, + { + "name": "liquidity", + "docs": [ + "liquidity share" + ], + "type": "u128" + }, + { + "name": "_padding", + "docs": [ + "padding, previous reserve amount, be careful to use that field" + ], + "type": "u128" + }, + { + "name": "protocol_a_fee", + "docs": [ + "protocol a fee" + ], + "type": "u64" + }, + { + "name": "protocol_b_fee", + "docs": [ + "protocol b fee" + ], + "type": "u64" + }, + { + "name": "partner_a_fee", + "docs": [ + "partner a fee" + ], + "type": "u64" + }, + { + "name": "partner_b_fee", + "docs": [ + "partner b fee" + ], + "type": "u64" + }, + { + "name": "sqrt_min_price", + "docs": [ + "min price" + ], + "type": "u128" + }, + { + "name": "sqrt_max_price", + "docs": [ + "max price" + ], + "type": "u128" + }, + { + "name": "sqrt_price", + "docs": [ + "current price" + ], + "type": "u128" + }, + { + "name": "activation_point", + "docs": [ + "Activation point, can be slot or timestamp" + ], + "type": "u64" + }, + { + "name": "activation_type", + "docs": [ + "Activation type, 0 means by slot, 1 means by timestamp" + ], + "type": "u8" + }, + { + "name": "pool_status", + "docs": [ + "pool status, 0: enable, 1 disable" + ], + "type": "u8" + }, + { + "name": "token_a_flag", + "docs": [ + "token a flag" + ], + "type": "u8" + }, + { + "name": "token_b_flag", + "docs": [ + "token b flag" + ], + "type": "u8" + }, + { + "name": "collect_fee_mode", + "docs": [ + "0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b" + ], + "type": "u8" + }, + { + "name": "pool_type", + "docs": [ + "pool type" + ], + "type": "u8" + }, + { + "name": "_padding_0", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u8", + 2 + ] + } + }, + { + "name": "fee_a_per_liquidity", + "docs": [ + "cumulative" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "fee_b_per_liquidity", + "docs": [ + "cumulative" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "permanent_lock_liquidity", + "type": "u128" + }, + { + "name": "metrics", + "docs": [ + "metrics" + ], + "type": { + "defined": { + "name": "PoolMetrics" + } + } + }, + { + "name": "creator", + "docs": [ + "pool creator" + ], + "type": "pubkey" + }, + { + "name": "_padding_1", + "docs": [ + "Padding for further use" + ], + "type": { + "array": [ + "u64", + 6 + ] + } + }, + { + "name": "reward_infos", + "docs": [ + "Farming reward information" + ], + "type": { + "array": [ + { + "defined": { + "name": "RewardInfo" + } + }, + 2 + ] + } + } + ] + } + }, + { + "name": "PoolFeeParameters", + "docs": [ + "Information regarding fee charges" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "base_fee", + "docs": [ + "Base fee" + ], + "type": { + "defined": { + "name": "BaseFeeParameters" + } + } + }, + { + "name": "padding", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u8", + 3 + ] + } + }, + { + "name": "dynamic_fee", + "docs": [ + "dynamic fee" + ], + "type": { + "option": { + "defined": { + "name": "DynamicFeeParameters" + } + } + } + } + ] + } + }, + { + "name": "PoolFeesConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "base_fee", + "type": { + "defined": { + "name": "BaseFeeConfig" + } + } + }, + { + "name": "dynamic_fee", + "type": { + "defined": { + "name": "DynamicFeeConfig" + } + } + }, + { + "name": "protocol_fee_percent", + "type": "u8" + }, + { + "name": "partner_fee_percent", + "type": "u8" + }, + { + "name": "referral_fee_percent", + "type": "u8" + }, + { + "name": "padding_0", + "type": { + "array": [ + "u8", + 5 + ] + } + }, + { + "name": "padding_1", + "type": { + "array": [ + "u64", + 5 + ] + } + } + ] + } + }, + { + "name": "PoolFeesStruct", + "docs": [ + "Information regarding fee charges", + "trading_fee = amount * trade_fee_numerator / denominator", + "protocol_fee = trading_fee * protocol_fee_percentage / 100", + "referral_fee = protocol_fee * referral_percentage / 100", + "partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "base_fee", + "docs": [ + "Trade fees are extra token amounts that are held inside the token", + "accounts during a trade, making the value of liquidity tokens rise.", + "Trade fee numerator" + ], + "type": { + "defined": { + "name": "BaseFeeStruct" + } + } + }, + { + "name": "protocol_fee_percent", + "docs": [ + "Protocol trading fees are extra token amounts that are held inside the token", + "accounts during a trade, with the equivalent in pool tokens minted to", + "the protocol of the program.", + "Protocol trade fee numerator" + ], + "type": "u8" + }, + { + "name": "partner_fee_percent", + "docs": [ + "partner fee" + ], + "type": "u8" + }, + { + "name": "referral_fee_percent", + "docs": [ + "referral fee" + ], + "type": "u8" + }, + { + "name": "padding_0", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u8", + 5 + ] + } + }, + { + "name": "dynamic_fee", + "docs": [ + "dynamic fee" + ], + "type": { + "defined": { + "name": "DynamicFeeStruct" + } + } + }, + { + "name": "padding_1", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u64", + 2 + ] + } + } + ] + } + }, + { + "name": "PoolMetrics", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_lp_a_fee", + "type": "u128" + }, + { + "name": "total_lp_b_fee", + "type": "u128" + }, + { + "name": "total_protocol_a_fee", + "type": "u64" + }, + { + "name": "total_protocol_b_fee", + "type": "u64" + }, + { + "name": "total_partner_a_fee", + "type": "u64" + }, + { + "name": "total_partner_b_fee", + "type": "u64" + }, + { + "name": "total_position", + "type": "u64" + }, + { + "name": "padding", + "type": "u64" + } + ] + } + }, + { + "name": "Position", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "nft_mint", + "docs": [ + "nft mint" + ], + "type": "pubkey" + }, + { + "name": "fee_a_per_token_checkpoint", + "docs": [ + "fee a checkpoint" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "fee_b_per_token_checkpoint", + "docs": [ + "fee b checkpoint" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "fee_a_pending", + "docs": [ + "fee a pending" + ], + "type": "u64" + }, + { + "name": "fee_b_pending", + "docs": [ + "fee b pending" + ], + "type": "u64" + }, + { + "name": "unlocked_liquidity", + "docs": [ + "unlock liquidity" + ], + "type": "u128" + }, + { + "name": "vested_liquidity", + "docs": [ + "vesting liquidity" + ], + "type": "u128" + }, + { + "name": "permanent_locked_liquidity", + "docs": [ + "permanent locked liquidity" + ], + "type": "u128" + }, + { + "name": "metrics", + "docs": [ + "metrics" + ], + "type": { + "defined": { + "name": "PositionMetrics" + } + } + }, + { + "name": "reward_infos", + "docs": [ + "Farming reward information" + ], + "type": { + "array": [ + { + "defined": { + "name": "UserRewardInfo" + } + }, + 2 + ] + } + }, + { + "name": "padding", + "docs": [ + "padding for future usage" + ], + "type": { + "array": [ + "u128", + 6 + ] + } + } + ] + } + }, + { + "name": "PositionMetrics", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_claimed_a_fee", + "type": "u64" + }, + { + "name": "total_claimed_b_fee", + "type": "u64" + } + ] + } + }, + { + "name": "RemoveLiquidityParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "liquidity_delta", + "docs": [ + "delta liquidity" + ], + "type": "u128" + }, + { + "name": "token_a_amount_threshold", + "docs": [ + "minimum token a amount" + ], + "type": "u64" + }, + { + "name": "token_b_amount_threshold", + "docs": [ + "minimum token b amount" + ], + "type": "u64" + } + ] + } + }, + { + "name": "RewardInfo", + "docs": [ + "Stores the state relevant for tracking liquidity mining rewards" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "docs": [ + "Indicates if the reward has been initialized" + ], + "type": "u8" + }, + { + "name": "reward_token_flag", + "docs": [ + "reward token flag" + ], + "type": "u8" + }, + { + "name": "_padding_0", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u8", + 6 + ] + } + }, + { + "name": "_padding_1", + "docs": [ + "Padding to ensure `reward_rate: u128` is 16-byte aligned" + ], + "type": { + "array": [ + "u8", + 8 + ] + } + }, + { + "name": "mint", + "docs": [ + "Reward token mint." + ], + "type": "pubkey" + }, + { + "name": "vault", + "docs": [ + "Reward vault token account." + ], + "type": "pubkey" + }, + { + "name": "funder", + "docs": [ + "Authority account that allows to fund rewards" + ], + "type": "pubkey" + }, + { + "name": "reward_duration", + "docs": [ + "reward duration" + ], + "type": "u64" + }, + { + "name": "reward_duration_end", + "docs": [ + "reward duration end" + ], + "type": "u64" + }, + { + "name": "reward_rate", + "docs": [ + "reward rate" + ], + "type": "u128" + }, + { + "name": "reward_per_token_stored", + "docs": [ + "Reward per token stored" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "last_update_time", + "docs": [ + "The last time reward states were updated." + ], + "type": "u64" + }, + { + "name": "cumulative_seconds_with_empty_liquidity_reward", + "docs": [ + "Accumulated seconds when the farm distributed rewards but the bin was empty.", + "These rewards will be carried over to the next reward time window." + ], + "type": "u64" + } + ] + } + }, + { + "name": "SplitAmountInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "permanent_locked_liquidity", + "type": "u128" + }, + { + "name": "unlocked_liquidity", + "type": "u128" + }, + { + "name": "fee_a", + "type": "u64" + }, + { + "name": "fee_b", + "type": "u64" + }, + { + "name": "reward_0", + "type": "u64" + }, + { + "name": "reward_1", + "type": "u64" + } + ] + } + }, + { + "name": "SplitPositionInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "liquidity", + "type": "u128" + }, + { + "name": "fee_a", + "type": "u64" + }, + { + "name": "fee_b", + "type": "u64" + }, + { + "name": "reward_0", + "type": "u64" + }, + { + "name": "reward_1", + "type": "u64" + } + ] + } + }, + { + "name": "SplitPositionParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "unlocked_liquidity_percentage", + "docs": [ + "Percentage of unlocked liquidity to split to the second position" + ], + "type": "u8" + }, + { + "name": "permanent_locked_liquidity_percentage", + "docs": [ + "Percentage of permanent locked liquidity to split to the second position" + ], + "type": "u8" + }, + { + "name": "fee_a_percentage", + "docs": [ + "Percentage of fee A pending to split to the second position" + ], + "type": "u8" + }, + { + "name": "fee_b_percentage", + "docs": [ + "Percentage of fee B pending to split to the second position" + ], + "type": "u8" + }, + { + "name": "reward_0_percentage", + "docs": [ + "Percentage of reward 0 pending to split to the second position" + ], + "type": "u8" + }, + { + "name": "reward_1_percentage", + "docs": [ + "Percentage of reward 1 pending to split to the second position" + ], + "type": "u8" + }, + { + "name": "padding", + "docs": [ + "padding for future" + ], + "type": { + "array": [ + "u8", + 16 + ] + } + } + ] + } + }, + { + "name": "StaticConfigParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "sqrt_min_price", + "type": "u128" + }, + { + "name": "sqrt_max_price", + "type": "u128" + }, + { + "name": "vault_config_key", + "type": "pubkey" + }, + { + "name": "pool_creator_authority", + "type": "pubkey" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "collect_fee_mode", + "type": "u8" + } + ] + } + }, + { + "name": "SwapParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + } + ] + } + }, + { + "name": "SwapResult", + "docs": [ + "Encodes all results of swapping" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "output_amount", + "type": "u64" + }, + { + "name": "next_sqrt_price", + "type": "u128" + }, + { + "name": "lp_fee", + "type": "u64" + }, + { + "name": "protocol_fee", + "type": "u64" + }, + { + "name": "partner_fee", + "type": "u64" + }, + { + "name": "referral_fee", + "type": "u64" + } + ] + } + }, + { + "name": "TokenBadge", + "docs": [ + "Parameter that set by the protocol" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "token_mint", + "docs": [ + "token mint" + ], + "type": "pubkey" + }, + { + "name": "_padding", + "docs": [ + "Reserve" + ], + "type": { + "array": [ + "u8", + 128 + ] + } + } + ] + } + }, + { + "name": "UserRewardInfo", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "reward_per_token_checkpoint", + "docs": [ + "The latest update reward checkpoint" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "reward_pendings", + "docs": [ + "Current pending rewards" + ], + "type": "u64" + }, + { + "name": "total_claimed_rewards", + "docs": [ + "Total claimed rewards" + ], + "type": "u64" + } + ] + } + }, + { + "name": "Vesting", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "position", + "type": "pubkey" + }, + { + "name": "cliff_point", + "type": "u64" + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "cliff_unlock_liquidity", + "type": "u128" + }, + { + "name": "liquidity_per_period", + "type": "u128" + }, + { + "name": "total_released_liquidity", + "type": "u128" + }, + { + "name": "number_of_period", + "type": "u16" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 14 + ] + } + }, + { + "name": "padding2", + "type": { + "array": [ + "u128", + 4 + ] + } + } + ] + } + }, + { + "name": "VestingParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_point", + "type": { + "option": "u64" + } + }, + { + "name": "period_frequency", + "type": "u64" + }, + { + "name": "cliff_unlock_liquidity", + "type": "u128" + }, + { + "name": "liquidity_per_period", + "type": "u128" + }, + { + "name": "number_of_period", + "type": "u16" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/idls/dynamic_bonding_curve.json b/idls/dynamic_bonding_curve.json new file mode 100644 index 0000000..921fed7 --- /dev/null +++ b/idls/dynamic_bonding_curve.json @@ -0,0 +1,6459 @@ +{ + "address": "dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN", + "metadata": { + "name": "dynamic_bonding_curve", + "version": "0.1.6", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "claim_creator_trading_fee", + "discriminator": [ + 82, + 220, + 250, + 189, + 3, + 85, + 107, + 45 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The treasury token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The treasury token b account" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of token b" + ] + }, + { + "name": "creator", + "signer": true, + "relations": [ + "pool" + ] + }, + { + "name": "token_base_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "max_base_amount", + "type": "u64" + }, + { + "name": "max_quote_amount", + "type": "u64" + } + ] + }, + { + "name": "claim_protocol_fee", + "discriminator": [ + 165, + 228, + 133, + 48, + 99, + 249, + 255, + 33 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "pool" + ] + }, + { + "name": "pool", + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "config" + ] + }, + { + "name": "token_base_account", + "docs": [ + "The treasury token a account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ] + }, + { + "kind": "account", + "path": "token_base_program" + }, + { + "kind": "account", + "path": "base_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "token_quote_account", + "docs": [ + "The treasury token b account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ] + }, + { + "kind": "account", + "path": "token_quote_program" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "claim_fee_operator", + "docs": [ + "Claim fee operator" + ] + }, + { + "name": "operator", + "docs": [ + "Operator" + ], + "signer": true, + "relations": [ + "claim_fee_operator" + ] + }, + { + "name": "token_base_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "claim_trading_fee", + "discriminator": [ + 8, + 236, + 89, + 49, + 152, + 125, + 177, + 81 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "pool" + ] + }, + { + "name": "pool", + "writable": true + }, + { + "name": "token_a_account", + "docs": [ + "The treasury token a account" + ], + "writable": true + }, + { + "name": "token_b_account", + "docs": [ + "The treasury token b account" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for input token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of token a" + ], + "relations": [ + "pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of token b" + ], + "relations": [ + "config" + ] + }, + { + "name": "fee_claimer", + "signer": true, + "relations": [ + "config" + ] + }, + { + "name": "token_base_program", + "docs": [ + "Token a program" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "max_amount_a", + "type": "u64" + }, + { + "name": "max_amount_b", + "type": "u64" + } + ] + }, + { + "name": "close_claim_fee_operator", + "discriminator": [ + 38, + 134, + 82, + 216, + 95, + 124, + 17, + 99 + ], + "accounts": [ + { + "name": "claim_fee_operator", + "writable": true + }, + { + "name": "rent_receiver", + "writable": true + }, + { + "name": "admin", + "signer": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create_claim_fee_operator", + "docs": [ + "ADMIN FUNCTIONS_ ///" + ], + "discriminator": [ + 169, + 62, + 207, + 107, + 58, + 187, + 162, + 109 + ], + "accounts": [ + { + "name": "claim_fee_operator", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 102, + 95, + 111, + 112, + 101, + 114, + 97, + 116, + 111, + 114 + ] + }, + { + "kind": "account", + "path": "operator" + } + ] + } + }, + { + "name": "operator" + }, + { + "name": "admin", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create_config", + "discriminator": [ + 201, + 207, + 243, + 114, + 75, + 111, + 47, + 189 + ], + "accounts": [ + { + "name": "config", + "writable": true, + "signer": true + }, + { + "name": "fee_claimer" + }, + { + "name": "leftover_receiver" + }, + { + "name": "quote_mint", + "docs": [ + "quote mint" + ] + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "config_parameters", + "type": { + "defined": { + "name": "ConfigParameters" + } + } + } + ] + }, + { + "name": "create_locker", + "docs": [ + "PERMISSIONLESS FUNCTIONS ///", + "create locker" + ], + "discriminator": [ + 167, + 90, + 137, + 154, + 75, + 47, + 17, + 84 + ], + "accounts": [ + { + "name": "virtual_pool", + "docs": [ + "Virtual pool" + ], + "writable": true + }, + { + "name": "config", + "docs": [ + "Config" + ], + "relations": [ + "virtual_pool" + ] + }, + { + "name": "pool_authority", + "writable": true, + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "base_vault", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "base_mint", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "base", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, + 97, + 115, + 101, + 95, + 108, + 111, + 99, + 107, + 101, + 114 + ] + }, + { + "kind": "account", + "path": "virtual_pool" + } + ] + } + }, + { + "name": "creator", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "escrow", + "writable": true + }, + { + "name": "escrow_token", + "writable": true + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "token_program" + }, + { + "name": "locker_program", + "address": "LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn" + }, + { + "name": "locker_event_authority" + }, + { + "name": "system_program", + "docs": [ + "System program." + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "create_partner_metadata", + "docs": [ + "PARTNER FUNCTIONS ////" + ], + "discriminator": [ + 192, + 168, + 234, + 191, + 188, + 226, + 227, + 255 + ], + "accounts": [ + { + "name": "partner_metadata", + "docs": [ + "Partner metadata" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 97, + 114, + 116, + 110, + 101, + 114, + 95, + 109, + 101, + 116, + 97, + 100, + 97, + 116, + 97 + ] + }, + { + "kind": "account", + "path": "fee_claimer" + } + ] + } + }, + { + "name": "payer", + "docs": [ + "Payer of the partner metadata." + ], + "writable": true, + "signer": true + }, + { + "name": "fee_claimer", + "docs": [ + "Fee claimer for partner" + ], + "signer": true + }, + { + "name": "system_program", + "docs": [ + "System program." + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "metadata", + "type": { + "defined": { + "name": "CreatePartnerMetadataParameters" + } + } + } + ] + }, + { + "name": "create_virtual_pool_metadata", + "discriminator": [ + 45, + 97, + 187, + 103, + 254, + 109, + 124, + 134 + ], + "accounts": [ + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "virtual_pool_metadata", + "docs": [ + "Virtual pool metadata" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 105, + 114, + 116, + 117, + 97, + 108, + 95, + 112, + 111, + 111, + 108, + 95, + 109, + 101, + 116, + 97, + 100, + 97, + 116, + 97 + ] + }, + { + "kind": "account", + "path": "virtual_pool" + } + ] + } + }, + { + "name": "creator", + "signer": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "payer", + "docs": [ + "Payer of the virtual pool metadata." + ], + "writable": true, + "signer": true + }, + { + "name": "system_program", + "docs": [ + "System program." + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "metadata", + "type": { + "defined": { + "name": "CreateVirtualPoolMetadataParameters" + } + } + } + ] + }, + { + "name": "creator_withdraw_surplus", + "discriminator": [ + 165, + 3, + 137, + 7, + 28, + 134, + 76, + 80 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "token_quote_account", + "docs": [ + "The receiver token account" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token" + ], + "relations": [ + "config" + ] + }, + { + "name": "creator", + "signer": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "initialize_virtual_pool_with_spl_token", + "docs": [ + "POOL CREATOR FUNCTIONS ////" + ], + "discriminator": [ + 140, + 85, + 215, + 176, + 102, + 54, + 104, + 79 + ], + "accounts": [ + { + "name": "config", + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "creator", + "signer": true + }, + { + "name": "base_mint", + "writable": true, + "signer": true + }, + { + "name": "quote_mint", + "relations": [ + "config" + ] + }, + { + "name": "pool", + "docs": [ + "Initialize an account to store the pool state" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "Token a vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "quote_vault", + "docs": [ + "Token b vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "quote_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "mint_metadata", + "writable": true + }, + { + "name": "metadata_program", + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + }, + { + "name": "payer", + "docs": [ + "Address paying to create the pool. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "token_quote_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "InitializePoolParameters" + } + } + } + ] + }, + { + "name": "initialize_virtual_pool_with_token2022", + "discriminator": [ + 169, + 118, + 51, + 78, + 145, + 110, + 220, + 155 + ], + "accounts": [ + { + "name": "config", + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "creator", + "signer": true + }, + { + "name": "base_mint", + "docs": [ + "Unique token mint address, initialize in contract" + ], + "writable": true, + "signer": true + }, + { + "name": "quote_mint", + "relations": [ + "config" + ] + }, + { + "name": "pool", + "docs": [ + "Initialize an account to store the pool state" + ], + "writable": true + }, + { + "name": "base_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "quote_vault", + "docs": [ + "Token quote vault for the pool" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 111, + 107, + 101, + 110, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "quote_mint" + }, + { + "kind": "account", + "path": "pool" + } + ] + } + }, + { + "name": "payer", + "docs": [ + "Address paying to create the pool. Can be anyone" + ], + "writable": true, + "signer": true + }, + { + "name": "token_quote_program", + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token_program", + "docs": [ + "token program for base mint" + ], + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "InitializePoolParameters" + } + } + } + ] + }, + { + "name": "migrate_meteora_damm", + "discriminator": [ + 27, + 1, + 48, + 22, + 180, + 63, + 118, + 217 + ], + "accounts": [ + { + "name": "virtual_pool", + "docs": [ + "virtual pool" + ], + "writable": true, + "relations": [ + "migration_metadata" + ] + }, + { + "name": "migration_metadata", + "writable": true + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "pool_authority", + "writable": true, + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "damm_config", + "docs": [ + "pool config" + ] + }, + { + "name": "lp_mint", + "writable": true + }, + { + "name": "token_a_mint", + "writable": true + }, + { + "name": "token_b_mint" + }, + { + "name": "a_vault", + "writable": true + }, + { + "name": "b_vault", + "writable": true + }, + { + "name": "a_token_vault", + "writable": true + }, + { + "name": "b_token_vault", + "writable": true + }, + { + "name": "a_vault_lp_mint", + "writable": true + }, + { + "name": "b_vault_lp_mint", + "writable": true + }, + { + "name": "a_vault_lp", + "writable": true + }, + { + "name": "b_vault_lp", + "writable": true + }, + { + "name": "base_vault", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_vault", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool_lp", + "writable": true + }, + { + "name": "protocol_token_a_fee", + "writable": true + }, + { + "name": "protocol_token_b_fee", + "writable": true + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "rent" + }, + { + "name": "mint_metadata", + "writable": true + }, + { + "name": "metadata_program" + }, + { + "name": "amm_program", + "address": "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB" + }, + { + "name": "vault_program" + }, + { + "name": "token_program", + "docs": [ + "token_program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program" + }, + { + "name": "system_program", + "docs": [ + "System program." + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "migrate_meteora_damm_claim_lp_token", + "discriminator": [ + 139, + 133, + 2, + 30, + 91, + 145, + 127, + 154 + ], + "accounts": [ + { + "name": "virtual_pool", + "relations": [ + "migration_metadata" + ] + }, + { + "name": "migration_metadata", + "docs": [ + "migration metadata" + ], + "writable": true + }, + { + "name": "pool_authority", + "writable": true, + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "lp_mint", + "relations": [ + "migration_metadata" + ] + }, + { + "name": "source_token", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "const", + "value": [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ] + }, + { + "kind": "account", + "path": "migration_metadata" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "destination_token", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "owner" + }, + { + "kind": "const", + "value": [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ] + }, + { + "kind": "account", + "path": "migration_metadata" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "owner" + }, + { + "name": "sender", + "signer": true + }, + { + "name": "token_program", + "docs": [ + "token_program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "migrate_meteora_damm_lock_lp_token", + "discriminator": [ + 177, + 55, + 238, + 157, + 251, + 88, + 165, + 42 + ], + "accounts": [ + { + "name": "virtual_pool", + "relations": [ + "migration_metadata" + ] + }, + { + "name": "migration_metadata", + "docs": [ + "migration_metadata" + ], + "writable": true + }, + { + "name": "pool_authority", + "writable": true, + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "pool", + "writable": true, + "relations": [ + "lock_escrow" + ] + }, + { + "name": "lp_mint", + "relations": [ + "migration_metadata" + ] + }, + { + "name": "lock_escrow", + "writable": true + }, + { + "name": "owner", + "relations": [ + "lock_escrow" + ] + }, + { + "name": "source_tokens", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "const", + "value": [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ] + }, + { + "kind": "account", + "path": "migration_metadata" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "escrow_vault", + "writable": true + }, + { + "name": "amm_program", + "address": "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB" + }, + { + "name": "a_vault" + }, + { + "name": "b_vault" + }, + { + "name": "a_vault_lp" + }, + { + "name": "b_vault_lp" + }, + { + "name": "a_vault_lp_mint" + }, + { + "name": "b_vault_lp_mint" + }, + { + "name": "token_program", + "docs": [ + "token_program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "migration_damm_v2", + "discriminator": [ + 156, + 169, + 230, + 103, + 53, + 228, + 80, + 64 + ], + "accounts": [ + { + "name": "virtual_pool", + "docs": [ + "virtual pool" + ], + "writable": true, + "relations": [ + "migration_metadata" + ] + }, + { + "name": "migration_metadata", + "docs": [ + "migration metadata" + ] + }, + { + "name": "config", + "docs": [ + "virtual pool config key" + ], + "relations": [ + "virtual_pool" + ] + }, + { + "name": "pool_authority", + "writable": true, + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "pool", + "writable": true + }, + { + "name": "first_position_nft_mint", + "writable": true + }, + { + "name": "first_position_nft_account", + "writable": true + }, + { + "name": "first_position", + "writable": true + }, + { + "name": "second_position_nft_mint", + "writable": true, + "optional": true + }, + { + "name": "second_position_nft_account", + "writable": true, + "optional": true + }, + { + "name": "second_position", + "writable": true, + "optional": true + }, + { + "name": "damm_pool_authority" + }, + { + "name": "amm_program", + "address": "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG" + }, + { + "name": "base_mint", + "writable": true + }, + { + "name": "quote_mint", + "writable": true + }, + { + "name": "token_a_vault", + "writable": true + }, + { + "name": "token_b_vault", + "writable": true + }, + { + "name": "base_vault", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_vault", + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "token_base_program" + }, + { + "name": "token_quote_program" + }, + { + "name": "token_2022_program" + }, + { + "name": "damm_event_authority" + }, + { + "name": "system_program", + "docs": [ + "System program." + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "migration_damm_v2_create_metadata", + "discriminator": [ + 109, + 189, + 19, + 36, + 195, + 183, + 222, + 82 + ], + "accounts": [ + { + "name": "virtual_pool" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "migration_metadata", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 100, + 97, + 109, + 109, + 95, + 118, + 50 + ] + }, + { + "kind": "account", + "path": "virtual_pool" + } + ] + } + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "migration_meteora_damm_create_metadata", + "docs": [ + "migrate damm v1" + ], + "discriminator": [ + 47, + 94, + 126, + 115, + 221, + 226, + 194, + 133 + ], + "accounts": [ + { + "name": "virtual_pool" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "migration_metadata", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, + 101, + 116, + 101, + 111, + 114, + 97 + ] + }, + { + "kind": "account", + "path": "virtual_pool" + } + ] + } + }, + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "partner_withdraw_surplus", + "discriminator": [ + 168, + 173, + 72, + 100, + 201, + 98, + 38, + 92 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "token_quote_account", + "docs": [ + "The receiver token account" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token" + ], + "relations": [ + "config" + ] + }, + { + "name": "fee_claimer", + "signer": true, + "relations": [ + "config" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "protocol_withdraw_surplus", + "discriminator": [ + 54, + 136, + 225, + 138, + 172, + 182, + 214, + 167 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "token_quote_account", + "docs": [ + "The treasury quote token account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ] + }, + { + "kind": "account", + "path": "token_quote_program" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for quote token" + ], + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of token" + ], + "relations": [ + "config" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "swap", + "docs": [ + "TRADING BOTS FUNCTIONS ////" + ], + "discriminator": [ + 248, + 198, + 158, + 145, + 225, + 117, + 135, + 200 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "docs": [ + "config key" + ], + "relations": [ + "pool" + ] + }, + { + "name": "pool", + "docs": [ + "Pool account" + ], + "writable": true + }, + { + "name": "input_token_account", + "docs": [ + "The user token account for input token" + ], + "writable": true + }, + { + "name": "output_token_account", + "docs": [ + "The user token account for output token" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for base token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for quote token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of base token" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token" + ] + }, + { + "name": "payer", + "docs": [ + "The user performing the swap" + ], + "signer": true + }, + { + "name": "token_base_program", + "docs": [ + "Token base program" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token quote program" + ] + }, + { + "name": "referral_token_account", + "docs": [ + "referral token account" + ], + "writable": true, + "optional": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "SwapParameters" + } + } + } + ] + }, + { + "name": "swap2", + "discriminator": [ + 65, + 75, + 63, + 76, + 235, + 91, + 91, + 136 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "docs": [ + "config key" + ], + "relations": [ + "pool" + ] + }, + { + "name": "pool", + "docs": [ + "Pool account" + ], + "writable": true + }, + { + "name": "input_token_account", + "docs": [ + "The user token account for input token" + ], + "writable": true + }, + { + "name": "output_token_account", + "docs": [ + "The user token account for output token" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for base token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for quote token" + ], + "writable": true, + "relations": [ + "pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of base token" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token" + ] + }, + { + "name": "payer", + "docs": [ + "The user performing the swap" + ], + "signer": true + }, + { + "name": "token_base_program", + "docs": [ + "Token base program" + ] + }, + { + "name": "token_quote_program", + "docs": [ + "Token quote program" + ] + }, + { + "name": "referral_token_account", + "docs": [ + "referral token account" + ], + "writable": true, + "optional": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "params", + "type": { + "defined": { + "name": "SwapParameters2" + } + } + } + ] + }, + { + "name": "transfer_pool_creator", + "discriminator": [ + 20, + 7, + 169, + 33, + 58, + 147, + 166, + 33 + ], + "accounts": [ + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "creator", + "signer": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "new_creator" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "withdraw_leftover", + "discriminator": [ + 20, + 198, + 202, + 237, + 235, + 243, + 183, + 66 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "token_base_account", + "docs": [ + "The receiver token account, withdraw to ATA" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "leftover_receiver" + }, + { + "kind": "account", + "path": "token_base_program" + }, + { + "kind": "account", + "path": "base_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "base_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "base_mint", + "docs": [ + "The mint of quote token" + ], + "relations": [ + "virtual_pool" + ] + }, + { + "name": "leftover_receiver", + "relations": [ + "config" + ] + }, + { + "name": "token_base_program", + "docs": [ + "Token base program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "withdraw_migration_fee", + "docs": [ + "BOTH partner and creator FUNCTIONS ///" + ], + "discriminator": [ + 237, + 142, + 45, + 23, + 129, + 6, + 222, + 162 + ], + "accounts": [ + { + "name": "pool_authority", + "address": "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM" + }, + { + "name": "config", + "relations": [ + "virtual_pool" + ] + }, + { + "name": "virtual_pool", + "writable": true + }, + { + "name": "token_quote_account", + "docs": [ + "The receiver token account" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The vault token account for output token" + ], + "writable": true, + "relations": [ + "virtual_pool" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token" + ], + "relations": [ + "config" + ] + }, + { + "name": "sender", + "signer": true + }, + { + "name": "token_quote_program", + "docs": [ + "Token b program" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "flag", + "type": "u8" + } + ] + } + ], + "accounts": [ + { + "name": "ClaimFeeOperator", + "discriminator": [ + 166, + 48, + 134, + 86, + 34, + 200, + 188, + 150 + ] + }, + { + "name": "Config", + "discriminator": [ + 155, + 12, + 170, + 224, + 30, + 250, + 204, + 130 + ] + }, + { + "name": "LockEscrow", + "discriminator": [ + 190, + 106, + 121, + 6, + 200, + 182, + 21, + 75 + ] + }, + { + "name": "MeteoraDammMigrationMetadata", + "discriminator": [ + 17, + 155, + 141, + 215, + 207, + 4, + 133, + 156 + ] + }, + { + "name": "MeteoraDammV2Metadata", + "discriminator": [ + 104, + 221, + 219, + 203, + 10, + 142, + 250, + 163 + ] + }, + { + "name": "PartnerMetadata", + "discriminator": [ + 68, + 68, + 130, + 19, + 16, + 209, + 98, + 156 + ] + }, + { + "name": "PoolConfig", + "discriminator": [ + 26, + 108, + 14, + 123, + 116, + 230, + 129, + 43 + ] + }, + { + "name": "VirtualPool", + "discriminator": [ + 213, + 224, + 5, + 209, + 98, + 69, + 119, + 92 + ] + }, + { + "name": "VirtualPoolMetadata", + "discriminator": [ + 217, + 37, + 82, + 250, + 43, + 47, + 228, + 254 + ] + } + ], + "events": [ + { + "name": "EvtClaimCreatorTradingFee", + "discriminator": [ + 154, + 228, + 215, + 202, + 133, + 155, + 214, + 138 + ] + }, + { + "name": "EvtClaimProtocolFee", + "discriminator": [ + 186, + 244, + 75, + 251, + 188, + 13, + 25, + 33 + ] + }, + { + "name": "EvtClaimTradingFee", + "discriminator": [ + 26, + 83, + 117, + 240, + 92, + 202, + 112, + 254 + ] + }, + { + "name": "EvtCloseClaimFeeOperator", + "discriminator": [ + 111, + 39, + 37, + 55, + 110, + 216, + 194, + 23 + ] + }, + { + "name": "EvtCreateClaimFeeOperator", + "discriminator": [ + 21, + 6, + 153, + 120, + 68, + 116, + 28, + 177 + ] + }, + { + "name": "EvtCreateConfig", + "discriminator": [ + 131, + 207, + 180, + 174, + 180, + 73, + 165, + 54 + ] + }, + { + "name": "EvtCreateConfigV2", + "discriminator": [ + 163, + 74, + 66, + 187, + 119, + 195, + 26, + 144 + ] + }, + { + "name": "EvtCreateDammV2MigrationMetadata", + "discriminator": [ + 103, + 111, + 132, + 168, + 140, + 253, + 150, + 114 + ] + }, + { + "name": "EvtCreateMeteoraMigrationMetadata", + "discriminator": [ + 99, + 167, + 133, + 63, + 214, + 143, + 175, + 139 + ] + }, + { + "name": "EvtCreatorWithdrawSurplus", + "discriminator": [ + 152, + 73, + 21, + 15, + 66, + 87, + 53, + 157 + ] + }, + { + "name": "EvtCurveComplete", + "discriminator": [ + 229, + 231, + 86, + 84, + 156, + 134, + 75, + 24 + ] + }, + { + "name": "EvtInitializePool", + "discriminator": [ + 228, + 50, + 246, + 85, + 203, + 66, + 134, + 37 + ] + }, + { + "name": "EvtPartnerMetadata", + "discriminator": [ + 200, + 127, + 6, + 55, + 13, + 32, + 8, + 150 + ] + }, + { + "name": "EvtPartnerWithdrawMigrationFee", + "discriminator": [ + 181, + 105, + 127, + 67, + 8, + 187, + 120, + 57 + ] + }, + { + "name": "EvtPartnerWithdrawSurplus", + "discriminator": [ + 195, + 56, + 152, + 9, + 232, + 72, + 35, + 22 + ] + }, + { + "name": "EvtProtocolWithdrawSurplus", + "discriminator": [ + 109, + 111, + 28, + 221, + 134, + 195, + 230, + 203 + ] + }, + { + "name": "EvtSwap", + "discriminator": [ + 27, + 60, + 21, + 213, + 138, + 170, + 187, + 147 + ] + }, + { + "name": "EvtSwap2", + "discriminator": [ + 189, + 66, + 51, + 168, + 38, + 80, + 117, + 153 + ] + }, + { + "name": "EvtUpdatePoolCreator", + "discriminator": [ + 107, + 225, + 165, + 237, + 91, + 158, + 213, + 220 + ] + }, + { + "name": "EvtVirtualPoolMetadata", + "discriminator": [ + 188, + 18, + 72, + 76, + 195, + 91, + 38, + 74 + ] + }, + { + "name": "EvtWithdrawLeftover", + "discriminator": [ + 191, + 189, + 104, + 143, + 111, + 156, + 94, + 229 + ] + }, + { + "name": "EvtWithdrawMigrationFee", + "discriminator": [ + 26, + 203, + 84, + 85, + 161, + 23, + 100, + 214 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "MathOverflow", + "msg": "Math operation overflow" + }, + { + "code": 6001, + "name": "InvalidFee", + "msg": "Invalid fee setup" + }, + { + "code": 6002, + "name": "ExceededSlippage", + "msg": "Exceeded slippage tolerance" + }, + { + "code": 6003, + "name": "ExceedMaxFeeBps", + "msg": "Exceeded max fee bps" + }, + { + "code": 6004, + "name": "InvalidAdmin", + "msg": "Invalid admin" + }, + { + "code": 6005, + "name": "AmountIsZero", + "msg": "Amount is zero" + }, + { + "code": 6006, + "name": "TypeCastFailed", + "msg": "Type cast error" + }, + { + "code": 6007, + "name": "InvalidActivationType", + "msg": "Invalid activation type" + }, + { + "code": 6008, + "name": "InvalidQuoteMint", + "msg": "Invalid quote mint" + }, + { + "code": 6009, + "name": "InvalidCollectFeeMode", + "msg": "Invalid collect fee mode" + }, + { + "code": 6010, + "name": "InvalidMigrationFeeOption", + "msg": "Invalid migration fee option" + }, + { + "code": 6011, + "name": "InvalidInput", + "msg": "Invalid input" + }, + { + "code": 6012, + "name": "NotEnoughLiquidity", + "msg": "Not enough liquidity" + }, + { + "code": 6013, + "name": "PoolIsCompleted", + "msg": "Pool is completed" + }, + { + "code": 6014, + "name": "PoolIsIncompleted", + "msg": "Pool is incompleted" + }, + { + "code": 6015, + "name": "InvalidMigrationOption", + "msg": "Invalid migration option" + }, + { + "code": 6016, + "name": "InvalidTokenDecimals", + "msg": "Invalid activation type" + }, + { + "code": 6017, + "name": "InvalidTokenType", + "msg": "Invalid token type" + }, + { + "code": 6018, + "name": "InvalidFeePercentage", + "msg": "Invalid fee percentage" + }, + { + "code": 6019, + "name": "InvalidQuoteThreshold", + "msg": "Invalid quote threshold" + }, + { + "code": 6020, + "name": "InvalidTokenSupply", + "msg": "Invalid token supply" + }, + { + "code": 6021, + "name": "InvalidCurve", + "msg": "Invalid curve" + }, + { + "code": 6022, + "name": "NotPermitToDoThisAction", + "msg": "Not permit to do this action" + }, + { + "code": 6023, + "name": "InvalidOwnerAccount", + "msg": "Invalid owner account" + }, + { + "code": 6024, + "name": "InvalidConfigAccount", + "msg": "Invalid config account" + }, + { + "code": 6025, + "name": "SurplusHasBeenWithdraw", + "msg": "Surplus has been withdraw" + }, + { + "code": 6026, + "name": "LeftoverHasBeenWithdraw", + "msg": "Leftover has been withdraw" + }, + { + "code": 6027, + "name": "TotalBaseTokenExceedMaxSupply", + "msg": "Total base token is exceeded max supply" + }, + { + "code": 6028, + "name": "UnsupportNativeMintToken2022", + "msg": "Unsupport native mint token 2022" + }, + { + "code": 6029, + "name": "InsufficientLiquidityForMigration", + "msg": "Insufficient liquidity for migration" + }, + { + "code": 6030, + "name": "MissingPoolConfigInRemainingAccount", + "msg": "Missing pool config in remaining account" + }, + { + "code": 6031, + "name": "InvalidVestingParameters", + "msg": "Invalid vesting parameters" + }, + { + "code": 6032, + "name": "InvalidLeftoverAddress", + "msg": "Invalid leftover address" + }, + { + "code": 6033, + "name": "SwapAmountIsOverAThreshold", + "msg": "Swap amount is over a threshold" + }, + { + "code": 6034, + "name": "InvalidFeeScheduler", + "msg": "Invalid fee scheduler" + }, + { + "code": 6035, + "name": "InvalidCreatorTradingFeePercentage", + "msg": "Invalid creator trading fee percentage" + }, + { + "code": 6036, + "name": "InvalidNewCreator", + "msg": "Invalid new creator" + }, + { + "code": 6037, + "name": "InvalidTokenAuthorityOption", + "msg": "Invalid token authority option" + }, + { + "code": 6038, + "name": "InvalidAccount", + "msg": "Invalid account for the instruction" + }, + { + "code": 6039, + "name": "InvalidMigratorFeePercentage", + "msg": "Invalid migrator fee percentage" + }, + { + "code": 6040, + "name": "MigrationFeeHasBeenWithdraw", + "msg": "Migration fee has been withdraw" + }, + { + "code": 6041, + "name": "InvalidBaseFeeMode", + "msg": "Invalid base fee mode" + }, + { + "code": 6042, + "name": "InvalidFeeRateLimiter", + "msg": "Invalid fee rate limiter" + }, + { + "code": 6043, + "name": "FailToValidateSingleSwapInstruction", + "msg": "Fail to validate single swap instruction in rate limiter" + }, + { + "code": 6044, + "name": "InvalidMigratedPoolFee", + "msg": "Invalid migrated pool fee params" + }, + { + "code": 6045, + "name": "UndeterminedError", + "msg": "Undertermined error" + }, + { + "code": 6046, + "name": "RateLimiterNotSupported", + "msg": "Rate limiter not supported" + }, + { + "code": 6047, + "name": "AmountLeftIsNotZero", + "msg": "Amount left is not zero" + }, + { + "code": 6048, + "name": "NextSqrtPriceIsSmallerThanStartSqrtPrice", + "msg": "Next sqrt price is smaller than start sqrt price" + } + ], + "types": [ + { + "name": "BaseFeeConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_fee_numerator", + "type": "u64" + }, + { + "name": "second_factor", + "type": "u64" + }, + { + "name": "third_factor", + "type": "u64" + }, + { + "name": "first_factor", + "type": "u16" + }, + { + "name": "base_fee_mode", + "type": "u8" + }, + { + "name": "padding_0", + "type": { + "array": [ + "u8", + 5 + ] + } + } + ] + } + }, + { + "name": "BaseFeeParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "cliff_fee_numerator", + "type": "u64" + }, + { + "name": "first_factor", + "type": "u16" + }, + { + "name": "second_factor", + "type": "u64" + }, + { + "name": "third_factor", + "type": "u64" + }, + { + "name": "base_fee_mode", + "type": "u8" + } + ] + } + }, + { + "name": "ClaimFeeOperator", + "docs": [ + "Parameter that set by the protocol" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "operator", + "docs": [ + "operator" + ], + "type": "pubkey" + }, + { + "name": "_padding", + "docs": [ + "Reserve" + ], + "type": { + "array": [ + "u8", + 128 + ] + } + } + ] + } + }, + { + "name": "Config", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFees" + } + } + }, + { + "name": "activation_duration", + "type": "u64" + }, + { + "name": "vault_config_key", + "type": "pubkey" + }, + { + "name": "pool_creator_authority", + "type": "pubkey" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "partner_fee_numerator", + "type": "u64" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 219 + ] + } + } + ] + } + }, + { + "name": "ConfigParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "collect_fee_mode", + "type": "u8" + }, + { + "name": "migration_option", + "type": "u8" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "token_type", + "type": "u8" + }, + { + "name": "token_decimal", + "type": "u8" + }, + { + "name": "partner_lp_percentage", + "type": "u8" + }, + { + "name": "partner_locked_lp_percentage", + "type": "u8" + }, + { + "name": "creator_lp_percentage", + "type": "u8" + }, + { + "name": "creator_locked_lp_percentage", + "type": "u8" + }, + { + "name": "migration_quote_threshold", + "type": "u64" + }, + { + "name": "sqrt_start_price", + "type": "u128" + }, + { + "name": "locked_vesting", + "type": { + "defined": { + "name": "LockedVestingParams" + } + } + }, + { + "name": "migration_fee_option", + "type": "u8" + }, + { + "name": "token_supply", + "type": { + "option": { + "defined": { + "name": "TokenSupplyParams" + } + } + } + }, + { + "name": "creator_trading_fee_percentage", + "type": "u8" + }, + { + "name": "token_update_authority", + "type": "u8" + }, + { + "name": "migration_fee", + "type": { + "defined": { + "name": "MigrationFee" + } + } + }, + { + "name": "migrated_pool_fee", + "type": { + "defined": { + "name": "MigratedPoolFee" + } + } + }, + { + "name": "padding", + "docs": [ + "padding for future use" + ], + "type": { + "array": [ + "u64", + 7 + ] + } + }, + { + "name": "curve", + "type": { + "vec": { + "defined": { + "name": "LiquidityDistributionParameters" + } + } + } + } + ] + } + }, + { + "name": "CreatePartnerMetadataParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "padding", + "type": { + "array": [ + "u8", + 96 + ] + } + }, + { + "name": "name", + "type": "string" + }, + { + "name": "website", + "type": "string" + }, + { + "name": "logo", + "type": "string" + } + ] + } + }, + { + "name": "CreateVirtualPoolMetadataParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "padding", + "type": { + "array": [ + "u8", + 96 + ] + } + }, + { + "name": "name", + "type": "string" + }, + { + "name": "website", + "type": "string" + }, + { + "name": "logo", + "type": "string" + } + ] + } + }, + { + "name": "DynamicFeeConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 7 + ] + } + }, + { + "name": "max_volatility_accumulator", + "type": "u32" + }, + { + "name": "variable_fee_control", + "type": "u32" + }, + { + "name": "bin_step", + "type": "u16" + }, + { + "name": "filter_period", + "type": "u16" + }, + { + "name": "decay_period", + "type": "u16" + }, + { + "name": "reduction_factor", + "type": "u16" + }, + { + "name": "padding2", + "type": { + "array": [ + "u8", + 8 + ] + } + }, + { + "name": "bin_step_u128", + "type": "u128" + } + ] + } + }, + { + "name": "DynamicFeeParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "bin_step", + "type": "u16" + }, + { + "name": "bin_step_u128", + "type": "u128" + }, + { + "name": "filter_period", + "type": "u16" + }, + { + "name": "decay_period", + "type": "u16" + }, + { + "name": "reduction_factor", + "type": "u16" + }, + { + "name": "max_volatility_accumulator", + "type": "u32" + }, + { + "name": "variable_fee_control", + "type": "u32" + } + ] + } + }, + { + "name": "EvtClaimCreatorTradingFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_base_amount", + "type": "u64" + }, + { + "name": "token_quote_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimProtocolFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_base_amount", + "type": "u64" + }, + { + "name": "token_quote_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtClaimTradingFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "token_base_amount", + "type": "u64" + }, + { + "name": "token_quote_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtCloseClaimFeeOperator", + "docs": [ + "Close claim fee operator" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "claim_fee_operator", + "type": "pubkey" + }, + { + "name": "operator", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateClaimFeeOperator", + "docs": [ + "Create claim fee operator" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "operator", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateConfig", + "docs": [ + "Create config" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "config", + "type": "pubkey" + }, + { + "name": "quote_mint", + "type": "pubkey" + }, + { + "name": "fee_claimer", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "pool_fees", + "type": { + "defined": { + "name": "PoolFeeParameters" + } + } + }, + { + "name": "collect_fee_mode", + "type": "u8" + }, + { + "name": "migration_option", + "type": "u8" + }, + { + "name": "activation_type", + "type": "u8" + }, + { + "name": "token_decimal", + "type": "u8" + }, + { + "name": "token_type", + "type": "u8" + }, + { + "name": "partner_locked_lp_percentage", + "type": "u8" + }, + { + "name": "partner_lp_percentage", + "type": "u8" + }, + { + "name": "creator_locked_lp_percentage", + "type": "u8" + }, + { + "name": "creator_lp_percentage", + "type": "u8" + }, + { + "name": "swap_base_amount", + "type": "u64" + }, + { + "name": "migration_quote_threshold", + "type": "u64" + }, + { + "name": "migration_base_amount", + "type": "u64" + }, + { + "name": "sqrt_start_price", + "type": "u128" + }, + { + "name": "locked_vesting", + "type": { + "defined": { + "name": "LockedVestingParams" + } + } + }, + { + "name": "migration_fee_option", + "type": "u8" + }, + { + "name": "fixed_token_supply_flag", + "type": "u8" + }, + { + "name": "pre_migration_token_supply", + "type": "u64" + }, + { + "name": "post_migration_token_supply", + "type": "u64" + }, + { + "name": "curve", + "type": { + "vec": { + "defined": { + "name": "LiquidityDistributionParameters" + } + } + } + } + ] + } + }, + { + "name": "EvtCreateConfigV2", + "type": { + "kind": "struct", + "fields": [ + { + "name": "config", + "type": "pubkey" + }, + { + "name": "quote_mint", + "type": "pubkey" + }, + { + "name": "fee_claimer", + "type": "pubkey" + }, + { + "name": "leftover_receiver", + "type": "pubkey" + }, + { + "name": "config_parameters", + "type": { + "defined": { + "name": "ConfigParameters" + } + } + } + ] + } + }, + { + "name": "EvtCreateDammV2MigrationMetadata", + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreateMeteoraMigrationMetadata", + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtCreatorWithdrawSurplus", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "surplus_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtCurveComplete", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "base_reserve", + "type": "u64" + }, + { + "name": "quote_reserve", + "type": "u64" + } + ] + } + }, + { + "name": "EvtInitializePool", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "base_mint", + "type": "pubkey" + }, + { + "name": "pool_type", + "type": "u8" + }, + { + "name": "activation_point", + "type": "u64" + } + ] + } + }, + { + "name": "EvtPartnerMetadata", + "docs": [ + "Create partner metadata" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "partner_metadata", + "type": "pubkey" + }, + { + "name": "fee_claimer", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtPartnerWithdrawMigrationFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "fee", + "type": "u64" + } + ] + } + }, + { + "name": "EvtPartnerWithdrawSurplus", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "surplus_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtProtocolWithdrawSurplus", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "surplus_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtSwap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "trade_direction", + "type": "u8" + }, + { + "name": "has_referral", + "type": "bool" + }, + { + "name": "params", + "type": { + "defined": { + "name": "SwapParameters" + } + } + }, + { + "name": "swap_result", + "type": { + "defined": { + "name": "SwapResult" + } + } + }, + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "current_timestamp", + "type": "u64" + } + ] + } + }, + { + "name": "EvtSwap2", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "trade_direction", + "type": "u8" + }, + { + "name": "has_referral", + "type": "bool" + }, + { + "name": "swap_parameters", + "type": { + "defined": { + "name": "SwapParameters2" + } + } + }, + { + "name": "swap_result", + "type": { + "defined": { + "name": "SwapResult2" + } + } + }, + { + "name": "quote_reserve_amount", + "type": "u64" + }, + { + "name": "migration_threshold", + "type": "u64" + }, + { + "name": "current_timestamp", + "type": "u64" + } + ] + } + }, + { + "name": "EvtUpdatePoolCreator", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "new_creator", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtVirtualPoolMetadata", + "docs": [ + "Create virtual pool metadata" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool_metadata", + "type": "pubkey" + }, + { + "name": "virtual_pool", + "type": "pubkey" + } + ] + } + }, + { + "name": "EvtWithdrawLeftover", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "leftover_receiver", + "type": "pubkey" + }, + { + "name": "leftover_amount", + "type": "u64" + } + ] + } + }, + { + "name": "EvtWithdrawMigrationFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "fee", + "type": "u64" + }, + { + "name": "flag", + "type": "u8" + } + ] + } + }, + { + "name": "InitializePoolParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + } + ] + } + }, + { + "name": "LiquidityDistributionConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "sqrt_price", + "type": "u128" + }, + { + "name": "liquidity", + "type": "u128" + } + ] + } + }, + { + "name": "LiquidityDistributionParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "sqrt_price", + "type": "u128" + }, + { + "name": "liquidity", + "type": "u128" + } + ] + } + }, + { + "name": "LockEscrow", + "docs": [ + "State of lock escrow account" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool", + "type": "pubkey" + }, + { + "name": "owner", + "type": "pubkey" + }, + { + "name": "escrow_vault", + "type": "pubkey" + }, + { + "name": "bump", + "type": "u8" + }, + { + "name": "total_locked_amount", + "type": "u64" + }, + { + "name": "lp_per_token", + "type": "u128" + }, + { + "name": "unclaimed_fee_pending", + "type": "u64" + }, + { + "name": "a_fee", + "type": "u64" + }, + { + "name": "b_fee", + "type": "u64" + } + ] + } + }, + { + "name": "LockedVestingConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "amount_per_period", + "type": "u64" + }, + { + "name": "cliff_duration_from_migration_time", + "type": "u64" + }, + { + "name": "frequency", + "type": "u64" + }, + { + "name": "number_of_period", + "type": "u64" + }, + { + "name": "cliff_unlock_amount", + "type": "u64" + }, + { + "name": "_padding", + "type": "u64" + } + ] + } + }, + { + "name": "LockedVestingParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "amount_per_period", + "type": "u64" + }, + { + "name": "cliff_duration_from_migration_time", + "type": "u64" + }, + { + "name": "frequency", + "type": "u64" + }, + { + "name": "number_of_period", + "type": "u64" + }, + { + "name": "cliff_unlock_amount", + "type": "u64" + } + ] + } + }, + { + "name": "MeteoraDammMigrationMetadata", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool", + "docs": [ + "pool" + ], + "type": "pubkey" + }, + { + "name": "padding_0", + "docs": [ + "!!! BE CAREFUL to use tomestone field, previous is pool creator" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "partner", + "docs": [ + "partner" + ], + "type": "pubkey" + }, + { + "name": "lp_mint", + "docs": [ + "lp mint" + ], + "type": "pubkey" + }, + { + "name": "partner_locked_lp", + "docs": [ + "partner locked lp" + ], + "type": "u64" + }, + { + "name": "partner_lp", + "docs": [ + "partner lp" + ], + "type": "u64" + }, + { + "name": "creator_locked_lp", + "docs": [ + "creator locked lp" + ], + "type": "u64" + }, + { + "name": "creator_lp", + "docs": [ + "creator lp" + ], + "type": "u64" + }, + { + "name": "_padding_0", + "docs": [ + "padding" + ], + "type": "u8" + }, + { + "name": "creator_locked_status", + "docs": [ + "flag to check whether lp is locked for creator" + ], + "type": "u8" + }, + { + "name": "partner_locked_status", + "docs": [ + "flag to check whether lp is locked for partner" + ], + "type": "u8" + }, + { + "name": "creator_claim_status", + "docs": [ + "flag to check whether creator has claimed lp token" + ], + "type": "u8" + }, + { + "name": "partner_claim_status", + "docs": [ + "flag to check whether partner has claimed lp token" + ], + "type": "u8" + }, + { + "name": "_padding", + "docs": [ + "Reserve" + ], + "type": { + "array": [ + "u8", + 107 + ] + } + } + ] + } + }, + { + "name": "MeteoraDammV2Metadata", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool", + "docs": [ + "pool" + ], + "type": "pubkey" + }, + { + "name": "padding_0", + "docs": [ + "!!! BE CAREFUL to use tomestone field, previous is pool creator" + ], + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "partner", + "docs": [ + "partner" + ], + "type": "pubkey" + }, + { + "name": "_padding", + "docs": [ + "Reserve" + ], + "type": { + "array": [ + "u8", + 126 + ] + } + } + ] + } + }, + { + "name": "MigratedPoolFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "collect_fee_mode", + "type": "u8" + }, + { + "name": "dynamic_fee", + "type": "u8" + }, + { + "name": "pool_fee_bps", + "type": "u16" + } + ] + } + }, + { + "name": "MigrationFee", + "type": { + "kind": "struct", + "fields": [ + { + "name": "fee_percentage", + "type": "u8" + }, + { + "name": "creator_fee_percentage", + "type": "u8" + } + ] + } + }, + { + "name": "PartnerMetadata", + "docs": [ + "Metadata for a partner." + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "fee_claimer", + "docs": [ + "fee claimer" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future use" + ], + "type": { + "array": [ + "u128", + 6 + ] + } + }, + { + "name": "name", + "docs": [ + "Name of partner." + ], + "type": "string" + }, + { + "name": "website", + "docs": [ + "Website of partner." + ], + "type": "string" + }, + { + "name": "logo", + "docs": [ + "Logo of partner" + ], + "type": "string" + } + ] + } + }, + { + "name": "PoolConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "quote_mint", + "docs": [ + "quote mint" + ], + "type": "pubkey" + }, + { + "name": "fee_claimer", + "docs": [ + "Address to get the fee" + ], + "type": "pubkey" + }, + { + "name": "leftover_receiver", + "docs": [ + "Address to receive extra base token after migration, in case token is fixed supply" + ], + "type": "pubkey" + }, + { + "name": "pool_fees", + "docs": [ + "Pool fee" + ], + "type": { + "defined": { + "name": "PoolFeesConfig" + } + } + }, + { + "name": "collect_fee_mode", + "docs": [ + "Collect fee mode" + ], + "type": "u8" + }, + { + "name": "migration_option", + "docs": [ + "migration option" + ], + "type": "u8" + }, + { + "name": "activation_type", + "docs": [ + "whether mode slot or timestamp" + ], + "type": "u8" + }, + { + "name": "token_decimal", + "docs": [ + "token decimals" + ], + "type": "u8" + }, + { + "name": "version", + "docs": [ + "version" + ], + "type": "u8" + }, + { + "name": "token_type", + "docs": [ + "token type of base token" + ], + "type": "u8" + }, + { + "name": "quote_token_flag", + "docs": [ + "quote token flag" + ], + "type": "u8" + }, + { + "name": "partner_locked_lp_percentage", + "docs": [ + "partner locked lp percentage" + ], + "type": "u8" + }, + { + "name": "partner_lp_percentage", + "docs": [ + "partner lp percentage" + ], + "type": "u8" + }, + { + "name": "creator_locked_lp_percentage", + "docs": [ + "creator post migration fee percentage" + ], + "type": "u8" + }, + { + "name": "creator_lp_percentage", + "docs": [ + "creator lp percentage" + ], + "type": "u8" + }, + { + "name": "migration_fee_option", + "docs": [ + "migration fee option" + ], + "type": "u8" + }, + { + "name": "fixed_token_supply_flag", + "docs": [ + "flag to indicate whether token is dynamic supply (0) or fixed supply (1)" + ], + "type": "u8" + }, + { + "name": "creator_trading_fee_percentage", + "docs": [ + "creator trading fee percentage" + ], + "type": "u8" + }, + { + "name": "token_update_authority", + "docs": [ + "token update authority" + ], + "type": "u8" + }, + { + "name": "migration_fee_percentage", + "docs": [ + "migration fee percentage" + ], + "type": "u8" + }, + { + "name": "creator_migration_fee_percentage", + "docs": [ + "creator migration fee percentage" + ], + "type": "u8" + }, + { + "name": "_padding_0", + "docs": [ + "padding 0" + ], + "type": { + "array": [ + "u8", + 7 + ] + } + }, + { + "name": "swap_base_amount", + "docs": [ + "swap base amount" + ], + "type": "u64" + }, + { + "name": "migration_quote_threshold", + "docs": [ + "migration quote threshold (in quote token)" + ], + "type": "u64" + }, + { + "name": "migration_base_threshold", + "docs": [ + "migration base threshold (in base token)" + ], + "type": "u64" + }, + { + "name": "migration_sqrt_price", + "docs": [ + "migration sqrt price" + ], + "type": "u128" + }, + { + "name": "locked_vesting_config", + "docs": [ + "locked vesting config" + ], + "type": { + "defined": { + "name": "LockedVestingConfig" + } + } + }, + { + "name": "pre_migration_token_supply", + "docs": [ + "pre migration token supply" + ], + "type": "u64" + }, + { + "name": "post_migration_token_supply", + "docs": [ + "post migration token supply" + ], + "type": "u64" + }, + { + "name": "migrated_collect_fee_mode", + "docs": [ + "migrated pool collect fee mode" + ], + "type": "u8" + }, + { + "name": "migrated_dynamic_fee", + "docs": [ + "migrated dynamic fee option." + ], + "type": "u8" + }, + { + "name": "migrated_pool_fee_bps", + "docs": [ + "migrated pool fee in bps" + ], + "type": "u16" + }, + { + "name": "_padding_1", + "docs": [ + "padding 1" + ], + "type": { + "array": [ + "u8", + 12 + ] + } + }, + { + "name": "_padding_2", + "docs": [ + "padding 2" + ], + "type": "u128" + }, + { + "name": "sqrt_start_price", + "docs": [ + "minimum price" + ], + "type": "u128" + }, + { + "name": "curve", + "docs": [ + "curve, only use 20 point firstly, we can extend that latter" + ], + "type": { + "array": [ + { + "defined": { + "name": "LiquidityDistributionConfig" + } + }, + 20 + ] + } + } + ] + } + }, + { + "name": "PoolFeeParameters", + "docs": [ + "Information regarding fee charges" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "base_fee", + "docs": [ + "Base fee" + ], + "type": { + "defined": { + "name": "BaseFeeParameters" + } + } + }, + { + "name": "dynamic_fee", + "docs": [ + "dynamic fee" + ], + "type": { + "option": { + "defined": { + "name": "DynamicFeeParameters" + } + } + } + } + ] + } + }, + { + "name": "PoolFees", + "docs": [ + "Information regarding fee charges" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "trade_fee_numerator", + "type": "u64" + }, + { + "name": "trade_fee_denominator", + "type": "u64" + }, + { + "name": "protocol_trade_fee_numerator", + "type": "u64" + }, + { + "name": "protocol_trade_fee_denominator", + "type": "u64" + } + ] + } + }, + { + "name": "PoolFeesConfig", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "base_fee", + "type": { + "defined": { + "name": "BaseFeeConfig" + } + } + }, + { + "name": "dynamic_fee", + "type": { + "defined": { + "name": "DynamicFeeConfig" + } + } + }, + { + "name": "padding_0", + "type": { + "array": [ + "u64", + 5 + ] + } + }, + { + "name": "padding_1", + "type": { + "array": [ + "u8", + 6 + ] + } + }, + { + "name": "protocol_fee_percent", + "type": "u8" + }, + { + "name": "referral_fee_percent", + "type": "u8" + } + ] + } + }, + { + "name": "PoolMetrics", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_protocol_base_fee", + "type": "u64" + }, + { + "name": "total_protocol_quote_fee", + "type": "u64" + }, + { + "name": "total_trading_base_fee", + "type": "u64" + }, + { + "name": "total_trading_quote_fee", + "type": "u64" + } + ] + } + }, + { + "name": "SwapParameters", + "type": { + "kind": "struct", + "fields": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + } + ] + } + }, + { + "name": "SwapParameters2", + "type": { + "kind": "struct", + "fields": [ + { + "name": "amount_0", + "docs": [ + "When it's exact in, partial fill, this will be amount_in. When it's exact out, this will be amount_out" + ], + "type": "u64" + }, + { + "name": "amount_1", + "docs": [ + "When it's exact in, partial fill, this will be minimum_amount_out. When it's exact out, this will be maximum_amount_in" + ], + "type": "u64" + }, + { + "name": "swap_mode", + "docs": [ + "Swap mode, refer [SwapMode]" + ], + "type": "u8" + } + ] + } + }, + { + "name": "SwapResult", + "docs": [ + "Encodes all results of swapping" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "actual_input_amount", + "type": "u64" + }, + { + "name": "output_amount", + "type": "u64" + }, + { + "name": "next_sqrt_price", + "type": "u128" + }, + { + "name": "trading_fee", + "type": "u64" + }, + { + "name": "protocol_fee", + "type": "u64" + }, + { + "name": "referral_fee", + "type": "u64" + } + ] + } + }, + { + "name": "SwapResult2", + "type": { + "kind": "struct", + "fields": [ + { + "name": "included_fee_input_amount", + "type": "u64" + }, + { + "name": "excluded_fee_input_amount", + "type": "u64" + }, + { + "name": "amount_left", + "type": "u64" + }, + { + "name": "output_amount", + "type": "u64" + }, + { + "name": "next_sqrt_price", + "type": "u128" + }, + { + "name": "trading_fee", + "type": "u64" + }, + { + "name": "protocol_fee", + "type": "u64" + }, + { + "name": "referral_fee", + "type": "u64" + } + ] + } + }, + { + "name": "TokenSupplyParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pre_migration_token_supply", + "docs": [ + "pre migration token supply" + ], + "type": "u64" + }, + { + "name": "post_migration_token_supply", + "docs": [ + "post migration token supply", + "becase DBC allow user to swap over the migration quote threshold, so in extreme case user may swap more than allowed buffer on curve", + "that result the total supply in post migration may be increased a bit (between pre_migration_token_supply and post_migration_token_supply)" + ], + "type": "u64" + } + ] + } + }, + { + "name": "VirtualPool", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "volatility_tracker", + "docs": [ + "volatility tracker" + ], + "type": { + "defined": { + "name": "VolatilityTracker" + } + } + }, + { + "name": "config", + "docs": [ + "config key" + ], + "type": "pubkey" + }, + { + "name": "creator", + "docs": [ + "creator" + ], + "type": "pubkey" + }, + { + "name": "base_mint", + "docs": [ + "base mint" + ], + "type": "pubkey" + }, + { + "name": "base_vault", + "docs": [ + "base vault" + ], + "type": "pubkey" + }, + { + "name": "quote_vault", + "docs": [ + "quote vault" + ], + "type": "pubkey" + }, + { + "name": "base_reserve", + "docs": [ + "base reserve" + ], + "type": "u64" + }, + { + "name": "quote_reserve", + "docs": [ + "quote reserve" + ], + "type": "u64" + }, + { + "name": "protocol_base_fee", + "docs": [ + "protocol base fee" + ], + "type": "u64" + }, + { + "name": "protocol_quote_fee", + "docs": [ + "protocol quote fee" + ], + "type": "u64" + }, + { + "name": "partner_base_fee", + "docs": [ + "partner base fee" + ], + "type": "u64" + }, + { + "name": "partner_quote_fee", + "docs": [ + "trading quote fee" + ], + "type": "u64" + }, + { + "name": "sqrt_price", + "docs": [ + "current price" + ], + "type": "u128" + }, + { + "name": "activation_point", + "docs": [ + "Activation point" + ], + "type": "u64" + }, + { + "name": "pool_type", + "docs": [ + "pool type, spl token or token2022" + ], + "type": "u8" + }, + { + "name": "is_migrated", + "docs": [ + "is migrated" + ], + "type": "u8" + }, + { + "name": "is_partner_withdraw_surplus", + "docs": [ + "is partner withdraw surplus" + ], + "type": "u8" + }, + { + "name": "is_protocol_withdraw_surplus", + "docs": [ + "is protocol withdraw surplus" + ], + "type": "u8" + }, + { + "name": "migration_progress", + "docs": [ + "migration progress" + ], + "type": "u8" + }, + { + "name": "is_withdraw_leftover", + "docs": [ + "is withdraw leftover" + ], + "type": "u8" + }, + { + "name": "is_creator_withdraw_surplus", + "docs": [ + "is creator withdraw surplus" + ], + "type": "u8" + }, + { + "name": "migration_fee_withdraw_status", + "docs": [ + "migration fee withdraw status, first bit is for partner, second bit is for creator" + ], + "type": "u8" + }, + { + "name": "metrics", + "docs": [ + "pool metrics" + ], + "type": { + "defined": { + "name": "PoolMetrics" + } + } + }, + { + "name": "finish_curve_timestamp", + "docs": [ + "The time curve is finished" + ], + "type": "u64" + }, + { + "name": "creator_base_fee", + "docs": [ + "creator base fee" + ], + "type": "u64" + }, + { + "name": "creator_quote_fee", + "docs": [ + "creator quote fee" + ], + "type": "u64" + }, + { + "name": "_padding_1", + "docs": [ + "Padding for further use" + ], + "type": { + "array": [ + "u64", + 7 + ] + } + } + ] + } + }, + { + "name": "VirtualPoolMetadata", + "docs": [ + "Metadata for a virtual pool." + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_pool", + "docs": [ + "virtual pool" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future use" + ], + "type": { + "array": [ + "u128", + 6 + ] + } + }, + { + "name": "name", + "docs": [ + "Name of project." + ], + "type": "string" + }, + { + "name": "website", + "docs": [ + "Website of project." + ], + "type": "string" + }, + { + "name": "logo", + "docs": [ + "Logo of project" + ], + "type": "string" + } + ] + } + }, + { + "name": "VolatilityTracker", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "last_update_timestamp", + "type": "u64" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 8 + ] + } + }, + { + "name": "sqrt_price_reference", + "type": "u128" + }, + { + "name": "volatility_accumulator", + "type": "u128" + }, + { + "name": "volatility_reference", + "type": "u128" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/libs/damm-v2/Cargo.toml b/libs/damm-v2/Cargo.toml new file mode 100644 index 0000000..7d39234 --- /dev/null +++ b/libs/damm-v2/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "damm-v2" +version = "0.1.3" +authors = [""] +edition = "2021" + +[dependencies] +anchor-lang = { workspace = true } +bytemuck = { workspace = true, features = ["min_const_generics"] } \ No newline at end of file diff --git a/libs/damm-v2/src/lib.rs b/libs/damm-v2/src/lib.rs new file mode 100644 index 0000000..7188651 --- /dev/null +++ b/libs/damm-v2/src/lib.rs @@ -0,0 +1,5 @@ +use anchor_lang::prelude::*; + +declare_program!(damm_v2); + +pub use damm_v2::*; diff --git a/libs/dynamic-bonding-curve/Cargo.toml b/libs/dynamic-bonding-curve/Cargo.toml new file mode 100644 index 0000000..9c6658c --- /dev/null +++ b/libs/dynamic-bonding-curve/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "dynamic-bonding-curve" +version = "0.1.6" +authors = [""] +edition = "2021" + +[dependencies] +anchor-lang = { workspace = true } +bytemuck = { workspace = true, features = ["min_const_generics"] } \ No newline at end of file diff --git a/libs/dynamic-bonding-curve/src/lib.rs b/libs/dynamic-bonding-curve/src/lib.rs new file mode 100644 index 0000000..e0cb6aa --- /dev/null +++ b/libs/dynamic-bonding-curve/src/lib.rs @@ -0,0 +1,5 @@ +use anchor_lang::prelude::*; + +declare_program!(dynamic_bonding_curve); + +pub use dynamic_bonding_curve::*; diff --git a/package-lock.json b/package-lock.json index 215ac80..5714c8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "@coral-xyz/anchor": "^0.31.1", "@solana/spl-token": "^0.4.13", "@solana/web3.js": "^1.98.2", - "litesvm": "^0.2.0" + "decimal.js": "^10.6.0", + "litesvm": "^0.1.0" }, "devDependencies": { "@types/bn.js": "^5.1.0", @@ -1009,6 +1010,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, "node_modules/deep-eql": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", @@ -1455,9 +1462,9 @@ } }, "node_modules/litesvm": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm/-/litesvm-0.2.0.tgz", - "integrity": "sha512-75+ZMkSFY5ynI3S+vCMnZv1wcILg5iNEj21B+XE/G3/P2dfTPj+rbdNM1q3eLFdlnXdewhiB4BLypKsBnQTSOw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm/-/litesvm-0.1.0.tgz", + "integrity": "sha512-XfpvWgYxFQUZxwFzWJTsuHRc1y34q8WtC60lhvH1xb6YX1/RBLqzIClp2JkxtlqGnDi/WPlThsXGmC3SinuPMQ==", "license": "MIT", "dependencies": { "@solana/web3.js": "^1.68.0", @@ -1467,17 +1474,17 @@ "node": ">= 10" }, "optionalDependencies": { - "litesvm-darwin-arm64": "0.2.0", - "litesvm-darwin-universal": "0.2.0", - "litesvm-darwin-x64": "0.2.0", - "litesvm-linux-x64-gnu": "0.2.0", - "litesvm-linux-x64-musl": "0.2.0" + "litesvm-darwin-arm64": "0.1.0", + "litesvm-darwin-universal": "0.1.0", + "litesvm-darwin-x64": "0.1.0", + "litesvm-linux-x64-gnu": "0.1.0", + "litesvm-linux-x64-musl": "0.1.0" } }, "node_modules/litesvm-darwin-arm64": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm-darwin-arm64/-/litesvm-darwin-arm64-0.2.0.tgz", - "integrity": "sha512-fqGE7Z6iT+5Xob9o1xs0N7Tf3c1meJxDERf7Z6T7Loqm0seyUsfjM0gTOvMJHiWvvnOx+qIo/Cjhtp84Kb9v8w==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm-darwin-arm64/-/litesvm-darwin-arm64-0.1.0.tgz", + "integrity": "sha512-GwBph2fNaR9UP1nhFmQYk7UMcI9+ogrzpbDl2en70FUnPc+FDlchOts2X8IL5XFCU+m4ZGoQl/N9b+FywJN5lQ==", "cpu": [ "arm64" ], @@ -1491,9 +1498,9 @@ } }, "node_modules/litesvm-darwin-universal": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm-darwin-universal/-/litesvm-darwin-universal-0.2.0.tgz", - "integrity": "sha512-CNgVrQ9tknv8JbtpmOO0SNXuOQj769A3ufWHrMFEBuFhCr9CJ6RQI9a/HxPWjMHTC7EzlcF8klMupPYpqM8KGA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm-darwin-universal/-/litesvm-darwin-universal-0.1.0.tgz", + "integrity": "sha512-GjGpz77ei+RfWiMtHiES0X8GP+TafFHWu5fAQXgXEoGia7RG32Z12iJBhwfvk0T4EKbm8bqlyqhe5Me/nARm/w==", "license": "MIT", "optional": true, "os": [ @@ -1504,9 +1511,9 @@ } }, "node_modules/litesvm-darwin-x64": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm-darwin-x64/-/litesvm-darwin-x64-0.2.0.tgz", - "integrity": "sha512-blRxD4y0FIx3E27Iv7oX0uz9x3v9KPD+++HLatBx5K5bh57qrAStUINsgT6MchYrxxOE0T2xktJaiSQSEMxWSA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm-darwin-x64/-/litesvm-darwin-x64-0.1.0.tgz", + "integrity": "sha512-1N/IPfoT+gcpkvG9Wm7+vcaxgl/LB8hbm85cHDQRq4O1wyiRRiR6ByeNRamj+OFEDSfI7a/1NshhMobnnr2MGQ==", "cpu": [ "x64" ], @@ -1520,9 +1527,9 @@ } }, "node_modules/litesvm-linux-x64-gnu": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm-linux-x64-gnu/-/litesvm-linux-x64-gnu-0.2.0.tgz", - "integrity": "sha512-2PQcLvn5c8GLGPp/vLCFaladWe61wbtwwTlIMLEfPeU5f88jBPOaEryO85+0FHZS1awbT97caa55sFDpAO4CWw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm-linux-x64-gnu/-/litesvm-linux-x64-gnu-0.1.0.tgz", + "integrity": "sha512-S6krvRz6BXxVZIkap5XkWwulSG4KsbFrxjyqP1X0zANa8jWMHEd09Zy9pPgfOetni2exg67fBmSlWq4sRfzlCw==", "cpu": [ "x64" ], @@ -1536,9 +1543,9 @@ } }, "node_modules/litesvm-linux-x64-musl": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/litesvm-linux-x64-musl/-/litesvm-linux-x64-musl-0.2.0.tgz", - "integrity": "sha512-9vAYFIicGjZIlwoCBii6yJmfIUVS4cdF0CxoAL+DGexTBLECk+Tr+WEFEXsvsYe4s81jxP04TTiUnasj/EaIcw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/litesvm-linux-x64-musl/-/litesvm-linux-x64-musl-0.1.0.tgz", + "integrity": "sha512-3E9gC5HRCEHFsfUNDhAY9JKx6ou6JazlnYMhT89JgbAN/YsJmyEgkTfY6W7TVV90g4EAJ/K4smSmg+vV413mYQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 48f9fad..1cb4f73 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "@coral-xyz/anchor": "^0.31.1", "@solana/spl-token": "^0.4.13", "@solana/web3.js": "^1.98.2", - "litesvm": "^0.2.0" + "decimal.js": "^10.6.0", + "litesvm": "^0.1.0" }, "devDependencies": { "@types/bn.js": "^5.1.0", diff --git a/programs/dynamic-fee-sharing/Cargo.toml b/programs/dynamic-fee-sharing/Cargo.toml index ae9831d..8fee9a2 100644 --- a/programs/dynamic-fee-sharing/Cargo.toml +++ b/programs/dynamic-fee-sharing/Cargo.toml @@ -18,12 +18,15 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] -anchor-lang = {version = "0.31.1", features = ["event-cpi"]} -anchor-spl = "0.31.1" -bytemuck = { version = "1.20.0", features = ["derive", "min_const_generics"] } +anchor-lang = { workspace = true } +anchor-spl = { workspace = true } +bytemuck = { workspace = true } num_enum = "0.7.0" ruint = "1.3.0" static_assertions = "1.1.0" +const-crypto = "0.3.0" +damm-v2 = { path = "../../libs/damm-v2" } +dynamic-bonding-curve = { path = "../../libs/dynamic-bonding-curve" } [dev-dependencies] proptest = "1.2.0" \ No newline at end of file diff --git a/programs/dynamic-fee-sharing/src/const_pda.rs b/programs/dynamic-fee-sharing/src/const_pda.rs new file mode 100644 index 0000000..c502e41 --- /dev/null +++ b/programs/dynamic-fee-sharing/src/const_pda.rs @@ -0,0 +1,31 @@ +use anchor_lang::solana_program::pubkey::Pubkey; +use const_crypto::ed25519; + +pub mod fee_vault_authority { + use super::*; + + const FEE_VAULT_AUTHORITY_AND_BUMP: ([u8; 32], u8) = ed25519::derive_program_address( + &[crate::constants::seeds::FEE_VAULT_AUTHORITY_PREFIX], + &crate::ID_CONST.to_bytes(), + ); + + pub const ID: Pubkey = Pubkey::new_from_array(FEE_VAULT_AUTHORITY_AND_BUMP.0); + pub const BUMP: u8 = FEE_VAULT_AUTHORITY_AND_BUMP.1; +} + +// Potential optimization on event authority too since anchor internally do Pubkey::find_program_address during runtime. + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_const_fee_vault_authority() { + let (derived_pool_authority, derived_bump) = Pubkey::find_program_address( + &[crate::constants::seeds::FEE_VAULT_AUTHORITY_PREFIX], + &crate::ID, + ); + assert_eq!(fee_vault_authority::ID, derived_pool_authority); + assert_eq!(fee_vault_authority::BUMP, derived_bump); + } +} diff --git a/programs/dynamic-fee-sharing/src/error.rs b/programs/dynamic-fee-sharing/src/error.rs index 8e12aa6..6908be3 100644 --- a/programs/dynamic-fee-sharing/src/error.rs +++ b/programs/dynamic-fee-sharing/src/error.rs @@ -25,4 +25,13 @@ pub enum FeeVaultError { #[msg("Exceeded number of users allowed")] ExceededUser, + + #[msg("Invalid fee vault")] + InvalidFeeVault, + + #[msg("Invalid dammv2 pool")] + InvalidDammv2Pool, + + #[msg("Invalid dammv2 pool")] + InvalidDbcPool, } diff --git a/programs/dynamic-fee-sharing/src/event.rs b/programs/dynamic-fee-sharing/src/event.rs index d1aa625..96f9e88 100644 --- a/programs/dynamic-fee-sharing/src/event.rs +++ b/programs/dynamic-fee-sharing/src/event.rs @@ -1,6 +1,6 @@ use anchor_lang::prelude::*; -use crate::InitializeFeeVaultParameters; +use crate::{state::FundingType, InitializeFeeVaultParameters}; #[event] pub struct EvtInitializeFeeVault { @@ -13,10 +13,10 @@ pub struct EvtInitializeFeeVault { #[event] pub struct EvtFundFee { + pub funding_type: FundingType, pub fee_vault: Pubkey, pub funder: Pubkey, - pub excluded_transfer_fee_amount: u64, - pub max_amount: u64, + pub funded_amount: u64, pub fee_per_share: u128, } diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_claim_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_claim_fee.rs index 73a6622..f7fa3c9 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_claim_fee.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_claim_fee.rs @@ -1,7 +1,7 @@ use anchor_lang::prelude::*; use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface}; -use crate::constants::seeds::FEE_VAULT_AUTHORITY_PREFIX; +use crate::const_pda; use crate::event::EvtClaimFee; use crate::state::FeeVault; use crate::utils::token::transfer_from_fee_vault; @@ -12,13 +12,10 @@ pub struct ClaimFeeCtx<'info> { #[account(mut, has_one = token_vault, has_one = token_mint)] pub fee_vault: AccountLoader<'info, FeeVault>, - /// CHECK: pool authority + /// CHECK: fee vault authority #[account( - seeds = [ - FEE_VAULT_AUTHORITY_PREFIX.as_ref(), - ], - bump, - )] + address = const_pda::fee_vault_authority::ID + )] pub fee_vault_authority: UncheckedAccount<'info>, #[account(mut)] @@ -46,7 +43,6 @@ pub fn handle_claim_fee(ctx: Context, index: u8) -> Result<()> { &ctx.accounts.user_token_vault, &ctx.accounts.token_program, fee_being_claimed, - ctx.bumps.fee_vault_authority, )?; emit_cpi!(EvtClaimFee { diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs index 0ef97a5..58f02a7 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs @@ -3,7 +3,7 @@ use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface}; use crate::error::FeeVaultError; use crate::event::EvtFundFee; -use crate::state::FeeVault; +use crate::state::{FeeVault, FundingType}; use crate::utils::token::{calculate_transfer_fee_excluded_amount, transfer_from_user}; #[event_cpi] @@ -46,11 +46,11 @@ pub fn handle_fund_fee(ctx: Context, max_amount: u64) -> Result<()> )?; emit_cpi!(EvtFundFee { + funding_type: FundingType::Direct, fee_vault: ctx.accounts.fee_vault.key(), funder: ctx.accounts.funder.key(), - fee_per_share: fee_vault.fee_per_share, - excluded_transfer_fee_amount, - max_amount + funded_amount: excluded_transfer_fee_amount, + fee_per_share: fee_vault.fee_per_share }); Ok(()) diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs new file mode 100644 index 0000000..0cb5024 --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs @@ -0,0 +1,143 @@ +use anchor_lang::prelude::*; +use anchor_spl::token_interface::TokenAccount; +use damm_v2::accounts::Pool; + +use crate::{ + error::FeeVaultError, + event::EvtFundFee, + math::SafeMath, + state::{FeeVault, FundingType}, +}; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundingByClaimDammv2FeeCtx<'info> { + #[account(mut)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + pub pool: AccountLoader<'info, Pool>, + + /// CHECK: pool + #[account(mut)] + pub position: UncheckedAccount<'info>, + + /// CHECK: + /// The token account for nft + pub position_nft_account: UncheckedAccount<'info>, + + /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account + #[account(mut)] + pub token_a_account: UncheckedAccount<'info>, + + /// The user token b account + #[account(mut)] + pub token_b_account: Box>, + + /// CHECK: + /// The vault token account for input token + #[account(mut)] + pub token_a_vault: UncheckedAccount<'info>, + + /// CHECK: + /// The vault token account for output token + #[account(mut)] + pub token_b_vault: UncheckedAccount<'info>, + + /// CHECK: + /// The mint of token a + pub token_a_mint: UncheckedAccount<'info>, + + /// CHECK: + /// The mint of token b + pub token_b_mint: UncheckedAccount<'info>, + + /// CHECK: Token a program + pub token_a_program: UncheckedAccount<'info>, + + /// CHECK: Token b program + pub token_b_program: UncheckedAccount<'info>, + + /// CHECK: dammv2 pool authority + pub dammv2_pool_authority: UncheckedAccount<'info>, + + /// CHECK: dammv2 program + #[account(address = damm_v2::ID)] + pub dammv2_program: UncheckedAccount<'info>, + /// CHECK: dammv2 authority + pub dammv2_event_authority: UncheckedAccount<'info>, +} + +pub fn handle_funding_by_claim_dammv2_fee(ctx: Context) -> Result<()> { + let pool = ctx.accounts.pool.load()?; + // support collect fee mode is 1 (only token B) + require!(pool.collect_fee_mode == 1, FeeVaultError::InvalidDammv2Pool); + + let fee_vault = ctx.accounts.fee_vault.load()?; + + require!( + fee_vault + .token_vault + .eq(&ctx.accounts.token_b_account.key()) + && fee_vault.token_mint.eq(&ctx.accounts.token_b_mint.key()), + FeeVaultError::InvalidFeeVault + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_b_account.amount; + + let signer_seeds = fee_vault_seeds!( + fee_vault.base, + fee_vault.token_mint, + fee_vault.fee_vault_bump + ); + + damm_v2::cpi::claim_position_fee(CpiContext::new_with_signer( + ctx.accounts.dammv2_program.to_account_info(), + damm_v2::cpi::accounts::ClaimPositionFee { + pool_authority: ctx.accounts.dammv2_pool_authority.to_account_info(), + pool: ctx.accounts.pool.to_account_info(), + position: ctx.accounts.position.to_account_info(), + token_a_account: ctx.accounts.token_a_account.to_account_info(), + token_b_account: ctx.accounts.token_b_account.to_account_info(), + token_a_vault: ctx.accounts.token_a_vault.to_account_info(), + token_b_vault: ctx.accounts.token_b_vault.to_account_info(), + token_a_program: ctx.accounts.token_a_program.to_account_info(), + token_b_program: ctx.accounts.token_b_program.to_account_info(), + token_a_mint: ctx.accounts.token_a_mint.to_account_info(), + token_b_mint: ctx.accounts.token_b_mint.to_account_info(), + position_nft_account: ctx.accounts.position_nft_account.to_account_info(), + owner: ctx.accounts.fee_vault.to_account_info(), + event_authority: ctx.accounts.dammv2_event_authority.to_account_info(), + program: ctx.accounts.dammv2_program.to_account_info(), + }, + &[signer_seeds], + ))?; + + ctx.accounts.token_b_account.reload()?; + + let after_token_vault_balance = ctx.accounts.token_b_account.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + drop(fee_vault); + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + funding_type: FundingType::ClaimDammV2, + fee_vault: ctx.accounts.fee_vault.key(), + funder: ctx.accounts.pool.key(), + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs new file mode 100644 index 0000000..b2f81df --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs @@ -0,0 +1,125 @@ +use anchor_lang::prelude::*; +use anchor_spl::token_interface::TokenAccount; +use dynamic_bonding_curve::accounts::VirtualPool; + +use crate::{ + error::FeeVaultError, + event::EvtFundFee, + math::SafeMath, + state::{FeeVault, FundingType}, +}; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundingByClaimDbcCreatorSurplusCtx<'info> { + #[account(mut)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + /// CHECK: The pool config + pub config: UncheckedAccount<'info>, + + /// The dbc virtual pool + #[account(mut)] + pub pool: AccountLoader<'info, VirtualPool>, + + /// The treasury token b account + #[account(mut)] + pub token_quote_account: Box>, + + /// CHECK: The vault token account for quote token + #[account(mut)] + pub quote_vault: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub quote_mint: UncheckedAccount<'info>, + + /// CHECK: Token base program + pub token_base_program: UncheckedAccount<'info>, + + /// CHECK: Token quote program + pub token_quote_program: UncheckedAccount<'info>, + + /// CHECK: dbc pool authority + pub dbc_pool_authority: UncheckedAccount<'info>, + + /// CHECK: dbc program + #[account(address = dynamic_bonding_curve::ID)] + pub dbc_program: UncheckedAccount<'info>, + /// CHECK: dbc event authority + pub dbc_event_authority: UncheckedAccount<'info>, +} + +pub fn handle_funding_by_claim_dbc_creator_surplus( + ctx: Context, +) -> Result<()> { + let virtual_pool = ctx.accounts.pool.load()?; + // creator surplus has been withdraw + if virtual_pool.is_creator_withdraw_surplus == 1 { + return Ok(()); + } + + drop(virtual_pool); + + let fee_vault = ctx.accounts.fee_vault.load()?; + + require!( + fee_vault + .token_vault + .eq(&ctx.accounts.token_quote_account.key()) + && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), + FeeVaultError::InvalidFeeVault + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_quote_account.amount; + + let signer_seeds = fee_vault_seeds!( + fee_vault.base, + fee_vault.token_mint, + fee_vault.fee_vault_bump + ); + + dynamic_bonding_curve::cpi::creator_withdraw_surplus(CpiContext::new_with_signer( + ctx.accounts.dbc_program.to_account_info(), + dynamic_bonding_curve::cpi::accounts::CreatorWithdrawSurplus { + pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), + config: ctx.accounts.config.to_account_info(), + virtual_pool: ctx.accounts.pool.to_account_info(), + token_quote_account: ctx.accounts.token_quote_account.to_account_info(), + quote_vault: ctx.accounts.quote_vault.to_account_info(), + quote_mint: ctx.accounts.quote_mint.to_account_info(), + creator: ctx.accounts.fee_vault.to_account_info(), + token_quote_program: ctx.accounts.token_quote_program.to_account_info(), + event_authority: ctx.accounts.dbc_event_authority.to_account_info(), + program: ctx.accounts.dbc_program.to_account_info(), + }, + &[signer_seeds], + ))?; + ctx.accounts.token_quote_account.reload()?; + + let after_token_vault_balance = ctx.accounts.token_quote_account.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + drop(fee_vault); + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + funding_type: FundingType::ClaimDbcCreatorSurplus, + fee_vault: ctx.accounts.fee_vault.key(), + funder: ctx.accounts.pool.key(), + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs new file mode 100644 index 0000000..d716a89 --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs @@ -0,0 +1,136 @@ +use anchor_lang::prelude::*; +use anchor_spl::token_interface::TokenAccount; +use dynamic_bonding_curve::accounts::PoolConfig; + +use crate::{ + error::FeeVaultError, + event::EvtFundFee, + math::SafeMath, + state::{FeeVault, FundingType}, +}; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundingByClaimDbcCreatorTradingFeeCtx<'info> { + #[account(mut)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + #[account(has_one = quote_mint)] + pub config: AccountLoader<'info, PoolConfig>, + + /// CHECK: The virtual pool + #[account(mut)] + pub pool: UncheckedAccount<'info>, + + /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account + #[account(mut)] + pub token_a_account: UncheckedAccount<'info>, + + /// The token b account + #[account(mut)] + pub token_b_account: Box>, + + /// CHECK: The vault token account for base token + #[account(mut)] + pub base_vault: UncheckedAccount<'info>, + + /// CHECK: The vault token account for quote token + #[account(mut)] + pub quote_vault: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub base_mint: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub quote_mint: UncheckedAccount<'info>, + + /// CHECK: Token base program + pub token_base_program: UncheckedAccount<'info>, + + /// CHECK: Token quote program + pub token_quote_program: UncheckedAccount<'info>, + + /// CHECK: dbc pool authority + pub dbc_pool_authority: UncheckedAccount<'info>, + + /// CHECK: dbc program + #[account(address = dynamic_bonding_curve::ID)] + pub dbc_program: UncheckedAccount<'info>, + /// CHECK: dbc event authority + pub dbc_event_authority: UncheckedAccount<'info>, +} + +pub fn handle_funding_by_claim_dbc_creator_trading_fee( + ctx: Context, +) -> Result<()> { + let config = ctx.accounts.config.load()?; + let fee_vault = ctx.accounts.fee_vault.load()?; + // support collect fee mode is 0 (only quote token) + require!(config.collect_fee_mode == 0, FeeVaultError::InvalidDbcPool); + + require!( + fee_vault + .token_vault + .eq(&ctx.accounts.token_b_account.key()) + && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), + FeeVaultError::InvalidFeeVault + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_b_account.amount; + let signer_seeds = fee_vault_seeds!( + fee_vault.base, + fee_vault.token_mint, + fee_vault.fee_vault_bump + ); + dynamic_bonding_curve::cpi::claim_creator_trading_fee( + CpiContext::new_with_signer( + ctx.accounts.dbc_program.to_account_info(), + dynamic_bonding_curve::cpi::accounts::ClaimCreatorTradingFee { + pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), + pool: ctx.accounts.pool.to_account_info(), + token_a_account: ctx.accounts.token_a_account.to_account_info(), + token_b_account: ctx.accounts.token_b_account.to_account_info(), + base_vault: ctx.accounts.base_vault.to_account_info(), + quote_vault: ctx.accounts.quote_vault.to_account_info(), + base_mint: ctx.accounts.base_mint.to_account_info(), + quote_mint: ctx.accounts.quote_mint.to_account_info(), + creator: ctx.accounts.fee_vault.to_account_info(), + token_base_program: ctx.accounts.token_base_program.to_account_info(), + token_quote_program: ctx.accounts.token_quote_program.to_account_info(), + event_authority: ctx.accounts.dbc_event_authority.to_account_info(), + program: ctx.accounts.dbc_program.to_account_info(), + }, + &[signer_seeds], + ), + 0, // max base amount, + u64::MAX, // max quote amount, + )?; + ctx.accounts.token_b_account.reload()?; + + let after_token_vault_balance = ctx.accounts.token_b_account.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + drop(fee_vault); + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + funding_type: FundingType::ClaimDbcCreatorTradingFee, + fee_vault: ctx.accounts.fee_vault.key(), + funder: ctx.accounts.pool.key(), + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs new file mode 100644 index 0000000..4465835 --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs @@ -0,0 +1,125 @@ +use anchor_lang::prelude::*; +use anchor_spl::token_interface::TokenAccount; +use dynamic_bonding_curve::accounts::VirtualPool; + +use crate::{ + error::FeeVaultError, + event::EvtFundFee, + math::SafeMath, + state::{FeeVault, FundingType}, +}; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundingByClaimDbcPartnerSurplusCtx<'info> { + #[account(mut)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + /// CHECK: The pool config + pub config: UncheckedAccount<'info>, + + /// The dbc virtual pool + #[account(mut)] + pub pool: AccountLoader<'info, VirtualPool>, + + /// The token b account + #[account(mut)] + pub token_quote_account: Box>, + + /// CHECK: The vault token account for quote token + #[account(mut)] + pub quote_vault: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub quote_mint: UncheckedAccount<'info>, + + /// CHECK: Token base program + pub token_base_program: UncheckedAccount<'info>, + + /// CHECK: Token quote program + pub token_quote_program: UncheckedAccount<'info>, + + /// CHECK: dbc pool authority + pub dbc_pool_authority: UncheckedAccount<'info>, + + /// CHECK: dbc program + #[account(address = dynamic_bonding_curve::ID)] + pub dbc_program: UncheckedAccount<'info>, + /// CHECK: dbc event authority + pub dbc_event_authority: UncheckedAccount<'info>, +} + +pub fn handle_funding_by_claim_dbc_partner_surplus( + ctx: Context, +) -> Result<()> { + let virtual_pool = ctx.accounts.pool.load()?; + // partner surplus has been withdraw + if virtual_pool.is_partner_withdraw_surplus == 1 { + return Ok(()); + } + + drop(virtual_pool); + + let fee_vault = ctx.accounts.fee_vault.load()?; + + require!( + fee_vault + .token_vault + .eq(&ctx.accounts.token_quote_account.key()) + && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), + FeeVaultError::InvalidFeeVault + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_quote_account.amount; + + let signer_seeds = fee_vault_seeds!( + fee_vault.base, + fee_vault.token_mint, + fee_vault.fee_vault_bump + ); + + dynamic_bonding_curve::cpi::partner_withdraw_surplus(CpiContext::new_with_signer( + ctx.accounts.dbc_program.to_account_info(), + dynamic_bonding_curve::cpi::accounts::PartnerWithdrawSurplus { + pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), + config: ctx.accounts.config.to_account_info(), + virtual_pool: ctx.accounts.pool.to_account_info(), + token_quote_account: ctx.accounts.token_quote_account.to_account_info(), + quote_vault: ctx.accounts.quote_vault.to_account_info(), + quote_mint: ctx.accounts.quote_mint.to_account_info(), + fee_claimer: ctx.accounts.fee_vault.to_account_info(), + token_quote_program: ctx.accounts.token_quote_program.to_account_info(), + event_authority: ctx.accounts.dbc_event_authority.to_account_info(), + program: ctx.accounts.dbc_program.to_account_info(), + }, + &[signer_seeds], + ))?; + ctx.accounts.token_quote_account.reload()?; + + let after_token_vault_balance = ctx.accounts.token_quote_account.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + drop(fee_vault); + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + funding_type: FundingType::ClaimDbcPartnerSurplus, + fee_vault: ctx.accounts.fee_vault.key(), + funder: ctx.accounts.pool.key(), + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs new file mode 100644 index 0000000..ac700d4 --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs @@ -0,0 +1,139 @@ +use anchor_lang::prelude::*; +use anchor_spl::token_interface::TokenAccount; +use dynamic_bonding_curve::accounts::PoolConfig; + +use crate::{ + error::FeeVaultError, + event::EvtFundFee, + math::SafeMath, + state::{FeeVault, FundingType}, +}; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundingByClaimDbcTradingFeeCtx<'info> { + #[account(mut)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + #[account(has_one=quote_mint)] + pub config: AccountLoader<'info, PoolConfig>, + + /// CHECK: bdc virtual pool + #[account(mut)] + pub pool: UncheckedAccount<'info>, + + /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account + #[account(mut)] + pub token_a_account: UncheckedAccount<'info>, + + /// The treasury token b account + #[account(mut)] + pub token_b_account: Box>, + + /// CHECK: The vault token account for base token + #[account(mut)] + pub base_vault: UncheckedAccount<'info>, + + /// CHECK: The vault token account for quote token + #[account(mut)] + pub quote_vault: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub base_mint: UncheckedAccount<'info>, + + /// CHECK: The mint of token base + pub quote_mint: UncheckedAccount<'info>, + + /// CHECK: Token base program + pub token_base_program: UncheckedAccount<'info>, + + /// CHECK: Token quote program + pub token_quote_program: UncheckedAccount<'info>, + + /// CHECK: dbc pool authority + pub dbc_pool_authority: UncheckedAccount<'info>, + + /// CHECK: dbc program + #[account(address = dynamic_bonding_curve::ID)] + pub dbc_program: UncheckedAccount<'info>, + /// CHECK: dbc authority + pub dbc_event_authority: UncheckedAccount<'info>, +} + +pub fn handle_funding_by_claim_dbc_partner_trading_fee( + ctx: Context, +) -> Result<()> { + let config = ctx.accounts.config.load()?; + let fee_vault = ctx.accounts.fee_vault.load()?; + // support collect fee mode is 0 (only quote token) + require!(config.collect_fee_mode == 0, FeeVaultError::InvalidDbcPool); + + require!( + fee_vault + .token_vault + .eq(&ctx.accounts.token_b_account.key()) + && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), + FeeVaultError::InvalidFeeVault + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_b_account.amount; + + let signer_seeds = fee_vault_seeds!( + fee_vault.base, + fee_vault.token_mint, + fee_vault.fee_vault_bump + ); + + dynamic_bonding_curve::cpi::claim_trading_fee( + CpiContext::new_with_signer( + ctx.accounts.dbc_program.to_account_info(), + dynamic_bonding_curve::cpi::accounts::ClaimTradingFee { + pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), + config: ctx.accounts.config.to_account_info(), + pool: ctx.accounts.pool.to_account_info(), + token_a_account: ctx.accounts.token_a_account.to_account_info(), + token_b_account: ctx.accounts.token_b_account.to_account_info(), + base_vault: ctx.accounts.base_vault.to_account_info(), + quote_vault: ctx.accounts.quote_vault.to_account_info(), + base_mint: ctx.accounts.base_mint.to_account_info(), + quote_mint: ctx.accounts.quote_mint.to_account_info(), + fee_claimer: ctx.accounts.fee_vault.to_account_info(), + token_base_program: ctx.accounts.token_base_program.to_account_info(), + token_quote_program: ctx.accounts.token_quote_program.to_account_info(), + event_authority: ctx.accounts.dbc_event_authority.to_account_info(), + program: ctx.accounts.dbc_program.to_account_info(), + }, + &[signer_seeds], + ), + 0, // max_amount_a, fee only token b + u64::MAX, // max_amount_b, + )?; + ctx.accounts.token_b_account.reload()?; + + let after_token_vault_balance = ctx.accounts.token_b_account.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + drop(fee_vault); + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + funding_type: FundingType::ClaimDbcPartnerTradingFee, + fee_vault: ctx.accounts.fee_vault.key(), + funder: ctx.accounts.pool.key(), + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault.rs b/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault.rs index a14b925..dadd994 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault.rs @@ -1,6 +1,7 @@ use crate::constants::MAX_USER; use crate::error::FeeVaultError; use crate::event::EvtInitializeFeeVault; +use crate::state::FeeVaultType; use crate::utils::token::{get_token_program_flags, is_supported_mint}; use crate::{ constants::seeds::{FEE_VAULT_AUTHORITY_PREFIX, TOKEN_VAULT_PREFIX}, @@ -104,6 +105,9 @@ pub fn handle_initialize_fee_vault( &ctx.accounts.fee_vault, ctx.accounts.owner.key, &ctx.accounts.token_vault.key(), + &Pubkey::default(), + 0, + FeeVaultType::NonPdaAccount.into(), )?; emit_cpi!(EvtInitializeFeeVault { @@ -123,6 +127,9 @@ pub fn create_fee_vault<'info>( fee_vault: &AccountLoader<'info, FeeVault>, owner: &Pubkey, token_vault: &Pubkey, + base: &Pubkey, + fee_vault_bump: u8, + fee_vault_type: u8, ) -> Result<()> { require!(is_supported_mint(&token_mint)?, FeeVaultError::InvalidMint); @@ -134,6 +141,9 @@ pub fn create_fee_vault<'info>( get_token_program_flags(&token_mint).into(), &token_mint.key(), token_vault, + base, + fee_vault_bump, + fee_vault_type, ¶ms.users, )?; Ok(()) diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault_pda.rs b/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault_pda.rs index c7d3227..0a34e98 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault_pda.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_initialize_fee_vault_pda.rs @@ -1,5 +1,6 @@ use crate::constants::seeds::FEE_VAULT_PREFIX; use crate::event::EvtInitializeFeeVault; +use crate::state::FeeVaultType; use crate::{ constants::seeds::{FEE_VAULT_AUTHORITY_PREFIX, TOKEN_VAULT_PREFIX}, state::FeeVault, @@ -76,6 +77,9 @@ pub fn handle_initialize_fee_vault_pda( &ctx.accounts.fee_vault, ctx.accounts.owner.key, &ctx.accounts.token_vault.key(), + &ctx.accounts.base.key, + ctx.bumps.fee_vault, + FeeVaultType::PdaAccount.into(), )?; emit_cpi!(EvtInitializeFeeVault { diff --git a/programs/dynamic-fee-sharing/src/instructions/mod.rs b/programs/dynamic-fee-sharing/src/instructions/mod.rs index f1bc8dc..ab0a0ac 100644 --- a/programs/dynamic-fee-sharing/src/instructions/mod.rs +++ b/programs/dynamic-fee-sharing/src/instructions/mod.rs @@ -6,3 +6,13 @@ pub mod ix_claim_fee; pub use ix_claim_fee::*; pub mod ix_initialize_fee_vault_pda; pub use ix_initialize_fee_vault_pda::*; +pub mod ix_funding_by_claim_damm_v2; +pub use ix_funding_by_claim_damm_v2::*; +pub mod ix_funding_by_claim_dbc_partner_trading_fee; +pub use ix_funding_by_claim_dbc_partner_trading_fee::*; +pub mod ix_funding_by_claim_dbc_creator_trading_fee; +pub use ix_funding_by_claim_dbc_creator_trading_fee::*; +pub mod ix_funding_by_claim_dbc_creator_surplus; +pub use ix_funding_by_claim_dbc_creator_surplus::*; +pub mod ix_funding_by_claim_dbc_partner_surplus; +pub use ix_funding_by_claim_dbc_partner_surplus::*; diff --git a/programs/dynamic-fee-sharing/src/lib.rs b/programs/dynamic-fee-sharing/src/lib.rs index 8bd8188..1cd6983 100644 --- a/programs/dynamic-fee-sharing/src/lib.rs +++ b/programs/dynamic-fee-sharing/src/lib.rs @@ -7,6 +7,7 @@ pub mod constants; pub mod error; pub mod instructions; pub use instructions::*; +pub mod const_pda; pub mod event; pub mod math; pub mod state; @@ -36,6 +37,34 @@ pub mod dynamic_fee_sharing { instructions::handle_fund_fee(ctx, max_amount) } + pub fn funding_by_claim_dammv2_fee(ctx: Context) -> Result<()> { + instructions::handle_funding_by_claim_dammv2_fee(ctx) + } + + pub fn funding_by_claim_dbc_partner_trading_fee( + ctx: Context, + ) -> Result<()> { + instructions::handle_funding_by_claim_dbc_partner_trading_fee(ctx) + } + + pub fn funding_by_claim_dbc_creator_trading_fee( + ctx: Context, + ) -> Result<()> { + instructions::handle_funding_by_claim_dbc_creator_trading_fee(ctx) + } + + pub fn funding_by_claim_dbc_creator_surplus( + ctx: Context, + ) -> Result<()> { + instructions::handle_funding_by_claim_dbc_creator_surplus(ctx) + } + + pub fn funding_by_claim_dbc_partner_surplus( + ctx: Context, + ) -> Result<()> { + instructions::handle_funding_by_claim_dbc_partner_surplus(ctx) + } + pub fn claim_fee(ctx: Context, index: u8) -> Result<()> { instructions::handle_claim_fee(ctx, index) } diff --git a/programs/dynamic-fee-sharing/src/macros.rs b/programs/dynamic-fee-sharing/src/macros.rs index f386009..5dcfce3 100644 --- a/programs/dynamic-fee-sharing/src/macros.rs +++ b/programs/dynamic-fee-sharing/src/macros.rs @@ -1,6 +1,19 @@ -//! Macro functions macro_rules! fee_vault_authority_seeds { - ($bump:expr) => { - &[b"fee_vault_authority".as_ref(), &[$bump]] + () => { + &[ + crate::constants::seeds::FEE_VAULT_AUTHORITY_PREFIX, + &[crate::const_pda::fee_vault_authority::BUMP], + ] + }; +} + +macro_rules! fee_vault_seeds { + ($base:expr, $token_mint:expr, $bump:expr) => { + &[ + crate::constants::seeds::FEE_VAULT_PREFIX, + $base.as_ref(), + $token_mint.as_ref(), + &[$bump], + ] }; } diff --git a/programs/dynamic-fee-sharing/src/state/fee_vault.rs b/programs/dynamic-fee-sharing/src/state/fee_vault.rs index db1a8b6..f72ad0d 100644 --- a/programs/dynamic-fee-sharing/src/state/fee_vault.rs +++ b/programs/dynamic-fee-sharing/src/state/fee_vault.rs @@ -5,8 +5,36 @@ use crate::{ math::{mul_shr, shl_div, SafeMath}, }; use anchor_lang::prelude::*; +use num_enum::{IntoPrimitive, TryFromPrimitive}; use static_assertions::const_assert_eq; +#[derive(AnchorSerialize, AnchorDeserialize, Debug, PartialEq, Eq)] +#[repr(u8)] +pub enum FundingType { + Direct, + ClaimDammV2, + ClaimDbcPartnerTradingFee, + ClaimDbcCreatorTradingFee, + ClaimDbcPartnerSurplus, + ClaimDbcCreatorSurplus, +} + +#[repr(u8)] +#[derive( + Clone, + Copy, + Debug, + PartialEq, + IntoPrimitive, + TryFromPrimitive, + AnchorDeserialize, + AnchorSerialize, +)] +pub enum FeeVaultType { + NonPdaAccount, + PdaAccount, +} + #[account(zero_copy)] #[derive(InitSpace, Debug, Default)] pub struct FeeVault { @@ -14,12 +42,15 @@ pub struct FeeVault { pub token_mint: Pubkey, pub token_vault: Pubkey, pub token_flag: u8, // indicate whether token is spl-token or token2022 - pub padding_0: [u8; 15], + pub fee_vault_type: u8, + pub fee_vault_bump: u8, + pub padding_0: [u8; 13], pub total_share: u32, pub padding_1: [u8; 4], pub total_funded_fee: u64, pub fee_per_share: u128, - pub padding: [u128; 6], + pub base: Pubkey, + pub padding: [u128; 4], pub users: [UserFee; MAX_USER], } const_assert_eq!(FeeVault::INIT_SPACE, 640); @@ -43,6 +74,9 @@ impl FeeVault { token_flag: u8, token_mint: &Pubkey, token_vault: &Pubkey, + base: &Pubkey, + fee_vault_bump: u8, + fee_vault_type: u8, users: &[UserShare], ) -> Result<()> { self.owner = *owner; @@ -59,6 +93,10 @@ impl FeeVault { total_share = total_share.safe_add(users[i].share)?; } self.total_share = total_share; + self.base = *base; + self.fee_vault_bump = fee_vault_bump; + self.fee_vault_type = fee_vault_type; + Ok(()) } diff --git a/programs/dynamic-fee-sharing/src/utils/token.rs b/programs/dynamic-fee-sharing/src/utils/token.rs index 19ec28a..65787c0 100644 --- a/programs/dynamic-fee-sharing/src/utils/token.rs +++ b/programs/dynamic-fee-sharing/src/utils/token.rs @@ -144,9 +144,8 @@ pub fn transfer_from_fee_vault<'c: 'info, 'info>( token_owner_account: &InterfaceAccount<'info, TokenAccount>, token_program: &Interface<'info, TokenInterface>, amount: u64, - bump: u8, ) -> Result<()> { - let signer_seeds = fee_vault_authority_seeds!(bump); + let signer_seeds = fee_vault_authority_seeds!(); let instruction = spl_token_2022::instruction::transfer_checked( token_program.key, diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..552d6d6 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.85.0" \ No newline at end of file diff --git a/tests/claim_damm_v2.test.ts b/tests/claim_damm_v2.test.ts new file mode 100644 index 0000000..c403e07 --- /dev/null +++ b/tests/claim_damm_v2.test.ts @@ -0,0 +1,130 @@ +import { LiteSVM } from "litesvm"; +import { PublicKey, Keypair, Transaction } from "@solana/web3.js"; +import { + generateUsers, + getTokenBalance, + sendTransactionOrExpectThrowError, + startSvm, +} from "./common/svm"; +import { + createToken, + deriveFeeVaultAuthorityAddress, + getFeeVault, + mintToken, +} from "./common"; +import { createDammV2Pool, dammV2Swap } from "./common/damm_v2"; +import { claimDammV2Fee, createFeeVaultPda } from "./common/dfs"; +import { BN } from "bn.js"; +import { expect } from "chai"; +import { + AuthorityType, + createSetAuthorityInstruction, + TOKEN_2022_PROGRAM_ID, +} from "@solana/spl-token"; + +describe("Claim damm v2 fee", () => { + let svm: LiteSVM; + let admin: Keypair; + let creator: Keypair; + let vaultOwner: Keypair; + let tokenAMint: PublicKey; + let tokenBMint: PublicKey; + let dammV2Pool: PublicKey; + let positionNftAccount: PublicKey; + let position: PublicKey; + + beforeEach(async () => { + svm = startSvm(); + [admin, creator, vaultOwner] = generateUsers(svm, 7); + tokenAMint = createToken(svm, admin, admin.publicKey, null); + tokenBMint = createToken(svm, admin, admin.publicKey, null); + + mintToken(svm, admin, tokenAMint, admin, creator.publicKey); + mintToken(svm, admin, tokenBMint, admin, creator.publicKey); + + // create damm v2 pool + const createDmmV2PoolRes = await createDammV2Pool( + svm, + creator, + tokenAMint, + tokenBMint + ); + dammV2Pool = createDmmV2PoolRes.pool; + position = createDmmV2PoolRes.position; + positionNftAccount = createDmmV2PoolRes.positionNftAccount; + }); + + it("fullflow claim damm v2", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + tokenBMint, + { + padding: [], + users: [ + { + address: PublicKey.unique(), + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const setAuthorityIx = createSetAuthorityInstruction( + positionNftAccount, + creator.publicKey, + AuthorityType.AccountOwner, + feeVault, + [], + TOKEN_2022_PROGRAM_ID + ); + const assignOwnerTx = new Transaction().add(setAuthorityIx); + assignOwnerTx.recentBlockhash = svm.latestBlockhash(); + assignOwnerTx.sign(creator); + + sendTransactionOrExpectThrowError(svm, assignOwnerTx); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + // swap damm v2 + await dammV2Swap(svm, { + payer: creator, + pool: dammV2Pool, + inputTokenMint: tokenAMint, + outputTokenMint: tokenBMint, + amountIn: new BN(10000 * 10 ** 6), + minimumAmountOut: new BN(0), + }); + + await claimDammV2Fee( + svm, + creator, + feeVault, + tokenVault, + dammV2Pool, + position, + positionNftAccount + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); +}); diff --git a/tests/claim_dbc_creator_trading_fee.test.ts b/tests/claim_dbc_creator_trading_fee.test.ts new file mode 100644 index 0000000..fdf975d --- /dev/null +++ b/tests/claim_dbc_creator_trading_fee.test.ts @@ -0,0 +1,349 @@ +import { BN } from "bn.js"; +import { Connection, Keypair, PublicKey } from "@solana/web3.js"; +import { config, expect } from "chai"; +import { LiteSVM } from "litesvm"; +import { generateUsers, getTokenBalance, startSvm } from "./common/svm"; +import { + createToken, + deriveFeeVaultAuthorityAddress, + getFeeVault, + mintToken, +} from "./common"; +import { + buildDefaultCurve, + createConfig, + CreateConfigParams, + createVirtualPool, + getVirtualConfigState, + getVirtualPoolState, + swap, + SwapParams, + transferCreator, +} from "./common/dbc"; +import { + claimDbcCreatorTradingFee, + claimDbcTradingFee, + createFeeVaultPda, + withdrawDbcCreatorSurplus, + withdrawDbcPartnerSurplus, +} from "./common/dfs"; + +describe("Claim fee and withdraw dbc surplus", () => { + let svm: LiteSVM; + let admin: Keypair; + let payer: Keypair; + let user: Keypair; + let poolCreator: Keypair; + let vaultOwner: Keypair; + let quoteMint: PublicKey; + + beforeEach(async () => { + svm = startSvm(); + admin = Keypair.generate(); + payer = Keypair.generate(); + user = Keypair.generate(); + poolCreator = Keypair.generate(); + [admin, payer, user, poolCreator, vaultOwner] = generateUsers(svm, 5); + quoteMint = createToken(svm, admin, admin.publicKey, null); + }); + + it("claim dbc creator trading fee", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + quoteMint, + { + padding: [], + users: [ + { + address: PublicKey.unique(), + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const { virtualPool, virtualPoolConfig } = await setupPool( + svm, + admin, + user, + poolCreator, + payer, + feeVault, + quoteMint + ); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + await claimDbcCreatorTradingFee( + svm, + poolCreator, + feeVault, + tokenVault, + virtualPoolConfig, + virtualPool + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); + + it("claim dbc trading fee", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + quoteMint, + { + padding: [], + users: [ + { + address: PublicKey.unique(), + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const { virtualPool, virtualPoolConfig } = await setupPool( + svm, + admin, + user, + poolCreator, + payer, + feeVault, + quoteMint + ); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + await claimDbcTradingFee( + svm, + payer, + feeVault, + tokenVault, + virtualPoolConfig, + virtualPool + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); + + it("withdraw dbc creator surplus", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + quoteMint, + { + padding: [], + users: [ + { + address: PublicKey.unique(), + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const { virtualPool, virtualPoolConfig } = await setupPool( + svm, + admin, + user, + poolCreator, + payer, + feeVault, + quoteMint + ); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + await withdrawDbcCreatorSurplus( + svm, + poolCreator, + feeVault, + tokenVault, + virtualPoolConfig, + virtualPool + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); + + it("withdraw dbc partner surplus", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + quoteMint, + { + padding: [], + users: [ + { + address: PublicKey.unique(), + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const { virtualPool, virtualPoolConfig } = await setupPool( + svm, + admin, + user, + poolCreator, + payer, + feeVault, + quoteMint + ); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + await withdrawDbcPartnerSurplus( + svm, + payer, + feeVault, + tokenVault, + virtualPoolConfig, + virtualPool + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); +}); + +async function setupPool( + svm: LiteSVM, + admin: Keypair, + user: Keypair, + poolCreator: Keypair, + payer: Keypair, + feeVault: PublicKey, + quoteMint: PublicKey +) { + let instructionParams = buildDefaultCurve(); + const params: CreateConfigParams = { + payer, + leftoverReceiver: feeVault, + feeClaimer: feeVault, + quoteMint, + instructionParams, + }; + mintToken( + svm, + admin, + quoteMint, + admin, + user.publicKey, + instructionParams.migrationQuoteThreshold.mul(new BN(2)).toNumber() + ); + + const virtualPoolConfig = await createConfig(svm, params); + + const virtualPool = await createVirtualPool(svm, { + payer: poolCreator, + poolCreator: poolCreator, + quoteMint, + config: virtualPoolConfig, + instructionParams: { + name: "test token spl", + symbol: "TEST", + uri: "abc.com", + }, + }); + + // transfer pool creator + await transferCreator(svm, virtualPool, poolCreator, feeVault); + + let virtualPoolState = getVirtualPoolState(svm, virtualPool); + let configState = getVirtualConfigState(svm, virtualPoolConfig); + const amountIn = configState.migrationQuoteThreshold + .mul(new BN(6)) + .div(new BN(5)); + // swap + const swapParams: SwapParams = { + config: virtualPoolConfig, + payer: user, + pool: virtualPool, + inputTokenMint: quoteMint, + outputTokenMint: virtualPoolState.baseMint, + amountIn, + minimumAmountOut: new BN(0), + referralTokenAccount: null, + }; + await swap(svm, swapParams); + + return { virtualPool, virtualPoolConfig }; +} diff --git a/tests/common/damm_v2.ts b/tests/common/damm_v2.ts new file mode 100644 index 0000000..f837783 --- /dev/null +++ b/tests/common/damm_v2.ts @@ -0,0 +1,279 @@ +import { + AnchorProvider, + BN, + IdlAccounts, + Program, + Wallet, +} from "@coral-xyz/anchor"; + +import { CpAmm } from "./idl/damm_v2"; +import CpAmmIDL from "../../idls/damm_v2.json"; +import { clusterApiUrl, Connection, Keypair, PublicKey } from "@solana/web3.js"; +import { LiteSVM } from "litesvm"; +import { + getAssociatedTokenAddressSync, + TOKEN_2022_PROGRAM_ID, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { sendTransactionOrExpectThrowError } from "./svm"; + +export const DAMM_V2_PROGRAM_ID = new PublicKey(CpAmmIDL.address); + +export type Pool = IdlAccounts["pool"]; +export type Position = IdlAccounts["position"]; + +export const MIN_SQRT_PRICE = new BN("4295048016"); +export const MAX_SQRT_PRICE = new BN("79226673521066979257578248091"); +const LIQUIDITY_DELTA = new BN("1844674407800459963300003758876517305"); +const INIT_PRICE = new BN("18446744073709551616"); + +export function createDammV2Program() { + const wallet = new Wallet(Keypair.generate()); + const provider = new AnchorProvider( + new Connection(clusterApiUrl("devnet")), + wallet, + {} + ); + const program = new Program(CpAmmIDL as CpAmm, provider); + return program; +} + +export async function createDammV2Pool( + svm: LiteSVM, + creator: Keypair, + tokenAMint: PublicKey, + tokenBMint: PublicKey +): Promise<{ + pool: PublicKey; + position: PublicKey; + positionNftAccount: PublicKey; +}> { + const program = createDammV2Program(); + + const poolAuthority = deriveDammV2PoolAuthority(); + const pool = deriveDammV2CustomizablePoolAddress(tokenAMint, tokenBMint); + + const positionNftKP = Keypair.generate(); + const position = deriveDammV2PositionAddress(positionNftKP.publicKey); + const positionNftAccount = deriveDammV2PositionNftAccount( + positionNftKP.publicKey + ); + + const tokenAVault = deriveDammV2TokenVaultAddress(tokenAMint, pool); + const tokenBVault = deriveDammV2TokenVaultAddress(tokenBMint, pool); + + const payerTokenA = getAssociatedTokenAddressSync( + tokenAMint, + creator.publicKey, + true, + TOKEN_PROGRAM_ID + ); + const payerTokenB = getAssociatedTokenAddressSync( + tokenBMint, + creator.publicKey, + true, + TOKEN_PROGRAM_ID + ); + + const transaction = await program.methods + .initializeCustomizablePool({ + poolFees: { + baseFee: { + cliffFeeNumerator: new BN(10_000_000), + numberOfPeriod: 0, + reductionFactor: new BN(0), + periodFrequency: new BN(0), + feeSchedulerMode: 0, + }, + padding: new Array(3).fill(0), + dynamicFee: null, + }, + sqrtMinPrice: MIN_SQRT_PRICE, + sqrtMaxPrice: MAX_SQRT_PRICE, + hasAlphaVault: false, + liquidity: LIQUIDITY_DELTA, + sqrtPrice: INIT_PRICE, + activationType: 0, + collectFeeMode: 1, // collect fee mode: onlyB + activationPoint: null, + }) + .accountsPartial({ + creator: creator.publicKey, + positionNftAccount, + positionNftMint: positionNftKP.publicKey, + payer: creator.publicKey, + poolAuthority, + pool, + position, + tokenAMint, + tokenBMint, + tokenAVault, + tokenBVault, + payerTokenA, + payerTokenB, + token2022Program: TOKEN_2022_PROGRAM_ID, + tokenAProgram: TOKEN_PROGRAM_ID, + tokenBProgram: TOKEN_PROGRAM_ID, + }) + .transaction(); + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(creator, positionNftKP); + + sendTransactionOrExpectThrowError(svm, transaction); + + return { pool, position, positionNftAccount }; +} + +export function getProgramFromFlagDammV2(flag: number): PublicKey { + return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID; +} + +export function getDammV2PoolState(svm: LiteSVM, dammV2Pool: PublicKey): Pool { + const program = createDammV2Program(); + const account = svm.getAccount(dammV2Pool); + return program.coder.accounts.decode("pool", Buffer.from(account.data)); +} + +export function deriveDammV2PositionAddress(positionNft: PublicKey): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("position"), positionNft.toBuffer()], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function deriveDammV2PositionNftAccount( + positionNftMint: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("position_nft_account"), positionNftMint.toBuffer()], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function deriveDammV2CustomizablePoolAddress( + tokenAMint: PublicKey, + tokenBMint: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [ + Buffer.from("cpool"), + getFirstKey(tokenAMint, tokenBMint), + getSecondKey(tokenAMint, tokenBMint), + ], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function deriveDammV2TokenVaultAddress( + tokenMint: PublicKey, + pool: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("token_vault"), tokenMint.toBuffer(), pool.toBuffer()], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function deriveDammV2EventAuthority() { + return PublicKey.findProgramAddressSync( + [Buffer.from("__event_authority")], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function deriveDammV2PoolAuthority(): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("pool_authority")], + DAMM_V2_PROGRAM_ID + )[0]; +} + +export function getSecondKey(key1: PublicKey, key2: PublicKey) { + const buf1 = key1.toBuffer(); + const buf2 = key2.toBuffer(); + // Buf1 > buf2 + if (Buffer.compare(buf1, buf2) === 1) { + return buf2; + } + return buf1; +} + +export function getFirstKey(key1: PublicKey, key2: PublicKey) { + const buf1 = key1.toBuffer(); + const buf2 = key2.toBuffer(); + // Buf1 > buf2 + if (Buffer.compare(buf1, buf2) === 1) { + return buf1; + } + return buf2; +} + +export type SwapParams = { + payer: Keypair; + pool: PublicKey; + inputTokenMint: PublicKey; + outputTokenMint: PublicKey; + amountIn: BN; + minimumAmountOut: BN; +}; + +export async function dammV2Swap(svm: LiteSVM, params: SwapParams) { + const { + payer, + pool, + inputTokenMint, + outputTokenMint, + amountIn, + minimumAmountOut, + } = params; + + const program = createDammV2Program(); + + const poolState = getDammV2PoolState(svm, pool); + + const tokenAProgram = svm.getAccount(poolState.tokenAMint).owner; + + const tokenBProgram = svm.getAccount(poolState.tokenBMint).owner; + const inputTokenAccount = getAssociatedTokenAddressSync( + inputTokenMint, + payer.publicKey, + true, + tokenAProgram + ); + const outputTokenAccount = getAssociatedTokenAddressSync( + outputTokenMint, + payer.publicKey, + true, + tokenBProgram + ); + const tokenAVault = poolState.tokenAVault; + const tokenBVault = poolState.tokenBVault; + const tokenAMint = poolState.tokenAMint; + const tokenBMint = poolState.tokenBMint; + + const transaction = await program.methods + .swap({ + amountIn, + minimumAmountOut, + }) + .accountsPartial({ + poolAuthority: deriveDammV2PoolAuthority(), + pool, + payer: payer.publicKey, + inputTokenAccount, + outputTokenAccount, + tokenAVault, + tokenBVault, + tokenAProgram, + tokenBProgram, + tokenAMint, + tokenBMint, + referralTokenAccount: null, + }) + .transaction(); + + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(payer); + + sendTransactionOrExpectThrowError(svm, transaction); +} diff --git a/tests/common/dbc.ts b/tests/common/dbc.ts new file mode 100644 index 0000000..8ae6d10 --- /dev/null +++ b/tests/common/dbc.ts @@ -0,0 +1,867 @@ +import { + AnchorProvider, + BN, + IdlAccounts, + Program, + Wallet, +} from "@coral-xyz/anchor"; + +import { DynamicBondingCurve } from "./idl/dynamic_bonding_curve"; +import DynamicBondingCurveIDL from "../../idls/dynamic_bonding_curve.json"; +import { + clusterApiUrl, + ComputeBudgetProgram, + Connection, + Keypair, + PublicKey, + SYSVAR_INSTRUCTIONS_PUBKEY, + TransactionInstruction, +} from "@solana/web3.js"; +import { LiteSVM } from "litesvm"; +import { + getAssociatedTokenAddressSync, + NATIVE_MINT, + TOKEN_2022_PROGRAM_ID, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { + getFirstKey, + getSecondKey, + MAX_SQRT_PRICE, + MIN_SQRT_PRICE, +} from "./damm_v2"; +import Decimal from "decimal.js"; +import { sendTransactionOrExpectThrowError } from "./svm"; +import { getOrCreateAtA, unwrapSOLInstruction, wrapSOLInstruction } from "."; + +export const DBC_PROGRAM_ID = new PublicKey(DynamicBondingCurveIDL.address); +export type VirtualPool = IdlAccounts["virtualPool"]; +export type PoolConfig = IdlAccounts["poolConfig"]; + +export function createDBCProgram() { + const wallet = new Wallet(Keypair.generate()); + const provider = new AnchorProvider( + new Connection(clusterApiUrl("devnet")), + wallet, + {} + ); + const program = new Program( + DynamicBondingCurveIDL as DynamicBondingCurve, + provider + ); + return program; +} + +export async function createConfig( + svm: LiteSVM, + params: CreateConfigParams +): Promise { + const { payer, leftoverReceiver, feeClaimer, quoteMint, instructionParams } = + params; + const config = Keypair.generate(); + + const program = createDBCProgram(); + + const transaction = await program.methods + .createConfig(instructionParams) + .accountsPartial({ + config: config.publicKey, + feeClaimer, + leftoverReceiver, + quoteMint, + payer: payer.publicKey, + }) + .transaction(); + + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(payer, config); + + sendTransactionOrExpectThrowError(svm, transaction); + + return config.publicKey; +} + +export type CreatePoolToken2022Params = { + payer: Keypair; + poolCreator: Keypair; + quoteMint: PublicKey; + config: PublicKey; + instructionParams: { + name: string; + symbol: string; + uri: string; + }; +}; + +export async function createVirtualPool( + svm: LiteSVM, + params: CreatePoolToken2022Params +): Promise { + const { payer, quoteMint, config, instructionParams, poolCreator } = params; + const program = createDBCProgram(); + const poolAuthority = deriveDbcPoolAuthority(); + const baseMintKP = Keypair.generate(); + const pool = derivePoolAddress(config, baseMintKP.publicKey, quoteMint); + const baseVault = deriveTokenVaultAddress(baseMintKP.publicKey, pool); + const quoteVault = deriveTokenVaultAddress(quoteMint, pool); + const transaction = await program.methods + .initializeVirtualPoolWithToken2022(instructionParams) + .accountsPartial({ + config, + baseMint: baseMintKP.publicKey, + quoteMint, + pool, + payer: payer.publicKey, + creator: poolCreator.publicKey, + poolAuthority, + baseVault, + quoteVault, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + tokenProgram: TOKEN_2022_PROGRAM_ID, + }) + .transaction(); + + transaction.add( + ComputeBudgetProgram.setComputeUnitLimit({ + units: 400_000, + }) + ); + + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(payer, baseMintKP, poolCreator); + + sendTransactionOrExpectThrowError(svm, transaction); + + return pool; +} + +export type SwapParams = { + config: PublicKey; + payer: Keypair; + pool: PublicKey; + inputTokenMint: PublicKey; + outputTokenMint: PublicKey; + amountIn: BN; + minimumAmountOut: BN; + referralTokenAccount: PublicKey | null; +}; + +export async function swap(svm: LiteSVM, params: SwapParams): Promise { + const { + config, + payer, + pool, + inputTokenMint, + outputTokenMint, + amountIn, + minimumAmountOut, + referralTokenAccount, + } = params; + + const poolAuthority = deriveDbcPoolAuthority(); + let poolState = getVirtualPoolState(svm, pool); + const program = createDBCProgram(); + + const tokenBaseProgram = TOKEN_2022_PROGRAM_ID; + + const isInputBaseMint = inputTokenMint.equals(poolState.baseMint); + + const quoteMint = isInputBaseMint ? outputTokenMint : inputTokenMint; + const [inputTokenProgram, outputTokenProgram] = isInputBaseMint + ? [tokenBaseProgram, TOKEN_PROGRAM_ID] + : [TOKEN_PROGRAM_ID, tokenBaseProgram]; + + const preInstructions: TransactionInstruction[] = []; + const postInstructions: TransactionInstruction[] = []; + + const [inputTokenAccount, outputTokenAccount] = [ + getOrCreateAtA( + svm, + payer, + inputTokenMint, + payer.publicKey, + inputTokenProgram + ), + getOrCreateAtA( + svm, + payer, + outputTokenMint, + payer.publicKey, + outputTokenProgram + ), + ]; + + if (inputTokenMint.equals(NATIVE_MINT) && !amountIn.isZero()) { + const wrapSOLIx = wrapSOLInstruction( + payer.publicKey, + inputTokenAccount, + BigInt(amountIn.toString()) + ); + + preInstructions.push(...wrapSOLIx); + } + + if (outputTokenMint.equals(NATIVE_MINT)) { + const unrapSOLIx = unwrapSOLInstruction(payer.publicKey); + + unrapSOLIx && postInstructions.push(unrapSOLIx); + } + + const transaction = await program.methods + .swap({ amountIn, minimumAmountOut }) + .accountsPartial({ + poolAuthority, + config, + pool, + inputTokenAccount, + outputTokenAccount, + baseVault: poolState.baseVault, + quoteVault: poolState.quoteVault, + baseMint: poolState.baseMint, + quoteMint, + payer: payer.publicKey, + tokenBaseProgram, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + referralTokenAccount, + }) + .remainingAccounts( + // TODO should check condition to add this in remaning accounts + [ + { + isSigner: false, + isWritable: false, + pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, + }, + ] + ) + .preInstructions(preInstructions) + .postInstructions(postInstructions) + .transaction(); + + transaction.add( + ComputeBudgetProgram.setComputeUnitLimit({ + units: 400_000, + }) + ); + + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(payer); + + sendTransactionOrExpectThrowError(svm, transaction); +} + +export async function transferCreator( + svm: LiteSVM, + virtualPool: PublicKey, + creator: Keypair, + newCreator: PublicKey +): Promise { + const program = createDBCProgram(); + const poolState = getVirtualPoolState(svm, virtualPool); + const migrationMetadata = deriveMigrationMetadataAddress(virtualPool); + const transaction = await program.methods + .transferPoolCreator() + .accountsPartial({ + virtualPool, + newCreator, + config: poolState.config, + creator: creator.publicKey, + }) + .remainingAccounts([ + { + isSigner: false, + isWritable: false, + pubkey: migrationMetadata, + }, + ]) + .transaction(); + + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(creator); + + sendTransactionOrExpectThrowError(svm, transaction, true); +} + +export function getVirtualPoolState( + svm: LiteSVM, + virtualPool: PublicKey +): VirtualPool { + const program = createDBCProgram(); + const account = svm.getAccount(virtualPool); + return program.coder.accounts.decode( + "virtualPool", + Buffer.from(account.data) + ); +} + +export function getVirtualConfigState( + svm: LiteSVM, + virtualPool: PublicKey +): PoolConfig { + const program = createDBCProgram(); + const account = svm.getAccount(virtualPool); + return program.coder.accounts.decode("poolConfig", Buffer.from(account.data)); +} + +export function deriveMigrationMetadataAddress( + virtual_pool: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("meteora"), virtual_pool.toBuffer()], + DBC_PROGRAM_ID + )[0]; +} + +function derivePoolAddress( + config: PublicKey, + tokenAMint: PublicKey, + tokenBMint: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [ + Buffer.from("pool"), + config.toBuffer(), + getFirstKey(tokenAMint, tokenBMint), + getSecondKey(tokenAMint, tokenBMint), + ], + DBC_PROGRAM_ID + )[0]; +} + +export function deriveDbcPoolAuthority(): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("pool_authority")], + DBC_PROGRAM_ID + )[0]; +} + +export function deriveDbcEventAuthority() { + return PublicKey.findProgramAddressSync( + [Buffer.from("__event_authority")], + DBC_PROGRAM_ID + )[0]; +} + +function deriveTokenVaultAddress( + tokenMint: PublicKey, + pool: PublicKey +): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("token_vault"), tokenMint.toBuffer(), pool.toBuffer()], + DBC_PROGRAM_ID + )[0]; +} + +////// DBC utils + +export function buildDefaultCurve(): ConfigParameters { + let totalTokenSupply = 1_000_000_000; + let percentageSupplyOnMigration = 10; // 10%; + let migrationQuoteThreshold = 300; // 300 sol + let migrationOption = 1; // damm v2 + let tokenBaseDecimal = 6; + let tokenQuoteDecimal = 9; + let creatorTradingFeePercentage = 50; + let collectFeeMode = 0; + + let migrationBaseSupply = new BN(totalTokenSupply) + .mul(new BN(percentageSupplyOnMigration)) + .div(new BN(100)); + + let totalSupply = new BN(totalTokenSupply).mul( + new BN(10).pow(new BN(tokenBaseDecimal)) + ); + let migrationQuoteThresholdWithDecimals = new BN( + migrationQuoteThreshold * 10 ** tokenQuoteDecimal + ); + + let migrationPrice = new Decimal(migrationQuoteThreshold.toString()).div( + new Decimal(migrationBaseSupply.toString()) + ); + let migrateSqrtPrice = getSqrtPriceFromPrice( + migrationPrice.toString(), + tokenBaseDecimal, + tokenQuoteDecimal + ); + + let migrationBaseAmount = getMigrationBaseToken( + new BN(migrationQuoteThresholdWithDecimals), + migrateSqrtPrice, + migrationOption + ); + let swapAmount = totalSupply.sub(migrationBaseAmount); + + let { sqrtStartPrice, curve } = getFirstCurve( + migrateSqrtPrice, + migrationBaseAmount, + swapAmount, + migrationQuoteThresholdWithDecimals + ); + + let totalDynamicSupply = getTotalSupplyFromCurve( + migrationQuoteThresholdWithDecimals, + sqrtStartPrice, + curve, + migrationOption, + new BN(0) + ); + + let remainingAmount = totalSupply.sub(totalDynamicSupply); + + let lastLiquidity = getInitialLiquidityFromDeltaBase( + remainingAmount, + MAX_SQRT_PRICE, + migrateSqrtPrice + ); + if (!lastLiquidity.isZero()) { + curve.push({ + sqrtPrice: MAX_SQRT_PRICE, + liquidity: lastLiquidity, + }); + } + + const instructionParams: ConfigParameters = { + poolFees: { + baseFee: { + cliffFeeNumerator: new BN(2_500_000), + firstFactor: 0, + secondFactor: new BN(0), + thirdFactor: new BN(0), + baseFeeMode: 0, + }, + dynamicFee: null, + }, + activationType: 0, + collectFeeMode, + migrationOption, + tokenType: 1, // token 2022 + tokenDecimal: tokenBaseDecimal, + migrationQuoteThreshold: migrationQuoteThresholdWithDecimals, + partnerLpPercentage: 0, + creatorLpPercentage: 0, + partnerLockedLpPercentage: 100, + creatorLockedLpPercentage: 0, + sqrtStartPrice, + lockedVesting: { + amountPerPeriod: new BN(0), + cliffDurationFromMigrationTime: new BN(0), + frequency: new BN(0), + numberOfPeriod: new BN(0), + cliffUnlockAmount: new BN(0), + }, + migrationFeeOption: 0, + tokenSupply: { + preMigrationTokenSupply: totalSupply, + postMigrationTokenSupply: totalSupply, + }, + creatorTradingFeePercentage, + tokenUpdateAuthority: 0, + migrationFee: { + feePercentage: 0, + creatorFeePercentage: 0, + }, + migratedPoolFee: { + collectFeeMode: 0, + dynamicFee: 0, + poolFeeBps: 0, + }, + padding: [], + curve, + }; + return instructionParams; +} + +type BaseFee = { + cliffFeeNumerator: BN; + firstFactor: number; + secondFactor: BN; + thirdFactor: BN; + baseFeeMode: number; +}; + +type DynamicFee = { + binStep: number; + binStepU128: BN; + filterPeriod: number; + decayPeriod: number; + reductionFactor: number; + maxVolatilityAccumulator: number; + variableFeeControl: number; +}; + +type LockedVestingParams = { + amountPerPeriod: BN; + cliffDurationFromMigrationTime: BN; + frequency: BN; + numberOfPeriod: BN; + cliffUnlockAmount: BN; +}; + +type TokenSupplyParams = { + preMigrationTokenSupply: BN; + postMigrationTokenSupply: BN; +}; + +type ConfigParameters = { + poolFees: { + baseFee: BaseFee; + dynamicFee: DynamicFee | null; + }; + collectFeeMode: number; + migrationOption: number; + activationType: number; + tokenType: number; + tokenDecimal: number; + migrationQuoteThreshold: BN; + partnerLpPercentage: number; + partnerLockedLpPercentage: number; + creatorLpPercentage: number; + creatorLockedLpPercentage: number; + sqrtStartPrice: BN; + lockedVesting: LockedVestingParams; + migrationFeeOption: number; + tokenSupply: TokenSupplyParams | null; + creatorTradingFeePercentage: number; + tokenUpdateAuthority: number; + migrationFee: { + feePercentage: number; + creatorFeePercentage: number; + }; + migratedPoolFee: { + poolFeeBps: number; + collectFeeMode: number; + dynamicFee: number; + }; + padding: BN[]; + curve: Array; +}; + +type LiquidityDistributionParameters = { + sqrtPrice: BN; + liquidity: BN; +}; + +export type CreateConfigParams = { + payer: Keypair; + leftoverReceiver: PublicKey; + feeClaimer: PublicKey; + quoteMint: PublicKey; + instructionParams: ConfigParameters; +}; + +const getSqrtPriceFromPrice = ( + price: string, + tokenADecimal: number, + tokenBDecimal: number +): BN => { + const decimalPrice = new Decimal(price); + const adjustedByDecimals = decimalPrice.div( + new Decimal(10 ** (tokenADecimal - tokenBDecimal)) + ); + const sqrtValue = Decimal.sqrt(adjustedByDecimals); + const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64)); + + return new BN(sqrtValueQ64.floor().toFixed()); +}; + +const getInitialLiquidityFromDeltaQuote = ( + quoteAmount: BN, + sqrtMinPrice: BN, + sqrtPrice: BN +): BN => { + let priceDelta = sqrtPrice.sub(sqrtMinPrice); + quoteAmount = quoteAmount.shln(128); + let liquidity = quoteAmount.div(priceDelta); // round down + return liquidity; +}; + +function getDeltaAmountBase( + lowerSqrtPrice: BN, + upperSqrtPrice: BN, + liquidity: BN +): BN { + let numerator = liquidity.mul(upperSqrtPrice.sub(lowerSqrtPrice)); + let denominator = lowerSqrtPrice.mul(upperSqrtPrice); + return numerator.add(denominator).sub(new BN(1)).div(denominator); +} + +const getMigrationBaseToken = ( + migrationQuoteThreshold: BN, + sqrtMigrationPrice: BN, + migrationOption: number +): BN => { + if (migrationOption == 0) { + let price = sqrtMigrationPrice.mul(sqrtMigrationPrice); + let quote = migrationQuoteThreshold.shln(128); + let { div, mod } = quote.divmod(price); + if (!mod.isZero()) { + div = div.add(new BN(1)); + } + return div; + } else if (migrationOption == 1) { + let liquidity = getInitialLiquidityFromDeltaQuote( + migrationQuoteThreshold, + MIN_SQRT_PRICE, + sqrtMigrationPrice + ); + // calculate base threshold + let baseAmount = getDeltaAmountBase( + sqrtMigrationPrice, + MAX_SQRT_PRICE, + liquidity + ); + return baseAmount; + } else { + throw Error("Invalid migration option"); + } +}; + +const getNextSqrtPriceFromInput = ( + sqrtPrice: BN, + liquidity: BN, + amountIn: BN, + baseForQuote: boolean +): BN => { + // round to make sure that we don't pass the target price + if (baseForQuote) { + return getNextSqrtPriceFromAmountBaseRoundingUp( + sqrtPrice, + liquidity, + amountIn + ); + } else { + return getNextSqrtPriceFromAmountQuoteRoundingDown( + sqrtPrice, + liquidity, + amountIn + ); + } +}; + +// √P' = √P * L / (L + Δx * √P) +const getNextSqrtPriceFromAmountBaseRoundingUp = ( + sqrtPrice: BN, + liquidity: BN, + amount: BN +): BN => { + if (amount.isZero()) { + return sqrtPrice; + } + let prod = sqrtPrice.mul(liquidity); + let denominator = liquidity.add(amount.mul(sqrtPrice)); + let result = prod.add(denominator).sub(new BN(1)).div(denominator); + return result; +}; + +/// * `√P' = √P + Δy / L` +/// +const getNextSqrtPriceFromAmountQuoteRoundingDown = ( + sqrtPrice: BN, + liquidity: BN, + amount: BN +): BN => { + return sqrtPrice.add(amount.shln(128).div(liquidity)); +}; + +// Δa = L * (1 / √P_lower - 1 / √P_upper) => L = Δa / (1 / √P_lower - 1 / √P_upper) +const getInitialLiquidityFromDeltaBase = ( + baseAmount: BN, + sqrtMaxPrice: BN, + sqrtPrice: BN +): BN => { + let priceDelta = sqrtMaxPrice.sub(sqrtPrice); + let prod = baseAmount.mul(sqrtMaxPrice).mul(sqrtPrice); + let liquidity = prod.div(priceDelta); // round down + return liquidity; +}; + +const getDeltaAmountQuote = ( + lowerSqrtPrice: BN, + upperSqrtPrice: BN, + liquidity: BN, + round: String +): BN => { + let detalPrice = upperSqrtPrice.sub(lowerSqrtPrice); + let prod = liquidity.mul(detalPrice); + let denominator = new BN(1).shln(128); + if (round == "U") { + let result = prod.add(denominator).sub(new BN(1)).div(denominator); + return result; + } else if (round == "D") { + let result = prod.div(denominator); + return result; + } else { + throw Error("Invalid rounding"); + } +}; + +const getMigrationThresholdPrice = ( + migrationThreshold: BN, + sqrtStartPrice: BN, + curve: Array +): BN => { + let nextSqrtPrice = sqrtStartPrice; + let totalAmount = getDeltaAmountQuote( + nextSqrtPrice, + curve[0].sqrtPrice, + curve[0].liquidity, + "U" + ); + if (totalAmount.gt(migrationThreshold)) { + nextSqrtPrice = getNextSqrtPriceFromInput( + nextSqrtPrice, + curve[0].liquidity, + migrationThreshold, + false + ); + } else { + let amountLeft = migrationThreshold.sub(totalAmount); + nextSqrtPrice = curve[0].sqrtPrice; + for (let i = 1; i < curve.length; i++) { + let maxAmount = getDeltaAmountQuote( + nextSqrtPrice, + curve[i].sqrtPrice, + curve[i].liquidity, + "U" + ); + if (maxAmount.gt(amountLeft)) { + nextSqrtPrice = getNextSqrtPriceFromInput( + nextSqrtPrice, + curve[i].liquidity, + amountLeft, + false + ); + amountLeft = new BN(0); + break; + } else { + amountLeft = amountLeft.sub(maxAmount); + nextSqrtPrice = curve[i].sqrtPrice; + } + } + if (!amountLeft.isZero()) { + console.log("migrationThreshold: ", migrationThreshold.toString()); + throw Error("Not enough liquidity, amountLeft: " + amountLeft.toString()); + } + } + return nextSqrtPrice; +}; + +function getBaseTokenForSwap( + sqrtStartPrice: BN, + sqrtMigrationPrice: BN, + curve: Array +): BN { + let totalAmount = new BN(0); + for (let i = 0; i < curve.length; i++) { + let lowerSqrtPrice = i == 0 ? sqrtStartPrice : curve[i - 1].sqrtPrice; + if (curve[i].sqrtPrice > sqrtMigrationPrice) { + let deltaAmount = getDeltaAmountBase( + lowerSqrtPrice, + sqrtMigrationPrice, + curve[i].liquidity + ); + totalAmount = totalAmount.add(deltaAmount); + break; + } else { + let deltaAmount = getDeltaAmountBase( + lowerSqrtPrice, + curve[i].sqrtPrice, + curve[i].liquidity + ); + totalAmount = totalAmount.add(deltaAmount); + } + } + return totalAmount; +} + +const getSwapAmountWithBuffer = ( + swapBaseAmount: BN, + sqrtStartPrice: BN, + curve: Array +): BN => { + let swapAmountBuffer = swapBaseAmount.add( + swapBaseAmount.mul(new BN(25)).div(new BN(100)) + ); + let maxBaseAmountOnCurve = getBaseTokenForSwap( + sqrtStartPrice, + MAX_SQRT_PRICE, + curve + ); + return BN.min(swapAmountBuffer, maxBaseAmountOnCurve); +}; + +const getTotalSupplyFromCurve = ( + migrationQuoteThreshold: BN, + sqrtStartPrice: BN, + curve: Array, + migrationOption: number, + leftOver: BN +): BN => { + let sqrtMigrationPrice = getMigrationThresholdPrice( + migrationQuoteThreshold, + sqrtStartPrice, + curve + ); + let swapBaseAmount = getBaseTokenForSwap( + sqrtStartPrice, + sqrtMigrationPrice, + curve + ); + let swapBaseAmountBuffer = getSwapAmountWithBuffer( + swapBaseAmount, + sqrtStartPrice, + curve + ); + let migrationBaseAmount = getMigrationBaseToken( + migrationQuoteThreshold, + sqrtMigrationPrice, + migrationOption + ); + let minimumBaseSupplyWithBuffer = swapBaseAmountBuffer + .add(migrationBaseAmount) + .add(leftOver); + return minimumBaseSupplyWithBuffer; +}; + +const getLiquidity = ( + baseAmount: BN, + quoteAmount: BN, + minSqrtPrice: BN, + maxSqrtPrice: BN +): BN => { + let liquidityFromBase = getInitialLiquidityFromDeltaBase( + baseAmount, + maxSqrtPrice, + minSqrtPrice + ); + let liquidityFromQuote = getInitialLiquidityFromDeltaQuote( + quoteAmount, + minSqrtPrice, + maxSqrtPrice + ); + return BN.min(liquidityFromBase, liquidityFromQuote); +}; + +const getFirstCurve = ( + migrationSqrPrice: BN, + migrationAmount: BN, + swapAmount: BN, + migrationQuoteThreshold: BN +) => { + let sqrtStartPrice = migrationSqrPrice.mul(migrationAmount).div(swapAmount); + let liquidity = getLiquidity( + swapAmount, + migrationQuoteThreshold, + sqrtStartPrice, + migrationSqrPrice + ); + return { + sqrtStartPrice, + curve: [ + { + sqrtPrice: migrationSqrPrice, + liquidity, + }, + ], + }; +}; diff --git a/tests/common/dfs.ts b/tests/common/dfs.ts new file mode 100644 index 0000000..422ae51 --- /dev/null +++ b/tests/common/dfs.ts @@ -0,0 +1,275 @@ +import { Keypair, PublicKey } from "@solana/web3.js"; +import { + createProgram, + deriveFeeVaultAuthorityAddress, + deriveFeeVaultPdaAddress, + deriveTokenVaultAddress, + getOrCreateAtA, + InitializeFeeVaultParameters, +} from "."; +import { LiteSVM } from "litesvm"; +import { + getAssociatedTokenAddressSync, + TOKEN_2022_PROGRAM_ID, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { + DAMM_V2_PROGRAM_ID, + deriveDammV2EventAuthority, + deriveDammV2PoolAuthority, + getDammV2PoolState, + getProgramFromFlagDammV2, +} from "./damm_v2"; +import { sendTransactionOrExpectThrowError } from "./svm"; +import { + DBC_PROGRAM_ID, + deriveDbcEventAuthority, + deriveDbcPoolAuthority, + getVirtualConfigState, + getVirtualPoolState, +} from "./dbc"; + +export async function createFeeVaultPda( + svm: LiteSVM, + admin: Keypair, + vaultOwner: PublicKey, + tokenMint: PublicKey, + params: InitializeFeeVaultParameters +): Promise<{ + feeVault: PublicKey; + tokenVault: PublicKey; +}> { + const program = createProgram(); + const baseKp = Keypair.generate(); + const feeVault = deriveFeeVaultPdaAddress(baseKp.publicKey, tokenMint); + const tokenVault = deriveTokenVaultAddress(feeVault); + const feeVaultAuthority = deriveFeeVaultAuthorityAddress(); + const tx = await program.methods + .initializeFeeVaultPda(params) + .accountsPartial({ + feeVault, + base: baseKp.publicKey, + feeVaultAuthority, + tokenVault, + tokenMint, + owner: vaultOwner, + payer: admin.publicKey, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(admin, baseKp); + + sendTransactionOrExpectThrowError(svm, tx, false); + + return { feeVault, tokenVault }; +} + +export async function claimDammV2Fee( + svm: LiteSVM, + owner: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + dammv2Pool: PublicKey, + position: PublicKey, + positionNftAccount: PublicKey +) { + const program = createProgram(); + const dammV2PoolState = getDammV2PoolState(svm, dammv2Pool); + + const tokenAAccount = getAssociatedTokenAddressSync( + dammV2PoolState.tokenAMint, + owner.publicKey, + true, + getProgramFromFlagDammV2(dammV2PoolState.tokenAFlag) + ); + + const tx = await program.methods + .fundingByClaimDammv2Fee() + .accountsPartial({ + feeVault, + pool: dammv2Pool, + position, + positionNftAccount, + tokenAAccount, + tokenBAccount: tokenVault, + tokenAVault: dammV2PoolState.tokenAVault, + tokenBVault: dammV2PoolState.tokenBVault, + tokenAMint: dammV2PoolState.tokenAMint, + tokenBMint: dammV2PoolState.tokenBMint, + tokenAProgram: getProgramFromFlagDammV2(dammV2PoolState.tokenAFlag), + tokenBProgram: getProgramFromFlagDammV2(dammV2PoolState.tokenBFlag), + dammv2EventAuthority: deriveDammV2EventAuthority(), + dammv2PoolAuthority: deriveDammV2PoolAuthority(), + dammv2Program: DAMM_V2_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(owner); + + sendTransactionOrExpectThrowError(svm, tx, true); +} + +export async function claimDbcCreatorTradingFee( + svm: LiteSVM, + creator: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + poolConfig: PublicKey, + virtualPool: PublicKey +) { + const program = createProgram(); + const virtualPoolState = getVirtualPoolState(svm, virtualPool); + const poolConfigState = getVirtualConfigState(svm, poolConfig); + + const tokenAAccount = getOrCreateAtA( + svm, + creator, + virtualPoolState.baseMint, + creator.publicKey, + TOKEN_2022_PROGRAM_ID + ); + + const tx = await program.methods + .fundingByClaimDbcCreatorTradingFee() + .accountsPartial({ + feeVault, + config: poolConfig, + pool: virtualPool, + tokenAAccount, + tokenBAccount: tokenVault, + baseVault: virtualPoolState.baseVault, + quoteVault: virtualPoolState.quoteVault, + baseMint: virtualPoolState.baseMint, + quoteMint: poolConfigState.quoteMint, + tokenBaseProgram: TOKEN_2022_PROGRAM_ID, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + dbcEventAuthority: deriveDbcEventAuthority(), + dbcPoolAuthority: deriveDbcPoolAuthority(), + dbcProgram: DBC_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(creator); + + sendTransactionOrExpectThrowError(svm, tx); +} + +export async function claimDbcTradingFee( + svm: LiteSVM, + feeClaimer: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + poolConfig: PublicKey, + virtualPool: PublicKey +) { + const program = createProgram(); + const virtualPoolState = getVirtualPoolState(svm, virtualPool); + const poolConfigState = getVirtualConfigState(svm, poolConfig); + + const tokenAAccount = getOrCreateAtA( + svm, + feeClaimer, + virtualPoolState.baseMint, + feeClaimer.publicKey, + TOKEN_2022_PROGRAM_ID + ); + + const tx = await program.methods + .fundingByClaimDbcPartnerTradingFee() + .accountsPartial({ + feeVault, + config: poolConfig, + pool: virtualPool, + tokenAAccount, + tokenBAccount: tokenVault, + baseVault: virtualPoolState.baseVault, + quoteVault: virtualPoolState.quoteVault, + baseMint: virtualPoolState.baseMint, + quoteMint: poolConfigState.quoteMint, + tokenBaseProgram: TOKEN_2022_PROGRAM_ID, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + dbcEventAuthority: deriveDbcEventAuthority(), + dbcPoolAuthority: deriveDbcPoolAuthority(), + dbcProgram: DBC_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(feeClaimer); + + sendTransactionOrExpectThrowError(svm, tx); +} + +export async function withdrawDbcCreatorSurplus( + svm: LiteSVM, + creator: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + poolConfig: PublicKey, + virtualPool: PublicKey +) { + const program = createProgram(); + const virtualPoolState = getVirtualPoolState(svm, virtualPool); + const poolConfigState = getVirtualConfigState(svm, poolConfig); + + const tx = await program.methods + .fundingByClaimDbcCreatorSurplus() + .accountsPartial({ + feeVault, + config: poolConfig, + pool: virtualPool, + tokenQuoteAccount: tokenVault, + quoteVault: virtualPoolState.quoteVault, + quoteMint: poolConfigState.quoteMint, + tokenBaseProgram: TOKEN_2022_PROGRAM_ID, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + dbcEventAuthority: deriveDbcEventAuthority(), + dbcPoolAuthority: deriveDbcPoolAuthority(), + dbcProgram: DBC_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(creator); + + sendTransactionOrExpectThrowError(svm, tx, true); +} + +export async function withdrawDbcPartnerSurplus( + svm: LiteSVM, + feeClaimer: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + poolConfig: PublicKey, + virtualPool: PublicKey +) { + const program = createProgram(); + const virtualPoolState = getVirtualPoolState(svm, virtualPool); + const poolConfigState = getVirtualConfigState(svm, poolConfig); + + const tx = await program.methods + .fundingByClaimDbcPartnerSurplus() + .accountsPartial({ + feeVault, + config: poolConfig, + pool: virtualPool, + tokenQuoteAccount: tokenVault, + quoteVault: virtualPoolState.quoteVault, + quoteMint: poolConfigState.quoteMint, + tokenBaseProgram: TOKEN_2022_PROGRAM_ID, + tokenQuoteProgram: TOKEN_PROGRAM_ID, + dbcEventAuthority: deriveDbcEventAuthority(), + dbcPoolAuthority: deriveDbcPoolAuthority(), + dbcProgram: DBC_PROGRAM_ID, + }) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(feeClaimer); + + sendTransactionOrExpectThrowError(svm, tx, true); +} diff --git a/tests/common/idl/damm_v2.ts b/tests/common/idl/damm_v2.ts new file mode 100644 index 0000000..b0b288c --- /dev/null +++ b/tests/common/idl/damm_v2.ts @@ -0,0 +1,5571 @@ +/** + * Program IDL in camelCase format in order to be used in JS/TS. + * + * Note that this is only a type helper and is not the actual IDL. The original + * IDL can be found at `target/idl/cp_amm.json`. + */ +export type CpAmm = { + address: "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG"; + metadata: { + name: "cpAmm"; + version: "0.1.3"; + spec: "0.1.0"; + description: "Created with Anchor"; + }; + instructions: [ + { + name: "addLiquidity"; + discriminator: [181, 157, 89, 67, 143, 182, 52, 72]; + accounts: [ + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The user token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The user token b account"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "addLiquidityParameters"; + }; + }; + } + ]; + }, + { + name: "claimPartnerFee"; + discriminator: [97, 206, 39, 105, 94, 94, 126, 148]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The treasury token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The treasury token b account"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "partner"; + signer: true; + relations: ["pool"]; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "maxAmountA"; + type: "u64"; + }, + { + name: "maxAmountB"; + type: "u64"; + } + ]; + }, + { + name: "claimPositionFee"; + discriminator: [180, 38, 154, 17, 133, 33, 162, 211]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The user token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The user token b account"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "claimProtocolFee"; + discriminator: [165, 228, 133, 48, 99, 249, 255, 33]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "tokenAAccount"; + docs: ["The treasury token a account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ]; + }, + { + kind: "account"; + path: "tokenAProgram"; + }, + { + kind: "account"; + path: "tokenAMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "tokenBAccount"; + docs: ["The treasury token b account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ]; + }, + { + kind: "account"; + path: "tokenBProgram"; + }, + { + kind: "account"; + path: "tokenBMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "claimFeeOperator"; + docs: ["Claim fee operator"]; + }, + { + name: "operator"; + docs: ["Operator"]; + signer: true; + relations: ["claimFeeOperator"]; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "maxAmountA"; + type: "u64"; + }, + { + name: "maxAmountB"; + type: "u64"; + } + ]; + }, + { + name: "claimReward"; + discriminator: [149, 95, 181, 242, 94, 90, 158, 162]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "rewardVault"; + docs: ["The vault token account for reward token"]; + writable: true; + }, + { + name: "rewardMint"; + }, + { + name: "userTokenAccount"; + writable: true; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "tokenProgram"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "skipReward"; + type: "u8"; + } + ]; + }, + { + name: "closeClaimFeeOperator"; + discriminator: [38, 134, 82, 216, 95, 124, 17, 99]; + accounts: [ + { + name: "claimFeeOperator"; + writable: true; + }, + { + name: "rentReceiver"; + writable: true; + }, + { + name: "admin"; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "closeConfig"; + discriminator: [145, 9, 72, 157, 95, 125, 61, 85]; + accounts: [ + { + name: "config"; + writable: true; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "rentReceiver"; + writable: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "closePosition"; + discriminator: [123, 134, 81, 0, 49, 68, 98, 98]; + accounts: [ + { + name: "positionNftMint"; + docs: ["positionNftMint"]; + writable: true; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + writable: true; + }, + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "rentReceiver"; + writable: true; + }, + { + name: "owner"; + docs: ["Owner of position"]; + signer: true; + }, + { + name: "tokenProgram"; + docs: [ + "Program to create NFT mint/token account and transfer for token22 account" + ]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "closeTokenBadge"; + discriminator: [108, 146, 86, 110, 179, 254, 10, 104]; + accounts: [ + { + name: "tokenBadge"; + writable: true; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "rentReceiver"; + writable: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "createClaimFeeOperator"; + discriminator: [169, 62, 207, 107, 58, 187, 162, 109]; + accounts: [ + { + name: "claimFeeOperator"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [99, 102, 95, 111, 112, 101, 114, 97, 116, 111, 114]; + }, + { + kind: "account"; + path: "operator"; + } + ]; + }; + }, + { + name: "operator"; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "createConfig"; + docs: ["ADMIN FUNCTIONS /////"]; + discriminator: [201, 207, 243, 114, 75, 111, 47, 189]; + accounts: [ + { + name: "config"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [99, 111, 110, 102, 105, 103]; + }, + { + kind: "arg"; + path: "index"; + } + ]; + }; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "index"; + type: "u64"; + }, + { + name: "configParameters"; + type: { + defined: { + name: "staticConfigParameters"; + }; + }; + } + ]; + }, + { + name: "createDynamicConfig"; + discriminator: [81, 251, 122, 78, 66, 57, 208, 82]; + accounts: [ + { + name: "config"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [99, 111, 110, 102, 105, 103]; + }, + { + kind: "arg"; + path: "index"; + } + ]; + }; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "index"; + type: "u64"; + }, + { + name: "configParameters"; + type: { + defined: { + name: "dynamicConfigParameters"; + }; + }; + } + ]; + }, + { + name: "createPosition"; + discriminator: [48, 215, 197, 153, 96, 203, 180, 133]; + accounts: [ + { + name: "owner"; + }, + { + name: "positionNftMint"; + docs: ["positionNftMint"]; + writable: true; + signer: true; + }, + { + name: "positionNftAccount"; + docs: ["position nft account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "pool"; + writable: true; + }, + { + name: "position"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [112, 111, 115, 105, 116, 105, 111, 110]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "payer"; + docs: ["Address paying to create the position. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "tokenProgram"; + docs: [ + "Program to create NFT mint/token account and transfer for token22 account" + ]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "createTokenBadge"; + discriminator: [88, 206, 0, 91, 60, 175, 151, 118]; + accounts: [ + { + name: "tokenBadge"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 98, 97, 100, 103, 101]; + }, + { + kind: "account"; + path: "tokenMint"; + } + ]; + }; + }, + { + name: "tokenMint"; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "fundReward"; + discriminator: [188, 50, 249, 165, 93, 151, 38, 63]; + accounts: [ + { + name: "pool"; + writable: true; + }, + { + name: "rewardVault"; + writable: true; + }, + { + name: "rewardMint"; + }, + { + name: "funderTokenAccount"; + writable: true; + }, + { + name: "funder"; + signer: true; + }, + { + name: "tokenProgram"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "amount"; + type: "u64"; + }, + { + name: "carryForward"; + type: "bool"; + } + ]; + }, + { + name: "initializeCustomizablePool"; + discriminator: [20, 161, 241, 24, 189, 221, 180, 2]; + accounts: [ + { + name: "creator"; + }, + { + name: "positionNftMint"; + docs: ["positionNftMint"]; + writable: true; + signer: true; + }, + { + name: "positionNftAccount"; + docs: ["position nft account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "payer"; + docs: ["Address paying to create the pool. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + docs: ["Initialize an account to store the pool state"]; + writable: true; + }, + { + name: "position"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [112, 111, 115, 105, 116, 105, 111, 110]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "tokenAMint"; + docs: ["Token a mint"]; + }, + { + name: "tokenBMint"; + docs: ["Token b mint"]; + }, + { + name: "tokenAVault"; + docs: ["Token a vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenAMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "tokenBVault"; + docs: ["Token b vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenBMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "payerTokenA"; + docs: ["payer token a account"]; + writable: true; + }, + { + name: "payerTokenB"; + docs: ["creator token b account"]; + writable: true; + }, + { + name: "tokenAProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "tokenBProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "token2022Program"; + docs: [ + "Program to create NFT mint/token account and transfer for token22 account" + ]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "initializeCustomizablePoolParameters"; + }; + }; + } + ]; + }, + { + name: "initializePool"; + docs: ["USER FUNCTIONS ////"]; + discriminator: [95, 180, 10, 172, 84, 174, 232, 40]; + accounts: [ + { + name: "creator"; + }, + { + name: "positionNftMint"; + docs: ["positionNftMint"]; + writable: true; + signer: true; + }, + { + name: "positionNftAccount"; + docs: ["position nft account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "payer"; + docs: ["Address paying to create the pool. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "config"; + docs: ["Which config the pool belongs to."]; + }, + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + docs: ["Initialize an account to store the pool state"]; + writable: true; + }, + { + name: "position"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [112, 111, 115, 105, 116, 105, 111, 110]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "tokenAMint"; + docs: ["Token a mint"]; + }, + { + name: "tokenBMint"; + docs: ["Token b mint"]; + }, + { + name: "tokenAVault"; + docs: ["Token a vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenAMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "tokenBVault"; + docs: ["Token b vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenBMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "payerTokenA"; + docs: ["payer token a account"]; + writable: true; + }, + { + name: "payerTokenB"; + docs: ["creator token b account"]; + writable: true; + }, + { + name: "tokenAProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "tokenBProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "token2022Program"; + docs: [ + "Program to create NFT mint/token account and transfer for token22 account" + ]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "initializePoolParameters"; + }; + }; + } + ]; + }, + { + name: "initializePoolWithDynamicConfig"; + discriminator: [149, 82, 72, 197, 253, 252, 68, 15]; + accounts: [ + { + name: "creator"; + }, + { + name: "positionNftMint"; + docs: ["positionNftMint"]; + writable: true; + signer: true; + }, + { + name: "positionNftAccount"; + docs: ["position nft account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 95, + 110, + 102, + 116, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116 + ]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "payer"; + docs: ["Address paying to create the pool. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "poolCreatorAuthority"; + signer: true; + relations: ["config"]; + }, + { + name: "config"; + docs: ["Which config the pool belongs to."]; + }, + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + docs: ["Initialize an account to store the pool state"]; + writable: true; + }, + { + name: "position"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [112, 111, 115, 105, 116, 105, 111, 110]; + }, + { + kind: "account"; + path: "positionNftMint"; + } + ]; + }; + }, + { + name: "tokenAMint"; + docs: ["Token a mint"]; + }, + { + name: "tokenBMint"; + docs: ["Token b mint"]; + }, + { + name: "tokenAVault"; + docs: ["Token a vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenAMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "tokenBVault"; + docs: ["Token b vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "tokenBMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "payerTokenA"; + docs: ["payer token a account"]; + writable: true; + }, + { + name: "payerTokenB"; + docs: ["creator token b account"]; + writable: true; + }, + { + name: "tokenAProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "tokenBProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "token2022Program"; + docs: [ + "Program to create NFT mint/token account and transfer for token22 account" + ]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "initializeCustomizablePoolParameters"; + }; + }; + } + ]; + }, + { + name: "initializeReward"; + discriminator: [95, 135, 192, 196, 242, 129, 230, 68]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "rewardVault"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 114, + 101, + 119, + 97, + 114, + 100, + 95, + 118, + 97, + 117, + 108, + 116 + ]; + }, + { + kind: "account"; + path: "pool"; + }, + { + kind: "arg"; + path: "rewardIndex"; + } + ]; + }; + }, + { + name: "rewardMint"; + }, + { + name: "signer"; + signer: true; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "tokenProgram"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "rewardDuration"; + type: "u64"; + }, + { + name: "funder"; + type: "pubkey"; + } + ]; + }, + { + name: "lockPosition"; + discriminator: [227, 62, 2, 252, 247, 10, 171, 185]; + accounts: [ + { + name: "pool"; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "vesting"; + writable: true; + signer: true; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "vestingParameters"; + }; + }; + } + ]; + }, + { + name: "permanentLockPosition"; + discriminator: [165, 176, 125, 6, 231, 171, 186, 213]; + accounts: [ + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "permanentLockLiquidity"; + type: "u128"; + } + ]; + }, + { + name: "refreshVesting"; + discriminator: [9, 94, 216, 14, 116, 204, 247, 0]; + accounts: [ + { + name: "pool"; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + } + ]; + args: []; + }, + { + name: "removeAllLiquidity"; + discriminator: [10, 51, 61, 35, 112, 105, 24, 85]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The user token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The user token b account"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "tokenAAmountThreshold"; + type: "u64"; + }, + { + name: "tokenBAmountThreshold"; + type: "u64"; + } + ]; + }, + { + name: "removeLiquidity"; + discriminator: [80, 85, 209, 72, 24, 206, 177, 108]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + relations: ["position"]; + }, + { + name: "position"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The user token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The user token b account"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + relations: ["pool"]; + }, + { + name: "positionNftAccount"; + docs: ["The token account for nft"]; + }, + { + name: "owner"; + docs: ["owner of position"]; + signer: true; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "removeLiquidityParameters"; + }; + }; + } + ]; + }, + { + name: "setPoolStatus"; + discriminator: [112, 87, 135, 223, 83, 204, 132, 53]; + accounts: [ + { + name: "pool"; + writable: true; + }, + { + name: "admin"; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "status"; + type: "u8"; + } + ]; + }, + { + name: "splitPosition"; + discriminator: [172, 241, 221, 138, 161, 29, 253, 42]; + accounts: [ + { + name: "pool"; + writable: true; + relations: ["firstPosition", "secondPosition"]; + }, + { + name: "firstPosition"; + docs: ["The first position"]; + writable: true; + }, + { + name: "firstPositionNftAccount"; + docs: ["The token account for position nft"]; + }, + { + name: "secondPosition"; + docs: ["The second position"]; + writable: true; + }, + { + name: "secondPositionNftAccount"; + docs: ["The token account for position nft"]; + }, + { + name: "firstOwner"; + docs: ["Owner of first position"]; + signer: true; + }, + { + name: "secondOwner"; + docs: ["Owner of second position"]; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "splitPositionParameters"; + }; + }; + } + ]; + }, + { + name: "swap"; + discriminator: [248, 198, 158, 145, 225, 117, 135, 200]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + docs: ["Pool account"]; + writable: true; + }, + { + name: "inputTokenAccount"; + docs: ["The user token account for input token"]; + writable: true; + }, + { + name: "outputTokenAccount"; + docs: ["The user token account for output token"]; + writable: true; + }, + { + name: "tokenAVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenBVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "tokenAMint"; + docs: ["The mint of token a"]; + }, + { + name: "tokenBMint"; + docs: ["The mint of token b"]; + }, + { + name: "payer"; + docs: ["The user performing the swap"]; + signer: true; + }, + { + name: "tokenAProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenBProgram"; + docs: ["Token b program"]; + }, + { + name: "referralTokenAccount"; + docs: ["referral token account"]; + writable: true; + optional: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "swapParameters"; + }; + }; + } + ]; + }, + { + name: "updateRewardDuration"; + discriminator: [138, 174, 196, 169, 213, 235, 254, 107]; + accounts: [ + { + name: "pool"; + writable: true; + }, + { + name: "signer"; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "newDuration"; + type: "u64"; + } + ]; + }, + { + name: "updateRewardFunder"; + discriminator: [211, 28, 48, 32, 215, 160, 35, 23]; + accounts: [ + { + name: "pool"; + writable: true; + }, + { + name: "signer"; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "newFunder"; + type: "pubkey"; + } + ]; + }, + { + name: "withdrawIneligibleReward"; + discriminator: [148, 206, 42, 195, 247, 49, 103, 8]; + accounts: [ + { + name: "poolAuthority"; + address: "HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "rewardVault"; + writable: true; + }, + { + name: "rewardMint"; + }, + { + name: "funderTokenAccount"; + writable: true; + }, + { + name: "funder"; + signer: true; + }, + { + name: "tokenProgram"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "rewardIndex"; + type: "u8"; + } + ]; + } + ]; + accounts: [ + { + name: "claimFeeOperator"; + discriminator: [166, 48, 134, 86, 34, 200, 188, 150]; + }, + { + name: "config"; + discriminator: [155, 12, 170, 224, 30, 250, 204, 130]; + }, + { + name: "pool"; + discriminator: [241, 154, 109, 4, 17, 177, 109, 188]; + }, + { + name: "position"; + discriminator: [170, 188, 143, 228, 122, 64, 247, 208]; + }, + { + name: "tokenBadge"; + discriminator: [116, 219, 204, 229, 249, 116, 255, 150]; + }, + { + name: "vesting"; + discriminator: [100, 149, 66, 138, 95, 200, 128, 241]; + } + ]; + events: [ + { + name: "evtAddLiquidity"; + discriminator: [175, 242, 8, 157, 30, 247, 185, 169]; + }, + { + name: "evtClaimPartnerFee"; + discriminator: [118, 99, 77, 10, 226, 1, 1, 87]; + }, + { + name: "evtClaimPositionFee"; + discriminator: [198, 182, 183, 52, 97, 12, 49, 56]; + }, + { + name: "evtClaimProtocolFee"; + discriminator: [186, 244, 75, 251, 188, 13, 25, 33]; + }, + { + name: "evtClaimReward"; + discriminator: [218, 86, 147, 200, 235, 188, 215, 231]; + }, + { + name: "evtCloseClaimFeeOperator"; + discriminator: [111, 39, 37, 55, 110, 216, 194, 23]; + }, + { + name: "evtCloseConfig"; + discriminator: [36, 30, 239, 45, 58, 132, 14, 5]; + }, + { + name: "evtClosePosition"; + discriminator: [20, 145, 144, 68, 143, 142, 214, 178]; + }, + { + name: "evtCreateClaimFeeOperator"; + discriminator: [21, 6, 153, 120, 68, 116, 28, 177]; + }, + { + name: "evtCreateConfig"; + discriminator: [131, 207, 180, 174, 180, 73, 165, 54]; + }, + { + name: "evtCreateDynamicConfig"; + discriminator: [231, 197, 13, 164, 248, 213, 133, 152]; + }, + { + name: "evtCreatePosition"; + discriminator: [156, 15, 119, 198, 29, 181, 221, 55]; + }, + { + name: "evtCreateTokenBadge"; + discriminator: [141, 120, 134, 116, 34, 28, 114, 160]; + }, + { + name: "evtFundReward"; + discriminator: [104, 233, 237, 122, 199, 191, 121, 85]; + }, + { + name: "evtInitializePool"; + discriminator: [228, 50, 246, 85, 203, 66, 134, 37]; + }, + { + name: "evtInitializeReward"; + discriminator: [129, 91, 188, 3, 246, 52, 185, 249]; + }, + { + name: "evtLockPosition"; + discriminator: [168, 63, 108, 83, 219, 82, 2, 200]; + }, + { + name: "evtPermanentLockPosition"; + discriminator: [145, 143, 162, 218, 218, 80, 67, 11]; + }, + { + name: "evtRemoveLiquidity"; + discriminator: [87, 46, 88, 98, 175, 96, 34, 91]; + }, + { + name: "evtSetPoolStatus"; + discriminator: [100, 213, 74, 3, 95, 91, 228, 146]; + }, + { + name: "evtSplitPosition"; + discriminator: [182, 138, 42, 254, 27, 94, 82, 221]; + }, + { + name: "evtSwap"; + discriminator: [27, 60, 21, 213, 138, 170, 187, 147]; + }, + { + name: "evtUpdateRewardDuration"; + discriminator: [149, 135, 65, 231, 129, 153, 65, 57]; + }, + { + name: "evtUpdateRewardFunder"; + discriminator: [76, 154, 208, 13, 40, 115, 246, 146]; + }, + { + name: "evtWithdrawIneligibleReward"; + discriminator: [248, 215, 184, 78, 31, 180, 179, 168]; + } + ]; + errors: [ + { + code: 6000; + name: "mathOverflow"; + msg: "Math operation overflow"; + }, + { + code: 6001; + name: "invalidFee"; + msg: "Invalid fee setup"; + }, + { + code: 6002; + name: "exceededSlippage"; + msg: "Exceeded slippage tolerance"; + }, + { + code: 6003; + name: "poolDisabled"; + msg: "Pool disabled"; + }, + { + code: 6004; + name: "exceedMaxFeeBps"; + msg: "Exceeded max fee bps"; + }, + { + code: 6005; + name: "invalidAdmin"; + msg: "Invalid admin"; + }, + { + code: 6006; + name: "amountIsZero"; + msg: "Amount is zero"; + }, + { + code: 6007; + name: "typeCastFailed"; + msg: "Type cast error"; + }, + { + code: 6008; + name: "unableToModifyActivationPoint"; + msg: "Unable to modify activation point"; + }, + { + code: 6009; + name: "invalidAuthorityToCreateThePool"; + msg: "Invalid authority to create the pool"; + }, + { + code: 6010; + name: "invalidActivationType"; + msg: "Invalid activation type"; + }, + { + code: 6011; + name: "invalidActivationPoint"; + msg: "Invalid activation point"; + }, + { + code: 6012; + name: "invalidQuoteMint"; + msg: "Quote token must be SOL,USDC"; + }, + { + code: 6013; + name: "invalidFeeCurve"; + msg: "Invalid fee curve"; + }, + { + code: 6014; + name: "invalidPriceRange"; + msg: "Invalid Price Range"; + }, + { + code: 6015; + name: "priceRangeViolation"; + msg: "Trade is over price range"; + }, + { + code: 6016; + name: "invalidParameters"; + msg: "Invalid parameters"; + }, + { + code: 6017; + name: "invalidCollectFeeMode"; + msg: "Invalid collect fee mode"; + }, + { + code: 6018; + name: "invalidInput"; + msg: "Invalid input"; + }, + { + code: 6019; + name: "cannotCreateTokenBadgeOnSupportedMint"; + msg: "Cannot create token badge on supported mint"; + }, + { + code: 6020; + name: "invalidTokenBadge"; + msg: "Invalid token badge"; + }, + { + code: 6021; + name: "invalidMinimumLiquidity"; + msg: "Invalid minimum liquidity"; + }, + { + code: 6022; + name: "invalidVestingInfo"; + msg: "Invalid vesting information"; + }, + { + code: 6023; + name: "insufficientLiquidity"; + msg: "Insufficient liquidity"; + }, + { + code: 6024; + name: "invalidVestingAccount"; + msg: "Invalid vesting account"; + }, + { + code: 6025; + name: "invalidPoolStatus"; + msg: "Invalid pool status"; + }, + { + code: 6026; + name: "unsupportNativeMintToken2022"; + msg: "Unsupported native mint token2022"; + }, + { + code: 6027; + name: "invalidRewardIndex"; + msg: "Invalid reward index"; + }, + { + code: 6028; + name: "invalidRewardDuration"; + msg: "Invalid reward duration"; + }, + { + code: 6029; + name: "rewardInitialized"; + msg: "Reward already initialized"; + }, + { + code: 6030; + name: "rewardUninitialized"; + msg: "Reward not initialized"; + }, + { + code: 6031; + name: "invalidRewardVault"; + msg: "Invalid reward vault"; + }, + { + code: 6032; + name: "mustWithdrawnIneligibleReward"; + msg: "Must withdraw ineligible reward"; + }, + { + code: 6033; + name: "identicalRewardDuration"; + msg: "Reward duration is the same"; + }, + { + code: 6034; + name: "rewardCampaignInProgress"; + msg: "Reward campaign in progress"; + }, + { + code: 6035; + name: "identicalFunder"; + msg: "Identical funder"; + }, + { + code: 6036; + name: "invalidFunder"; + msg: "Invalid funder"; + }, + { + code: 6037; + name: "rewardNotEnded"; + msg: "Reward not ended"; + }, + { + code: 6038; + name: "feeInverseIsIncorrect"; + msg: "Fee inverse is incorrect"; + }, + { + code: 6039; + name: "positionIsNotEmpty"; + msg: "Position is not empty"; + }, + { + code: 6040; + name: "invalidPoolCreatorAuthority"; + msg: "Invalid pool creator authority"; + }, + { + code: 6041; + name: "invalidConfigType"; + msg: "Invalid config type"; + }, + { + code: 6042; + name: "invalidPoolCreator"; + msg: "Invalid pool creator"; + }, + { + code: 6043; + name: "rewardVaultFrozenSkipRequired"; + msg: "Reward vault is frozen, must skip reward to proceed"; + }, + { + code: 6044; + name: "invalidSplitPositionParameters"; + msg: "Invalid parameters for split position"; + }, + { + code: 6045; + name: "unsupportPositionHasVestingLock"; + msg: "Unsupported split position has vesting lock"; + }, + { + code: 6046; + name: "samePosition"; + msg: "Same position"; + } + ]; + types: [ + { + name: "addLiquidityParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "liquidityDelta"; + docs: ["delta liquidity"]; + type: "u128"; + }, + { + name: "tokenAAmountThreshold"; + docs: ["maximum token a amount"]; + type: "u64"; + }, + { + name: "tokenBAmountThreshold"; + docs: ["maximum token b amount"]; + type: "u64"; + } + ]; + }; + }, + { + name: "baseFeeConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "cliffFeeNumerator"; + type: "u64"; + }, + { + name: "feeSchedulerMode"; + type: "u8"; + }, + { + name: "padding"; + type: { + array: ["u8", 5]; + }; + }, + { + name: "numberOfPeriod"; + type: "u16"; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "reductionFactor"; + type: "u64"; + } + ]; + }; + }, + { + name: "baseFeeParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "cliffFeeNumerator"; + type: "u64"; + }, + { + name: "numberOfPeriod"; + type: "u16"; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "reductionFactor"; + type: "u64"; + }, + { + name: "feeSchedulerMode"; + type: "u8"; + } + ]; + }; + }, + { + name: "baseFeeStruct"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "cliffFeeNumerator"; + type: "u64"; + }, + { + name: "feeSchedulerMode"; + type: "u8"; + }, + { + name: "padding0"; + type: { + array: ["u8", 5]; + }; + }, + { + name: "numberOfPeriod"; + type: "u16"; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "reductionFactor"; + type: "u64"; + }, + { + name: "padding1"; + type: "u64"; + } + ]; + }; + }, + { + name: "claimFeeOperator"; + docs: ["Parameter that set by the protocol"]; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "operator"; + docs: ["operator"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["Reserve"]; + type: { + array: ["u8", 128]; + }; + } + ]; + }; + }, + { + name: "config"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "vaultConfigKey"; + docs: ["Vault config key"]; + type: "pubkey"; + }, + { + name: "poolCreatorAuthority"; + docs: [ + "Only pool_creator_authority can use the current config to initialize new pool. When it's Pubkey::default, it's a public config." + ]; + type: "pubkey"; + }, + { + name: "poolFees"; + docs: ["Pool fee"]; + type: { + defined: { + name: "poolFeesConfig"; + }; + }; + }, + { + name: "activationType"; + docs: ["Activation type"]; + type: "u8"; + }, + { + name: "collectFeeMode"; + docs: ["Collect fee mode"]; + type: "u8"; + }, + { + name: "configType"; + docs: ["Config type mode, 0 for static, 1 for dynamic"]; + type: "u8"; + }, + { + name: "padding0"; + docs: ["padding 0"]; + type: { + array: ["u8", 5]; + }; + }, + { + name: "index"; + docs: ["config index"]; + type: "u64"; + }, + { + name: "sqrtMinPrice"; + docs: ["sqrt min price"]; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + docs: ["sqrt max price"]; + type: "u128"; + }, + { + name: "padding1"; + docs: ["Fee curve point", "Padding for further use"]; + type: { + array: ["u64", 10]; + }; + } + ]; + }; + }, + { + name: "dynamicConfigParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "poolCreatorAuthority"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "dynamicFeeConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + type: "u8"; + }, + { + name: "padding"; + type: { + array: ["u8", 7]; + }; + }, + { + name: "maxVolatilityAccumulator"; + type: "u32"; + }, + { + name: "variableFeeControl"; + type: "u32"; + }, + { + name: "binStep"; + type: "u16"; + }, + { + name: "filterPeriod"; + type: "u16"; + }, + { + name: "decayPeriod"; + type: "u16"; + }, + { + name: "reductionFactor"; + type: "u16"; + }, + { + name: "padding1"; + type: { + array: ["u8", 8]; + }; + }, + { + name: "binStepU128"; + type: "u128"; + } + ]; + }; + }, + { + name: "dynamicFeeParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "binStep"; + type: "u16"; + }, + { + name: "binStepU128"; + type: "u128"; + }, + { + name: "filterPeriod"; + type: "u16"; + }, + { + name: "decayPeriod"; + type: "u16"; + }, + { + name: "reductionFactor"; + type: "u16"; + }, + { + name: "maxVolatilityAccumulator"; + type: "u32"; + }, + { + name: "variableFeeControl"; + type: "u32"; + } + ]; + }; + }, + { + name: "dynamicFeeStruct"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + type: "u8"; + }, + { + name: "padding"; + type: { + array: ["u8", 7]; + }; + }, + { + name: "maxVolatilityAccumulator"; + type: "u32"; + }, + { + name: "variableFeeControl"; + type: "u32"; + }, + { + name: "binStep"; + type: "u16"; + }, + { + name: "filterPeriod"; + type: "u16"; + }, + { + name: "decayPeriod"; + type: "u16"; + }, + { + name: "reductionFactor"; + type: "u16"; + }, + { + name: "lastUpdateTimestamp"; + type: "u64"; + }, + { + name: "binStepU128"; + type: "u128"; + }, + { + name: "sqrtPriceReference"; + type: "u128"; + }, + { + name: "volatilityAccumulator"; + type: "u128"; + }, + { + name: "volatilityReference"; + type: "u128"; + } + ]; + }; + }, + { + name: "evtAddLiquidity"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "params"; + type: { + defined: { + name: "addLiquidityParameters"; + }; + }; + }, + { + name: "tokenAAmount"; + type: "u64"; + }, + { + name: "tokenBAmount"; + type: "u64"; + }, + { + name: "totalAmountA"; + type: "u64"; + }, + { + name: "totalAmountB"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimPartnerFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenAAmount"; + type: "u64"; + }, + { + name: "tokenBAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimPositionFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "feeAClaimed"; + type: "u64"; + }, + { + name: "feeBClaimed"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimProtocolFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenAAmount"; + type: "u64"; + }, + { + name: "tokenBAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimReward"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "mintReward"; + type: "pubkey"; + }, + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "totalReward"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtCloseClaimFeeOperator"; + docs: ["Close claim fee operator"]; + type: { + kind: "struct"; + fields: [ + { + name: "claimFeeOperator"; + type: "pubkey"; + }, + { + name: "operator"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCloseConfig"; + docs: ["Close config"]; + type: { + kind: "struct"; + fields: [ + { + name: "config"; + docs: ["Config pubkey"]; + type: "pubkey"; + }, + { + name: "admin"; + docs: ["admin pk"]; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtClosePosition"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "positionNftMint"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateClaimFeeOperator"; + docs: ["Create claim fee operator"]; + type: { + kind: "struct"; + fields: [ + { + name: "operator"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateConfig"; + docs: ["Create static config"]; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "vaultConfigKey"; + type: "pubkey"; + }, + { + name: "poolCreatorAuthority"; + type: "pubkey"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "sqrtMinPrice"; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + type: "u128"; + }, + { + name: "collectFeeMode"; + type: "u8"; + }, + { + name: "index"; + type: "u64"; + }, + { + name: "config"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateDynamicConfig"; + docs: ["Create dynamic config"]; + type: { + kind: "struct"; + fields: [ + { + name: "config"; + type: "pubkey"; + }, + { + name: "poolCreatorAuthority"; + type: "pubkey"; + }, + { + name: "index"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtCreatePosition"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "positionNftMint"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateTokenBadge"; + docs: ["Create token badge"]; + type: { + kind: "struct"; + fields: [ + { + name: "tokenMint"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtFundReward"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "funder"; + type: "pubkey"; + }, + { + name: "mintReward"; + type: "pubkey"; + }, + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "amount"; + type: "u64"; + }, + { + name: "transferFeeExcludedAmountIn"; + type: "u64"; + }, + { + name: "rewardDurationEnd"; + type: "u64"; + }, + { + name: "preRewardRate"; + type: "u128"; + }, + { + name: "postRewardRate"; + type: "u128"; + } + ]; + }; + }, + { + name: "evtInitializePool"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenAMint"; + type: "pubkey"; + }, + { + name: "tokenBMint"; + type: "pubkey"; + }, + { + name: "creator"; + type: "pubkey"; + }, + { + name: "payer"; + type: "pubkey"; + }, + { + name: "alphaVault"; + type: "pubkey"; + }, + { + name: "poolFees"; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "sqrtMinPrice"; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + type: "u128"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "collectFeeMode"; + type: "u8"; + }, + { + name: "liquidity"; + type: "u128"; + }, + { + name: "sqrtPrice"; + type: "u128"; + }, + { + name: "activationPoint"; + type: "u64"; + }, + { + name: "tokenAFlag"; + type: "u8"; + }, + { + name: "tokenBFlag"; + type: "u8"; + }, + { + name: "tokenAAmount"; + type: "u64"; + }, + { + name: "tokenBAmount"; + type: "u64"; + }, + { + name: "totalAmountA"; + type: "u64"; + }, + { + name: "totalAmountB"; + type: "u64"; + }, + { + name: "poolType"; + type: "u8"; + } + ]; + }; + }, + { + name: "evtInitializeReward"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "rewardMint"; + type: "pubkey"; + }, + { + name: "funder"; + type: "pubkey"; + }, + { + name: "creator"; + type: "pubkey"; + }, + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "rewardDuration"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtLockPosition"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "vesting"; + type: "pubkey"; + }, + { + name: "cliffPoint"; + type: "u64"; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "cliffUnlockLiquidity"; + type: "u128"; + }, + { + name: "liquidityPerPeriod"; + type: "u128"; + }, + { + name: "numberOfPeriod"; + type: "u16"; + } + ]; + }; + }, + { + name: "evtPermanentLockPosition"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "lockLiquidityAmount"; + type: "u128"; + }, + { + name: "totalPermanentLockedLiquidity"; + type: "u128"; + } + ]; + }; + }, + { + name: "evtRemoveLiquidity"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "position"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "params"; + type: { + defined: { + name: "removeLiquidityParameters"; + }; + }; + }, + { + name: "tokenAAmount"; + type: "u64"; + }, + { + name: "tokenBAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtSetPoolStatus"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "status"; + type: "u8"; + } + ]; + }; + }, + { + name: "evtSplitPosition"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "firstOwner"; + type: "pubkey"; + }, + { + name: "secondOwner"; + type: "pubkey"; + }, + { + name: "firstPosition"; + type: "pubkey"; + }, + { + name: "secondPosition"; + type: "pubkey"; + }, + { + name: "currentSqrtPrice"; + type: "u128"; + }, + { + name: "amountSplits"; + type: { + defined: { + name: "splitAmountInfo"; + }; + }; + }, + { + name: "firstPositionInfo"; + type: { + defined: { + name: "splitPositionInfo"; + }; + }; + }, + { + name: "secondPositionInfo"; + type: { + defined: { + name: "splitPositionInfo"; + }; + }; + }, + { + name: "splitPositionParameters"; + type: { + defined: { + name: "splitPositionParameters"; + }; + }; + } + ]; + }; + }, + { + name: "evtSwap"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tradeDirection"; + type: "u8"; + }, + { + name: "hasReferral"; + type: "bool"; + }, + { + name: "params"; + type: { + defined: { + name: "swapParameters"; + }; + }; + }, + { + name: "swapResult"; + type: { + defined: { + name: "swapResult"; + }; + }; + }, + { + name: "actualAmountIn"; + type: "u64"; + }, + { + name: "currentTimestamp"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtUpdateRewardDuration"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "oldRewardDuration"; + type: "u64"; + }, + { + name: "newRewardDuration"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtUpdateRewardFunder"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "rewardIndex"; + type: "u8"; + }, + { + name: "oldFunder"; + type: "pubkey"; + }, + { + name: "newFunder"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtWithdrawIneligibleReward"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "rewardMint"; + type: "pubkey"; + }, + { + name: "amount"; + type: "u64"; + } + ]; + }; + }, + { + name: "initializeCustomizablePoolParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + docs: ["pool fees"]; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "sqrtMinPrice"; + docs: ["sqrt min price"]; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + docs: ["sqrt max price"]; + type: "u128"; + }, + { + name: "hasAlphaVault"; + docs: ["has alpha vault"]; + type: "bool"; + }, + { + name: "liquidity"; + docs: ["initialize liquidity"]; + type: "u128"; + }, + { + name: "sqrtPrice"; + docs: [ + "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value" + ]; + type: "u128"; + }, + { + name: "activationType"; + docs: ["activation type"]; + type: "u8"; + }, + { + name: "collectFeeMode"; + docs: ["collect fee mode"]; + type: "u8"; + }, + { + name: "activationPoint"; + docs: ["activation point"]; + type: { + option: "u64"; + }; + } + ]; + }; + }, + { + name: "initializePoolParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "liquidity"; + docs: ["initialize liquidity"]; + type: "u128"; + }, + { + name: "sqrtPrice"; + docs: [ + "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value" + ]; + type: "u128"; + }, + { + name: "activationPoint"; + docs: ["activation point"]; + type: { + option: "u64"; + }; + } + ]; + }; + }, + { + name: "pool"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + docs: ["Pool fee"]; + type: { + defined: { + name: "poolFeesStruct"; + }; + }; + }, + { + name: "tokenAMint"; + docs: ["token a mint"]; + type: "pubkey"; + }, + { + name: "tokenBMint"; + docs: ["token b mint"]; + type: "pubkey"; + }, + { + name: "tokenAVault"; + docs: ["token a vault"]; + type: "pubkey"; + }, + { + name: "tokenBVault"; + docs: ["token b vault"]; + type: "pubkey"; + }, + { + name: "whitelistedVault"; + docs: [ + "Whitelisted vault to be able to buy pool before activation_point" + ]; + type: "pubkey"; + }, + { + name: "partner"; + docs: ["partner"]; + type: "pubkey"; + }, + { + name: "liquidity"; + docs: ["liquidity share"]; + type: "u128"; + }, + { + name: "padding"; + docs: [ + "padding, previous reserve amount, be careful to use that field" + ]; + type: "u128"; + }, + { + name: "protocolAFee"; + docs: ["protocol a fee"]; + type: "u64"; + }, + { + name: "protocolBFee"; + docs: ["protocol b fee"]; + type: "u64"; + }, + { + name: "partnerAFee"; + docs: ["partner a fee"]; + type: "u64"; + }, + { + name: "partnerBFee"; + docs: ["partner b fee"]; + type: "u64"; + }, + { + name: "sqrtMinPrice"; + docs: ["min price"]; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + docs: ["max price"]; + type: "u128"; + }, + { + name: "sqrtPrice"; + docs: ["current price"]; + type: "u128"; + }, + { + name: "activationPoint"; + docs: ["Activation point, can be slot or timestamp"]; + type: "u64"; + }, + { + name: "activationType"; + docs: ["Activation type, 0 means by slot, 1 means by timestamp"]; + type: "u8"; + }, + { + name: "poolStatus"; + docs: ["pool status, 0: enable, 1 disable"]; + type: "u8"; + }, + { + name: "tokenAFlag"; + docs: ["token a flag"]; + type: "u8"; + }, + { + name: "tokenBFlag"; + docs: ["token b flag"]; + type: "u8"; + }, + { + name: "collectFeeMode"; + docs: [ + "0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b" + ]; + type: "u8"; + }, + { + name: "poolType"; + docs: ["pool type"]; + type: "u8"; + }, + { + name: "padding0"; + docs: ["padding"]; + type: { + array: ["u8", 2]; + }; + }, + { + name: "feeAPerLiquidity"; + docs: ["cumulative"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "feeBPerLiquidity"; + docs: ["cumulative"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "permanentLockLiquidity"; + type: "u128"; + }, + { + name: "metrics"; + docs: ["metrics"]; + type: { + defined: { + name: "poolMetrics"; + }; + }; + }, + { + name: "creator"; + docs: ["pool creator"]; + type: "pubkey"; + }, + { + name: "padding1"; + docs: ["Padding for further use"]; + type: { + array: ["u64", 6]; + }; + }, + { + name: "rewardInfos"; + docs: ["Farming reward information"]; + type: { + array: [ + { + defined: { + name: "rewardInfo"; + }; + }, + 2 + ]; + }; + } + ]; + }; + }, + { + name: "poolFeeParameters"; + docs: ["Information regarding fee charges"]; + type: { + kind: "struct"; + fields: [ + { + name: "baseFee"; + docs: ["Base fee"]; + type: { + defined: { + name: "baseFeeParameters"; + }; + }; + }, + { + name: "padding"; + docs: ["padding"]; + type: { + array: ["u8", 3]; + }; + }, + { + name: "dynamicFee"; + docs: ["dynamic fee"]; + type: { + option: { + defined: { + name: "dynamicFeeParameters"; + }; + }; + }; + } + ]; + }; + }, + { + name: "poolFeesConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "baseFee"; + type: { + defined: { + name: "baseFeeConfig"; + }; + }; + }, + { + name: "dynamicFee"; + type: { + defined: { + name: "dynamicFeeConfig"; + }; + }; + }, + { + name: "protocolFeePercent"; + type: "u8"; + }, + { + name: "partnerFeePercent"; + type: "u8"; + }, + { + name: "referralFeePercent"; + type: "u8"; + }, + { + name: "padding0"; + type: { + array: ["u8", 5]; + }; + }, + { + name: "padding1"; + type: { + array: ["u64", 5]; + }; + } + ]; + }; + }, + { + name: "poolFeesStruct"; + docs: [ + "Information regarding fee charges", + "trading_fee = amount * trade_fee_numerator / denominator", + "protocol_fee = trading_fee * protocol_fee_percentage / 100", + "referral_fee = protocol_fee * referral_percentage / 100", + "partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator" + ]; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "baseFee"; + docs: [ + "Trade fees are extra token amounts that are held inside the token", + "accounts during a trade, making the value of liquidity tokens rise.", + "Trade fee numerator" + ]; + type: { + defined: { + name: "baseFeeStruct"; + }; + }; + }, + { + name: "protocolFeePercent"; + docs: [ + "Protocol trading fees are extra token amounts that are held inside the token", + "accounts during a trade, with the equivalent in pool tokens minted to", + "the protocol of the program.", + "Protocol trade fee numerator" + ]; + type: "u8"; + }, + { + name: "partnerFeePercent"; + docs: ["partner fee"]; + type: "u8"; + }, + { + name: "referralFeePercent"; + docs: ["referral fee"]; + type: "u8"; + }, + { + name: "padding0"; + docs: ["padding"]; + type: { + array: ["u8", 5]; + }; + }, + { + name: "dynamicFee"; + docs: ["dynamic fee"]; + type: { + defined: { + name: "dynamicFeeStruct"; + }; + }; + }, + { + name: "padding1"; + docs: ["padding"]; + type: { + array: ["u64", 2]; + }; + } + ]; + }; + }, + { + name: "poolMetrics"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "totalLpAFee"; + type: "u128"; + }, + { + name: "totalLpBFee"; + type: "u128"; + }, + { + name: "totalProtocolAFee"; + type: "u64"; + }, + { + name: "totalProtocolBFee"; + type: "u64"; + }, + { + name: "totalPartnerAFee"; + type: "u64"; + }, + { + name: "totalPartnerBFee"; + type: "u64"; + }, + { + name: "totalPosition"; + type: "u64"; + }, + { + name: "padding"; + type: "u64"; + } + ]; + }; + }, + { + name: "position"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "nftMint"; + docs: ["nft mint"]; + type: "pubkey"; + }, + { + name: "feeAPerTokenCheckpoint"; + docs: ["fee a checkpoint"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "feeBPerTokenCheckpoint"; + docs: ["fee b checkpoint"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "feeAPending"; + docs: ["fee a pending"]; + type: "u64"; + }, + { + name: "feeBPending"; + docs: ["fee b pending"]; + type: "u64"; + }, + { + name: "unlockedLiquidity"; + docs: ["unlock liquidity"]; + type: "u128"; + }, + { + name: "vestedLiquidity"; + docs: ["vesting liquidity"]; + type: "u128"; + }, + { + name: "permanentLockedLiquidity"; + docs: ["permanent locked liquidity"]; + type: "u128"; + }, + { + name: "metrics"; + docs: ["metrics"]; + type: { + defined: { + name: "positionMetrics"; + }; + }; + }, + { + name: "rewardInfos"; + docs: ["Farming reward information"]; + type: { + array: [ + { + defined: { + name: "userRewardInfo"; + }; + }, + 2 + ]; + }; + }, + { + name: "padding"; + docs: ["padding for future usage"]; + type: { + array: ["u128", 6]; + }; + } + ]; + }; + }, + { + name: "positionMetrics"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "totalClaimedAFee"; + type: "u64"; + }, + { + name: "totalClaimedBFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "removeLiquidityParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "liquidityDelta"; + docs: ["delta liquidity"]; + type: "u128"; + }, + { + name: "tokenAAmountThreshold"; + docs: ["minimum token a amount"]; + type: "u64"; + }, + { + name: "tokenBAmountThreshold"; + docs: ["minimum token b amount"]; + type: "u64"; + } + ]; + }; + }, + { + name: "rewardInfo"; + docs: ["Stores the state relevant for tracking liquidity mining rewards"]; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + docs: ["Indicates if the reward has been initialized"]; + type: "u8"; + }, + { + name: "rewardTokenFlag"; + docs: ["reward token flag"]; + type: "u8"; + }, + { + name: "padding0"; + docs: ["padding"]; + type: { + array: ["u8", 6]; + }; + }, + { + name: "padding1"; + docs: ["Padding to ensure `reward_rate: u128` is 16-byte aligned"]; + type: { + array: ["u8", 8]; + }; + }, + { + name: "mint"; + docs: ["Reward token mint."]; + type: "pubkey"; + }, + { + name: "vault"; + docs: ["Reward vault token account."]; + type: "pubkey"; + }, + { + name: "funder"; + docs: ["Authority account that allows to fund rewards"]; + type: "pubkey"; + }, + { + name: "rewardDuration"; + docs: ["reward duration"]; + type: "u64"; + }, + { + name: "rewardDurationEnd"; + docs: ["reward duration end"]; + type: "u64"; + }, + { + name: "rewardRate"; + docs: ["reward rate"]; + type: "u128"; + }, + { + name: "rewardPerTokenStored"; + docs: ["Reward per token stored"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "lastUpdateTime"; + docs: ["The last time reward states were updated."]; + type: "u64"; + }, + { + name: "cumulativeSecondsWithEmptyLiquidityReward"; + docs: [ + "Accumulated seconds when the farm distributed rewards but the bin was empty.", + "These rewards will be carried over to the next reward time window." + ]; + type: "u64"; + } + ]; + }; + }, + { + name: "splitAmountInfo"; + type: { + kind: "struct"; + fields: [ + { + name: "permanentLockedLiquidity"; + type: "u128"; + }, + { + name: "unlockedLiquidity"; + type: "u128"; + }, + { + name: "feeA"; + type: "u64"; + }, + { + name: "feeB"; + type: "u64"; + }, + { + name: "reward0"; + type: "u64"; + }, + { + name: "reward1"; + type: "u64"; + } + ]; + }; + }, + { + name: "splitPositionInfo"; + type: { + kind: "struct"; + fields: [ + { + name: "liquidity"; + type: "u128"; + }, + { + name: "feeA"; + type: "u64"; + }, + { + name: "feeB"; + type: "u64"; + }, + { + name: "reward0"; + type: "u64"; + }, + { + name: "reward1"; + type: "u64"; + } + ]; + }; + }, + { + name: "splitPositionParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "unlockedLiquidityPercentage"; + docs: [ + "Percentage of unlocked liquidity to split to the second position" + ]; + type: "u8"; + }, + { + name: "permanentLockedLiquidityPercentage"; + docs: [ + "Percentage of permanent locked liquidity to split to the second position" + ]; + type: "u8"; + }, + { + name: "feeAPercentage"; + docs: [ + "Percentage of fee A pending to split to the second position" + ]; + type: "u8"; + }, + { + name: "feeBPercentage"; + docs: [ + "Percentage of fee B pending to split to the second position" + ]; + type: "u8"; + }, + { + name: "reward0Percentage"; + docs: [ + "Percentage of reward 0 pending to split to the second position" + ]; + type: "u8"; + }, + { + name: "reward1Percentage"; + docs: [ + "Percentage of reward 1 pending to split to the second position" + ]; + type: "u8"; + }, + { + name: "padding"; + docs: ["padding for future"]; + type: { + array: ["u8", 16]; + }; + } + ]; + }; + }, + { + name: "staticConfigParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "sqrtMinPrice"; + type: "u128"; + }, + { + name: "sqrtMaxPrice"; + type: "u128"; + }, + { + name: "vaultConfigKey"; + type: "pubkey"; + }, + { + name: "poolCreatorAuthority"; + type: "pubkey"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "collectFeeMode"; + type: "u8"; + } + ]; + }; + }, + { + name: "swapParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "amountIn"; + type: "u64"; + }, + { + name: "minimumAmountOut"; + type: "u64"; + } + ]; + }; + }, + { + name: "swapResult"; + docs: ["Encodes all results of swapping"]; + type: { + kind: "struct"; + fields: [ + { + name: "outputAmount"; + type: "u64"; + }, + { + name: "nextSqrtPrice"; + type: "u128"; + }, + { + name: "lpFee"; + type: "u64"; + }, + { + name: "protocolFee"; + type: "u64"; + }, + { + name: "partnerFee"; + type: "u64"; + }, + { + name: "referralFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "tokenBadge"; + docs: ["Parameter that set by the protocol"]; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "tokenMint"; + docs: ["token mint"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["Reserve"]; + type: { + array: ["u8", 128]; + }; + } + ]; + }; + }, + { + name: "userRewardInfo"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "rewardPerTokenCheckpoint"; + docs: ["The latest update reward checkpoint"]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "rewardPendings"; + docs: ["Current pending rewards"]; + type: "u64"; + }, + { + name: "totalClaimedRewards"; + docs: ["Total claimed rewards"]; + type: "u64"; + } + ]; + }; + }, + { + name: "vesting"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "position"; + type: "pubkey"; + }, + { + name: "cliffPoint"; + type: "u64"; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "cliffUnlockLiquidity"; + type: "u128"; + }, + { + name: "liquidityPerPeriod"; + type: "u128"; + }, + { + name: "totalReleasedLiquidity"; + type: "u128"; + }, + { + name: "numberOfPeriod"; + type: "u16"; + }, + { + name: "padding"; + type: { + array: ["u8", 14]; + }; + }, + { + name: "padding2"; + type: { + array: ["u128", 4]; + }; + } + ]; + }; + }, + { + name: "vestingParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "cliffPoint"; + type: { + option: "u64"; + }; + }, + { + name: "periodFrequency"; + type: "u64"; + }, + { + name: "cliffUnlockLiquidity"; + type: "u128"; + }, + { + name: "liquidityPerPeriod"; + type: "u128"; + }, + { + name: "numberOfPeriod"; + type: "u16"; + } + ]; + }; + } + ]; +}; diff --git a/tests/common/idl/dynamic_bonding_curve.ts b/tests/common/idl/dynamic_bonding_curve.ts new file mode 100644 index 0000000..873e43c --- /dev/null +++ b/tests/common/idl/dynamic_bonding_curve.ts @@ -0,0 +1,5248 @@ +/** + * Program IDL in camelCase format in order to be used in JS/TS. + * + * Note that this is only a type helper and is not the actual IDL. The original + * IDL can be found at `target/idl/dynamic_bonding_curve.json`. + */ +export type DynamicBondingCurve = { + address: "dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN"; + metadata: { + name: "dynamicBondingCurve"; + version: "0.1.6"; + spec: "0.1.0"; + description: "Created with Anchor"; + }; + instructions: [ + { + name: "claimCreatorTradingFee"; + discriminator: [82, 220, 250, 189, 3, 85, 107, 45]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The treasury token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The treasury token b account"]; + writable: true; + }, + { + name: "baseVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "baseMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of token b"]; + }, + { + name: "creator"; + signer: true; + relations: ["pool"]; + }, + { + name: "tokenBaseProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "maxBaseAmount"; + type: "u64"; + }, + { + name: "maxQuoteAmount"; + type: "u64"; + } + ]; + }, + { + name: "claimProtocolFee"; + discriminator: [165, 228, 133, 48, 99, 249, 255, 33]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["pool"]; + }, + { + name: "pool"; + writable: true; + }, + { + name: "baseVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "baseMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of token b"]; + relations: ["config"]; + }, + { + name: "tokenBaseAccount"; + docs: ["The treasury token a account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ]; + }, + { + kind: "account"; + path: "tokenBaseProgram"; + }, + { + kind: "account"; + path: "baseMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "tokenQuoteAccount"; + docs: ["The treasury token b account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ]; + }, + { + kind: "account"; + path: "tokenQuoteProgram"; + }, + { + kind: "account"; + path: "quoteMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "claimFeeOperator"; + docs: ["Claim fee operator"]; + }, + { + name: "operator"; + docs: ["Operator"]; + signer: true; + relations: ["claimFeeOperator"]; + }, + { + name: "tokenBaseProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "claimTradingFee"; + discriminator: [8, 236, 89, 49, 152, 125, 177, 81]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["pool"]; + }, + { + name: "pool"; + writable: true; + }, + { + name: "tokenAAccount"; + docs: ["The treasury token a account"]; + writable: true; + }, + { + name: "tokenBAccount"; + docs: ["The treasury token b account"]; + writable: true; + }, + { + name: "baseVault"; + docs: ["The vault token account for input token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "baseMint"; + docs: ["The mint of token a"]; + relations: ["pool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of token b"]; + relations: ["config"]; + }, + { + name: "feeClaimer"; + signer: true; + relations: ["config"]; + }, + { + name: "tokenBaseProgram"; + docs: ["Token a program"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "maxAmountA"; + type: "u64"; + }, + { + name: "maxAmountB"; + type: "u64"; + } + ]; + }, + { + name: "closeClaimFeeOperator"; + discriminator: [38, 134, 82, 216, 95, 124, 17, 99]; + accounts: [ + { + name: "claimFeeOperator"; + writable: true; + }, + { + name: "rentReceiver"; + writable: true; + }, + { + name: "admin"; + signer: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "createClaimFeeOperator"; + docs: ["ADMIN FUNCTIONS_ ///"]; + discriminator: [169, 62, 207, 107, 58, 187, 162, 109]; + accounts: [ + { + name: "claimFeeOperator"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [99, 102, 95, 111, 112, 101, 114, 97, 116, 111, 114]; + }, + { + kind: "account"; + path: "operator"; + } + ]; + }; + }, + { + name: "operator"; + }, + { + name: "admin"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "createConfig"; + discriminator: [201, 207, 243, 114, 75, 111, 47, 189]; + accounts: [ + { + name: "config"; + writable: true; + signer: true; + }, + { + name: "feeClaimer"; + }, + { + name: "leftoverReceiver"; + }, + { + name: "quoteMint"; + docs: ["quote mint"]; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "configParameters"; + type: { + defined: { + name: "configParameters"; + }; + }; + } + ]; + }, + { + name: "createLocker"; + docs: ["PERMISSIONLESS FUNCTIONS ///", "create locker"]; + discriminator: [167, 90, 137, 154, 75, 47, 17, 84]; + accounts: [ + { + name: "virtualPool"; + docs: ["Virtual pool"]; + writable: true; + }, + { + name: "config"; + docs: ["config"]; + relations: ["virtualPool"]; + }, + { + name: "poolAuthority"; + writable: true; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "baseVault"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "baseMint"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "base"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [98, 97, 115, 101, 95, 108, 111, 99, 107, 101, 114]; + }, + { + kind: "account"; + path: "virtualPool"; + } + ]; + }; + }, + { + name: "creator"; + relations: ["virtualPool"]; + }, + { + name: "escrow"; + writable: true; + }, + { + name: "escrowToken"; + writable: true; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "tokenProgram"; + }, + { + name: "lockerProgram"; + address: "LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn"; + }, + { + name: "lockerEventAuthority"; + }, + { + name: "systemProgram"; + docs: ["System program."]; + address: "11111111111111111111111111111111"; + } + ]; + args: []; + }, + { + name: "createPartnerMetadata"; + docs: ["PARTNER FUNCTIONS ////"]; + discriminator: [192, 168, 234, 191, 188, 226, 227, 255]; + accounts: [ + { + name: "partnerMetadata"; + docs: ["Partner metadata"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 112, + 97, + 114, + 116, + 110, + 101, + 114, + 95, + 109, + 101, + 116, + 97, + 100, + 97, + 116, + 97 + ]; + }, + { + kind: "account"; + path: "feeClaimer"; + } + ]; + }; + }, + { + name: "payer"; + docs: ["Payer of the partner metadata."]; + writable: true; + signer: true; + }, + { + name: "feeClaimer"; + docs: ["Fee claimer for partner"]; + signer: true; + }, + { + name: "systemProgram"; + docs: ["System program."]; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "metadata"; + type: { + defined: { + name: "createPartnerMetadataParameters"; + }; + }; + } + ]; + }, + { + name: "createVirtualPoolMetadata"; + discriminator: [45, 97, 187, 103, 254, 109, 124, 134]; + accounts: [ + { + name: "virtualPool"; + writable: true; + }, + { + name: "virtualPoolMetadata"; + docs: ["Virtual pool metadata"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 118, + 105, + 114, + 116, + 117, + 97, + 108, + 95, + 112, + 111, + 111, + 108, + 95, + 109, + 101, + 116, + 97, + 100, + 97, + 116, + 97 + ]; + }, + { + kind: "account"; + path: "virtualPool"; + } + ]; + }; + }, + { + name: "creator"; + signer: true; + relations: ["virtualPool"]; + }, + { + name: "payer"; + docs: ["Payer of the virtual pool metadata."]; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + docs: ["System program."]; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "metadata"; + type: { + defined: { + name: "createVirtualPoolMetadataParameters"; + }; + }; + } + ]; + }, + { + name: "creatorWithdrawSurplus"; + discriminator: [165, 3, 137, 7, 28, 134, 76, 80]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "virtualPool"; + writable: true; + }, + { + name: "tokenQuoteAccount"; + docs: ["The receiver token account"]; + writable: true; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of quote token"]; + relations: ["config"]; + }, + { + name: "creator"; + signer: true; + relations: ["virtualPool"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "initializeVirtualPoolWithSplToken"; + docs: ["POOL CREATOR FUNCTIONS ////"]; + discriminator: [140, 85, 215, 176, 102, 54, 104, 79]; + accounts: [ + { + name: "config"; + docs: ["Which config the pool belongs to."]; + }, + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "creator"; + signer: true; + }, + { + name: "baseMint"; + writable: true; + signer: true; + }, + { + name: "quoteMint"; + relations: ["config"]; + }, + { + name: "pool"; + docs: ["Initialize an account to store the pool state"]; + writable: true; + }, + { + name: "baseVault"; + docs: ["Token a vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "baseMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "quoteVault"; + docs: ["Token b vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "quoteMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "mintMetadata"; + writable: true; + }, + { + name: "metadataProgram"; + address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; + }, + { + name: "payer"; + docs: ["Address paying to create the pool. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "tokenQuoteProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "initializePoolParameters"; + }; + }; + } + ]; + }, + { + name: "initializeVirtualPoolWithToken2022"; + discriminator: [169, 118, 51, 78, 145, 110, 220, 155]; + accounts: [ + { + name: "config"; + docs: ["Which config the pool belongs to."]; + }, + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "creator"; + signer: true; + }, + { + name: "baseMint"; + docs: ["Unique token mint address, initialize in contract"]; + writable: true; + signer: true; + }, + { + name: "quoteMint"; + relations: ["config"]; + }, + { + name: "pool"; + docs: ["Initialize an account to store the pool state"]; + writable: true; + }, + { + name: "baseVault"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "baseMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "quoteVault"; + docs: ["Token quote vault for the pool"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]; + }, + { + kind: "account"; + path: "quoteMint"; + }, + { + kind: "account"; + path: "pool"; + } + ]; + }; + }, + { + name: "payer"; + docs: ["Address paying to create the pool. Can be anyone"]; + writable: true; + signer: true; + }, + { + name: "tokenQuoteProgram"; + docs: ["Program to create mint account and mint tokens"]; + }, + { + name: "tokenProgram"; + docs: ["token program for base mint"]; + address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "initializePoolParameters"; + }; + }; + } + ]; + }, + { + name: "migrateMeteoraDamm"; + discriminator: [27, 1, 48, 22, 180, 63, 118, 217]; + accounts: [ + { + name: "virtualPool"; + docs: ["virtual pool"]; + writable: true; + relations: ["migrationMetadata"]; + }, + { + name: "migrationMetadata"; + writable: true; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "poolAuthority"; + writable: true; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "dammConfig"; + docs: ["pool config"]; + }, + { + name: "lpMint"; + writable: true; + }, + { + name: "tokenAMint"; + writable: true; + }, + { + name: "tokenBMint"; + }, + { + name: "aVault"; + writable: true; + }, + { + name: "bVault"; + writable: true; + }, + { + name: "aTokenVault"; + writable: true; + }, + { + name: "bTokenVault"; + writable: true; + }, + { + name: "aVaultLpMint"; + writable: true; + }, + { + name: "bVaultLpMint"; + writable: true; + }, + { + name: "aVaultLp"; + writable: true; + }, + { + name: "bVaultLp"; + writable: true; + }, + { + name: "baseVault"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteVault"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "virtualPoolLp"; + writable: true; + }, + { + name: "protocolTokenAFee"; + writable: true; + }, + { + name: "protocolTokenBFee"; + writable: true; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "rent"; + }, + { + name: "mintMetadata"; + writable: true; + }, + { + name: "metadataProgram"; + }, + { + name: "ammProgram"; + address: "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"; + }, + { + name: "vaultProgram"; + }, + { + name: "tokenProgram"; + docs: ["tokenProgram"]; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "associatedTokenProgram"; + }, + { + name: "systemProgram"; + docs: ["System program."]; + address: "11111111111111111111111111111111"; + } + ]; + args: []; + }, + { + name: "migrateMeteoraDammClaimLpToken"; + discriminator: [139, 133, 2, 30, 91, 145, 127, 154]; + accounts: [ + { + name: "virtualPool"; + relations: ["migrationMetadata"]; + }, + { + name: "migrationMetadata"; + docs: ["migration metadata"]; + writable: true; + }, + { + name: "poolAuthority"; + writable: true; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "lpMint"; + relations: ["migrationMetadata"]; + }, + { + name: "sourceToken"; + writable: true; + pda: { + seeds: [ + { + kind: "account"; + path: "poolAuthority"; + }, + { + kind: "const"; + value: [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ]; + }, + { + kind: "account"; + path: "migrationMetadata"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "destinationToken"; + writable: true; + pda: { + seeds: [ + { + kind: "account"; + path: "owner"; + }, + { + kind: "const"; + value: [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ]; + }, + { + kind: "account"; + path: "migrationMetadata"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "owner"; + }, + { + name: "sender"; + signer: true; + }, + { + name: "tokenProgram"; + docs: ["tokenProgram"]; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + } + ]; + args: []; + }, + { + name: "migrateMeteoraDammLockLpToken"; + discriminator: [177, 55, 238, 157, 251, 88, 165, 42]; + accounts: [ + { + name: "virtualPool"; + relations: ["migrationMetadata"]; + }, + { + name: "migrationMetadata"; + docs: ["migrationMetadata"]; + writable: true; + }, + { + name: "poolAuthority"; + writable: true; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "pool"; + writable: true; + relations: ["lockEscrow"]; + }, + { + name: "lpMint"; + relations: ["migrationMetadata"]; + }, + { + name: "lockEscrow"; + writable: true; + }, + { + name: "owner"; + relations: ["lockEscrow"]; + }, + { + name: "sourceTokens"; + writable: true; + pda: { + seeds: [ + { + kind: "account"; + path: "poolAuthority"; + }, + { + kind: "const"; + value: [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ]; + }, + { + kind: "account"; + path: "migrationMetadata"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "escrowVault"; + writable: true; + }, + { + name: "ammProgram"; + address: "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"; + }, + { + name: "aVault"; + }, + { + name: "bVault"; + }, + { + name: "aVaultLp"; + }, + { + name: "bVaultLp"; + }, + { + name: "aVaultLpMint"; + }, + { + name: "bVaultLpMint"; + }, + { + name: "tokenProgram"; + docs: ["tokenProgram"]; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + } + ]; + args: []; + }, + { + name: "migrationDammV2"; + discriminator: [156, 169, 230, 103, 53, 228, 80, 64]; + accounts: [ + { + name: "virtualPool"; + docs: ["virtual pool"]; + writable: true; + relations: ["migrationMetadata"]; + }, + { + name: "migrationMetadata"; + docs: ["migration metadata"]; + }, + { + name: "config"; + docs: ["virtual pool config key"]; + relations: ["virtualPool"]; + }, + { + name: "poolAuthority"; + writable: true; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "pool"; + writable: true; + }, + { + name: "firstPositionNftMint"; + writable: true; + }, + { + name: "firstPositionNftAccount"; + writable: true; + }, + { + name: "firstPosition"; + writable: true; + }, + { + name: "secondPositionNftMint"; + writable: true; + optional: true; + }, + { + name: "secondPositionNftAccount"; + writable: true; + optional: true; + }, + { + name: "secondPosition"; + writable: true; + optional: true; + }, + { + name: "dammPoolAuthority"; + }, + { + name: "ammProgram"; + address: "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG"; + }, + { + name: "baseMint"; + writable: true; + }, + { + name: "quoteMint"; + writable: true; + }, + { + name: "tokenAVault"; + writable: true; + }, + { + name: "tokenBVault"; + writable: true; + }, + { + name: "baseVault"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteVault"; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "tokenBaseProgram"; + }, + { + name: "tokenQuoteProgram"; + }, + { + name: "token2022Program"; + }, + { + name: "dammEventAuthority"; + }, + { + name: "systemProgram"; + docs: ["System program."]; + address: "11111111111111111111111111111111"; + } + ]; + args: []; + }, + { + name: "migrationDammV2CreateMetadata"; + discriminator: [109, 189, 19, 36, 195, 183, 222, 82]; + accounts: [ + { + name: "virtualPool"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "migrationMetadata"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [100, 97, 109, 109, 95, 118, 50]; + }, + { + kind: "account"; + path: "virtualPool"; + } + ]; + }; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "migrationMeteoraDammCreateMetadata"; + docs: ["migrate damm v1"]; + discriminator: [47, 94, 126, 115, 221, 226, 194, 133]; + accounts: [ + { + name: "virtualPool"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "migrationMetadata"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [109, 101, 116, 101, 111, 114, 97]; + }, + { + kind: "account"; + path: "virtualPool"; + } + ]; + }; + }, + { + name: "payer"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "partnerWithdrawSurplus"; + discriminator: [168, 173, 72, 100, 201, 98, 38, 92]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "virtualPool"; + writable: true; + }, + { + name: "tokenQuoteAccount"; + docs: ["The receiver token account"]; + writable: true; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of quote token"]; + relations: ["config"]; + }, + { + name: "feeClaimer"; + signer: true; + relations: ["config"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "protocolWithdrawSurplus"; + discriminator: [54, 136, 225, 138, 172, 182, 214, 167]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "virtualPool"; + writable: true; + }, + { + name: "tokenQuoteAccount"; + docs: ["The treasury quote token account"]; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 48, + 9, + 89, + 123, + 106, + 114, + 131, + 251, + 50, + 173, + 254, + 250, + 10, + 80, + 160, + 84, + 143, + 100, + 81, + 249, + 134, + 112, + 30, + 213, + 50, + 166, + 239, + 78, + 53, + 175, + 188, + 85 + ]; + }, + { + kind: "account"; + path: "tokenQuoteProgram"; + }, + { + kind: "account"; + path: "quoteMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "quoteVault"; + docs: ["The vault token account for quote token"]; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of token"]; + relations: ["config"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "swap"; + docs: ["TRADING BOTS FUNCTIONS ////"]; + discriminator: [248, 198, 158, 145, 225, 117, 135, 200]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + docs: ["config key"]; + relations: ["pool"]; + }, + { + name: "pool"; + docs: ["Pool account"]; + writable: true; + }, + { + name: "inputTokenAccount"; + docs: ["The user token account for input token"]; + writable: true; + }, + { + name: "outputTokenAccount"; + docs: ["The user token account for output token"]; + writable: true; + }, + { + name: "baseVault"; + docs: ["The vault token account for base token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "quoteVault"; + docs: ["The vault token account for quote token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "baseMint"; + docs: ["The mint of base token"]; + }, + { + name: "quoteMint"; + docs: ["The mint of quote token"]; + }, + { + name: "payer"; + docs: ["The user performing the swap"]; + signer: true; + }, + { + name: "tokenBaseProgram"; + docs: ["Token base program"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token quote program"]; + }, + { + name: "referralTokenAccount"; + docs: ["referral token account"]; + writable: true; + optional: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "swapParameters"; + }; + }; + } + ]; + }, + { + name: "swap2"; + discriminator: [65, 75, 63, 76, 235, 91, 91, 136]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + docs: ["config key"]; + relations: ["pool"]; + }, + { + name: "pool"; + docs: ["Pool account"]; + writable: true; + }, + { + name: "inputTokenAccount"; + docs: ["The user token account for input token"]; + writable: true; + }, + { + name: "outputTokenAccount"; + docs: ["The user token account for output token"]; + writable: true; + }, + { + name: "baseVault"; + docs: ["The vault token account for base token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "quoteVault"; + docs: ["The vault token account for quote token"]; + writable: true; + relations: ["pool"]; + }, + { + name: "baseMint"; + docs: ["The mint of base token"]; + }, + { + name: "quoteMint"; + docs: ["The mint of quote token"]; + }, + { + name: "payer"; + docs: ["The user performing the swap"]; + signer: true; + }, + { + name: "tokenBaseProgram"; + docs: ["Token base program"]; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token quote program"]; + }, + { + name: "referralTokenAccount"; + docs: ["referral token account"]; + writable: true; + optional: true; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "params"; + type: { + defined: { + name: "swapParameters2"; + }; + }; + } + ]; + }, + { + name: "transferPoolCreator"; + discriminator: [20, 7, 169, 33, 58, 147, 166, 33]; + accounts: [ + { + name: "virtualPool"; + writable: true; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "creator"; + signer: true; + relations: ["virtualPool"]; + }, + { + name: "newCreator"; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "withdrawLeftover"; + discriminator: [20, 198, 202, 237, 235, 243, 183, 66]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "virtualPool"; + writable: true; + }, + { + name: "tokenBaseAccount"; + docs: ["The receiver token account, withdraw to ATA"]; + writable: true; + pda: { + seeds: [ + { + kind: "account"; + path: "leftoverReceiver"; + }, + { + kind: "account"; + path: "tokenBaseProgram"; + }, + { + kind: "account"; + path: "baseMint"; + } + ]; + program: { + kind: "const"; + value: [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ]; + }; + }; + }, + { + name: "baseVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "baseMint"; + docs: ["The mint of quote token"]; + relations: ["virtualPool"]; + }, + { + name: "leftoverReceiver"; + relations: ["config"]; + }, + { + name: "tokenBaseProgram"; + docs: ["Token base program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: []; + }, + { + name: "withdrawMigrationFee"; + docs: ["BOTH partner and creator FUNCTIONS ///"]; + discriminator: [237, 142, 45, 23, 129, 6, 222, 162]; + accounts: [ + { + name: "poolAuthority"; + address: "FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"; + }, + { + name: "config"; + relations: ["virtualPool"]; + }, + { + name: "virtualPool"; + writable: true; + }, + { + name: "tokenQuoteAccount"; + docs: ["The receiver token account"]; + writable: true; + }, + { + name: "quoteVault"; + docs: ["The vault token account for output token"]; + writable: true; + relations: ["virtualPool"]; + }, + { + name: "quoteMint"; + docs: ["The mint of quote token"]; + relations: ["config"]; + }, + { + name: "sender"; + signer: true; + }, + { + name: "tokenQuoteProgram"; + docs: ["Token b program"]; + }, + { + name: "eventAuthority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "program"; + } + ]; + args: [ + { + name: "flag"; + type: "u8"; + } + ]; + } + ]; + accounts: [ + { + name: "claimFeeOperator"; + discriminator: [166, 48, 134, 86, 34, 200, 188, 150]; + }, + { + name: "config"; + discriminator: [155, 12, 170, 224, 30, 250, 204, 130]; + }, + { + name: "lockEscrow"; + discriminator: [190, 106, 121, 6, 200, 182, 21, 75]; + }, + { + name: "meteoraDammMigrationMetadata"; + discriminator: [17, 155, 141, 215, 207, 4, 133, 156]; + }, + { + name: "meteoraDammV2Metadata"; + discriminator: [104, 221, 219, 203, 10, 142, 250, 163]; + }, + { + name: "partnerMetadata"; + discriminator: [68, 68, 130, 19, 16, 209, 98, 156]; + }, + { + name: "poolConfig"; + discriminator: [26, 108, 14, 123, 116, 230, 129, 43]; + }, + { + name: "virtualPool"; + discriminator: [213, 224, 5, 209, 98, 69, 119, 92]; + }, + { + name: "virtualPoolMetadata"; + discriminator: [217, 37, 82, 250, 43, 47, 228, 254]; + } + ]; + events: [ + { + name: "evtClaimCreatorTradingFee"; + discriminator: [154, 228, 215, 202, 133, 155, 214, 138]; + }, + { + name: "evtClaimProtocolFee"; + discriminator: [186, 244, 75, 251, 188, 13, 25, 33]; + }, + { + name: "evtClaimTradingFee"; + discriminator: [26, 83, 117, 240, 92, 202, 112, 254]; + }, + { + name: "evtCloseClaimFeeOperator"; + discriminator: [111, 39, 37, 55, 110, 216, 194, 23]; + }, + { + name: "evtCreateClaimFeeOperator"; + discriminator: [21, 6, 153, 120, 68, 116, 28, 177]; + }, + { + name: "evtCreateConfig"; + discriminator: [131, 207, 180, 174, 180, 73, 165, 54]; + }, + { + name: "evtCreateConfigV2"; + discriminator: [163, 74, 66, 187, 119, 195, 26, 144]; + }, + { + name: "evtCreateDammV2MigrationMetadata"; + discriminator: [103, 111, 132, 168, 140, 253, 150, 114]; + }, + { + name: "evtCreateMeteoraMigrationMetadata"; + discriminator: [99, 167, 133, 63, 214, 143, 175, 139]; + }, + { + name: "evtCreatorWithdrawSurplus"; + discriminator: [152, 73, 21, 15, 66, 87, 53, 157]; + }, + { + name: "evtCurveComplete"; + discriminator: [229, 231, 86, 84, 156, 134, 75, 24]; + }, + { + name: "evtInitializePool"; + discriminator: [228, 50, 246, 85, 203, 66, 134, 37]; + }, + { + name: "evtPartnerMetadata"; + discriminator: [200, 127, 6, 55, 13, 32, 8, 150]; + }, + { + name: "evtPartnerWithdrawMigrationFee"; + discriminator: [181, 105, 127, 67, 8, 187, 120, 57]; + }, + { + name: "evtPartnerWithdrawSurplus"; + discriminator: [195, 56, 152, 9, 232, 72, 35, 22]; + }, + { + name: "evtProtocolWithdrawSurplus"; + discriminator: [109, 111, 28, 221, 134, 195, 230, 203]; + }, + { + name: "evtSwap"; + discriminator: [27, 60, 21, 213, 138, 170, 187, 147]; + }, + { + name: "evtSwap2"; + discriminator: [189, 66, 51, 168, 38, 80, 117, 153]; + }, + { + name: "evtUpdatePoolCreator"; + discriminator: [107, 225, 165, 237, 91, 158, 213, 220]; + }, + { + name: "evtVirtualPoolMetadata"; + discriminator: [188, 18, 72, 76, 195, 91, 38, 74]; + }, + { + name: "evtWithdrawLeftover"; + discriminator: [191, 189, 104, 143, 111, 156, 94, 229]; + }, + { + name: "evtWithdrawMigrationFee"; + discriminator: [26, 203, 84, 85, 161, 23, 100, 214]; + } + ]; + errors: [ + { + code: 6000; + name: "mathOverflow"; + msg: "Math operation overflow"; + }, + { + code: 6001; + name: "invalidFee"; + msg: "Invalid fee setup"; + }, + { + code: 6002; + name: "exceededSlippage"; + msg: "Exceeded slippage tolerance"; + }, + { + code: 6003; + name: "exceedMaxFeeBps"; + msg: "Exceeded max fee bps"; + }, + { + code: 6004; + name: "invalidAdmin"; + msg: "Invalid admin"; + }, + { + code: 6005; + name: "amountIsZero"; + msg: "Amount is zero"; + }, + { + code: 6006; + name: "typeCastFailed"; + msg: "Type cast error"; + }, + { + code: 6007; + name: "invalidActivationType"; + msg: "Invalid activation type"; + }, + { + code: 6008; + name: "invalidQuoteMint"; + msg: "Invalid quote mint"; + }, + { + code: 6009; + name: "invalidCollectFeeMode"; + msg: "Invalid collect fee mode"; + }, + { + code: 6010; + name: "invalidMigrationFeeOption"; + msg: "Invalid migration fee option"; + }, + { + code: 6011; + name: "invalidInput"; + msg: "Invalid input"; + }, + { + code: 6012; + name: "notEnoughLiquidity"; + msg: "Not enough liquidity"; + }, + { + code: 6013; + name: "poolIsCompleted"; + msg: "Pool is completed"; + }, + { + code: 6014; + name: "poolIsIncompleted"; + msg: "Pool is incompleted"; + }, + { + code: 6015; + name: "invalidMigrationOption"; + msg: "Invalid migration option"; + }, + { + code: 6016; + name: "invalidTokenDecimals"; + msg: "Invalid activation type"; + }, + { + code: 6017; + name: "invalidTokenType"; + msg: "Invalid token type"; + }, + { + code: 6018; + name: "invalidFeePercentage"; + msg: "Invalid fee percentage"; + }, + { + code: 6019; + name: "invalidQuoteThreshold"; + msg: "Invalid quote threshold"; + }, + { + code: 6020; + name: "invalidTokenSupply"; + msg: "Invalid token supply"; + }, + { + code: 6021; + name: "invalidCurve"; + msg: "Invalid curve"; + }, + { + code: 6022; + name: "notPermitToDoThisAction"; + msg: "Not permit to do this action"; + }, + { + code: 6023; + name: "invalidOwnerAccount"; + msg: "Invalid owner account"; + }, + { + code: 6024; + name: "invalidConfigAccount"; + msg: "Invalid config account"; + }, + { + code: 6025; + name: "surplusHasBeenWithdraw"; + msg: "Surplus has been withdraw"; + }, + { + code: 6026; + name: "leftoverHasBeenWithdraw"; + msg: "Leftover has been withdraw"; + }, + { + code: 6027; + name: "totalBaseTokenExceedMaxSupply"; + msg: "Total base token is exceeded max supply"; + }, + { + code: 6028; + name: "unsupportNativeMintToken2022"; + msg: "Unsupport native mint token 2022"; + }, + { + code: 6029; + name: "insufficientLiquidityForMigration"; + msg: "Insufficient liquidity for migration"; + }, + { + code: 6030; + name: "missingPoolConfigInRemainingAccount"; + msg: "Missing pool config in remaining account"; + }, + { + code: 6031; + name: "invalidVestingParameters"; + msg: "Invalid vesting parameters"; + }, + { + code: 6032; + name: "invalidLeftoverAddress"; + msg: "Invalid leftover address"; + }, + { + code: 6033; + name: "swapAmountIsOverAThreshold"; + msg: "Swap amount is over a threshold"; + }, + { + code: 6034; + name: "invalidFeeScheduler"; + msg: "Invalid fee scheduler"; + }, + { + code: 6035; + name: "invalidCreatorTradingFeePercentage"; + msg: "Invalid creator trading fee percentage"; + }, + { + code: 6036; + name: "invalidNewCreator"; + msg: "Invalid new creator"; + }, + { + code: 6037; + name: "invalidTokenAuthorityOption"; + msg: "Invalid token authority option"; + }, + { + code: 6038; + name: "invalidAccount"; + msg: "Invalid account for the instruction"; + }, + { + code: 6039; + name: "invalidMigratorFeePercentage"; + msg: "Invalid migrator fee percentage"; + }, + { + code: 6040; + name: "migrationFeeHasBeenWithdraw"; + msg: "Migration fee has been withdraw"; + }, + { + code: 6041; + name: "invalidBaseFeeMode"; + msg: "Invalid base fee mode"; + }, + { + code: 6042; + name: "invalidFeeRateLimiter"; + msg: "Invalid fee rate limiter"; + }, + { + code: 6043; + name: "failToValidateSingleSwapInstruction"; + msg: "Fail to validate single swap instruction in rate limiter"; + }, + { + code: 6044; + name: "invalidMigratedPoolFee"; + msg: "Invalid migrated pool fee params"; + }, + { + code: 6045; + name: "undeterminedError"; + msg: "Undertermined error"; + }, + { + code: 6046; + name: "rateLimiterNotSupported"; + msg: "Rate limiter not supported"; + }, + { + code: 6047; + name: "amountLeftIsNotZero"; + msg: "Amount left is not zero"; + }, + { + code: 6048; + name: "nextSqrtPriceIsSmallerThanStartSqrtPrice"; + msg: "Next sqrt price is smaller than start sqrt price"; + } + ]; + types: [ + { + name: "baseFeeConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "cliffFeeNumerator"; + type: "u64"; + }, + { + name: "secondFactor"; + type: "u64"; + }, + { + name: "thirdFactor"; + type: "u64"; + }, + { + name: "firstFactor"; + type: "u16"; + }, + { + name: "baseFeeMode"; + type: "u8"; + }, + { + name: "padding0"; + type: { + array: ["u8", 5]; + }; + } + ]; + }; + }, + { + name: "baseFeeParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "cliffFeeNumerator"; + type: "u64"; + }, + { + name: "firstFactor"; + type: "u16"; + }, + { + name: "secondFactor"; + type: "u64"; + }, + { + name: "thirdFactor"; + type: "u64"; + }, + { + name: "baseFeeMode"; + type: "u8"; + } + ]; + }; + }, + { + name: "claimFeeOperator"; + docs: ["Parameter that set by the protocol"]; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "operator"; + docs: ["operator"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["Reserve"]; + type: { + array: ["u8", 128]; + }; + } + ]; + }; + }, + { + name: "config"; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + type: { + defined: { + name: "poolFees"; + }; + }; + }, + { + name: "activationDuration"; + type: "u64"; + }, + { + name: "vaultConfigKey"; + type: "pubkey"; + }, + { + name: "poolCreatorAuthority"; + type: "pubkey"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "partnerFeeNumerator"; + type: "u64"; + }, + { + name: "padding"; + type: { + array: ["u8", 219]; + }; + } + ]; + }; + }, + { + name: "configParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "poolFees"; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "collectFeeMode"; + type: "u8"; + }, + { + name: "migrationOption"; + type: "u8"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "tokenType"; + type: "u8"; + }, + { + name: "tokenDecimal"; + type: "u8"; + }, + { + name: "partnerLpPercentage"; + type: "u8"; + }, + { + name: "partnerLockedLpPercentage"; + type: "u8"; + }, + { + name: "creatorLpPercentage"; + type: "u8"; + }, + { + name: "creatorLockedLpPercentage"; + type: "u8"; + }, + { + name: "migrationQuoteThreshold"; + type: "u64"; + }, + { + name: "sqrtStartPrice"; + type: "u128"; + }, + { + name: "lockedVesting"; + type: { + defined: { + name: "lockedVestingParams"; + }; + }; + }, + { + name: "migrationFeeOption"; + type: "u8"; + }, + { + name: "tokenSupply"; + type: { + option: { + defined: { + name: "tokenSupplyParams"; + }; + }; + }; + }, + { + name: "creatorTradingFeePercentage"; + type: "u8"; + }, + { + name: "tokenUpdateAuthority"; + type: "u8"; + }, + { + name: "migrationFee"; + type: { + defined: { + name: "migrationFee"; + }; + }; + }, + { + name: "migratedPoolFee"; + type: { + defined: { + name: "migratedPoolFee"; + }; + }; + }, + { + name: "padding"; + docs: ["padding for future use"]; + type: { + array: ["u64", 7]; + }; + }, + { + name: "curve"; + type: { + vec: { + defined: { + name: "liquidityDistributionParameters"; + }; + }; + }; + } + ]; + }; + }, + { + name: "createPartnerMetadataParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "padding"; + type: { + array: ["u8", 96]; + }; + }, + { + name: "name"; + type: "string"; + }, + { + name: "website"; + type: "string"; + }, + { + name: "logo"; + type: "string"; + } + ]; + }; + }, + { + name: "createVirtualPoolMetadataParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "padding"; + type: { + array: ["u8", 96]; + }; + }, + { + name: "name"; + type: "string"; + }, + { + name: "website"; + type: "string"; + }, + { + name: "logo"; + type: "string"; + } + ]; + }; + }, + { + name: "dynamicFeeConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + type: "u8"; + }, + { + name: "padding"; + type: { + array: ["u8", 7]; + }; + }, + { + name: "maxVolatilityAccumulator"; + type: "u32"; + }, + { + name: "variableFeeControl"; + type: "u32"; + }, + { + name: "binStep"; + type: "u16"; + }, + { + name: "filterPeriod"; + type: "u16"; + }, + { + name: "decayPeriod"; + type: "u16"; + }, + { + name: "reductionFactor"; + type: "u16"; + }, + { + name: "padding2"; + type: { + array: ["u8", 8]; + }; + }, + { + name: "binStepU128"; + type: "u128"; + } + ]; + }; + }, + { + name: "dynamicFeeParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "binStep"; + type: "u16"; + }, + { + name: "binStepU128"; + type: "u128"; + }, + { + name: "filterPeriod"; + type: "u16"; + }, + { + name: "decayPeriod"; + type: "u16"; + }, + { + name: "reductionFactor"; + type: "u16"; + }, + { + name: "maxVolatilityAccumulator"; + type: "u32"; + }, + { + name: "variableFeeControl"; + type: "u32"; + } + ]; + }; + }, + { + name: "evtClaimCreatorTradingFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenBaseAmount"; + type: "u64"; + }, + { + name: "tokenQuoteAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimProtocolFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenBaseAmount"; + type: "u64"; + }, + { + name: "tokenQuoteAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtClaimTradingFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "tokenBaseAmount"; + type: "u64"; + }, + { + name: "tokenQuoteAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtCloseClaimFeeOperator"; + docs: ["Close claim fee operator"]; + type: { + kind: "struct"; + fields: [ + { + name: "claimFeeOperator"; + type: "pubkey"; + }, + { + name: "operator"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateClaimFeeOperator"; + docs: ["Create claim fee operator"]; + type: { + kind: "struct"; + fields: [ + { + name: "operator"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateConfig"; + docs: ["Create config"]; + type: { + kind: "struct"; + fields: [ + { + name: "config"; + type: "pubkey"; + }, + { + name: "quoteMint"; + type: "pubkey"; + }, + { + name: "feeClaimer"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "poolFees"; + type: { + defined: { + name: "poolFeeParameters"; + }; + }; + }, + { + name: "collectFeeMode"; + type: "u8"; + }, + { + name: "migrationOption"; + type: "u8"; + }, + { + name: "activationType"; + type: "u8"; + }, + { + name: "tokenDecimal"; + type: "u8"; + }, + { + name: "tokenType"; + type: "u8"; + }, + { + name: "partnerLockedLpPercentage"; + type: "u8"; + }, + { + name: "partnerLpPercentage"; + type: "u8"; + }, + { + name: "creatorLockedLpPercentage"; + type: "u8"; + }, + { + name: "creatorLpPercentage"; + type: "u8"; + }, + { + name: "swapBaseAmount"; + type: "u64"; + }, + { + name: "migrationQuoteThreshold"; + type: "u64"; + }, + { + name: "migrationBaseAmount"; + type: "u64"; + }, + { + name: "sqrtStartPrice"; + type: "u128"; + }, + { + name: "lockedVesting"; + type: { + defined: { + name: "lockedVestingParams"; + }; + }; + }, + { + name: "migrationFeeOption"; + type: "u8"; + }, + { + name: "fixedTokenSupplyFlag"; + type: "u8"; + }, + { + name: "preMigrationTokenSupply"; + type: "u64"; + }, + { + name: "postMigrationTokenSupply"; + type: "u64"; + }, + { + name: "curve"; + type: { + vec: { + defined: { + name: "liquidityDistributionParameters"; + }; + }; + }; + } + ]; + }; + }, + { + name: "evtCreateConfigV2"; + type: { + kind: "struct"; + fields: [ + { + name: "config"; + type: "pubkey"; + }, + { + name: "quoteMint"; + type: "pubkey"; + }, + { + name: "feeClaimer"; + type: "pubkey"; + }, + { + name: "leftoverReceiver"; + type: "pubkey"; + }, + { + name: "configParameters"; + type: { + defined: { + name: "configParameters"; + }; + }; + } + ]; + }; + }, + { + name: "evtCreateDammV2MigrationMetadata"; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPool"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreateMeteoraMigrationMetadata"; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPool"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtCreatorWithdrawSurplus"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "surplusAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtCurveComplete"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "config"; + type: "pubkey"; + }, + { + name: "baseReserve"; + type: "u64"; + }, + { + name: "quoteReserve"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtInitializePool"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "config"; + type: "pubkey"; + }, + { + name: "creator"; + type: "pubkey"; + }, + { + name: "baseMint"; + type: "pubkey"; + }, + { + name: "poolType"; + type: "u8"; + }, + { + name: "activationPoint"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtPartnerMetadata"; + docs: ["Create partner metadata"]; + type: { + kind: "struct"; + fields: [ + { + name: "partnerMetadata"; + type: "pubkey"; + }, + { + name: "feeClaimer"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtPartnerWithdrawMigrationFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "fee"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtPartnerWithdrawSurplus"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "surplusAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtProtocolWithdrawSurplus"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "surplusAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtSwap"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "config"; + type: "pubkey"; + }, + { + name: "tradeDirection"; + type: "u8"; + }, + { + name: "hasReferral"; + type: "bool"; + }, + { + name: "params"; + type: { + defined: { + name: "swapParameters"; + }; + }; + }, + { + name: "swapResult"; + type: { + defined: { + name: "swapResult"; + }; + }; + }, + { + name: "amountIn"; + type: "u64"; + }, + { + name: "currentTimestamp"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtSwap2"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "config"; + type: "pubkey"; + }, + { + name: "tradeDirection"; + type: "u8"; + }, + { + name: "hasReferral"; + type: "bool"; + }, + { + name: "swapParameters"; + type: { + defined: { + name: "swapParameters2"; + }; + }; + }, + { + name: "swapResult"; + type: { + defined: { + name: "swapResult2"; + }; + }; + }, + { + name: "quoteReserveAmount"; + type: "u64"; + }, + { + name: "migrationThreshold"; + type: "u64"; + }, + { + name: "currentTimestamp"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtUpdatePoolCreator"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "creator"; + type: "pubkey"; + }, + { + name: "newCreator"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtVirtualPoolMetadata"; + docs: ["Create virtual pool metadata"]; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPoolMetadata"; + type: "pubkey"; + }, + { + name: "virtualPool"; + type: "pubkey"; + } + ]; + }; + }, + { + name: "evtWithdrawLeftover"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "leftoverReceiver"; + type: "pubkey"; + }, + { + name: "leftoverAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "evtWithdrawMigrationFee"; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "fee"; + type: "u64"; + }, + { + name: "flag"; + type: "u8"; + } + ]; + }; + }, + { + name: "initializePoolParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "name"; + type: "string"; + }, + { + name: "symbol"; + type: "string"; + }, + { + name: "uri"; + type: "string"; + } + ]; + }; + }, + { + name: "liquidityDistributionConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "sqrtPrice"; + type: "u128"; + }, + { + name: "liquidity"; + type: "u128"; + } + ]; + }; + }, + { + name: "liquidityDistributionParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "sqrtPrice"; + type: "u128"; + }, + { + name: "liquidity"; + type: "u128"; + } + ]; + }; + }, + { + name: "lockEscrow"; + docs: ["State of lock escrow account"]; + type: { + kind: "struct"; + fields: [ + { + name: "pool"; + type: "pubkey"; + }, + { + name: "owner"; + type: "pubkey"; + }, + { + name: "escrowVault"; + type: "pubkey"; + }, + { + name: "bump"; + type: "u8"; + }, + { + name: "totalLockedAmount"; + type: "u64"; + }, + { + name: "lpPerToken"; + type: "u128"; + }, + { + name: "unclaimedFeePending"; + type: "u64"; + }, + { + name: "aFee"; + type: "u64"; + }, + { + name: "bFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "lockedVestingConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "amountPerPeriod"; + type: "u64"; + }, + { + name: "cliffDurationFromMigrationTime"; + type: "u64"; + }, + { + name: "frequency"; + type: "u64"; + }, + { + name: "numberOfPeriod"; + type: "u64"; + }, + { + name: "cliffUnlockAmount"; + type: "u64"; + }, + { + name: "padding"; + type: "u64"; + } + ]; + }; + }, + { + name: "lockedVestingParams"; + type: { + kind: "struct"; + fields: [ + { + name: "amountPerPeriod"; + type: "u64"; + }, + { + name: "cliffDurationFromMigrationTime"; + type: "u64"; + }, + { + name: "frequency"; + type: "u64"; + }, + { + name: "numberOfPeriod"; + type: "u64"; + }, + { + name: "cliffUnlockAmount"; + type: "u64"; + } + ]; + }; + }, + { + name: "meteoraDammMigrationMetadata"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPool"; + docs: ["pool"]; + type: "pubkey"; + }, + { + name: "padding0"; + docs: [ + "!!! BE CAREFUL to use tomestone field, previous is pool creator" + ]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "partner"; + docs: ["partner"]; + type: "pubkey"; + }, + { + name: "lpMint"; + docs: ["lp mint"]; + type: "pubkey"; + }, + { + name: "partnerLockedLp"; + docs: ["partner locked lp"]; + type: "u64"; + }, + { + name: "partnerLp"; + docs: ["partner lp"]; + type: "u64"; + }, + { + name: "creatorLockedLp"; + docs: ["creator locked lp"]; + type: "u64"; + }, + { + name: "creatorLp"; + docs: ["creator lp"]; + type: "u64"; + }, + { + name: "padding0"; + docs: ["padding"]; + type: "u8"; + }, + { + name: "creatorLockedStatus"; + docs: ["flag to check whether lp is locked for creator"]; + type: "u8"; + }, + { + name: "partnerLockedStatus"; + docs: ["flag to check whether lp is locked for partner"]; + type: "u8"; + }, + { + name: "creatorClaimStatus"; + docs: ["flag to check whether creator has claimed lp token"]; + type: "u8"; + }, + { + name: "partnerClaimStatus"; + docs: ["flag to check whether partner has claimed lp token"]; + type: "u8"; + }, + { + name: "padding"; + docs: ["Reserve"]; + type: { + array: ["u8", 107]; + }; + } + ]; + }; + }, + { + name: "meteoraDammV2Metadata"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPool"; + docs: ["pool"]; + type: "pubkey"; + }, + { + name: "padding0"; + docs: [ + "!!! BE CAREFUL to use tomestone field, previous is pool creator" + ]; + type: { + array: ["u8", 32]; + }; + }, + { + name: "partner"; + docs: ["partner"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["Reserve"]; + type: { + array: ["u8", 126]; + }; + } + ]; + }; + }, + { + name: "migratedPoolFee"; + type: { + kind: "struct"; + fields: [ + { + name: "collectFeeMode"; + type: "u8"; + }, + { + name: "dynamicFee"; + type: "u8"; + }, + { + name: "poolFeeBps"; + type: "u16"; + } + ]; + }; + }, + { + name: "migrationFee"; + type: { + kind: "struct"; + fields: [ + { + name: "feePercentage"; + type: "u8"; + }, + { + name: "creatorFeePercentage"; + type: "u8"; + } + ]; + }; + }, + { + name: "partnerMetadata"; + docs: ["Metadata for a partner."]; + type: { + kind: "struct"; + fields: [ + { + name: "feeClaimer"; + docs: ["fee claimer"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["padding for future use"]; + type: { + array: ["u128", 6]; + }; + }, + { + name: "name"; + docs: ["Name of partner."]; + type: "string"; + }, + { + name: "website"; + docs: ["Website of partner."]; + type: "string"; + }, + { + name: "logo"; + docs: ["Logo of partner"]; + type: "string"; + } + ]; + }; + }, + { + name: "poolConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "quoteMint"; + docs: ["quote mint"]; + type: "pubkey"; + }, + { + name: "feeClaimer"; + docs: ["Address to get the fee"]; + type: "pubkey"; + }, + { + name: "leftoverReceiver"; + docs: [ + "Address to receive extra base token after migration, in case token is fixed supply" + ]; + type: "pubkey"; + }, + { + name: "poolFees"; + docs: ["Pool fee"]; + type: { + defined: { + name: "poolFeesConfig"; + }; + }; + }, + { + name: "collectFeeMode"; + docs: ["Collect fee mode"]; + type: "u8"; + }, + { + name: "migrationOption"; + docs: ["migration option"]; + type: "u8"; + }, + { + name: "activationType"; + docs: ["whether mode slot or timestamp"]; + type: "u8"; + }, + { + name: "tokenDecimal"; + docs: ["token decimals"]; + type: "u8"; + }, + { + name: "version"; + docs: ["version"]; + type: "u8"; + }, + { + name: "tokenType"; + docs: ["token type of base token"]; + type: "u8"; + }, + { + name: "quoteTokenFlag"; + docs: ["quote token flag"]; + type: "u8"; + }, + { + name: "partnerLockedLpPercentage"; + docs: ["partner locked lp percentage"]; + type: "u8"; + }, + { + name: "partnerLpPercentage"; + docs: ["partner lp percentage"]; + type: "u8"; + }, + { + name: "creatorLockedLpPercentage"; + docs: ["creator post migration fee percentage"]; + type: "u8"; + }, + { + name: "creatorLpPercentage"; + docs: ["creator lp percentage"]; + type: "u8"; + }, + { + name: "migrationFeeOption"; + docs: ["migration fee option"]; + type: "u8"; + }, + { + name: "fixedTokenSupplyFlag"; + docs: [ + "flag to indicate whether token is dynamic supply (0) or fixed supply (1)" + ]; + type: "u8"; + }, + { + name: "creatorTradingFeePercentage"; + docs: ["creator trading fee percentage"]; + type: "u8"; + }, + { + name: "tokenUpdateAuthority"; + docs: ["token update authority"]; + type: "u8"; + }, + { + name: "migrationFeePercentage"; + docs: ["migration fee percentage"]; + type: "u8"; + }, + { + name: "creatorMigrationFeePercentage"; + docs: ["creator migration fee percentage"]; + type: "u8"; + }, + { + name: "padding0"; + docs: ["padding 0"]; + type: { + array: ["u8", 7]; + }; + }, + { + name: "swapBaseAmount"; + docs: ["swap base amount"]; + type: "u64"; + }, + { + name: "migrationQuoteThreshold"; + docs: ["migration quote threshold (in quote token)"]; + type: "u64"; + }, + { + name: "migrationBaseThreshold"; + docs: ["migration base threshold (in base token)"]; + type: "u64"; + }, + { + name: "migrationSqrtPrice"; + docs: ["migration sqrt price"]; + type: "u128"; + }, + { + name: "lockedVestingConfig"; + docs: ["locked vesting config"]; + type: { + defined: { + name: "lockedVestingConfig"; + }; + }; + }, + { + name: "preMigrationTokenSupply"; + docs: ["pre migration token supply"]; + type: "u64"; + }, + { + name: "postMigrationTokenSupply"; + docs: ["post migration token supply"]; + type: "u64"; + }, + { + name: "migratedCollectFeeMode"; + docs: ["migrated pool collect fee mode"]; + type: "u8"; + }, + { + name: "migratedDynamicFee"; + docs: ["migrated dynamic fee option."]; + type: "u8"; + }, + { + name: "migratedPoolFeeBps"; + docs: ["migrated pool fee in bps"]; + type: "u16"; + }, + { + name: "padding1"; + docs: ["padding 1"]; + type: { + array: ["u8", 12]; + }; + }, + { + name: "padding2"; + docs: ["padding 2"]; + type: "u128"; + }, + { + name: "sqrtStartPrice"; + docs: ["minimum price"]; + type: "u128"; + }, + { + name: "curve"; + docs: [ + "curve, only use 20 point firstly, we can extend that latter" + ]; + type: { + array: [ + { + defined: { + name: "liquidityDistributionConfig"; + }; + }, + 20 + ]; + }; + } + ]; + }; + }, + { + name: "poolFeeParameters"; + docs: ["Information regarding fee charges"]; + type: { + kind: "struct"; + fields: [ + { + name: "baseFee"; + docs: ["Base fee"]; + type: { + defined: { + name: "baseFeeParameters"; + }; + }; + }, + { + name: "dynamicFee"; + docs: ["dynamic fee"]; + type: { + option: { + defined: { + name: "dynamicFeeParameters"; + }; + }; + }; + } + ]; + }; + }, + { + name: "poolFees"; + docs: ["Information regarding fee charges"]; + type: { + kind: "struct"; + fields: [ + { + name: "tradeFeeNumerator"; + type: "u64"; + }, + { + name: "tradeFeeDenominator"; + type: "u64"; + }, + { + name: "protocolTradeFeeNumerator"; + type: "u64"; + }, + { + name: "protocolTradeFeeDenominator"; + type: "u64"; + } + ]; + }; + }, + { + name: "poolFeesConfig"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "baseFee"; + type: { + defined: { + name: "baseFeeConfig"; + }; + }; + }, + { + name: "dynamicFee"; + type: { + defined: { + name: "dynamicFeeConfig"; + }; + }; + }, + { + name: "padding0"; + type: { + array: ["u64", 5]; + }; + }, + { + name: "padding1"; + type: { + array: ["u8", 6]; + }; + }, + { + name: "protocolFeePercent"; + type: "u8"; + }, + { + name: "referralFeePercent"; + type: "u8"; + } + ]; + }; + }, + { + name: "poolMetrics"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "totalProtocolBaseFee"; + type: "u64"; + }, + { + name: "totalProtocolQuoteFee"; + type: "u64"; + }, + { + name: "totalTradingBaseFee"; + type: "u64"; + }, + { + name: "totalTradingQuoteFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "swapParameters"; + type: { + kind: "struct"; + fields: [ + { + name: "amountIn"; + type: "u64"; + }, + { + name: "minimumAmountOut"; + type: "u64"; + } + ]; + }; + }, + { + name: "swapParameters2"; + type: { + kind: "struct"; + fields: [ + { + name: "amount0"; + docs: [ + "When it's exact in, partial fill, this will be amount_in. When it's exact out, this will be amount_out" + ]; + type: "u64"; + }, + { + name: "amount1"; + docs: [ + "When it's exact in, partial fill, this will be minimum_amount_out. When it's exact out, this will be maximum_amount_in" + ]; + type: "u64"; + }, + { + name: "swapMode"; + docs: ["Swap mode, refer [SwapMode]"]; + type: "u8"; + } + ]; + }; + }, + { + name: "swapResult"; + docs: ["Encodes all results of swapping"]; + type: { + kind: "struct"; + fields: [ + { + name: "actualInputAmount"; + type: "u64"; + }, + { + name: "outputAmount"; + type: "u64"; + }, + { + name: "nextSqrtPrice"; + type: "u128"; + }, + { + name: "tradingFee"; + type: "u64"; + }, + { + name: "protocolFee"; + type: "u64"; + }, + { + name: "referralFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "swapResult2"; + type: { + kind: "struct"; + fields: [ + { + name: "includedFeeInputAmount"; + type: "u64"; + }, + { + name: "excludedFeeInputAmount"; + type: "u64"; + }, + { + name: "amountLeft"; + type: "u64"; + }, + { + name: "outputAmount"; + type: "u64"; + }, + { + name: "nextSqrtPrice"; + type: "u128"; + }, + { + name: "tradingFee"; + type: "u64"; + }, + { + name: "protocolFee"; + type: "u64"; + }, + { + name: "referralFee"; + type: "u64"; + } + ]; + }; + }, + { + name: "tokenSupplyParams"; + type: { + kind: "struct"; + fields: [ + { + name: "preMigrationTokenSupply"; + docs: ["pre migration token supply"]; + type: "u64"; + }, + { + name: "postMigrationTokenSupply"; + docs: [ + "post migration token supply", + "becase DBC allow user to swap over the migration quote threshold, so in extreme case user may swap more than allowed buffer on curve", + "that result the total supply in post migration may be increased a bit (between pre_migration_token_supply and post_migration_token_supply)" + ]; + type: "u64"; + } + ]; + }; + }, + { + name: "virtualPool"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "volatilityTracker"; + docs: ["volatility tracker"]; + type: { + defined: { + name: "volatilityTracker"; + }; + }; + }, + { + name: "config"; + docs: ["config key"]; + type: "pubkey"; + }, + { + name: "creator"; + docs: ["creator"]; + type: "pubkey"; + }, + { + name: "baseMint"; + docs: ["base mint"]; + type: "pubkey"; + }, + { + name: "baseVault"; + docs: ["base vault"]; + type: "pubkey"; + }, + { + name: "quoteVault"; + docs: ["quote vault"]; + type: "pubkey"; + }, + { + name: "baseReserve"; + docs: ["base reserve"]; + type: "u64"; + }, + { + name: "quoteReserve"; + docs: ["quote reserve"]; + type: "u64"; + }, + { + name: "protocolBaseFee"; + docs: ["protocol base fee"]; + type: "u64"; + }, + { + name: "protocolQuoteFee"; + docs: ["protocol quote fee"]; + type: "u64"; + }, + { + name: "partnerBaseFee"; + docs: ["partner base fee"]; + type: "u64"; + }, + { + name: "partnerQuoteFee"; + docs: ["trading quote fee"]; + type: "u64"; + }, + { + name: "sqrtPrice"; + docs: ["current price"]; + type: "u128"; + }, + { + name: "activationPoint"; + docs: ["Activation point"]; + type: "u64"; + }, + { + name: "poolType"; + docs: ["pool type, spl token or token2022"]; + type: "u8"; + }, + { + name: "isMigrated"; + docs: ["is migrated"]; + type: "u8"; + }, + { + name: "isPartnerWithdrawSurplus"; + docs: ["is partner withdraw surplus"]; + type: "u8"; + }, + { + name: "isProtocolWithdrawSurplus"; + docs: ["is protocol withdraw surplus"]; + type: "u8"; + }, + { + name: "migrationProgress"; + docs: ["migration progress"]; + type: "u8"; + }, + { + name: "isWithdrawLeftover"; + docs: ["is withdraw leftover"]; + type: "u8"; + }, + { + name: "isCreatorWithdrawSurplus"; + docs: ["is creator withdraw surplus"]; + type: "u8"; + }, + { + name: "migrationFeeWithdrawStatus"; + docs: [ + "migration fee withdraw status, first bit is for partner, second bit is for creator" + ]; + type: "u8"; + }, + { + name: "metrics"; + docs: ["pool metrics"]; + type: { + defined: { + name: "poolMetrics"; + }; + }; + }, + { + name: "finishCurveTimestamp"; + docs: ["The time curve is finished"]; + type: "u64"; + }, + { + name: "creatorBaseFee"; + docs: ["creator base fee"]; + type: "u64"; + }, + { + name: "creatorQuoteFee"; + docs: ["creator quote fee"]; + type: "u64"; + }, + { + name: "padding1"; + docs: ["Padding for further use"]; + type: { + array: ["u64", 7]; + }; + } + ]; + }; + }, + { + name: "virtualPoolMetadata"; + docs: ["Metadata for a virtual pool."]; + type: { + kind: "struct"; + fields: [ + { + name: "virtualPool"; + docs: ["virtual pool"]; + type: "pubkey"; + }, + { + name: "padding"; + docs: ["padding for future use"]; + type: { + array: ["u128", 6]; + }; + }, + { + name: "name"; + docs: ["Name of project."]; + type: "string"; + }, + { + name: "website"; + docs: ["Website of project."]; + type: "string"; + }, + { + name: "logo"; + docs: ["Logo of project"]; + type: "string"; + } + ]; + }; + }, + { + name: "volatilityTracker"; + serialization: "bytemuck"; + repr: { + kind: "c"; + }; + type: { + kind: "struct"; + fields: [ + { + name: "lastUpdateTimestamp"; + type: "u64"; + }, + { + name: "padding"; + type: { + array: ["u8", 8]; + }; + }, + { + name: "sqrtPriceReference"; + type: "u128"; + }, + { + name: "volatilityAccumulator"; + type: "u128"; + }, + { + name: "volatilityReference"; + type: "u128"; + } + ]; + }; + } + ]; +}; diff --git a/tests/common/index.ts b/tests/common/index.ts index bbff817..92891bd 100644 --- a/tests/common/index.ts +++ b/tests/common/index.ts @@ -16,10 +16,12 @@ import DynamicFeeSharingIDL from "../../target/idl/dynamic_fee_sharing.json"; import { DynamicFeeSharing } from "../../target/types/dynamic_fee_sharing"; import { createAssociatedTokenAccountInstruction, + createCloseAccountInstruction, createInitializeMint2Instruction, createMintToInstruction, getAssociatedTokenAddressSync, MINT_SIZE, + NATIVE_MINT, TOKEN_PROGRAM_ID, } from "@solana/spl-token"; import { @@ -30,11 +32,8 @@ import { PublicKey, SystemProgram, Transaction, + TransactionInstruction, } from "@solana/web3.js"; -import { - TransactionErrorFieldless, - TransactionErrorInstructionError, -} from "litesvm/dist/internal"; export type InitializeFeeVaultParameters = IdlTypes["initializeFeeVaultParameters"]; @@ -46,6 +45,9 @@ export type DynamicFeeSharingProgram = Program; export const TOKEN_DECIMALS = 9; export const RAW_AMOUNT = 1_000_000_000 * 10 ** TOKEN_DECIMALS; +export const DYNAMIC_FEE_SHARING_PROGRAM_ID = new PublicKey( + DynamicFeeSharingIDL.address +); export function createProgram(): DynamicFeeSharingProgram { const wallet = new Wallet(Keypair.generate()); @@ -134,7 +136,8 @@ export function mintToken( payer: Keypair, mint: PublicKey, mintAuthority: Keypair, - toWallet: PublicKey + toWallet: PublicKey, + amount?: number ) { const destination = getOrCreateAtA(svm, payer, mint, toWallet); @@ -142,7 +145,7 @@ export function mintToken( mint, destination, mintAuthority.publicKey, - RAW_AMOUNT + amount ?? RAW_AMOUNT ); let transaction = new Transaction(); @@ -182,6 +185,53 @@ export function getOrCreateAtA( return ataKey; } +export const wrapSOLInstruction = ( + from: PublicKey, + to: PublicKey, + amount: bigint +): TransactionInstruction[] => { + return [ + SystemProgram.transfer({ + fromPubkey: from, + toPubkey: to, + lamports: amount, + }), + new TransactionInstruction({ + keys: [ + { + pubkey: to, + isSigner: false, + isWritable: true, + }, + ], + data: Buffer.from(new Uint8Array([17])), + programId: TOKEN_PROGRAM_ID, + }), + ]; +}; + +export const unwrapSOLInstruction = ( + owner: PublicKey, + allowOwnerOffCurve = true +) => { + const wSolATAAccount = getAssociatedTokenAddressSync( + NATIVE_MINT, + owner, + allowOwnerOffCurve + ); + if (wSolATAAccount) { + const closedWrappedSolInstruction = createCloseAccountInstruction( + wSolATAAccount, + owner, + owner, + [], + TOKEN_PROGRAM_ID + ); + return closedWrappedSolInstruction; + } + return null; +}; + export function generateUsers(svm: LiteSVM, numberOfUsers: number) { const res = []; for (let i = 0; i < numberOfUsers; i++) { diff --git a/tests/common/svm.ts b/tests/common/svm.ts new file mode 100644 index 0000000..6d48139 --- /dev/null +++ b/tests/common/svm.ts @@ -0,0 +1,114 @@ +import { + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + Transaction, +} from "@solana/web3.js"; + +import { + AccountInfoBytes, + FailedTransactionMetadata, + LiteSVM, + TransactionMetadata, +} from "litesvm"; +import { DYNAMIC_FEE_SHARING_PROGRAM_ID } from "./index"; +import { expect } from "chai"; +import BN from "bn.js"; +import { DAMM_V2_PROGRAM_ID } from "./damm_v2"; +import { AccountLayout } from "@solana/spl-token"; +import { DBC_PROGRAM_ID } from "./dbc"; + +export function startSvm() { + const svm = new LiteSVM(); + svm.addProgramFromFile( + new PublicKey(DYNAMIC_FEE_SHARING_PROGRAM_ID), + "./target/deploy/dynamic_fee_sharing.so" + ); + + svm.addProgramFromFile( + new PublicKey(DAMM_V2_PROGRAM_ID), + "./tests/fixtures/damm_v2.so" + ); + + svm.addProgramFromFile( + new PublicKey(DBC_PROGRAM_ID), + "./tests/fixtures/dynamic_bonding_curve.so" + ); + + const accountInfo: AccountInfoBytes = { + data: new Uint8Array(), + executable: false, + lamports: 1200626308, + owner: SystemProgram.programId, + }; + + svm.setAccount( + new PublicKey("4EWqcx3aNZmMetCnxwLYwyNjan6XLGp3Ca2W316vrSjv"), + accountInfo + ); + + return svm; +} + +export function sendTransactionOrExpectThrowError( + svm: LiteSVM, + transaction: Transaction, + logging = false, + errorCode?: number +): void { + const result = svm.sendTransaction(transaction); + if (logging) { + if (result instanceof TransactionMetadata) { + console.log(result.logs()); + } else { + console.log(result.meta().logs()); + } + } + if (errorCode) { + expectThrowsErrorCode(result, errorCode); + } else { + expect(result).instanceOf(TransactionMetadata); + } +} + +export function generateUsers(svm: LiteSVM, numberOfUsers: number): Keypair[] { + const res = []; + for (let i = 0; i < numberOfUsers; i++) { + const user = Keypair.generate(); + svm.airdrop(user.publicKey, BigInt(LAMPORTS_PER_SOL)); + res.push(user); + } + + return res; +} + +export function expectThrowsErrorCode( + response: TransactionMetadata | FailedTransactionMetadata, + errorCode: number +) { + if (response instanceof FailedTransactionMetadata) { + const message = response.err().toString(); + + if (!message.toString().includes(errorCode.toString())) { + throw new Error( + `Unexpected error: ${message}. Expected error: ${errorCode}` + ); + } + + return; + } else { + throw new Error("Expected an error but didn't get one"); + } +} + +export function warpToTimestamp(svm: LiteSVM, timestamp: BN) { + let clock = svm.getClock(); + clock.unixTimestamp = BigInt(timestamp.toString()); + svm.setClock(clock); +} + +export function getTokenBalance(svm: LiteSVM, ataAccount: PublicKey): BN { + const account = svm.getAccount(ataAccount); + return new BN(AccountLayout.decode(account.data).amount.toString()); +} diff --git a/tests/fee_sharing.test.ts b/tests/fee_sharing.test.ts index ad529a9..1a161ad 100644 --- a/tests/fee_sharing.test.ts +++ b/tests/fee_sharing.test.ts @@ -13,7 +13,7 @@ import { getProgramErrorCodeHexString, InitializeFeeVaultParameters, mintToken, - TOKEN_DECIMALS + TOKEN_DECIMALS, } from "./common"; import { TOKEN_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; import { BN } from "bn.js"; @@ -190,7 +190,10 @@ async function fullFlow( expect(feeVaultState.owner.toString()).eq(vaultOwner.toString()); expect(feeVaultState.tokenMint.toString()).eq(tokenMint.toString()); expect(feeVaultState.tokenVault.toString()).eq(tokenVault.toString()); - const totalShare = params.users.reduce((a, b) => a.add(new BN(b.share)), new BN(0)); + const totalShare = params.users.reduce( + (a, b) => a.add(new BN(b.share)), + new BN(0) + ); expect(feeVaultState.totalShare).eq(totalShare.toNumber()); expect(feeVaultState.totalFundedFee.toNumber()).eq(0); diff --git a/tests/fee_sharing_pda.test.ts b/tests/fee_sharing_pda.test.ts index b91595d..9532588 100644 --- a/tests/fee_sharing_pda.test.ts +++ b/tests/fee_sharing_pda.test.ts @@ -196,7 +196,10 @@ async function fullFlow( expect(feeVaultState.owner.toString()).eq(vaultOwner.toString()); expect(feeVaultState.tokenMint.toString()).eq(tokenMint.toString()); expect(feeVaultState.tokenVault.toString()).eq(tokenVault.toString()); - const totalShare = params.users.reduce((a, b) => a.add(new BN(b.share)), new BN(0)); + const totalShare = params.users.reduce( + (a, b) => a.add(new BN(b.share)), + new BN(0) + ); expect(feeVaultState.totalShare).eq(totalShare.toNumber()); expect(feeVaultState.totalFundedFee.toNumber()).eq(0); diff --git a/tests/fixtures/damm_v2.so b/tests/fixtures/damm_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..f427590b47d3ed04bcdefe27e855765742a3ac31 GIT binary patch literal 1254072 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%0Ac-v!F$SHGu9=R%~bu!2t; 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 *N|yBt)Sn0TljAwG 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

S1s3KSCaCIVAN`G39d`alrt{%~J^p}(`+_MdR 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¥^#=s{gp(<$F~UWfNPRgPkQAYNKdBbq(G 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

3gqq1;Nj+c3b`PapLFA?{)t+A0PgbA&SRK_2aI$ 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%0D@3oY!#BwB zp^<-d#_$Z%o{!L;|EoGYeZc@yyb`{?{CT)Ltupe$@CgYjP~>LzZsFpF;Fb@U3$h{OLJmsjO$RJ*zqXtmXJ~ z%HWhgD+Z_h`6$aff3Oel-&sr7gG*Ll`W@SL!jO}=vlTGJPwzh(tmFP492|XxHsXOt zKeDo8XP33d?@6{beXYS+KAx30QR-hlEsRsXy;IkR=OfTrJ8S!F+5D#^zxrK`{JC-E z`}`RzC+j#!t7wnJzXRP>v?nft4|0Feo{PW5_h?UC>@Zlz!)&`GzFzYDit>+`arw&r zT9d?~PoCd-{nyx8!zV^R)D{;9ljo(6y!GA6gf~3>hs|+u#GYr{wqwZk$@&=eW2Y5M=bviq zzS56gnAOZSk4f-V0V)G4?%Cze1Jp4dWVdkp#j~6=MeOJsx2;zs8e0-#qlMo>u$7xC@M@ zD{(cA52<|spHlk(KBo2o^t*kKxR)#syO7!w*n^PR8`y!6*rO3Em!*H9f&O=x{x4Af zPg+`tz6!8QyL=8k4mGrAc-zP9x$ASNvH#}L{^4D}W$#lx2AriYugCXp zsK-s#uZ8GQ(2>Y#$)2ZjivE}Namr~I-@BZ41MUQU*>(5zatgot3n8DgIr;oylg~N! z)2yXg{!MQppR*>PGb}%i^hG3}6Ak3^cV437(*)_Bva}F=CFKy~&GRLnzTaEE3io!~ zn%-h^ljS?)wl^7n2G1+EU!9ZNIm)Hm*9F2Zwt3rT%a_rd{O&XP9cMp|TAIy2NcnBF|I=&oJHqmVNMA(q+t)yT|AWbIAL;J5v=IGI zvrF0bFN)u<{^}~nqgNQemN8D&7A?)@U*J5U5xt}j`+)UE^0(wWzf|84V^ynp6){Wm~gV%L{Vu2Q?cLfG|Vm9Xo_8sJU!qXfP@ zZ~C#h|IwY(k3Z4#cJsZIlWt4b@o^LVcpB?6EZ>3jMWi3?4fLbk^rM}0mnxlm60i)8}#BCZG6DpUlIppR)3~vWa}Y z+T?T9%E>$s>5IsYE;f+QZ#Vf|B;CuF7NTE)p4E-_&#fIz&UJA-P5ososK|Fl){VFR zexONL>DPbf`fSb*`n;ZRoX2-1WWH&5vi*6Qeo&)*z0duD`a!2rf9;H=g=n69S??#8 zx53XJ*zy&1bhT5?+&}wEqpL)Iw_BQ}tC@1vXrJuQjjm>vZ)JaBewM|vmgC3MR_`gc zXRVGOE96I`{o~)adRJI}mHaqFd(83XI_Q14&e$O5b=vI@IgbE8k>_vX9*&R6x)9da zyj6qV)&(hv2J!<7htZR58uS^Q77-a`5yHT-^A}xiyhEkNb2ha zd<=9C^Se?5TX>GD7J(1XRXh1ToWOnD9psbRC-rdKwiJz?Z2!(uu0BP-f6mVH&QdPs zC>Q_Q`X^g%f#p8Iaz9|@7Fg~i%e@Kx>g$pTKmQv2vaJ>TnRh;Z+MX-D`t$Gmh+k^Y zhj09IOZA+J{t6M`!0%r9eAD%)Z42?&xZd}i%N70jM6R%L;QTH`FE=`~eCy8X@dKt$ zz2sZBrP=%))Z<3`g8$z1se|RaEG-%Be+u3XF35h)a zspU)M8T+oTf6rQPpMgA2nH2UJ55|PC0v@b6)JsD?zj9Qw_KS(`kv=85`dNM!4@`Ff^v0Zy}?b@4b*WPBMFKO4_T)Upb zb@D!G$437DZC|4O+eiBQEiFVx0Vn(^6gUw8ecy-(Lu z0N+<#Hb4IU?bFuqP+c@Q-abY6B;g5z%T?@GSGIqj!3U}f_Wt1Z?_vH`=3gMZM);(` z_f@gqd;j)DgUeOy?^d=i8GN9+LVW*?<+1Nx*?!pI_z6pdUziuf{@p{~pNY4lf8B44 zx1;~vPmH&hh!_4qyd8c+;5ZX+@8Wy-EAjSj!Wd`b?Y)GXO+Vx9eS{;z{e*c=W&0pu z$YZ>H#NhbRQ9j4MTfBXoF!#~7&k)9bVZ42o@S6EC@%A}`D-ZpwrG@CzR{v6?`wkDc zTE47at%?0n`|_Q?FZz?5+rI+m?+%e~4_L7%^*b7!yFX>}mBqiJ_D%M^8?7TA`MCPe zt5#0#)mrNP`TU=|-(d~g=-mC07QKJ*vO0d9miA=tU;Mg#U-c~Lf5!JOa6ay0&TB6! z9X0ez_Ws2W3ElPgD83){3|xPD4r^jIou8(eN@{|e;45PrRL1Ag6~V*{?Rk(&-sn$qFyKkh`kmTq9WfqWfNdLF=guh;3= zj6Zeug7#4FC8@madF@vlV&|iOr`F|9WzFOg>KH9i9`*TIwTsmIJq7L;?4z9b8d__k zN_4zI`7@dF`kfS`XDj{KUM(eZ-e*a)RbFb3#?-H+?)15i@A1Q^ch7rZ*utC9|Jm}T z2IWs>%4^(cqvJ8m8&ogXeZ$~?P-gP1N z><=aWao+yt&&wzCP};4y6YB(i|8ju$FSFybpIh*Il)rB02XS5@)Np>G5dDbJAMU_? z&bYJdpY?&?505*sUa`a>OZg-0ITzmozARyRD%vW1R8fgPVCdxjZvA|3Rt8X=*El_k zN>A=yXWsA6wr3(&{-l;)n6mYaP@Ax{ZA+VtN7-_tQZ9S{FQ{s`>0B%&rdJrKI+tW0kh(5Yj7V`*KgI<=uh+Q*{T1+k5Y-#dZ#2+{``r2KUwqp zPjklG0A=U%O0TS|nq2F7@+rxpw8)L z=keTi_CoMr-SB*Pu2lawM^Cwm?@p)k0fo%s@$-6()_eDxJn)=eZN&Igh`!tynZ+}$ zdh|Z3fG*-0As*VDD(F!C>LZ?i zo5SPxd%w!?^bt?LrRlu_u7l>{Q2IFP-}RFFF2)zRmuP9IVx1x`t^#ir^P{+k_1XKX z3nnl37qLEjp!(wmA1tm|{&Mxd8eA#*eH`es>^~U(ET8i7w4&|F%fSiCfiMJi0_%!d zJbKPk`Q7Ng(v`-iQM9i%Zs}%xlJn!1uMizF%Mo{;v32&iCjy>?PiJy`I%{ysr^xt` z^67MrPk+Vo&Zo0hPqux^CzYGO*7KNE=xw^c`x@m{G{bad$Z5GC4aV^&d;|?i^N|bpSmqg?adx*Z<+g4ZB5@|j4JQMz_`)5 zkp-Sp`!ZxF3P2hYm)t3%=yGK|8A&`qSD_!Zx=cZ zFV`JpUk&xTJiNg557?@W`a!pYPVTRz=ah!+d6thWls7*Qbf3xFD&=Lx(ro@k%3Gsx z>28y^MV4Q-v=Du?uHNZfy+c;-49iW|)jP3?oDW#N6D&W)dVdals7+YE#GOogAa8LI z@|JC1hvAv#jm@9n~0^;3VB_U+59 z-%I3cyQSIwXqNmsE;q7o+pXW5S-#cMLiC;J_hSon_|$GUItQWsysxDFjB&*8s|NO? z-)l|BPq+IRFZ}#Mnf{L4(=<6u&p)(6K9lngsK>t(8y6`rv?p9=RuK z^1NfGFj9WLE}F!T%Z%==3`-tI@^Wn@tN*I2c@5fgjg1;^C zs;nJZJvd8y>E~E}QqRd=z&-Fr^P2zqyXq&OF?wXYMtY3$nVe&xd?x2uD4%=DHH>Fyt;SE*hL|_nNdjdyd8Zu1{Z~db&pXPg%ODJ*Gb{ zd_%b#LATD6Y#ir0PI52#Mzk}14>-)D-@-F3Pkm1Ca$cU)OZ`vZv)&rytMR?)Z!o!O zd@s5Wa@B!$C;KLc0EcV&yo^-s;q4M%Y)RIy^cPRg8sFl>3rNT2EFHM=hwXhh1Ul8e ztIgK(lX8xI3ELS_I7B^Td&Bi?7v)FWEB_^N^!)sg_N)Fv$&x6(2I;_MO_pEl(f$js zB7O`zcHjMc_+l)>$$A{{6e66z^>stB$JRc-53m`1@zH7I52W+xpuy!=b=rgY=m=q~ zL&Qf%38O>eqvI(5suJ^008Z|sPXVrhE?>_{>Hh@uDKy}N^o#N%;VXuZDB(l$JusZB zk6ZdtpP$d+`f9j~{kGG{+?3Ddakjsu+whgg+5VPZ!fby_AL<)N`@;n6aJU!s)VFup z+8ZA(S-E(!1Lf~!`zgnp_S^n;lppFsNi3&zth$9A-w#Pg%@U&0*wyJZgL=LSJ%%Pip$gDWkM z6NX$>T8cVV2}SP{v_JRc%k0z)INbffpRYEImllFz8%|k7((|C z+nR1LSmMrtUmMu#|1RfacZ-!!JMonKuW2|jYx(!gD5UdCVUqloXg^-@xI(EPs`gql z?BV%(x8F&;H?g<+Te{woDBJ_SggXH1K7i)%^ZAK?dJym9-AD(T{=MZZL|+GfCiAlu zgNL`B;&aH0oImFCKe9BzTO*(6(Qm`MK5p;bP8K4->--X(mk6EHZ=};8BCjeT9At${0>{NOR=@5y%w*0(#KqJ0JWI!djC-=~V$b6- zv@ae*|7YcWS@J2qJiY%-&I7kaEk@wdyd{zDW2t^<{-du?+o$9DEs{lbWjRAvyNvIr zGO+UDWjClEvAxAn>gh?)S%iHMy(J7gA^x1@lQ<*He~NG);nRd+Pn2H;sq0{I(Vi=; zB3UVpC-Cd#*};r``FeTpdZg{U{Y`26WFG|h$Dl`9KA+maerP-IE2tlS8v0Z_MZMzu z!Sy$>1C&GRo!94a?Gyb?^qG8M9ATM%8hs(L2jD|$FTlqv-K#nOS^HJ#epuBT`UPgJ4(nPn8QzU0)Q|U%Ye z*zN!dNk3+7G_Msm7RdLTC=y3mvdhyS2&0`9uBV7!4m)#r3hCGc@;%A^ z7#k-%VtC@QQNp9ZJ9Zag$W>+R0O1L~A0a%&@`Hq@3HKB3C){UnJk*Ql#|QCzsN3L5 z%S}l4--xuQ3;C+xOL7mU3cmS1PCVIe`I7i^iGS5>&(%Jv#>K^1@L z81elXd!Mx@tztj2(mBzO(5Mr zjsQje2VDPmp`s^Cwhi1|gRg5C=K2(hCq2R_KUEn(`PkDFDtFYzzXFYae&^aJ$N z%|GV&yo)LLpVf~jryn}rsvP_L;!9-kkaa*Suj8faLvn6qZr1cD=m9VJ`8lIReg%*9 zW6rM*?q9;am-URx*l$k*U#;2dD@5N0yq7&&{rGL*bv?M%&|2JMrBBb(t)r9jV&as&5}gyWdYem?>F-@)Oj94^R(&fO>G0dN4^n7^5DvP!EQv2c7Hn zK+bES9j*^G%6}*Ip$7g`I;js_52|#ISU-mv<-8Mm;rbBw^g(V9_aa}_^`+b3XDa`7 z^Kbf%S-m*Zz<++Z>BAXoZ>kUAZ??SZQK&&bbeviGpSphC!SaJl6BY{L5J3V<;a&FSLpix^P#79>{aSTujIMPt;gF9T%XqbzxUA({gUSSK+oK( zhxanhz>Sc9egBe|UG@k1e&pr9_EW=q8D~JA>o430e(U#qKJm$4xl5n@Bo zrGB0^e~&S4Icx8;^Ljm}tn=R0EI))lUnwN3ob-Mm<&)0qM>4Rs<12Q{dj2hFpM3Yk z&R-<*`vQLVIF&s*yZ@g~>CG1>JnTva_TBUSGhIi2T8)_q# z79xxU7xCQ_E2nnM`Txj`>-nFT*In!6?2GWbCydL`=)T|Ysy?#qu7MptWYt93bMRAQZ+soh$L&3GMooXoI=IX?^_P5?NR(>b zIdI#3xRCFj;5=(qFQ){r%3DeFGB7TV#|_WQtHwD|y=rtG{>O~36Xfd@`TBKAcHQ@x zF628XQ&LXp+Or9t$3J^M`}!4Hy~OJ-89mwdKn?Zr>E&>s5bq<3{~= zK1xPkmM)D8leLG9&Sm@uI&V|3p_%qA?nzM8>{)8InEkszzlDM$Or!?-)YK}i^ zIsTk7_`<(qaR&I0Sa(T$4fy+_KW4|m)jBY#K4JYZFb+f9(~9?S!)1LC>xk;7XTSHb zc)6|<&T}5h{kJUNJ1Ccp#^-C5@AF;YQ;qY$D%z9A zspop=i|{)ZdJZysu1W2d+Qn}aA5`Muvt5|iZYED2A58uFb>Fd=NB<39-QYVG^We|$ z)tFCc|LIT1gAKo9aU0?&`#z6<$3o^oCSU9NPue5r6ipwrU5}dI(+zn_{N>$NpN~s* z?c_b*81A^tpP)Cg-v)W+d|BsfQr)?jQ+@O2QF4AL0v^_@ z>xx#-PT&){gB|-q#_6S<@HnU+5GIECR_a5urCB-CbCD{qjpi4R>pU-aPEyuijSs1v z0H6H)Zm6EIdXhL@)zgIG_dS>2vpAjGpLIL%Te3DR>myue!upt;YexSiak@a~3-CRQ zM2}yxp&r9Nw`|d7H`SDfZKvrCIsZ`xWPt z&o`KSuCn|J(if3@E;f+QNt4e-(!FeHA?kcVL~W@t-!0FWo`=TC)7lz5HTfF7?CqT0L2LT*%4qU+OvP z3%Fm_Xx-({ZGMGycVC}>G1*tWXS9)@b)CsC_EBV>Mfv?$-T1O7{=e$G-;erb5l%CG7I%b&DV{3xr}zl)T92j+SIo`uz~{@Ky<>PP;27QH4{sebek zcKzrl?D{bXcvJm=zxdqiMTga&>IL>Ovi&xZ(~D{A=PBB^2}`s2MR z%VR(8#iSR54fJA3W^kc8NV-QXeWAW%5vpC#i>pf3U#WeEV=w20*S|kcob$6ez5O@V zpAp-2*6?Ke^ECCg(fZ#W{WEVouy?+WW}v|ij}^{%k| zs-=bKYhf>H?Rfs2$D<~nUk$x!9Os<*>f%CsoO6HQZT;!%ko9rSy}n-LOX5Of|1pgV z-OBb_wr3yD{TalC?xvmaIOmsX|ML7E?!-honV0R9ishHg%Q!zy=4G6>Cg@z z*OLBLOAB%uLJ3R#643Yj#f2U)4g;+)sMK9;@D)-1`2z&r33Kq4^&D@8ee*7aI0E zyieahgLmB>tM;Z{hiK^@B&G#GY+ffYSA?Ik6uezsb+5d7MCfulfBPMc9RdYUQ0+XRq*{ z!vX5?LEdAyZ>K1l{O&LQ8SF{V6w}j|>bliS<$b9B1)ditEY0fc_X%CPo_M?DQ~UMD zd)Dudo|gC7b16UZY4yv`7@qJ!)RWzh6*N;j9+L*i&(G`mc?<9V0(Z-G9X21w^46ln zV?uGmA^%Jz=aCrSGTk>B2OZV3Y~N^I`||YvpweF>{XAE**y;J_op2Nw@!w-u*$T?FhA8-FgD=6no4X$keH-u4ds&C!) zJbuXa6Z}Z^7yL@~n|w^-!lNHk`!LS>(e9Xbr4aqRJzpBM>eBNz#XjhHC++f~=#1u& z`(viJ@qVnwWc6TB<-7(wsyB;b|5YCzk>}xqpf5a$cI4$_$M(HeFia!bIoSA)s6`I#Lj3t zv-brIczo1w7x&OwfA3zin5{dIU|h^Nth{dX9i8RD5Gp1pN=riiCeJhul8 z&lK@Y6A$cGc$qL%e&KOT((~HVnJOR2y$G1)D8_N-%>8)SrSi5;Lm=P9GQRnDlHyMI zFJ*qWJnrQDbX$q}yTEVGyTq?IINMKo{rfWWtJmvq`NYE}Pi>+YDnEq?0+q!x!+CY1 zefw_&zd=uJ)>7Yp496&6uc3S~PJzcAC`A9++LNtsDkopPDqr){#6MNn&T-P$Xg={Z zM&CHgPh1pzi66mp7qX8JJXMZ2#aY-HAODJT2H(f=@BZR~!3V037@rRoXACY^-(zs4 zhd4t0-jQ?4_ znBLTgUzDO*?Xl>w>WA{DQ+%$J&u7_A@4qvIy`Qij=KUb|i|u`x@=_^oH9GkD4aJM{ zSD}872Nib$U*PxI;!f0;?$<#cosSYP0PU-xz8yQ^mpvuM$?Q|pH(3SQc8`cW=)A<| z@xQI-tmj852P2kd^Y_z!X8X(gN%{2AkLox*$nyP2^X0Wyr zg(uODIJs{KzQ$uyXy=pQdptHx82uvm#SC7;@gVWf^jL zIp=Wz{7?KOo*VJ|M#*!J_tNyu;P;VSxt9ShM0esn_x(c+d>`KSU-+E*QbRusZ$tc2 zl~eu6y$|RE;~Ea{I$`C~b2EUm{igR$JpNbq`BvpG<1A&LPl?_0cwpJ*dcIliS6O}8 z=XxGHF4oJ-NqdfVWb>~WJ!p6K`MBkWJZ7J(Js(&zZJ+_2!u zzE}Gx^J%M3-@nD;ZMCu;&6euAY0)UPf2MZqga8zxe_cnv@>$LqB={b)I3wV@%U9S1 zWJw(Hn*cw5@hZE~p5#0AFKqp3yh==TWj>B^<|;Uz15J0=@o|-YmhZ=2ZT5bRe$r~4 zAF@n8tC9cyWoqxM%PhZQX(9Tz#upt|R8Eum#xDAUx4}-N^9|UOto)qJ(fN5j*Ehe& zdQR5SIp_Xh#*fI3OP~7)+n@wbuk+@`O)XX)zF@u9|kmd2@^t9)N4 zBZ92obA0H&xbcC0;J;iseg*j4AnvQg1Go2CK9_{gDnB0Q^5?DpJILRXrP=(glHc|h z8ub6qSpT=Oe7mKx-UzxH_=Ao1b+o@vOI)|qAM6F5#Gj{KNc?uU--DLV{nNxBE%th1+w8H7=Uvv`tXxOb1NYB| zO%IwW$5EXgoN+styFaDt{VKPEss|o_k^AuB809Y6XQSLD`)riEWS@<4w-RzkJ_mN(DBkPs7TH_wML##iYzv%By zJ|DPjz@B99VX34#pW>cnD(qBEl`mMajV+x!v_`0Xc-)Ce!V+q?>QG6KVd3sH__jc3c36=zKi~rc3TpKH=$km_3dQ+64|5Bi~Py` zfqC@PK+~(`^q7rt9joi(bFSsZqX(+jXwtdMx!Y zX%F=?9$J8$aa}fedt|K7Jd z!l*c&oFd#|42~zKQO~s{!ZU!Ab>3OPRnQafv}{otw*&F`!Yz+@&V zTZx})c$58Qo~s;?F-FUY{6T*Xl>`#IOMMQHQ+`NCQjhb+q(kZ@U*fSr)YCFzY56te z%lGRZ2l6kU1ptQ~4El=8R-b~Bq#*MZ|6*iX%;oQ!*5KlQ#^ zcD+x=0mD}*e#XXKwMUXg*4d&u|7BV9RPHgFy>z>k#D6HBsqwdrYJ|lP(sj}>KVtQS zW6PGRUH&;2)Aqg)?Nd-QSs_Jb@1$cS`0hlpB{f=)HUog!!An zKgy@_xgfG}u()RL6;?rz_<{+n_U0h{FnvEDu*;{m?_4Hsh0Ad~)@$Xn{jKw*?D~xI zN9FSAe-ydn_Y6WU0-a^IyOgWMkE9&(+?Lnp<7(pn9a5=OI?0E`UnCzAe{vl4CI03_ z9o;%_%g%S4?!Q;Mt7o8RwX;a)Pg+{PZ~wG#O7iz9Hzg%~$v7xX*9@*Ni67v85!jK5 zGm85h;dN>~1m6)$(s<D_KSH z5bSDrBm3#-9NO*s5Q(3nR!8W29ov0@bT*1t8t_~>Hej7nTI z;5oKJJ~&_c2s>Z;3DaNbW4-(iX>fm*=U3b>E<`^By*t`%<^4QLxPp8+pj^ttos~g* zojm9uF2ALKG#pz19^WsLd4%RKMBfK~H@W_FS-#LzvV!GCaYs*}ot4QCqx=c9voiT1 zgDXQPLI2?eq(`wn6pph!Ls%aQCnyJuix^H!fX>Nj;)R@5CLbm|ZSO0ShX~IQo+3QU z@)Lvy36B$|988W99_RZJ!lQ%-4X(7@fpq`vNPGG%P2vypo`%>FJRj>u+Sz4kat<~V zKM~{iBJs3as&-O;GOy+H64O>ovvx7RZr!T;Df8%GwU1vdC6e`P&R5fTqupk&WM9T= z^m$Y0qFo>zo7tJrO?n}Y89TGj=zaG3`+DGUJ*C`+yGiF>)V~>><=47iLN3a$b-je# zm0t_J^!a4CrDTZ1tDz6!9=4PA%+I}~^Qs#_=RMTR+b@i+c#?9~L-{*Oxjzhfk6R$; zG3U)`eJ?|O2V7qv&*4DHDwg#-li%_v+EqS)_LdKV4`FW6-iNJtpTyaBJMjVHojiql zK7e+`lWT;*|9EnhFxneWt^nTJWe>^^;Q7)Cq+8{cP1S+wVs9?T;uMa&;6hfmsbIS&FmQCuKQyHcDpSjIb~jQbs`uv4;L%KWodzEZ?| zLC(z)_IU&JIh{99UXpnO<%WKltk;ts_uD8x?$2-@B=TYPtG&^lbblzdKk%2_FOu&^ zgRV}@53_ctw1IyX=9ewM+M#chzXIbjtDmBNV)|XK70VYq9>l})QhvTJldQ*Rhse*z z=@?=g4amZ;_G2M>3jE|fl|uAk+7`%ejk5#Sut7f^>Oh(0k7MeTk$@@ zI`4v>hTV9-mGnI&pinr+GSbs6swPYS(^u=y>?!fyr&g=I8|2?#aBPGjF zz87?sM`>UDdoRiQ3hl=c(3Pxz@SI7q{z3oF*FUoIW%h#eER|2K*}o@}&4>9I?Suxlk`&ua}_o|HU)J_o3iIavmi|34;AAvrpoq4_7*VcZ{{HEl*ij4z1 zxIa>eG&-Wx!|&$#xuh&!Jx_7IedkaAs-8PoMLTP2mc}=z6;(S_vNTJF%9o$#%kIN; z$vT?P*W4a$8V^s_GrGRZsxY}#e@=gQN^(~4Exi)&w0@dQ%eQB{Qi1gmrBv%(l~nom zhHKZ~!!dn0pt)tLZJVphb_DL2YvEq zo=?6Wu5|sL&@~Xrb~T!y}SG zeyUfJ-F!xc_gqbTlB^TW*}H>1|72;NzHGf>W@LSS!SX5H>Vha8OG3BI2Ed6s*uFbe0_DO_G zNEKKVNPY_I&+ik4hkF&2^{{SBv-=+2pR*tT{5dbz7JW7HDN^~leBRS^1?pj({mtbN z2-=!gR|$p9P8TeT!Z(j=O6ex>3>ho zW1LyTywYG}DZ@`X-={TSeRDqb|5XlhPLmaIx^iEr`RDTTKhpAt^lMui5bqit>l3XO zIWyitJJUEJ}QidBOokELGlZ)wq#p5 zCh~IQLfn5B^_ESpV_h82^)?aac&@jZFv^wlL{Sf2MJrg&8zl_89rczBZaoLE&T9#q zcSMZCS3j&GIo&=qch03RmysXC?znw@$Hnss=SERZZNyUl`yu&W<(PM_=pUkfnZIJG z_E*|&#`kuZLCibv)-R_djHo?ybiGRHs+O%@Wd4EpO9m(H@)ag0A5XenKkZwpf3O2? zzih_;ZZ$N)sY{S*yqMxqdh{3j-zFa5RZuUQGvmKM}-ta!u@J>*#CoL@m z2uyVRosFEN8a+8ZP|1^cj`fV3bf1bZr*nm)aBi9WEm_(sa#oe|`B|WxdQ<#3Io-$j zSs)(Fe-wfalar4}&+(Q00miS&eZad9RPDSrEtPwN;cKUS)jQIDxY_VIzRpHILcS-T za}}M)XDuV2dP+Xul@Yx3>*NdbGp&ud55VVZhVlthdgR)}x70tV&JYjgcjW%;O>~?M zKQ=yy+lAw2HN($Til3W}pJ~!DW$9M@Opu?+9DdASs!k9O=9k?4bP|7Lbes)8Kijf? zRxeq0>;tBs#_;wh4!KO#S%<81iR{y6DZT>Dwf@Y9sy=OxBZGwEo`WG- z!K3H!`FQ#bkDK?zylZRYu53R-xqLDummNZ}w!6@#hHInmOowmiOlO{ znrt)F9C+FpJ9L@Pe)jPw>^--Az zg}=o4kfStQ-qb3L0$HRIbF*woBr)2b}KZWOGhG&3yCW%L_ zh|KFXwrBLGNAibr_)hib_LTnU6pGr9zqb17F+3sn*A;?KVqPki3+O(bTzr4Jweg#l zU*#>`LDJ5T8=JD;2)gvW-_CtGrrYwHd_913!u{Zy)j1 zhOb0?W#W5F2H%k3LwzZ}ujbTyWcY@NuR?ssQuPi#Pgn2Oo?^dRXPq|pI~(Gt`u*PJ zChx$?lXzIl8~gmW@~hV*znr&W-zh(TJLRV*XFu*!jGraLBk|sr7J_G|_yL~N z@nh{TuAc{H_*qEt^Jpna_N!ZYvVKi|77R}8)t(HVnG~K!8lG9=86ch+;>p^pDU%Dn zQ@LD_8aKOoeu&9s%J77>X-f;iqf&AK-KUd_G?Uo>^X-+8v4y80k&>sISNZA3t>33S=PA#7 zn>>BHIbry~hvJ*fX@~2EZ-V$HiSG{UXMKDlg3q@L-?TXHQTtxvq$sZugA=`bUPkZI z{lwS5F8th>=La6J{9|L7Pi}3#$buo%UMV;Vk3;cP@^5NX|E!Wq#?%;iKHQ40pcCE3H0fZGJJV%~++`|2WtdFpU_AuP?=VotI5A`SO*wE8C=*4gs&OdVdG714;pH8y_ zUb}tT7VWmRQ38Gp|GeSPj7w7Yffa(6f{wVIFIxVjoi7mvf62WquAQ&o{kH9V>KEM3 zOGZc1&a?e@ljxb+W7p0vG`(o1J~dhD%X>p6>`vFtf79A|!2BD6P211ir=70}{ady3 zmsmSr1HH9%OA7(x(KGt|IrtqJea61ve0~0mU51(E#RdCFmY z-yrNsnCCx@S+?M=^OqiD2opQH&)`k`r}Xp?^7xJ4Orr>t-RKT9@C4k)&n{^X(xFOZgO4~%k8AT^Bi0^ z59<7Njc3?&A8zO4QhEsc?#pR{dU%U0sA@axHMvf*J|-;nzaOC<=Ebc%+VpUg`A3k( ze)J;jee7p15T3R)@!OrBj{d7%x-XwE=fCT7|DIXr$LsTh4|$x;9ldqreXY))*XRCy zvRnD}Lpgf-GSkx`@>Q|45IiEIrz z^DpxpCdc8HkDA`4Si=GrcUlI&5jv~GuOMQAuq$e+~<#R?)iTTTx7J{!EJwBd|l%9M_ zzLfnD%(s!zlQrr|UR=i~tlTx~$vXAqbCknsN)Fk28A{3FuZ*4w=^3)rr@x`~#NC{eq-tWm|eCQuLe@46;r^d=r-X^o)?6yts;*(KEvQqm~we_mQ6EZRwdw z(Q~a}kaj|RGnV@FOp%_vxQJ<^XNvi!EiD8Zr672#OWV@3kfP@`f1nsr zmrs*?uXZnQ9lqb_X<~luWpsRZko45IrKcxF&*O}qKH}@i&{HBkdGQ5%jh+(omr2iW zlb+4dh;Jc7Po4DStvi0l=&3XRJn8uv=83A4+tRa=qUYa?o>k&o$IaRUCgyLpv=ICq=@~M5+yDV`^Qe;n?z&t*OegS_`J{RBWhbE+)sFg@Brau!l=KfZHaJ& z?-vO}-=ek!!lQgYPZ;eZYO51Q`;FRW3B$fbZ8L;tn17lu>~z#NMR=C)CkfXHPY|9b zJW6gfX6q;``ak zuDIUH7nE=dJrbPTTcdAM^Jhy&KId zm4yDS=I3AeeQh@-(p|Px*8j~OokBGQnfoQVF67(26HSD(Q*8dypW$eS4{2MJ->4Mt@`W>FRZ?KC+C6O{9z$L z+^P7}R=!`}l9YG4^_6>=UB>wgVIBJ*3*6r+{c{Fio%r(R&3^z+i$wT?e3ZX0e(F}61pdso!*>sN;{HT;-mSiW&H$H_Wt2*wtMVVcLX;M@A)$7qXFakaBR}PbLXr2=Oy2^uKSW7VDEkTt!aH-V~=hA z>o>%dhP>}FtgRV-Ew=-o=>I2&_lRRIKYu=14RF+HkELC5fAZYA<(G3ik@gbq240_z z8Kt9!{2Gsih%%b&zIJl;Oc*B?P3KOJuSZFQUOp{!%eu7TYi+##4&_(oCo+7DNPcafdEkB^1o2+SZW{jU?bv@-MyT0 z9`3eyzO8mNg(uPLz0i{}=xJ-i6AX6yl#}~7SFM~l{^|bsK91vhIQTjpKac*mEFFW5 zdrfa;|I)U6Ja09dKh1~ir!qXrJ(`yrVQISEd6@qGys~`h?iG#id3z%GQa-g^Yg~e+ zZhco_{e|3j86CpDkmwD40msV!Mr2!;)@FK4}9 zNcBB$fADU@GfzAV#Ph5S9zC~H?Ty>F`f%}}WL?qby~7&z?`(Cy(Jaf)8#i@Y`5Y%O zPOA_+IaB^L@#Mwjv>P5bKEQau?Z1xiW4jn~->$x*1K3X#9m0N|=%L7$oJWZ`>*T&m z?2}3EyTpE(=bZ9>Qu4vya80_w)iw;ZxcK5w^qaO`V z50ncA7zLx=Ry;I#nPl6h6uZQ8X&yL@B1wsqrQxHyxidAzDx9j ziM-fux`8jb?-KQ%%)5XdmoL80qlWT!c6J*-Zv4^OaG}AzK8%V!sC{<#>5N-@o1h+y zTIzpap*_tTSNy*D7bDDHL0V1mx6OT*;YrXR@tn)>B;@JNn+#7v-Vx7r2~VOvq9YrW zH|4$q@{0~ZZqWhA%jai6+rtSHOQ7eAxOP{!_Ao#`hAb_>9E%>Xe&h4nZ?C4ULk2!fk&juU+g8872VOO8QGEWS?y7~#%2@epS2fPadrl@-XaErap#@`>u^TfVR z@q1Ai`963c#?Vs8cwKE?zzWP`n{gyhvVtg;` zUHbeV=U4oq>_yrSA8f>c)2-L2|0Cqz5p}{3arOI)vmclj%qzcOrwDEyCzRQ4+_rUymlFP&LErN%R1d>;k;`LNT}$o99JJZX30d!{Mhcpiav z#ocEVKR*w6;(WVNFUfn>)4o)B=cn@ROXYL-&R>+u$9adrhTnxeE=uL&eT{|S5ak8C zkykQ2Y3<;UYM(i@M@$X9jI=yLr*?Du0CQ2e11 z>`fdex&rzkL5gYBy(@ziw$Ecsuxr>lb=4-0~ehclC>YXSn6x?RmC-A&=p%Z`k|628?5* z9;k0?Naxlqz5GP8efN_6lcvbwi6(=i{S$-(!lMRXdSb)!UAF%<29KSPOzZ%X?Hm=2n=08R-e?{XWna`y=~EpVNEVsaWr6*J8cD3;mHr;bSX* zWKCAF!s;UFU$V3iJi+wn6vUmJpM2EB9)w%0i;Rl~oWe1za$fwj;fapTAU!-~>EOLT zVF=v1j{1XYD%5}Y6ImIKc1+rLZk^4I_d~Z|_!^YI-TY)cpN#FWb`Pc$W94Z76gHzC zLMdN=F+Ld=>v!?|w7~k4`;5Rx(LnFq|JzJX;VYnT;S=#b#wYVSoA3#&zi=FB)Z1@( z$Ie5$k9r3PgYc+#h%oiOw_`L-~xJ;P* zAMOD?6GdYnd?m|$tAX)(h{=5ih%1kdHCevsNHfyI?Z9)E_eRF+@K0fRJBq-^b*ZG> z^!uWjb-kQoWb``!uRogk&i;T;cjPF;IAk5M%Gc!^qZXj?)Pa&M%r|N8ev+We(=Z{((V&iLL)>?hHFP(5+C|G~GnIzD#$ zC0sx6#$RF=tv~a>UlM;e*-s7qk^3CcZ&sl{avuv}=#SjzNSJyN@3*FYa6gOKFZ)jH z8NcsGeY^eUyth#9UEup6dq3Xc_6b)APxAc;^G^^SB|J))`qVK(xR38EgeM3O89aU+ z@0&Wr`=)jb@H_U$9TWBH`L>>Rjdb5?I=cYQlf91ONKlApywV{vqMlKjE@xf+^;{Jf`EF57wpxuf4SH=Ux zfqTN@s3 zaCmaY_;Gmre(%E@LFOLl@P=vo{(@<>vTA4L@@)CV_d&BCbmcfdK64*5`>*&O=!Ym4 zk@sbgOZvW>xZgvuL0GZRgQyGXV8hF3_uF7cs+31OKg@onO1agX|N9mD-szEy3n0gM zei-AWWPAhI*C%b~I(|vt=lNfvKTZzL-raOh(tQ~AFggsor{AgFxij~9n%%n-_j!Kc z2jX7@JB&cz?rQtcHu3Y`=h^bBI({R+9k35>K3DG3guJVeLvkP8l0A<)%6z{}xQFlx z;XX@Meg$zME~C9vSR3egMn+X3ofYzL^XM?pf|e&hB`IgB~GK{>?s0CGs~q3<`oeY(?r zw$`iC9Vy)@KRcY8vUcw7H*x+|A^01SlzcxT88s!n+xlw;?4G4h#{dpLU=^xMUfk1L)_%7ZeGjp9^0^J9~HneA8b{ z{K+?f&S#VFOHux|d^`Uu_Dj(pN7t26&aob(JNl5)?{@X*?h8BHdp*aV19^-cgdE16 z<@hgIIpGla4+p__{{5Xek0ZLS8T1`#M|z+LJolnJsHd?!#F(j~IJ>F+fc{Rs9%*=j z`oQs85}(2Ot_IdeM-$3vC|btcdpzr)Z~WL*u>WKh429QJv>Bs$l&qA7ZZkljUT>XDxoN0+;g> z`F!1;Z?(@?*F$`JxGJ#or_{cD(AIGSv>*Bp&hJR>^K7#Bh2W8}FPG3B?6zv(-X09# zJ7=eoc6&a`z0>XXKEOkN%*DlqZy}xg&Wz5ngS1mepck%vMn|9*V+YwzkDz_T?erkq zDFb7oL(sGAJ)XCl{)E@EU0!r%bjdv*(7Pi}|ETvnpzjgK_t|?q*HGSZ*IuE|;qjss zEd95=ADaPRW5;Qa-V8Z}vopwlPkbM~2=vD3i;4HhJoNX);43;(Ck**VM`j5le{=-? zgu5Sft9v|cJb4E9c$!~zWZCfRy_+_kJhEi4-s8DxJej%26Mjqf9?vDyr|dnR)Asz- zEcno}Y#g~`%ASw+qW^H?II(BYOO7YyoKC{12bupiSo8(yfePPKe`0?O`Z(T!aht3U zSiOvQVEpFR=f-1yjrtOg{>7V6m5}u=;J=pkaJpz8jJ=KaWrp_U z?X)kKI=e*saVhOb2kpnDv>zR`AD5y$Hy`Eem)VOmxW^OYFxm?t+Uy0#`KpVX>_z4t zPuhzr=um&^^z%-%7vA@nccQ(xj`rdh=6%MGz+Q+xz#bf;edtcx2iHD_*j}L@iG6^6 zB=!ONai;bm>UDO3^&F4$pr?^HPCFC3kk}`8F3b${dNP~YA;WzT)Ru=%6fv^`gU=S6?5>n`n(8{f&;vz0ku#a6hBh z$3H7{YP?C_y7}l|W!C}I@eIj5mTQoU8{cur>&AI5?$+%SaQhm3dMYvx>hJUESdj8h zj-dZ#eBEH`ICFK&Nus{^)KSt6xX(_{xR28P8T=y7^_FLe;1!s2wn!hz4pB*_)ez}zhQV5 zseenB7J?TTo;!bU*w?I{quvFRLvnA}6k*t3xp#nY$;yp-ry;klBH1`nQt zfw!+W^TMyr1GxPQ_gmNbiUs3K=1YNx=kO)^^I|K<$1|P6b5F%HH$yqWj=Fmb{d|*@ zciy=vq%f-rYYH^-db!KAq`ydHjoN7b;d?tqr|~U;7{TlcMAOEvGKQQ=>=9Re9_0Z0;4S zyc&5F@0s5#h6xhq|7p3il3&}=lO*2T=Wmt!ah)D~M#q(NYpnm(j69aPA2;tjs86c> zsV+1Bilyo=D(mBW|4jZb@=ooaaQ0E>d)-g@-RizGtq<|XW4yESo$}Q$m5`i2{UAf5 z^(~*r^}XHw9Pa#SxfhRi7k1Q_*E;zh^5Xh6p5L8AeWUTePX0G6Ed(!y-d2q)8+Xr& z;)Zi*XKHuy&P}@B@XfM4)oFKzGx$bR?eJQw#|h?xKa#ZL|7C>8xr9ca&tF>KFBij@ z-=CnPlXYqE%YJ3BA!~2?QuG})`ua&86cj^Qh0R!TJc1$>s4TmnPB?Si04H1UgPtJ;^)oYp?OM4nHj(KmKSF z9cROj^&@dTJAMW-{HQZd=$&ti(7CgW#`bSzrB6+iRjC-1zdM&oCmcoxXdBKZLwXTy&i1HFa5^=0_c zae!Yx-_y9}xjN~X&E;pB{N$ZCwRV&CgBZWa{&@29PVxgf&W0c9c07K%h^HsR&t!_9 ze=&Zh$j>DCapNYZx8)3;N(#@X49^JhREQ^g&({Ful6Owo-H$L>))ov;vX5xMp2y?JYEr)T+uDzP#{6dIzrar&YVIFPe&vq;Rlnv+%wI%W z1^?oIg1#!`x`<+}6sabEv+!3;vSx%bb1Se8YD3VGQLZ`_Rb$&uteO|vd)Ko1>+XY~ovu0kP2UHR*59q~gOGSXYoEz^;&rxH>P-jnbc#aDPvV!L zkDb)Jj()=SI_@8IzQ8|sd*>OPC%!E5QGf3iSwPVCGjIB^V)3~l_qY1`utBAE9FCvZY_5|pr9Z32K@RRftu3tbuq4P;TU#`E<=bO(HpECUVeDitY)A4iv-0ZFT zk@*~b`P#R%ADJg#3zimwXBb{zKIN4Cf33+A_bG)n+>hjcU!?udljl*DXBGDnN!*~F zhbH%~$Nc#Ghdd7;|2%Q%(QwO$Ex)t7syDt|!a3;QaPE2Hi>9y1zAMao$a*gHn0||U zKgfMqKHsA$IbCXUnlS#t+Nh=e_Z7-1Z=UISCMVpF6xK#4r;beh45Z4v*vfVHD-C4I z?PIxl^HEQ?a{EYkKg+$3l`H!w*{+M$P-UGO&pTZ^haE}o4Pbu~xAP+LK;GdlwD&MR zKa+MMK0lLoB0fKpc7pk$ZnUfX^E3H<+;6+{Gl@60dmBcV)1Pd=?at49yb+wpp)Vze z9>PuzWx`Gl=+ENwM{1*x=Upa;XIObje>r5ZuXm%gkIs+2FZ7glVAN9o`wH!2o}S*z z?BfXYSCHO~`pbbF`}ZWXe*>g@$kIaaUYmdN`JYY6>zfv@T4%mlOa1Ssw~^Paf2sb( z4D(MTy&K7EGDluJO$+S?jo*WOkE-$1{F@e!emmwOic5*ODQ9cni^q65uHdz+9l9&l$T z@Fwjn>zDRXZ~l#b$n~Z-{ghvyrM}*jsW*A^*Vmce^e}%JX%%uv#;cG+;)g&Ei5~(v zB;(Zpe8uBc^2xYH8E5kSw54H{a^b!spZ;Qw-hBR>>Sq*5cgfO1un+Z7MS0?{8a&+M z{8E%F{x_ee{Zh~&emdTFZS9x(^!262RX5l;bb$O7p+dhn zaiaRS!B>S&(i3(Xy3D@)u*&vBKgOLKdT0Axxi`i5*tv)8L4+i(s_eJSwuff6hcB`{ zJi*#SJN2U3QlI}|oA%IS?V*YJ1EhD-FAuBW$NA&Qe9si>E1nN>?V-n>Z{>Hdi=VaC zIPDeI9@gn!ZP35^H;z|JC}$4(G~C7ZK>HcaL0^Zv*dA0VM&XhaJa`Wux4?dvfPBQ-#%bkbZt3zo2ar`w64IqqaW6Xa`YS58)AhUnUGcJ!&fvp5Xf;;Yq^ngck`n6J8+PWN>t) zCDJZ$$>{Ma_1?{2%$VM-!D_|^VW;sta?AU!u-of??(RSqR_vUo&2Y7X#cxN zx|b|11ii2msHQE>PltScdsJsX`HuIC9C&WaVB`I)KM!9~w2ILAl|S zk5PQCA?vYw5%1&nzX13u)bGwt%%?j)u@E3`C!CwN?|eEn{`GY8l84NG%>sXY#?tN1 zJrB8$b+`rRcgFi}lcYEo1DjoC~?@e7FAOoMgzs?ceMM zo^<(Yj~5?{IUUWX`4yAWGyQe(S9m(!DRh^?K}od;Kkh^08{9nm1zqn^G_p?hZc7Wn zNlT;awx>tW&-VQ~m5Nl=??a2Ye(v_aX7yNW zS@rjwXa`)E)9*Il-%#Uwm9p$rk@uVLZ+M5j*Y=>l{QClM?o)DKz##CBm630Yb8$Xo z{0-Q5zMd^;yM|g?z2Ejj?Z1|QkN0n6?b|shr^S+ZUrW>pxDY%E`FT%s`5W$B zNS}_OlzmaUwB7u@(Cy|mTN`_LUqB_pN56cp{ZO7C{rbO9KN|dp^?u7=2z~>2P<>}$ zKMTfSYXkXjxC4AP%HU9b;Vw&pH%g*a=<_!r^l80*NCGmIuUGtse9wCiWL_3{a`djX z@u2bT;~OErdGnhuF@8sZH@+XC8T>vLbZ!;zuX6PJy$7lP!SjIKy2fB*F~eUv-=j4j z$9*ne(l0FxG`~qh8F1jCGYzelO+;!mc7=&UchB z-e^4ssm3p;pW@<}wBN5t4j0E-2p(klefjirUdF|T@38hX0Df!zmipiKa9$>FeXn5h zbn}#bmf!hJ<9iQ-{+#%5znmFiMBBNe>&O4D_H@?jNA@|9z8Qm)_VCgyf2nr(o}2&s zj!StSda_SRjEVfx?aZfVhO4_N!(HTE#XY=;^TxI-ES$lQ&gm24#4R+M^ zABEr@#=c+vM9NNFp>|?!lI2WTn%D>UxpK~#$;Zc&*2{hWe7b)30;419#k|Dn@O)78 zJ8f4IdVojf?@fM59O&c0r}HnW2AUtObgDkR(dGk&pqGr37;Jo#eHhm0pLJCXj<|jm z#&MwVU&5|YzHbMfI1aQ3*z-%JSUFeOJ{LPo`-|ow_mDv^+OlNTTP zNYmGT;u#>Gr)Kbs5KrDdi!QW#;u$5Lz6_oz_QNjD@&TsD)20_PA7H63hY8x7yg0V= zt=tLbpR}|P?6z`cK9zEZ9t^j97BJ@p!y5EqxCQG5@%#|y6WqGbaMwQ&5A?US0SfEW z*~9kf;tl?LP1|Q5<dKvC=_GUXfg>g_eULE!K^V_MC5$x<#YeRP2(Uj8r>rL;QA@^ES zM!p-{#H(LtdLJ@|URhYpHm3r!SxXs_Ok3=&h|=T98|cRDfAK zu!564!)tiPLfjYtWbZ-5y5n2g?{mGqR=4`xR4>%?yz%u<=e6ITr9R9c<^5cV{ev75J%=3P zc=PHK_=)>{@ZDppX`O@Atmd!l`bdAx2I#~1gZ{5Zat{KxUd;5*!f{82aTqU)dBlE#)BARNp7^^(!jqQz^bh6e z{TFW4{(XpaS1c_Aw-RnfxpRu$2no1L)wvz_wTg*tTKM$ z+?0NuM>~4HG%Wdr=h8preVb8^9hLPVYe#2t56V)ipBps2T4q1BlH_mGvY&eo^$T_|u}khAl(bz+--8mcUY%WX_n-`zTztJr+oN$EuV(C#G;I0Fc|O4F z#;yMY_U7hWPGfJX)UUK&++}u$as6V9RU)m8Lnaqrp6w~SbFS$}k?pPBQvdrV+MT@l z%KMt#X=eT=>IK?e(%-^GGW_>b zUd})Hw#H@74Upgd%=bOp$m^SbuKr0M^YCcrG`{DmigmE@HuxKE+&12Jx#bJ1SO*)A z;{XGz=cuj1_gv>_L;Dc_gzsU0WE^V!K-AXH@8J)-IKb$&J$#ON-Kech7<1Y4?&7p${>SK%@vo(Rdt6J|_qUrquG@ERKd1lw3hjGd`+bY* zBkvgvd7n}t_&&-7n`ab1w<3;}`imcYkKkjR)?nj3u}*W;*xw=^DINC)$4vZH(*vK6 zCBc8X_1VbyScd(tFInp38NC+eyYr>oJw!S#-yARUJ>)-%deQfr<3(_^h z=>5anY&GgtcLX;M?{WRvgRS8Bym9)SE-p^x^~zO^r@{-L-!=7buL0fq-MpT!Qr!T3 zwKYr6K2AheA+_DDLp~kAC*wB2-N5V9p>ZLb{A||qRjY!B@hZtW#p8iLx4zNvb-bW0 zyb$~fzlUFxt&g9A-`x7R-QK(P(ERwF@8dfuMkyF<{1EVt6;VFdBTsQWpz?n5s@BU* z_MI;etCuS*o2?`Ke|Jf}@SK3NsF#_XdU>YM9oA-y?$*ZZ8NV}|;bThjYkSJG3+GyU znueU}Q`-Fh^eDHbZ=WNbc zzI42e+#_$#&p6)X;V3scGKG96kv}?!=YzpcYnQ73BJNG+Y})YX=9L$Fak3H@ zOD#k;)y8$v(#pUM6r;NkjPtDLW< z_Rh~=mi)3m#=g^f%-i36+~iiK+2cXRNZt_&Z=6d#ky$6Sf! z6)kOT?8?yJEcuk~6RCAwHQ}naM~v=f;%O({Z_SjyCBrxR`<=-1p_a|`a$5602k_uI9rlOZ8)8|t4qn@7D z&wi5=<}uy8Wg+;z&HQ-!CGKk?52%sdE59f?l5<_ZWqdh4be&SRi)@N-Ti5T=9A*8m zFT?Mme1GaHBO^HVW~55*2W;PZUVl-x59Pe=GsgF4r^WZ1#8*CJe6xy={;u1{k@RQ3 zVfb7>G}!P|gMGc8PSx}Mte$7AeqH=cYvX}TJx{WpUpTng?kc2mySLTzB=JmHT96yh z^yinqE_hu0mg>#lr1VBLUGd$a{cSuCj`^iR@W2edMbh=P6dtv#isyF2vq-uyuT}`M zc2=e}Opkw-!lNZBp6?o-dE!|hfA`MNGpqc)#vTXCUt3CE_anZq8NONKt6RFA{RnHb zrYB)1@F(l@fa7)lob~&V{%)L4ji~$v8(s=~F(wYP{F3*83jzA$vpH8!npb?TUUIHv zDWm73A}`;5efaCzFHBG_qn2)Uu4IMvmAAjm{Kaa8ct$KO1UJKO^n#AF;YW(wf}diB zpMexVbH>jQ=@`i6r;q%6BjwkqhN=Gjsp(4}@${3Qzal@N<81h`ekXH|X?upBa*ChV z8$Ugyqnyi6k^Fo)#m^4%^BUu)NIWI-b3OS19cROj^&2ri=r|-^I>S$MiXYwI6z1M9 zfQeg)Kgr-(7XkWu`y#`$!TGUuOIsVW=VY!*KD7&bQg%T{##+x6lgldctXWzJ{U5=AJ1wI z9`JWMzP`2z&q@xSo^9#*(k491Id~pxc${C++OW^yxSw$Ke%v0*Ic-aZN8gv_k=x%T z`d*0O|@eHN#Xav8utJ@6EBJnH{&$*d)H7|H% zzRc*?cKXMuac_b6zHRvCiEn}U?v=qeYxq#litm#t`qUFq`ffFRv&2^?zW;0O)|c0` z;X{2Zz7MAGIe+X6hHskqW{B^H8GMt55B0A2E=k!FN8hIn-z4!(5#PUO@Qn&S-!6Xq zYhqt{|CQ5=ur_M>6TfvhqZjFR{84RxH|E)c-?98*b=vGovVQQqE%Azdm$1!NyktANNCtU9$$uxF6qj)d^1#o+msFc-I2p?is*vH@7%97xpVWw`kvI;}I8_ zUkH_7)ICoaep%FA2aIk?+TASR8tB~F0=Xpdh}rp+KGv6u!+oRH*IYmAxzAEx|H|^c z>Pg;w(3I-QTo3b?k;eDYu7JKOrFy1%@V8%4JuQ;%lBI>8Fw4vm$*VZ&D;z7gUJGx%0H&*9?5FR}VuGkuqFyrsT8 zmO0OnSD(+Ya+jHZ#nM7>*vbv7)IaV^A8vU+&s|A zT;I_CQGbQt20n*ghh2U4JkisB!cI>I2s=F;0=%uBPNJQ&KS}oQkiYo6X38Tz@2C#? za{Hm}^>bC~%h%5jeO3FRHCvZ<>(svdmgW1?>E})F(tc=#`56y&H`33=9R2*^Evlc0 zyOQ(Gjs8OLA+|5dIkvaIX#K34K4||lkA5IWKY3qsY)4JqJUiNy(oaDsKe@*Y_~LyV z=nq_crtVV~v+wOMgWq=7`$^mD=X^>(M@&B#s9*Dz`uaIb{mfhMy3F*m&ish`koac0Br0E>}y#5x|&uP*LfzIngKhCTQBtK{g*b8b<6sgSP` zOAEm+(-%L#P9UlMcYf=C-KzG#$<9X$Yk{Ty_v_oN&;8iuHP)dYwGB%P!Fg70ntylx zSN?h8ko)%gHBeu9`!%F}8y(5`^dY8*a&F3|=YtKpO0anzsV^m;6_XFnvkPl|8Tpju zd+i_d)=h6V`QZFK*^grR3&DS)o~r#RdLEpir;?)Q6Gjit#|vwf3_Sy+CvUyyqec(T z3m;sd8_!a!dBTJMYy0zM19bt$V-U%57%;c9#1Y%AqeMhitt}rs%oB z=$RtENlSftMoCZJdg-jugL4Jt+#1sJA=1-h^t3iS+3G{iJKRKHYePGqL!a)lev;*6 z@vWF0NcKxE6J~$!&c%!ULf9o)$FlEsw%~;uw-mOBi!0O4I=c{>e0v}dcMd?+*tT`6 zBJFJ6df+QezD4FQSy~9#pT*}g!LAOsxcGMRRdaSA9p6ql%(?dO;sLYzGC+QAz8A*z z&o_RCNY8+!zP|Kr!_Oh(r;qvj$wVH-?Pst0y=473IcFGhOZM|Z&dGjX)JM3>$dY+5>dzVM zH`8-4wO?`l^lpxz$5dCwsZSmq0{f8=iDx9PdOTa9~1zO4Q5 zJm{@0SStJesV9{0FKApL@y#ha^+f7d^QPy64HwvRU;h_V_Vp*L>K820zAk3$>pbmi z-n!$DZj}1txwR6{O8eSua`4M-PT8IRuyWfWuUhu|fbBFde&8EcZovFamKK7BOu6gS zS7-0OY~>=pJ**)P-ltQ~g;jmci!=DVm5ccIu!cDILhu9XZBt7A*?xXCCI3$vJ!_Qz zYDWIclz-m36uh~?&e{JQ~nQt~z?ljBITR;CxD|edtXISoMDTg2> zhpgS!03+W&ts6Z}Y)^ruKK<*YCvTm1&gfYuJsYIw6zSQ#E-=;tyR7Ha>d!Byn4;@i zqpL)^iW$0^sV{l!ZPP|qGxN7wS_t0lV3U)x!-@T7{}=C{WPcg&pIkzJ5ZiD10dwT@ zQ5b*k>=HvQKb3QXq;b4>jo(8&(Y1ZpE=qDUnRr@{7dYECogqHgG zW|{9_neP(IH_Lo==DPwg=kF4Eei!w`dA`t{_q&JtAW%K=K1P{eLp|*NrlrYzC1BZC z138{s6z;^opdPnUkHZ@5|6Qj~EHBn4`j@djJ;>qegQT0WCGA|0bKB^CJtjAw9Jc%B!{EzGL zXiAS8R#lHjDUS)tCu^rBQ+oWiN*JH#3B!2S~AouE!*~9TR#QVDW zsqwad=lc=9Un4wfaMUJ3ke{rJ6J9Ymx^kJ%XZd`IFy^_UwncpR)&)LavignM<_TjR zKWeKJM*Sz}@58P|Z8LlizM{5i!qBUzZHh4LZqznO82x0_HbEHvL)11(80|SZj~{+t zvJVgAi74KOS0bMS%-=`2pKw3nKEeZpdkD`EE)$+4Tq0a2TqHbAxZU9Bwat89=JO`P zJq8zoe(RV0_FqZai<7FCb0gHtilzSd1GE=;aU`|6`lAEPKV+$#>xXg?1{9nEJAvCL z6LKG#Uyj?4cjY?;ANS+6Hs06bc*E1|ughEaeUs8f`|sk7qrH$%c7NR@hb6l@c$3VIXMseBSu$v|Dw_3@1uLJ$@{PEeMa7-Ti27`a+k>aJ)q+(?1_%Kc{1b<}ksUZ`8aLU;UxUVul zvTWGGI_`0Pw8HueTan5+-2YeqiXH-Z@E(t}@3lU4 zoph6Y7$2Nx-)}xC{8krDF0#&SX(1Rk#6F&R;>p`@_Ya0=o_H3B=UEv%F3!yDFIxOp zwYP{b3v2zxS0Q+MCf_W}&+9+`+RC40`E{0$`Ej3*Y2wL?*Lt7fnI@hY;(46W6Sj(g zoDYur!Zw&-@E&d-;U}&AjFjIU`a z5@y^^e4b3v%JKP4xA&)-9pN~f@g-v?F|KPB1=gNg*5wSpk4NJW*7xb;VOnmEx-iW8(?pIypz%%{C)nqPgKjfdPU2b1YNZ$OAEpCt$w7vvb+-Uqg;2tnLGC@ z>S%ZL01wvzTs%=o|1P$JeBUm?)e~O)qwIG!JU7X6)wk$S-QZI-JyBVvl+Vk;_mm`IHDtOTkChIMzx8!~)Awc=-M!h?EM!et1<%{EHc@FE&PS_c@ z&eqy+q2clMVN~=%+uP?kZ*<>()%G?)Js7pr|Gq+dnit=4FKusgBg|hxn&yvwd~9Ev z*)KYMIoS_69)Y~VlaQyJR}Zx5As(UA@0>!93sus#k!ZqWhMpU=;LwuciY zmO%IEyLPwF+QR_(7_zhgb1d}*dZhof@`hWmzf8_I13fjAH{60WiGKy1@%&lWKic<6 zydYqozGb1$#W(xUU#|M!0eSe(SL}Pp&40db&$Ilm*>lk8f8TES!Jq$p)xL*({pZ>q zeY@i1c%4`f=^r2$o)?hZvv9KsJ~`+7s;qt*9V@WI-K&;rd;Euws~>~s3Sa+CX&*b5 zx3r@YM`O=remBnlG0E@KukBsN&++^B3chfzPP%6;)pbnF*czFW!<|uvUX@!|1071& ze`>rf?S#{pu*f?I&C6_;F-m3Z;uQP((esEv@PG4TC{z@z_=-FW7Uoao^G3@FyIO;{cgkAlFSzlcP zgy&IzyD(sK_ao)T86LN6-ud-Y$REeQP7;P(qi*Uo?Uw6zk~oK&Ax!M=yAAgFZkG0> z_SeN{KkqB5ckQ%0&6fJ#2lBo8J9+;7K^vDfF@J#cPR5hDb3R-gnap3B9Gv|Tzk%>N zGxD0If9Tdp_nN$Bm~Yxrzr0EMhk5RI+a@t*+8`lHd6tlK=;7|iqgwO?PEqmboG<)cAT zZNK0APqj-cR!-Ex^4UMR^UIU*8TqO%^7~OsW4~VmP~{iaO0YL^{4(%|as2YK2c_Oc;6;?JpS|?JXjG80{(j-RNPW z$nuNg^SZxkc>MZarGB_^;P04ztl4+sH)pL?0^`7I1yTTt?6h5}{M~;48+x;TxU$V3iJi+uRvo3ek#2bY7N9wPO z-1i&OZ`~WuY|@d(-j@!7At+C*NMbYjUJKUH_u>qQB_6KH$Fr^%A-MS@!J#FZX91WjlNT z@`cw>9-V--|F&|RJQ@^|`lCF?t|b45OIF_4mE`|$nK1c3+yiz{ho|q+IS3KJMCofbxzP zEu)MV%x@Z-247>>g5R;X)Bc~B!S_$X_u->ZUYzcBc;`{CyTM1)Q6~)f$NS}3-*TQF z-tS|%Y+wF81E-{YM7_`#ZC^@(tdm(j|2ti0l>6lDxqc_^seFh2Ti2C0&2#eJ-tmr8 z_+F}CK9T)N%ho^n_F2crVh`=P8&A6Nm)OP3_p+=d-!ItnunPSd?|469=+Ah^`v^mS z#yjQ-Q!hH|gsC4Lvj&U(LV9GH@B2~T9aDq{3?A>eitrHOql7DjCkc-*{{-Pt!lQ(# zPaPwK`}n>>c!Kbd!Q_Y?JMi!c>T_=NA<(}aiWg@!?{T-NALM`cK?35E?u3s=dBHWjcR(r z+JeD_;GkKexIbV!3rDQj_5BPQK zp-vud{WEfM;Cj=}mYs&s>1}Jn!wn8k&KN%qkKgY-`_@2Ck%K+GNxl}*%lU@W_WcFZ z3aS0xVSk*WUH&!pgRUIc4_?6i)C%iQ<*Ywlm($;=hgcGXmq9M!9>A{ui~Bu%9)uOV zkGhZ!%DxGGRS4Q(N8)?kAm8B@_A~ML67?|L@|C#VD<&BiK!03(Wf#UvuKy_nfPH<^ zcCO=>sV67n7wyll75#B?aQ5z|dxGBRFzjJ;70`( z@#!$T$8$QO!{9GEylDLS`mT0N@ulf~`j^GOV4RR|PqlsM_t!l>DPQ&EF+!itgDrY= z={nM?2df<3b-T7B^4kIX5LRc6F1eQg@{ad$IJ>aK_U!DyGGW*UHx6-jL*-SFvM!^& zR9IDVyaV=0;a?H>vJTX*!Y?!Vq8%xJdk-Z1x%LzthCT7+tbVsIPnD1I`Lll!KGXg- z{SUdH41C6RfbBQ71F&a_9YDEBd!`&1&k=P{4zWGx1OC`vK#o4$X+PW1eg5aPeimT| zYD-AxrYwzI963c(2>wPSCEt$-!QR|KT9`4r!007T{0fC0=TLN7prjz9a2O4-|ptUX;h! znbCFX_4qD4L4DwOEh&%lT@9|^YeG2C|LdT0{Mb># z;CuYoB<#+06G#t@B0W5U@7~FJIb0z;0Dcb-5gsyl{P4wupc!!b!Q(r2AwAHEw6|z!vhELgN&k=MN1Bj!2bP9BXG#2g zt5>yys#$JcP5PDixe7e$m?r*p=t0M-rM_L!^$_14t_tk@DYc8wTv7WHSU%@JIKQK{ zp%HO!ynj>fIZ<^^?!n{uV7qn}4rnf+mv$;?x96kWJKb*Y13a{^A?-u>7PiZMD1SRT z#}3j?9f4lB_8A?4UW^@NJ3WH-5x3KWY^My2i4H-}A~(Mr+n3u-f5L0oE-yMWx}sy$ zvm;LbsP{Xd?-9rMk(-x}%UeTv$6b4cK8MGPR&dl&w)bN*Y`4eRZr{vyJ3E8?_r&+% zi$HIjzLYKOAAygRF-dEc$}jm{qTKrz4MBXL-a~*dnO}MlzPkp32_K60+urwZB-SU(9~~P&dNJ_}SCH!=;J=pk zaJpz8jJ=KRe1`VL%~xIO>=NzArL-SzKI&4`w;P{@m!dp3ALZ+p*$a-ZRA04ZH@^43 z!#IrgLcUX#ar5Xp&e&ux7$>Fp%wC-Jyc6w36?AL=gLx;~i|c4Fj?rEmfxQrYuyz(5 zqJ8L2+XvS^huB`BABlZ{ekAq*`f;ZALC*0fUe-^caY+j?go zHN21eg*hLr?|uF5`-MTK;DNk#zV=_g_KDxq?>_JkpMC1^ZtNG1 z_rsh6L+b9A@z;HR^3S^e2=_Ah^|dPfzP}%1&sT-+lk3)R%epnv+A8{YDSuPE*`9Ni z6p2r=ME2u?UpKE6?>AyxpzN`Jk=JTULH+pjZ0|lGdHVNPRn&|0D6`o&$Vt9VF_; z{(iS_&*!J4^0*4$YyRiX3jHU`toM?ogR-wpNC?8WV?WO6@}H;qd2g=FA6ovTz3;Sw z+`3|G!?O+6`V=zmh@8K16!c{Ft(5RQWV}aaAB4z9+h5vm2!${GNj&CHEoDDEc+UCu zz4EQ)`+P0vIBwjsncVZ@+ajy)1=#P}qNRo4sg}{lR~LL*e|h^?t}r}x;+ZF&KEreN z>!3InL)L@9?+%=g5fu%c=Rcu6Ci_2du0^u{W6AO-`#->uBIVfrU zdY$OUrHo%`ZNR;0s_*V6O(0pPxCBo%?o{!(`7`GqUT_IA#`EXm7wYfS9^_NJrB~x` z#oJm?Ee>q8LfhG?P6O?JNV>A-cU;iprUy8OL(ZGC{Av%C^6|abSi$N3%=J_0cITJd&i%i6 z`}=lTx$UGI`{1`LSNc!X{~Yuyq&(yH+yXhpablh5ACmWgL-wojbDFrphOfg8u^&y| zBcEF@*Z#x(w4U9(op0w=f5fjfdX+C%pU1@lID0hM07K!+ZARLy*1xOYpMF8>cb4sR z#?r0sJDXyA&pQX^M`|al@Jq#CVtfBA_XOUil4tXekxYJoZFYnPe1v2PwKpMZU5T7KWhB+6VCwoc?bCc9cROjxT_vN z9agbX?^K4Lo)katF@E|;M-TaNely~b<=o{Ap7s=;6NaZqJnh8ufJ{9%Q7%_|`<}F( z-TjL1Fu61lPqU?kAfjBr&)LXDj;V^}(%Oh~S{y&x&c$3M{(#dT&rVo-K({0D3=`SlE*HR72~wQn7fDLub!csTB>t&=aT zBb<%?ih6qbi+xfuFKqRr`YU2N3;i9+)N5LQ_k8qpdUwF|V{8obJ*^Fg40is%FK5Gh zg}pX;G~0N&$K>ez^})th*au;aa}Zt?>7L)`&$Cwr5~XEn8~fv zK9_mJ7316O7fkjM7MV{fOny;!J7M&5vQHT>hMzK@)C9P;X65f}f&Z=koBWgYS2&Ws z9H!WA+&-5(be>}l^A=$(JFhW8y~-O0{PcRQpGoTH1kx(_mvwp2SA~3Jy_zuOC+h-) zLBGuR5C&gvzh+nk-x4Rl_mE4}F+>=0i#jR>`}~dw{eE1j>VdY0y`L4nt0Sa)l=3ffIO&L5(#B)4lFWh}4pEW#7q-UA*yf=fVhkm!)ck}mF ze|_{{ao&|re~JEYUj2Q{$}KTJ&dn+W*IT(x?qLn}HQe%nP4W+GsMq0^_t|sRJN?Ny z!1!)1uynW!=Y+U;fIu4~V5e3SOP$LR6pHY9qb{i$ouSDQXms7FJV`rr3c z5A*b4(%SO?^Y(kUrD)eAK3Q& z&h~m*O6h6Y^t829{P5PYBXvwx56 z?JrMHzi0ko+TJ=ny(p!plPNu&BJA{Zny}N;8Nl1>DaXw}uN|d*mh)TK|Ijb$qJD~< zG{2}ZYezSD-mtTyw|q|hqJZ^;cx7Kd*LdD=o*n&yjhDFpu!j9c68~a!-5va*6`_AC zJ9?h!=ZeMu%YGwE3&Ec{eWhIK4|GvKYqS@0^ar|VM@8QH3+HHGPJsX63u#BWo?Zw5 z%RV*pi(BQqHRM}{pS-8t;HaB;_B0b_xqF%jv;ClY#eaq#==za=568|ukF)Q!--JH& z8|>Hb67}I0nIKVr@jBB7oF^c3nq2(v7pM<;^PAV2J}gqM3rMTrC(#G+llaNb?=3^_ zRp%F%4AyyGpD*Vx>+{X`iwwlyZ@yn-D1N^Aevyhj_xY>m=*y@7N&DS8`I@&>;^IwT z{QN^Hzjf5)iSrs|-pc$>|NDOWt$Ff%iORFuPrnuCH_CaDR<6#A`uxkhwDB|Ch5a`A z-j{={)AId?EmghHpX!Y-m+%DYYxu$i`_8Sm6av6ujs5JdqU9g!;<)r4To*l$dfeM* z`CS}{tb-G#9`~}o<8dD9TjpQU9v%gIw(~rE;QYfv@E|MKm*YfA?)yycla$*;M(!h& zd)|Ec<4x}FyvQ+t7yRRn9lL{^D%q%lY=Gm-6jI{kV1AowPHFo#?P~efdt&PPlWTTUEZ*DYl1c zwujp+_4CazpF1b|S1sQR^UX5f_W;umi{-f|eNHsxn0rn%<(GR-H2U3SpEeArTX(** z;~CY@qDao2*X7HhN#~2aI8=?qlKl?mx2qlduTAmz=+FK9=5N=mS}aa$P3M87-D(pK zPpn&eQTzSiHLVxOLH4V1TmZRA{0?EXJGbvk_G?+Ybo;%=s{IC!ySUFP=fxcy$3L=t zA7?-1<~@$HeY<&& z*{(HITrRM9&yw2 zLEgjT>%&G$E^{WAfbD7{BbPPGC3pVcFl!#_y&(+r_M;(1|P&8rOw{ag8upZbip zvmw%5v9u5jTI$PdAyrSmZ}M8CoEI|nRA)Wq$?I~fr#kb`v!3>Yjw;qSoIVXUJlOQi zr>C9u=jPR(XY>@wM|+0;Ce~lxy!}C=r-}KSEiD8WX7H?}~ z(N5U;H}J>8U9^An(|2~N)lT-y#phLX{x_M2{ledB`8x`$37n(4Y9N zCXey9YY1cfG2RBlEc-tBewyzW3{K8xUnD%q_p5{_2(J+yCA>^{#Ng<)6+R#0^C7~h zr>Jd!F#MdTt)DRTIcn=847(V$^$?yUzB1t{!X?7fgo}h{2&4Waj*xIO->(p6{atB~ zCEo9!GWyxicI3uQKfGD{r2)2s{*33Iltm6KCdFx^|TePSG?;wkps__A8foQ{F|e! zpDXaai*Mc8rK<|bK0MhEYj8NXYWnZny(Ph~{ZQUK#z##4%V@v#B}-kLYUUjJE1(}? ze6BpsSq-lso$A!tJ+c zdxw3H_#MNq-@HTpH;Z1dtYpP+hH?O{FkSy~8g zwS1f8&$x&@dvc-SDG^VZc$B)$bZNZOsW;nWi$l$u2kJI_{lqswd}4g%m#%l8P8~m~ z-McJxUbQxTmD8^o-Wijx%w+-_+S2lh0}FL6eu2fkd=^*;Lc)7kr0;u$bJ(XpXz@m;KTAl3hjRk80o*%t(b z^6AoXnr~P0&S$&E>McE9+iP_C_%^s6`pF!7^?Jjz!F8H|cJKo5+ff3)-F=oO^I)Tp zH|Mq7zR}C81Ez;B>6oMf!{09?%)jM^2~eVaDL39%fVZFlBI34}Zw~t{%$3&-ukL zo)_o1oPK!J+ivyd{Pn1}8L%=bKNnw?SwGudw)bw`A--3pYLD$4kTtINyK&$iYv1eC z&oxVZ{a&Gd=k@a!sJ!P^nSTZ8|Bu$smU7|&Uign<_o_?eYuVE6^vJFAs9oQ3o$EZr zW$ODa*SXGHvU+y&B-*Yvt#fg`cKAsjx9^g;Ex@u4Yx?EapW0!Gr?=F>q+ zJ9vIi@*e$N*lA=X=Ld6KIoR+jw6mOjA%)-w-p6r4eTFEBTk9vhj&}cZ$DyJ>4bKOi z$$6l(6Z@nh@CG`1-Oy`{3d&-uqeY{}S(Sdff zi`t~6$^8$|FJJ!JzO`LnzGb_Xh9SQ~@PATzJ891oy`3WL^mdx?2K0Cr#{t{M2@Qen zbB8Ryo0q<`>y(N9V&Wvx-+fk&FOR8|{yy9EcbfG$WvT!D1oby>Tzrw~?;Tm^>*G+_!)t*#$RQaWTHE#$9!@yNdM%t#4S}730g=|9Sb&y_0)$ zpC>ILt-rs|2Rb?T&YU@O=FFKh=bo8qkCET^iTt*M?hZ*4&N(6ncKfHue&cnP`My#u z{BqzQos#~v^B;u07sszxGrtB7LVgcPns8vxM8?fC7*BZbe=pGa%*=z)xMe*@AejH6 z=Z)yRr{jmmM^h8;p;res2tokDpJles6}H zG)ijscU_M0@e^6s)uVi!rpM9vsEHXLuafam1G;M^B|j4Eb=ceU6z}Om&$FBk%laj3 zpBX*=d8N;n(^~28K#%ME;NQo1)b>XgkS{zg2OR|UCUSs)p`s%m*p>sOU0RYw&6sp}4NPEqiE>|`m&^ASsY zGC%6SnZkF>?~?_{M4VTqL)%r}tnI})({8!iKmPgB<@IsJ)CpE?Wslj*P z5uq>m4y=3#z5@^8J>+5z<6*{Qz5{QT@ih**CnQZcCn#V2xGJTysmR#(=!cB9r>Q8s zF9rQJI3{?SDrVl7LUB0IuXAlDW1Jyg(&v9U4HWwM{Kxv%=YKim2>bl({^z(o`}@f_ z!-JZizjqYS`eUZ=?Em#IJT5UlPDx1t^ZoY4#-q4{SkJD6y!-khYVV9d-v1Nw{uPdk z9vnlzk4S2_cPNLvf2mK_vnW5L>5KGtnfrKx_^(445B0E*rvNtsc2uvc6Gq}~FQH*sgXz<=li>{B-JSHU>JJnP48VV*VTKbyGpCBnX7ejNm#&((2K zRzU-WerA64&jrgM-;!#1AIz6H7tDWOgZEm0(@LBRrf6wgnfhuqpC2Et^J_!Ce&-=M zgFR3p`MfH$&!6vRwj<2B^YQkB>N(TCWWGj`*!|jtel>C7SIRz#F7!*cqzPwDL>_uj z&cubkMauP{TrbMKPWv-rcg$^ExZNIJ=W?9EO!srS`+J4YY$tVooAt5sIk=Zt`Rw}< z2Vk$^d}10W&@%;+nmB9Pk1lxAMbdo~FH@`i`6A~XI-f}DDJ$1Fz+fGFu2f{VyB+;u z;(E`J@!5g?XqVK^--z)U_r32l(d*49->B(+v}-lw)a;x0{jZQy-~X!o3;eIfp3!y% z`n?c*HTt~-aHFKIKc6%UY`3G1+A-67d--R%f9pVhy`%}}2MYUs7p1SM=qsp4>vjD& z@h{8ssNY59rm5mz<$d6HQFt@%#lEq)UB~@Em(Ewk&44=qtG&}Xpx-Cc#oOh5%Rsxl zZ!NwN`FoMS2XG(YUV%3c=y$gpi~9ub9MJD<>EaIy+=6qAT8ke*`AU`7;w=Ju_enzh z(siym56>M?f00+Ldc@c-Ua|JSnYX;+6!5Cv_KH=%x&zHpk5^oc_w|5l0INKi_)zbT zIy|pKzIwnZz#V{V0Cxed2HY)hdbfV3NjTR_e~-q-F>1SPc`|W~ci&6%VkC|c?cO2P zIKet??&269x}WW-36;lrj$>@dFH?S=k&@KJ)3LsMXq@90bpwgbuY+vw-mU!Le9!&| zkGm=@6HrAx?A`j_2&xTK{xaL@8^W?k7>UhLELB`_kTv%qWhW% zW_tDt-}?k#GXG)3jrI#{%TEu_*IDe-wK5)hm9C*4Nok+2!h>TGd_%w&XLnvC_=bUR z2>9+%JkS$#Znx?U4M%of$~aV-W~ZGqwS+MeJZcXF=l6Xyf~SY+x+kD3 zEHH7N+0RH`gLvoPzc|!B@U=0-*O#IFgTmK7@U>skgaf-x&5=laB%L=U`D{K` z=HTP7@KNpa--kHV=bs}znI#T&2z>qT5MOyFXL;=sz7Bz}!{F;1>FtY)L;cM!vdilm zK9Nnoo+b5rt8~3$kH4_oSH6EXcxt6x-krJ*%7$+t&x@gXBN{)N68daBBfS2y^kLk3 za=q|-1pFQYzfXzaYlJ?0@M_j9`r~sh`9v-5x7C8D5&EkcdR6T*o31+G`9!GyjlQZ8 zJaxcRFKMoLHq~bAH?CB^R#j_zd_Tgl;`8HFM+6SyBgX^|;#7wO4&o#K2IXtS9wGm< z;J4cqmV99Pi#En7$0$Qs;3Em#c?VA)h;Libp1OAK)9PsB0C~x>vqWJGpIXM>bqctRFZ0DQ!(I0Z0S~ z=6faNGH!l;PVFz0uS9!O;FtOxT6bw*1~uy|6F*diScH_31MA0pNR?|GY@?G~`_?a_i#zTJT=+(0+S;@5gUwxgdT+ z^9Au6#Blm~tEO~ZEKvfzoN;(M|G6(&9A2f+75HaY3T(?w0rZ54Bb9jS!9tAl0!i)s zQ;6e;TVFJbo^VipO8xA|Q5?s?m^h9PKErz8pwjD~?~6EN-!FSe+7*0fE`gkAzem3_ ztA2C`9myB_ojKDX<7+nYqvbP>Yg*{iFB(5OCeH)89S5xKa4RMN8@c7x4asp%xouQ^ za7s$@&wYHHIy?foT`l$4ayUu-$n%?#+gHf^b^!f1DXE=*9C91Co;_LQb^_(cH9d~x zb|gk_*NNPYfbKC#XNn&^NOl$T%Y2_b$Z>VEh$o5T*LT>?ADC1*@Xxu!c!-RbmpXn_ z#}ChYpA`F0?XY0pGvfo}(bwy>B3Hrqr~_=qM?GLOJ{lFyIX-kAp8Ii;Tb~bw#>HPt zKMzAbh9tGeMPH6_@ex_i^`m^BrpM8^=!qE@-!jX7 zlq-nTJB4*yoFA@9>YakVa8U2vuoGYh&3Rk}_?$DY0{LR&D$M&D8UMz=6OF4d_0?*= zNL+udYvL=;=KhVG=dSli z+w#?gawfiFv6SnATy&#fH)y{eH}MtS!f&1*);-JZR6f7>_=+yU8^l*sYroE8d_^Pr z!^Bto@E-Qt)T4Zzru)&Z<0!tOhT1XHdcH#Rehuia zl{DcbR33f3|5C+Qj7dE~e8q^so*!Q^3|Q@m&H?qS1@RT?cMIYxCXl~J#fo36}J=Jzt8a%>xJ*R<122P6TZ(~d_{xsy-)go zHt`j4cIxRe9*#V|BF_GNx!{Y5uh<~!!!h?B(RsESw^gO<20F+05a*zK07b8O>-$u{ z3}`v_A2xElLk2L}U41k^vAuEkr^zq-NVATMk2LDI(B-IRrlVrYiZ7MF-J7HLq>k`B zXW?z9de}eRMLSO5?VWoG=(9HDSD%A>}LDqYNpfjU% z2Jsbdk&N{HPv#?YKUp&G3VCksdH1Rs<-PAug&#I@58;5;>+{W`<8L1$It;%+M??Nw zD`opekQ*Cee^fyx9L29{m9qTbC$ygC9d^=j2qfVsOg}NqjXw3%G{4_ z&Yeg&)l_;q-fq~Zaek-wOS^TQLGjHZ*9m7y1kWMRXYSv;Q|LPc`lckE>71Mn9&h&u zIypBj?!L#{gpLlWpU&+79j8R-XhwVD&bi$qc#OT?4m<@BJoUg6caK)5;4yZ)+WqD` zmb)MQa31<$sp9u=Zbk6@cue?0`_zJ?o5k3{>_6M^L|7=Exy!X9wruv{#*5R=8xg?6xwOz z{SaW&PX_^OKbZ6MJ2Ae}r3-|v^y%6j+J~t5eSTs5R$+V;Q3uh_tJ3;{b3BwD!$<$V zzsv!_S5{sx<$~`l8wIx8T}|@9ek9{x_|`bJbI`1>t3_Yg`BTtSc7K_EVmbP{*cp}3 zn<-7h?K`bR=x~$TF1K*HJdEBTuO0Uz+754vjx+Zo%2#hoxA4#Xi1OXr(gRrg#oN*= z@Ti7^kX?sTLaX8ao_1%LiMV<((%8uw`f23_8rcfia)36Jmq`rclK(1KY;O& zQT{g-{Vkqj++?&rnuOZd({Xd|1xIGJ) z&!s9ScK&+Oe_pA|ll{D1o~zv1&zt3WRBndlxwga3KP2>MyY1&3Z)W7ue$IN$*3U-% z?x8lg`wPLh0!f(c#k5jc$BEA7*HZGFF_EZ@8Sj_pl-&hYv# zlfGHli+NA;xkZZK#>ey-d|YlT;j!Pd9;JA4zn(_IOL0nQM~$Q$7p*%4h1~A4autAt zqjtTGkNHgZqWk#zIBp$whYR^K=OggGXsZ6Or(qFJ!wDE4*smG9hyFqQNccY5hJ2KR zzdLx3a{f8{=${H{hn$}}AN4oLR{)j+^*hoz5u*Q%95m!@ipW8I=zH-J>RNYD{eDzl z)*Ck8YhicA+3jVl_XpGuNcIEPD}N&W%kvA%scY5?6}JjK-dg2fuwK|G`R#hELv+4e z=u|%G(k3G^;$Dd&(->0YlGKbO2Vla+j!o z+pDSe;fQ*9yYG9=u3kTdpU-ZxeU( zVd3{A_%#vX_Zavcrx*4yzX!)reoWH=Z8x3&t@QhG%iy#B{Z8ji6X$5=OFEB7%F((N zD_N((a``~|Z`?Y_9@2J{8!9I2EAOF0|0UaOayi0$*bGpvwZU%k_|NE)p zcl~ow6u*hvH1{eQ`_u1#e}DQZ)8v`%*^9_?2jtnrSF96x?n1wINNV$?8S)(Gvt z(Twu#kc)SQ`d9f9+yjPj>f5@9yuG=ia(Hz+HfA1@7Fh{+jeUb&R*{?~wPc>tILj??ZmoTkigTz^b=4?;jHQ z#&zAmr~Zuex_1lQvcDJjZWGwuuYRZWx+?|t&X z1!F1J?DEmuwd}{Vugb63zpW@zD>tG3(;raU9;@ z5c<7eQd@3%AvbZ~-GB90tOxs0zE{)z7!Uq;cZ>)BTmy`U)!+}#nF-D{(D62x`mmeY zF_S(#PxN6o=UHbR>*5-5$gBLuZ%0d=_u=M z(t1y=l?q48QSS;(d7j`JmlvU4$xU?QdBX_}^2EM(fjMaSg{Bw`rtmWKJjLXtV(O+&S z#%t*WU?ZpFfKgxRn8JO)1N@}V)lS}P@YDk~c+?MR+C}GR>HCc0D=T_V5C-SNn z^fs#A^wcaNJ*sloaH8T(I5-b*CHlQe^{e?lW%$JWoyITl+r3cf@b>6@-g$bJJn;7D zJl}b`R_yIj{ndGTCElwZGv^<8d!UyQZ%2L&)pr9*k5{hsG$ah&-%z=}5d7%W_v~+C zI?ebscAC+1-oAFhYwn4n`(6ZYAbH|)B!7x`Z;Bx5PmE{xZpaVl@ar*r5$Ooz(A(0e z^(<_bwDUahWqloB@MV2HVC9QjgL2k^bjgMTDwzupJ!-iP+L2)S~eyR<)!uJtua z*Q#1gjUUqIE8-RW`#h^9pL>_mW%faK-i3ZFO)35NYI{0ApzU<`k7&8IXxF()pKH<; zMxUvl*K|F4oE-pIAhAaRjN1beEj{z zTc!Gw^U3#)RjNNZzQ*=r&^#dc(xpF@d6)GC4_Uf5Sm)sZAxHQ>M&p$34HkWA^cLMq zDdp+@V0muaFH_>DJgE8==NF|*zYSRBBVGC}z}kQ5(gOl}cTQ@$a6;2PC(plcLRPDu#V4k=`i44lpg}z2e=AWc)<{t7&>$RMj&sNt+ z#~HnA_sapc$1?I-^elhBa|fHH9UMNlE?rD5LEm|DC?CI7L#U*AkAxHr*^wyuR#t)2T{4{mXQo z{%O)r#25OH_%NYzZ0wRPlLC8N#;3`5x^&8?Cne<$3C#C*^!5e#jeOg5$oMMNap-N) z_IX=$9NB#3@xu7R^nU4IcuX#&T4`P%ltk=U?g!4l@8Y0-*6%zOaa_lkMHheHJYd1h zhvnbm{y=*nkHLMzM*fr!|2N>vVN9iaS!d@`RCR99>1q%VIg2l;|)Rkj2wGgY6YLo=deGN`NQq}^HFN&V1d$~aWwVqNUhh{ zXQp0rpO&f5+_Uc6e|w2Yp%Z+-dc)^~Z%^ttHTICQ*dYO(p9Gy~ z_blo3B6vQoa=RY-`p#ypZ(+NnZl}`aYBi3V55AO#_(GH6G(Pj>NI!2&hvL~kE@{A* zI>3f6^?;QxZe2>syKh!LxW=9}b`b31g!4hAe_xH1_tw`+>YfC?v5aom z|DEdB@%E{|$9)Lx*{J>?_hHDv9`*0I4|ge@dwPJkTj2DbTLJd~-V3-Fa5vySlYqzg{FvSBt4?}2b5o=M+Ek^)M#2&jrZDbWM2x* z`j92foF7hpPyabH+(SGJ`9~E`X`!UHe&P5Ed!8xe@0ai+v3{KR6ziF4)r(lK@_mV{ zr|Db^c~0L!S*-nalUoh>m#6e?n^OKWZoT2waA~3!<0lxu>x5qSBFO1ckKcLHMEmS%8ux<|OJ45ShG2>O`*=TJQd zZN<3lACdR&0)6k^tn`|Dhu!;uch3Q>=YDOMw`UTt^55Gt0a(j>d&U)BP%RHScj)uc zhc#WWz;R^#vIpxIf>ZR0@QU4K=M(#C57sY~Pu4Gcuzn$U+WKXW+Fcx<%BtDh;|Lu# zK3TWynG(6@d@R@A9;{pTjLGxSetJkhdhN)%W#NcCPp{H-M7mVh59vFHq@@IzjFyA65^b{WN4 zf*xbHL4HbM&kR7WEW3<*(%3_+m-uJwC1V$PRiL9v*N3(qN`>?g+d1a^b=E_N##j%f zgnqVDSpOto_mclz=ylDx8@F=p#DB`fq$G_Wj5~yWW}fy`Y@G%QwBURR=LzLcrc%;` z^O)wxeT(K?X@fV`pHv~m$lq)1rN2?UM&GQ__dXuuhcI*!%s+48n6|40aH;l#X>VsC z^wC03R(Mg7S&JD22Wtc$&U|-=_TW}lcN z^Nox9$ZWh5_}*sAiyeph-oM~Dj|pvOW>Uw^IV#TyCneR}bg+DxI9mHVOf~rh%zDk} zqvg5ozb1c1^)1>$#v8f+8h(AQA1YJidwDVER{sc7%JoiA%6$9gf6s6}U<>Cazl7CK z%d!;s|qq;xv3ow0k zKhWou`=>u&N6*c^tI=~5!KkqhjomSz&)JThAbvBx6?anq!5`I-f0Ek6do>^Xl}>K{ zqlXw;`pZY3C@a_RA;$hSaRA0&Wy_8Dd1xIM7q9XrksH-V?jvfin0>S6ymG?_vrmfY z`PvsAeVXaHe^vjvP36z4+`K*=0o2_fqbxh zGA8ct-B0mcp!3!!$pQa1P|8(A_BYW(Lgg&4xSq4o_-d2X&BOktd>vKp5_#;H{Y?p{ zSsr+Ma??A^{K{x~wj-E-Oy~K;Uy9=fzlJ4E=07RtOedVTOM%f_gK~BBXP6J%?i4*| zd>g3U4bBBpz}zp-ZzF{CW4%J;3T+H8KNb4a z_mg$YyVg~|l{8GBT`#Fw`aaPk`Iv5YfiT^*M7KMr&y!+(uzgp?)kWG%=MYPIE_ac% zSNl0if2EXbX6^)Kt8r(UN0I`Ap(*CFXIH`A{v^o#K`n0X_a|ED7NHotlaAN#-K=Hi9z03<@8r#K6VKeEe*&rz-Bc`kJREw87jiW$dK zxO_jA56+=3mvRxiM!Ve^y^4FEYz`X7jK|DBzFl*b$_>N((iF@(x)Ho~F_tWf~avk?j`so#dSK}Yu%mEp13Fk9{ zH@;sq?$GX+dvf&4xzqaPcsuX?UX}AK@^0>nj=PWTIo3mw`=TGr!N)$~x6Q{bIrzA6 zCO+;}`LWksGwP>Y>n>6%)ASSh(fQ}=r%J7d_1HAMRHF7#!r7XWk9VZH2`c4w3>wlhT^;JMA$H|F50oEH%4|6m@uNGkAF>Aopj&xZBS zM|rz&ZN9X+@Hb;5U> z-v#`=*_zkl;)T;9M+G83Zl(}&^qL61cGABrkI#k9n`euZ=dmq153t9wEBk(i>kFFB!_SFGT+_?&kf~O96>VfB!2t75x^Vv|liqNjh1y2p|)B=y% zbv8Yfz!P^K|0RN_5_qa5<#ETFBYnYRLYH^8;`QLSFzbKvyQ{oZHA+hR-$Z`|`{3&U zj|kr2y!kPKgY)Kx1P;!d51+^1oKqgZ#q9`<+u5AQUjjc`+!BuY`4;X zfo(Y}Avt4v)||&bHOBU5O52$!k<`v#0J)5_m;UEH+@FOgU!dtg3j9(z3-&qH$aC_` z;yvtMf1i}vzdZl^S8MxXCVs~qPmR;}B+1XuPwIS7l*_B@GkNq~$$!3K>FcD=?`wZF zY4+c6{?t=f-OhO4@b&*LF#B}u_OYMc-bcXm4C|v;KS_KUnEF31OY@_&E2lgSLVi|o zDYf4ToxgA1$eX{99dVofdJp%exr30C7(6-4?+w)tyWcMd|B7F)`Ce8YD#uEUehqoM zh0kWclV1+|BNNUJzaQ-WA-Ry}O{eNUdhQRqpWML`ynjSemRtU@ez*IL?MSx5JVK=iI(r@Y(&%{p)5lANO;Q*yWH*tiO`x-dUW_9O-w&shha-gfk{| z+4aVxMD5;%)lJc`0#qsk`MQaPdT;C61^EW(>7SA}2 zbU-JZ`?S5joKok}FObu5z(!6d02?`FuLR}KDW@IBTuw(qa{5POET{T?m(GEd{<8VV z=Wb+^(*+`@!|3lJO^+iv?TeAqwIZi|pj*FBC!EtE_c||_@2T@Cr=L@M9P+5+*2IO- zxpg5q?PjsF_l<(5?IFi%$7&(3ZA6TEZgYFJV6V9h}emsWybXQh6{jt*L>(ge)q0UEcMLS?4 zryYQeoOUUkQ%=?IaV+GsF(jX@BA?CZr$$L_`K-$!pKllWtVj7eO^+k_tcj7&eIlPV zpu1MmgtKj42;U9Ev36kj;w`-VLJIx+qGL08BgewFlRH|*iAh&|j6dpORY zzLfiOpdIBkPATEM1$>!quV%Z~qAx^OvC!2IynPY6dO%m4fBF=mOXIHS{3j`&aB74u zTV5MO^)68PM!k)Zdh1Yc+;^aSskaX0>rwBkpeHcj%=x_*;Pbg^zn4|8H%h;kvE`R= zbp2({)pBF+wE&(aHBz3=^*hXeMDMjQ_0?*=*n2IyR4$iDwqtUyMG5qmx!2h<>DL|_7C-bna8b;li++I)lb3sLh26)&KJ^kMR2|l`~jH}>Br!n zmPYMY#2fg2hjJZXzTcs|K;*-}zqDLHig(s}T>qS*SILXOk8-ZScDoOvAI*6&H8M^P zp&t)QYUiKCIEnlIb1sjQ!2>8isp)>SYqjbbzg??C?OGjb*XmHae7`XG=lhM1!kAW#{ZsJXiofzEHqIO|$PfH*2 zr+`=WV{lJPFWy(k&@KJu`xgXiA1kqhV#%4 zQhP@4mhAF<_?OS{IGs{DGKx1E|4R&@pNao9`)WMs%OGC=kl>+nCp0y2!BvXa=IaR4 zkx@DrAJfHjf0pPbf1Z>N;uqep_3s5ABK=7S=oi>A3pIa)-@nmzM)xu%8_ZqRXZPKvWn+h1_5@V!;u+v8dE3dSXmZ1->5OTMm5P5q#~y7w32Rw&3dkzINcNP&^lkc+mGF^@|*f`0LL< zMe-bpzg{D9?A@t;8(U5*slE0-m|C_QLUCNdymPk7|A4lWzt4xucX9bp+)Yqk$FqlX zuCmebeZmvOai1sj^LKsoMG~uYdZ1b%haWirIxBf!#v;$8E@O)J0wegT!Z&q>3 zw+g-<;Ohmxe!&;+cN;(ZAz6>a-B)(A;B6HCQv8af2}do(*~gbxOF53CF#P}Zcc=3| zEU){f$=UH1$NaeJnb3H$`PvS?#_8v`YX5_;9pLL0=`T;GyBXs2D8+6BILgRgHC1Ytcjo495}*Zv%Q{{H@K`t>ZS-&>UudTcof z%l(&coeiEs!Q;2eBO3pk68dbqde~obn>?0ytT_MA|B!sS13f}V@V!I* zwKhHzw;LC4`$NIg2>sOz{iSxJji(NJH7-u}TY{$!coNOP)M_iojCxt(K=&ycBbMc4#i;^$l>{kA* zIw*V!{Gt=e?>UQ;J*4>WQu&+vIN54J9Qa9JFR(3V9M{eI(8S5!^Cat~TF6z6q;~#F z$Yord>|Zk92dh!O68uVue)IjK@GJU$U*F%UdXUb|Lw?ogtk32vPL|__XY!vu^EmNk zpaktoNt#QZ63&^zZ>E3dc+oFNJNf<0@uK7Mp8Jn~Y`@GLFZ#6P3;eDM)4p$!uW9{9 z^Bq_~_fMb-In!G2tBY&$!fgwj<6l)_7tz})eE zI{&$+G-|)-wBz67cl7s=927cc6PH>5Jz?TfUm<#;P}`9ykkpp5Df%A9@*20kI9c?B zgYr}O4&ewt13jU93iO2X(f>Y#d(8arL%!aq(|+;wN&Ndm%X6FlgGB#K zdSIRCfrCnK=8&Wb=bh8)d#U36+)S;ETXT<8GOteL!KRz-EFRaNn{iyLB1t&6E4_YP z)tKN3 zf0L5h`Ntu*aqHQ~ZsYlF0_DdwJ&xk5Mq=dl`H%DbH3GWFBuzNyMC5*i>?*bgOg#Tx z!mlxrJNgbFsm(7FUl7NyzhHhv;tO;fnz->`ygY+(g!edSsHsTjGcykc-yKz7G*ygB zxnTZN*rt=mg&99QKCaI?KGa?@^PgK$D{>W#4;^=bUa!Y{Gd@&L=ho{w56}I$s1$mF zaj{Zhn;%1=adEZu^DyLNNK!k0UygBcxr~c`l<(8@I2so{G2`OBGA?>Rcdw)g=hHeb z`QOD=55DyA+p6DLK8v!-C-&R<`nwtOr}O#T#l@y{+#dsbqbnqzj>u;>`l(A&TRz)! z$megw-_U{b?V27(^4S<8pBIXJHiGVENfS=TyvQe=gNy!8iF^fdv8M{`@6*EkZsO(| z^3Rg@cK=L;=9OnS-gnSJyQU)Z3diqc`|k74+@Avnl|I}%NaxT9U+j7(L-jr(^&UXE z$wo!|}P^&FM&d5qVqM1Pogy)`mUtI;2o zlG@|Cgz~d~i1XLJUi5tm2O z!FTm4DVU9p{sAgK7*}4;Q8Dp^4f(pRxAE1(|76a2`==2aAGlXLpyLA(I;unEp5StW zHPT*M-$mM;qWszP%42)k?oj_P`Aem|@$=gBc5pwWm7k0+Zhbr?_&PA2yCh9GMUi$i zGroHQd~trY2L+${vnZY(_zEKU>Iomy75AO$Ucm#u8SYsQ{J?tzU)(t??(ItFsJdgs z56mOT|K3}!?|pwNKCmbAR6e}*2Sx6^eTP*4?FGKmP>$#pd^+5m(WSw2>b}EXownCa zYU*uN|D@Z1d~~iHiMW5yVEBA*bHAIn?||0-h?e&-4$b-AJie&9;Ql=g7jSZ(A0EP! za9)spN}l)@A+Yl_9Z%l+5vjlPG>v!n){g}ShOXc|dA)zn+c>4|-=X|S=3gX;gZs{U0=p%3lG@{0^x+P9EZ^_X62I1jwi9|anXmX=+~*Y;FVXKNs)q)(UGC7N z(2;OfDjkE35&cvP{j~HNU4wB(K7Wyp3st&g+}0}IOda%7kI-qirz4~nPZPb^g>oH{ zdYe&i-1pW+s&`PnUD8PVL*Jw6yOHEeIQrqlrmq+D89$^W^z{LMucUToh^N?>7PebKHcNy`xFHl(J$`28vC9q)>HmHPkHNAZtqgP;OpTt6izso zK(2M%(7r|;9~m7dbl-}=bngM4V_vUlW^(8pfo?7D@6T5Gb1ORVzE|Hb=~B3=Php+* zL{A94m?y}8to1^-ZyjN5HY<9(mSl&bNMdqAex=&N_4rn{*J_*3uUb;^Lu=0uSRRY{EsfT+ds9yjd z#CzpG-De3{`C;}S*z~7}etX@+`jzL?|9q6%jqh^idvvaGYWClH>pMhF?0Uj_`v&pf zpuN7{R(UyEy`6CWT-yu1AAB!R{<#%(kbC8?TcPs|o&Tui;4h+iN#WRWa7f2N#2>4C zHv3_{D(wdseha#XM)9ItcpSL-e_Y@D z{g3gyM)hJ@xgrd{7im1P&1W7*@%uZ~h#QU!{lcX#>BN9y*5+u+rn}=K-b1 z$Ytli0nL{w6ug07>VV3>@0UWm%c)}e`FafT8onL_zkEH0bJWYq%cPuXcY)hr?3ClXn&Y{E}AO7D({2uk_y{=9fqC5OBm)~(I2tiA3?tl zOKRuuhn*8=|2=yP+d2IxKO||w*#N#n4?s^f6@kzGyr%usRHXN4`|ZO1ub^Gp?gors zcR=lgbg`}rX`YdON*BAz&jGa?(*Ax=*blxxMC}N#xLxuG`xvJLkMT3nz6`*sKh5{- zbn$xBGlqIE1w0N|^)KxUMEP30?*UvRuyx@2Js;%$ADl$_2~GDa{ej(tapT)f z&=-(jF!S-w4M&U@Ue`RzDx?rBfEo$hnTc<r{+ElhWY2h4)xX#Nqn7m zvOaIXy`a8d;B?5tPJO?C{1(&j;yizYm*#E7x3OQ-H&4f#aMYgcEP{Wasz>sf?`~dI zH{ePs=v8$I>=vZ}_bH5XF}%`Vfo=UFaoSj~b34BH=PXavsz3brKyx3$D#g31BPX83 zJ7h{EvrhQKdXy!M?fXeenXmVMar(ZHaXQDG-y8qt z643(_f|u;l2wz5U?s;4sZkfyjBPc&6X<$eHQ2Q;k9#1%bEYEFu=!3qA^EVbsJ$)Fj zI`1SL^-b7#cz+MCSK`j8Tp)OQfTtJZexcA4mOmS>xsTwrA%6%{z@z~e^K}nNbbOGpL%)Rcfa;f!p0WGc+?TK>)X%Jnxt~X+pAVv+ z4@sJE)K3`C$NC5#-;{%o-z9w*=$}*dJIYJMNB0rcD{=R_MER)(e!}U@$xm}{Lfk&n zdxf7<;HQ4)%B4RHy$R=jsh{aHKappwYoqd97wLynbM(V&dEakHUV`sH>PM%2o`Tnw zqwu(R=dAG5l%N?(~SOgPJors|=2L*`piL;~67x~xkxUPTS zLygF_ji(FqTHOA}*9e|2na_fKw6BfeX$PLTdm}0YPdo5*NSbiYj^Jqop16I3rGlps zc$$HyEP|&FcpeDd^FyB+MBknwcSrffr_>7mxxZhc zFsJ;hepb7j&fk*!)PB%&Na*Ywx>Dd|ff)zU^D0Yd98mnVCX%)AAJ8%O4{%G{-F}UYIphPn3aoqpmlD6yytn# z-fvb`ezjyUexhVvi@>%XC?L6F``zrL`{>7c9bX7JDv;F9KZW?EIQ#t}=JTL~^6CdM ze(_*`jJ7A(A5$pw2m52RJ!XFl?=!R8^-|t9aWE#X=^KB?>wEQ|klcx%B$xcqcS7{5 z_LFZv!=7l!BY~w~kWc$J$fvNIft;YfgZGLzz+>{wjK`eUL=Y?5Ku3 zoPX=*pP8P7vsvVX`*+$t!;H#9Q<3`p`2Dnfh8dNgrXsyx!ub1G{%720Sn*+zufU(F zushH!{S(9o$K6Mv`B=|hAnQGyPtA9p`1>fZUJZRePdHBrJ@&Y&3B~(fB;&9a`by)& z?EICm1LD@D=jptH@)|#uaP%IJV1G!z2vD#;WC-vf9lu9?A4Q$Y{V6HIcP#daOwu^E zze_F>e!`!anUwKs^K%?}EsmcHMX#wJmi!u0-aU@u@JC|w)+M61MwH%+`k50>yU1U3 zACvm|%{>^dzmG}dSj;%1`BTdeI+8Y3d{NS1d?{@6m)9?JK8eT$kE4H8`$_Rw{y7$y z`MZyz_L$4*P)JVy@nbyy4x_)+KX3D~FNd5yF6*9tl;SVpWW!EE=g_qY|kN|Eh3*CDBrH>aim8ZW90KgBA<<*yIE2?Z(95DC6-Tj zK>em>KXPENXdHq&p#H${``MiH{~GO2*a=;dPU}zD8FBv0bGSbv=lp*Ve3@AES(*B3MIpJd`>awrzb=8^ zswj~^$iJz2-9J|X_B76)^j6`!9m;uCm73q2i+`%(D?@p<^Jt0SB=bwnGKIdQk#qKeb=aP^-?-aQ#fn25_mp_)&9tV{ndA>=?Ria!q$~~v>OD@lj$aB*8 zKL!*I&tJ*B4@Sl_uOoP!Kl8l+!-ALB7w`KQ9_OlOUi?18e!*+SbE)6X_t!z6`TjcS zGe4dS`V97*@oSOaNAy}*xqj~p{B-9=+IGKN?f#y`JQeqypqj^3 zrr0yau9Dfg!j#O z-wwE4U~hK^p7-K;7vMg?-GFsGc*VT}d-wI>c_H%k1J>^lUhx><0=ypwtbSRqctYUx z9qJcMIR7E}>~UKFJ#F@njBq^dU?KE$fuwf+DU9>D??NBj!}I49#)%{46OQWr`1=tG zg-*MkNsPO9(}%<8{Rk!6&K;6i=euj1L|`wRruhaBh~BgDkF#FS5@)kd+A*PaAog?8 zenU3<=w5~b#p~aPp!@yZ$oc%wOL?Y;e{SSH1ignT+xh$-{Oj4>hwxPzO2^ZE2oDq8 z(fbgdRzB=aX&UK2WmM3A3z09(@0adAgl)6r_ru4C-*NXLxWex~k+&eeX+E;g_kZP_ z@c&||z&(O{C~BCF4Co@JGF?pfPl#?h4;B1hq5K|Hd)=N_*AY zY0E#|;n3T*{5Q(J=(hYD=vx@Wk4pb0^Vf^Llg$4PMTk-C=y_U>Of< z^7ACS?6c;a4GD!u*J!ztlc?M+`Zv>)q+dZTY*U$J_G1>y*;_Wd4SHwh)u~&*z^(sZI9}j*{*l91-2mN}xr; zSxXc%ov)Gz+qV2)JKWS{{+;7R`79~>|aRcFUTWNC;mN{$MS6RZ+^zjb;7@dqxN81{!I?A zgp&CuEiqd5M&+^Wav?qTtr8Zsj(~rB+ zk9xsHTmJpB!y}o0N&fN>J@cbKUIlud6uC;~e^c+%$lomuR*`v zPu$@C`liDXlF9s?d906Zdge#Imw=v&4;y-TMrC?<#c0zrKm2(m=t(mY~hCqIhNWAyAFrtV}9EIHPpW%(*75YlK(Fp5&u(>@yd1&%jfgY9EO)IUG^I}wpjUVn0b>>H1Ctt9VI>AJ0f}xM(AOGC)4xV z5Iytbr~4k{=1%#}Z`<|XJxYFj_lWrME!2MZUBDCO|r5y|11k@=2Y9y~6e`j_c)IX~kTGX=aTdDw{73Kj-PMazUzjBqyB(6y!<@9^O6?Mzj@`9hQ>uS~Kn=Wgi{TcpqEg8kLecR<7{BGyw?L-fIMYP_{ zH|!94_&J>~k+q#%@6Jowq~6Q6Z))?-=C5jsXZzNz^1PKY#I$#9!ud--zx+Y}*zILL z?%J`N_*mfQv-m~jd;RA#m1p|e-n#iFez$pN+YXz)wzey^os=PlKI)G>Iq_e$b+hoX zgZkUX6ZA*hri8;@%lLlfc5b5gX-i&Ox8Edqx3=w^hPQtE_N|QT()6X&KWF9apIzH` zYX5BBw$rB1;^P%`E+M0gl{=t(Np1o^I|IORlBr0%qYwPwHIxkN+*W{#&N861vkB3X_cCz1u?)l7$ zPxyCJhsYC&8R@$~p9FHYmgtpc2>-Z63CGQem-Ppi(tZi_LhH`WyZLzwWr*R!>V!mX zWbgO(9c}Vas(t%bqC3EEC0cL;mH`n0H$AZ`KnP^yesGZrA(l^MYuw^ZSJJ zuoQ^v4}RX#b(QF|j*hLacQ#9#wy(9Vja5F`JzZCMmfml>di#z1ylvaMF1tNfZ{I1@ zY+chr^FHUG?{!3H8Knt{w9C%7tyJ5MmRzi+0m3-i((N=31AemJ<>zdN+4Wy_b4v$5 zXZ>u~&+GJr^Gkk}wcofhdwy%Xd9BvpvNKK(ye;9Z$%$9(tU%tU+gU-oe0kr#gY@K# z_QYl6=gnFl_va>3jGSpJ4XhdMrnXJ>@%W{vd@q)Y=pPa#$IBvj|2CuCHA?Ypa!1p$ zRJKF(`XWC+nL%%3VEfLis2>A9T-l;_0+~xR4qv1B^CXdf!gN;BQ+s^;B19*@r#LYw z8%HPW)v#P_-lpSX-Hsj8>)-jd7LlXPyW41<4*I)cTN?AtcGBNcoyZsaNoJ!@cWrIkVcV^3ZCAB2miD$y z)AWTUSJUiHj>kzj=W~&)eBDIzHRs{^++Jr}c&FJ_+|voCii^bJ6+2DrdFJ9=2~<&*o99^laa;S^C4hyo1^k)Nky% z)w_1K+x=wKPj+2kziJK9bujA}yFS({oR`!O*}p-3+pr#I{bSd68BKtkU+r%GOYH|< z`FSlWKVGNe@x+tjIQL2}8lUIrALhQn);&K~f8>BZ=X2D0$=@|P1ennMn9jqq&+EMO z*A!Px`RG5|-#RS*WQO@??ujt>K`?)r-|4C;%|~#G^Hm)ZnER!-k0niiUe!T)ZpZg? zd_A4lD9_Ek5at|vJD=PSvsdx3KH?#hba?ed?H-iGSwO__Jsqs?_FWv*%XD5yS$JQ- zm_<)X!f_5*Fyn1`hT_x*MnI45H=z3r09Q*&`||-;0`3J|2w3A@z0wlEx(~qY%VvHO zNlv=77UlH3oCRbjc95vH?&*=|_CAD3?xzgeNrkzcOz+5krdRjRx|svIj~05y>}U1m z11xdNQ-a7{QmN@uwaZ#o3P^FWCnGNZ48-N1Lt~A`X8vl#<)ng1Dw*DZ{vb0j(ZW-dHuaKK2 zlldKTVmp_+KSbwgQs3h!S0(i)^WW)cT=R#;qTq6)A^z%o_jf3FF5-^g=Paiuod0!y zGMyjVAF4pO9n@56Pm4oCOY-jxwMXZJjNnh^*CK9riTHOIe`BZ}+WrqB{~H{QtG!l6 zI_LjQ2tR9NIzJ8hFGk$!28Zni&i|DV{-osZMgF&ooF?;cad_V4{MUx~!}67I?nM4S zb;{|lWd5H!OOXF%A$eoHME)G)Z<3uwjGspu<9|AoU+HnkC&Jcd3Z?*sao1yn=_r2bKKN7;P?=SM-{~+{U`G3Cu{?9{l%<`9TR`~B% zhTgO3kdRTYa{3?EdviWN%gu@qUsXS{)N8qSS??1vO7!_5>p7nzTO;)?_RCd<}NB^_lyqEsx-)IF=?o9f*D+?rDmVctm7i>51lMiru%Be-f&BFoz{7(5|CbXNS?Rg zoPpL=YNu^Jm1j-zQ?2^0y!Y-@yUu;&2a4xZ?H6y=IN-&S-&-{yaObINsHRs<3e5dM zO>ma4y;}0Qg{;k}{YjQuY8NXH`f(II%MIPPE9LBVj8i+7uYIfJv!9R1a~-$#bGAE| zuf0U`gYRrV_R({nZ|AL%_ufL-a~su;b5E_+=d09Cb5CWeh%R$a;HmY1yM#{n)H=Z3 zfSUog18xM|Au!(u+(mS_r*`9cJ@Rz{ZUo#8xEXK<;5vc5sxe7f9(w4FvEOaGlH(I> zyOR0E@-+OHv`_Y7?SDE4TJZ2VvVPrV>bB{^)gA-}Ldf?4L+ZRUJ5XyIIb7 z{qZEJ66WifkC0qHGA#7ELqke;r=WE<5MFM&eg89=`G?K9+siB13Mc!+oFmnFSn=%8 zie2pv(JS0l-hEUdr*{-cYWsocL3en4K=dUV zr&{q8r|`ZKa0%cVz=Z;Py9@BVR-PxE&r5nF^Fm{2UU-t0E`OL8{xC1FV0o)B&R)d4 z@RRq=&%AJe>zT)S;ooLe-;vJ?*L`w!^TM^H>i#e<{9#_;aZ2a4&Td{%GupA^*||Lb z*p4vw5ZL!=@;%IKkMNJ}T$bqNy6s$Ge%^rlE=S=Hz`$LCyC$7w#N>@o=Q*7G$Jo1O-LYsXWu~9o zrt`LUHRkU&%-dIM>b5BtysI^J)g9t^x~y?*y1NM<+xaO<{dS#40R0xDzGWva$Vva( zZ2DoRn|8dE^!F2;b3y+F$B6#18R%bJK@aJ-?1bEMvzX})@q1CZmUmkrCo3Q)t&o!y zkds!($qL9xtCln4Bf{5=zUSvGzxH`fzdM=a(wAEu2TkR=PMAsVX^4s3FJSupaytGD z{hjGr&gP`ec%pjwfss=e_kPc&o?qXVt)A6$R?kne*0W~L>N$|Lp0#sU&%bA_=S_1~ z&of!;SvP0({6p4yE}64>{w8ZZZ=SPyKAg3lx>?n;xSU5Bjo;k|BwdzA5n}Y$Oyia{ z1pe8Qz3fSviNCCwnZKK|)w@^qwcTDWXZURNGTR??m7in#)mU#c{_Xe6J$~Th?Dh2( zS?KCaUrM#jjlO>Y9%HvJf?d)IJAv&0E@$K}d6G`l zH;_HdGymu=`iFjtjQzQBQfN)cS9W?2f4Z@2y-kqo+qE3yx8*vpi%ypBw==ba^N&*f z{Nwig=GNaG9&HxTaUat9%{Vr8N4S07383R1Ef=PP<0De^%6!{2cDvbcXY6LT19q3o zRIz?lyl$6(&axA~c{rOM@D@%8zqlRWrgpgf3P;)zS~nz|uV7qb9g$Ie=@o$v*o&UI zZvb-Q@kej^neRaSoreWk)@k$y)A2Om4oZoJjwZQe!8@G zHtR~(-@beqJD8p^e`m9s@@l3##BXEw%;&oDTvC}vPn-E{HtW5Mnf};y^+N|~ba?a{mlC>VSD|6XHv*BAZYdyc3v-T8Zt>@QsR?lztW|M>8%vn9pXRYVA zb5_r{vexr|b5_q+ta{?sTb=3O&8j|Qf4aNX@R^Mr{%Nazqlb+CnYA6>)g$z|ySpXj zdb8PEY~MVdt==P8clA<@Gp)PE?mfD7S0)QxooO+@;`Lc)owUC}PB9MF1+&oy_hhM; z;{o^=);kHY^6YxlAfL%zr)f&;$~(9o*rC4O9#nszu^Y@f!JM<5hCiF5T3Bx!^bTkIuS%EH$%hU(&8O)XuQI-MQ<31aI6pH1_7^-G?L}f6rh(hWTvbikQEN zEd0H(MbL;{&I>S~uh1K29dGJ&caQk><{E!5bkAP@c$)$`?D1&$6X=~Wt$!B!=6iPi zM(;omMD$He{YKxoyT`TOS?Hbr;Ce&#%~tP3`8}caQa|V7_qg3&W2eXH``Pn*a@PDF zvFi`D|H%1$VAlM82NQdTIQNJt6<%u2HH7_A3iB|LLA5V(pBs z)s*9~c>u7z$-gJ)f1baV>*rOR%FOo|@l%@D&X+{--lBgqilm8SxeD*e|H<m# z^Qz@<-WOvwGHF2F20j#xnYxTLi zR36iNeeN!;kq6$|TI5$cytVq=U0R9v`rKWb0<6#7rHz1_C3Tn91J>v6(mKHU++A7= zSf9H~y8w4f>Mm^t+zwb%Z*2!)O}({Ru5)RRJWsFH)LqgouvhUON!j0g7yad#`(Y91 zVEox$xn#@g?|zQFwa1T~Tp$Ezlap6ooct0SM9+2 zEqHI_W)I*lyuTH2H(=dg=R&T$wRh|LCB6E-VxOceKNyMEUPjvu)i5xN7p`Uk+%zTNrAhu&;H=qj{)didzTS0Q@%1cb znVfGTf6zZC(Es*2X7rQof5q>%fAHF2MO_2t0no4ywGi?HSB^>b*w*ttaeCtbl>TH}g1q~*o% zc?I#=oHMk6`i;MYZJ^HwoGv<>{-K{apN#jl^7Ez^dF-#>%UU#}*_UqiyBq(qSE}C= zS`atS`;YrycB&$wf6ci;_V>QulHb6q(s(n@-+iB-o$_lOmz|&YKYLXgr`1~eTP9QY zr!fA~5rNqs*KheTywW~DA5}s5`UN)UCE0%VamHUdB=7C#-Sph1qmN+r!=Fifbq9JR zznkfml%Lb1Wj^^$vqbBHm%-t3Eme3Stm?a=x*P$J_-PNgDwxS~MHxkdWk#kmouA$ ztQYhxnd;+l=TEXRG~MqjwgR1dl}n)-OUxirmx`q)|2rLcFa zKJf8%qg{}%C+Ial@#{hP%TeB4rUbedYUqV9vz@>t8{`&U8c*e# z&nr&Jd)N4ri$PbpGRP~|cDm(~&H2OprF`ISh_f>m&1PJpKjQSLd%o7=o};PR|FZZB z^aJ#uKaS`z_wVvu{BJOx-Ae68_aaS4-z~45#rJD!_A@MoUhuBee7?NB2l$NMpx07Q z2cBzo=kj+cKKC5ROAW>cJ(m1k$gkO)#h}BdS6@4eS@F})+o9zz*Tiwncv*(=0zNE; z{bkOPS&Z@S?a+M7uX>r_TVA+O(m%-k?CfcyhmXW=8y-1&yUkl)DE2tZ9e*->g6wbp zd0U3%xwl2_d~XZr-=gaT`@B`Q^WBsbb4FjKX@f**CYUl5#{3hQ5((f$FZb}6@ z>8N5g=Zuc3d)>K#<}b#x=x)W&aaX)=!ORz*4%fY(3@lmdac8a7(xz9_h&wpY!YC=cBMs_#A`(<9fhX-si;m zy*+5pIRwyebd#p;5Zbjs4IkzY{}xcYQk0tWeEEC_{v}V+bKMqDck}v~zptn0x#73T zZ`y6n4LAM5c&V7IKLuZbA~yKl3VurUc1z+UPneQ+j&i5b?*>ZwPZMXtawdGChb))w z!zG%39p@%`oiFKo`kU)D@c~RX=TDya8_A!{`<&)ad{|N=Ps*i{qK=Iu`&p96t2a(Ux z0(qanxy5cKCGh1%f`-n2sX=+gQ+CE@@HW;?qsQB) z_`NOF^8EEl9Vp4f%~H_lvnNQ;@XzR1W0#wAEZj%hrTil3uSI8Qex{S#$@0rAaUat9 z&HR~g+9abpp#8F_Ma!A>lD+P3rUn`R#OUps&)Ac^PJA7)#@*j6beOo2MfV^dRnGNu z|8ctfJpNZ=w?$?=)$&v7PuMeyh@bphe$}@GzgbTvoNo&3RcXJ)^Xp70AMmSd zcKm|eEblx`%A0x(AKi~=za>u|@#*50xfzwWvMV2#=VAGCGia}ovkF1)-)p|;{R(?) zG&S}5{99WpFU)vIh<2iSXVH%xIr=eQ`msake(C!0i$1@&AqnRT0ypIU)nVnI8JDWp zjNS|UVk$p$Uz?AIpOopfYyP^X>}A0lv{?sXXZ~G;`PW@;6d{KYu z!AO4bcj7$v*3z%b`xoP~?w?*aO))(EB&!)SNVAc~mXmX78)7_x`ZPq8| z{x>84W`C_$dPv$~{G4WgX~IcKf3aTTslv9~_}oV`->^PryTMKIzZ|#rS=qp2)-QIs z;ZQlY1Kbq<%jG`hmt&au!SZ95AEELrzbSqW{hV-~lybp2_S(YdKB1+{}4LBH11HI4Jv zG~`uF1{d*U4S8zUx%fWNkoOvSZ}7S2gKr6CL_=PcmS3&)1b*z$_=xpmYddW@JFdnD z8&>o?lJ(FlvW<_BAKRSg9E_K*YX2KQ4fdn^ej1D$*Z67hJ;(Rcl&W00I48+`KQaAj z#=Yrp^PR=`@62}?TMw|lu=m5W9^iS4M>^Z9oU&ec*5iE#klW%EJ+oTPMPeB{tbB3zE1#C-Ef)N~JiJIfmT)d6YKh;FJC5s0Jpd;) zJ!kp*2ll^#Psu#W$oZ*}+)mwH!0%Pg8uETC^qX=yxTRe|z3~2aRv9s#nTI?K*A0oxff3cT4`(QnfpycHNk~XSrk%H1?)fIw{X> zJFI24{vij!?Zf-Y)2Z zeTXsjx?R=X8&2IUU?YZ4-9^~oze{Y4yWJcT-4K4&eqd(ewz9|$@QTg(>_xl)5X8={@jGK zOP&Y#)$wBYm%;z2v`4Z#emyux)5x8XPqVIy?2k3_0=Ww0G$n|$$>{*skNOO~hK_Lk zv2q%!*EQ!;b?G?c`sJJi@SFL@Bbxj3F1!7P4l~}*Q@)t?d+%3#w%jrvbN`%?v!MM; za<+f(5!651_HXW5nzP;=F9F{-cc}u+*59o!L3>-e)K24ic}UoD&LfNa`RXI6x7E^z zT;BAr(fchos~^(eA8N^!sqYe-zeZ0~NVhnxX-(OmVB?Rh&rRG*gT~FcDJ@q*%J<~v zKYECvrN4aiiKdR*MEktb=dtAv??}|Il~eRn5;@e|5OLtmFOs=d|}1 z^n6P;H~q~gzV>ig$N$IPw*b~vRcW7uUP!CI4S@^sj)B_;C1k9mJYy71K_FH}0}{y; z3Q5Z&ZDq{ug_6^wk^(}EiUAd46wFQfxK&5vW2B>w$pAVXA7gZMtnVo5#23cLNOaWx zYprkXb9TRU_fHmU-r|#7jNJ9nh#!H)iIn?KKqZ2*Ym@F-@N9Us*ZK{Zf8--#>iwomCy5%6Y%G?c+D`!$02q>bt8tK9}?Uif{go zZosE?kml`ct2+KO=l$MeUQew|`yTJUtf{I)ntGc2PCV|w3VvVzmVG4O@A9A1-v8|0 zwI}nl-N$}=u&QH%|D5)I>eCO&tn<6K-gBs`GoudC{KS_$X1 z-~UZX?MeLXBQMh>Y0>s-mWQ0 zZF(oE9>#y`1A%=u#A&Dyp6DbOz#xo@eo#$MLW)g-lh;< z-n-`RZ&AEWiuY4!?{*qrfpgz%QomK};CDc%mn`++&*?F!+o zrw;|X`@0oym*U+sXS}^3yk8N#eTuhN@xEiucn3mwUrJjG-2GX_JD_;)oipCy5Z)Ki zK-k@XQ1K2c-aF@vcQl0eIn;OE{f89qsN(IMGv2Wf-X{g`VZ}S9cyFFF-tiFL`;TXO zClv3v;@v!FyptikPouS9cmI^)om9M6%^5ETTx@&xCc#@Kc-*WbY0SB7&Unj1cvqgl z^j0d~a>cuT&Ulj{ypIdsYQ>vWyywjsZ*2%~hUR+i{yN25t9bu*&UhO_cz-8&8x?PZ z;sxDvvcDm`={VEdqIjDWZ(P#3;B5`zeNynYE8bScyKK&QJ3@FHY1HJ$@v|L@_lW56 zT_Px1CD-XF~w??4Fe4K(^C`>S{d6z{j^jCVMM zm)tSoJ*aqx74LrvUVA(D@oqVc1@s=GH zyl$pU@>ASf;F$9&$$o?LQkh@Joox~qV7iDEqU-PEJ;$?F&|hoM#r%Nx!F`A1VB}=( zapLEk&#PB?o*+{zCxs)mPI@Eg-CEAr9Vd12v66cA@B`j9@bB*Xt;j$1%%r?`D=U%e zxs|OK3+Qa$_-y2R5lfNcdmEl3u)j}nAMo8oWN?$ctV6QNen7_fGNPA%=DzXNAj+p} z9uYZh9R&XE`n|ezzwW>4`KrqC3rIKoo1|OnAC)wx{f1Bv%cm^l2hXb_JRN@}l1)Q0qo`;}Qw zV14^N>444GA=)r%<|Vwo_^qqSk?C*b7W~2Gp7koy)4@YBacwSrkE}G(cO^wHY zLQDPPF|13=Q_`OV_+fo+vDPhV{aNVdbqUVuB_J;^0e)@z##ujgza!%*>r>*S+(b@0 zQFh8dj_3Q4m-i8dj*EOpH8<1`px!`R9@l$=WZc92kMl*n}H|WAh6kI)LfDkdSlLOrD5Yvmy|c_ z5^?8MN7y1Rgg#8NAJlQLdjN7z?cXSR9Y1c3=%LMDL#W@EQ9oe1u2BB=KjJuTnX9Gz zmc(16|D`h537k&6UEuVt`z7^y)V}n?zObC%M~vC^mE~zC&i5?Z!|P@`1&=$}fpnFK z%VE38{nO2sL#_wPB=ye1dvk8sUByuliq~jz9&-+t+T_Dcaa??|b6@><+3w-vjwD{cj{0 zl3t3u;!Brke<6cNKN}yH=llb=upK3(rXTMg68YX^pY*}jLrhyCdL2_HS@-&K@y zOV9ed)+HFXxuxU)=;yAK#Q(0fP3Hvh&GE$>DGSp({0?rPN#V~uFd?b={wP-+pYS+B$A$6Zu%FkayD`-7%Skc0-!~~A)ub0WJQZ*%EmIr`oi!q-ZC&V;W_@O6UD(ti?s z?od~bKDHCynf$;lo5>Gk5um5@2~s}h&?YPT+58r3$N$RLj{bP?qtY*<^5Z$ z==BuohRsJc%lQtxpGm&oyqW!MwYHZl@{Kufkb*}4*8IGqp};1n`!&sGd&>Y~wv#M9)uVJwI?*>3bRQWXARXjWmq>`pbdWJ)u?L_%R>m$BvoTZ;kWUbsT4FE%KXvPHUUwG0kPB zgm3el<3Rjo_+#{#0tcH;2Z{Jk#fX z@&&24Qp&}bF4KCGiZ`M4I5OU#b3Ovw_|3TB!8Gk-%P{xB`W)l`20iEVW7LhPJuokH zhX!)!>@Gs*$C%D+uat8SbSu5TIKp@XJzt`7zBwVkoy1h z^*k(RoTr$*Jz;B2?XqZcKI6|q&T+km$+t&jtk@nkAM*$3`|)ZYOZI3##q-&hd+;dB zJus~tkNd0N5zNcE|6f2Rd*l)kbFdE@%}(P7*a0rL=9-`!kKe1P2$yF*{e8|Zf=2HB zz*n_`dq3vsY}fsBwD)1YX!b>Ks=)bR_dY^MKlcu#n=0TRjNfzb=O`q-zZ2=ERlgSb zHkUNuc?x*xoJo%T;&G(e=WG0jIj72eT>W0QQyK?MAWj{`e=9|fZpM$FDU5gl#c>2q zWnh231ni(~Z)F@iC}c`pn&X;0{gu2Q_sCA$T2 zm@lUD$p=|}kVm{k+sT)w#wYxEdV5HotpeM4!{arcmvB8RNw?g6lhVGl&MIk4qM;$q~J_CkrdS$$P2k2*dCrF<5`!^H+UZPX$fqtbEZw7uE zEO5hk+qwkydMYOwlh>a_x~yDMri1m%>~rCMZR;P!A0?k%Z!gtr$0@2A-ow~2&SO0` z>&bL(N94-%UvPlrou)tNXU>1|yoBkDYn;_TAF8IMneLI`_gr4=imQ5bA7jC|h2L|# zPQybm|2&!t@~^oRcw)|P&`$LjkGQuq$a@oqGV~O}=celBYK_+tDfcTy9MI z6{WYQ8u+%=BCW4O3N^Fj{4nGJ^p1NsbvXLDU`y<;=n>fl(Ie6q{u#gEZAc2Q`$gJ(jM38!^mHTQU&jBrtB{Z9 zVL~tY2cehB@z2c5yncsLEnZf()t0UHGN38^&(AlOGZ%oD)nlA=J#g|Q2#dZ zT=m=TAmmbYzo~DfRAkmS+~Z*v=$-)h%^J`buHTjy%Y*Bytm1VZ;E$Im-hE|gm;Ks4 zyOl4hp8c6u2{`6VN_}+h9`)*ZJ34o-@EGu@yv(^gn=Xz!*>v$e4oue{dr1!a#zik^ z->#%~IU~=FBu}~@1@-lSZh!r;CRd*hh3YeSCZ)bHt?!Ve^j&r34|?qBy%MfJK2|?i zKt8UHlThUCcYW{`FQ&-o6W`xeN^s2CD{|-anSh68-M$?Evh~T( z@eyg?QKjRcwr`){3jmpE%nf)Vf2IT_(1V3i%h)oAKfLZ@w`Y&U8?q_RHsoo3gs(k%%pc$W; z`2xX`|1_i?x+C3#T_N%^?QGXON&3ce`Z1N|_baKb%{-Ojk0O6_|EL+4nfafMC+r6+ zRjy6Fj1P93)^7!0%=sV4Q@=BoGv6q{m$xAcdd$4RA0Mi{d}}TEe=+=)i{WT6ZZ3p( zB|26lY(miY7 z_hKWDMum+$niMwjXhFRfC#6DfW2?gIpH2oH!F=rf;9KvxG2;zhuVH@KUkKmfc}IV> z;HCTCkS?o3xWG_IE-tR>ALf~{l>B&HD=>+C8ZU%Bo>wWuf268j^z>r=E zem8@5_5AsR%E6x>sDAnLgHEk?hnDYBIHhp6!W|0t3he2<3v^GC!mau~t8k0LDt~{T zFre=ngE1AT8OVVGhc_4uTe>3&P$}8eB+H9 zhC%nXkl#O#s^W26c>Hj^<{t>Kb>R-6tPt1_tZBx5^Joq#H-Q0KXk5kQg zeKU?-qy6@HwIe4b1%Y3`8RuxcfaY%^52ojEh#n3J8T!3l2O+=PsA1{X)((3x@_GTC z_GElvdS5`wAD1XK$z_Ntr=Qt}!1?>1AJotGh`R{yGa9w%;(5ck z1+yI9HOzKJ`Bi%q+^1I!eev(pODfzA`RKlAH`A+dxxVjHxKdJ<*Qb`!*>d$;roGaZ zf8hDZ7Tt%<@7Y6}ecH_5AFO@hw9i@kvDY&psV(QjA^SN&F!TA-dx_7XarFN|_y@b( zAujh;s+4}_o^~$x^i8yWzXi`tywUe7YL7iOs`PV*V23>2KWfHn#%?hmVY@p_Tf6hM zXQ6pu$3sCo=bHy^miAQr(tYlx-y6BP8R(sf@7VRTyqL~H^&c)W550owA5pt(?)71O zKMUDq+poB7X1th$9NS3n^z+QUi)J0_WIT7<jgUT+eUNcdN7}Tg+1L=ai^5?delE>Ab*!HbfDj9WwB{? z*39?v+0Sb~N_sRnhW=9neR6gECZGK`^u2FJ`d%e;(D(uUQ}-#)#{OSM^!WCFhuVLg zU*w~IGv_C^*r+0QA~3*s1k3Rh}*_(KyH zVL5+B?0UDn5A1q_55umP`7rFdBQWzf-L6l;uJ^;f+j0)a8CX8tFV~4(haWI;2D_Zh z6Yk>HpKjMLzlQ9(`T;t30>5C{d1|gBzFps={qQ2-F@C^&m(U$Tzb|C>3BT}b;y+b&7He(0&!1N}^8elGl)d3!1Y{)2hD%0a)Q7pz;L zAK7%007)+3%i9IM?Dyeu3(Je;v9*i$4`RF$r+6mpAsnn-UdAtjs-K*R<&p->cvhW5 za?R8VpJv~;%Z*GwGmdl*Xg|oRKA(m6QJssSxQEiyf;2>rzg}zhkueE|K<&7yw=_Tq*ddy!(nm1ci_J>^mp*RW3*6I@^6kYvqNnL?SikrB;TOH0a(Pbq)Lvwv&;Guy0foW8 ziSyZVU^_El3w+q`d0cMO&GKP+-@)g%v+#d`eZWG1T|R7IxIQlbPv^2-r~`e2 zY9B)V(C;^DhobKv?Mjc@hY&sUub;J*$Cbt|V7yUG4)d?KSig*#?_%|%e|vMb3s_fY zyKqy;F7Ws-*DfrVenR{4koK2LYU}Ir0(L?C{g5=D_^op87kTVL#c6C8bljTN{^^e+ z?#{6bwW0pSc7pA~*OmU4O|uJ66a5VA!g7Jr+i)L8zq14W z&A8f@LsI0Rc4im&u;253PTMY+e*Kl#uw9t?14}Bf3kX!$<-_|)xjuW`aQ?H|KJ*G7 z?qE04Re}6TOeE(?sfX;4q|x^i9gmxMVThjS>z`D4!0v{}QS+}K1Fx9#91%3#=YaZ( zw8Q-CC55M7;c?4fy4;KL4?8z^`-uL-_VKQeeOyiQ&b5yt(%vSXtF-Y1-Fmk@zXH) zDech0c`A#H#Ckt}Z{TQ|!SWnFU4T@{2JZq(1iX$uBt1#N%#J4D( zsqdi=6z^0R`atneg`p3$UqfN&1MP=a7;-h=54GuIeX#YK^@ZhV^y6#)JiT3$+>Vyq zYq`AD&fMg|+KSf+BD3G+ zDtb=MbR=GShrD;wu)}UG>f3rg+QobigyVF}=#^JfEA27@b#wS$gx?SzZ)2T2=Y3mJ z-<7waJ}ci7lyB{ox5)E&Nm}-E*?4}y^u#*kz0oiFE|Kud{wy_$A`Q)eX5C@_fdx=Ni2P+R@#E zc60SUpZGDnYl`G?u_R9Fa-?*w74$0X?^Duy63se`SC4jyAG1;l26&U=Z{o+CD(xOW z<`mqgc}x|>Dw!_TtCwrNs^6(~#2CL%G)eubb+9Ys=M`pY@cRaZ85_fOpm&{svS0dG zd5(T&=wiBm$MW^*ewq~U%(=WF@J-)W{XM^+`{YK&PV@IKKN^Uyi-O7)0`)e z@=vqNV;o`UA0zrHKkVgxriRw}i0$zCs42p0@4wxf#kl%J%5Sf;bhq=lDBM$Ox7*LD z-T3|-5)s|&3O|xMo@--1#zYTN>mhGCf26R=Eio#vyPh@?NdAL>RbSX{euwb8>#+fb z_H$@{RABn2SA+h<_l~S!JR8(cWCX3~weUHpFyZC#BDd>rx(L5Hm*$^a<5uAHfe&H4 zlu1fz_Dh-hKJEJu`5He>^B9FO&LaL5*8X0yNAR#+Ahu}#0q9Jv0$pBxR`{cSDdm`d zro^{*v*72pP8z@Z=kq(EugVwAhXjATD_6XD2 zC(oG=_T#BlT#D$d@6Dl~SeO(2E2%w#dmUi6O#8$foloosUvv+q(4ETsPWYhskkoI^ zS&@DSZ1;;odT=JyyEUi%Ck20-kH3A^_&RR2+o40sne#Q~JDKi&Jg4u;OFcH74csp+ zeJvw7^Zcfk!N#r<$aajpB57>A${17axte# z=nU@vXi~l=RQ^dx&HTsQvu5_=lU>vI=oh|yviJzwCzgZF_bJ48D)R-=>vRJ5Dz{}m zEAW;C#_d~mzPUZ|WqIC~c}(A9yv25w8A&Jb-0Md_@Oq%BMIQ_WB!<>V3{Bl@IN2*8D0DJ^xGlMv!0aoh=7$pTO>c z@4)W0iX763dexgL;di@#4x(M&d;Ypuhr-pGAL9qJE=G1%-fvHwqVFpeewM;Xh4ucg z%(&L4@mal3cuV3$&0i+@x2V6Rb9@3DKTGym;E@$*=i5kclJw`6#1bjLrAE|<_SsEJ zJ;sl>WuS*!63>%-sSNZqop_!4qH{<(kj zUmAyMe%Nms7b*<9X~lmOe}le9|26yJ$T}DV$aKNrguh#(gFfXHr+aWB7Z0CnNIvl z%Qq?TJ51ep`OSBrjWjV{8{J`@{B#?ZM~nCwreA7P@9y*BA)l<9_T8bxS$MbK2_& z&U8upx`UlaSD_!6d5pQ2)y)n_x#;5|!%9y!FFo_G|8;^l*cWn8_$nrc`PWMhgnotB zU8CmvM#!_k{nasNv%DV(tzVes@)W&~mt2eaVVlNl#ljG&i!0DVS)=S5P# z-M<>xK3V;#gZmfFIr(SLgWOJ{Kii1@ybpFWbpZW0zVvGG<2K%2#$%1+ny4POd+#B< zERQAPzs>$s<1a8zHU1*q5C7@)bb~*=&nlGxziHq8E8o8T2mi+Y+jMn_9KeUS3w+q` zTS9cReB2@UHFpo>&h&qzhwRP17NILn_f%mV^8(1tl6zwaAJ=cMqrU$&Y;Pt751p?> z8n!ptCOqHQC~5TlE{S#?)bT@zp840008Y$7oQnHRIPP&a>7==T_9}W$s^iDucz#G? z6n$d3uU$nGar(tebly~=@s3&CKVC^sufu;g3YkvszWXkb6Swz~key@|Gj=ktYafvObY2i?|FEQXfBgWp zUp~9m8nSD{-0$+(wb$H5{qI0K^j+68XW9=U;}6TOb*LWpDE(VMYVQZRTJQ$@<*pMr zy=|kUUjHHGZ&cD$2K)y1U@71JId|}H_I=oL7!^5y4{uki;J4rRG5;3bEFYHltKY`s zraq~Erg2kus65wa+p)EevK=dzdQBW9cRxt4)I* zmDdLGUbfS`qGIfXS#P6rYZ$MlbU#R9LSS3}$3yzd`#%}aXX!gb?mqRq`^TmI^!Or( zbeyiLd$4Y0{IrR`&IbPo;}6{jQ>FLWnsqjs|APK3{KstYeuVLw@q(W3WqDb@uBsF8 zfbId8$L5@9OropgPftSbkv61r_Oos3XEzsLSKxV(rmPgV0;nryudT3_X`%&JUzAx-X{Wak+p2X&nt|Mdc$Kz~euvD&3(WeCn`sw%{CHCa`ft{WXup)cpHjZM6h{B> zwxPdzyU<^4IgWixyIs3a-&^OqE zbXA}qR4wVjLBa1H7zX{3`#bfo1@@~)?{`L39vHWT{r~*y_e9_P{o&a|kZ+N8n18+0 z5$RWG+*|CNK=k!TEq8qXw-Em^2lMIhJ{nrrgWlJu{_B28w$Du=zkVjkm;0sk8{J3a zubcROy-f7W?(b|TZM(_q#f)c+?z43Fsr}dwyHVJ$JEB+Se*4+re~j_#x*6?{6uJVx z-V45U9AmyGHygbF%y@O3iuTtD-alo(&i2;!>veBrzpnjK?JLFeA&-K7UG2Z_AEJ1V z_G{BF@CUhm{nxu@-ex3VE;McXE`hFd957w!SAFfuvukGgF7m0Q=`#=2goWIW0t8|oU`2mHs zowuRCdb=QBTaM#J{5rQIx6_?`zTv>Q;GM~@^FEP$cH@*=*{^p%?t|?}bNu>Y!B6ML zL4V|aeL(5y%S%u6{$)(-KNL~@VZS~B`4(x1==uIjm-{UJdT9N_t4IIxYS2z*{>}FJ z_K;ua9g@CZ_s?$(Ly!FP8(D$v{@y}%((a#G?cc}TP5pD$=Qp&U`sX)bpI!g_2J9WJ zbE*G7sCw6_@Tk#4g%2s*t}yz)O?P$3-uJ1!Z&x||;KTO$4SbKs>sLMV_y41x+jt)k zI}QIeoAVnI@ALf_+R1#^o7?00|H}TXRrsKF3`tW55WmfLe&b+>FLQolhw}9q;;Sw5 z4Z#zf-}sKex#u^~{@ymUdn%*f!PR^DQyIu5IKKh;1nc*ZkGW^kmJ{nqaDKz+XD#^j z#|OO%qy2;P8)$!u@92B9zuBJ*smATPgi0-}#NQQ2Vi*+#$$^_2E7L#(r-c{nFeIl;iix@qS;Kq|w{ond8ax zuOI7Bh37TcZ~0W5-{5hlJ&yhYEhx~uLFGNAc4tyjKR%{$I};ysvq|JH(vI_&8!0UP z3dyb5I>7wv$2ydMek0_ca@Xe@L@w-~_J;futGMr1NOIUhj@vI z9=s}TCj^Vtd?U4oZ5N*{cCkt2-H6oO zLvG>=Id-u_^Ud6jfBx;ZaO?AjX0VfiU5kEwzT)%L{}yn4{?-rud9BYMVLP?}>+{bY zVLLYSc#7^5LqGZJ`n=fFKi_=`#r%i*-#OoRH7xqU; z>CJF&=FiE#=UZ>>3XOXtPMc@k^ZGHi58d#CIrnD1DrY^fobmD?hkm?|te0RO_iQ7W z>HozCZTo<@RIq>NcB!ZMy_o}`N5>83-n(G`K(D;F$2A-mHuF$#4)EbS8P z-{I918lMk3IrSV0jc-;p(f7V-Gb)LK@*e`8(xrfh#ss$M9Ta}znT zz4=LKJhFna7<=RH#=I$Ban4A30OJUEU#G}BCZ~}3`GCO1#+!fs?NiMD!G8JnuT7fKKQCYW zTnXaQ-0n}m&hoe9tT{62+rON+)lRACDk?Wcb|hYMOM!DGh<^v?O0p7P4D95Sh&Sr` zI*sE5w)^dq1=iK4xc?4;Uye)I>+1Hok`H~6`gIoL6tiC=b>MrjlS@-McCwQ34k})f zgE=4kb(P0I5A*o#aVftg@hj28ROY{79}`asobLanr2abkwld8Je$)QGH3#|p^=t5N z_O01+C?mSe{x!M>Ldvlm`Iq+h+d;m;y1ZF`m=OAGeBt%(uskQIUAg_MzsU9#>v4g7 zeW}!I0M8aeGl*B8M%k-xY@_E&#Z&O9u;1Hzc(F|g|+l0VA(y-VLu_NUuAAO=%LI2=gs?+z~6^lo1d6@ghU)NJvZpGvf zegBL)4qMDmqo2>+J|M2a_Th$*eX!3%iG3hTygl)4^`8?+`^P1G zsnwdFD?asgl7F7Rc)mvvDquE_FY z`v2=4Y%dN89f7?lyuNyn{i@|hKXsYCzIqUN{PopQfo(dnRG!yYuY9=`@1^xsGarBR zONk!i7uC^}ts%Q}s`gt_|08to3gW!|h*R5oD)wVYnnmKVa!y+93HO`&d)SVkf4W)NslblB zC}$iVj!$!c<#G5jqLJ}^@*nMShB^Ok_M@tu*rw;+`wxNco>1J<|1P+RyTi`dd~qDq z+;^MreEC4=+!)J&>DxmGG|YW)ft|=5clUD=|ZUF-wv_lHCJT{BI;F%I+CANOJ(GS9b9u|Zv=V;S?|!9c^ECZ_iTXRE-!Bt5y={Y}o__De>p}mgbC$wy za6cyaG3QWhz6OX6v+vs51$%A3?+Ve$a$x;_27N%r&2~vWGwF9ns65wa>-P)Z!TMb* zd=&m3Zzt?~wgY@ExPEs7e-S#O*Kg?Q-1QrFmG%2uA^qkX`nkQR*~orZs=i>JVz+ZI zy|?wdoMB796aB2;eQ2j_ucR~ScP*E<^m~9{*6)o<&#}|=`whV7?_YVd!0By0lG1l1 zk@h4drTbU`C$b8IA3Couu+3MJ>NWfAyj`H%e$Rrj>0~*uyv`V6{dNT3O#01!$u7_J z+4}vN2U)*6K<8jP(p4k``kDRt?tv-QZ}^}2>si=-m!aMwbj-irV)h$)I(PjZ7WuG# zm$h2s;8Mr2?e|kTFN*Eu{($*|n=>!U{XTnG&%*PfJ@2!}Gk<>bqS8-te>o)W6!e$e zIEu`NEW056$C@Ag<~`hB(BBKqU&8xIqt{#Y>wlfkOtV|j%N_lG?)GBBpU<2XvKRLK zyEA=vS^VFSuq$@Dob9~&Lwmo{JK4S${JwJTyrwpfzhJ*;_A9NLW(Vf>eP!~C(*L{# z_@1&8qLbype(^Z!z~&rk(9d({HIt!vO_K3h{rqb~+|S|f{Cn$i{i3v^o1Mh`ZNbNV zW$?R2=!jm=p|1t?9NRvfk<*}$=AORz5`2Ftm8zB(@sdrF+T)v1YPU-AlZS^aze)N= zuGAU168N}XZ-0Q}wufb$K;N;{@xqwG!wMf#IIHle!WehCw*jA^a|4h2EWgHbXSp`L zhUMC*{4_{v&QbDsg(--aOv-Z`ACE(Mf9-$KRf>#f`JIGks88|q=H&0nj6fXh(4B92w--vdg??dF!-@)?R10nPGi;Vm( z5&3m0-5rve^*~!*ttziCsl0x42g|En%eCgz*HlDa-+u|oE7PLonlvT#f7FiJ_ji>2kn{!O zb68)|W8^`X(f_Ind|!(0tpGp%K2*?^+fHalTh3;m>BV$kXZ%=FF#7TLw1`#eH`H(n z*K&F+=AF%SA3Fd1dkInkI_?hWL3m&3{OzrNm!jZ3{y!1^E6EO;AOGo|4T$@Z(}lnJ zdHfjAKXMM9ja-EERPAa;?)?2P&bjs?K+1L+8m8Yn ztbjcEx%n|Yp3yfJI{l1XP3rpz&Byv+e!?ej7N=h&wa+v@)gBuEV(x)Gb-iSFd_JkY z8RgnGAbyx&{yoh2=-132#G;?Ua}QTazw6FJD)Tt}iSIhLK`+B}dTq$G_DaQfFRfz8tiD!gyW7f4H3u|8O6Ux##0lZ7-jH)6VOaf78x}f78ww7CC-9 zuK|6z{6m0YIt~AZU-k$5V}37sZ!W(k{$cdZ*k#7sd65c(${YV>{EzX&#$Vh0eUj{s z@!O0iOXCFd%V)<2B>$xJFB?ym?bjem@_smD-w*avzf(V9>=g4y*^l_`XwHGDJZ-#O z-^l&I%jKT=O7?TZu&dcD()|OH#*bSe8NK=r9rqbKsQx8m>|h7VWe!Se;;1v#`>SnS zuhuuH^_80MK=7=C_|)^Y@sei?Y`%ZzJrlj&RX)sjmiT=w<@E5`KgUgKK9~iE{Ul{^ zjNOSZVF)m%F4%Rv28P)FoGAH?d~JR@d3=5c^0EDUsXcEZ{bmj2awXyyH6A;N_;1Wf zNFFc> zxc~eMeX^75|G{p;Kcw;U!9LLkJ3sIDVEV5O(Qn36<3fKo^k}eGQl7_A6;ArR%|ej3 zM#l@Pw??16W$ltbb;}u&FTUg=NmHvinnmrsp#kq#KhnMG3PaDmnm*`xPZyq_C1@RYwc^{LetI?9#oI86e5;ke4HF8Z zoVQ_I;Ht(A@_@fb%$gZra;3nwoEu3`xLv+T3dZg7A!(N;;2Ug|)Xrb0dR0h2|B>5e zs6oruA(O7?+bD;_LTM!NIqjX>HcA4cCFmei)d zn(fsd$cg(e+b`z(M;_^;ANQ)2a{0!&96w`ujj6oeDDoQB_C6@7U7y)MP)J_)h#qIP z{II0O^w>4`V6IR;sBwvnBW7IETmpyhu7G~{c237*?tP(hYTuem-U)fCo%GA8eT+G8 z$NN2yzq=Rhw&~&z>vOb&ySG>1O&1SK%KFDYcQ4w-9e_S;YI>i%H+D1T0CsQD{1>bK zZ`5)ZtNw4)dM;M|->CGw2<43ayKz(gAn1#m@}SF&oAOzGujMxm2wZg~1{6X6L3wvI z^2L`_$sgu@%vmY0yGQZu1znpi*6+ma(R%lS{!JI-dvJk#l+FS0yQvBJ0{H;8_3NqQ^ORi6&$=p*l|naRJLEBbgy%a2JKbN&(XQG3(8Be2hh+QH`1 zZzA7b*xUFL{cgh^*wf&9cu=xDAV%glE$3vz@vWEUC{tJod|gp9T%-q`L0KPo|l!-pKOQOj=8JR9`418 zkH$azp2z>3#&vve<^vwwn$t{g`F+gM?=YT*_H~nJ_tfdF^p?&&RktBML-nQ~=d;p1 z|1Nx`HSXjs8x`2wh<@p97zV8Co?bodgo|!Z<2~qwJ8L-z8IHFesgXm>(R-uR-ygjk zz9RIxr&US?ZZaup>hx-))fnHTR$|=^lLdGQA6S$Xf=xL*H2k|2n=f^A)dt zOrG2N%<(gOzA?t|kW?%2eB*bYy^GqF8m*LG(RVupPu$;+*O!C0i}1{3zaC_LHE}j` zkL-EcUqj=-k@G>1nJ3%yGkx|t!)v!OUbMeEm=(Hczdh((3ONRGooc-I=QG;>{P_&} zp;uon`MetRFR$MbcqTe-&PPX9=_p$v3;`X!DL4zpItAnTX1{d9GVBPXJ&hGo!FoOe*tDQ3UbnZZT`o0q0YaGly5%%2M(1+(Is$4eoDy(=m zbStcQHgpMGbs<|@vb&U!=_P-;Okj6V^Y3Ywe4AF|oRzW5?jF#&Y4w!6=kok>_b45E z!Iv4=HkYd3sX)GX>GS0eQ*XTVB7sLNIf>mJM1GD_Ic$ehfXzL!JU^9B<%f~_>p};me%IHNVTHAQ&HgKuPcUCbI|uV+w5y3T()V!$PcUCb`x$?3 z^E*KF=bJAdLw=jq36<`wq%jBk$jtf4=F&$%Zw2(TxpY)uUvG|wel(Z-i#(50ybf{) zY}3)JayRzn!P{BxeOiC7q;~!;m3tvO-N$nGzboCX^kd(T84tMYAm`>1>cI4~@i!?w zCZ6>MrYF;+^t32G*dc!&t>^CDIzi`*>_+Ox88t*~*K?5dU*kdIr`m~be;o_@(Oh~$ z&i-vK$N4*7$8)8Kn1KYG2iPg3z!OFCQoZ`KXXee~2WD4(bUK3xws-%+vY6M5eO z`k1f#yNRy@ke898iIemCRRUT0->#~&jQ%2SVEVynrOPFL%l?Wrip!1e3DyI+p35?1 zclu4cXnWP59c=o<9$NA@?VJ|*J1Va-Nn_5}03Qz`Q)-8sOL3kvRRMaNOP?+oQWd3= zHkZO5q$-F|`ZbrLAEb0Wthp5Yr7CD*ChuuLM88x8o;Q~QPwIH|n|yjSsr~0$l!f_U zbvwy}M&aFNNY@G3TQqH@p6@UU+=3VpjV}*=54N z-7iL2uM$NjsNVD>ZB1T()6kk2brzZt*8OBC+`LE{`p-Km@L-UryM7cjnO-0(;L zIm3_NL;AF=5puN33mGbLvKz0<8g%GHS=?gNBiTNr?`HOQ}8e5yi8J8 z{kNfb4lZ^8W+33+eJcU0T`D{7BZujO_>q;f4ht}SGbUn%WAtmO|%8gq`D zMptv`kiyiE^lL872%I}Ud`O-*lON@uP4|G(ZN`Ngh3>4@i}9(QzgP9O(73Q!= zeMzUj`RisK3Llm<-+Fqu-laEDy&-$U<8$`xG1>J`{MAD~ zMd>esCzU!w_=uORlXRp@67pZ&N_V@`-K#M8G3QF?oS(FhXVy>k{FT{f;#Odu;puqF z)%l25GYov%PrRC}!didLfWTGNYvn;;kIxm@<~z&w=}wfJDbBQ1^vmcc`bW%Z$-&n` zdN9-Y*bzJ}pm(rUQsYl-x_Erfc&-WE56vS$wx3U4!hWGq@iZx(OLFKrr2WkJg`e@h zK)sLJ+*57W%j={w$zek3gPVja-k<-A92!use%Id4 zU#;>l6hHbmmcvl3maj(Yua~30=FZn4mta2MCFO$oKJ?b?KQjAvk7i$JCDCus|JhEk z-W(%-w^Hd&qW)RN=WO{*g!F1q! z>!#Ju6+&|D-Ff+l{_iqPYzaMN>*z|*&rsMbf z!S(Vyh|dAG^_%Sk(`EX@8PXqM7hH`8+4;Hu%+w!NOMgH=GV2yGCwEx7mD&}{O7d$O!7vJxKF6N(Sb}{D*^4`YFewg1IzY!DpG%23Ooc!!(X7Zm7(=pVb zn zzP=kJbuY)c1-fSde5lu-^IJ)n_&=$xO&3yj}=CjCJ_w^tI0iOz)ATZ(+VpPloWeI4=G zz4F4_)&W2B0P>Bz9%(9${S4m5YI&cEW4z~WtW~%g_VCWcuUpBjL->1=D3?X~usr>7L1lyFpKUvNJ?(j;7@h*a*j9B|+ST($hB)j95x62y~`Uy-{H?QizSne!g*$*q##+f@mE8wB+C zUz`1Gwte8Z0QXKOzK$_b11k_setlZVdvlzH?S^+Uo|`zStuM7yh2hie=X9??y&U(I{zi?$=?I25jv2@J`xU9Z_~$Ll z3V+^dfSZ?`rFQ2g*xd}CGhM?WeR-Pb%Rz1LVYGvlU*c3`Ke_!`Z+3?Eq40Coo0#a$ zfa1wYn%-GRU(hdY`E#7q*5fIU{o-N8H5Lrthx z_10B??)M8dJ^p@gU9S$_PwzMW^OIE`W}mqByWqW+TY-H3b2E=H<#atIc(3K=yFYz* zsNTvDy}MD5U#}Uj+!rdR;}Ty!_l3&ozIHQyGwW2e-&5>By!6?E&|8N4$!H!T?GZ0s zkLUFRk}p-E}49)2VPZ^4D|;>{cWd?gp&$EHBY3u&rloPq{xc<*YyabN9f` zv%NS-Lm_vb=f+d!9PD7L@R!zhrg@vd?g})3*&pJrK>zdikEkB_@hH_BKOUv?-l`Rt zkD76E%z>k@`Q`lu{GQJdj~okrna}H_KUS(eD9`D?>?mgP#~Zmn?nS%088c77{PJk~ zWz1<30&V(vy_4xT^O8oPTjytknD5y6lbnARe&Ir~CuTma^QR%Tzv)LnhuR5m74+Ow z`(Wg3;(!#d75SO{e!=;_F@647NtqA+nf)N-NAUiHf0LB<|3H7uIIQ#n$#3)5rSdT6 z=+}rmx>0_xOHw<3hqhxOf3$+-Fx08#JCN>CJzXEt)Ab=eU9WO6_a2}d`{yxEq(=XOaiNIO-{)xjsPPBB9`94TbUE_-_E6`0zTLYVd^a13+Y z?d;U&@WbAk4uzp_-kNrWClv2yh2baCYan2Ea8lp5>ia3Jr$u2$?5sJDV$OGYYZ~=^ zr@n7cIH_=*!qoz&*PNwrt-=^E7{8WYQ>*Xmw0yO~4GJd(_8zE2dUv_LZ;|&gXRD-k ze{ItK{Z+DIY^UF|i}ZV_MfJN$QagWx_U}UDro9*Oc(YNkG>n7W>V#h@-YViA(m^BNO2EjRsR1^2%C+3{&$e% zlL8;h??LLzr4e|R>$vPxwKqnd@nfGZ1x!45?Oi2+RW60)f%TmcUmlQ;@oS#$pN%=E z3O?fp+m25Pye08_;gk8MDTyxEqW?=|)*T&ej76i!OY?eH<8 zb4#Mzhgr|ki3T68B6v%p%!hfVWxn&sa{I&8f!yeR4EVL4$sE7M^LM+QSne#psWj^~ z=Idtt*p?^9S7e?Mir?^#SuX$i3)z2-Nqz3%VbmX57vG}(ASS(t+N+HUYk8Kt-+#0} z`TgiDDD-KiON#C%-uF(zyF$>){?jS$@1#FTdbC#0kC^**+;#9*sdLcaX}xd2^oOgc z5!epKOOJP|sk}S*3z5Hj4h)xj?x|8ys`hkAx1J9>-c|>C+s@`v)NbdkMtV0}S!%a6 z)Y$afz7zSK1B235gLo|&u+JI=AZcZ zxb}m$aX&aP0Y0+hk{Z8t72#$3FrxEdjxSNO%l=)~$F-}d*3a4y}KGaFa>jWCm(s@;p1K_A`qz#A`7d0)s<=KYFzA3qL)HTq-5 z1uUl_sxPkh+r`x08$Gtqv9UhH90X3?^@83pNiyiTZIU=f?{6Y?l5&@#+{mSPZ{qgczWj#A4ex!=d)~uuDJfl>Mt*+J zztd>q%RQC(;rqs+A;wFAN2t76NJI>cZ{olaePO60K(Rug6$s2Zcw(@5AF~2N7Nm+RG zGvn0#Bv0<2w^8~+dhXlBEs&!xzk1kPqYvhLqs8QB&%b(RDaT8n5;>kKa+s|g^Xctl zk3RY+BcbG&VtQ-j!1}sUGpIve?(Ct`6% zPDg6KJ1_H0B24s{Q?i3hC%5m=|FHjmqZFX;gUGmr)|n;c@#{Z5`1cp_%Qt`YoJNoG z^N;aBk1)To=P3ikk3C=b;tFafn)~vPhXIY0+Iq+FIeR?fQ3%3}AH7}WLPvb*g;L(r zdml`H^mLwQ_KBQM__#c_$PVYvA=@jz&<6C;ne4BBmSznGhPk@entw{Bp>8Wiff5CkicjdIl zX1urKM$chARXij5{`6ARYtFMSUx9LNR^@Yt!uwUuI-X(q_6*S7!w=xSw+-}}b})Y1 z_+if9PVM3Dhd#L3TIC1j{B^y-7Raq;6z_+c0M{P`d<*1m?yGSdv|TRIc6kxrn|lkq zZM`V3=RCZPU5Zcf)@XeR&=IW9w4*-%zT*yshfzM!DXA@Y9*5ce;H@;}b+c1i4tj9v zZk6W_(Cz7cD5k&UYfl@m-JTE9gfYNBsdQCJ8ejUiQjuv7GtM;oWS8r_)2m5Jer_lJ z1#y@ zs_nM1R_b+cNeV)51N1O;Yqh}UKE>2+H3Fwony%+wP4oK8kUH-3 zzh~C*N{9jac`LL%+60vQgKFtdws*`=F#n{9DE+*iDbQ*3d1q3dyV|d~A9FdQ|MAk3 z<$WOMIP&iWUCYlE&~dK-9c~gZ4Tph;{$PAL`yyX~d>+-uKeLaK+lADT<^zg<9p1ZU zUkf9qAK&XNbkaY9|F};>9~hut%y~@PL)&K!o;TBd$($wTV85vAs@(6#d!K)USMOc$ z?LL~z(w84eJ*m`%g20@cPo>r?3_emF4FbEj)*(%ED^dIEdErf!c?n26PdIiOmc|5`h*-t0%ivOj1$YJNIDxhF?J2bF;wD6mGYdiTu_dp}) z%{D-;86ai9%=2BY_dT?s)7%#nr}!lQ!v4$jH_qSxYtG*;_~Pcf>w2!m&i6LXx3fj? zxv3_kY9CpTxgU8e2>dfI@8`4YS*0rul%I{pvd zqy7DOnU-h#)gk<^7CyQKp_}SL8UY`#ikOcr!pA}7V>mKCUJ)@L8-$MuxsjhK&*2p?tSS-78L;jr-f$kF@3{Sou=PT`|Y z`KU!2fxWsnVm|H=KH8O!*2ws{HDW%t3LkySM{i_&ToW-LO~S_^WKMz7US1@qzis$?Q~(!Uw@VPC|PVfp8DHgl6=aL zFJ5-H{NZg&$~=NcLA77~)I0cL>t{dmI@{=Iy0(nqO1-2KoCHw!&*4?r(m zb5DcWUp@$W=$sw+9%`4=n{&K$80EHQkuDoRy0K63Dc%~bPvf7gU#w|#t_1mdx+OLJ z%1d+!Z1)F=GpM{+-lxwhPTC}RjwVhz^}pPnQz)3QKeDewnzQt)fmA#>xTjo`gX*X|KxumSe6>J{| z0K0qf-W@`IcMr-3anf2Tmm4R=bJM@fe*7R#+9c(kx;UwhuXnU?k9Fn}Clx=ECrkrnmB2U?VTU@497`3q?{f9 z{GVTN{w{eQ#7Vnz@=bESryx%HIM>q_@U_r!hp!4B-BLl6anjF3%*Q8%kLcs1AB>of zy~4+Yw#PWq2<9Js5%cjz;e&fR&!eJ?linUNA8Fwu`Z(#05%aN8_~_L3h%Qe0cMd(6BqFDXuq)Iaa&2wemrg)=2IM3WRAT8`xec<2=^_sjK{rQ<8fyHUa@#w z8!<>fKORT))Dm1Y9(SM!*Nk48^TJ*~=r#7l#5wKx(#yDCs(!f||NB#m%X$61B6n|=@i;oaFZsD2 zeB^kNiytqWkmn|j>iYW@(SAo0kGq@gvyXogbSA1LEgX--dlN4(`zCYaaoWzCMO`KC zR`G_wPT29d<@EgjZal754r6H%v{uAn~}%UrBay7V)^Z(81`r z#N+P#Ip^~M9fD*_~4N__0tIBasMx3K1zg-=;Lv}ej?g_KEe2( zf_;nMh?tKr2p`eM;~t5akBm$cs! zX#{-y?q|{Z^CuYp&KBjPDKb938!;bW5k9(=kFLo0I217-pAbF{Dj&m<@$rF(`4|#D zCX|oy$oP05Vm^8ZzlkGrT=jmsC+VqJm+~U!>s5@u$hy?Xd2FR=y+!w1&*mPB4TN{5 zdo12|MdPO!=O2FmqUA?(kHt7GRn6rdi^CiT*L%%UEkd9u~^RfZ_fSyAGpWjy(dsV@Yic5Bo3Lo9t6EK{berqSiFea)5mYtgDMgK zjNl%Nv3r8}zP%pwd3s)WJt!&k1pBkWZ{hvfy1wG?&qjQG?)$S*F4&)~a{lW*7VHWf z_c%%ZdXI&5kHxjzpZ?OA|i|ByPm^`JucSS;U4`Z$YwEH3AJ zkOrGz-)3=-#rmIe{&vkT!(rOD&>^tB9`t<9_Y|xLoyqk?xE{1h_=tWz=%k4GSSEZ# zzaI35pG4apzhL}3qhAmDe#Cqn7Cxe15BhAxe2fSm(XR)6C}KYL2_K!hJ{R5o>~}=W z$D4$Y=+}d~BIe^3;UoI>pqnD*<7(j}`t_ifM$E^B!bkM$LFY!y#~H#$^y@*-ikOdb z;UoI>pkpHDr z`FM-)5&e45-4XM#OZbR>J?Q3$`Jhjc@%$t5^`I*w=A%*g;4k}7oFJw9TO(NaeO|u z`pP8b+34Qk*U05G|NY*NeZ`!Y^4f6@X)gB)eV60(M|-bOyO84)yno%?E0lAN32`j5 zpWNnqjQIA?G4&u{aE?ji=Q8`lIie(yV9wjj`5Y6i;qb5My+Yyp*XMbTX)foNUd#Pt zw&$0!DxW*RSH63NzW!EPx1yLM|NL`Hy8)YXPj-CpAhpMz)4f8pTsyCOg_cnl3)Yni zty@7ak7nKKXM9gn&bn1C;1pYdd3}dbP*E@37qkc>mz0Kwv(+@b`Q?PDz znCoeS-HYNJ)8~YbZmA&3dxb_K=HtV{NA&Af`y%F}U-+2N_83PR!F=mY5%aNI_=tYp z>XwN4Xcs=BU$?qCVm@9*`0e@cRdOFpwdz?iGCgaEn6Gmff3ba?I^Q+lFZItwCk~7K zH{WsMdpp?SdHrMZobD4>x$vl-p4Uv_xqdg?tC>`o2JP}5<8|}hZu1@Nk&L{SdnXRj zz78H2ujO%gM(Y^_UT+2JaR-6dTY>qs`96vH-Vc3$8Fa4zUiPa@`1ajNdEoVfFLwuz zF33-=Qu^za{#C$hzBB2rQu_5flI?Q)Lt zrQdrr-*xutQ4jOOc=Pe|TNyWi?_7TH{dL#p=St8sWcayEVZ+ah1m3>;dP$id4h#nT z^dkQP@WXiX@$;P-`FSns_xahWu;GUWZ}bb=2m5-r@4j1}Ge11C3iuh7=k5aV!+7)Y z^Qjs689@C$KYa=tepKGRzIDs{?Ypy*GCwi;E8u4mxDWeZJ%~_r#~+>o-Do(2t%Fc>C^W zNI7mNwpal_T?@t!w9G@r4g?2klg^?~VSQ<@3RRY+rYU4=*Eq^8fSq8x`S@BhV|%?4_51pF zy~0NSu2ImPqPJfocbAswOv*`qOi8hijN7refQTTjNFOm<~#OoR^?Ma z3_9oM~Z^WBCK44WPMd#c0t+23gZzW8xG%Aju)kP~A(ZbtF%kjK-$@At+Z zvc5tde2*0856g??^gNQ2X&?U_%^vj2V)Al_(2f_h<(HdTFEIDqjWmKzuJ@}fx4Qtl zLx)99MsB8@FRyykGqMi(eYsr-*vM_<#R2~AS;#NncQ069n7->n@@u8%`Q&%PBFXOq z5zDW2p7MKsNPfKqp>Jmq&{NPeRQq!N#PXY<4i|jqC%^xg$^JbSk{{0y^4Y)iBFS%g#PS=Rr~KX(l3!B+`MqS3 zEyCo#Qt^)E~wMgrKNm@UuZmcH$$84}_urrHe>viiPygP#Nb^SfjUWI^>#BZuw zpPKm1r)O-3qmSQo&Z<2M$8W9->2EEGI-mX?LvmV-_|3anZV|?Bnr0!tndUFg4#|(i zlvjS=xNdRecU#2rtDdL)mW1R-!-2f=`|u*k?`09o&zYzEzWMm{@y}=h`MqJ0=PsH-8o2UFv49Txh{N~X`lHYX^%ddQ% z^84xcru*MQ@tb$D{1##UcRtIn;JWeL=YKz@@3|L?_s=x{`!vgIp7TF*zpB3<7t=+@ z>%sbNcpt9UgLT~~_v3z?~^7i)=cFTKi7f19j>%&j={#>@h zh4t?dXr9(7qqte%wYWG&?zFhxYPiS8*wSw%+HTxQmcE2QVYNwyK3-SA${gS(| zzG1ghc)w)*rabZXEciI;{gV3qX0!i~_thQd`&!bV*Q_hJ`$4y7_DkyegunkUfpOwY z>mNODr19@fz-#0XFVp>!G!Ct$SN?vB)?W7 zHLP#U$Ioa;w;1w!eZ=yspQrpz3dygxfc!qSNb=)*ucFkyih0WKiSgwiFHw8tua_6If4c9#;Ci{Se|h}I@hrcBenaCW zA-^$`zj$mG^77*)dF1X<* zw{CXlmxFou;>AlYnX$c&E?&ZXVZOR}=b8U@M!p6@?KQi&$zq;oW;Nw#`Vr%`<0NKX zZ1s%%{5qs>KMl3d_e1UTO@RY@_j|y^*Yat6jV%~oj5i-&OK0TkB-HP>(=!w{?R2cd zM(_S8d~Dx+iah7>9)*~!c9Lbk1!*V7n~$HLQy{hQ_@OSuPi=^w>JUFkfw%AG-TsK% zA3u$sTHC_VBxQc+nrlnndKZYFC4x5}KN;pHXC2}p(CM#3 zJfN`hvEp8Zm5&v73%q^zK1q4K;6&!*sMjGzk5F+Zyzam-|IB@9UZT)C#33oq@!>Nz zl78<4orcd-+knT+Yuy9j%iMQ7au42{dl4?!%>(f1`oQ-%nESl_?*ZS5a$N7H{+r%! z0c`5`>TwRjlr!;lvu=?SU()y#i7(al2wF6&rK;SF;=dpDvObyh zh%3Jx*p->qBaT@ldA)mq<#ok8<@KD9yjn@5|DV0@fsg8{@_zva0#>24LqoJB;ZI4? zXo9V!xNQS%E#j&HO+l31giwLT)eO_pT%M~5?N-XFh1M!tbtQq8;Ht}Z)zYdvv{uD# zU2)e{?ABe>{#^Wz^&hTUe&>7sym@(<879oUO!4FUK+b2|M!LK4^}mCE_(Zf){2)a@EKGs1ROnD>Gg*OT_D$ zCx^C=NAuwI@e1Mf$};2idm3|;(!W0v!7JbW2=A&8UbD)K*EdSU>;4E{m?6nkA3G|9 z*B|J@-4VR<-GA`%3gPw5GUK(aM7-V{!3#6Ix%4YpA-w*n%y_LW5wDgA zUYI$~h1btkRHi@iw`IobiW2dvjo^iu>0Eeyxk7kdUuL{&O2q4z|24Efftl}Ick;MKO5UzQ?^Mcplrn zlWF$~U!JO_*^i<0bIwPH=8u0t_iqgEPsluZ(eu%Fakjj_{XXC&$IP)pj>C} ze#hq)lxr6o7F);jn|G>T*7FLT6Q$_{I!`&s@nM%n`<&?0d>@k7$G~0$-$8mLBG*F^ zx$alLtONSZA7y_f_dOmdD9`Ebd#vPs$A2j(&*|-V%FsyS?rVzsd}#iCk8dp~*XiwhtmOAw~Y z_U`odJ7()s<-X%`S;2BT^Y%T?C@9aFx9>4gP@dD<_t@1}x&4km;(MI()uYqf@0hiB zmD~4txS(8T-oD3A7nJAB+xPgPg7Q3D_dO=^?t9!)P#)d?80;I?{g1)^Zr%SF?C*~3 zf28pQ?|)n<_f)y`K?*5Hziu4U&DF144|#^|<2*>S=#+1;kMn@~b$nF6U;R3cs2^m1 zSKlFavEMRD>7NbzIFHlOL)%Aba*oD6&Ue#2X2a*rPJbWgmA95QFZ=v&W#?rI?c;o` zLU_Ho%y>;N5wBkz8H!gs>2tXL*gnoZ6~e2f%y|9cmeTa=s}a2N?c;n$h488^GhSaQ z5wCp_ybk8kuayz8y7NIC7--V*V;C4yJJeVp?vgx9~78Lz$)@md|hE8jlOvnqtw zV43lHV~KcO8o?{yKF;sIt}^|JEoH{*k`nPcJAzlfeVhj?gx8zOjMwB6@%qs>hxRA( z?c=I ze7HosTm-Lt`#2jagx8~G#_Q%1@p@eZuYCJB$5aTfzb`Xh%SyznF@jgVeVk7&uS|cU zr_6Z0utdBjMDWVDkMq+N!fSb%@k*44*LS`#v_Fw=ALsT8;q{_2Fj&G7I>Ag?{yaND)+wEDw=epCs?P^`>mtj zM~U;hC^cmFY+a_*eXrSl9d#mC1-_5+4Czg|_rG@aEoOPJ-*61dD_9?F=kRju`vTo? z{j+^vPZgA>gnh4+Usv;5<{xs=zmQy5J)nADhW%`yn@g@Q7nG}neXo>XSF>EW0=dSK zKU-c0$yXk^KsT3MpC~BTE@U6Nm$k@!uX1dF?vadp-|INuPn%1wyCB!Fb?Qe%o?x9? z_qzt)J-A=r+d6e*zbo0l@f0Jled;my@vNR@Q*oF z32y@Z%5+FL^aK#&zMfy;K9mR@*C7RvIalIOo-M9_tGHOtMGXH!&G%vnpP}(K^t5om zoN?nlnEY_QsQ1YCsc^oUpEEfk`F4f!Mf!aCx}K&W-+c1^=LqsGR$kY$;FS4(5&4>& z5xk4VdG#!4PZrP2eD?DGT;L2`9}MTCc-nnUsq|t_kXAiGIU=3mX?n1FmfY7AE;pn9 z@i2Z$KXv00rfc$Luo;7%$#cX_Un6cbztyu)N`>Y5NH{;kFOQz2Zh9rtOVb(?p5ghO z8owO{@mtDt^WvA{*IrxIS^UFwh<|ncIR23f&s&h6%47Ihd7+--iRPE^ZsPDP{ru&1 zGt0x#y&#`Xt>0R2t$sg1WKhoe@H0Kl*7G_hT&SL}khi0!Ccqh0B3zG9vrx{pBgnTi)Se){m9Mp%9XG!~@}qV$Uw&tW z@ijX;i<5bsX>nnH!u0Q!U@zK^ga2_S$qu;n9K-dri`yv)0)36N?`YTa>HP`Z;}S`4 z_Qmwr>isG8Uh8SL{`DxI-Ru^sfBzfi;}rJ$RD7g*c5!~iw1Y>GZzMmntLZ)_Gpv0u zyoU9o+*VHDdV1L{g!`An@>9}kExo5lZQNZpU2=fuaVWfN%gZD=Z;GIhMGr!Sx z%<7%B3x(RrzX$y&p64)GZ?e|A)Qtm@&s7p0ZU0@mm0z@t)%IEIN1^`C9R=jd-#$<0 zeB8||#SQWq+W$a$w701LTf+Hhe3Lg?UZ-lOXUyVky*Xp^_xo=Q=V$h-Uefv6j{$yY z5v`oee!26copjSAzMHM?EE0sCjQ00tTq5Cf5|hMEi5d4Ynos5;c^~e_f&%bpC;l>h z`upE@Jw% z``Pc;?vilQClb|5&y#zHA0U4n;?0wN-ZkWJx>qYThs!uRGe91CppUz#o%H9)esy2x z5B*x*=e%3vQ6>i{US^T_Gt0$AdHvJP*egDh12Uob6#Zlk3GwYU+5EvDps1lnygkHM z4fT_ILw?YGm~`Mw!eKk(@La|r;r%z4kL$Pc+NpjiPrr7%`lTHG+O6VOy-!w6<$1zn z)!9tXX?;zOLGJ`-mhrVmng=><`s0;80S`I>eP|Q;Q&a%-gzf38{^R7ypghjw*Ob4= zlgmR zbj~9>3I4hOy>=bP2~KZ-A;R<|JZWGp{t61dlESYgx0l>>?K4c@-h&_XaPa;pznA=PCOOdqSwSwR zC$|^x=lwzWqhbWh2~Qekw~hdyC+MG@H;(-_{>n74mvQ| zvE=!igl@uX{!9t9D5C*^RLA*P~ z?*e)ezC-cv2cPRDzW=T~d|oQ=P2a2@Cadw)V!~&U&__GO{>4J4ZH&B6PLTQ-@UMJ> z-?#kx$&*R8p3tKtr+P>=la+4y+lYrj0ObL!8`mUNS~e`#{UE4+*5r31=G5shX&UH-K?Ct5` z{0|@fC@(sZGv-t{uOs{+aTxC=^5?=E;koceiHrpA+ls{dtWm-H`NVzkdJR2=ywFp2 zMO{1_Z|x;K(O*G(g?1&W{VAvO&H;W4RbMGR>+8be^wr7<`nbAC9KZLL;`KI||5E!f zLF-dsC#V{N-{d&_B^;z$dMh-%Eg>Ce8$af=4^bTR;y0EUpvUI%{Dsm#^lKGAVuSIk z9XWoN6p7zwMuOj3X4lJHB`(JG;BOdyWAov6J|{Fg8sK-S#5Y{aW>?3lUDf{DT!NeJ z>eAA1hJH>g65l&U72gX+jBi=&X%3v(p60-r?P-zv44j{QrnvTN%}8*r2N$Hbq`&yp zc+Lyi@9Np{oDB21UH{-&A3ciD3;yr%E$27Ckt2lL-R-0Y7+-z;>g@Ome6L+Db`+ZJ zZ{E-Cs@?D5Z#y9E?6yG(r*S5+;-&8qy+nPgLpsF?^EN}~jnqDb`4}WVg6}bHJFN5% zvK#J49|XTdFUs!=UQc#U`-kCqqvM2sDf32~-$w0kKM6w*`Y8vA9_sgl)O7?-pL-qb z_rYiIp7wdMYxA+z{{SBJFX;CrycZ!lrBfVh7qFb!`Ijd33%-7BgZj6#>(@?E|4#MS zsNd#)>e!EbA0j?Gbv_7wVx7iOE&RUop6VbTT3Wx>V?XfvL}(wDKDy7&rq(`KhOALsH5=ewWsZCrFc$Md%x;`eUP&&6GEozQ9i3!$U) zSpGJpQ_sPy_plSmD%s!XFFnZV(VwTP?=_zL297v^lH0Fg|~9}Rt|UlB9F~)r<%LzE$Ho+_sude_H~}y&3~u7 zpC|Pv)%-5@r&az9%{1txr)#>n9nFsYozunjb$&dX?-9-i{fVs)R6jdJe}(w_MV{<@?E#T9 zn9mjc^QWtR>;64|dL5@vyB8}R(Jz1cOCY3m(Az)tV;CT`W7dz^OD3_He#}=R{TR$_qW&zUiC>z(DsMkV%%?Y!eoWhq zRQ|KI{HfhWKPKBBY2p`7=W$&cUw`(z)Q!{FP3!!fzwjvAp)j2zM5l341IKf_z9V)j zC3ZY@qx4gP^tHp&9{?ZJ@2evUjn~W&I(wAPO=9;`o1`C+zCrA&ze?#`$k9FYCw3B@ zmZS;el@cWzT zedBGg=45Y4U)~1)g|LQbM;h79)sDP;9nrCNWG6?X_*5YDoWdMp=<4pt(OMv$wtnG%K;jY*`$6gzl=2h9?BIe?r&Q! z_=Lh6IJ|vW_zDj185X{T!==CD=<*u!5?$dt)w3R6@(*&j>)D`w!NK)tKXO~IzSsWg zwyo;#)A+m8FAD8%+bRB=rGx2j-p>9F>qLLLHh-P{9dG93Ugr&m*`LyL0O=c!OZp25 z2zq?2Pj05f_vamz_xA}78`db@c~1)6H4?8=_jkDa1jm%_PfA~OEk|%`l>S9ms$bG& zRNwsulmhg%o9PDmG)Vum!}4hW%7`cU2l+Hmr9iml)9{z-XUFp!P-?VhJRo><>3Uzs zfZ)+N?}X$#AnTM}4QFxujsXepY*7BIWq(9^f!GgQckmm|{u1qH*Swh1p`PJMcz1Gq8@HMLvvm)SM{!|? zkOcMn*Z)TK8%CF&dCN)<3lMY1q>xlrr33Sx@%P zpV!KCkk8d*vYoD*+IP17%?YC8WnSk)Uv2TElLN2G{tJx}CkA-+Y4oe${btmmL##(NT8OJ0!!jwgcd&iIO6J z$PJtc)|1IG5-;KXl+(Gv9&!8EvzuLK)^@O8@&_H1ij(wsBu3ysG zzBD(`&F}qr2PNKak=MSj?rs#^-8ITrip#ZfR$gwS@N4zP z&ShM_V|Y1&u9cIG<3RrnT#hH0uIoR}u3y{4ZgL`5;b1?~T#}~=xD3eq$Za8<*cB8g!rwvRem5tl^E*{s&IwQKmg^V#lbhwe+avhc zI?ZHhZajCBme(rD*WFmh3H+s^AE}!f*q^!)wU+AH&GXnzr_@~};pt@(&+UDc`Bjks^!PS^(!pL2^F>Yc6ZMkB4DHvN$PxT)io5CYraBIHYuMrXi*%;< z$uZI{WpPeQ{Cfot+h6LIi(a@or9%$Wp>7`BB>$ChGh#UDetSO3gPu03_=tycA+@3L zjnX&#r--~dO~LaKOrQQR{Rv+beSn9ag!d@>t-kpeN_ZQs!y!t-ds^N*#a-=)jf zzL*{3`a|Kq6jw-Je!z56sl}XuwFjxxBK3n?@-S4qCrf*F2Z~(Ryim z>;kWQP@i^*-`y+k-EN6*`V_5aHeZvkepx+APZd42@<>lreH|mX z`OE8=Z-2h(<(*PazV)L7mOxIw_Av8p`sr^w%6_-|xX5Ma&Qk|jGu*}l?E3R~n-$r$ z>f^{Tic@&KfZLCInJq7KtGK}F6EqKk@firBeXf;P_}gp!uJfmo!qO9_zY=zAfP=Yy zz^;Mb!KGAw``U&7!IkWW)6p~+$9weuU|-ks`y{Oo;EA?dR^LGP>8~Juuf`Vx=X9TH zINnbXZ_`Sq=TfcWs(rL}*stecuWgLT<)%tK&Au0Zn~twwAL}Ry^1&PMa}@b>2pzP~ zB-TmWZxrk=?NGYGd!=jpOEo>{H$>=vo#oid8MsuhxG~7_rI_XT49jsq<=7va9G{3; zjsceAn96Z9HaYH&S&rLT4%Bq2r>QC8#-LYkk6DgxmSc&^(Gr^+oiWR?g5~H@Il5z$ zV`oc~8h;9W+3{yMUOk1|_m*)EYYF`Qh%NJPJnp$u{3z!a zU>;|q@@ey!V`SpVzemQ0{x+FczjrfG zXRq*md20B4Sh#$``??=PeN?(OZxtOM+Pr2)V9cJox=-*7&y&95W}4TexlKI&J;JYz z_icVSJdT`=dSvrKI&bO*Ri0ae zp?n@^w_Nj^!Tj_ZDPPF*|K6On7pQlrhzS2Kh5u=OvyOrK)BL9B3;M$_wWu#}&xHBS zXHcL1=;k+@5-1V3v4P!k%x_LzM&(NV377!1+ojHL&ZZ7VG4q=ZC#ZZzFu!@-zaoAw z+r?mCM~?Z;Wr#Nl^P5*ApAM9U^gqfyzqx?r*vjm^P5X!mg5SRBmVi#=9uM} z!*awwzgZKr9A~i{htTb%cJQFMF|_9=zZ`FS{tM9GbVB7g9-AEBk6DfJ)OUx`_chgpu5Do1NJ+VTVs~vYL;V(%Fz;=9GAu{#|v4G9+jgzHaRYcS&peJ z$DqowD>gY2G0XAWLuk*Bs2qo5ljFz8C&u}!qbx_Y%vYvpsS@=)hI;-VG0X8Kq90xd z-|;JyPXok>bshXb%yNAU^iQ!4?$;jV`Bu#PSChQ_O{kh?F<%%~1WbeY|epF^+HRV0NBnE^R|?qWmxK0~bTrud!d&)+d8?`dc^} zuV*d)HNEc?zvXY|Dl8q=O+nx8Z41^-=S#Zqx@$k31(|%Cg!?xfmHFt2tloT%N9Y{j za9ckN?~DCw;65O@U|j|AqqqUD7gY$a7nK<=zeK!NMDS|QgV*>9;WfU@c(s*?S91if z?RoGzdR1lW<59Ao<*bh{DG{&dMDRM82d{@Jgx5o5#%p4Uc>TXG4Ygm#^WgQq3gPv> zGUN5VjiuT9Oa!kwYD;t3`?ppIueX*Nug{f;*WX3(YR!Y!k_zFqq|A7IphUdV5xjcy z;5D;Cc+D&`Ua1oCdUXV^{dw^E{o=~BkH7zAdE3WVm5A5e2wq3?;Ps6P;q{F&<29#5 zys9F2O`$%1E_=VfLU`>jGhQcCrL~X$^~It6iIzNgZL1Jo+scgBw@Sq8QxUwn^We3% zLU^q$GhY8(B3^ey@YP>pdmnwIPDn;XHWNR0yw{GUK(bM7*ww;N^|Y zZSS96RGI$7)4wQhe_~OIc%2`?t0@m&k5>q<$IFb@^Gn3*H(waqKDOt<>%I!%bzhnB z`c-#n{fVzd@Y>|yRS2(DWyWh?iFo}@1h3GiJOT_E42wtsu@H*B~nf}DFr_0-)xU@vP z&WYgFn+LB)DumY~Wyb6567l-UqeJ@>`}5%Spcf96~gVFb?Q6f zaZ}~ox3BkwI?X@0|6lXB@8jBcS8RPgY;S3~i|?2EDdBAVI=yeyua|tB-XH4MtDJVf zsNNeF+&@|`{Mq@@uKGF-@b3}1+(w{F{LfPU^}9^=one2WoO5-v1Q1`pcjabsGP?^`$fN7(fn2*qFa73)!iU`#);wSRqQ8E#-dDC;^7EU8fv!Fp}k?&vFz6rni z^}^3?ljqOXZ}MEte#ij;yPDSqegtLZ+RowSkPCEk$@P(fa=k$&dco$5Ea6!$=` zt^A(t1mx-)6hFy@ohI4xIxcj|pogHFORfzC<$6T&59E4C{U+D_>Nh?7DEqtm9%C2f zG@gEC<*6fS%TrFEn@gV87L?~HWFIQ0C)IEAd|mw}&*SVjd*0ReWAT$*xH&H?7gjOL zBNyoAlI!Ava*db#gL2}}0N{H9TCaW$_Q-E?{gnM(eb3``C?{C5tUSGClLvHj$x~ZU zo`#4#syBf=dcHA`X9~yf>T3$*!PO;MdG?o09?;Dt4_zHvpnX~zkw-qTnk}D&`rgWC zKKr}+ma~iUnKVS6qY}Rib^&yA$@Bf67n0{K%CFhGwdyy0dz1Q2p4YR#tM5j3ArD{bil|!C!OgEQ2 z_d_22u2Hssr+Oar@ASN8(7)Rya_Dz${ra84KXXg%Q2hb%(_h>?Yx_a{Y0~ep{Oo&k z)~~jEKdnFP*B)TIV|LT-bB*pZ_4WIEVfl{nzS4u79^-`xSIWHb_Ukuk>kc8jsmy@b%KqqaF$#h4zzv_X@&C^&z;IdynYz zsqk{U53zigcjU&+Jc_q|7k>fiP}_}y6{{O*hyzyJBG zQ`g@@`uCX#eh2g5cSD8nqffQOT7MrX5x=`4_#MxK-{K14w>W0}?kEwzt_XhUN$0YE zwH3mTKHVFu{;ew!zpEnnwdTR^>B}qA{yzP)c=5ZkMEsr~!LK(DevefMzsF+6@4OQ6 z`^CdU+h6qXbJgF03gI^pGk!mNOKI)zzee!G$T=5&n=6Fh=9uyOQi=HOj^KxpdM^By zR|vo5G2{1<67lmR_+e%s7k=}A-@suWht1eRog8|K9q-yW{PH!Y7{BEh_s#=;w`hL- zx~>z9du7}i9mfUZHd$r~zQ>Dklq&)+`u?kor*n+g+JINE9w+k%e+=t!Zzr5>e4d@J zk@clBaXoGgpdR${cx!y6v&iKv6t;cosRc;;boPzS~ipW#k zI$R~!-+uekLiOm8h&;uuzh&1IE4L2!-v#A5y>+-suD?B6P@Xey{q3U#`<%Dvvy%n@gU91?5?#{F=TkkI1t$BF|#>Lk^Eh zs;hZT;GarC*?NT2LgkSQbaTmdZ$Y`%(C?k(y!y;~c|A^Z7m4gBW}kqf7K z$|D!(=8|h$LAm~3`8K)UuYQy3z3Ml)ZVTi9-(Ai31^#o%pDiz(zA2Afpqopsw-uD@ zpz>{U9Z z)SZU%M}kOwnnS$S|8q&)I~ZZ3He z1?5?y{91i#QNPKvK>a3)Rssgkb+n3$#)%&6f1+(%C;fWy zm-5}tt^Yze==qD_`_=MUd-{&M7zU^3Te9yZyv@E}t?7Y71F?kiL=4P>za8|~ZDmGX zN3Xas$nmzA<>+KN4yYXaW0T{$nB`c?avW1Rj>aa(<|mN${wN{rItiYQq;%^go$F9J^XlbOykEiTIoxbNRQVqx{bKN4M`Vo<%}8S%py}@wr&=ZySSCZ-mzbjFM@*(#uYOe{gU2 zG)XVB*OY#d#It=KnH$BAerf~pXL^ltK~8oK8*+kD5`%ww3^#uZdp+O!zw{b05DaM?&C&Mv0K|02`4+c+yXXz=w2%Yo}c^{QCz_ml(XXc9=F3)gQst_?|%REpW8{o%I)7r=(jw>wm@GC|_ZI9uM=Q@eRL(C;ewTSL)9@{0t~& zFgXtQK5^0i@1^{$T*7iMpeQJxAH12$wNK*vwd^vh%^2LE&ct1s(|V zzeU24&ud9h!ghK+;)UM#kw59ZgcD>aUpy~kS1?b{d+0yt*!f=cJBj>Bw^1S_>3$nLE-iuw>0iOYTpk}J{4#6B zZ~6^j`vlIJ0Rtf{cgOJPgwu9fxdo^ zUS>~)C;Ho)nI*qpE5k?c{Bv~wTfgW_!kf*A`}Z7Vy$ty5k#s26CG<1QH}}uC$a~25 zJ(9r%9O8X2(>4o_wSc2AX9Y=6IQVvKD27~k+ z{CbEUx3V5fLHjpIKH&Qzq?>e9@&yrksC(_zk!#;Ka<_a_aMtmZyF~JJO;YaerDD%g z)G0>#)NS}nbem;d?N>=Z#9yZCNsFYur#mFWwAo7{+eGP*KjenpgT5ulNW6siQ{iJ! z=(>KPXXo87-$8)Uldl}?d^yTv2kep3v3fR_@_2LNv-0pS|aYk8gb{fF-|Q0Insv0p2-6MgMIGyf(eGCI z4l%vt#1}H(Hcw^aNje9??ZiE$} zdVBLccGD?!7fE<}nZ$E@B%Qygj^kOrZjaFS7ioS~qJMt9=%e4k(LIc_n&>C&4r+9E z9#1+#{x-#Z&taC&y`qj2x;5+s{Z7-DSom(z^xH_dn4)RC4 z57*|mxF0}%cOCtq$L5{T-$6W-3+xfuhoSgS5qTZa!-Hm(>C+#kKjDk4M`q^}-lL+w z*C<{WO1d^0Zz6tzE)znCd!^!jr@Xg*py`p>MWgFWafS5d2TUimXfYF@@geh_TC_<0 zB1fvFh5hcT1>#=LU zX1CpLt@jI$OF3vi%B9*-bE&_yl3jnEcN~7dwwm2xc547{r5(fgDs!*+tv>~vE@&Y= zq-F~Q(avLCL7!ghube+s6e~>s1mT+r(MNfJUK7=QH|Po9_ni=Y`-LLf)ngiO%pcGn zs*!m64syKY7>rhA{(L66u3y>%t8bv+@etBUdywsKEnqs~cyFS3*8U;gqrW44*}&vI z|8^;lyTwcR9gy@AO!sCU6+iKdpkO~q5%&dEy^QeGbj6;ZJe~W3-bnb_e7eo2mgByl zW!InjymO)Zf*QGe4l;hQ7fpm;SZ}QSpCsF8^Tk2?ISTg$T@2iAm4c7szMzYWz^~AK zEr|$z?RoI~WQFiMD`xzvO2qHm55hiV^>2F~{N7z5{GR%Ky!!Vo8tb0wzOO?1_o)be z2lL>!wnF%QHfH?(sYLwV6T$Cz9{m2SLioKeX8dk15x?sr_|;KcnydXdw?g>6C1(6O zO2qH-2!5@3@cS{%rBtH*y*g(6E-MkgWCXw7Jor6YA^cttGk#~6h~H0Wf;rs&?$3kY zhbn~MFKHYQXaDa9G$&U|`}>6men<1*cO&o{IL!U*8C$54p{LmKMk)8TJP!PB(frDA zU(4r z?!o^N)|=7%e!_DhPnqv);dwVIkgn#%EEoJVY3J~AoLdIna6jab&SN}H^&!7p zCEVLW`Bm~e3g0X!*E$kiu!;dWti0}5zsbd0-(-Ix z%k>z)hn!g9%F0zoZ_6VW=;o5^wt{j!h3tcN&u@NG{U+Df)o*e=&VIWWyps31bQP5A z%)8HJSwVSpJv-1p)tf;7WJNq%ucokGRq}fZmll-g*?OPLIQ~vUu6lGn-Q8W7JpBnR{9kqy{|u`>rb{%%XM%y4fba+3n%Aw z%dlLA%Wzy}-Kr3-v%>P(em%{IDeouG5jTB}xVHXk`dQ3Ayq_RHrE7X< z`$|%};V$34ySpV@&rOpbrhh9)7^-SsM)wpM;$x5trN2e!S$yDl^wTsB)%u-lKi8A=-uMsfik_#o zec{>tP$Ebr&J}%$_$_n00ib_9!@yBy6;C9$s?H3k0xAnqN#rFcJhxf;H zzU56t;`~f&5qdnA;R()d@_2Tf>^s4Rf3$~GwYb0W9Xgno^j^gYf_++guGXI<`-^BF zFwfhB_w!(%M!3CQMNM*>H-qVd;0k`*Kg3_`4I|2yZvV1px=YF zeXiCIwSH^*7EP~m*mr4D>0SJyZEOwC^V$4G&<`q*?+V6W_fu*9)(--Ic!u?Z=AB?% z65b2=y^K=%C;s%>`A>hm^jDmYo04NBzR4Gs|I1V!3Eq7!`}B4Zp^?aO#VO=Kx#yFk zQ2G8ZboFw5W}dg9)CympN>A9QvdCIWcn)3F4%XP@MJ(>`eOB{82$eZ_CxA?i={LDwDFjYhl6uY zub2EYI^M=U#eND3#vxiiY+OEP?0B{ix#X{-bkK|MgAd)`ZhS=Rzq?h&q5f6kx?82d z{Hw%uw@Q8UuhM#VtMKWE@Irop-ROCkBeYeYHDbGQI0wJ^>_&oby$aW7QXYD8;Q>7a z9*>6UN6P0^~q^dtD0p2dmdy9?oH=Sm{&n2q0!KRf>(wXX?J_N5o!?npysbi?h= z|9vt$9?oU2fA(6!SLflJj_Ze?>(u&Z^FAG1ECtVXt_MCre5tQNxl>z#$J$?Czu%r- zB;kR62j@Jm;}-$FPKg)TKiQ5yWS-3QeFgDh{h1*B>7Mf>m<4Ii!xW+M?P>&{Vdp&; zTq%4{S9_(n*?d%?^PVlh?^NeK`veEz1xQW5tX;HrE?NCzjyRXtm`T49p7?D)AjV_B zE2HyGHvi-t@rm(0Y~dzQq01)HzZfZDY@7{d77H=Y(x< zb+fh)>bLry3-_O6pYIyVoSrNlDc{M>5+3wZ7Kz{PG4SUL9|=z;?t}ERCEn_b#jXYS zr5HbR<$W%G{s;VY==+W0X6Y(l7fX1w{}Sa3cs@Z;Sb3y$ezR@-6zLz7fZJmw;Fj=S z&H^~a$>dvo@gxqndCZLA)gbcb!s|isq3w^IFO1T4a|E|ctI(O;B(9xHN_UGtir?ys z^*oN*+bBPal@94|75xO>dvo!l`A7MR@{?}Q&BqKa?>XZpNx#$Psg0i;`c$X<+?`9G zj2|uk;QZFPauD3t^HT0yF>wAhBp5yJT+wI$8o|?@4XMfAnf=pxZ1uwQ&Y#!9_14ar z(>bx@NN3|Foa3T@!FZ-|qtG?GzJk06X{-7jSv<;bUOUsH`+WF3jla}mzpZy?HX#=*hKL(cV{cY^7-Wp=J;Wsn~ESp5snFZ|~}V}9Z1lKIlE^Ynw)x&q7Jp zGGE*#Ip^iq0VTm7Zr7B>aOnKiQFi@#4U&&UBRk2#o|~=m%u#t}syubFAINW&ftBC# z=R&9HYIY6RuDZ4CcN>q%dp#HHiq1#&=lHEs;C{+U^8s#kw`o2HG@qIg$&=c2 zP}0@y61R1yxGmeoZQ9Cix_waGDf`%U8;{HTc~eG|pI`Tgq-&M^D}KxU;%}1uDqT}_ zp9<+W{qy`AdW8PXCpcbmg5IyCb}_qeZ@Ls6apZrKKtK$IJJ>-jZ zF^FvPq2C3Ht1pxG5c2bUC&foRwu>Z~)g$1)i0o5FiqUJU7CVl39Dj_YN4(d*hVa-y zetMjibE*1~+9~Zq>TY2mIL|sw?lXw$i@&OsaRxs>#D2+p#qV|t{-#F>@2eaSa?}&Q zX@TAIH*e=~f7@1ZZ|G$=oX<|4e`?`y=1dw`SntM)}C3pWVHW^{P&QYc3+(v6u#X)k;CpYu=Bb8JUPD`PXF@1Aih-3 zt$zgl0pgZlV+!1fAMWH0_)B_qkL2U}djzjqkt=&XSmo7vo~`$St6#gH)46`dThEcw zJslhlJfG8j{XZeE?|tp<*Vuh52w(8wPUaoe&iNcYd?y+Md$@kfv_q!lIa0<8U@S|Lw zxF7BMuQ^^YAG`UO%G)CD)I$`T@V9z>E_*%P(}IN74^NI`GQmA&)=v71B>oCoHb9KF z#2$|5W)lPS*u4@H^gZf3A|w+Wjn6G3o-fU**GAjs@CN*o+MRTB)E-?}hiG1EZiBcD z7l}J_9=qu}b$cZ|-7WF__Bwv=w+bEK`XM&n1-SH>J+X1N+r2>Wc^S|oIo7Zf%%?@q z&AW@`y?>#&+4~m0FLV|t9(_uOgoK=?-$`ulRzF-{?LiyeTY@(U@7qi#)hu%QwXNd6 zL~)oe^14gwklb^ZDQ-Hy*H$%&>4fVw=C%E$OPG%JWBpYkH}HQ4+b_joK=oyh#CN-n zi(LJ}M|#RC&Ntoq265|Fvg>!Zio1P@xVQR;ngE5hiwd0y7hK(>$bA%clV0By+_>MZgJb! zi`&x9F3N$1I-zoCD04a7TBdUFOD+eBma)6v8DTg0nA8gU(@I%Hm-TDJ@>yEMO zcOMmZ`w?+_4~yG=NZgi#?4lf~=?axYO_|GKW|_)iddcMgIY&|s4~?iCYGJm$bnA3+ z>(HYiT)SnTxWBzx{Jq>vd4Br|y!QN-e!F@V(OaH{ktaw|J~K>CdW2$ zIk~d6*O@Yv$ETT2DeX1n9Z7kt7*Tm_W?a*)PTaa4!M(d%-0kbd?QIvgeWkc9t?Z&a zs>9_G%oi->^00XVyB8DdMkpz)Z=fgX23B(U*?t!DW4&hzy$|LI`k0*O_DK6@>wD=A z-4}eH_5(YfVS4_uUyIu;_wD&9=?D8e{+q+yZs||@&EH@@_yJ!|`bJI4p%+E*wI7=BUc`RCwq5d_Cvv%Z4)&a_+ubRCTbH!;)u2C*P60hm=Y50wu!4KF z-XeOb_rlt}m#3oV&lS4a`?)%qj=xH9Na?*){yf1qHBI~VQyVy;KTq&=$vXDCb85uZ z{=N0%SD!2ENW=8?9_df}3#C8juaf=*`uSC?ui|&RwZFGd;%D*wtdv{7$1cVy`5C+8?C@^ds)Lin*r_$CUs`4U^dL;PRR7C>k7i+WFYX1C;v^&Q9!dcW<= z=7Vw43n@wsvAaK%PYqzcFB=c^=VSkXj+?N4L{*Z<#h?i~@FU(=_f!4T)pNAV9FN{3 z9^QY4`1ISQUxl#H)9c%MKsQnmUCM`&dg<=N>`!+eU>9`p__j_>bn%!yf*m+Ye(;3{ zxHplTLE}je_-Lc4`t&C0Uu4=jI9M;VeW{rR5+1DITqu6mA@ytcel^Jea{cStEPmhv zCnd0NpeBNAE6qzL#Mo=Ex&k^cGtKZLb0F7-Bg~gucSzjz+Am&plv5# z=>hR?7Q2?&$7K25%;^1ptOq)O9xnfPq5S(rZ_>fKiRf24m~U+m9BRd`cJ!a%d^>CZ zj@=GA+>D$%Yd^#;eRodevwIbz?Z&;rr|TD-gL{N`3*K&z;0^tJEym>o(w=1PwzN}W zd%T?NmK&JD`Df$RuspHi4gRXDu{vXWKqyAWajna(`?D7ibqixLnjF7)j%EezQ<>1#U{?Z(H zr(WOwN2W89_3hvOBj&*eCI9I9_PtVmZkgDF*w?q0N&SvveH#MW`Zn56l#AU@@88qT z<({0FXB~0xN`7zOWwCWctVfVaWasJgts{0&Bzmm>(|Q!zpX#{^|Eem z{WHJ*YL1`A<(2fLcdTU>>xVPxm)+}&aRTIo-ob*bzH}1DD`p+>0O>(?9Z}XnffML) zeWNN0d-6pZI@x~pvaKWDG?DpCIZ<@$-=QBv-8QmI>lvrj_5Ug5(9hAiea1R;cwO-? zaUS&ER*pA(UGXa%4!O|&ma?wsh5FA?`{vK9=6ued+5-4uSy!A+au&a?sN;!F!42iO zpOz$Ytt+xVt6lozUssfSD2iWKln)jmJ~TDgy5eiuo^o@aJ?9boy5h&UVE?qPXzPJz z?z-YHPQZRG5c~C~bwzG}65i;qD?T!!a@fZ8@3hwysU3&i^=~*K_A*T$?LdZk=O-80{G{~Hqw|y5{Y*pUIPH1K zb75tvom$LJu)n~@BYEc~XG{F-eBxTcwd8rpHwr%bU61U%q~M#<`|^W%$|C0{S5M0` zFS%64Rk`LR-^%(~Cvw@m0N*Rbh9a4c%H}RCGYzU`g=Qt-(mOV@8WPPfAnMgPayt&jgMM{ ze$9bl@iuWh>6c~4tl{yhq}eyh!Afxq@wf*;}A zzK2lCykzy>>^u(We}sk#x#lG?1B8A%Y7pZ68OfDvUJ~)}{x!s>-+q96A|L;dKf~uG zxmQc^ryS%M(RoOJ${`Lofzu_C5XQcHBnJ2oCqtU!t4gaW-;eiBt zUhnxk&f?#ObFO*AI?_MLbrtdI_DMYn>l@B(h4r<8;zJL15@n?ObDC%7aS!=Z9U@1v zN*Hk+Kj8dreC|5FqkgGpuH#$k7kzUbUsJ!-JJ1D$Hh+QnOgzxHeDe-u=)j8zxK=O7u@~Yuc=?`j$ivN z@tmEk$FwwJmYUhXSypEk` z3C=m?J0~N@4S4+l`VQO{lYJj{ZpY3e>A8a7eBLDtqnDOx5B|Op=-4@vjE1)*Fq$X4 z=dk0=&~$E^^dIIVs(D>LI9D`R;)Tx@nVozw_}eJ&gL4jcUWVE%JifMn37%ycp6{H* zB*|}@#4je_8OXOo zhu~!Qk=VHv<;$(70;I?8#hS5&z22NL)l5I&U&C$v2>J|-L-~(^oVQ3i7oqDmNO{?O z_GG2gsd!+13v~S3gpV10Lg#Y5_bOlhHgAXgpZ;|yf6XtDOXv3|D_zr%aQfR<(%eyx z;yxLI}LDh|VOome!k-^?YK(hcOhQ}~Vp*DvMDU-f13 z?UJvZ!_9^3UlhXiq827_N?fO3&GFpK1>&w_C%A{r^kq&}L|@GwsJ?~u^<$9B>Z8&# zJng)yeRtFJrc?DOs;_4EjE~EANPi;G+Xx?aZUuV#!CZW-mHJ}*1mFE$Byt-+VLHu( zvwio_&L5Z_&v=)lbGkmYVR{b-%%KToQt4p6E8L!qp>Xi`F5=J9IbF9hzD(b`RR4er z(pkP3A1(p?HS~ub(3^zu&E6Aio7(iA0K*UQH&eWD{M{5E^WN0zU2~#;p8v^)qQ%isS8y#A`zSA$o^2-Ulh(hLqsy*KW<(Ub~Gz z!}HFc`a*Wmf5rp;@zeECA<~nq76JU)UZ!LB{?8>NIg{R_z6?44So3;L=UgkhHoqUF zU&O)O??pcT((OzaIDGPBR33Z8AKbTuLZrv+xs89$pDhiO?MJZt5K`}}=lCgYpwi3O z>$$s;8|Al5Tz9wB3xAoo?(Vboy}0gf>1X-N#7!>}y2c;M3G&-HcC?SM$HrgV*dMZ7 zsWh~Ra2#9B`sg;^#eVDGx{ZIU{^K0qZIp(~pLb0CzP>-I{&w{XPVUC_>`&d)&92)! z$npG51Smaj?=JOMtAD5Z*-P&as=qgIJ_L z+AocsC->X=HTRbh)B1&Wo;>Imk1M`k{IB50+QCTvc8=T+_0z-o2IXqyH`Vyh@`?KC z&li8&SXsApvm~C?Uw^*%+jL({6ixe`c$4kj>Svk8knjgjE{B)k7ZH(rp?H25Z zyx083$oM?SuS4h{zlKPD7lrei*1{3p*;0?}Ja|A~%od$*gLY7PDlXagmOm*5J-Ot2 zKJ2pcgLaGg*7mH8`Z;*)e%$PPrAy~}@mT*Ompqe+zLlTNGr4tI4?C3pR3^jovz&h! z9RI~~ zbgLZe#f_mn{w-!X9wGXb(6fJzS+2cYJ}p{4@#)z;G0X8@mLq;W>x)^An^=xrS{^&a zjiJ7*k6Dg4u^fk0jzh7@@!FW>xQgfp^zhr4boRUI+HP-T_~|}( zS(}+l{Q|_Z{%^QHGKc8cecVpWHMP$&&duLHcuM;5dHV-4{>aroIFIv-++(i&9{WDH zTiYZ0)4oL9jzM-o505`@%5ioV*0784Y7UqEj()A&rxPCUc2h^d=FzcFy!GYTbt_v( zL_c@+3xHD(%jeg&h@9I0_iLA^U&b$XuG zuetmnvE2iLc>_ou=6?$KAJF*3|90}D98s>|yZSn!yY0BFv-At!bpB5L!Z+cf{I{}8 z-!W%5oDXoK?{f=(sz>2`e%CgXuU+8lPT?yY@7Ixdhbf*L5V^zgeopahzq(s5^4RQ&C=eGBKS9*1!_8d;A+zM!{d zF7Z34IPW_q`0hQ*Zn8ST)aQ~i&ZJ*d-vq}k96V&*;nN=l9)f>%y=4lQ2k;?Qng4&H zcwxR!KHy^)`0Eh5@ZSJ@*Eev0>!=eqhIZs5;Jc5>^L|Il_GEDXf%WhE2mpG5{$-8$ zac>VEoA=1o555cZ`wua0{tij!YkxJc%l%A->EpiGus*aXKCebO?K`67b6DKP!-#wN#_nB};R3SH>*IP#H}HqcV?Xtcl2r+mWgLB95PS|nb+_V;Xx7iass{l(>Ne+TB2 zr~UoLU~%p5*C<{XZyWy}q;tgKdcO_#YL3GAHv_(7Y=8e5^vlrx{uRop0`2byW5(wW z&>w~NcT3E2Y+^a$Z+|z$EXQi1AFhYfN2wmZrl4FSY=3oq8vFWXWt*GZUb|(~|>4oMqG0zBk zYn9%sUq|%%KgZ+r;59&Hj%5uk-uP+MC&*+AH?~h4cS2%0E1B z_N3-JTl2kw@(suDMZao5_zm-S8O8HAOL*G^nOy~r^v|B&1n-iC94nRYBP_Smb7geD zuKLCGYbBl=ka)h{r)2ZlzTT7U-y`#{VLlIGTo%F;IHO$tl>{TZD)|f?X4k(^=NGm7 zajtC)aou^_R_6U~l^{(22+^ncaZVr32l#|>na1TN`}O^4f5ntszm%6h?I!h0dHK`+ zn*AO9QeK_YZe_pKE6k(5n?l0*q5P1al~*;&YcD6`^Y+loV4ul=@EhiD4B~fae4-B| zY(Gsn-XE3&H!0urw6|~q|NW9K;XT3SY5OoRzdoe?=zf_t+RsL0a@HTJ#w-Wkqnui( z|JkAY(%L5IcL((zcQ_pgv%DnH%qy8grJ z?_oEk-&sxTzDl=G`0wbKbEvkClNyxsC1H7%MC5rw@y3)NsaXF7k7*6+KcN0P^|z|OM*U0F zPXN=CzO9*E|NW?CpjXZBJEx6ff9EE4=-lFi9B%a~EY~rT1LgH+FGczj9MA1OF0OtD z6ZeLN*SA(L9?yiG?o*pH=4|g;3W1(3As6?@v_{TZ{pM9<&+U7q3x&SzFAei^B!aW? zcLCRvBg)rNcB6LIz7Oe8xb(Q0EpT}L686`B8GGsbRf^YC@n`p;iQnp%oh!+^e!ND@ z#nzD%N`F;k9hvYzj{d^p){(>O#!cs-TuiT9MEt4u+`R8ai@kj!i^ATo31uQaxN(P_7Y^VXx#?v6i0+uh~M zMyK7qhVluw1NqwBmPovO?e5DdUYzajLv+NfocpyNpIM%E*F(K2qTT)7y}8@nAL4$r z4z3>D@A@R}Ya4}j_XosJobB$nLB9;`?gvm#6=-+A5Hmgxg8nG9yB~{Lj$JHA{O#^t zG0X8Tq93k@SB+9V>?tVM>9)JFztmknDDAH8o9@(hSli#I{YSt51@u4o9%5~`j#u}~ zc)eD}vDta6UU@&bi{0V-oMi$dJPze?X=t1p9hbIHKP@~@bCCSu@#0%s(LUBGU&3E@ ze#yq!P5NH=v-zZ`ymT)N&x42OH=77C;DD{5;rM9xa_wh+QzYKj2>*59pT^^uzo2;; z&JX*L;YU74=E?cz@cfL^bFjJgA5V$UM}DC5H1%!WpyINxM&#c+h27!%k7Zsfd_KNP z`MD7KSj2rV^{6lXl!zXT+t7btc}~Et#cvPJE?94>nJ-tuxG@3wI+zTX)5Ey0brjm= zU+hxfe|R3+>0Mm!>|Ts)yS-KFqppwnwcEu%xRc%C?X;}lWt`-Lb7SBz%tvd) z4jdqVxLx*Ni*`A8yPN$kYm4$F{Mfmv%zc_KElaSxYIk$Bw{N93bRg1=Mf zp`ERwpJZw{p*a4v#t<^qkH){R<1~ed+CLEz!62XOzn~ z&|lDdVqB_K`DUlA=k%Wwvs@>4lN`E!7qqJ#B1f3hU^agN6qmk$+{wc=Rm{B@se1;q{qIO zmT6%x-Lov`SgGAOju2}n!uAjS?x1~;U4on4!!E zgfE;!g`}DHtDo#DBn|V`60w^H$scYnK1JWj8I5t=AmtP0>oE8dafY0W*-i1>j{Pi< zyK|7;Lg!6$j`OsAvGT|@-m53w8Q%VE<#Nf@{zUDBjrT6DBYthXw|A($7~cLgi2iP2 zv4)&CU61-v#CWe0^*3a{pm(rWwYVp7htP%p1*q3M8#uu2ASUUF!(J^bSg%prDBryG z`qb-&*MPo_lkA*-2b0a-%ND}Ji|Bi|;&XBa@v*m>@pt!m;_h52{OxEJH->ep#+dP` z2mPH}RgT`+Dlo^nc9m``@ro*sQmyZVLndPUi=K-uNsAUzwc5$VZQRU7vH9M zqtRZxv7tQe#am&A%Ftd6KyQm^FFs81!Z=!c@p{}38fq`D8>Ra8w*~84HP?&$_3hN{ z#XCX24DH2bD5nav7wcli=Z&C03hl*fVwPhu(GTnIGq_K76#6?aEhyLMw-*D?^7i7Q zQED$VM-{w$?ZcJ77+Sv;jZ*#ERIq-PZZ~cK{W7!3cJGDj9%R3BSWPB7q5Eg)I}BCq?>WNZ z{!-mHwW{to0{n$~pToAu{S89S!*~7$>E0aMw`1qY?R$io(7vknX~fS)&W86VE}@^9 zed?d6`}%agI=tWMJlN|{I$jSC*`1b?L-$9W9f=QC!*;4W68|}o_&_8apSnFm_Fp9; z@qt`8KH8Ho|0iEbc&Azf=Zy>4Ewn%CL>N!qcVu{CUoNiNz(nITSMuNE>Rug_!|A5=;Pf_1c56sSm^>rWVYoYoUtq;2+@uT%E zS|2{l^cdL#Y5Vwd)Cbz?&Gq5@g7sk~@At`7AGp4S>I3ovelOwrAp6ej zyqnvn=L3Ut%VOa0J(!uqhwGoh`Go63C)Wqv-#!N1BA)Ck49EM6NPR&0fR9&GeQ-U; zBwgyLxH0T|dri#xzZmj`>h&`$SA)t`7n@u!jaja_px-a&6Z6*VGVC+^6{*^@d7s%# zs@J12zn6r)>1TD3@0GwltPy|Mj!l7`8HIhx@12#a{T=zfQ;zZ5e}0(sv54{8 zVTu>V5q2H+=3PIh@X)@2+fh$PVV};wfbSUF-}^zo4CA-Apqwf&zjsf}_`DbNM`8Td z7qc8U5&f|KHjk42zPX@WBOJd`-whA?_0nTtZ?C(kntwb%g8+1i8t*0}M^AF%60eiu zI_o!v>|-nJqmG|oACV6A{QYN9{N3%`UvYb+f8_dG*`K{<_i`Rz_?zt>+2emee*VG} z;x6^LUmvz3(f-tW${+dCwd|bl>LrwKaR2TRPVa*IcaN&y?%$RBXtVe4{*2$}x_|eR z&ybv@@UbkE1a(hIsghz`m^n~SWkK_Y+!}2X+ z`9v=I-kr)La?!a>^^06|KPLM-`bDnJ+7;{%=l6n0evlLSQFoW|d@1FZoOm9WYgAt_ zUc`g=Br3%l>)l7L8<6r$&4e~k_?XF3&I?5!{H3A~c7JD>pXvxd&@brIm+4dObdFEt z8<@hb-8bp0KIgp;xP#f?_PmCEhRYFnhw)7^zJhD^9$>*Wdk?VSn!N{Da4qH@VBj6b zcLL`pdSmzXQad90Z{NG_7k#n*AN2?Iy~vgDzQgs(=40^rHYyT(vh|t@X*q>9?pVq1 zk`q@*y>5`G;c^&6z1||>;1}so4i7&kd*5$z!t=u+-&6kq_3OEu;GDFKd$RZE)^NOB_vhXKzC-o&3AGQjOv?O!>ss_9Wt`PkJ%I%T zUg3J0@MNLf?H2yrUg66Pik(gHEt$|q;e+Zu>m$x*e}eK$>G|(;?Ru4Kr^?l?{_W~t z$!-|;`4Rph5AZksA13~j6X_#O^hC=U_nFW&(Oe&44{>j78@Y`;Fn#fszfj7>-z??gZyOwjXI%tO=r!`clI=;I zl!x6zUF7}HseUQf?0v&huKqNsNUmSX)t?5b2&WEq*#69iKct^1?{NA44VAC;Bh%BG zIic(KL|>-Cda)f;KMBHqsUKPUP{Z%-zGBxe`kC;)&*5e#l4A%2dLE$vC{H&_=q1Na zMKIm-OBI8juzns>{I28i;&G^@^EuJHN&)$@f;MjW0GMEd}Fsi?iidi)hXyW}PE zC)>tKc&46Tv%dTrrGZ|ODtTt_{qe$I!jlZ5@8Mt0@h#qSnIN^pg5N@QYekNc+?)Ix zDhj9fd{cWT^dk4u2lH-JckpCHJ%V}jq}m_1Ncc-uNkirqOF6WS8PDn3CL|?&FFQ0x zEAb#79xL~RN1ZNu+#+_o%q{BPC@%E=0@U{o@uMCiCmY{lz80J$xpXiWOpCho_*>ZV z?7N=Gm;TXv!Ltp7*#9HZFP(?6_5=C;@`J_X`?TPQLZ&C2AN#eP4{%j~2AvgpCX3l- zJ%K;av&F(6{CHNV{Li{yBq#8Jon=?)S^sx0 z@eTdGncOQWUQ)lG>N=%-v-fl#V>yjKU+?V>*E7s(X7(UgIe(6Nmr08scz%lfcJF-B z?4;_U=_TSFd0AFZ{Y{eI^d*X;>y-C)UeV6Io1S4@07R1G1Q+=6tkCebgxHge>U*&` z=EZNUbTD0q;uq9c#gEtkCp3R5de_hFWan)P;P;*)@!LNV{MJhTnX8l!)w5yvseK!c zpNvcCUrr!@rko1jbyO|{ZGiJS^1vU(c^%=5 z@LV`U(~H$-;CykBIIkF0oM(^}gu^0symh3O&`h(hjm@H`fj+Ap3G20_!0FfbP1ypM$wQ zIY{Lm?$7*+x|}H;zb2~)NP4W@^=tJWvVp^lr$6rwDWBbk#J})e>?XW(HJyA1Ci}e^ z`A$oA94+_Z__bSwPXEI~N53x8<{NQdvpk&3epwbgfkN97sbV2<73cZc{nt=krTjt1^0)E3-6P|6tDekiqF98- zRM8KAme$v)!~i}1tQL0N*{V7i&gAgVsS|qoogM$2 z2KFbsf9Cj3UjI?r*;f{6XIEYF?6R{cpnKAY_9 z>>};#PiaVVCd?arYY3mu9y|L5(vLqTJ9`@q=mWc1M1S_N-&e-Y-idrqW8UB&Xzt=n zoj1Vz>-AJV$*L;eCzFxsh~S=Cng^Bnh}r|}VxEisW!I@|56Sy^GQVT%J^m`0zwuYe zdEe(0&1q?{*6xHg96(<)0(-FxmMN zPEPYMGLMq*-pB#|sv}It)>E;!v|B_3S zxHO$~66cBFwlNh-ce_MrOGy08E5z@1i~Nl*drJ6OE8#O>Wa()e*T{UiJ%aya4d1Xt z-ecYjE0K-23f+WjD>+8JXuz6+W%gW8pi&?o~{S9<5Z%IFSzVqY< zvh9W44{!B2Z+#>ps4=zLN27iNU)n#%`6RsWv1>S5Ik;VdQ?i;i3({kDZ5^eDs3vd1 zllN`o#xh-$_xeaZXlbGLgFu4(nb*-DdQ2|A6`|4(4DUNic#AkZz;QNvhv9ZT?PCB3 z30-Bne%y0B8eV$Wk2{xlz9h%h@{XG1xEJ$^80rfkPk452^L!;!lU!8pT+xl5}xe8NfMsGIXUjRY>$!dg_MEW4ftm>9Z|I8xTj9y7s6l9 z;XpzBbln-HLoVX~8}`e-AH?rwzm_xkuVFtaHa*wV`YTEZ`$b@3u?~)=4(VVK63iXK z$FK!Sj;r?mKYQ;2C)H8qkKdlAfv}nxNG_1kgl-0y2|79uFcVC4022wu6_RuyQ49l_ z03i>W$%D%^W*{#TV}wK#7WFR!Bmq|q>qdjmLE}bztQ%L|#aG0~D$!MO)fKZUzwbkePVTOR~{!M*gZdcW*Q>RXyM^)Xbx_DEV3;svsis0y9VBdGB2XYE14}P^?B>oO@ zgk11ZSFWAoBBya4x#e+|of|bhggk;y*!#%07iV%Y=ilN+k!!r4fZm#YuaJjJVMBy{}5$x>B1wyac(*+ZRk=5+QAMm|ndr!4U@EZNq=!V4P0^vh{@E-tv zT|cnz1eu+6^``71`VEq}e2UQ1w@jX}tKd_-N!qvI^xEzEzSpiLTF&+>*54=iP!HsG zxwrwgXW(}(_zKILjjI-n{2a%t@$c(YkA1Jijn{17p!z{;r};m_8^cIYuz63P3}@Uv zLin9Iln=S&ClQDCL!NUa&tXtRl=kJyI5fUn`lYjkRE%+l@SEta%nMjPx-#Qf@47M_ zA~%_{xjgE@kM16nLi?LJy(=>;7(?-{%t<`%>dMUI9g1P*XKe347wlLr7^Cnfu>5sp zUdr}2%>01$9&loh8x`(Ewo_f13xWcb4>NxV^7I58;$%(f7wWx$?RJ>CUF>1z_iPUV z2TPU<B;sz2tj>|YbZV)?b z-y4b>;6(u6!q2!t_A{cNnkXd~{F>9l%CTJ2j+IW(Blh7g zE&n?4Z&V%>S$Q8G8kP&*uJE&2U%+S71bnC=7ktm+ zGM~UL&>{Sc9pA)2#0|3FBr3`HD{c@4ib~_ST->1h;fc7hltOyU>0#!T91k=1GXGE? zO5}n)n*VCvX&h!g#{N6qzkmk?){dxD;Br=9RFeIXWqQQVmg%*A5IN{9y_CzB`S1mf zm-ztd!G|_}#trCo#Nqu&-y2@SPr4t1pK*iug{U-3Wpu&TLBH z_2mwBITyUDWVi$juf!EG)Mdyxy)x;S=p znmm~Qjwh<$T_t)Q4!wopqnkt@F-|5@2@n0C0KX1?n18VO-0}^a&EsR_8(xeDcpNbF zdIm5*GNvH#%OZJ>&-~^P>Ph=6_&eZ(|G4N`_+_Ct7yRN7N`jBzNG|9?)Y*f>@ezL7 z@qy@*ao**L@_xS(34|Yi%lQ3#aK^_c_NB=1pbwn&^U+S5w?r#Zn(!*W0Y8W0ttHXF zG(T*8!}`zm(SkoOC;r&{DcUUlHQFxxs_#K9#9vg7XSY02Zq{@f$E}jM$uH<=qNE&4 zsqk6&B>Iee_?cWF6Hdf2pK$G@PNO6z2a%I6)%#;EUyuUGrHm(zM!tsBkgq)9&9PSy zJ`l@XJI%hBJe2*V^j}mGy^0&ezLx!^*k9PY0^^r?O@;j-CZ6Qg2YBd%t#g3y@U*tB zfjGtoCa;LYZrVBk;-^#G^%LQvq_RBPz9rkYsN-zgr*HhVeTy~@1YQIiUzF+mjnh-f z2ld29s#o+%Gg_(sEU*4`rTVkH`rnn(A8}sl?_8<= ztge~q>uwm!_&}G){dXPRXd3hldI^2$Yoq_720?oK8cjx{nr2q+oIexWqo%g6yM>=E}WR(S`CI*)S{PlSu8rXi{dQ z_uspE??3gT8uWG(gD3$0n_v3=dHDU6pG6;7K*kxrBNZ&f2ZB^+uH&6)}frsXpmCaXf9k)Tigf;%VzNF7(CIdL%xU z(U2Wl#c}u(@V{Hv$?ben-1sqppRVN_WnXJF9okO%(Wu{noUZ!ZDEmGaPy3FP>lOSq zFOPbqe%hC;`9hz~)64rj#Xdv+(Ibl+cQU+h_vtlL;vDHtibD?PkYmL=x1mf-@;y=rVie_L-k0g$JzXgdbHOGd^WhuGe4QGKxV1JReC(*6wS!E30TuP6WY&gyysIOxeB5>2oHi?MUcj zF4d0HwH@S-6Z&|m`q|)qrYoK{OYG{zIsAlvAcTX|@6HfB=11*Za6EB^w0DNe|HP#l zm-6w%g$^J3Y4OBQa@_gfUdgxjg^`|TkIfGB3jWyag!8j|1ur3m9j|5wdTRL1Wn>5J zeJ|E$;UUdGwr&KK6325MMUhg>+<+*3Z@Jyo%kjnzj@$b;yuKYv8SpQ34)O`W&?DP= z$_o5+_0WAOQm&Je6ZU8!*`qMHiZkL(>JRBsawOPy;3JjK*zA$Ywe#Dm2hML7q@J37 zdyC4ggF`E*K8Hu`lB-AUlA|MOm%1Bfa(UxxDAyl~9i*IYwOe>!0a1&u62Be}ogn2z z>;nHi9kG=3d^qQ09Rd<(^Vxc}xAq=9F1(51=zdP-TU@wU7*<8 z3Aq3Vh7f(I*XYA~#zDN-7%Ftwct09p`msm)N!QWiiBi8ie=Iw%lGnWyWBWe+ugg4>n-c+dX4Ypr+?oB#<5XvJEx;vbEwH^=PO?Q-2DgiZ)58H z?Ygr`o_jlljzz*>)R%iX$&qv)$-AT@YIge1>TgKi663l~^*3|X-(0HxW}eRHisEPD z%T{r_!v6Xj@(0ACvfq5J{)X@&xbvL!JK=8ztG~(J&2X{1e`zVxZGHrP2kWSdCyHK} z-1+mNT6XQXOt}o>HF}Lemg};%Q>mbgf71U3mFZ+obHNH#wry%R=(H51*!j+uAe9|5K zgg*dBEBpk}!+zp~Kfj;oqwgix_7f|Ta`u15PpE!U|C*mD(W{o4^9;4;&{q;23q3I| zs-j@?eB|#;`H3g!Rg~SEWb5hh6CE#m-cLk-L4E=~c{G0F8QTBwm+U9@-S@noh@bZp zY^UOhI<7tr^NDBaJF|Zce&PePsSPzSjU=_TF0XN#5&fb)O!{kcflPd<`o&8SIlWSfcm4k@*R}u($u=v zCHg&-t90Dp<{L7ubnlUxfQ4wKd4RR=u& zC)4HbdDZo(?qM>2wfP0cpV$X7kaeVd%8v}9@-~ibtvTPgOX#_K7LUVh9PI9&UCP-( z?fJ%S3}E%RayqW{=NqHgkI4A8a=u~Xcpc{-?K%>~mw2~4pJ%$Ft@CAkIfp_iluUm~_DF^e~e zy+Hf0lg9bMPH7!o-^lN-((AY2%d4?(O4oheI{1WHLYIwOCv<3B`)Pu7xLXI;_y6&Y zl5c!YzgM(*dxad6akX&=%dyIflVi$H$no@(g&vb*%1_9#$`|NBh{j1jK_3!we6j3< zF4BH=1e0Ss--Ys!AM+F7*SLPl+th@-{hIr6;PNK=c&z2k&JCJeVBgWfF6>m3fOh`j z_aqk^RB!FQw7oYU*};I3y*Ic0ARDB-?FZ?vJdDrgg1J-_{JxN$ed?#NPvT(8K5m&x z`{BjR1z~m=uNM}x*d2>>>2SM`x70)pqfpH1em#;Cgi;eBreNoR!kp~ivwQT)ct$W> z8IS0|xWLK0Urk!Xad*F==^OBaGo@x)1fvkr3o^uuLu9^DYNnSc z9GCrmrRFw`%XvWTt3xP_m4P9?!+>D>c+2JgliO7;|5J@ix#E!h!iQ$*;HYIb<8k|G zTV`ndfWVEF@uc0S4LU%#yC=IK{EoH=f8&DM1-pl^p!_b0y;{6x3ghqY6neTd($08p zi_|+w`f>4ej=J;oaiN0~qAfyKT$rWtgG^^!n8Wd0@KugOp0`m7qS4lZA661*YFEB8-U`oGk4KIa#+vJb!1Bz!AoPv>;_M}$(->-ZV!y}&s>bwcSa zS93b%sgRS_TY(+@XL@rD$HVM+t@kvJmzreUT+9leOHJ2tdNJF`Pdl$!YFZ(2{!8+e z75SA@ilEErm$sMbAI>F=?qXKtDjIhIr$n$~c4TQ&ZS;8h}R-(;!jHpL_S%?0vax{T)s zir4T6f2~|GtM8?oZf899zAtKeug0alQIl90yLUWldb{R}p4+;J(bd<)*#XWW=jmrW zdll1R{yCnl<3qa_bheHU#|;&{vo{L-SiuudTrY9;7qPx~bnnOPeZ9>K?R~z@8*P2g z&d(J@-pckw_~iLhnAE6h)2Ft;|G+E z_h?-DGak8(<8=Op^X)!P_~Bb$_=oo)^XbcfylcT^kt^F5f&BNsWe^v>@tM=^UNBko zD$?;I@}K;~1U6b9T>tDT3nrKK4LI%oPQZQPd*|;(+M8bW#y2ledu;o}aBl$u;t0;a zk)9$a7s&dW-3M*`64og_(?yQLjMy*R2UXO38!x*0hKPN%??L+Gz#qPY`d!qR&Q835 z>B;fwYO(uBuzjh(EA)w=*uG`ckG|`;G0~a_W9-$_*`)pjT@m^U72Y-4i7W`z~#csTUov<&c9H- zRF!uQ@e>T+l{tZT#C2uP;&ZZL=FNJ(_KpFbuN6Oy^VTO5=8(=!W9AZO7XB}tFO_is z_zZow^Et=ve5vev?aG|U`v}8KGw%}!GjnuM0~zOKdpa|A95UAD%0n;2TOT5?tSWCYCje6^!wE)R+SG}sq8=(Eb}5NLNx zYJIo#3epe#j;DP`1?7Ix^4DdDG444UJN#PsxuqgWe~ET@3w;34oeOy04s%CUoC|o~ z4l`fk=U|6Fj`PpY+hMv%7W)+{?eLQJq#f=^+2P$Zg{o$U&-p8}!|=pMV}~EWx!b>B zJN&DAp0~qC+;{)H9e&Ps_=M-}Fy9kb%MO3^%%mNjpR&XCHSF*`&GcRD!|VfEk-}4$ zgnb3vozL$BDhMAc_bb5Km;2-SeLyrwpzxQl4`^LVoe-B_OW37?Co!(`ADbW!MZqB zLNPx^N#x%}`R|f!S|^nsqv_=uk#3>K_M_F$Ea&6>n}(ii#tAg=B80l{G0e(7T;k(=4Q>ETFd-dA-bGdw;={#KdOT6-+2Oc>Z(Z=P% zI@#}N=QG?sE@6k`M>tgF$nED60WI(65{q?APdkP% zQt<2JxazOzgX^Dh3?BS7?ce$cuOB_d_ULf?x1JqOa@o6=;o=*GPbM#pkEckw^=sTH z@Q5SWeWLC@CFM8tUqJxY(>EOt+NYuVhWvybnkmo@ufFf;%E*50c++le&$}6q{~q}% z*kyeg13QTTy@R|$zCO+T*eCW`_tDpzy(GBrJ~N45j(y~d-`Nw(>pZ^K3gxYR{N9WR zX8Q1?dO$JbznkndfGLDSU(OAQ?>-=WT`l`kqiuVn{^@yuReX=}(E=wk-9(b}JFO=v zU#LE$ch#NGUqlG&F5nEC@8p8n91k;R>wc{lWB_k`tKgTI7j6e?_W6bTyrPGdUpu6~ z-S@FN0WI`D`|xAW;`a+*uMq{Nz7O&!D zrUU!cVtubVe#qj?{}9iNk8nH4_xF?BLVP#+?fypG)5mbK&5X{&Xg@Ck6|j%Hn5J{? zlX`Q(a{gibGe6dMzrdrvR-%6&ka(>9YyD?@22*Q)gEIP|N2 z&(8Mo`}XW#zkk{mV41(`^>43f&tNZW^yfJACzOFgc!GF>c$3;Q{a%x`BWjj@sq8;d z5ZgDgSosTkK-IeaL+Fn`Qops9uuF^j%WFUO2SLsN-}eg6PV{G%^6mRa(ZgzIcL<&K zT>;a_`ZZc!?Yl1*XQRJXNxtoCDz~qNGb-D65m8R^F*eWnHclU-^^DI9lleocJ$(}x zJTSR|o}+z`n`iJI*yPUIVeQ&}kmWGlp2a%u!h2(%uVe0zdd|5~Ix@}IG#x%a_Ew{# zM*V)dldAF2=(q1bHg_;#mHa$i`N^gzI2QcutJV&qr$&2@#Lw0xe`5Nhhegin?-D*+ zzxe$4)fAH3m69JlBJzoLd!gslQ6o5|Uc@YjcBtPqf3rcL&sie_9KRo7AMCrAHlBwZ zZKigY@reJn`$tW_eE9DWoz{+cllgt|H{p;+m;mb!Yfmm<6O+)_TK4K*&|~9?M|3=) za%*-Je(2wS^ze^R*~M2}62}E;H|EPE+H^04&}H`9_doaERsDW!Cc^FRj?K^1ZaE9peOkkUvoW&?)ipw7-1}{jBI0)nn*)9{JLJOwZMj%Y~Fk zAyR%Af9jWLdPeE8^Ye9IFmUg|} zaU_vSzEBV$PF)goFQq>e?0y3KP8{$6zI8+k=SSzY@v}m&N6Nm~XokQoUaI)XEV2LI zBz6t``UgVT+F9KX_}`Ubf4!KiV}8y6Ki5j!^eo!0eqe{%%{7wm^uR0s7RdiH$+z~o z@%nkv50&kbcG$c+#0P*Wm_Ii?@yBr&k(}bbZtx8ur2o0#7XBU8tmn64_f=oUs6B}E z9+{ec<~~Ln*!qI+XI>0`>A2MKN$pcqgI|j~1t0bYqNT>CF%L?5>y2~xNA!r=#f_5g z_+ft6*m|1i2ho8Vx4EpXsfn8v3|4fKf}KL0Q(lM5PnBG zU$b`Rf~(nK`TW7S%FdBOk6E8o9)NEz_@v({vT?GLlN$07>HVWdAMgwZ|8(4!_IqZJ zPaQFn3C{)VE9hkZwn*j38()8p>688|xAW~4<#~U3N)K$j2>Lz&zL_4V+&cMRCH3Zl zheiK-C5~}9=@#cocMyS`Z63Fdh2+&F4bLffOA-1|6459d;hu?4;?1tsh1kbpO5E zcdY9ZZr`ztlWhIj?rWoaMGl|_TbGX~%DBPS&EttGzr(4+DA+nvv_bE=8^OtR-;mC0 zTz%@-TsiS?@Sp3b2>41r*)J|9e%iWJaj0+=aL5N7;2|$>X(Bo|==p;C0-;+c=yALF zKl^S{+%EJ+`kke?UG13aQQS^QDWG3b(em~@qCvE6JL^$2lcPc0K33B0ezbPoSFe68 zZWo6U+5KqkbjXVW-=%cTLsSgyG0giT)(yGJ!`|Y-qBa`5990d(RXmXuT%12FTlY*8AkK>33p-KzEbkR z|BGPH)PB1C;&va6-v1Mi?BD`+Ur=oK(G&!ayN~7$X+P*8Q&I8V6I*{ry&t3d$eq8L zC3tG;f%_hg%I#c{1GnxwSNU$=#h9yf>GyG9&q(Af^q8K2PV}5Fw^{H^+H^S7v<<@A(1{UCg6_z}dXsC=%m@+zNe48O|f z8mTuvMdg$50p;>jL_P;12P2N996TU&qkZ7JJNG_P+ULu`Do+ki@SX}KqpdPujJ8Sn1ykg`TeMZ}sjkN_m?HQ0L|fIaZWDSI zO!*1hE2}r!CiO-S3H=MsmHSq(e*qz~@4iivc1HSsIG!Z!v~{p}lC(1t@glxTJB`n| z;NQ4j%!eh1(YyPOOi%0{9`jSsuR-_5djb9JXAWK(H!c-Cl>RrDo%DA||JI>~+v3KB zF8vedG@Op~lka`ut#%Fzc(#&g_zXAEaRVzn$?%1z><* z+wAJ|??1KoNT|<0M`!i~>HhgU8;2s@KgZ|3%VYO*+Bus^W}mcQ^?ic--rXdlPvpcO zAMeBXxN$wx?WgbN^d3%!Ugf!c8#x{~uG8nLigKH|+=`0ym%|Ti5jr5ZD-hqNaWdX> zC=U691%$o3kfzd6?`x%=k!tUHU#)RzZ`6CH#-%@^-j{1!@H%_1b^!eROO~5xy4qKL z?^yocq3CI(@5fC(qUqAkzb3h;KZbGvxqdOR(CiH4ZtR^TmxG0`#let9$|pGb$8dlL z9F9sN{mLu5RxVcggnZq!^g2G2-<4lw zvH&k60dzsKQC~gL<$pgC>Bt8h@(V;yyioMO+GXo}ww{M{ESdFDIRw0yZrM?ucLC3D z$CUS%+I|`v@7sCPXt>k^_&3l{!Su}FI-6)ROrcL6!93D$0u73TWS%yU>djNUe6JY+ zPyoIUldZDz^oUPwL!1cL{KXWv`W$^aU$FX7?xi$=tbh~uMDr8^py0P-LKS%UrJfXj zUPtpy!;5;(_u@AHar>NAomeU#FBqeJ%9UukVX~eKs!`-p&P#U#@w0U+UdDF{T)af&CSC%H%XTWg z9tJ(0PrNWaM>}7+r0fUKf3Vbm`$UU}$L3SY$0bB`p5SiMC(89uy!9jzM8pvmPx}Lp z%Q#M?ww@#ito~|vU@>h!P%aq9cnp3X)%R*jc`ZGA=-J))C&q92pyvgezmM~!{+pr(UgZznq6#7WKL9*SS5-C5;9xNC&h;oTo-jt1wHWIW*bxmMEs_2pS8=gNzmyZsGY1RnN* zruA-p8~rhc^uq0P(0f}R7jWml)A}2&QaZKY9G#tL9rdrK+kMj3-@ZOh2HbrN9+dH= z=w2-OpmP}LTq^PSPN~0w&NC(7AagqxJ8>b?UB)d=9<{kE4-QQRH4aNuQ0{q|b)9yR2R{vuJU)0+rOfO<@ zT~F#2IkEdZ`g$0x(?`=qKa9-HRIzLMo+8_XYFliIiea){SiawZHd7+B)(hr0*Dyz%Igmg;}x7 zW_R7XnSNK*yq@HT?j|XUV%H%at zSB&>xUg&vrro?d1cq9F6oud5B27KRO7p-H$?{#H|lkVa9GWHK)b}knTv+J1u<_F;S z*QWeFx;V$)4CNd6Ub(L9OXdE%?8SVKVVJ#*>+|uNm+-xae)+GY>Yu>nZ`JZI;+x$j{-1}1WV&p4d1rWW1JlK9#e;p9_BKh@Qld2D%1@D1}zQ4?W__5D41OIsy zbQHbvxuByWf1{U=@u{@u>yq+!R#mvuD)60>k_YHbj=x5d#Mhl_FHVTrIH5oNdqIjG*e~?& z{?xk5?cBdI-tqbU{#5M-F+do9d>i9+TF7l zAM710HTskOS?IC*HM_DeP&=DfJKL^yw#arC<-k`BRPIv#*_HhpwW|}}hHTr?DLb9Q0BH!5Lp$*zO@8{aMbR%0I(w zGut`j!=GrN@-*nCfOHwDa+K0v=F-d71@zP6AcfAc!d0xBdZ8y4boBiW$+vq@f&YbN zK*BSYV@UTVA^4A77ceJ!U;Ymlx(IAjsL z)P{5!sdEWR7pjpiGY3nT-bXs*Sp&ffbv&QRqfdpafb)hh1V;%JkPiE)f!_DYFVn+5 z(n$mxw`2U)M)Aj~95{@6T5qeq9u7FuNTh!n!Bu#`p(3&M zUjYYv46P=Q$eq^CHk^?<4FzgX6af1^A2}Dm6(x zZe6%n@L{}sfcSuZ_$&zw_|i*VZR37hr-~<_mr$RSbM>fEcwCZ$=mvp{biEVnX9(w9 zD(&iJl6#EX8%?qLug9UDX?5z^Fezx^8TW4rJ zMe9*xF^`@|v33-7|5Y`%nb9>%Ni z)_&NNov$ogZ1Ce3;72c`=XoB_>r}rDzv(^TKS1zE2aC`@m|tn=iMGf-ic?337lOR^ zP^NE>-hFF%-PYfK2F?Nw@LUfKwM@@q?O($mx8w$e0 zcU`LZ`OTCMKB46(-v+)28-i+j1$e+sC%tm-M?5{Z`~@_$Ge2d1$<`T-K4*7Tj;rbU zX+%%8_wYSRN1LzTL>Gb^SLE{=*M7~nXj}l}d>hBR8$`b={WoVje%gH^{w+evc08y%+-YE#qqVJ>(qvS?a`J@>7{p*+I`J3vo~ZT8I5}F> zfn@TVq8L%iJ&tJMmKKA14ng_h#2az5hJSoXdLKw}g;UzB|8VVUG+xC7e1c|{7`?+Sv^d0QI^ZwxxO&-B+Dn-^KpM2hvS8tGaoPJN4CGTn!JJk zzPz>ky)Wn6ot%nX?yiulfy!HHK=Srct}hq-gVcKz`uWz%g^d4}VtJ#rG7AKw;kl0dxl>4{6TK{_RBG0w$3G~G8-#s<#iO9io z@878d>fhDczc)z#dhP09x({$V^m{(yR~_VdS&qy4vMM3B$`2ZL6U*tm z$HKufZnb%&on!O;_OolmZ=+<~SZ@EiD(&xYyKO%0w^QW1|Ly#58uA>=c7B)IS$iCC z9WyS>oWuQFmWO@JSH#6$?cq4|ZexN!BIke;KU&#N^q=jA_x(qEitk6#=Zy?s*600q z`}Vqr>9cbIem!|EH(%tWmm(CZ$r;8~ke?^P|3_5Lwx{H5jg)tC){pbjA0+;l$F<#z zAj~{AU_U;WN}}F((OMh&;YfZQDq(y;xqGQxj=yqTPA~iMgRZ|pppE;{uVT;2{onop z->;SXU*u$<{lCu1RkHu3KaGCSDgD37!6*BFJ*T_zWG7l7{hX(#vrB|0VVCqANu|E_ zUtW3!Brl(4I&;Ct_*qTg#LtxZy|;$GNxuw~-y6B!O1_r+A<5Ux%Gb*N5WbfCBiVno z`(t#fKL+BL{eDXO3De)d9Z-MVqy2Gb1z+Yfod-A_escxl$H8x+9Zo(g{HE9+zun?D zw+p?!L=*++2ijlFZ@!fMiRfwch{%=Q4`u$**|UE5&6AFi-}KuZ-(A^G@tgf`XZGgosXt{yS05igsMDm z9>IJnW@N0;pY@!_wS5Z-584NO(PCHww2u^&g56V5Z|_H@b8`9p&SZ)E{Qm&qwS8`8 ze~}N2(7)}J@5X7uCh}VgSk=r@w?pGJet!z^ z8zhc;(K9Ib5qbq4t?A*6Xf1k`?A%1&?o0K{d3xXe>;j&L7|h)ZW$z8_{T=X5C7WsY z?_j)=eDAW0+jY42E?0wJv>t^}#0y>ukUQ|p`UUmeOrnN#YO=dG$mRucbDmPEeOtu- z#m&N4ySF251{Y}EZB#oy?LDM@_ss5DY$oJm2_n+(_4)l;B08fj;vb#<^@>0B;n1G+ zeO9&K=SahAzt2&A5M6nq%a^0eQIGaB`~r2?Av-7T&X3f5uc7lMlM})Zj`{d6BK-ck z&6eL&eRs_#D9F(qdDeV?bM)QEjWsS%y?BdJ+OnUj% zN&f8)kB@tfV^&!UyHm@)Be^=p@@U)wJH!h4SPL&QJxYsyEv&lmi> zho-&ezu{kj(f6;LQQqvP=U=}-TYda;pvd>9@XN5TXaeeag5aalP9`i`DFhzQAFo4s z^0h=#;OJk=#RK0jBOmx@kp5TtWARsq^T(@iq4p7<5URbe?V)twe;YY^=Z{AN8va-C zm-j)e=l+S^J_wnYR_ueIc99FC^6d;?>5n@&-S@M%5S`JMISMa+(!M9>!*P3hnLM69 zq5nYtdYX9n_S(xnh8N^5)~LC*P%^(9!5gNPO;(o=o^(){{oaLqGI{+fzkPUXs!i zI{N!((Ua_P)|218^~ieCIac(fi}oY^oQAYrb)$oC@pDY@6hG$&KOxi8Rrk@Li$KG= z*JiGuC-$?w?5gtmDeMtu%5**;1B_jDLxYdeR-LZ8mjwUKc-|QNil2`MzochacS+_K z^aP$KuSw#0IpZ0pcwQVl!FZ+ypXTRv!6)b$)(y{moSrB@VMVz-?MK#fCk8*{`pyfU z=I7SnJ6!J>nQv>oH!m-j1O3Cf-cZZGDEJ1Kn;rZsm-|`pRV_DqX0jZa3TpR>TCOqJ z&*jb!{)5Zy4}PTO&b&HVPWXkH4fr&M_7mWFY4A_nzTXF*)AoJCYai&O=`q%_wcKgJ z=V?ydRd+@3IeLb5Lo&b9`sQ4htdCxEQn}xwI)Z;?@b66D-r(O9eoTrVSQ5wuzgGBZ z!A}|f--2fpeqX9R(r-Uk`169@+>RdwecF!wRr&T42S11y8P@$E_=3VuDkbU1mXciX zeTBau_yV{0=fNI&LJmHdYOnO?w;lX5;9XsPW8N{EfVS8~yb6DR`0p z%?kheAjfiZeK44wfWI{*H^UhJCWU`p@J}o^n}R1*Zf;M>4TeOy;GGJ8e(*(x-x%yt z`hSsv7rD7t;cpCn%5wJM;5!(f5En$r)|aCj4(v_`eITq+g(;D@BL!{U(Lm7<^apy~mRi*c(W3E?B8> zTZ01%H!)T3c!s-%;ZWbcRDII!WiJ21R6B(pcp0Jhj1(QhhfbGYpOVwlDJK^!aQUxF z$qlxS*|{Xpx5C?xjdtcazv#-}@0GW6fhadSC0_+D_qVRx z`be8sHGgAOJ5PgL&0p^E&p(GWv}(B~S1zAwH@yZXy2rTuhE%(SZ?Mur_hYH@q9?#2 z`5#R2UHV0AIQa5(3O{Y*p!!jZlpmJji`WG+8k)a5l`niFWzzg8l`r~09iaKAczi>@ zU`mR4%FN%D*V{qoij;gwJ+hw}`A?**G$MClQ#_e<6LdYm! z9cwq}TqAMN35yl#X;A;Z>Qw}X`S7Eu`@GL2c$}-<>7DDvIp3$eIPk6~lj8O%>%QNp zcc;>~l%G-Wc8$wAeAK&MeY23-A^3#Zq|HRUjjcj6Fqo8grzFf+jMjFef@w# z{!}suZoP`)2+QF5H7@Om^Bo#rq2*_BeDR8n{OoR+ z!%zP_021sR!@D?_&Zoi|Qs|=dH$2~@eepcs%#4%yX68znZ)UzB^UciLc)p2t(La)} zy<9)~Z{r8b28|J2UU&d1p0z2S4QF0|f9DWd50X zmCQdgx61r8^E#e?R>RY>)5r56#nT}3(ac<#k7oL0KAO3n=cCo|?D?RN=OM*2M&_lN zOJrV}d2t5w(rV>f66N2kt z8O&d+mD`?Z?@e0nBALf#MrAOMtyXSTqMa*TIiAmE!VKoK)yj?j2fuyGwA^Jfug#3j zU|w6T+};FV7P)dfzs3mq`ERvy>k@RnTFWh!d2r_McphA> z-1bC$?ON_inHOgspwOFB7%gBAF*=?&o=OwQ>g& z<>W%{FtbqR%b5*4U#?bed!n4IkA;~x%e*=B4xTqxD>o}4pRz6%X5J+8XR=?IKUXWa zE79+=E*54klX-OJQ#_BZR&Hp5PFWWVGw+o7bmnQEPggCM=s$K7Bro^LygKt8o>x~Z z*PiGHQ{z8@O`-^TzjJbKVK7WZvyVK zHR0AJ;ACB_T6ndzx@fg^)>NrOu)UZCR}@>KkldrH#*VYH8tU8CE6?NV%6HQG=Wdn z#j3$=OyFBtv)=s)y_a>dYWPMc@GY&0Z*+oxi)+H|O2ECjCfw2l98Swsx939>{c&+k zxa|qKe?v{Ug9$iU7pumXRSCFrYvS9Jfa|CUH!A`6%9?QN68$FYV%6x|m5`T7HSujv z;KOQ4bw2M+;A^f4cQAo(Y)!b9gj`{@s(QWq6L2(%tN}MP!9N+hR^!W_1btY2sb25F zM0;s4Q3Gy%qF$Py*MMvB;B1`$^dZ>!PCFNlbj+*md`L8|h2f$?o}d1D0q-}R!O1+& zF8-#x-e&hh9*=uZ$H&L^-qTkwzQNp({@i;S68vBOy{BWiJyEChkKI>Z>%LCAPX+5L z5Dn~m|J)N#Jb}{m$hLNiz#t!CJPku3aX4>}r``M8Oy!_?Zr}P9kftDLrs7Dqd*$NU z`+2>>_7lgmW!)>iZ_2-4a6he2VLj(DdiLjD)L+vAZ-4Ja{cF5m_HF&-;}`qGM==xS zd%s975aQLkuIA43>w2C$@2l&7dS1JG^;0Yt@#@|B+@;T*`jqv<<*WB_++PpH`lWB5 zuy4+nAGTKy30*^I{Sxb^{<uGoE`rcJ5wBCLCH2Mx|T;-U|2Q(zUO4i}x zs}68}v||-N-Tm?>;B8-({eh}iwx17j{sE#V+AjE_N2GqE*Y1rlee}z{cmmxy_#jt9 z-!EV2>PJenqle?+2~+_EU*Di#)$m=*bVz$`z1!`V*Y8W)d58J}qjmcd%^nzDv}-8n zljTwOef1;tW7I4C5p9?D^xdZQbjcHViA=H!o4I|q4qjeQ-o@$V^=6T$NcZvEy1Y*Z z%ZDc~;E$aTsCIw$b@W2U&Rx-d6DG|13-6^MAE0x|YJ69L5-4E3)(bu9bzy6ltrO!u zX7^s#hN&DV+7iS0c*pxyc+AQ^A)YgXh!=gVpZwGy}?>^hTgLdCveG^KPKFRPg z=v&B9D!-5W@zjlTIKlXf{k`xn_I(_?uOh6I_j`snx*k*z9p~~RIQ1e?JnNsFz88t~ zdyi2l?OQPQe?)#}DxX4mE|@BMf$|8^Yh;`lh4Nf*?r*pp-ov21xPJu{6tn-y>2@Dn zX?TIl7wKLcgtT7T{$lj&7fA-}dmVQF82mNfi)!dOb+QPSy}zz?4&`w5e2?nEdmkS! z^q87KdLZq#@6??-Q{_nSKeO-I#U~4&;&H;qc#2SH_h}xk{=NaVQv}X$CpZubTMx_6 zuh(cN%2&4Y@44S{fxLGuzuyu)DZl^H{pSx!d!ydnB0r`#TSX6|ZK5CO*QbfsrmvCv z&YzTXe4L_u9A|v|y~q(>(owMYmtmdw8T;;7n2}yAe_ufIZ65GAl|_5QAu4|*V59LJ z^*7Q%-$x_zmzo~xt*tq|E!OZTp9uRrzWpa4m zJdc~UX`IT#4?-UPf$f0E@!`Htu$ErbA8{NG2SLH{S>=rDp{a6_XBpxz#iB5{^Ov~* zyEUl1M>pv7?dG}E7fzqePU&|x({}FEnbIFQl0*c%S8qJsqlX;$?fKsN59s`L0rDx- zxqDP)nS`)lw;kaD^C{HhB|L>?W99odY5N^(x#fBvt8dq+S@fMFDR1_oZ4f2%yvo|~wRee@q;9zF51m^q*0GH#J?(;(q;?UbA7H-5IR zCkIcVVtkXLr+bv>o!v9NgqAx{PqbC(RR3@Hy_#Ow_k|Egm`6{hukLA%52T%!QNeUO z!wj&&4!wk*#vgot93GGp>Cfd0<(IWP9#);d@x)cacaOiXJ8Zo#X2kY=;men4J;WdI z*XGSj=y#s}qkcT4pXvKc85(F%=zD-4K{L?}(X(;7@e%#}KQwW&b5P-+k8y$c?iEaL zym~%A%j3+Ql0JL8JU7XBJ3QecE@$H?Uk^VHdDU~y@g^C^=Yj&m*OCvk2a?f^fgJ@W z=NmZcrB9XxY5pbcZ@mjpkS|&HjA!?7J?_5a z%Y=TPkL#hQTeukS>w(@z535`)mh|Wm={MiM?xw8Ljtz{zr2B1(v`+%T$G@uze!Jh$ z$M-eh)B6aEnezmX*M35CsPu^3e-dq7$n{2(Me*Z_!p}(WE4KYk(PZgo+vgOieT;Q~ zQ?y0oEZQb~T2PRET|WJrsb0wQFnZc|-0dC~AFf(EqeqmF-P|0SXDA=l-vjSsX!j0j zm$koaC!`;v-mh|d<3?>~uk3HLb=Ig?_N$rSje2GOnXR|_bfSOFe_20(j?WPtwe8hN zZorZ3vtLg&e%N}R-GhL!I0EYb3O!41JiCkA3;*Q>Z~hT-a-Yrz?Y?>Aqxn~+m)dJM ze18JTFguvG7tt26Pw@yT*?phLk;zL~C;jTyD|G*v*(tQ=hEw zyWiQy&v=~Jp?Hco##|u#6v3Ajsqx6ys3`ma{R_;0p}lj+7MYz%?|ZcGQUY!*O%aOv zeSkFIZG4P$;Q*6I<1uM}j%T@4PcNslUEB$IUMq3nKZ(YY(e~ZkPMbGHTZFIa@lbg_ zEAkzktbA6xT2YVMd(`tC+LxK8-|9Ja1h@k`ECK{LN#W$4lHNZT>b<3~kJVR|Y&KV=jqbJgfgM}}a-r6C4vh`vy2zJlE`Cate=9C;x zrY@_$h|vb6SI9F~zS%gWwF9*gJ(}L#DRCRubr+6yp5=CmT;Y8NAY6OTB?eRIyO)pj_Rreq?$@8L>k?CB zJP}V9enwM-kMVS!7n~t<#gl{q@r7EC4C8|ClEjTKJ|A|a_;7Ka_z()b(T!{DfcbIy zkD6M~mHH4zm`DGSQq+C>4sMFbug!PIXg`Ko`63AH3-I<$rau(W|NB$)yo-jiHV#{s zXRsiiF3%U=ng_o9Y`1NEg7n)-v~B+G-($3w>=E97Ao%S=9CoaQo+zJdD(52( zJ7)70*fpRilBGuQ?IPp%@H|NEwe@vd4+g#$P*Hmi6W_sToZK1R=nsf;x89?kvdT1_-y@C&P+WJU!`h^khdn>l?uImx*-mERc-?$)nO@6Ai>sO@PPL9NkmD@!; zMX>f^9lD3&2Hz^%C3W6Nc7W)oe>Be@M}MiGui!_*j~_sP62B2_UI_lakLohK*1lpL zut_?eW&CtlfP%>-%Fn0rwoc{u+ij%6wodNksFRC3e}VEZqw;p2l*tX!Ponf|RtX(; zZr}1@2hdNzcIePAX9E6gvNbloh8;wHm#zo&^#C$yuSTczW7`;6_h?I{e~Qxk%#Mlr zJG6!k%@9CP}xQ^kX`y^hh6L~N_Gx}^@1$Lb2o+kb#7rc@c(b-us zH$gM$Iob{VA$~f(+WX_y5x2T>z-Rgkdw@9f{#uq#Id>8dllr1J?woJ>umIhxrE>W9{g>gOh2!K>8E!!I2;B z*v$2|Ucqdn@yjs&VdFXY2PB{$@wD%JS-;NH^dg;)K@DaP>n9;b>op`p2w~=|02SH1 zAMc~-pL;JCuNJymS27w-N4a^_FGwk7<%4RiAq_ex^j*jg9{2D0$K*J%`()YoRkdH5 zg^%_IltIuc%+ZyO#v?^`N}yx6{w zQbFX!&UKawA}@BXGb-e{LfcmnHOYKG>J_FAZG`%=zAE%o?gxmnq z-a~{SK;w9p%Y6sYpl<~~Sk@ppR<5;XxxHM##t(Q6koU^PcdMNC)T;MuTs|JQi}@Pq zK9pMcT5IC@XThWW)b~z~2KD3QS(+iwSog>Dsa-JpQz~eF<8JAH9jB!A(&P;KoTnnb z-TeFw)z7yA4)XF%`tS684JA^D8$|xhKEw?KL;-lIiXhIb9m^w?%4<1v2Xb0<;$!2v zd0MVmC+9ZoyHn^Fz#HCH9miFcW0yhS4_YtsewE0(9a_aLoZvD&M+S@LcEz~W04 zIQ>+8t^M7`dl-SOgPNS6UR2%MA_N#6^EADfStsQRQa|d2-A4XFvKMAITXj9t?562` zv|03^m|ZJ)l)un_@X^}YD#!IW4#0V?-`~pRqAlCG|7`us=F@JT2V@i?y^q)QJf1D` zZ{IgVeF*VHNssRqytXcD{B(F_7(@Fj#eds-&3a8YIWj%3*Lj5TSFiV@@xVT&e?bWD zk-YWtgV(3o9#0dy0(sd^>&E7%({?yL?l8N2xCR}vu< z+`h#T!r*ujCkN^AMf9-fRpq$izyE|1eL5a6J$Lz8uB&){_9ukBlinm9SI z@7P(o^>=GQ@xjx2Mv#YWnU}`esev zn@WGLrXNV9Z_@OkDLNn2^n5D)otoaBO5dRAb5iN|YWmVt`r9z3>q2m+d=W`*qqnmIoV`*gQU(tNT&yK8U%xA638S6HipTq3dWS&+$a{ zGmV=WZ>;01FeCC~-#5Z~KZ3n4wDlR=F9G?W^AAq|hR;Eacr$*wc||l@CEC8Rr-wp@MKs~yZ!Gq{F)dL^`T#v|g=`NI_as8cnes-61 z-l5}*IHT_q=l)XKKm8~2ob)|@qTaDo5_aNg@*nWy9Iumgm13RTTjR!|J63Qx*Dv}W zH5w)LMD*A4Iq8fkxp7|q=KH4t*33}RyKI4)&V9Ia9Ntn0+SAK8iVyWSsS zb}HJois_0T>ftBoCNNrmk@alInZM6A+9Gy59>Lw~*0UqMAI1C(@ZgnE1ZVcs=JWo0O{Wk1_A1?f}??2@g(7MbdvBlY7_kSeF>un{MwhYOAk}gXtpwu^JtI{S#51Iv^(Wem9(DYo`h5P_K7U8&5$Guns$M_FAJD5~U%#{``itR5lAhzu zk0>wo*?SoH4WvXlNiXKcP>k#h$qDm+j--z!HTU~D%H(xcLXvSC;OeXM7#`(-xwW?(ap2Cm-Z`;`o6_9K`dFuwpgemScA9?js8{tMbKV0i4@4)$kzq32O;C-fci<@iH(11GDy zvM2Bfg0Adv_OM;qR^F!&X6G=PFuR#KX8b{a@42NcIp8Z+0CT}-8NMsqz&nJxvM=Es z5@B|EfH(bN_B~vmkLRqlNj%dSkL;`M%GUFIJIqcENQJ0;iRbZt`7iY(%VUX^zUxYV z(XJEup5rh(ndLmpUd#7T`sFXYHCY}j)45=WmT%;p=wbHi02b6Qw_r`OTpO3$qUBEE zlOAFAs$gWQ+AU zd_9lL-K+JziT#%k|D{xWrZW6Gg?}UaBOm?=uN~-r5<}wKT88)GZb;EDe7d;;Zhwm2 z@r-X3!`b}X|8DlI#P_siouIFm!P(yQz^^s#5X=s_d&2X^pD<8 z?G*dhxL%(!Kl1C@#rS0WiE_k>#D0jpki`9J<6&pdbbkxtq*7GhUad#QmxsGgU>(() zRwke2=E^oy_>e!TNCbr1*C>!;R&7 zP43eD40&r$$eYe1D4qUM|Lc6LabJbpqQ6Z(fM;|<{zX13<#HY4Ih-6pA8bD&{K*Am z*6jR^-`>%w{vE^Z6-VR4-JX&cTF&5c^BbsR#A?C6F`M|jr2OK)JvKge{))y&@K@&N zTXoz4KgNEG#~p5I;3&8v7|99{$7bf9@JIO#ITIrT|_f9CRl8 zB_AGsBNx0*@t-7qXwX#lLp~hlA-Mq79dwTnzcc6z_B%ctMku*pI>Uw3KD0X|I?;nZ z++c=-G$a2s@h`*&3{8AE(47m;1Q@}!us`wh;qP<78JgeB{=?5lzvcp1rzBn)l2W?p zr4KK9czOjq^rlnyH;049bAF$&gYYy}z(a0wLB1j#e8>fm)+9Y>cTPv;K0O%G*?CSs zUF;92P2w5G@W7T#r(qr80aeL#$hGZD@$qAatnGL9(=ifv=L67*8lV@l`!tCka*p{2 z`1d&dM}I)C5N~b6Uy0+1_r0Ld_8Ek_PvUYNchA#u#X*oN(r;bQ@YhGKT}gIkA!j=~ z;Ez+u3>`B4ub(M!ruR1y{yZfuA@q2@LGvret@8cOFuQ=DNG@r-h?d}dDg0|L=%ByE z2Z|uBp(hu}c%(dTeW{LHFVk`Ba&ABH2%kmnfd}z2p6mH%dE9!Qj$1Eddw}vHH!Am3 zUSGn&#vr?bllp^_5$TZ{_>oUa)@i7 za>B2!Y@?1_o7jG!oXDr_%SJiG%jGWNpJBFL$FFZ-dxCNzcVg&K4si`s-y8U6n4O~I z*VnOqK{=Fga!=(11A|k!Sz2xc+Z(`(o(Oi-gSZBQpTR#vnn%F?g*3lGOR#?9g^KUg z<^r*Qzz4gnf$+8SPo%>>YoPS0{1fT^x=@aH$BMk6ehma)?tkGd=TQ1f`3LZLDop8W z_b459R|BO_;Gcl^f?F4}dFVbfJKwjz90>sML4ubvIqRxItPE{KadRQ(ORIEU;6Emqv7cKT_^V&_9z{eWdd96mKyr_4XhBS3C~vKm5-I2>%}g zgxB{fN8nevz26)l{;v%X{+|a3|M>yJ%Xzr|^ZyeA#Q%{2!aq7d_#Fd;-#S3}_YM&L z!2!a{dEWl>|7`=rfBOL8Zy6wbG(dPcpV|NRUNb=aO9lwvIY9U~4iLULK=?Nd5dQoD z!p~%Qdw*koCY~+xdpqCj&(|^jb?;MOA^rt^!V5i*>YxMu3I4maQvk5P2rdTi)iM5w zbzhF{H|`oNGlQw5%9t9+WTL>UHhnA@NX}or=9Ed_vym3qC8rXK3`+|iHey5jr36e2kEcC zAE~|&LFa1)`bi)q9J&24BVe4+nn@#fY!}$R~bmU&VO3hXNI(`G1EYmeRKDKAH*gGu55Fc_`ojm*GjKlq$03pT zrG?t9Z}$c&q~#!=vG!|m@QIACqJL+}?8EM}8lTzD{I2Nd35?c#pV{y4e9%1s?SP5#(x@->)iPIofpt$Z)W(TMZt` z@|+9q()34}@8RI<>LBOVAHG}@+QaJA4%Dmr#jSmQ|3Qzf|I+%+RI?dBLy+8K$8rp#1?Cm5fOu^oxm|aWX3*_u= z-Ey`|)#fQ5B2ns3{R@sk{kcH)V?}3({QCPb;lFCNqgZ$LA;?oMkbPX0dU|9#i?ya& z_67SkU{`$kfGMaYANJn6rarHs!W1A^pxg9099*c&Q@n3F{h{FWOBWMN?iQ5fezqg& zSKn&|5A^JH)IPhX#^gO0$h_}p_%;17{4zc*UMTe+Nq?gAS{M-ikXTZox7Ga7B)|TC z`X%GD@zL}*IgIN89hfYFW=7O3D5D6m)v3G#r&eRt8CAXtY^=X zMXRM}CO5D*RK3$L-+w|C((-id{U<35g=hwP34VTLb-6r@|NJhsv(kUcDxB>Lbo%`q z{O40XKU4m*Vw~pL9bf(`^kIjLd(P2)o)vZ`)o#1*7k1{;Rob1V!-v0}*1_uUWHvi} zsGvv3)6seD+8_P56CbF;pENz`@vG@&1s&&g47mRH44{6~C)kNuRMWAu6PIN2gztFR zi5~R#^@N(sj$K0M`w1;u(S^OhyhkU#E1M&%G z7tJo1--I4?5FWErM?Ze}T979^$3xElNG+^s7ofBh`m_G=8^UAlKHPi_^D2|?v^-bZ z@jR;M`aw#CfAi+4@RRUsKlJH%uH(&$`T5WR>%&*U-;_S2@rbJ9YGS zyz#j4>otetm$T!8kGPKgO7Q70{2`W<`9pXSH$8~9$o|OmK8{l-cM%liRrk-%lyOFU z7DmsMK9dYLh4`!ve%f~{;zx4+x ze|xgLZmx0Xk!#jJRO`Q)%iBIJcOIUQ1Apse{FU`VJc}7CccYXmAeH2tz`(iM^nOn1 zy-v#YbN#Yd_bDy6RLb>obzC3bL!my%5&ZYh=;`cQN)Bm%-4V_E)RoY3Frj8xLFkX#Wk=0rsBC{|*%RgmvHV`TL-0 z4Ez$pkNtYHy#32K=eE>~1Mf#@;AQ7iI-91T8E*eB_6b7ri+WGgJnD};#j%eI!Or~w z4~{h2IUvM;MejayEM?Mvr_!rS(L6!^jWlfL|#@_ry+PPfwrL)#Ary#c4}UQPd=EZl41<9kmPeCV&;ss8#M z;ZM_P=gLjL<7o#)j2px7n))`~y7Xb%&P@IoeRAy)0kE8{@-sk&92J zLIm)~7Ya#fP_9Pgr}dUT#KkL&`mIxzi%T;SX*_7PJS(I*Zj#JNJi zi5m=}C33boS|)VZ{cBdw+X)us@xBD@i1eOvcmDc*B8-B;gU%m-PNSa+qbkS&_=5bW zk-r9|5?Any*99y zuc0K{4}kt2%ytgaPw8q;kqireHFsh^44r~u&ZhnCSe zq)ndD{T!vZJfR=71t?hFmgj`%HqGxCt8p#gF;U}!H}06Majm~&8poHn&ERJ|OwREE zKjb8ywx0PDPwSDVewWg|18d`mc;aTxkL(^SyZ=Y;`>=cXB0bM;=N2*k_d<{RKGar8 zg`eL@cFrGv_ORVs#r0vo{mxfH;v|6I`=0gutM%*olArdse!pHxAb!7oX?gN~Kah%i zz@eV+k^zW1WtYy&B@wUpD-X~@IBf}wbdMKVapZRC& zWY^r-CU~h2K&p*D{QkS2`p@o_42Np_^}94SKC^p;(VtI{;fXe=KHewoF+Ggl$<@*K zqg2ixlK!-NLZgSIzvIi)&(7Y-^v2V6$AhyK zYmiF~{kChy&uVtf|8`Glv_bU1?kO$n zz1kyZ7lan%?@SH;n|z=2XOwU7NqUgmaZLGi;P++w5MOqX^~ugjSA74H zh#*pEzpd;~iuJy8$Snf;8Nuw|HH*e@oaM|*w|?{G{cBhG_FwI~epl4lH*tf3-CqYi zsAE6C)zE#jZT!Q@{it@0t6q%i(74*|QL`kzMcVD`_b7pP_Is4-Pl3VRz1i`dc}|Fz zD83~v95;Jw-+!=m5zzYu8r#}94C`ZqANdBY4AHnV{_2$r?0bniE<^s*Z+)GOeDRN; z-MwJ4@ZHuik^h--Prd`?3zyvR&;tGbqVVb+DNs<`qN`1@I%L;h?{MyPe`zzs+-xW_@%JvC7sxFdsoX z`!jE>wLUufqsejWMTFnzd@lSrE5(mdCnxzalj2rS`svTh_NL}hI6({k{*X3^Te+iI zzdh*9m;LqIXTAFT_1nD(cpFb2{rc^Xy?QXNvGv3l*N?ke3|SM*516{ZRmX*UDu#;&;~-)2~>tQ1qg6 z&Wn&l-&Hzz=!%tH-KIySOT_*a2mkg^H|ML~Q8lQkyMS8Ce&6V`?;OOl_p?2A-@&5x z=Lz1{-OJ~>o?U~1zY8_9n7J6d6KNR*K0NstUzU$8q`JS1F7%kt!Ow&d8zQWFf^?^tVpcDC_-iuN8 zD^ef)WV@%Qu^YcDAC*p&gB`ScbNqchpa zB>IsH)RyX=I>UnB+2yF0;SMScpoY! z>}LADPJAxs%lRFDd{5c@e)*s$caS5jOk;g}r>BotAAHJ-L++oUwwm0vj-Ub*5Qko1 z{IkmQOMpLvNHlq}dtP&TYm2XMkfXGmqWmpXKGN^^mdoSzFiPJl{EoJWKABxbxnGg% zF+Hz8lfldDAu8X#9CN=;5jgu!#`wBIa26$j55At(k5{-0d-zB9IEiCj4n1?KewV=H z5bfuF&U~NGMcKZSn}}~n_xp$SMD?j&>9O~TrKwU+sY9OK+K%pvC2nv=2hN|PzwI6j zyD!7~&-_^Hh_A3;@%wRMs^6cbahS<5;Giey@AawvzMJHug5REeY)`@8M(`%*e*L>s za6hH`o!xId!1Ox1ulM-*eB6HoIbY?q5B5`EO}>^;C+3MC zH|evBPN$-1*Z*VhUEt$7s{8R>d9P$U55-P4c1(<}<7b>~EWd4qBz`+Kapc(EC<#gA zm9&->OIk@QS-#n(mh%n}@`R*NAa+6=Xd$5m%&REv9|*6O&=yD^&_JQkmQd4{H^l$% z_nbL*@2*z19MWIQ=fiw#&Cbl3nKNh3oH=vmapO}&v&qKi%RWptzD4@m^p<4&VL)O0 z!)Q%D@M3B>V7i9yXEMsEkr!gJ@z=<{YBqkM>|7?}Z_s<>$dBm=`R@^U=GXAu63)g? z6T4D2zC2dPwD`^#cb-`!72^;gelx|tGR7go`WWxU`tcWX0sl3emoVuy4Zo7{HS$gn;TiT~-I7jt4R=X6 z8(*OJm*YDCqvb<&#P8jbPIwKsOPKKJI+VXvBoNDI*o(DDI^i{(k#I78iN3=WUnDQ? z5S|(dzGEH2YxoTgex=;dPsT5j_c#eZUEr?{;WeBN;pgC268$+>{J6~5o_sA?=`#=U z;d@Q-wJ~4dE{e@?@aIYTX8cun4Xa^48NW>Q-(-A==%2)g65A6in8Is#t>jO}FP8TU zlJRjrzLiSQa;?%)^eJ5%v_@~#x&IZo`I zCcgz0pO$)iuZij8)9~B@eq(zPVYXV~AyN@m z0|4P6_7EnNrjyQ|dp(NjlO@d2r|CX?TTd~)O2QCka13MlhIC?~VWya!fa$E+>;w#x zk|yVG_OLcW3u8z9-v?c>dCIISyGL>BIW=0`zb~0A;6Hl|}M)#4(fA;+X&UfRFXkRfO%efw98-2{)6rPi*@DATCz{}u?4_#q~ z`WA0K*GI#*eDlprePPu*kJ)=BjQ@||<&QG{{q2AG*7E$eZX9kW1ioj3PG-+!p%?&N z=)oM7(AP7{SN5La@J@+Fx-WcV`qUsY`AA}W&%?Yo%tGLdPkP;Z;!TL>#BAlHA3leqUMqTM=*PlS2EW zc0cqEJ-19gufMZ6-q=s`P+u}mDTZ>9eoa|A$G7owGM*6rBHZtl!Ks|%sL*nH%FJKp=kvaVXA`PhzCV03GTog1|C3DysUn}I3C;Ot%dV4;>1ELOQ`=iu)}G%0ED zzloi;7tOZ$hk+nkM)Suahrfg~ke0tl2UGxO@29dpDz*mqJ3aq*dOrDs z-=(Eq_&Ys+1<4_LC1;ZGJ?i-H^!(puJ)d%qqR-@Bcy5J@8#p^h&iRk?E%gG^pK2gi zkEeH^1K9kK%GpAX&Lf4LELG3SqsXw{!0AJ#uTj6`Jd=&rsU90&%533&3g<=YQ>KSS z?Tg=+_<2VO&-wL?k4ER|dWmOy*l%{vfp7;SdO=~DyFY>WXCnGcVVds0@w_}W>cUOM zeK=}Jc8|jB;id;tFL_6#eCjtSLhP`=x2}jE`{O1IFfTTMRLY%&s-Mr5V2o#reEc*z z5q>_}o1dum(cvc*j`)!d250A!xUT7p)W`b+#GBpu`@ zcro97(fW`ND24Sf|ItYQ5|8gi@-y6mc6zb3f|$|2^`eJRpU#COLi?YzGX&%XwqB>u>h+^JVmVUs*rTMw^2}T7I$$iEy?a z<9G#%Azj$M18Bdke@%We{;vT?|I37*g+Fk%?zHdSXX6va5|oWkb#~(mgrBqV%cUN+ zL4xsZ%ME9Ef$smQv6<)SL^=O-n7r2Tl2vmd`x`i1%5b62rk=BGu;i+#xDH~aBy zu@5KX4~hMl`OdhzG@sfB-|zC7{dk#_myACm_G9LoT2`Oh$)0ri)`;C88EL7+1OCfp^-KYz7yAPTf4;LH-;FpO58sQ9PtXC&4WvC3 z!jrBnpK_k~Y%42Y;khCr+=7@d{#9Z(B>c)U{7F48b{GBybwyQYL%yIVMO=58r{L9K$`sW-z zvz$G6qv!*K|6E1B>~Qes34N3C^v}JCZJ53@GM>EH)nWX@vVPI}A&6Z1&1LD7TTwd|k2FT- z9ZdJ3orCia!{t8b**8baMLXG(g!`$3pX+=a_YJ=jLweLl^k~BWHxRP=%^!Bey<59do2DX>={1_y&@~KbYAM|WJ7sdAMjNoNd;6V4KfvzuxLG{UEhQD`uFk2|i=e_)ZL6kP$EZPG&pW#`M%i&1d(o zW@CXvJgI+)@5(bh{xI+ay2l3LUj{hZKk0&2LbH8NU$XPW4v#{E>QmA6lIX1wy;1b3 zyc8q!Ux=T!AD@gXBK9tb-K!*>t`Ruxm%?7nZ+30#Kci#Ns_ABL=XnNFAfzWcpW$Re z>0;kQYI5;ukGq5Dm*wKc#!AOg>BmR5;c!n){O~-WJ8wX|h>7vj$XayXL zDmSeh>sOOBG&#h=olGXDSF z7R6uR>$UxqLbcM#%Cmh%k<_!qxF>-cDf zpc%@qdKQl~c_I92Jpffqyb-NbStZGM$ z=LHGTAuetO=rf@ zzB>?=124MyBRWq;@7J9U+N4Em1|1H%b!~XgRo9)y_vQP9VShg^&4{s|DE~SC{UADT zf?kUO!t;H1N9HlEf1iqk+1{4`JN$r_7k#(j-6+@i$>!(s{Sfxs5VEHDcnqBNV{3zc zFI&Rsg4CHaB>i~hu;=W3bWc`)z)Q2mn$SMZZ=4>7;OD2ktac8UK8Scq5T?H<>019F z+E$G)`A71@A7c9aUrT<@t7rn`&-wU^{%9xH!q12oyI~3l2p8JV=4m|XM*Ya>W%EV& zy#R+7-xmW)p` zdp`5%!om!xCTxE&!>Ay;NKKdKt z`Des)mbSAUOy%R}p!50NVa`j*#C-ygOuS$0yj;(y{exC=@FkfN|M$#Lc_U#&6=pC& z)35KQ+@Fuyupfr+AJcM@OuSJ>0LwcMVY?5~#7Pa3h~KHF8&mlxz>B?B%1D;_TV@PM#XL_=Ir zKvd#WE0Rz7?iPge*qmf~ubW5m^HqQAWhcOyKGxf3Vbynfm93EeOU>V6>ADW--DcsR zYk#pk%vTxM-~b>~PG=W&iSAK!?Au=$$SjguF;x}e_0NaV)j0$(6hF-b}ll-;RfMzMaTHd;B$S(`i~$V z=ZVzJr|=i;m?0j<^PAv7cTj$b+^J9wDP`pte#SrS z50MwMwVpx91M)rXW{e-RyzyOrctpYE)(Ck6WJ=_LcH>AnF{I^99jm-yg>WO}nUljD z2PY+OLV2ON(RJHT(4bm}?-9Tk0GD4xEHUm8zJ36D z&>{)OIu0qV_RJv_v93I%&?$0Hk22tKY6m+9i!d@*|cYdWDoW8=)E$* zcc!Kv0kH(%wGLl|1>d!r-toA@ccH`gafh$#f3{EXUFh(2`X0VtD07hAKcgJFII72^ zx(iSR>3K8!!hF?JD(TfnLEord@^--6_fLa4K0=`5+b@?35zEg>;#(cC=_dj;q3acWxW`{8OX(UQj&Tz3piKKSp{w`k0=| zet0X&NXIS~ge{%;G?dW~U5R(EOX-((?=RZBLdm$|V*L~?uWwA{%~w305--N@T*`jV z0S(*wo%~miDB{0?>)Nt**?Xr<56~8@2c&@D5iQ5we+ituFS`D_pLFU|IPwYmmwZAO z9K2uXOZx0v{iI0s-q*b8V>isub_WL^4b!`B_~O@?=fbW3-a35-sYg7xiq-NMV|cT? zvC#*LFI ze}fz$d|~tFbR0ZEY@y#Fp5wW&`B{l499?0vyFap7`Ihl)nSJj#90%^+Y_#5I*-uWs zvi|QPOunGA_b@2O_eItdg$7qY;swtJ#nax&h>jP*x8Zs1Pr#RqGpFZNl3T=!`1}pq zYjVN8BSv}(er|k{?n5PXe@5wpc(4TQ6e>^59uaN-i!6VdwkI0Tac+3A{Le+@O4yH1 zt{hZ+Xjgnn@@aoW%X(C}D@e|b9}dllNr_8hIyo+!TM z?Jwy!yKfz7H^+OW{c~yeHl+{y^AAXeg03WT$Ii+u4jp`Y2s?fjnETWvj6w^H$-o`ZjQPeA)E@1_FV#}3ZYdC~T3hab{> zHvidq%DXfg-(9#(e%XEw^){AYc%$N#j_;TB)ZUEvq1i8XY2P9)48^U&cm+U)OKA**gR|T)2BH4 zTK~Czt=*yZhVQNk9zX;+@fmB77UH~stpZMS=ur1k;Dk9XJT2+wvWt9p(RBg>C> z3?yF@;+Xzc{HF`1aMZwe_KjdFM+xY5Ks?A3T_4!GzMbH$k4z z#r`vW%=XEHGQHpSe@;lR2c_8XT)ojP8UHtFr?qdydywb{w!hb%tKq&Y!|8Zl3M@1{ zD*1a`CP+AN<23WY5((S7s0r<-geh!ReX?-f-I6aoZl1!;5Kq=IcSZE(WSm+7)~E2^ z7>TFegMTy)s@H(b9kNAS4fosM0n@RsjEm(T4(**<4^ z{&Z~naq|)1JIe4SepXKKxVGQ)Yr`uoUoQoIixqFv|BVj}Zdj)YjK?*CNAcYlH?Br$ z5Ak|)8D6BL;brBgW6Pyn>&N`f!_r^DgTBNE54nDOLV_}13`4FL!gqt6eq`@zJN_%a zN37!}c&oNEbAP=Q)cXf3#LvH7=b2U~KU$}$+@aimwnVQ|eWdtqvFaNI({r7EGE!f1 zdf%;zzwrb0o^QcWl6L2z%JYrZugv%Nl8;s`^xr|(zqZ~wr1em5dKPrDez$&2%WTYi z+Mc2wqj<93`^x$aQDMIsKUn|e=jeFM?;S4{5AW3aZJhVI_cVLYRJimwov_RfW%417 zcV*}prVG!J;Wx)ox{9lM$SaeFPOfHV==g5}5XXHwt_&N@@DV~gE9{>>SfPDp4?14H z2g>phFXLyM2lH{ILle@NZgeobO|F^zvUd{F@oNALe0OX9%mF9YwAr#BAni*i0l4q< za0H*^1ojf-7viJx%j9NZzRE+&FXEM)z`qfBcED#a7Tl`iEtox3!nQxbcCzP;pMpas z*H#N$Fw?=`DnX$O$GaC(z0~TncS?c-z5oWdyZW5`G(5?NZ;iCi+F|n7=x*aFIHc`M z#}-JrM!!&=-0teTL+cxUOu$4(7I`x98Ie1M>zq8<{Fut2+ZC>`S=$@juKi>4OEBc* z%N^SO% z<$;YmTXz~AUoE+icjq(toCrCr@HVY~gj_h&(anwHw7W+YzK@A)%%6_WmI8`$VP+U+ zdT~FgPU7u*O6jU9$=^G9lEkO0R9^~Oe1&Uud}nlWa>eLF{`=3ea~7=6=w;*G_N6i{ zP7WcTjMJ+BRQ?&QzA1u6xIe`D9*OX~jnl9`w;;23XGjlef7N%To_t*CIYRCzxkRst z&S#uQnBU|R*OB88w*75}eS`~+Z*4tp{75-QSGf6ksXzSA#R^~J8+1IS$LsmwV43n` zvbs&ugM*rGdM)jd99ivHUyy!*TW67v7;o<%jhMF{)cM==exp}9wp;5t;L>lCV97oM z#{=Qn?zDUF%g*BwA5xU{ix0fGzD-tNAqClYMv~+7T}dzY1MTmX^CUevVWapghb^Cr zawrkPc8A~l_^9S{{KxebvV`q5JBOX8vG+sU(Ro6rLz>^#S-}jcHfHD4qWdbP?Oi8; z(e@HQ)^F|p9NRnLB7qB9wcMopPTq)qXc?^^mP^Krd%wQb*#~;vJE?hRH_IH*iO%Gs zy^9*$rsXEb>G-AILC0}V{mJ7*PmrRe7Eqr*g*DTVCw*(x2@BlKwG#X0mqV3-S51z*)Xvk*0gG zKUaRR@!{T!O7#+JwpZ!Uj`1huhj5zT&X)#fYP-!oHln}W`$EO>qJ*Vfp$qAP->li> zguTBSH0gbIyJu_f{xE+E|1)Q+JT(4_zAwfbl$LJi=$c%=q^s5-H|VrYj*W)3%@7*fFn7wa2>>5b9_+BK@4#{?>-Mez0oTdU^ z+?a+-?X&*i?kD8n+f@$oybU3e)t0_m((Cq#7wbKTqYUs9Uyyz_dwzDpHBw)4!cCGs ze2;kH{)iWAmk7&8e)SQPa_c0sOWXWu>$%}awVdIV>a%?ZK{&HlT0Lfevv=)+S3ozC zv`9A)0xr0Hs`y6t@IH|HzJT$c-6JRcNV#%-fqZoV%R8*&u*g>**Ks7ZfbJ7?Vlw?^ z_+d>jIbrrqu8&v`?T-+1$L#y3_C07@=h!)(;4$qlFZQQWU$3&2+&^HCK8H@HPdgvW z&5r-iW5X!d?0&X?o0(jXRP?`FFR~vQ(>g=rdndCLrmGw?dge14A58W&-O17597V+T zb4-5;`=65=T<{*{Pxk*7gwwIVmUb9la-I@;z$ZQIUPSPa&+M4Dex`JG__E)0-c)(# z;WQoLk`qoB`-m4iEaBkcsf-TukJkTbXr~INay4-CT7HIW_aRL;I*~4PUhHF%&-i!{ z^Q^Ul{-CwX#TV)C>X}?hKa&$ich3Jp564$Vhu}<~)raSSgF{+gkuFaPUiQ9jk^hxW z!Q(Gzd+oc}k^Z6TWA&$F?{su=`OZ>$7R%Fhdr&r>(y_NmKBJS}Q<=US4T2kMJIvmj z#H~-}W0>?X{nzkJO})FMJ}-8sgom$YF3?HUp;&15bMqbNNgwHh&QDgM!!SPtZoL-n zcRTn{UO4+|xjsz2pU&p7G&d&TZ2k)6QJ+MI-!rjt!|!b*F;L(F^n(*t`}bwO^B-&SR7dF9O8$?7+&|t@&&o zp1xwCL=4}l@z!6xLk`a2&2z^bNzXZ-=Z>WxBl$=J4Dl2 zmC5CBzv*^F!qqxCoEp%5lj+NJ-t2AFbUQcO4*4l~IzQ`G37(XrF9I~RRN<2eUDpMV zD?L+d$v1dsdx@R{u=4;x(wF#Pl8$q;cMV@9(cyZ|i|tW3cmKlrr+2Z!(Y`KtIiL7E z3j%g6RsOPdlI?q>g^$5MPF|0we}_?)BdviUwZ?Bv!{%2%mA*H5;7 zJ)q^-|vYQ!*J`xZXMeeaqWbq;E>f zq5ep|w|z;&ZxCc*y_Em-ZC)w7y;T3mOs$u4g0mfeo#RWGWF?*KyT3uJ#)tQMZWXZ5 zPG=)K&_E0aT=fi?FM?WX`M&p~2<){D)<%ru)Ha%gwy9atA{A^r@^MGrg%|nK_ z@qcPETTzt5P58~2P!6BvBZTo`4Ld$)l7gdrBf+y0~7#|koz-Y#E|@c|7!cJsvW zS_uk$S&psa@>7&i^Hg}?3hm+*>nWeFl>jRkG`Zds7kcgidu$NR&8 z?{)fG?;*t}x;|6>Qh~vKqqFZ?TR*1blO^8tn*S?y_HsTNp;tILI9h*&{E?UDh4MdN zt>dI{r}BmMC*>~bm2`Rp!*uyMI{%d43m>8HtWbEGN+ z4RyhjifHgjE?5s8qWiqO7HKA}$0qOXUMZY{=xyQAq5=l5~ zM>78JQr-yuDwhZUkNXpLx1+=}Dkr304=@(-u7BCDe=2gq$(L3qUmP6MpROQBqH^Pp ze#aLT&Ml0>7jqo_ZGKqpOGL0x$9KWLe|o0Ihw~)H?RkK-bCDePP^n_nhscuY*jMql zIA0~JKOB&Eq482=5pXnL2yK+c8=lpDZw&*>kUsG&SRGIy{_bNodaU5R;-|TNq zAVM9(i66L`zQRg?<}xhruXh(=_n6Ef#rqwU3N&c*mp=@JNIh# z9Il6WZr#o~HLg*3>YE&JsRRZLTv*RGmZJA0q@EcPjB#B+6p4QfFRt0WjNxsXPCFCj zm7Pzt`a*rvtwTsB{0r%1>)NP1{|@wn&~AkKXaO%=_qk)NNya}8`UQ_`xcA_9Bt9Ac z^synN_a6MAgnJL^_n+z6v=lYza^AVD0SR^Tjv4-OkUMz0%Irh5IOF z_7Iy#(=la$;eAqEEOSuzXIkBUL*VFRc2n{r8_xM_2tM^?`u4tA?_qbp@SvW5yrfs@ zWBdBH?#|z&>9gZ?a*sE<|3dxF_Gx<0L*Z~nKeGp!Jh1he-5;>;hZ%f$zD(5+;nOI+ zv+=LXddc9;Zf<(9*+qG8%K!M8iVXgek3NUK>UHhxJ*4fvWQMNSjepI4YWJSlzvPtY z_rDnCIq}QO?)zMh2g6<|UDED5Dke{@-*`T22=#e*MHXJT4sE?z_3+Fg_rA}~s;7kC z;R4>|yx>Wdlf!p0H^NV;yrg^`V%UwV;E88-e5`KLdXOLgbbW!Lky^bYj3 zzAB7QAO_#>(Xf;I_AZjbBcF>89@p`hbni~3mT6y^oqu|(RDklPu%cM)RPkbUrU%>p zP}w-K@nv?Y;vAuH<>~n z?Y?)ExfKDps9ff_mi>AFvfe7l;a>M{Pa5x_4FTTd3GcgbTzEoNjI$APC52R!@9;Id zeEy9lSI!ulT**i=VLPl}(lX1kem$Qsa-6HaZ*(mm=P4dAg0t~nX?%YP-?cvB_%6dQ zEweG&-K%&vftDN~#c{3YN6n5g+PJoUwEipJA9m-7Q7-{YLA>c( zY}an|+sU-=n%}baU2&4_+xJ`6zIwFpM0`p9H2zdRJ9++8 zzCJO3p2hY#{mtY(_2wT@{_1cJ_g_=)dz-fZn)Uz)H++_OI6v|+4XgSo-#>=RC->iZ zU#8B*(>_4QZGYbX;BWf2uV(uUW;e0(7o+OID2JHX{GN>;iVdSav#;9yj`I3a;XHqc zD1>$zTMzc?^dHL4a{asO4Bc0*5aOK;(e2q>{Hy;pi z$Z1_CT(a!6iup&QN7orzpXtx3R@K++eFnx;UK#1w(n{B zncd?k?XYIG?Q+pZW!3jK4TvJ`4Wp znzB*SJzE!LBq;CM8a!i)csB~b*zrDH*3HS9vts{^oaATj3^lY5FoGEV)zpq0%)%TjI=yVJpckuk-=P}l7=gRCnLt&x9*?pkG%pyGV6`W`= zea`li*dO>Obff&Y_h{?fe36=U53|RH-Mmn@UV?HTh&80P-yso&%__gl{?mlUvs{}; zxK5y(K83L;&#lwy_DV2(m(Sk2t$j%2ZGK3PpCIiHp3r(~S8IB*O69kGFT4rS(hi4z zt<8@L4!UVVZ@)&ApAQ(p2Y5eh7<94mVDdLvt@csE(|NIfmHw;UDM7Knv7fk(K=xyH z&U?^PzP9h0^W7=FC&FCxz1Suxpm(Eq@@})NA3-+ycJ3rwG&ox^iG1-Bn%=Los(J0=oW z{pRIb?jYzw%GrBHwT?bhK`cG7tNsEPPk72_qS-=;r({aXg2~rR6 zrDHz+OfCFd;rHlxe-UjB>8^zRfAqXO>y7e{*}I#ay=V}5gpbO~7kq^xj*nbA z;p_3gb`}1>nSAec=b)40rbxWqL(4Zjt^MHWY3H`c*Pn~7huk|Al-q2I?b{UGd->6K zEx4YJzK>C|KDT>06j(Sh;+43Yn1vod30P}17xB0i0Ob*w(OZ|~}B(!|TFLq9j z?ff?B;A=k4V>jJfTz{l+zKG7|t0NdZ99m&K2NPUj;^j)GX{*$~`5N_a+A4l(<_v*L z&GN;+WXWprDTn9^?j02J)z6}QF>Oflo4hJayIaeh_Ne&Lb-nQKwEIWIZzW&5cWYRF zrFTEO7yt< z6UF{0MCie;eC71ec8#RR3xY=_yPncxw03`V1f6<>PS1>pA40s%H{`z`;Q_MbI7&;r zpFL9<%IualPxMME2J$Guo6smCc&Vcd#CH{FDzgE21u!Cdm zFuND+F({usm8#eNGP_CI>T~mHG(RCPS)~(@od>h|f%5sIk^W@+??8p&INsp!S?+w- z^|fx?*0s8LO^Sk!yITt%GnjEJUr54SV@~1mK z_2l*f^!}Mjw{U;N;bHA-$0Q@=J3m`BN9yf$=jo`YU51jaADTeFI)+`lDYx)1);LG1 zkL;VjRw7tF(|gax54a`-SYBg`1Vep~?Uem-S5Bi_pHO}s1!xNENV>4RN!sovbe@!F z`#!*rKZ&R8kFTK*d|kPApULb}?9Z9tXS37U_jBw$lXCqioA|2kAI;KonV)jP?vqd+ zke^y_>O4jW+WCjzr&`buIHr>ljHkkpY7s;wo-LAil#ps+DGE;rlQ-6ng=zb=d<83! z$15WI8kIlf@K-K>j!Jza<;# zxKqj>yL{UTcrVr}_?liGT&3rhY+pXOTF)~j$DI!>!Efjkk~p+8ER<-_QQI9{fU=U19oU)mM7wY6qKsTsxp}_MQ#( zaI(^LXMZ+5Jhhdh8vJ#~BJpj#W9NenFRt@JmSeVl;CLc}y_ZY2a6LVJsxo|dzr^r; z;zems@RYWzh`-|P#l9!$tdB8v@5{aiWak7d-p(s<-N09qO%EN;I()#yET^|k!?s=> zAt&>s3i|D8g|qh-rq5P;G3CR4ByoJRpL(;3uidw(ft+Fqb(=Il*DpSPKIi9jM@w|-%{ z%*Xv9u$IVqhEwbLSHtv&ll+VIEZ}Zji1Oh32y6 zCLuq3AMu0E=X`nyJWMIs1Lpm_$c3g8@Q!r>bwwz|L_lfRS}*|NzMGii1N4oV`ccQ z-e$f5e=y%D7z;Ct7m<#tCsyPcm?x7q+AB*lQZ~&P8 zLpexMmr9U}5%1=At}7^)hIcX+-+{vadi+miek9|E@{qFI(!H3TPmS*D4z+ zRG@O6Vm#;Fqmh2%IC(SP$+i4B|Fs*bRGX0YEu_)H}r_uLW zfDV%6yw^AIK~$T6ejDh%9C*K)bid($iS8e$K=;h3{I2h2jFsPQo;SW91kHTX&CSav z&-c1s8_D;2uEF@$`0-@;KJ~vu|KI;DrGF{^|K{}nHP16UdGh~K?p#@c{&rt|q`Y_X z`AIM_9Qkl8@}7K8$(z~%B^A#2|HN`$&zFwmcfEgL^m--y{^kEAdi%d6^e*M^-<;mK z3h=+e-~S0apv|jhf6gpgqI@_@Jh3ZMpGmv-tf~L|2p8W4(t8VmE|bG`9`%LIfb-lt zsGR5NPI~;z(R`u4gmR+#QgQq!!mrl&`Jc!4m5=v|{5M1CG;+LaJ!XG1y=x>Kr4aN% z(02%aCH?OT@~NxmgmSnHpAq_>ljp22?&=#&|9fYIPdRVXqQmw38TgS(`Ut5WOW*7X z%TXxPZGAr%@>s%K2?aaXPVr)9$EH3_``dE(ZAh|nWOHjYT-W2^535f*;@?r9->Bhs z*M-As_zROR%?2Pda*q$49@I+>@Ti}Qc2Yltv=pADXGWlmnW!n{!So}RUX`2He7$0G_Z_ShNtZT84^ z6iUt_pE2IfE!w%GIvsZ5cNkK$<5H3*uSdfEhV>_7Y#-C^ZP3m|(s6u#=b@r~w04eU zk7ahL&+*Ut>HF}bc6x@*9?5fR3{T&SA8=Mrjgy0BXSDsw)Lz|Bu=7Om# z%Rjqnxz_92Y4%ClkxTH_>0Rjeb<~+z#nL#RCnP_|5B}l%6>K%q*NP|f;gI2cOP_L> zE?sr5_=fLcWCJ@Kt95uJ$DJ+dHhwtXcRw7VBf@l69_50M@SyXLfSz<#zTH=yjrXd* zhPrH@-s0`vr}dBRx0Kr}Qd)e zQ)S;hAHG)OYXkLr|3Llxqw3rKW7kG)C;49b!|HW-Q=YLMqSIUzpiLcFu_U&uXlYtM=3OZ@0g$TzD5EN0&oHoa&B-=Mq_zPZZr%@SuP z$Y?os?%MjHcD=@jd~=nCZTxnvReE|cy_X;Ih3oedkCQ2*jFVD+Xd*wLYVJcs&vhxK6MK9DNZ5$OSSm46(gWo6$_FcVyddot$E@&eZ#-HPdyz5`<@2)eI|2^Rn=#l7e z;#EFQM)dPMDK?xp29Zz3%WRFGi}uNQS*qdL-fX3d24z2v{bzE+?n|4TwtW{n_iyhr zh58u=kn}(Ph!6SB_FF&OIS^Z~1ovpgLBIO8FFyTYeYdL}_!9r%DYgIEdpk!IJa)@c zC7>s>cu`*6vUHL_*uIZ_KWF%M&1m22v2!uKb2NVX2Ibef4H`E3+Pfb%URpQnd@%fk z!jVs@x7&GelVh336s{d$KK?)Fd>fb64(^*3-O{lalA8~^i_9s ze`+#M9ijg;0`rv419qN`cu ziHAhu59fai!{2ZBNSe1R1of<<1HP>~;n{uk<{g@vYSZ>N5*avaPtv_BV)}NoQ#G=9 zSDW>gaq5l{%QQ!xJZ)2 zbAe1J3si~+YgLTr_^JfYDZWy?ABi_Tj(P~cZ;K@Htsf{)*>bywP`8E<=wHP1JGcBz zKkSFKjDcQ#@rm%UH$QV24T9|*igbUN^HQt@WVE+^EVJAl#XGt+J zJ7;hFSt*`;St(w|S%q?BoLM~Tr3>pzT!=s#D(X8#P{qwO=f64D!BLhpKouXXak z+Bb-3=`V{PQn+SE=W;soe$y&|P~MTQX-^R``UFq9@xBv@a4etrHUgf`^fJZ^9V^5O z9V^5O9V^5O9V^89sKe?#jC7&nPDH{PUd_G)V|A9_^+!n07EQPDZ{wxe=>g^T48jRL z=V(6T(*+w`IjDzptAW1?{v{p69&~w7JULhHy+N3$c5PR)QY zIO9vR1KNC@takJQesq_$s{iht>bJx5@!!4=O8LZa<0|}tyKJX;p&e{Ni-zkIJvn#i zBZ})G`h(85^Sw5|UFPzc{0Zk}*MH^Zl7CsA+22fWwEnes(hCnLe-#b@7_JbXs{Ra) zrpP=!ah}e{8HtY7J)nNM9>o6hk!0^2dofi6%nr(PovV;u_Xz&LwIl4qf6n<)yZ#Uc zWbj_czmEUy{yEoSpF&;1lS6`6vRd(t=I1&6;E)?1k30O`JjMJUVg9FjB>!c*i4Ev= zP<^h~cOt)yJMtZ!tut*M&2m10jg@G=t*rO3lecbOKVJSnMgHK>ZowlsxK-)w_`~c7 zv`^q)EVYJzF|O3Z_`XKq?L2z$_)b@j%7frBZFjorCCvx^Vpbc+!IMfKdq>5_UkdvV zbk@%4t2AtO+a}PCG3lyr3tZhQ@j|(A1ml3|CLdA{x$+QCXYlsErWgBw;LUdJWO{~B z;Kym>l^$nlxE=X@#&14D;-7QjDE*I0zdOF!uKCzc`+zg?qBA|VoPXKx_{Vc^ijV7e zqhs(MrB`9|R7o#1_zDO1TZMdePOjShdgE`?bL?Dx6yF!gXWNh&F4TW*ycyp;tm$k= zGumO_3$cBP;GojO^!7`pIQ!Q@&Bt~<#(L&z*ye@cNyn$H8gF_Q>)D2SOur2dJ|^u< z##Mq`Hd*1l*oWmua8T)G@xejuw>lLkaxZ;9AfxT(IbOr3e0;F}dB8ae|19Cl##1=& z*mxUIyqN#;vT^wg@(1pFDfVumjc3A7Lw&*H&r3UpS7bI3909Cb)1s zKJkp?FXxxk4hILC(glxyRN%sS%a`a-UJn9}IqV(S#+fdCk@`$$Q5GK@dO^!maa*#_ zK$dS@>+&yg`4LHpSt%Z*s2J}@;tzu_LC#}lhv&RUe5XSHi>_Ci9pBbj{Z7v>w>LC9 z{bUg3vR%y%zShAHKZHm)rn5a3&vi?Q{%_?YzC`bL@uu&m<+cXs>*PauJ1Wsd=aspr_A16E`L)G=s59W*GqrfeXnvj8@HxE@*Krw$l=AV z(D7&MjBBMBe0Pk!hyHeY%VimjAHGff+B4NR{V1HjoL-$;p?KN+@$L?nZ;dO*$qO&` z)t4Dl3w?%e*cp;c52>B4@suNUtdAwr4o^RIt*ZxNy4rU2Z5^H3?$R|nR_E%eTdEN? z7}PQ@UAu>SG~SE-h2RyHr}uOGn%O6V8TH>>fKkMF{LV(J6LAaLK6Ez-&9 z5%zrx4hq6O{;2kcqoc{i)Hv4;lt(w+-Ges!PLq=-X{U#HvBd&cyHmXI{7-OL>ovX5 z-kC8xjlQXkrF64*4T8f?z6V+^`Ihvve6~(XJyM##&e=smeay9^?rJT^^!wnDYptx-so7b z<=Fbq^vF8LuOVIC`14}B1P`hk>_5%@yL}5=mo|Z}t3Z^rM=LtdiSTwF z@H6M;!@C?`a2zsz*jKpytJH6Fe39FxVcYi$;b&@mZms$z?+WgmL1Bi*JMkFqm)L&R zup3`bJ2_Ztr;iPp-GuSh-`H)BHBZ)Z?Hzz-w{9>yIQ3lw-iI*ung%41wBJXU*`hRwcj-#@Z>vAI>#ZM{?cF7#_9f%p-%@_iGt z7jWKXdJSk2M}5J2v|U-qpO+D5=deoq=ji^%q}FTqL_GPrqUwjm{=z<@YfrOdgz|Dy zN$o(}A85W`%T1l31hx0tO7o46HM;rS@_DgKBqQ5VRnm^{A7eXA{&wXxBlXH6p5QB| zzi>TAJ~8{hC#MY2E=5O?gJ#``{-N_?7l}VTY53|suHBcWyehh%?N7$%NwBoMqx)^Y zw=S>HvoU{iTv~jQ&b|Ol59w1U;Su$C`n{S)XD2VtOA1Lkv3$0dCE7aE_7NMkTVlC> zDPHc?3LNN0f4|#rGr0YZesl8pVcj7J-{rSv@`mU7?Uuc|F5R`;=H=1!nkVb;y!yP)ee!LMd$WDJI&*_p=K43}2D;mJbaZ9g8VCA!f8!s% zIPopNczo)Hmf?o`3-4OD?$$HU_)5zk`tw?X{%qc#^p1PK{^i6SfB2pC@44uzFTQ>H z-_73kiwhQf=jCKW+H?gKXg-Ok|EWK$5Zqq`kkBh7g=OK#0!m4sE85f$>} zyD-#Wm4>wD`m!Q1ay=kaNB_wBx&~Mik${-NuhECbNu{tr)R#wzTQd8$XR~crWV_q@ zcdy^qir?8bH%^$4--Nzw&vZ6&Th2ewNr#*XncLTq!Dti-)Znj$WF(vn zx7B^^17vU)j0l-^nf{Ccspw#g6BhirBbVDwaw880PDg78irGN1wy7J$gY4^fLvmBw zmX18+U;DOf??6Xiwrx8EMFvAD>q=YQ2@%#7Z0hdl?|=-rIop=*?kEO|l52f;ZlHa) z3%@=aL_!s${v37Oz<@+HA`ytPP zhu@O*>wOHng(VcW>10C|D0c7aXpcm!?&3VX1>$^dXD*)&>leT_)Q2uJaDie0W$})_ z>$1Bt&<$K@JEUqhY@iTeOSUU#WnG!;wx66{!Pi-|uYXMz+}z!+Xl~8+b!EDN!@4X7 zLVva_ldH+fxjdKK6aDRyE43t~#3+f5D%t)_8-~Kx9LR$q$jNexi`&?j8|aB9NQC@B zGg~-!OD0s{rpwDS`NnQ`fD3b&Wc$v??1U*e--!{{-R|$~a^+*@lnJjV6JXMHx=23T z56z%G>u0;$bi9KPWGMJo4zSXO5qbt@*M3yfY~?zlKu^&6Nn;M*T=%+ccZbs%BF$Lc z*49U*VlPG?JF0%+qQy&=E?d50Wu~RIExXIHX($V#1SP+$!IVmwC&cI$RjIi-3q7m9 zIb*y|m7Uf^ECJ;79F{Dx`S?#a7yswrKh=fSTw9jf`WFC5ZJidV^YH)m5Pb{ar|_S; z-5!Lw{Gf@!!+K#d{FY2U%k>(T9kK1Xt}NGF{_8IB>)?L|<;`Xo|EJ^sIrvX223Hic zy@Bnr+ztOY0yE+B<|e|3dudt@s)E@463~V$hxG>S#^1QJR zzP&p2bQD!S=*ewe9o-8$_B9Ve!EEcx43Yu*bC}PY^8+7 zNG-3qRb<~QXiKE1V(++d73rLlq>yUD7RR9wWDeLcGTKd~CfYzj zz$Jp;nduU>9?EVhdpIgG@?>duT-1PZDRPdy)={s3z@ya{B>@+!&7D23m?6hfhc%%& z&&lh5s3EPLnU1bkrzK9dG=p!N_bv)qhkS%^1+EEsA`e|G*9~3W@9coq)&`A(1TKa! z)%c-+mLwPmbT%#m`B6qYCWj)qDy!M zh~@_~J;ahevTuQ=+yV20&#+pWxcnH*ww-K$OTqlpoZXjc?Z>EprPxIZfg$TRDuq)f zRu0Xyzl^OQ5xEOaW{%bzQMKh{Y8o@UX*K0~^vP5eMKM&w$5udBrhoSWpxVqI$nu+; za6-#R_W+a)F_(>j;{*?pZ-&VjGKm}n^3s5O>+WpZK<8LRM@e2<44XSUx@gcH8{I_9 z2Ixq$B-XAusM@rt!Y-L!v~*cR!*%PoHI9S~XGYpD$Ix7`2n?ChSosO6AK@g zHLS6@tpgffM++#P<8T&g?B(jZcOVB^$WKw3n5EoUp)KcYx3}ps?9dWLC z(E>`Mq!t&W<%5R(63ZWBpibr0j>yw&v!aDkbj1_J53O(A6=EyPqP~#l?hJgAT>H(iBzb!)%)2$=?}eju!PYsxMnygd`4*iYT)=cncO&iwRNM0xs+= zs~z+xi)-PePG!`Q17pl>O*ph%y!4R)X>l!rm1tJVp>91yWu{q`qOvHBS}wrl!CBgMR~x@U9uF7OCQQ6btfKxvBVt|RkTigyK+B^l+S!&#dk z4KEwJ3e7dLkxHOSSA9+wRdP6@NJiBHEvE~W)!@2g%!~Ypn&bv@36B_;f^{p#cV`E6 zZ4QfPH!P=)DIBe!f{cjk%VNpf2fe~kPQ_l-M16%VXEx;ew#Z%+B&ah`Z^cr0tr!6| zb#KddVGj!$_i8Ic?6qrkw{1sXhQ^u=*(~g1tq?Go_AKqsJ91ZZ7YozTb|iOZw?plU zSc|XB?(5% zJlN9%93YV}gJ!y0vtd$KW}j@Mwe*n+Q#P3hka<1%&uZF|MpmbfL_iH!;AdS7$~;>(q8 z2RBFkwj7qOz?5{#bsM0_7u$NYNR?6+yIpN|{%&lMwq#-8wH4GAZUHqiWk;?*)9G_c zb=aZatlJgx*~^A)aX+R=QduyDv~v6|1|e?P!sHKgF*Z0I&l{G8yDdJ8YKx`V#0H*f z0}1nFct0b12JAsD1^oiyS1ER6yWQ9Ac65yFl%j9? zA$xqRV6gAc{dff!gP50z0diX;m0-nA2IKpge!pSD&Qsqr>!%+)^0hC0@c(VUp5z% zrHMUyjhr7S&)0;_x)FtK&-RBKY2_J^R-q)Bcd~0~8r+c0HbMe%fl`uJFgyVSvTt=t zG>R$7Zt+cSf5Azp5*Wo|tD3gAxSgm95H^WM$Rvmrr_GW~uE68fyeZrdzFM~-I3+N{ z_8v^S*mo-_a8zgkrG``juFZ-RT)Al^zJTWXMrnvkJzhgBEtDgJANn%(dTF0G(bx^#uzQ#OI2hk)1KJAmN44K{1mOx2qSO z5W5i44c%}G$YUQYqSWir9tev59EP%!3%{=Uam`CL->vyZ%~xyws^+sb!!<{0o~e1N z=3vd+YaXn5Q_bx)x76&d$<^$x$<(}|W=GAInvFH9YF5@PuDP&gPK{r4PR*G$r`6yb zbImWR|GWB!)!(oFcJ)72f35l})nBasO!aW}$E!b7{ekNDRzF_-uIfjtAF95$`tIu6 zs&A>@SDml!uI{LAtG==N+UgzEjn$j0*H^EqeqHtQ>P6M5>Uq_(s_Uw!Ri9lwsruCF z@zvw1k9oiFe&YSed&&D(?>pX$-amR@_x{HFviC*rv)*5LpYlHLeZ>0{?*rcZyeGXw z-n+cFdvEg|^xopV(Yw>T&D-x4yg{$u>+w3h-CowqcsF|2c~^Vey+-c}?{aUwx7xeZ zYw(tPOT2n7<<0lzcr!iUJJ&nMJKHrNkE!&m}&c`18c45}!zXEb)=VpC+D3yg%_riKi0p zNj#o-Eb-37I}(p3-kNwQaew08#G4X#C+?96~4)ky(Rou`v zod#>4E;so^qp&oO1WS!TkpwQ`E0)P)2<=%MhCrolIFJy|Uik&BGQ)?q7PIg)?_CTX zhzdre{Ej?Njq)r+B=R_AyH;9@ie+=FoB2e&#qSdx@nrfB2k!gk)HOGJ@;jY>`S%~0 z_Ny(oeeATkFaO!k=e=<7O~2A(7GbMU;;U#ars;J7G2ss;143f31a0hKB;z%emz(SgFHWgou(%ZUqNRK!ZVQKI)SV z{B|R<{`3hEnugYB5fZ_7;OkZq@0e7zb-%f8?a#>d1|j%AT+|l98NC7L%&{D|<9wxw>u^f~=ZGUH zZ0GvB2;|iDO?e)(D@F@y^2c>jF^P3nPAO951lgmcW8AKY(|3`1(ngjExsZqrKgZbL1Yx5QSg8Xzw{XK zD5Z`LXXlSg83aZGIfBP?$D?C9sjP z8~e*j+t{DA7&l6Bb*8ls7EjqfcL)1v?NY;8Nva9(N@)=LI8o4QXZ=SA_An0xekjyk zEM>IpC`7IZAPz#AO1T4~1Z!IpH1*}W+l`27=Xar^+$|Q18w1!_maN6dqOqy180iXG zhoymwbhiyk8@5gF6zFD6{tB9k9r(I|9vu0Gn0Fv~$jQzOW^_ZAw=8+No3+xGwu!XYMJb% z@TMIMK2g(pxc_AcDjHb8(+a$4-4#(_1~baF;nfM=AHl6KY{>P&D9@EY=1!;?7h=mI z@LORamTe2(xrjEXB5pgyf}U#a>DYhBaCu%V8Z{Xg-$Hd{G@y0Z+ZSz9zp5Q7UlmI0e?$+VX-yn>)ejX?7 zv4O^Ojh(n$g585ql^L!0QlJhn{iu-AC8HAzwW;5sguF|IC;i^_i=KENhc&bCHk1g zS2vEcuauZV=iq>knNm@Pk?_r4hW0_M9sn^U2!Vn zX;n(AjNYZ?@gP3D;0~wATMJj>xJrp`NBCWQi9jL4Vplu0rxdyk9YbACbWU7K#6CX@ z0G4tAUT@!Wf-hJ09I{1#Qnk({LqWH5K-M~Tkb85%>1bsd9c1`Kk06 zW64nmLwBpwQ8%rVR_;J?M4GKe#c??rS zvZVV+TAW$14yNMcZcC3^T_!A1wkTX{Mg=EQ5&f%VQY~ic8EC=6#7F1g^b;NsDe?sK zhdKgUhs)K>W<yr>UbR$tS+b^W$2n|AD2zpi=R>K&__H(j}Q+xpep z*X!w-Xes2mHd`CD>9Ho<)ki@%$U^lvS`9No?U8j;NDJ_B1;lZJ3zr)sK-cC5a3HQ5 z&0F9Oj zQH9Q6c!u@+omj0xSpgpql;&UEgd6KG-3SO>BJczEG424 zMB7dYN*_hgi!zc8*xeaCcG3?Dgrm-eVMm)jY9fm>sU+lX9K09C7x5`1u+bQ$hUDR$ zd?96sIeE2TmUA|k@u>e3{g|H z-1aIaZirarGF@=uASH(vW_8?Q0Pes*4_&&Pn;La7+29vBpg4@B5A77G-ghMe94DLt zQo8PqJpDl73-J^pp=&cIrQJQN)!Jys(M8!6Idw_4!O6>xu7NI4MQ&&Da41hOcIWj> zs4GQ>MN~FLhsLI&C4_lFbevbiqaRL8f}mrl$-O&agFCNg3+hskIx-~i_Jluxc_TE0 zSieg1K@2h5;DH4^VZ>)B!h^>+S?D+bBv7h%4MNdHt-*P(vZ%GYGks-IJ2LGS6WIn@-5p#BGhw&~2$PMN+O}gsn+1#WiH^%5 z2J{^dm63u1H_HT}<^f(T7IDd=ghUxyOyrFk6oVZ$Y{}`_J$oGGgr%tX=EHL*Pv9qU4J!jf$&Yk|+I$r^1oHujU>^XDioj?DA zV;80_T2OqYLDIuF8&b^4Y=`|ggL_H=dU zdU|2u8rVCyFSt3~Ee9Pi)^_1h1&-Pdi2xrcGdT-O%RpBTl+x_Uz7rPGbq6LW*pWM- zUh%=2jTlN;wy*An?Gm>D(7lo*Po5#X9V$w;iS|eK>-NrE&vtaWSxm!HETS>rr8}ZB zTPp)dXRpoS(J`@gZp-fClpBqJj(vG9j~8WtOY3en`^s!T-zSU26yaAxT*A}}OkErX z6^OH`JDso5-2^wFTSwWBBNtmo_Z;i^|&+OmeXGT790ct)ocDu1vkU;G_L0z&pE zx8YTt#_rBw1B{}oY!-iAkpoF^p4_Tt%H_~C_|l4SypYxXrWISxv2t^8JL=_ahk?#c zRJ1*t-NTj_OTG#h&@y)WfYBHWSFrQ8W%WYNnt^<C2D+iKAkn0OT?y0g1?b$X35aWI~2> zAl6NCfgAE2Cd=>|*(gtojVx|g7jN7~)B?IV{F_(kpV#qZd4Daw3DbRLe^8AY~!sARhBQ6BgpV*U;P^btA0I$|r z3{2wSuK-WxF)LFVY;Mt)kIJ7K^moz#>7E+w$#i$%nmq(lzdsQ#yg{E5)rfELVJd6z z{epiX{!F}Z;w}Cy^X5&wuwnzCw}bZe`|9iK7uGMTUtGVWerf%(`sMX2>Q^qTU$}7L zqJ@hWE?KyA;j)Fx7p_>i5+{roE?Tr`@uDS*mM&VhX!)WQi&ieKU%YVfB0ROZWbx9) z%N8$RykhanCG|@dE?Kl>@scG=mM&SgWciX6OI9weU%GJVqNR(ME?K&C>9VEEm#$d4 za#{Vdh07K#TfA(^vZc$GEnB{9#j=&l>z6NFzG(U4hI$( zdf%%0UgG;zKlG0#epdC1alee8I``sBuWY>UUGI8#;Y|;{?a-fm{LT+n*GyP;$)#8S z*YjUVoHcdX@~fNnzwZN2|Jl+PC*O6?Ti%s8?es~L&tJHtVf}_po3Cta%U=JHBdYaagLe_Yq{-@iJxeaGA1anXXg z^V08p?BL^19DeHkAOGa1t4}#KIlbYs^;bQ4_)CBJSj{=p&YOMdW#9Y3e;oVFXA}O+ z*>mPCUeR#*<}0>tPhWk_b=Tjxvo*VGPk!Gm```G)`<{O0+2=p-ba(Dk58ZfP!5f!I zjoURYzTl#vTc?j(SbJ__)`Zu37kKLur_UdHU-hiSti-(WOHR3R?SbVJ&Yn1a>c#6< zj%yu1q5f=d#<?}7oH}9IxCU=pP2$v=t(%rFK5cQ$MdK$P zn6vHm7mS~O_OvZ_{b-WlV(p*OX> z_VV!)hn~Fgy!EF{tUm3`hU$sSE=)`r`q=B*wx4?Wgozv0zvlAs+fUn6GjZrA8zxR4 zw{g?*ai@=;SiQ1l;(=x7)LcC7+^gfYi%z@k9lHij8T#}auV_8(_WCo*C$riOj<>jc;si}Z~xl-35ULSU~z4HdiCjv@dw^~ zPhyXE+PDcdXFRxb%hiwcdV&R-oCZ2x_aoV z7kHP>i1(z%O-ocASXDQv!HXYwe*UfhGW65)ufW;xs@o>5yW*0ezj$4BJdyTZv!v?4 z=@%y2PQ7~K&<9pbKkdTAgqo_;tB2lx+Y5YTvD-Y~A zbvkfaHvV*gPN*6B;_QjHSI6SxJg>UCs-}8;&4fu4&pqXwQ>UGF#_6ZlCe9c)dGeVP z&W=w>OpTv2Zd%Q2;^$V?o$ZgiU|i~yi{kZ(g;k5(| zX_L-xxOn}hrZ-%FBkoY#`@nmV z@B9B-yAyax#NN7pW#8O0}t*PLR4zK9M_C3$(t~qsG-#N+m{@$;W(fz-#`*~{V z{mh)|Wv5)a>Fhbz-}`0}K1bx5*65m@s|H4g>4YTBM8LPMB4046dm6uQOrAr~QWvtvOMfDDQFKm@rBF z;>ICETMq6%X)E#T2ATf3leZdJXTs$E@=YR|Gxsa~q%|k*Jy8Dsgd4A!vev-dl>=wL zwCT{4!NKx%*|R?!%II565b5~?M`qs(x^(_!DRs((F{*u|CuRk+cdQdcER_|L= zyp)MYvoNL1srWc8VBji0Q?w{e$A3G}JeFWLCLJVx@i3>-8-V+n20m{Y)V< zAU@+~GHPbOOyAHH^@vR0#K}W@_N^=C%Vg$H%ZN1&PR?vHF>~}lW`fwLzP0-X`m+O5 z#nlO!=^1hC``7Q=K>W|_%M7WRzR43a;$ECNrEjCmsr>_e6EhR~|0oWE*xDgEW1l)< zQeP%FbM8P+cras3oYJR@oy_#-MJNXL@1XYeRr@njGedHP{e6#`O6HLbmHzWHwysP# zwoe(zOw#*`ec}mEZ2Q`MgPF_v)>&<8W>aSHBi)R+~%R?y+O6KxRzq-cAkKnccUR`0@hrlN?p;8`@yt;(lfRz&2`TT4v3`%ycp9jFA}!kIK}%xOM3gO7j(B^ zygcmXNuN^fewl!KZFjCp@6t`?>DlXDF5hWb>3%y&_q?9nQHtV?vpvoY-Hz&Y-AnT) z-OIA*PnPug+Z(<0JT2C9P_N;0aSqY$HzJ91e~P+1U#MJGia*@o6&W+oGO~9TItRyEVn_toQomxb1q^r+r~~h#geX{E}ZNa*OU88 zx_*Y}*To;XaDB~g8R}CDucbc_Qm0m^UF#uOwC^s_q*irl3dE3;*aEi#dmy& zaq>K~$ueGlyVpNnUc9tB!+3dA{r9>1AM$c<{k!Zkyz03^&S% z((uUner39$_#@tSj4b=@KCFDXcYU%LklY{B^(o`jr;bzKQq+_C`1@l16MFN1CN7i5 z&6ax(E64Tfr-=UK{+OlLr}tM>QeFAppG^m_Icm&tK>b?@Pk?{JaPreeR6WjyzFA?=^$C&?UQQvNix-(Aw*wj4Ni{rghZ>)Um zh?mZh<#kctrFT7DKUjQ;)j_@bzT&tg&!0Dmda@0(Mc(~JIz>s>w- zY5n5p{rF)~pVjM6*MBQ&@*LxGN!PCyPVQ6b`i-JK);#iiLC2~;DeB4mkBQfd-x;|Ir z@{e57b$JXn8mVG^@i_G(MSb2F{YylxyEQmZMbwk`IqCJvmzc4(^Ab_tTKthqy5AQb zYkv8DY^?g-FsHWdh-4!U4K>7Hxz&5lCICljNQMLsE;-O z)~WjB{f3o=-6@p=#ie}A$R%BukF(_doUUIe>dE7DUGaLHJa**x=5E8vH{}(v$mhjm zJAS!8_I)m#JdW2BeaRem9yF{RDhG>2?sHO4KTn8F0@b{pW{`-hbtNLhSm; zlCI0=gQWhL=wGAPBQIVSPBQ6Fg*TU1#InBlvnsn{?B{>ylaW@XBOa$oZ*nP<$_L&2 z;Uh-hN6+e(M*dq{Z~B<8EBOtlkL1n<-Ah;W$)(!6l-JYi$@ltJKXUYVr$3+EBI?O| z9PzZgYHak`^i|I*>F1Z^^X5h3TNRSm$-Tu2=g1X{C0&>AZ<5D#y1q=*=XTqne{=D= zHdcMMs3)&q>3Qaj)4#o_C%09)f5&m=*;&++=el(NuH*FYk*dF!Iu7rNeM*i)x;`m& z9Mbi^)Nx4HFBqqOk*FufVY4N}Bj1rH593s^J<0p0b47ho@7T)cJuzftc|+7!?_GaQ zTqe(xCyRPA=Y8TyFF6kB`itY#KN_cg;)Kz83P+D_r+mC6pO4b@%To0NMSrqAPm4Qb zvOVegUgCj1R^3U}k4~+3i`4w-x|gcEhs^l5_xGi#?Rs2{+fMwEOS&$f*TRDs2xAfiac>kR4Wkqb?$Rhfa zCAkktmwJ6~iQ{oluOa<>(h=j6=ZoZ0wpEvR=Nm6?^zwPfj=oOF*M;PDW;an!-lIzlibj z{duzd|2`g{iuseDEy{KLZ;!|MCk?N9k0s~3LwFN;rMJ8woO}kBrD;n?KUYXE6rL-u z^p<79$#btP)r6DJVA8J$C$E9h!{R%k<@<+Z$q8?mKwLI=#M^&A?x*|52_iRA<1ZCX zAFn%w)9))@65b)zzxp!F7YNJe%VarHI6dDA;q?9G8uFvU>ErpfaC-gIPZ?hIUR6gzm3NKSvYylmHoq~;_dN8;az0VTgt-e+wV5vDzl|X;}F}DnDF!x0J6EPTs4?^6!L`=PGIS zwBc1hGnW2>aC-Ze3#a$z7UA^%{8e}_Ik2~Edph3V4irw`UM1o5_N)|6-+qq@r|%za z8o&A(*uOw{L9%jjxl}kk|IdWew_j5@{doAhaQgPoetUS;&xGW(^&Rl>Vv0O{e9jV1 zeik76FBeYF{{ZDL3#V_t>~cJwUlvZ^Ur!fKZ~v{r>F1BPgwywrtbu|zoe`G?%T zmBM?-E4?KaPVfKFS$O~WlCXSzlgs(yPx4%puHPx@gR(&^`=t8i^UxY2Rjlixmb})c z`{m_yZs3$+aO3!1a`mNOVEE0A3+AbHaC;NCrs$c$`JlU^wefM$d2aHoc zc$~WYdEHp^FCM2Ze_lCO|1sm#j~l0c;yCq^s88=69woiMvOd;&PaCJce4P3YJ(CWlu3a`TL`E{p+Hhy#G(vk51K374xLuPs~{{djA$} zinh;cW4^!4?ce>>FzGv^{cno?t>qxGWXBm-`AT=(czJE_f1i6_{`Yyj*T2uL|1jSF z58K!2jlW;)ck;gTeX+mE?f5%UPj0)WxV@6k`sw=9qMkfX)Aiqr`dIVaE$X^FsA4gW z82k1J7kBr2yj=Saxo>yJKXxv@zV!Ftu4Ty_w7y3P)I$3ym}`|L}*$EQv2lTJ>pKix0K%jH~=i``$f)W!T`-QL~} zz1!oK?qw_JS&UDfYmODOB%hgI5XT{@A1$6-l6_9s7m4~ty)`fY0UoCdg_BISSoHaw z^V>v!`t{^7;pF*Hj(=7-dG8|qSK;JmOVaO)?M)w_)qgm8JIQ>uaCeWT#NV$8r{5o+ zc>d_~vdpjf((tOsowPyQzg+aE*LS9H@>rJr=Lv5ruk@Dkg5gzhu| z?iBs$a%+5k+R+FKexgjS?%h$6eq}@ zzjvJaW8>7{7^nWhIQ7rQsVhf{Ulu)4d}EdT%_2qoCgRf5MouB5ESA6Dr^pk}fAhp+ z7L8mHzb|&=@$Tq#_q6VH@r#V|dzQrSxryH>Ty*lW;)Dt(93#G$an(uKMn=mn@ryR% z>#Uq5^31ENisEcDqS*Zn=2b=cd(P>a_+1+Di-clw@g?F%Em|rzI@u)gYm42@5SuQ( zfANH)lJ9(4)calQkw&=_;#3dfx5Gzxva?ux6J9dK@#5FLpf7Cez*6)O6-xVAgoXlV9 zJ-H{Ylg$M<-r5oEn`m=abcwwX^XzWu0y(=o=5=!NgO+6bi@hJbBzC`yW?uG$Q^R-BJ6j_RdR#eAsZLt zd{!2j~X5Mb3$ssu=XEWV5{>l7BvO}(r1G3(a^OfZXzSQxr zOhjw)AGV}&SN=ollznoo_itj8?G4B=IV*m(DLtQ-Mcd>W**|)F)xzM=P`H4b#m|m z_P5AJgn6ADk@Xj`-zPW8+Dq79`6D_YD=%Xnl4El2PuL%jl|N%%Ah%w@Ty3F?Wc^jl z3*-t}dkyLj#9_Q*AIog9-3lX3nk*_nd5EB_&W>iO2oqO0Wg49Zs{uZu3NhmJQu>od{WP0{Y5 z=q6b|4D%w{A(zOxui<#@aI{JG$oki@zf5kDtBbJTu+bhlBG(pUzk39_MvlqVBe6du ztMVVHr0x_Ikuv_;mB!@NMQknQ8KKO|>Qz}zHTWQXjYh~slEx^WU(U5XCnKd49@ z5C3$uy&PS-6djR`%P_adF1bw3S8;svXXu>#1>Ds3mdSN;gB+2Ym*afq73dndO%ATa z{$dSXCo3y4&yfpci(I@4$A@J7YRp}7{u<0%WK*2zC4GD=dly!$PwAN1^e4%?^euXa=wnaLoSmmWbZZ{ z-yvJKWA2mPJ22ONi7t^F}Hp&wwDIe#YR@mc6>8EuhkXJg(VXIEg}BzMT> zIoRL%4q87K?U3`|#oYS=y7@zN?tHX)0lI!6+N_`(WdBE$liL?zp1lN}CmTP<+#^S1 z^>Xaj$vJXN_OHP4W)0oB9^LZMl^fAMxlPt@!hWTWw#jvJi`*frx8Zytxq3V1b#jMn z+=2a_U!sjW(cwMln5^83c{N0bWc4A;vk#+Pa!6Jl!G4=uC%4EQvifVBFJ%7)^Y~G; z^EkRhZvK|?-=X6t(S@hbRdSOYlRISfX`HY047x^+$%SXJ-z5j+`g7PHk+tVBZ$;=f z*?bA}m|S`p^BOrOH{QU0|4nrE@8~wU@FC_txkEPof&C`ANcPAvIsXyPr*z2wLX3_5F)xura&tQNcgSWI^Cr1NHfK;jxkENrqkeLSYz||8du?=a z9dwNxk@M?fzef(pO>&D|T@UArXQ3;bqif{$7MNGJM8~ty9da>8Ik`O#^W6662Dwen z&&U4a0<=vIcA$Jmbhryz+ZCPt657}uo!tXnCl?EtJLEdKMJ{|9$NS_C+1MNVO>&X! zkz;cHD>$FB58B%ot?!2}lbd8^f9%)D2Dx+q_Nxb>9dba9$;wx8e3o2381u+Nx5@cK zFn7rH!!U1dlPlzqY@CYYO|nN0$i)(l zualM2FfWqpWaV_~C)df!8Q7mA7swXbBgf?Yw{iXwIU*a&vELy#$l96M-(sIdd6|4R zc?J0#bm_xkb)ijQufLxdih9xkT<@Sf+ za+}<`3deWI=GB>;cBOI@j9decIzlh^I*T_pF}KM+IU?6z z!SUG^+9p@XJ~<$}ui|{hYiN_~kppt`bsQg)^KW9Vw9y*bCRfPXzi@nxY?B-07TNe1 z=d;MpCzzMX4RVKE_zcI}_Z`ee+D zWP1wcC2~k^la*;WUL(8HF^^}UmDSJ%a*5m+#{L%BSRHeV?5%-$jU1D;HL<_27TPBJ z)`k{IlnIE4mrO*<}I?Z0p`j~v`02|%v`rZ5HMQvc4(i zd2*RtCp!j?FOwVO4!OBGj*rQ?Eikvq{%p)cvN{LzJUN@g+#tK;8o4wV$5+S^S=|Qv zt?kfda)aC<7w6-6hg>JO$l4A#K1VK*eR8-DjyGMjMXr&XRLvH^7$E!a?7s+L^bw2jHf0lRdo0oT7MnwlJjq1-XI%q zVqPNG$=SEC-zHbcJ~<$}f5G|G7@Z@R$d$ihzy3D5K(3G*?_htMoPQT{>piqf4#+Xt zdLPG^$qjOc9Q-$qZ;_1;F}KK-e_)>NpbfH1u9200;rJ%m_zZK89Ff(}v0o?W$T3;% zp8%g{ngi&VtPEmq51~VHR>j;TTV#i_!ubbczjIvrgn$7Cgo{pJj`wK}@B zCc3>Ay09*~vpzbz0oo#aWLwAn`i5w8W3)xCk(=b=EF51aE1P1TBNxaPIU?sb!}&aN z(ZD<;>ziZllJi?&9+LGfF?Y%NtuPPC`qr4cc&B6Xc4sCCPE|EiWo7~tI z$G6DFJj^X}Z9e85a?7NgZ0>@&OD^n+xlQ)T5!u=e$E$mwjXlvGIU?8g!v1II}?{VYEvQ$?EFZUnE!AYhZt{HoCn& zI-ZHHZj4rEp_^Nvi(8>9Tch1M=*B#BVSBVcAMGtbhhIQvO>}z~w6hT1+#T)jfo>Gg z+Ft1FSJ3`JX!WaTi|mnW!OwQ(T$DJg-y`jEVQ#3y0taho`Vi^=-M{uXg=ClfL3=zmv=%JzKC{AbbcY)`wBXD zB)UWn$erV`-#iIjBe%)=QtZ!@3uNVF?2pbvTNj`MvU(xrd2*3#leG$t4=zKim!q|7 z(T$tY&AZUKU!lw7I=MlP$dv%+%Y|s;3A7%e{Ws9{|3YW~hPKHSvQG}k?t3_2_9L`9 zAilUoEZwTOG94YRiB>eUz7E?u53!NZtiq-W8qS9c}E5E|D8# z?JL;dAshQregL|35ZeAK+O^OjSv>^vBDr)Z=DEYsHTlIxsmF(Aqq9e#ZE|4==Kcw2 z^+dEq_Q*AIo$Rzxg!U{R29F7OgyoEp ze$44Zd;Mr_09_&LgP7OJ<^;@}WP1qnHo2@~o}GyH$>t=?n`C=3=52C$3g+3V=qfqR zV(zbo?vM*>VqPV;HO%vCqXV+C4(9oF(JgXqeawq9(alZJ%BE=5KxX#2(Q!@ZvFzT-H3L`0a?8X`z><$7RyMzTuyj;=p} zE*R=>{RI2X-nSYj@6Stp-ES67To^!i$krg{F1bvOCt!bW2%VpZu9Nl2 zn8)N`3g*qJ=x{n(&7zCsD!IKH_P2-8`PI>Na=0eu&e~{oJ+!s~+L?)N>1bzTbg&7! zISXCb6kXa3ts3YuS=}7-;+E*`SVo{xDf`{V{WCad43^^*%^ zhwPDSU3u4m$iEx==;iWS8vUg#978N!IVj z{vx?bZajef9dhnL%=HjmBzxrcL)foBjJC+$Z!izYZF0GR{dICocAvri8aX0Yp2Pl- z+#yFVVt?%=bd#+95%ZW_cp38&xlYdi1N$rFh}`U8zxGdb@Cn-c3>}g6&oR#{Q{nwt zm_e(3=w?5ni3k*_?!VI0db&h0c?UWSd+eyEAb%G#=E}Y3kZj$Lx%U8Cdk9^B7;QX)j(&q~JciCT&=$E# zu04+Zh2NsR-=mc$(Y2@0)h4?6G`jsP+IbFbzkt>vbm=8@NLK%dd713JjCu4Ybmhoxk)aqhvUr+(6uem%2wzixlFE-eR6$koKKsL z_Q~~aFn8vm8)R)e%nM|j?2=2{s|D$l-h@xkC2I z`MEg0NG_2pc?Meh5UqF6tu`^_pk_cL^XY?C`zVt=-VHpw2@ zT8aG?a{emJi{vudCwIv4)i|GW4LV1*$R0T&*RRF-I^_Cwm^ZIS8$Q}1>o-tNZjy~( zP(QgsHgClKIyolmH(`HF&fQEoIr|{y7P(4plGPB$o8%I?PHvI257B&Nms}$^$;!hx zUyf{(E98(IleI^1{sOr~_Q?@h{WZ>)Cp+XSIV8vA>~C=X9Jxq#$rW;)+$6Wj>Z7=R zgIpjxWRL8V8|0X*K1S;&7sxibOs#M-z3N64!QCKj&G5TCoy-)b#j}Wdy2-BeR7MeHF12A z?2$uqhn#yF=X1z4azxHPgX0V2GC3f($;KaWKAT)6H_7U=I6hBy$W?Mkj>*~QXnwLy z_Q-W|L{^^1`3-WBTq4)V4RV{Ty@2a8$quGoZlc9$t7})+<6=4^FBal|A8)%%O7E$?VyX~);}>< zK1FNf`e&Fo$m+mq@bd%)|5=jr|U}OpeHHvicRA&mz0z`u^D8AS(x8UL-r@ zDmf&p2jYA>*&&z7KDk5A9)$D9Uq$POqQk?`=HY1P>*)Mqv`4Oy%_FeCO0JU|WbH^C zpCcERU|wM#jk$U(S|{hoHaY(d9B&+lE|SY+pWG&^-^BSevbhv<`xJDETqifl9kO;R z&S#T-vU(===g0+eh3u2Hvv9s5xk_%5W3pPt`3!QI9FUvj?AbIQxkJvb!2XaNk+pNM zzex7TA-PS~zeDqp%j7z_Mb4g!^On9h; z4%s97Q*Hq^pkuP~Bh0g8SlL3UT-{J~Y|+|}qZxkc8l!G4z< zl3UkezkMA#e?7WPj>vf*`$MvN1Lk?Matr3UThSeIwvKs7wr;~*yB%F6XYatgO*Vds zc|dNGt9N35=`OVKE3_7%J#tL8euw=Pa`_3&BXadA%-dw;Im~Tx?FG!u7tz*B=zyI6 zBj#1I_A=%rvhpX)Epqb}%(HK!Epmw*kd=3EeDPg$lbri6%**5!+58*!m&o<^Ft^`F zhvW{~_yGGYa{EKfwSS;Za*M2gg#CGPkz67Bz81ouA`w8Y{a_}kU#%Ji< z=ja-_t_;J^lk^Na*N3jL`!UZBkO$FaaxjFsp`zPlV$?5 zw@)MI$OW=ZE|Du_pB$1Sa+|EK#O>9|d2*5LkX>?#Tqak^HL_2xlN;m~xkJugh5Kue zO|nIH$sV~z4#-V%OjfSO?bFCPa)E4WQ**QJ#vj4kVA4rZj;p;aC>#KK{m++ za*=G2ZL&jl$t7}`TqW1YKDkbAkelR~to#CxmrB;j2H7NAWS8ubt7M-XkQ?NP9Fsd_ z^+w!Zjckzfs{&LsoC5{U;mbJh?!&$PT$g_Q+MTPY%cpazu{F9kO~0?LXNd=g9@KMRv#~vPZ6x zeR4ogB+1#a)+$eY5&OvIZrN-EwV!{ zkv(#i?2`j>gB+1#a)+$mM*B}T$a!*sY>{2EN3M|ra+4gBmD_3i$vJX?Y?Djm3fU)z zf}7RNOs6&a+O>sH^?n=hn)Q-Zm&VklM7^v6thn&5O_K%z+=g9@KO)ilum!la;$^|H(SpBp1mxxkN6LE95#kBuC^HIVQKs>OHu>Iyp}+kS(%9E|EQQ zmF$xPa)TU^V{(VA-i!OIkqvU5Tp(Lyhg>3iCM);R{*iO!0@)@jy?-Al zzx5;|{@81e{PPAyx?lY9KSpO~$u4D8Ufve1e*x|8jcy-|E}e#sZb28atp!1}zM2f@}C(cuB;&ezf5 z;S*rIyArM6g|7SoU4I2_P8x#wqJ7YX_+I|cj40OLKC%HfAyQ7^I=-Tz@@}JQ; zr~Cbx$$XV-(XIQ?cJKRHlm1AP*G6w|eGWP7a(6AXHMM*GtR%0jjjrBJ9o)0MLZ|#V#UEKYBz9jbsy8j+4v6_0m8ae)C@9NR# z5BW%o8|dP1(fOI9&j+&K*c9#i=+>{$N(1euo-gEl)rF&vf9Ys9w7m#jJPKX=0XqI6 zx^O-^{1Mu}30=PfZQhC2?nRrs%dPI-U*xsM9%yGzbo&r=<7?>7BD8k|T3doHAC2xf z==O2w=2CRw6twv*boFAiaw$6d6Y>@4(v|4!HRz&`Zry;c-H5K-O1=$Uy#sCEh1Tyz zEBB)7_o1B!(0Yh2J&A5Tg)Tgg)?Y;1ub|D>(c0h9t&h>=Pti_h^z~0B)&M%1j4n+@ zE5qp4>gd{!91~qMNhO`OVO!&C&4|=x`3&n2WA#gLbz^J9%_&N3?Yky0a8r z{ythgAMIX%ZmmRHSEGy9qT`#;#aqyBoBRQ~`61f)CptTG^!?1p{bLh!X7D;M zadsYVPp)_V=Onj!=YLMzS&02w?|jZlZXSlY(>s6js=Rmp=EPd>{LP7j-uasow@%0T zl(W$8Ib;vr?45r(nJ;?@=DFVamXo~LJKu8RM(_N}iT$f_yw^Lwa*{i}^D8H=_Rg=I zIDa>e&#oMO|0VAaF4-rSuf~4+TC{r|+PWSc`RM!&XqT+sh5^Pqqx*SUT0WC_myY(!M{+ScnoBoYqq+Q~kz4NQQOkGcm1U!r@4V|XM#qo5)1JL-Nokof z`>4}SIChjjvu*PeEhLTDzi^^MEA1AM~I#iR5e*p1tocsU) literal 0 HcmV?d00001 From 490ea01eb23a85f1c29d174353e2bddd0d341462 Mon Sep 17 00:00:00 2001 From: defi0x1 <34453681+defi0x1@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:09:44 +0700 Subject: [PATCH 2/4] update changelog, pump version (#9) --- CHANGELOG.md | 34 +++++++++++++++++++++++++ Cargo.lock | 2 +- programs/dynamic-fee-sharing/Cargo.toml | 2 +- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f4d9f32 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,34 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +### Changed + +### Deprecated + +### Removed + +### Fixed + +### Security + +### Breaking Changes + +## dynamic-fee-sharing [0.1.1] [PR #8](https://github.com/MeteoraAg/dynamic-fee-sharing/pull/8) + +### Added +- Add new field `fee_vault_type` in `FeeVault` to distinguish between PDA-derived and keypair-derived fee vaults. +- Permissionless Funding Endpoints (supporting PDA account fee vaults): + - New endpoint `ix_funding_by_claim_damm_v2` allows funding by claiming Damm-V2 position fee. + - New endpoint `ix_funding_by_claim_dbc_creator_surplus` allows funding by claiming DBC creator surplus. + - New endpoint `ix_funding_by_claim_dbc_partner_surplus` allows funding by claiming DBC partner surplus. + - New endpoint `ix_funding_by_claim_dbc_creator_trading_fee` allows funding by claiming DBC creator trading fee. + - New endpoint `ix_funding_by_claim_dbc_partner_trading_fee` allows funding by claiming DBC partner trading fee. + diff --git a/Cargo.lock b/Cargo.lock index eac4fea..2fd7928 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -847,7 +847,7 @@ dependencies = [ [[package]] name = "dynamic-fee-sharing" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anchor-lang", "anchor-spl", diff --git a/programs/dynamic-fee-sharing/Cargo.toml b/programs/dynamic-fee-sharing/Cargo.toml index 8fee9a2..b7d7eed 100644 --- a/programs/dynamic-fee-sharing/Cargo.toml +++ b/programs/dynamic-fee-sharing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dynamic-fee-sharing" -version = "0.1.0" +version = "0.1.1" description = "Created with Anchor" edition = "2021" From af43a93095a75d8c29d9c169283db156b4a22222 Mon Sep 17 00:00:00 2001 From: andrewsource147 <31321699+andrewsource147@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:31:16 +0700 Subject: [PATCH 3/4] Z 7 (#11) * refactor, fix issue * fix test (#12) * fix test * migration fee test * update changelog * remove hardcode program id --------- Co-authored-by: defi0x1 <34453681+defi0x1@users.noreply.github.com> --- CHANGELOG.md | 7 +- programs/dynamic-fee-sharing/src/constants.rs | 36 + programs/dynamic-fee-sharing/src/error.rs | 8 +- programs/dynamic-fee-sharing/src/event.rs | 6 +- .../instructions/ix_fund_by_claiming_fee.rs | 113 +++ .../src/instructions/ix_fund_fee.rs | 6 +- .../ix_funding_by_claim_damm_v2.rs | 143 ---- ...ix_funding_by_claim_dbc_creator_surplus.rs | 125 ---- ...unding_by_claim_dbc_creator_trading_fee.rs | 136 ---- ...ix_funding_by_claim_dbc_partner_surplus.rs | 125 ---- ...unding_by_claim_dbc_partner_trading_fee.rs | 139 ---- .../src/instructions/mod.rs | 12 +- programs/dynamic-fee-sharing/src/lib.rs | 29 +- .../src/state/fee_vault.rs | 17 +- tests/claim_damm_v2.test.ts | 91 ++- tests/claim_dbc_creator_trading_fee.test.ts | 92 ++- tests/common/damm_v2.ts | 45 +- tests/common/dbc.ts | 6 +- tests/common/dfs.ts | 644 ++++++++++++++---- tests/common/index.ts | 1 + tests/common/svm.ts | 4 +- 21 files changed, 905 insertions(+), 880 deletions(-) create mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs delete mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs delete mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs delete mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs delete mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs delete mode 100644 programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index f4d9f32..f9f71e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,10 +25,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Add new field `fee_vault_type` in `FeeVault` to distinguish between PDA-derived and keypair-derived fee vaults. -- Permissionless Funding Endpoints (supporting PDA account fee vaults): - - New endpoint `ix_funding_by_claim_damm_v2` allows funding by claiming Damm-V2 position fee. - - New endpoint `ix_funding_by_claim_dbc_creator_surplus` allows funding by claiming DBC creator surplus. - - New endpoint `ix_funding_by_claim_dbc_partner_surplus` allows funding by claiming DBC partner surplus. - - New endpoint `ix_funding_by_claim_dbc_creator_trading_fee` allows funding by claiming DBC creator trading fee. - - New endpoint `ix_funding_by_claim_dbc_partner_trading_fee` allows funding by claiming DBC partner trading fee. +- Add new endpoint `fund_by_claiming_fee`, that allow share holder in fee vault to claim fees from whitelisted endpoints of DAMM-v2 or Dynamic Bonding Curve diff --git a/programs/dynamic-fee-sharing/src/constants.rs b/programs/dynamic-fee-sharing/src/constants.rs index b91845d..182beee 100644 --- a/programs/dynamic-fee-sharing/src/constants.rs +++ b/programs/dynamic-fee-sharing/src/constants.rs @@ -1,3 +1,6 @@ +use anchor_lang::prelude::Pubkey; +use anchor_lang::Discriminator; + pub const MAX_USER: usize = 5; pub const PRECISION_SCALE: u8 = 64; @@ -6,3 +9,36 @@ pub mod seeds { pub const FEE_VAULT_AUTHORITY_PREFIX: &[u8] = b"fee_vault_authority"; pub const TOKEN_VAULT_PREFIX: &[u8] = b"token_vault"; } + +pub static WHITELISTED_ACTIONS: [(Pubkey, &[u8]); 7] = [ + // damm v2 + ( + damm_v2::ID, + damm_v2::client::args::ClaimPositionFee::DISCRIMINATOR, + ), + ( + damm_v2::ID, + damm_v2::client::args::ClaimReward::DISCRIMINATOR, + ), + // DBC + ( + dynamic_bonding_curve::ID, + dynamic_bonding_curve::client::args::CreatorWithdrawSurplus::DISCRIMINATOR, + ), + ( + dynamic_bonding_curve::ID, + dynamic_bonding_curve::client::args::ClaimCreatorTradingFee::DISCRIMINATOR, + ), + ( + dynamic_bonding_curve::ID, + dynamic_bonding_curve::client::args::PartnerWithdrawSurplus::DISCRIMINATOR, + ), + ( + dynamic_bonding_curve::ID, + dynamic_bonding_curve::client::args::ClaimTradingFee::DISCRIMINATOR, + ), + ( + dynamic_bonding_curve::ID, + dynamic_bonding_curve::client::args::WithdrawMigrationFee::DISCRIMINATOR, + ), +]; diff --git a/programs/dynamic-fee-sharing/src/error.rs b/programs/dynamic-fee-sharing/src/error.rs index 6908be3..06f8d0e 100644 --- a/programs/dynamic-fee-sharing/src/error.rs +++ b/programs/dynamic-fee-sharing/src/error.rs @@ -29,9 +29,9 @@ pub enum FeeVaultError { #[msg("Invalid fee vault")] InvalidFeeVault, - #[msg("Invalid dammv2 pool")] - InvalidDammv2Pool, + #[msg("Invalid signer")] + InvalidSigner, - #[msg("Invalid dammv2 pool")] - InvalidDbcPool, + #[msg("Invalid action")] + InvalidAction, } diff --git a/programs/dynamic-fee-sharing/src/event.rs b/programs/dynamic-fee-sharing/src/event.rs index 96f9e88..b75bde8 100644 --- a/programs/dynamic-fee-sharing/src/event.rs +++ b/programs/dynamic-fee-sharing/src/event.rs @@ -1,6 +1,6 @@ use anchor_lang::prelude::*; -use crate::{state::FundingType, InitializeFeeVaultParameters}; +use crate::InitializeFeeVaultParameters; #[event] pub struct EvtInitializeFeeVault { @@ -13,11 +13,11 @@ pub struct EvtInitializeFeeVault { #[event] pub struct EvtFundFee { - pub funding_type: FundingType, + pub source_program: Pubkey, pub fee_vault: Pubkey, - pub funder: Pubkey, pub funded_amount: u64, pub fee_per_share: u128, + pub payload: Vec, } #[event] diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs new file mode 100644 index 0000000..401520e --- /dev/null +++ b/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs @@ -0,0 +1,113 @@ +use crate::constants::WHITELISTED_ACTIONS; +use crate::event::EvtFundFee; +use crate::state::FeeVault; +use crate::{error::FeeVaultError, math::SafeMath}; +use anchor_lang::prelude::*; +use anchor_lang::solana_program::{instruction::Instruction, program::invoke_signed}; +use anchor_spl::token_interface::TokenAccount; + +#[event_cpi] +#[derive(Accounts)] +pub struct FundByClaimingFeeCtx<'info> { + #[account(mut, has_one = token_vault)] + pub fee_vault: AccountLoader<'info, FeeVault>, + + #[account(mut)] + pub token_vault: Box>, + + /// signer + pub signer: Signer<'info>, + + /// CHECK:: source program + pub source_program: UncheckedAccount<'info>, +} + +pub fn is_support_action(source_program: &Pubkey, discriminator: &[u8]) -> bool { + for &(program, disc) in WHITELISTED_ACTIONS.iter() { + if program.eq(source_program) && disc.eq(discriminator) { + return true; + } + } + false +} + +pub fn handle_fund_by_claiming_fee( + ctx: Context, + payload: Vec, +) -> Result<()> { + let discriminator = &payload[..8]; // first 8 bytes is discriminator + require!( + is_support_action(ctx.accounts.source_program.key, discriminator), + FeeVaultError::InvalidAction + ); + + let fee_vault = ctx.accounts.fee_vault.load()?; + + require!( + fee_vault.is_share_holder(ctx.accounts.signer.key), + FeeVaultError::InvalidSigner + ); + + // support fee vault type is pda account + require!( + fee_vault.fee_vault_type == 1, + FeeVaultError::InvalidFeeVault + ); + + let before_token_vault_balance = ctx.accounts.token_vault.amount; + + let accounts: Vec = ctx + .remaining_accounts + .iter() + .map(|acc| { + let is_signer = acc.key == &ctx.accounts.fee_vault.key(); + AccountMeta { + pubkey: *acc.key, + is_signer: is_signer, + is_writable: acc.is_writable, + } + }) + .collect(); + + let account_infos: Vec = ctx + .remaining_accounts + .iter() + .map(|acc| AccountInfo { ..acc.clone() }) + .collect(); + // invoke instruction to amm + let base = fee_vault.base; + let token_mint = fee_vault.token_mint; + let fee_vault_bump = fee_vault.fee_vault_bump; + let signer_seeds = fee_vault_seeds!(base, token_mint, fee_vault_bump); + drop(fee_vault); + + invoke_signed( + &Instruction { + program_id: ctx.accounts.source_program.key(), + accounts, + data: payload.clone(), + }, + &account_infos, + &[signer_seeds], + )?; + + ctx.accounts.token_vault.reload()?; + + let after_token_vault_balance = ctx.accounts.token_vault.amount; + + let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; + + if claimed_amount > 0 { + let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; + fee_vault.fund_fee(claimed_amount)?; + + emit_cpi!(EvtFundFee { + source_program: ctx.accounts.source_program.key(), + fee_vault: ctx.accounts.fee_vault.key(), + payload, + funded_amount: claimed_amount, + fee_per_share: fee_vault.fee_per_share, + }); + } + Ok(()) +} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs index 58f02a7..df2695e 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_fund_fee.rs @@ -3,7 +3,7 @@ use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface}; use crate::error::FeeVaultError; use crate::event::EvtFundFee; -use crate::state::{FeeVault, FundingType}; +use crate::state::FeeVault; use crate::utils::token::{calculate_transfer_fee_excluded_amount, transfer_from_user}; #[event_cpi] @@ -46,9 +46,9 @@ pub fn handle_fund_fee(ctx: Context, max_amount: u64) -> Result<()> )?; emit_cpi!(EvtFundFee { - funding_type: FundingType::Direct, + source_program: Pubkey::default(), fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.funder.key(), + payload: vec![], funded_amount: excluded_transfer_fee_amount, fee_per_share: fee_vault.fee_per_share }); diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs deleted file mode 100644 index 0cb5024..0000000 --- a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_damm_v2.rs +++ /dev/null @@ -1,143 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenAccount; -use damm_v2::accounts::Pool; - -use crate::{ - error::FeeVaultError, - event::EvtFundFee, - math::SafeMath, - state::{FeeVault, FundingType}, -}; - -#[event_cpi] -#[derive(Accounts)] -pub struct FundingByClaimDammv2FeeCtx<'info> { - #[account(mut)] - pub fee_vault: AccountLoader<'info, FeeVault>, - - pub pool: AccountLoader<'info, Pool>, - - /// CHECK: pool - #[account(mut)] - pub position: UncheckedAccount<'info>, - - /// CHECK: - /// The token account for nft - pub position_nft_account: UncheckedAccount<'info>, - - /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account - #[account(mut)] - pub token_a_account: UncheckedAccount<'info>, - - /// The user token b account - #[account(mut)] - pub token_b_account: Box>, - - /// CHECK: - /// The vault token account for input token - #[account(mut)] - pub token_a_vault: UncheckedAccount<'info>, - - /// CHECK: - /// The vault token account for output token - #[account(mut)] - pub token_b_vault: UncheckedAccount<'info>, - - /// CHECK: - /// The mint of token a - pub token_a_mint: UncheckedAccount<'info>, - - /// CHECK: - /// The mint of token b - pub token_b_mint: UncheckedAccount<'info>, - - /// CHECK: Token a program - pub token_a_program: UncheckedAccount<'info>, - - /// CHECK: Token b program - pub token_b_program: UncheckedAccount<'info>, - - /// CHECK: dammv2 pool authority - pub dammv2_pool_authority: UncheckedAccount<'info>, - - /// CHECK: dammv2 program - #[account(address = damm_v2::ID)] - pub dammv2_program: UncheckedAccount<'info>, - /// CHECK: dammv2 authority - pub dammv2_event_authority: UncheckedAccount<'info>, -} - -pub fn handle_funding_by_claim_dammv2_fee(ctx: Context) -> Result<()> { - let pool = ctx.accounts.pool.load()?; - // support collect fee mode is 1 (only token B) - require!(pool.collect_fee_mode == 1, FeeVaultError::InvalidDammv2Pool); - - let fee_vault = ctx.accounts.fee_vault.load()?; - - require!( - fee_vault - .token_vault - .eq(&ctx.accounts.token_b_account.key()) - && fee_vault.token_mint.eq(&ctx.accounts.token_b_mint.key()), - FeeVaultError::InvalidFeeVault - ); - - // support fee vault type is pda account - require!( - fee_vault.fee_vault_type == 1, - FeeVaultError::InvalidFeeVault - ); - - let before_token_vault_balance = ctx.accounts.token_b_account.amount; - - let signer_seeds = fee_vault_seeds!( - fee_vault.base, - fee_vault.token_mint, - fee_vault.fee_vault_bump - ); - - damm_v2::cpi::claim_position_fee(CpiContext::new_with_signer( - ctx.accounts.dammv2_program.to_account_info(), - damm_v2::cpi::accounts::ClaimPositionFee { - pool_authority: ctx.accounts.dammv2_pool_authority.to_account_info(), - pool: ctx.accounts.pool.to_account_info(), - position: ctx.accounts.position.to_account_info(), - token_a_account: ctx.accounts.token_a_account.to_account_info(), - token_b_account: ctx.accounts.token_b_account.to_account_info(), - token_a_vault: ctx.accounts.token_a_vault.to_account_info(), - token_b_vault: ctx.accounts.token_b_vault.to_account_info(), - token_a_program: ctx.accounts.token_a_program.to_account_info(), - token_b_program: ctx.accounts.token_b_program.to_account_info(), - token_a_mint: ctx.accounts.token_a_mint.to_account_info(), - token_b_mint: ctx.accounts.token_b_mint.to_account_info(), - position_nft_account: ctx.accounts.position_nft_account.to_account_info(), - owner: ctx.accounts.fee_vault.to_account_info(), - event_authority: ctx.accounts.dammv2_event_authority.to_account_info(), - program: ctx.accounts.dammv2_program.to_account_info(), - }, - &[signer_seeds], - ))?; - - ctx.accounts.token_b_account.reload()?; - - let after_token_vault_balance = ctx.accounts.token_b_account.amount; - - let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; - - drop(fee_vault); - - if claimed_amount > 0 { - let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; - fee_vault.fund_fee(claimed_amount)?; - - emit_cpi!(EvtFundFee { - funding_type: FundingType::ClaimDammV2, - fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.pool.key(), - funded_amount: claimed_amount, - fee_per_share: fee_vault.fee_per_share, - }); - } - - Ok(()) -} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs deleted file mode 100644 index b2f81df..0000000 --- a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_surplus.rs +++ /dev/null @@ -1,125 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenAccount; -use dynamic_bonding_curve::accounts::VirtualPool; - -use crate::{ - error::FeeVaultError, - event::EvtFundFee, - math::SafeMath, - state::{FeeVault, FundingType}, -}; - -#[event_cpi] -#[derive(Accounts)] -pub struct FundingByClaimDbcCreatorSurplusCtx<'info> { - #[account(mut)] - pub fee_vault: AccountLoader<'info, FeeVault>, - - /// CHECK: The pool config - pub config: UncheckedAccount<'info>, - - /// The dbc virtual pool - #[account(mut)] - pub pool: AccountLoader<'info, VirtualPool>, - - /// The treasury token b account - #[account(mut)] - pub token_quote_account: Box>, - - /// CHECK: The vault token account for quote token - #[account(mut)] - pub quote_vault: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub quote_mint: UncheckedAccount<'info>, - - /// CHECK: Token base program - pub token_base_program: UncheckedAccount<'info>, - - /// CHECK: Token quote program - pub token_quote_program: UncheckedAccount<'info>, - - /// CHECK: dbc pool authority - pub dbc_pool_authority: UncheckedAccount<'info>, - - /// CHECK: dbc program - #[account(address = dynamic_bonding_curve::ID)] - pub dbc_program: UncheckedAccount<'info>, - /// CHECK: dbc event authority - pub dbc_event_authority: UncheckedAccount<'info>, -} - -pub fn handle_funding_by_claim_dbc_creator_surplus( - ctx: Context, -) -> Result<()> { - let virtual_pool = ctx.accounts.pool.load()?; - // creator surplus has been withdraw - if virtual_pool.is_creator_withdraw_surplus == 1 { - return Ok(()); - } - - drop(virtual_pool); - - let fee_vault = ctx.accounts.fee_vault.load()?; - - require!( - fee_vault - .token_vault - .eq(&ctx.accounts.token_quote_account.key()) - && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), - FeeVaultError::InvalidFeeVault - ); - - // support fee vault type is pda account - require!( - fee_vault.fee_vault_type == 1, - FeeVaultError::InvalidFeeVault - ); - - let before_token_vault_balance = ctx.accounts.token_quote_account.amount; - - let signer_seeds = fee_vault_seeds!( - fee_vault.base, - fee_vault.token_mint, - fee_vault.fee_vault_bump - ); - - dynamic_bonding_curve::cpi::creator_withdraw_surplus(CpiContext::new_with_signer( - ctx.accounts.dbc_program.to_account_info(), - dynamic_bonding_curve::cpi::accounts::CreatorWithdrawSurplus { - pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), - config: ctx.accounts.config.to_account_info(), - virtual_pool: ctx.accounts.pool.to_account_info(), - token_quote_account: ctx.accounts.token_quote_account.to_account_info(), - quote_vault: ctx.accounts.quote_vault.to_account_info(), - quote_mint: ctx.accounts.quote_mint.to_account_info(), - creator: ctx.accounts.fee_vault.to_account_info(), - token_quote_program: ctx.accounts.token_quote_program.to_account_info(), - event_authority: ctx.accounts.dbc_event_authority.to_account_info(), - program: ctx.accounts.dbc_program.to_account_info(), - }, - &[signer_seeds], - ))?; - ctx.accounts.token_quote_account.reload()?; - - let after_token_vault_balance = ctx.accounts.token_quote_account.amount; - - let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; - - drop(fee_vault); - - if claimed_amount > 0 { - let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; - fee_vault.fund_fee(claimed_amount)?; - - emit_cpi!(EvtFundFee { - funding_type: FundingType::ClaimDbcCreatorSurplus, - fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.pool.key(), - funded_amount: claimed_amount, - fee_per_share: fee_vault.fee_per_share, - }); - } - - Ok(()) -} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs deleted file mode 100644 index d716a89..0000000 --- a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_creator_trading_fee.rs +++ /dev/null @@ -1,136 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenAccount; -use dynamic_bonding_curve::accounts::PoolConfig; - -use crate::{ - error::FeeVaultError, - event::EvtFundFee, - math::SafeMath, - state::{FeeVault, FundingType}, -}; - -#[event_cpi] -#[derive(Accounts)] -pub struct FundingByClaimDbcCreatorTradingFeeCtx<'info> { - #[account(mut)] - pub fee_vault: AccountLoader<'info, FeeVault>, - - #[account(has_one = quote_mint)] - pub config: AccountLoader<'info, PoolConfig>, - - /// CHECK: The virtual pool - #[account(mut)] - pub pool: UncheckedAccount<'info>, - - /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account - #[account(mut)] - pub token_a_account: UncheckedAccount<'info>, - - /// The token b account - #[account(mut)] - pub token_b_account: Box>, - - /// CHECK: The vault token account for base token - #[account(mut)] - pub base_vault: UncheckedAccount<'info>, - - /// CHECK: The vault token account for quote token - #[account(mut)] - pub quote_vault: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub base_mint: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub quote_mint: UncheckedAccount<'info>, - - /// CHECK: Token base program - pub token_base_program: UncheckedAccount<'info>, - - /// CHECK: Token quote program - pub token_quote_program: UncheckedAccount<'info>, - - /// CHECK: dbc pool authority - pub dbc_pool_authority: UncheckedAccount<'info>, - - /// CHECK: dbc program - #[account(address = dynamic_bonding_curve::ID)] - pub dbc_program: UncheckedAccount<'info>, - /// CHECK: dbc event authority - pub dbc_event_authority: UncheckedAccount<'info>, -} - -pub fn handle_funding_by_claim_dbc_creator_trading_fee( - ctx: Context, -) -> Result<()> { - let config = ctx.accounts.config.load()?; - let fee_vault = ctx.accounts.fee_vault.load()?; - // support collect fee mode is 0 (only quote token) - require!(config.collect_fee_mode == 0, FeeVaultError::InvalidDbcPool); - - require!( - fee_vault - .token_vault - .eq(&ctx.accounts.token_b_account.key()) - && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), - FeeVaultError::InvalidFeeVault - ); - - // support fee vault type is pda account - require!( - fee_vault.fee_vault_type == 1, - FeeVaultError::InvalidFeeVault - ); - - let before_token_vault_balance = ctx.accounts.token_b_account.amount; - let signer_seeds = fee_vault_seeds!( - fee_vault.base, - fee_vault.token_mint, - fee_vault.fee_vault_bump - ); - dynamic_bonding_curve::cpi::claim_creator_trading_fee( - CpiContext::new_with_signer( - ctx.accounts.dbc_program.to_account_info(), - dynamic_bonding_curve::cpi::accounts::ClaimCreatorTradingFee { - pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), - pool: ctx.accounts.pool.to_account_info(), - token_a_account: ctx.accounts.token_a_account.to_account_info(), - token_b_account: ctx.accounts.token_b_account.to_account_info(), - base_vault: ctx.accounts.base_vault.to_account_info(), - quote_vault: ctx.accounts.quote_vault.to_account_info(), - base_mint: ctx.accounts.base_mint.to_account_info(), - quote_mint: ctx.accounts.quote_mint.to_account_info(), - creator: ctx.accounts.fee_vault.to_account_info(), - token_base_program: ctx.accounts.token_base_program.to_account_info(), - token_quote_program: ctx.accounts.token_quote_program.to_account_info(), - event_authority: ctx.accounts.dbc_event_authority.to_account_info(), - program: ctx.accounts.dbc_program.to_account_info(), - }, - &[signer_seeds], - ), - 0, // max base amount, - u64::MAX, // max quote amount, - )?; - ctx.accounts.token_b_account.reload()?; - - let after_token_vault_balance = ctx.accounts.token_b_account.amount; - - let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; - - drop(fee_vault); - - if claimed_amount > 0 { - let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; - fee_vault.fund_fee(claimed_amount)?; - - emit_cpi!(EvtFundFee { - funding_type: FundingType::ClaimDbcCreatorTradingFee, - fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.pool.key(), - funded_amount: claimed_amount, - fee_per_share: fee_vault.fee_per_share, - }); - } - - Ok(()) -} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs deleted file mode 100644 index 4465835..0000000 --- a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_surplus.rs +++ /dev/null @@ -1,125 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenAccount; -use dynamic_bonding_curve::accounts::VirtualPool; - -use crate::{ - error::FeeVaultError, - event::EvtFundFee, - math::SafeMath, - state::{FeeVault, FundingType}, -}; - -#[event_cpi] -#[derive(Accounts)] -pub struct FundingByClaimDbcPartnerSurplusCtx<'info> { - #[account(mut)] - pub fee_vault: AccountLoader<'info, FeeVault>, - - /// CHECK: The pool config - pub config: UncheckedAccount<'info>, - - /// The dbc virtual pool - #[account(mut)] - pub pool: AccountLoader<'info, VirtualPool>, - - /// The token b account - #[account(mut)] - pub token_quote_account: Box>, - - /// CHECK: The vault token account for quote token - #[account(mut)] - pub quote_vault: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub quote_mint: UncheckedAccount<'info>, - - /// CHECK: Token base program - pub token_base_program: UncheckedAccount<'info>, - - /// CHECK: Token quote program - pub token_quote_program: UncheckedAccount<'info>, - - /// CHECK: dbc pool authority - pub dbc_pool_authority: UncheckedAccount<'info>, - - /// CHECK: dbc program - #[account(address = dynamic_bonding_curve::ID)] - pub dbc_program: UncheckedAccount<'info>, - /// CHECK: dbc event authority - pub dbc_event_authority: UncheckedAccount<'info>, -} - -pub fn handle_funding_by_claim_dbc_partner_surplus( - ctx: Context, -) -> Result<()> { - let virtual_pool = ctx.accounts.pool.load()?; - // partner surplus has been withdraw - if virtual_pool.is_partner_withdraw_surplus == 1 { - return Ok(()); - } - - drop(virtual_pool); - - let fee_vault = ctx.accounts.fee_vault.load()?; - - require!( - fee_vault - .token_vault - .eq(&ctx.accounts.token_quote_account.key()) - && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), - FeeVaultError::InvalidFeeVault - ); - - // support fee vault type is pda account - require!( - fee_vault.fee_vault_type == 1, - FeeVaultError::InvalidFeeVault - ); - - let before_token_vault_balance = ctx.accounts.token_quote_account.amount; - - let signer_seeds = fee_vault_seeds!( - fee_vault.base, - fee_vault.token_mint, - fee_vault.fee_vault_bump - ); - - dynamic_bonding_curve::cpi::partner_withdraw_surplus(CpiContext::new_with_signer( - ctx.accounts.dbc_program.to_account_info(), - dynamic_bonding_curve::cpi::accounts::PartnerWithdrawSurplus { - pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), - config: ctx.accounts.config.to_account_info(), - virtual_pool: ctx.accounts.pool.to_account_info(), - token_quote_account: ctx.accounts.token_quote_account.to_account_info(), - quote_vault: ctx.accounts.quote_vault.to_account_info(), - quote_mint: ctx.accounts.quote_mint.to_account_info(), - fee_claimer: ctx.accounts.fee_vault.to_account_info(), - token_quote_program: ctx.accounts.token_quote_program.to_account_info(), - event_authority: ctx.accounts.dbc_event_authority.to_account_info(), - program: ctx.accounts.dbc_program.to_account_info(), - }, - &[signer_seeds], - ))?; - ctx.accounts.token_quote_account.reload()?; - - let after_token_vault_balance = ctx.accounts.token_quote_account.amount; - - let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; - - drop(fee_vault); - - if claimed_amount > 0 { - let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; - fee_vault.fund_fee(claimed_amount)?; - - emit_cpi!(EvtFundFee { - funding_type: FundingType::ClaimDbcPartnerSurplus, - fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.pool.key(), - funded_amount: claimed_amount, - fee_per_share: fee_vault.fee_per_share, - }); - } - - Ok(()) -} diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs deleted file mode 100644 index ac700d4..0000000 --- a/programs/dynamic-fee-sharing/src/instructions/ix_funding_by_claim_dbc_partner_trading_fee.rs +++ /dev/null @@ -1,139 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenAccount; -use dynamic_bonding_curve::accounts::PoolConfig; - -use crate::{ - error::FeeVaultError, - event::EvtFundFee, - math::SafeMath, - state::{FeeVault, FundingType}, -}; - -#[event_cpi] -#[derive(Accounts)] -pub struct FundingByClaimDbcTradingFeeCtx<'info> { - #[account(mut)] - pub fee_vault: AccountLoader<'info, FeeVault>, - - #[account(has_one=quote_mint)] - pub config: AccountLoader<'info, PoolConfig>, - - /// CHECK: bdc virtual pool - #[account(mut)] - pub pool: UncheckedAccount<'info>, - - /// CHECK: This account use to satisfy accounts context. The pool only has fee in token b account - #[account(mut)] - pub token_a_account: UncheckedAccount<'info>, - - /// The treasury token b account - #[account(mut)] - pub token_b_account: Box>, - - /// CHECK: The vault token account for base token - #[account(mut)] - pub base_vault: UncheckedAccount<'info>, - - /// CHECK: The vault token account for quote token - #[account(mut)] - pub quote_vault: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub base_mint: UncheckedAccount<'info>, - - /// CHECK: The mint of token base - pub quote_mint: UncheckedAccount<'info>, - - /// CHECK: Token base program - pub token_base_program: UncheckedAccount<'info>, - - /// CHECK: Token quote program - pub token_quote_program: UncheckedAccount<'info>, - - /// CHECK: dbc pool authority - pub dbc_pool_authority: UncheckedAccount<'info>, - - /// CHECK: dbc program - #[account(address = dynamic_bonding_curve::ID)] - pub dbc_program: UncheckedAccount<'info>, - /// CHECK: dbc authority - pub dbc_event_authority: UncheckedAccount<'info>, -} - -pub fn handle_funding_by_claim_dbc_partner_trading_fee( - ctx: Context, -) -> Result<()> { - let config = ctx.accounts.config.load()?; - let fee_vault = ctx.accounts.fee_vault.load()?; - // support collect fee mode is 0 (only quote token) - require!(config.collect_fee_mode == 0, FeeVaultError::InvalidDbcPool); - - require!( - fee_vault - .token_vault - .eq(&ctx.accounts.token_b_account.key()) - && fee_vault.token_mint.eq(&ctx.accounts.quote_mint.key()), - FeeVaultError::InvalidFeeVault - ); - - // support fee vault type is pda account - require!( - fee_vault.fee_vault_type == 1, - FeeVaultError::InvalidFeeVault - ); - - let before_token_vault_balance = ctx.accounts.token_b_account.amount; - - let signer_seeds = fee_vault_seeds!( - fee_vault.base, - fee_vault.token_mint, - fee_vault.fee_vault_bump - ); - - dynamic_bonding_curve::cpi::claim_trading_fee( - CpiContext::new_with_signer( - ctx.accounts.dbc_program.to_account_info(), - dynamic_bonding_curve::cpi::accounts::ClaimTradingFee { - pool_authority: ctx.accounts.dbc_pool_authority.to_account_info(), - config: ctx.accounts.config.to_account_info(), - pool: ctx.accounts.pool.to_account_info(), - token_a_account: ctx.accounts.token_a_account.to_account_info(), - token_b_account: ctx.accounts.token_b_account.to_account_info(), - base_vault: ctx.accounts.base_vault.to_account_info(), - quote_vault: ctx.accounts.quote_vault.to_account_info(), - base_mint: ctx.accounts.base_mint.to_account_info(), - quote_mint: ctx.accounts.quote_mint.to_account_info(), - fee_claimer: ctx.accounts.fee_vault.to_account_info(), - token_base_program: ctx.accounts.token_base_program.to_account_info(), - token_quote_program: ctx.accounts.token_quote_program.to_account_info(), - event_authority: ctx.accounts.dbc_event_authority.to_account_info(), - program: ctx.accounts.dbc_program.to_account_info(), - }, - &[signer_seeds], - ), - 0, // max_amount_a, fee only token b - u64::MAX, // max_amount_b, - )?; - ctx.accounts.token_b_account.reload()?; - - let after_token_vault_balance = ctx.accounts.token_b_account.amount; - - let claimed_amount = after_token_vault_balance.safe_sub(before_token_vault_balance)?; - - drop(fee_vault); - - if claimed_amount > 0 { - let mut fee_vault = ctx.accounts.fee_vault.load_mut()?; - fee_vault.fund_fee(claimed_amount)?; - - emit_cpi!(EvtFundFee { - funding_type: FundingType::ClaimDbcPartnerTradingFee, - fee_vault: ctx.accounts.fee_vault.key(), - funder: ctx.accounts.pool.key(), - funded_amount: claimed_amount, - fee_per_share: fee_vault.fee_per_share, - }); - } - - Ok(()) -} diff --git a/programs/dynamic-fee-sharing/src/instructions/mod.rs b/programs/dynamic-fee-sharing/src/instructions/mod.rs index ab0a0ac..44af05a 100644 --- a/programs/dynamic-fee-sharing/src/instructions/mod.rs +++ b/programs/dynamic-fee-sharing/src/instructions/mod.rs @@ -6,13 +6,5 @@ pub mod ix_claim_fee; pub use ix_claim_fee::*; pub mod ix_initialize_fee_vault_pda; pub use ix_initialize_fee_vault_pda::*; -pub mod ix_funding_by_claim_damm_v2; -pub use ix_funding_by_claim_damm_v2::*; -pub mod ix_funding_by_claim_dbc_partner_trading_fee; -pub use ix_funding_by_claim_dbc_partner_trading_fee::*; -pub mod ix_funding_by_claim_dbc_creator_trading_fee; -pub use ix_funding_by_claim_dbc_creator_trading_fee::*; -pub mod ix_funding_by_claim_dbc_creator_surplus; -pub use ix_funding_by_claim_dbc_creator_surplus::*; -pub mod ix_funding_by_claim_dbc_partner_surplus; -pub use ix_funding_by_claim_dbc_partner_surplus::*; +pub mod ix_fund_by_claiming_fee; +pub use ix_fund_by_claiming_fee::*; diff --git a/programs/dynamic-fee-sharing/src/lib.rs b/programs/dynamic-fee-sharing/src/lib.rs index 1cd6983..2a887bd 100644 --- a/programs/dynamic-fee-sharing/src/lib.rs +++ b/programs/dynamic-fee-sharing/src/lib.rs @@ -37,32 +37,11 @@ pub mod dynamic_fee_sharing { instructions::handle_fund_fee(ctx, max_amount) } - pub fn funding_by_claim_dammv2_fee(ctx: Context) -> Result<()> { - instructions::handle_funding_by_claim_dammv2_fee(ctx) - } - - pub fn funding_by_claim_dbc_partner_trading_fee( - ctx: Context, - ) -> Result<()> { - instructions::handle_funding_by_claim_dbc_partner_trading_fee(ctx) - } - - pub fn funding_by_claim_dbc_creator_trading_fee( - ctx: Context, - ) -> Result<()> { - instructions::handle_funding_by_claim_dbc_creator_trading_fee(ctx) - } - - pub fn funding_by_claim_dbc_creator_surplus( - ctx: Context, - ) -> Result<()> { - instructions::handle_funding_by_claim_dbc_creator_surplus(ctx) - } - - pub fn funding_by_claim_dbc_partner_surplus( - ctx: Context, + pub fn fund_by_claiming_fee( + ctx: Context, + payload: Vec, ) -> Result<()> { - instructions::handle_funding_by_claim_dbc_partner_surplus(ctx) + instructions::handle_fund_by_claiming_fee(ctx, payload) } pub fn claim_fee(ctx: Context, index: u8) -> Result<()> { diff --git a/programs/dynamic-fee-sharing/src/state/fee_vault.rs b/programs/dynamic-fee-sharing/src/state/fee_vault.rs index f72ad0d..a9c9519 100644 --- a/programs/dynamic-fee-sharing/src/state/fee_vault.rs +++ b/programs/dynamic-fee-sharing/src/state/fee_vault.rs @@ -8,17 +8,6 @@ use anchor_lang::prelude::*; use num_enum::{IntoPrimitive, TryFromPrimitive}; use static_assertions::const_assert_eq; -#[derive(AnchorSerialize, AnchorDeserialize, Debug, PartialEq, Eq)] -#[repr(u8)] -pub enum FundingType { - Direct, - ClaimDammV2, - ClaimDbcPartnerTradingFee, - ClaimDbcCreatorTradingFee, - ClaimDbcPartnerSurplus, - ClaimDbcCreatorSurplus, -} - #[repr(u8)] #[derive( Clone, @@ -130,4 +119,10 @@ impl FeeVault { Ok(fee_being_claimed) } + + pub fn is_share_holder(&self, signer: &Pubkey) -> bool { + self.users + .iter() + .any(|share_holder| share_holder.address.eq(signer)) + } } diff --git a/tests/claim_damm_v2.test.ts b/tests/claim_damm_v2.test.ts index c403e07..54785da 100644 --- a/tests/claim_damm_v2.test.ts +++ b/tests/claim_damm_v2.test.ts @@ -5,15 +5,15 @@ import { getTokenBalance, sendTransactionOrExpectThrowError, startSvm, + warpToTimestamp, } from "./common/svm"; import { createToken, - deriveFeeVaultAuthorityAddress, getFeeVault, mintToken, } from "./common"; -import { createDammV2Pool, dammV2Swap } from "./common/damm_v2"; -import { claimDammV2Fee, createFeeVaultPda } from "./common/dfs"; +import { createDammV2Pool, dammV2Swap, initializeAndFundReward } from "./common/damm_v2"; +import { claimDammV2Fee, claimDammV2Reward, createFeeVaultPda } from "./common/dfs"; import { BN } from "bn.js"; import { expect } from "chai"; import { @@ -22,25 +22,29 @@ import { TOKEN_2022_PROGRAM_ID, } from "@solana/spl-token"; -describe("Claim damm v2 fee", () => { +describe("Fund by claiming damm v2", () => { let svm: LiteSVM; let admin: Keypair; let creator: Keypair; let vaultOwner: Keypair; let tokenAMint: PublicKey; let tokenBMint: PublicKey; + let rewardMint: PublicKey; let dammV2Pool: PublicKey; let positionNftAccount: PublicKey; let position: PublicKey; + let shareHolder: Keypair; beforeEach(async () => { svm = startSvm(); - [admin, creator, vaultOwner] = generateUsers(svm, 7); + [admin, creator, vaultOwner, shareHolder] = generateUsers(svm, 4); tokenAMint = createToken(svm, admin, admin.publicKey, null); tokenBMint = createToken(svm, admin, admin.publicKey, null); + rewardMint = createToken(svm, admin, admin.publicKey, null); mintToken(svm, admin, tokenAMint, admin, creator.publicKey); mintToken(svm, admin, tokenBMint, admin, creator.publicKey); + mintToken(svm, admin, rewardMint, admin, creator.publicKey); // create damm v2 pool const createDmmV2PoolRes = await createDammV2Pool( @@ -54,7 +58,7 @@ describe("Claim damm v2 fee", () => { positionNftAccount = createDmmV2PoolRes.positionNftAccount; }); - it("fullflow claim damm v2", async () => { + it("Fund by claim damm v2 position fee", async () => { const { feeVault, tokenVault } = await createFeeVaultPda( svm, admin, @@ -64,7 +68,7 @@ describe("Claim damm v2 fee", () => { padding: [], users: [ { - address: PublicKey.unique(), + address: shareHolder.publicKey, share: 100, }, { @@ -108,6 +112,7 @@ describe("Claim damm v2 fee", () => { await claimDammV2Fee( svm, + shareHolder, creator, feeVault, tokenVault, @@ -127,4 +132,76 @@ describe("Claim damm v2 fee", () => { ); expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); }); + + + it("Fund by claiming damm v2 reward", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + rewardMint, + { + padding: [], + users: [ + { + address: shareHolder.publicKey, + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const setAuthorityIx = createSetAuthorityInstruction( + positionNftAccount, + creator.publicKey, + AuthorityType.AccountOwner, + feeVault, + [], + TOKEN_2022_PROGRAM_ID + ); + const assignOwnerTx = new Transaction().add(setAuthorityIx); + assignOwnerTx.recentBlockhash = svm.latestBlockhash(); + assignOwnerTx.sign(creator); + + sendTransactionOrExpectThrowError(svm, assignOwnerTx); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + const rewardIndex = 0; + await initializeAndFundReward(svm, creator, dammV2Pool, rewardMint, rewardIndex); + + warpToTimestamp(svm, new BN(12 * 60 * 60)); + + await claimDammV2Reward( + svm, + shareHolder, + creator, + feeVault, + tokenVault, + dammV2Pool, + position, + positionNftAccount, + rewardIndex + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); }); diff --git a/tests/claim_dbc_creator_trading_fee.test.ts b/tests/claim_dbc_creator_trading_fee.test.ts index fdf975d..30645be 100644 --- a/tests/claim_dbc_creator_trading_fee.test.ts +++ b/tests/claim_dbc_creator_trading_fee.test.ts @@ -1,11 +1,10 @@ import { BN } from "bn.js"; -import { Connection, Keypair, PublicKey } from "@solana/web3.js"; -import { config, expect } from "chai"; +import { Keypair, PublicKey } from "@solana/web3.js"; +import { expect } from "chai"; import { LiteSVM } from "litesvm"; import { generateUsers, getTokenBalance, startSvm } from "./common/svm"; import { createToken, - deriveFeeVaultAuthorityAddress, getFeeVault, mintToken, } from "./common"; @@ -22,13 +21,14 @@ import { } from "./common/dbc"; import { claimDbcCreatorTradingFee, - claimDbcTradingFee, + claimDbcPartnerTradingFee, createFeeVaultPda, withdrawDbcCreatorSurplus, withdrawDbcPartnerSurplus, + withdrawMigrationFee, } from "./common/dfs"; -describe("Claim fee and withdraw dbc surplus", () => { +describe("Funding by claiming in DBC", () => { let svm: LiteSVM; let admin: Keypair; let payer: Keypair; @@ -36,6 +36,7 @@ describe("Claim fee and withdraw dbc surplus", () => { let poolCreator: Keypair; let vaultOwner: Keypair; let quoteMint: PublicKey; + let shareHolder: Keypair; beforeEach(async () => { svm = startSvm(); @@ -43,7 +44,7 @@ describe("Claim fee and withdraw dbc surplus", () => { payer = Keypair.generate(); user = Keypair.generate(); poolCreator = Keypair.generate(); - [admin, payer, user, poolCreator, vaultOwner] = generateUsers(svm, 5); + [admin, payer, user, poolCreator, vaultOwner, shareHolder] = generateUsers(svm, 6); quoteMint = createToken(svm, admin, admin.publicKey, null); }); @@ -57,7 +58,7 @@ describe("Claim fee and withdraw dbc surplus", () => { padding: [], users: [ { - address: PublicKey.unique(), + address: shareHolder.publicKey, share: 100, }, { @@ -87,7 +88,7 @@ describe("Claim fee and withdraw dbc surplus", () => { await claimDbcCreatorTradingFee( svm, - poolCreator, + shareHolder, feeVault, tokenVault, virtualPoolConfig, @@ -106,7 +107,7 @@ describe("Claim fee and withdraw dbc surplus", () => { expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); }); - it("claim dbc trading fee", async () => { + it("claim dbc partner trading fee", async () => { const { feeVault, tokenVault } = await createFeeVaultPda( svm, admin, @@ -116,7 +117,7 @@ describe("Claim fee and withdraw dbc surplus", () => { padding: [], users: [ { - address: PublicKey.unique(), + address: shareHolder.publicKey, share: 100, }, { @@ -144,8 +145,9 @@ describe("Claim fee and withdraw dbc surplus", () => { const preTokenVaultBalance = getTokenBalance(svm, tokenVault); - await claimDbcTradingFee( + await claimDbcPartnerTradingFee( svm, + shareHolder, payer, feeVault, tokenVault, @@ -175,7 +177,7 @@ describe("Claim fee and withdraw dbc surplus", () => { padding: [], users: [ { - address: PublicKey.unique(), + address: shareHolder.publicKey, share: 100, }, { @@ -205,7 +207,7 @@ describe("Claim fee and withdraw dbc surplus", () => { await withdrawDbcCreatorSurplus( svm, - poolCreator, + shareHolder, feeVault, tokenVault, virtualPoolConfig, @@ -234,7 +236,7 @@ describe("Claim fee and withdraw dbc surplus", () => { padding: [], users: [ { - address: PublicKey.unique(), + address: shareHolder.publicKey, share: 100, }, { @@ -264,7 +266,7 @@ describe("Claim fee and withdraw dbc surplus", () => { await withdrawDbcPartnerSurplus( svm, - payer, + shareHolder, feeVault, tokenVault, virtualPoolConfig, @@ -282,6 +284,66 @@ describe("Claim fee and withdraw dbc surplus", () => { ); expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); }); + + it("withdraw migration fee", async () => { + const { feeVault, tokenVault } = await createFeeVaultPda( + svm, + admin, + vaultOwner.publicKey, + quoteMint, + { + padding: [], + users: [ + { + address: shareHolder.publicKey, + share: 100, + }, + { + address: PublicKey.unique(), + share: 100, + }, + ], + } + ); + + const { virtualPool, virtualPoolConfig } = await setupPool( + svm, + admin, + user, + poolCreator, + payer, + feeVault, + quoteMint + ); + + let vaultState = getFeeVault(svm, feeVault); + + const preTotalFundedFee = vaultState.totalFundedFee; + const preFeePerShare = vaultState.feePerShare; + + const preTokenVaultBalance = getTokenBalance(svm, tokenVault); + + await withdrawMigrationFee( + svm, + shareHolder, + feeVault, + tokenVault, + virtualPoolConfig, + virtualPool, + 0 + ); + + const postTokenVaultBalance = getTokenBalance(svm, tokenVault); + vaultState = getFeeVault(svm, feeVault); + + const postTotalFundedFee = vaultState.totalFundedFee; + const postFeePerShare = vaultState.feePerShare; + + expect(postTotalFundedFee.sub(preTotalFundedFee).toString()).eq( + postTokenVaultBalance.sub(preTokenVaultBalance).toString() + ); + expect(Number(postFeePerShare.sub(preFeePerShare))).gt(0); + }); }); async function setupPool( diff --git a/tests/common/damm_v2.ts b/tests/common/damm_v2.ts index f837783..3042a13 100644 --- a/tests/common/damm_v2.ts +++ b/tests/common/damm_v2.ts @@ -8,7 +8,7 @@ import { import { CpAmm } from "./idl/damm_v2"; import CpAmmIDL from "../../idls/damm_v2.json"; -import { clusterApiUrl, Connection, Keypair, PublicKey } from "@solana/web3.js"; +import { clusterApiUrl, Connection, Keypair, PublicKey, Transaction } from "@solana/web3.js"; import { LiteSVM } from "litesvm"; import { getAssociatedTokenAddressSync, @@ -22,6 +22,8 @@ export const DAMM_V2_PROGRAM_ID = new PublicKey(CpAmmIDL.address); export type Pool = IdlAccounts["pool"]; export type Position = IdlAccounts["position"]; +// export const ClaimFeeIx = CpAmmIDL.instructions[1].discriminator; + export const MIN_SQRT_PRICE = new BN("4295048016"); export const MAX_SQRT_PRICE = new BN("79226673521066979257578248091"); const LIQUIDITY_DELTA = new BN("1844674407800459963300003758876517305"); @@ -124,6 +126,40 @@ export async function createDammV2Pool( return { pool, position, positionNftAccount }; } +export async function initializeAndFundReward(svm: LiteSVM, creator: Keypair, pool: PublicKey, rewardMint: PublicKey, rewardIndex: number) { + const program = createDammV2Program(); + + const initTx = await program.methods.initializeReward( + rewardIndex, + new BN(60 * 60 * 24), + creator.publicKey + ).accountsPartial({ + poolAuthority: deriveDammV2PoolAuthority(), + pool, + rewardVault: deriveDammV2RewardVault(pool, rewardIndex), + rewardMint, + signer: creator.publicKey, + payer: creator.publicKey, + tokenProgram: TOKEN_PROGRAM_ID + }).transaction() + + const amount = new BN(100_000_000) + const fundReward = await program.methods.fundReward(rewardIndex, amount, false).accountsPartial({ + pool, + rewardMint, + rewardVault: deriveDammV2RewardVault(pool, rewardIndex), + funderTokenAccount: getAssociatedTokenAddressSync(rewardMint, creator.publicKey, true, TOKEN_PROGRAM_ID), + funder: creator.publicKey, + tokenProgram: TOKEN_PROGRAM_ID + }).transaction() + + const transaction = new Transaction().add(initTx).add(fundReward) + transaction.recentBlockhash = svm.latestBlockhash(); + transaction.sign(creator); + + sendTransactionOrExpectThrowError(svm, transaction); +} + export function getProgramFromFlagDammV2(flag: number): PublicKey { return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID; } @@ -181,6 +217,13 @@ export function deriveDammV2EventAuthority() { )[0]; } +export function deriveDammV2RewardVault(pool: PublicKey, rewardIndex: number): PublicKey { + return PublicKey.findProgramAddressSync( + [Buffer.from("reward_vault"), pool.toBuffer(), Buffer.from([rewardIndex])], + DAMM_V2_PROGRAM_ID + )[0]; +} + export function deriveDammV2PoolAuthority(): PublicKey { return PublicKey.findProgramAddressSync( [Buffer.from("pool_authority")], diff --git a/tests/common/dbc.ts b/tests/common/dbc.ts index 8ae6d10..76deb0b 100644 --- a/tests/common/dbc.ts +++ b/tests/common/dbc.ts @@ -279,7 +279,7 @@ export async function transferCreator( transaction.recentBlockhash = svm.latestBlockhash(); transaction.sign(creator); - sendTransactionOrExpectThrowError(svm, transaction, true); + sendTransactionOrExpectThrowError(svm, transaction); } export function getVirtualPoolState( @@ -457,8 +457,8 @@ export function buildDefaultCurve(): ConfigParameters { creatorTradingFeePercentage, tokenUpdateAuthority: 0, migrationFee: { - feePercentage: 0, - creatorFeePercentage: 0, + feePercentage: 50, + creatorFeePercentage: 50, }, migratedPoolFee: { collectFeeMode: 0, diff --git a/tests/common/dfs.ts b/tests/common/dfs.ts index 422ae51..8fcc364 100644 --- a/tests/common/dfs.ts +++ b/tests/common/dfs.ts @@ -1,4 +1,6 @@ -import { Keypair, PublicKey } from "@solana/web3.js"; +import { AccountMeta, Keypair, PublicKey } from "@solana/web3.js"; +import CpAmmIDL from "../../idls/damm_v2.json"; +import DynamicBondingCurveIDL from "../../idls/dynamic_bonding_curve.json"; import { createProgram, deriveFeeVaultAuthorityAddress, @@ -6,6 +8,7 @@ import { deriveTokenVaultAddress, getOrCreateAtA, InitializeFeeVaultParameters, + U64_MAX, } from "."; import { LiteSVM } from "litesvm"; import { @@ -61,21 +64,46 @@ export async function createFeeVaultPda( tx.recentBlockhash = svm.latestBlockhash(); tx.sign(admin, baseKp); - sendTransactionOrExpectThrowError(svm, tx, false); + sendTransactionOrExpectThrowError(svm, tx); return { feeVault, tokenVault }; } +async function fundByClaimingFee(svm: LiteSVM, signer: Keypair, feeVault: PublicKey, tokenVault: PublicKey, remainingAccounts: AccountMeta[], payload: Buffer, sourceProgram: PublicKey) { + const program = createProgram(); + + const tx = await program.methods + .fundByClaimingFee(payload) + .accountsPartial({ + feeVault, + tokenVault, + signer: signer.publicKey, + sourceProgram + }) + .remainingAccounts( + remainingAccounts + ) + .transaction(); + + tx.recentBlockhash = svm.latestBlockhash(); + tx.sign(signer); + + const result = sendTransactionOrExpectThrowError(svm, tx); + + return result +} + export async function claimDammV2Fee( svm: LiteSVM, + signer: Keypair, owner: Keypair, feeVault: PublicKey, tokenVault: PublicKey, dammv2Pool: PublicKey, position: PublicKey, - positionNftAccount: PublicKey + positionNftAccount: PublicKey, ) { - const program = createProgram(); + const dammV2PoolState = getDammV2PoolState(svm, dammv2Pool); const tokenAAccount = getAssociatedTokenAddressSync( @@ -85,88 +113,270 @@ export async function claimDammV2Fee( getProgramFromFlagDammV2(dammV2PoolState.tokenAFlag) ); - const tx = await program.methods - .fundingByClaimDammv2Fee() - .accountsPartial({ - feeVault, - pool: dammv2Pool, - position, - positionNftAccount, - tokenAAccount, - tokenBAccount: tokenVault, - tokenAVault: dammV2PoolState.tokenAVault, - tokenBVault: dammV2PoolState.tokenBVault, - tokenAMint: dammV2PoolState.tokenAMint, - tokenBMint: dammV2PoolState.tokenBMint, - tokenAProgram: getProgramFromFlagDammV2(dammV2PoolState.tokenAFlag), - tokenBProgram: getProgramFromFlagDammV2(dammV2PoolState.tokenBFlag), - dammv2EventAuthority: deriveDammV2EventAuthority(), - dammv2PoolAuthority: deriveDammV2PoolAuthority(), - dammv2Program: DAMM_V2_PROGRAM_ID, - }) - .transaction(); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDammV2PoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: dammv2Pool, + }, + { + isSigner: false, + isWritable: true, + pubkey: position, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenAAccount, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.tokenAVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.tokenBVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.tokenAMint, + }, - tx.recentBlockhash = svm.latestBlockhash(); - tx.sign(owner); + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.tokenBMint, + }, + { + isSigner: false, + isWritable: false, + pubkey: positionNftAccount, + }, + { + isSigner: false, + isWritable: false, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: getProgramFromFlagDammV2(dammV2PoolState.tokenAFlag), + }, + { + isSigner: false, + isWritable: false, + pubkey: getProgramFromFlagDammV2(dammV2PoolState.tokenBFlag), + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDammV2EventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DAMM_V2_PROGRAM_ID, + }, + ]; + + const claimPositionFeeDisc = CpAmmIDL.instructions.find(instruction => instruction.name === "claim_position_fee").discriminator; + const payload = Buffer.from(claimPositionFeeDisc) + + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DAMM_V2_PROGRAM_ID) + +} + +export async function claimDammV2Reward( + svm: LiteSVM, + signer: Keypair, + owner: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + dammv2Pool: PublicKey, + position: PublicKey, + positionNftAccount: PublicKey, + rewardIndex: number, +) { + + const dammV2PoolState = getDammV2PoolState(svm, dammv2Pool); + + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDammV2PoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: dammv2Pool, + }, + { + isSigner: false, + isWritable: true, + pubkey: position, + }, + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.rewardInfos[rewardIndex].vault, + }, + { + isSigner: false, + isWritable: true, + pubkey: dammV2PoolState.rewardInfos[rewardIndex].mint, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: positionNftAccount, + }, + { + isSigner: false, + isWritable: false, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: getProgramFromFlagDammV2(dammV2PoolState.rewardInfos[rewardIndex].rewardTokenFlag), + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDammV2EventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DAMM_V2_PROGRAM_ID, + }, + ]; + + const claimDammV2RewardDisc = CpAmmIDL.instructions.find(instruction => instruction.name === "claim_reward").discriminator; + const payload = Buffer.concat([Buffer.from(claimDammV2RewardDisc), Buffer.from([rewardIndex]), Buffer.from([1])]) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DAMM_V2_PROGRAM_ID) - sendTransactionOrExpectThrowError(svm, tx, true); } export async function claimDbcCreatorTradingFee( svm: LiteSVM, - creator: Keypair, + signer: Keypair, feeVault: PublicKey, tokenVault: PublicKey, poolConfig: PublicKey, virtualPool: PublicKey ) { - const program = createProgram(); const virtualPoolState = getVirtualPoolState(svm, virtualPool); const poolConfigState = getVirtualConfigState(svm, poolConfig); const tokenAAccount = getOrCreateAtA( svm, - creator, + signer, virtualPoolState.baseMint, - creator.publicKey, + signer.publicKey, TOKEN_2022_PROGRAM_ID ); - const tx = await program.methods - .fundingByClaimDbcCreatorTradingFee() - .accountsPartial({ - feeVault, - config: poolConfig, - pool: virtualPool, - tokenAAccount, - tokenBAccount: tokenVault, - baseVault: virtualPoolState.baseVault, - quoteVault: virtualPoolState.quoteVault, - baseMint: virtualPoolState.baseMint, - quoteMint: poolConfigState.quoteMint, - tokenBaseProgram: TOKEN_2022_PROGRAM_ID, - tokenQuoteProgram: TOKEN_PROGRAM_ID, - dbcEventAuthority: deriveDbcEventAuthority(), - dbcPoolAuthority: deriveDbcPoolAuthority(), - dbcProgram: DBC_PROGRAM_ID, - }) - .transaction(); - - tx.recentBlockhash = svm.latestBlockhash(); - tx.sign(creator); - - sendTransactionOrExpectThrowError(svm, tx); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcPoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPool, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenAAccount, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.baseVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.quoteVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: virtualPoolState.baseMint, + }, + { + isSigner: false, + isWritable: false, + pubkey: poolConfigState.quoteMint, + }, + { + isSigner: false, + isWritable: false, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_2022_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcEventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DBC_PROGRAM_ID, + }, + ] + const claimDbcCreatorTradingFeeDisc = DynamicBondingCurveIDL.instructions.find(instruction => instruction.name === "claim_creator_trading_fee").discriminator; + const payload = Buffer.concat([Buffer.from(claimDbcCreatorTradingFeeDisc), U64_MAX.toBuffer(), U64_MAX.toBuffer()]) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DBC_PROGRAM_ID); } -export async function claimDbcTradingFee( +export async function claimDbcPartnerTradingFee( svm: LiteSVM, + signer: Keypair, feeClaimer: Keypair, feeVault: PublicKey, tokenVault: PublicKey, poolConfig: PublicKey, virtualPool: PublicKey ) { - const program = createProgram(); const virtualPoolState = getVirtualPoolState(svm, virtualPool); const poolConfigState = getVirtualConfigState(svm, poolConfig); @@ -178,98 +388,286 @@ export async function claimDbcTradingFee( TOKEN_2022_PROGRAM_ID ); - const tx = await program.methods - .fundingByClaimDbcPartnerTradingFee() - .accountsPartial({ - feeVault, - config: poolConfig, - pool: virtualPool, - tokenAAccount, - tokenBAccount: tokenVault, - baseVault: virtualPoolState.baseVault, - quoteVault: virtualPoolState.quoteVault, - baseMint: virtualPoolState.baseMint, - quoteMint: poolConfigState.quoteMint, - tokenBaseProgram: TOKEN_2022_PROGRAM_ID, - tokenQuoteProgram: TOKEN_PROGRAM_ID, - dbcEventAuthority: deriveDbcEventAuthority(), - dbcPoolAuthority: deriveDbcPoolAuthority(), - dbcProgram: DBC_PROGRAM_ID, - }) - .transaction(); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcPoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: poolConfig, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPool, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenAAccount, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, - tx.recentBlockhash = svm.latestBlockhash(); - tx.sign(feeClaimer); + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.baseVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.quoteVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: virtualPoolState.baseMint, + }, + { + isSigner: false, + isWritable: false, + pubkey: poolConfigState.quoteMint, + }, - sendTransactionOrExpectThrowError(svm, tx); + { + isSigner: false, + isWritable: true, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_2022_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcEventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DBC_PROGRAM_ID, + }, + ] + const claimDbcPartnerTradingFeeDisc = DynamicBondingCurveIDL.instructions.find(instruction => instruction.name === "claim_trading_fee").discriminator; + const payload = Buffer.concat([Buffer.from(claimDbcPartnerTradingFeeDisc), U64_MAX.toBuffer(), U64_MAX.toBuffer()]) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DBC_PROGRAM_ID); } export async function withdrawDbcCreatorSurplus( svm: LiteSVM, - creator: Keypair, + signer: Keypair, feeVault: PublicKey, tokenVault: PublicKey, poolConfig: PublicKey, virtualPool: PublicKey ) { - const program = createProgram(); const virtualPoolState = getVirtualPoolState(svm, virtualPool); const poolConfigState = getVirtualConfigState(svm, poolConfig); - const tx = await program.methods - .fundingByClaimDbcCreatorSurplus() - .accountsPartial({ - feeVault, - config: poolConfig, - pool: virtualPool, - tokenQuoteAccount: tokenVault, - quoteVault: virtualPoolState.quoteVault, - quoteMint: poolConfigState.quoteMint, - tokenBaseProgram: TOKEN_2022_PROGRAM_ID, - tokenQuoteProgram: TOKEN_PROGRAM_ID, - dbcEventAuthority: deriveDbcEventAuthority(), - dbcPoolAuthority: deriveDbcPoolAuthority(), - dbcProgram: DBC_PROGRAM_ID, - }) - .transaction(); - - tx.recentBlockhash = svm.latestBlockhash(); - tx.sign(creator); - - sendTransactionOrExpectThrowError(svm, tx, true); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcPoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: poolConfig, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPool, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.quoteVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: poolConfigState.quoteMint, + }, + { + isSigner: false, + isWritable: true, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcEventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DBC_PROGRAM_ID, + }, + ] + const creatorWithdrawSurplusDisc = DynamicBondingCurveIDL.instructions.find(instruction => instruction.name === "creator_withdraw_surplus").discriminator; + const payload = Buffer.from(creatorWithdrawSurplusDisc) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DBC_PROGRAM_ID); } export async function withdrawDbcPartnerSurplus( svm: LiteSVM, - feeClaimer: Keypair, + signer: Keypair, feeVault: PublicKey, tokenVault: PublicKey, poolConfig: PublicKey, virtualPool: PublicKey ) { - const program = createProgram(); const virtualPoolState = getVirtualPoolState(svm, virtualPool); const poolConfigState = getVirtualConfigState(svm, poolConfig); - const tx = await program.methods - .fundingByClaimDbcPartnerSurplus() - .accountsPartial({ - feeVault, - config: poolConfig, - pool: virtualPool, - tokenQuoteAccount: tokenVault, - quoteVault: virtualPoolState.quoteVault, - quoteMint: poolConfigState.quoteMint, - tokenBaseProgram: TOKEN_2022_PROGRAM_ID, - tokenQuoteProgram: TOKEN_PROGRAM_ID, - dbcEventAuthority: deriveDbcEventAuthority(), - dbcPoolAuthority: deriveDbcPoolAuthority(), - dbcProgram: DBC_PROGRAM_ID, - }) - .transaction(); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcPoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: poolConfig, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPool, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.quoteVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: poolConfigState.quoteMint, + }, + { + isSigner: false, + isWritable: true, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcEventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DBC_PROGRAM_ID, + }, + ] + const partnerWithdrawSurplusDisc = DynamicBondingCurveIDL.instructions.find(instruction => instruction.name === "partner_withdraw_surplus").discriminator; + const payload = Buffer.from(partnerWithdrawSurplusDisc) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DBC_PROGRAM_ID); +} - tx.recentBlockhash = svm.latestBlockhash(); - tx.sign(feeClaimer); +export async function withdrawMigrationFee( + svm: LiteSVM, + signer: Keypair, + feeVault: PublicKey, + tokenVault: PublicKey, + poolConfig: PublicKey, + virtualPool: PublicKey, + isPartner: number, // 0 as partner and 1 as creator +) { + const virtualPoolState = getVirtualPoolState(svm, virtualPool); + const poolConfigState = getVirtualConfigState(svm, poolConfig); - sendTransactionOrExpectThrowError(svm, tx, true); + const remainingAccounts = [ + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcPoolAuthority(), + }, + { + isSigner: false, + isWritable: true, + pubkey: poolConfig, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPool, + }, + { + isSigner: false, + isWritable: true, + pubkey: tokenVault, + }, + { + isSigner: false, + isWritable: true, + pubkey: virtualPoolState.quoteVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: poolConfigState.quoteMint, + }, + { + isSigner: false, + isWritable: true, + pubkey: feeVault, + }, + { + isSigner: false, + isWritable: false, + pubkey: TOKEN_PROGRAM_ID, + }, + { + isSigner: false, + isWritable: false, + pubkey: deriveDbcEventAuthority(), + }, + { + isSigner: false, + isWritable: false, + pubkey: DBC_PROGRAM_ID, + }, + ] + const withdrawMigrationFeeDisc = DynamicBondingCurveIDL.instructions.find(instruction => instruction.name === "withdraw_migration_fee").discriminator; + const payload = Buffer.concat([Buffer.from(withdrawMigrationFeeDisc), Buffer.from([isPartner])]) + await fundByClaimingFee(svm, signer, feeVault, tokenVault, remainingAccounts, payload, DBC_PROGRAM_ID); } diff --git a/tests/common/index.ts b/tests/common/index.ts index 92891bd..6ba8c02 100644 --- a/tests/common/index.ts +++ b/tests/common/index.ts @@ -48,6 +48,7 @@ export const RAW_AMOUNT = 1_000_000_000 * 10 ** TOKEN_DECIMALS; export const DYNAMIC_FEE_SHARING_PROGRAM_ID = new PublicKey( DynamicFeeSharingIDL.address ); +export const U64_MAX = new BN("18446744073709551615"); export function createProgram(): DynamicFeeSharingProgram { const wallet = new Wallet(Keypair.generate()); diff --git a/tests/common/svm.ts b/tests/common/svm.ts index 6d48139..fb5152c 100644 --- a/tests/common/svm.ts +++ b/tests/common/svm.ts @@ -56,7 +56,7 @@ export function sendTransactionOrExpectThrowError( transaction: Transaction, logging = false, errorCode?: number -): void { +) { const result = svm.sendTransaction(transaction); if (logging) { if (result instanceof TransactionMetadata) { @@ -70,6 +70,8 @@ export function sendTransactionOrExpectThrowError( } else { expect(result).instanceOf(TransactionMetadata); } + + return result } export function generateUsers(svm: LiteSVM, numberOfUsers: number): Keypair[] { From e8057e8771fdc752f56dd99adcf64a232aba4275 Mon Sep 17 00:00:00 2001 From: andrewsource147 <31321699+andrewsource147@users.noreply.github.com> Date: Tue, 14 Oct 2025 10:26:17 +0700 Subject: [PATCH 4/4] validate token vault (#13) --- programs/dynamic-fee-sharing/src/constants.rs | 11 +++++++++- .../instructions/ix_fund_by_claiming_fee.rs | 20 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/programs/dynamic-fee-sharing/src/constants.rs b/programs/dynamic-fee-sharing/src/constants.rs index 182beee..016fb70 100644 --- a/programs/dynamic-fee-sharing/src/constants.rs +++ b/programs/dynamic-fee-sharing/src/constants.rs @@ -10,35 +10,44 @@ pub mod seeds { pub const TOKEN_VAULT_PREFIX: &[u8] = b"token_vault"; } -pub static WHITELISTED_ACTIONS: [(Pubkey, &[u8]); 7] = [ +// (program_id, instruction, index_of_token_vault_account) +// TODO should find a way to avoid hardcoding index of token_vault_account +pub static WHITELISTED_ACTIONS: [(Pubkey, &[u8], usize); 7] = [ // damm v2 ( damm_v2::ID, damm_v2::client::args::ClaimPositionFee::DISCRIMINATOR, + 4, ), ( damm_v2::ID, damm_v2::client::args::ClaimReward::DISCRIMINATOR, + 5, ), // DBC ( dynamic_bonding_curve::ID, dynamic_bonding_curve::client::args::CreatorWithdrawSurplus::DISCRIMINATOR, + 3, ), ( dynamic_bonding_curve::ID, dynamic_bonding_curve::client::args::ClaimCreatorTradingFee::DISCRIMINATOR, + 3, ), ( dynamic_bonding_curve::ID, dynamic_bonding_curve::client::args::PartnerWithdrawSurplus::DISCRIMINATOR, + 3, ), ( dynamic_bonding_curve::ID, dynamic_bonding_curve::client::args::ClaimTradingFee::DISCRIMINATOR, + 4, ), ( dynamic_bonding_curve::ID, dynamic_bonding_curve::client::args::WithdrawMigrationFee::DISCRIMINATOR, + 3, ), ]; diff --git a/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs b/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs index 401520e..4011750 100644 --- a/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs +++ b/programs/dynamic-fee-sharing/src/instructions/ix_fund_by_claiming_fee.rs @@ -22,10 +22,17 @@ pub struct FundByClaimingFeeCtx<'info> { pub source_program: UncheckedAccount<'info>, } -pub fn is_support_action(source_program: &Pubkey, discriminator: &[u8]) -> bool { - for &(program, disc) in WHITELISTED_ACTIONS.iter() { +pub fn is_support_action<'info>( + source_program: &Pubkey, + discriminator: &[u8], + token_vault: Pubkey, + remaining_accounts: &[AccountInfo<'info>], +) -> bool { + for &(program, disc, token_vault_index) in WHITELISTED_ACTIONS.iter() { if program.eq(source_program) && disc.eq(discriminator) { - return true; + if let Some(token_vault_account) = remaining_accounts.get(token_vault_index) { + return token_vault.eq(token_vault_account.key); + } } } false @@ -37,7 +44,12 @@ pub fn handle_fund_by_claiming_fee( ) -> Result<()> { let discriminator = &payload[..8]; // first 8 bytes is discriminator require!( - is_support_action(ctx.accounts.source_program.key, discriminator), + is_support_action( + ctx.accounts.source_program.key, + discriminator, + ctx.accounts.token_vault.key(), + ctx.remaining_accounts + ), FeeVaultError::InvalidAction );

FBuEHByZJ=aO;`uuw2 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 ~TdVKHK>DRLS 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⪙iU; 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 K3*~Pf{{I2W6HKuH literal 0 HcmV?d00001 diff --git a/tests/fixtures/dynamic_bonding_curve.so b/tests/fixtures/dynamic_bonding_curve.so new file mode 100755 index 0000000000000000000000000000000000000000..6a3b548233d6aecaac58c2e508292584ce21bcc3 GIT binary patch literal 1354864 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