diff --git a/.clang-tidy b/.clang-tidy index d8a7cb1b6f..07274eb53a 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,4 +1,6 @@ --- +# This entire group of checks was applied to all cpp files but not all header files. +# --- Checks: "-*, bugprone-argument-comment, bugprone-assert-side-effect, @@ -8,26 +10,26 @@ Checks: "-*, bugprone-chained-comparison, bugprone-compare-pointer-to-member-virtual-function, bugprone-copy-constructor-init, - bugprone-crtp-constructor-accessibility, + # bugprone-crtp-constructor-accessibility, # has issues bugprone-dangling-handle, bugprone-dynamic-static-initializers, - bugprone-empty-catch, + # bugprone-empty-catch, # has issues bugprone-fold-init-type, - bugprone-forward-declaration-namespace, - bugprone-inaccurate-erase, - bugprone-inc-dec-in-conditions, - bugprone-incorrect-enable-if, - bugprone-incorrect-roundings, - bugprone-infinite-loop, - bugprone-integer-division, + # bugprone-forward-declaration-namespace, # has issues + # bugprone-inaccurate-erase, + # bugprone-inc-dec-in-conditions, + # bugprone-incorrect-enable-if, + # bugprone-incorrect-roundings, + # bugprone-infinite-loop, + # bugprone-integer-division, bugprone-lambda-function-name, - bugprone-macro-parentheses, + # bugprone-macro-parentheses, # has issues bugprone-macro-repeated-side-effects, bugprone-misplaced-operator-in-strlen-in-alloc, bugprone-misplaced-pointer-arithmetic-in-alloc, bugprone-misplaced-widening-cast, bugprone-move-forwarding-reference, - bugprone-multi-level-implicit-pointer-conversion, + # bugprone-multi-level-implicit-pointer-conversion, # has issues bugprone-multiple-new-in-one-expression, bugprone-multiple-statement-macro, bugprone-no-escape, @@ -37,13 +39,13 @@ Checks: "-*, bugprone-pointer-arithmetic-on-polymorphic-object, bugprone-posix-return, bugprone-redundant-branch-condition, - bugprone-reserved-identifier, - bugprone-return-const-ref-from-parameter, + # bugprone-reserved-identifier, # has issues + # bugprone-return-const-ref-from-parameter, # has issues bugprone-shared-ptr-array-mismatch, bugprone-signal-handler, bugprone-signed-char-misuse, bugprone-sizeof-container, - bugprone-sizeof-expression, + # bugprone-sizeof-expression, # has issues bugprone-spuriously-wake-up-functions, bugprone-standalone-empty, bugprone-string-constructor, @@ -60,7 +62,7 @@ Checks: "-*, bugprone-suspicious-string-compare, bugprone-suspicious-stringview-data-usage, bugprone-swapped-arguments, - bugprone-switch-missing-default-case, + # bugprone-switch-missing-default-case, # has issues bugprone-terminating-continue, bugprone-throw-keyword-missing, bugprone-too-small-loop-variable, @@ -71,7 +73,7 @@ Checks: "-*, bugprone-unhandled-self-assignment, bugprone-unique-ptr-array-mismatch, bugprone-unsafe-functions, - bugprone-use-after-move, + # bugprone-use-after-move, # has issues bugprone-unused-raii, bugprone-unused-return-value, bugprone-unused-local-non-trivial-variable, @@ -85,9 +87,11 @@ Checks: "-*, cppcoreguidelines-use-default-member-init, cppcoreguidelines-virtual-class-destructor, hicpp-ignored-remove-result, + misc-const-correctness, misc-definitions-in-headers, misc-header-include-cycle, misc-misplaced-const, + misc-redundant-expression, misc-static-assert, misc-throw-by-value-catch-by-reference, misc-unused-alias-decls, @@ -95,46 +99,49 @@ Checks: "-*, modernize-deprecated-headers, modernize-make-shared, modernize-make-unique, + llvm-namespace-comment, + performance-faster-string-find, + performance-for-range-copy, performance-implicit-conversion-in-loop, + performance-inefficient-vector-operation, + performance-move-const-arg, performance-move-constructor-init, + performance-no-automatic-move, performance-trivially-destructible, - readability-avoid-nested-conditional-operator, - readability-avoid-return-with-void-value, - readability-braces-around-statements, - readability-const-return-type, - readability-container-contains, - readability-container-size-empty, + # readability-avoid-nested-conditional-operator, # has issues + # readability-avoid-return-with-void-value, # has issues + # readability-braces-around-statements, # has issues + # readability-const-return-type, # has issues + # readability-container-contains, # has issues + # readability-container-size-empty, # has issues + # readability-convert-member-functions-to-static, # has issues readability-duplicate-include, - readability-else-after-return, - readability-enum-initial-value, - readability-make-member-function-const, + # readability-else-after-return, # has issues + # readability-enum-initial-value, # has issues + # readability-implicit-bool-conversion, # has issues + # readability-make-member-function-const, # has issues + # readability-math-missing-parentheses, # has issues readability-misleading-indentation, readability-non-const-parameter, - readability-redundant-casting, - readability-redundant-declaration, - readability-redundant-inline-specifier, - readability-redundant-member-init, + # readability-redundant-casting, # has issues + # readability-redundant-declaration, # has issues + # readability-redundant-inline-specifier, # has issues + # readability-redundant-member-init, # has issues readability-redundant-string-init, readability-reference-to-constructed-temporary, - readability-static-definition-in-anonymous-namespace, + # readability-simplify-boolean-expr, # has issues + # readability-static-definition-in-anonymous-namespace, # has issues + # readability-suspicious-call-argument, # has issues readability-use-std-min-max " # --- -# checks that have some issues that need to be resolved: +# other checks that have issues that need to be resolved: # -# llvm-namespace-comment, -# misc-const-correctness, # misc-include-cleaner, -# misc-redundant-expression, # -# readability-convert-member-functions-to-static, -# readability-implicit-bool-conversion, -# readability-inconsistent-declaration-parameter-name, -# readability-identifier-naming, -# readability-math-missing-parentheses, -# readability-simplify-boolean-expr, -# readability-suspicious-call-argument, -# readability-static-accessed-through-instance, +# readability-inconsistent-declaration-parameter-name, # in this codebase this check will break a lot of arg names +# readability-static-accessed-through-instance, # this check is probably unnecessary. it makes the code less readable +# readability-identifier-naming, # https://github.com/XRPLF/rippled/pull/6571 # # modernize-concat-nested-namespaces, # modernize-pass-by-value, @@ -148,12 +155,6 @@ Checks: "-*, # modernize-use-starts-ends-with, # modernize-use-std-numbers, # modernize-use-using, -# -# performance-faster-string-find, -# performance-for-range-copy, -# performance-inefficient-vector-operation, -# performance-move-const-arg, -# performance-no-automatic-move, # --- # CheckOptions: @@ -195,5 +196,6 @@ CheckOptions: bugprone-unused-return-value.CheckedReturnTypes: ::std::error_code;::std::error_condition;::std::errc # misc-include-cleaner.IgnoreHeaders: '.*/(detail|impl)/.*;.*(expected|unexpected).*;.*ranges_lower_bound\.h;time.h;stdlib.h;__chrono/.*;fmt/chrono.h;boost/uuid/uuid_hash.hpp' # -# HeaderFilterRegex: '^.*/(src|tests)/.*\.(h|hpp)$' +HeaderFilterRegex: '^.*/(test|xrpl|xrpld)/.*\.(h|hpp)$' +ExcludeHeaderFilterRegex: '^.*/protocol_autogen/.*\.(h|hpp)$' WarningsAsErrors: "*" diff --git a/.github/scripts/levelization/results/ordering.txt b/.github/scripts/levelization/results/ordering.txt index d26a5a1963..38e77dedf8 100644 --- a/.github/scripts/levelization/results/ordering.txt +++ b/.github/scripts/levelization/results/ordering.txt @@ -21,6 +21,7 @@ libxrpl.protocol > xrpl.json libxrpl.protocol > xrpl.protocol libxrpl.protocol_autogen > xrpl.protocol_autogen libxrpl.rdb > xrpl.basics +libxrpl.rdb > xrpl.core libxrpl.rdb > xrpl.rdb libxrpl.resource > xrpl.basics libxrpl.resource > xrpl.json @@ -90,6 +91,7 @@ test.core > xrpl.server test.csf > xrpl.basics test.csf > xrpld.consensus test.csf > xrpl.json +test.csf > xrpl.ledger test.csf > xrpl.protocol test.json > test.jtx test.json > xrpl.json @@ -108,7 +110,6 @@ test.jtx > xrpl.tx test.ledger > test.jtx test.ledger > test.toplevel test.ledger > xrpl.basics -test.ledger > xrpld.app test.ledger > xrpld.core test.ledger > xrpl.ledger test.ledger > xrpl.protocol @@ -125,6 +126,7 @@ test.overlay > xrpl.basics test.overlay > xrpld.app test.overlay > xrpld.overlay test.overlay > xrpld.peerfinder +test.overlay > xrpl.ledger test.overlay > xrpl.nodestore test.overlay > xrpl.protocol test.overlay > xrpl.shamap @@ -183,7 +185,6 @@ xrpl.conditions > xrpl.basics xrpl.conditions > xrpl.protocol xrpl.core > xrpl.basics xrpl.core > xrpl.json -xrpl.core > xrpl.ledger xrpl.core > xrpl.protocol xrpl.json > xrpl.basics xrpl.ledger > xrpl.basics @@ -234,6 +235,7 @@ xrpld.app > xrpl.shamap xrpld.app > xrpl.tx xrpld.consensus > xrpl.basics xrpld.consensus > xrpl.json +xrpld.consensus > xrpl.ledger xrpld.consensus > xrpl.protocol xrpld.core > xrpl.basics xrpld.core > xrpl.core diff --git a/.github/workflows/check-pr-commits.yml b/.github/workflows/check-pr-commits.yml index 07c62c9ff5..37e15a5648 100644 --- a/.github/workflows/check-pr-commits.yml +++ b/.github/workflows/check-pr-commits.yml @@ -1,7 +1,7 @@ name: Check PR commits on: - pull_request: + pull_request_target: # The action needs to have write permissions to post comments on the PR. permissions: @@ -10,4 +10,4 @@ permissions: jobs: check_commits: - uses: XRPLF/actions/.github/workflows/check-pr-commits.yml@481048b78b94ac3343d1292b4ef125a813879f2b + uses: XRPLF/actions/.github/workflows/check-pr-commits.yml@e2c7f400d1e85ae65dad552fd425169fbacca4a3 diff --git a/.github/workflows/check-pr-title.yml b/.github/workflows/check-pr-title.yml index fc03cdf8e1..6d7bdefa08 100644 --- a/.github/workflows/check-pr-title.yml +++ b/.github/workflows/check-pr-title.yml @@ -11,4 +11,4 @@ on: jobs: check_title: if: ${{ github.event.pull_request.draft != true }} - uses: XRPLF/actions/.github/workflows/check-pr-title.yml@e2c7f400d1e85ae65dad552fd425169fbacca4a3 + uses: XRPLF/actions/.github/workflows/check-pr-title.yml@a5d8dd35be543365e90a11358447130c8763871d diff --git a/.github/workflows/conflicting-pr.yml b/.github/workflows/conflicting-pr.yml new file mode 100644 index 0000000000..6e667632a0 --- /dev/null +++ b/.github/workflows/conflicting-pr.yml @@ -0,0 +1,25 @@ +name: Label PRs with merge conflicts + +on: + # So that PRs touching the same files as the push are updated. + push: + # So that the `dirtyLabel` is removed if conflicts are resolved. + # We recommend `pull_request_target` so that github secrets are available. + # In `pull_request` we wouldn't be able to change labels of fork PRs. + pull_request_target: + types: [synchronize] + +permissions: + pull-requests: write + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Check if PRs are dirty + uses: eps1lon/actions-label-merge-conflict@1df065ebe6e3310545d4f4c4e862e43bdca146f0 # v3.0.3 + with: + dirtyLabel: "PR: has conflicts" + repoToken: "${{ secrets.GITHUB_TOKEN }}" + commentOnDirty: "This PR has conflicts, please resolve them in order for the PR to be reviewed." + commentOnClean: "All conflicts have been resolved. Assigned reviewers can now start or resume their review." diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 5cc99d1804..89255f0e47 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -14,7 +14,7 @@ on: jobs: # Call the workflow in the XRPLF/actions repo that runs the pre-commit hooks. run-hooks: - uses: XRPLF/actions/.github/workflows/pre-commit.yml@e7896f15cc60d0da1a272c77ee5c4026b424f9c7 + uses: XRPLF/actions/.github/workflows/pre-commit.yml@9307df762265e15c745ddcdb38a581c989f7f349 with: runs_on: ubuntu-latest container: '{ "image": "ghcr.io/xrplf/ci/tools-rippled-pre-commit:sha-41ec7c1" }' diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 4b840405bb..bed97cfafa 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -6,7 +6,6 @@ on: push: branches: - "develop" - - "release*" paths: - ".github/workflows/publish-docs.yml" - "*.md" @@ -37,7 +36,7 @@ env: BUILD_DIR: build # ubuntu-latest has only 2 CPUs for private repositories # https://docs.github.com/en/actions/reference/runners/github-hosted-runners#standard-github-hosted-runners-for--private-repositories - NPROC_SUBTRACT: ${{ github.event.repository.private && '1' || '2' }} + NPROC_SUBTRACT: ${{ github.event.repository.visibility == 'public' && '2' || '1' }} jobs: build: @@ -48,7 +47,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Prepare runner - uses: XRPLF/actions/prepare-runner@2bbc2dc1abeec7bfaa886804ab86871ac201764e + uses: XRPLF/actions/prepare-runner@90f11ee655d1687824fb8793db770477d52afbab with: enable_ccache: false @@ -82,13 +81,13 @@ jobs: cmake --build . --target docs --parallel ${BUILD_NPROC} - name: Create documentation artifact - if: ${{ github.event_name == 'push' }} + if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && github.event_name == 'push' }} uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0 with: path: ${{ env.BUILD_DIR }}/docs/html deploy: - if: ${{ github.event_name == 'push' }} + if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && github.event_name == 'push' }} needs: build runs-on: ubuntu-latest permissions: @@ -100,4 +99,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deploy - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 + uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index 1cc768f9fa..c79b22ac54 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -107,7 +107,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Prepare runner - uses: XRPLF/actions/prepare-runner@2bbc2dc1abeec7bfaa886804ab86871ac201764e + uses: XRPLF/actions/prepare-runner@90f11ee655d1687824fb8793db770477d52afbab with: enable_ccache: ${{ inputs.ccache_enabled }} @@ -199,7 +199,7 @@ jobs: fi - name: Upload the binary (Linux) - if: ${{ github.repository == 'XRPLF/rippled' && runner.os == 'Linux' }} + if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && runner.os == 'Linux' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: xrpld-${{ inputs.config_name }} @@ -298,7 +298,7 @@ jobs: - name: Upload coverage report if: ${{ github.repository == 'XRPLF/rippled' && !inputs.build_only && env.COVERAGE_ENABLED == 'true' }} - uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # v5.5.3 + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 with: disable_search: true disable_telem: true diff --git a/.github/workflows/reusable-clang-tidy-files.yml b/.github/workflows/reusable-clang-tidy-files.yml index 5d3230f7d1..b6c66bc27a 100644 --- a/.github/workflows/reusable-clang-tidy-files.yml +++ b/.github/workflows/reusable-clang-tidy-files.yml @@ -35,7 +35,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Prepare runner - uses: XRPLF/actions/prepare-runner@2bbc2dc1abeec7bfaa886804ab86871ac201764e + uses: XRPLF/actions/prepare-runner@90f11ee655d1687824fb8793db770477d52afbab with: enable_ccache: false @@ -80,10 +80,10 @@ jobs: env: TARGETS: ${{ inputs.files != '' && inputs.files || 'src tests' }} run: | - run-clang-tidy -j ${{ steps.nproc.outputs.nproc }} -p "${BUILD_DIR}" ${TARGETS} 2>&1 | tee clang-tidy-output.txt + run-clang-tidy -j ${{ steps.nproc.outputs.nproc }} -p "${BUILD_DIR}" -quiet -allow-no-checks ${TARGETS} 2>&1 | tee clang-tidy-output.txt - name: Upload clang-tidy output - if: steps.run_clang_tidy.outcome != 'success' + if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && steps.run_clang_tidy.outcome != 'success' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: clang-tidy-results diff --git a/.github/workflows/reusable-clang-tidy.yml b/.github/workflows/reusable-clang-tidy.yml index 3d4bc3b2e3..4c927dec9f 100644 --- a/.github/workflows/reusable-clang-tidy.yml +++ b/.github/workflows/reusable-clang-tidy.yml @@ -51,5 +51,5 @@ jobs: if: ${{ always() && !cancelled() && (!inputs.check_only_changed || needs.determine-files.outputs.any_cpp_changed == 'true' || needs.determine-files.outputs.clang_tidy_config_changed == 'true') }} uses: ./.github/workflows/reusable-clang-tidy-files.yml with: - files: ${{ needs.determine-files.outputs.clang_tidy_config_changed == 'true' && '' || (inputs.check_only_changed && needs.determine-files.outputs.all_changed_files || '') }} + files: ${{ (needs.determine-files.outputs.clang_tidy_config_changed != 'true' && inputs.check_only_changed) && needs.determine-files.outputs.all_changed_files || '' }} create_issue_on_failure: ${{ inputs.create_issue_on_failure }} diff --git a/.github/workflows/upload-conan-deps.yml b/.github/workflows/upload-conan-deps.yml index 832e455453..f14efde05b 100644 --- a/.github/workflows/upload-conan-deps.yml +++ b/.github/workflows/upload-conan-deps.yml @@ -70,7 +70,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Prepare runner - uses: XRPLF/actions/prepare-runner@2bbc2dc1abeec7bfaa886804ab86871ac201764e + uses: XRPLF/actions/prepare-runner@90f11ee655d1687824fb8793db770477d52afbab with: enable_ccache: false diff --git a/.gitignore b/.gitignore index 643f0d25dc..7ee6d0c70a 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,8 @@ DerivedData /.zed/ # AI tools. +/.agent +/.agents /.augment /.claude /CLAUDE.md diff --git a/BUILD.md b/BUILD.md index 4d01700a61..757f76a716 100644 --- a/BUILD.md +++ b/BUILD.md @@ -125,9 +125,9 @@ default profile. ### Patched recipes -The recipes in Conan Center occasionally need to be patched for compatibility -with the latest version of `xrpld`. We maintain a fork of the Conan Center -[here](https://github.com/XRPLF/conan-center-index/) containing the patches. +Occasionally, we need patched recipes or recipes not present in Conan Center. +We maintain a fork of the Conan Center Index +[here](https://github.com/XRPLF/conan-center-index/) containing the modified and newly added recipes. To ensure our patched recipes are used, you must add our Conan remote at a higher index than the default Conan Center remote, so it is consulted first. You @@ -137,19 +137,11 @@ can do this by running: conan remote add --index 0 xrplf https://conan.ripplex.io ``` -Alternatively, you can pull the patched recipes into the repository and use them -locally: +Alternatively, you can pull our recipes from the repository and export them locally: ```bash -# Extract the version number from the lockfile. -function extract_version { - version=$(cat conan.lock | sed -nE "s@.+${1}/(.+)#.+@\1@p" | head -n1) - echo ${version} -} - # Define which recipes to export. -recipes=('ed25519' 'grpc' 'nudb' 'openssl' 'secp256k1' 'snappy' 'soci') -folders=('all' 'all' 'all' '3.x.x' 'all' 'all' 'all') +recipes=('abseil' 'ed25519' 'grpc' 'm4' 'mpt-crypto' 'openssl' 'secp256k1' 'snappy' 'soci' 'wasm-xrplf' 'wasmi') # Selectively check out the recipes from our CCI fork. cd external @@ -158,29 +150,19 @@ cd conan-center-index git init git remote add origin git@github.com:XRPLF/conan-center-index.git git sparse-checkout init -for ((index = 1; index <= ${#recipes[@]}; index++)); do - recipe=${recipes[index]} - folder=${folders[index]} - echo "Checking out recipe '${recipe}' from folder '${folder}'..." - git sparse-checkout add recipes/${recipe}/${folder} +for recipe in "${recipes[@]}"; do + echo "Checking out recipe '${recipe}'..." + git sparse-checkout add recipes/${recipe} done git fetch origin master git checkout master -cd ../.. -# Export the recipes into the local cache. -for ((index = 1; index <= ${#recipes[@]}; index++)); do - recipe=${recipes[index]} - folder=${folders[index]} - version=$(extract_version ${recipe}) - echo "Exporting '${recipe}/${version}' from '${recipe}/${folder}'..." - conan export --version $(extract_version ${recipe}) \ - external/conan-center-index/recipes/${recipe}/${folder} -done +./export_all.sh +cd ../../ ``` In the case we switch to a newer version of a dependency that still requires a -patch, it will be necessary for you to pull in the changes and re-export the +patch or add a new dependency, it will be necessary for you to pull in the changes and re-export the updated dependencies with the newer version. However, if we switch to a newer version that no longer requires a patch, no action is required on your part, as the new recipe will be automatically pulled from the official Conan Center. @@ -189,6 +171,8 @@ the new recipe will be automatically pulled from the official Conan Center. > You might need to add `--lockfile=""` to your `conan install` command > to avoid automatic use of the existing `conan.lock` file when you run > `conan export` manually on your machine +> +> This is not recommended though, as you might end up using different revisions of recipes. ### Conan profile tweaks @@ -204,39 +188,14 @@ Possible values are ['5.0', '5.1', '6.0', '6.1', '7.0', '7.3', '8.0', '8.1', Read "http://docs.conan.io/2/knowledge/faq.html#error-invalid-setting" ``` -you need to amend the list of compiler versions in -`$(conan config home)/settings.yml`, by appending the required version number(s) +you need to add your compiler to the list of compiler versions in +`$(conan config home)/settings_user.yml`, by adding the required version number(s) to the `version` array specific for your compiler. For example: ```yaml -apple-clang: - version: - [ - "5.0", - "5.1", - "6.0", - "6.1", - "7.0", - "7.3", - "8.0", - "8.1", - "9.0", - "9.1", - "10.0", - "11.0", - "12.0", - "13", - "13.0", - "13.1", - "14", - "14.0", - "15", - "15.0", - "16", - "16.0", - "17", - "17.0", - ] +compiler: + apple-clang: + version: ["17.0"] ``` #### Multiple compilers diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86bef765a5..d19222dbf0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -259,6 +259,10 @@ There is a Continuous Integration job that runs clang-tidy on pull requests. The This ensures that configuration changes don't introduce new warnings across the codebase. +### Installing clang-tidy + +See the [environment setup guide](./docs/build/environment.md#clang-tidy) for platform-specific installation instructions. + ### Running clang-tidy locally Before running clang-tidy, you must build the project to generate required files (particularly protobuf headers). Refer to [`BUILD.md`](./BUILD.md) for build instructions. @@ -266,10 +270,15 @@ Before running clang-tidy, you must build the project to generate required files Then run clang-tidy on your local changes: ``` -run-clang-tidy -p build src tests +run-clang-tidy -p build -allow-no-checks src tests ``` -This will check all source files in the `src` and `tests` directories using the compile commands from your `build` directory. +This will check all source files in the `src`, `include` and `tests` directories using the compile commands from your `build` directory. +If you wish to automatically fix whatever clang-tidy finds _and_ is capable of fixing, add `-fix` to the above command: + +``` +run-clang-tidy -p build -quiet -fix -allow-no-checks src tests +``` ## Contracts and instrumentation diff --git a/LICENSE.md b/LICENSE.md index c5e3ad0532..7e6e62994c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,7 @@ ISC License Copyright (c) 2011, Arthur Britto, David Schwartz, Jed McCaleb, Vinnie Falco, Bob Way, Eric Lombrozo, Nikolaos D. Bougalis, Howard Hinnant. -Copyright (c) 2012-2025, the XRP Ledger developers. +Copyright (c) 2012-present, the XRP Ledger developers. Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above diff --git a/cmake/XrplProtocolAutogen.cmake b/cmake/XrplProtocolAutogen.cmake index 44857712cd..e48d28959d 100644 --- a/cmake/XrplProtocolAutogen.cmake +++ b/cmake/XrplProtocolAutogen.cmake @@ -140,6 +140,28 @@ function(setup_protocol_autogen) ) endif() + # Check pip index URL configuration + execute_process( + COMMAND ${VENV_PIP} config get global.index-url + OUTPUT_VARIABLE PIP_INDEX_URL + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + + # Default PyPI URL + set(DEFAULT_PIP_INDEX "https://pypi.org/simple") + + # Show warning if using non-default index + if(PIP_INDEX_URL AND NOT PIP_INDEX_URL STREQUAL "") + if(NOT PIP_INDEX_URL STREQUAL DEFAULT_PIP_INDEX) + message( + WARNING + "Private pip index URL detected: ${PIP_INDEX_URL}\n" + "You may need to connect to VPN to access this URL." + ) + endif() + endif() + message(STATUS "Installing Python dependencies...") execute_process( COMMAND ${VENV_PIP} install --upgrade pip diff --git a/conan.lock b/conan.lock index 25bd9ad52a..8fbdb68d89 100644 --- a/conan.lock +++ b/conan.lock @@ -1,60 +1,58 @@ { "version": "0.5", "requires": [ - "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1765850150.075", + "zlib/1.3.1#cac0f6daea041b0ccf42934163defb20%1774439233.809", "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1765850149.987", "wasmi/1.0.6#407c9db14601a8af1c7dd3b388f3e4cd%1768164779.349", - "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1765850149.926", - "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1765850149.46", + "sqlite3/3.51.0#66aa11eabd0e34954c5c1c061ad44abe%1774467355.988", + "soci/4.0.3#fe32b9ad5eb47e79ab9e45a68f363945%1774450067.231", "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1765850147.878", - "secp256k1/0.7.1#3a61e95e220062ef32c48d019e9c81f7%1770306721.686", + "secp256k1/0.7.1#481881709eb0bdd0185a12b912bbe8ad%1770910500.329", "rocksdb/10.5.1#4a197eca381a3e5ae8adf8cffa5aacd0%1765850186.86", - "re2/20230301#ca3b241baec15bd31ea9187150e0b333%1765850148.103", - "protobuf/6.32.1#f481fd276fc23a33b85a3ed1e898b693%1765850161.038", - "openssl/3.5.5#05a4ac5b7323f7a329b2db1391d9941f%1769599205.414", - "nudb/2.0.9#0432758a24204da08fee953ec9ea03cb%1769436073.32", + "re2/20251105#8579cfd0bda4daf0683f9e3898f964b4%1774398111.888", + "protobuf/6.33.5#d96d52ba5baaaa532f47bda866ad87a5%1774467363.12", + "openssl/3.6.1#e6399de266349245a4542fc5f6c71552%1774458290.139", + "nudb/2.0.9#11149c73f8f2baff9a0198fe25971fc7%1774883011.384", "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504%1765850143.914", "libiconv/1.17#1e65319e945f2d31941a9d28cc13c058%1765842973.492", "libbacktrace/cci.20210118#a7691bfccd8caaf66309df196790a5a1%1765842973.03", "libarchive/3.8.1#ffee18995c706e02bf96e7a2f7042e0d%1765850144.736", "jemalloc/5.3.0#e951da9cf599e956cebc117880d2d9f8%1729241615.244", "gtest/1.17.0#5224b3b3ff3b4ce1133cbdd27d53ee7d%1768312129.152", - "grpc/1.72.0#f244a57bff01e708c55a1100b12e1589%1765850193.734", + "grpc/1.78.1#b1a9e74b145cc471bed4dc64dc6eb2c1%1774467387.342", "ed25519/2015.03#ae761bdc52730a843f0809bdf6c1b1f6%1765850143.772", "date/3.0.4#862e11e80030356b53c2c38599ceb32b%1765850143.772", - "c-ares/1.34.5#5581c2b62a608b40bb85d965ab3ec7c8%1765850144.336", + "c-ares/1.34.6#545240bb1c40e2cacd4362d6b8967650%1774439234.681", "bzip2/1.0.8#c470882369c2d95c5c77e970c0c7e321%1765850143.837", "boost/1.90.0#d5e8defe7355494953be18524a7f135b%1769454080.269", - "abseil/20250127.0#99262a368bd01c0ccca8790dfced9719%1766517936.993" + "abseil/20250127.0#bb0baf1f362bc4a725a24eddd419b8f7%1774365460.196" ], "build_requires": [ - "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1765850150.075", - "strawberryperl/5.32.1.1#707032463aa0620fa17ec0d887f5fe41%1765850165.196", - "protobuf/6.32.1#f481fd276fc23a33b85a3ed1e898b693%1765850161.038", + "zlib/1.3.1#cac0f6daea041b0ccf42934163defb20%1774439233.809", + "strawberryperl/5.32.1.1#8d114504d172cfea8ea1662d09b6333e%1774447376.964", + "protobuf/6.33.5#d96d52ba5baaaa532f47bda866ad87a5%1774467363.12", "nasm/2.16.01#31e26f2ee3c4346ecd347911bd126904%1765850144.707", - "msys2/cci.latest#eea83308ad7e9023f7318c60d5a9e6cb%1770199879.083", - "m4/1.4.19#70dc8bbb33e981d119d2acc0175cf381%1763158052.846", - "cmake/4.2.0#ae0a44f44a1ef9ab68fd4b3e9a1f8671%1765850153.937", - "cmake/3.31.10#313d16a1aa16bbdb2ca0792467214b76%1765850153.479", - "b2/5.3.3#107c15377719889654eb9a162a673975%1765850144.355", + "msys2/cci.latest#d22fe7b2808f5fd34d0a7923ace9c54f%1770657326.649", + "m4/1.4.19#5d7a4994e5875d76faf7acf3ed056036%1774365463.87", + "cmake/4.3.0#b939a42e98f593fb34d3a8c5cc860359%1774439249.183", + "b2/5.4.2#ffd6084a119587e70f11cd45d1a386e2%1774439233.447", "automake/1.16.5#b91b7c384c3deaa9d535be02da14d04f%1755524470.56", "autoconf/2.71#51077f068e61700d65bb05541ea1e4b0%1731054366.86", - "abseil/20250127.0#99262a368bd01c0ccca8790dfced9719%1766517936.993" + "abseil/20250127.0#bb0baf1f362bc4a725a24eddd419b8f7%1774365460.196" ], "python_requires": [], "overrides": { - "boost/1.90.0#d5e8defe7355494953be18524a7f135b": [ - null, - "boost/1.90.0" - ], - "protobuf/5.27.0": [ - "protobuf/6.32.1" + "protobuf/[>=5.27.0 <7]": [ + "protobuf/6.33.5" ], "lz4/1.9.4": [ "lz4/1.10.0" ], - "sqlite3/3.44.2": [ - "sqlite3/3.49.1" + "boost/[>=1.83.0 <1.91.0]": [ + "boost/1.90.0" + ], + "sqlite3/[>=3.44 <4]": [ + "sqlite3/3.51.0" ], "boost/1.83.0": [ "boost/1.90.0" diff --git a/conanfile.py b/conanfile.py index 3eed63bf08..d62a182e1a 100644 --- a/conanfile.py +++ b/conanfile.py @@ -1,10 +1,9 @@ -import re import os +import re from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout from conan import ConanFile -from conan import __version__ as conan_version class Xrpl(ConanFile): @@ -30,10 +29,10 @@ class Xrpl(ConanFile): requires = [ "ed25519/2015.03", - "grpc/1.72.0", + "grpc/1.78.1", "libarchive/3.8.1", "nudb/2.0.9", - "openssl/3.5.5", + "openssl/3.6.1", "secp256k1/0.7.1", "soci/4.0.3", "wasmi/1.0.6", @@ -45,7 +44,7 @@ class Xrpl(ConanFile): ] tool_requires = [ - "protobuf/6.32.1", + "protobuf/6.33.5", ] default_options = { @@ -138,20 +137,16 @@ class Xrpl(ConanFile): self.default_options["fPIC"] = False def requirements(self): - # Conan 2 requires transitive headers to be specified - transitive_headers_opt = ( - {"transitive_headers": True} if conan_version.split(".")[0] == "2" else {} - ) - self.requires("boost/1.90.0", force=True, **transitive_headers_opt) - self.requires("date/3.0.4", **transitive_headers_opt) + self.requires("boost/1.90.0", force=True, transitive_headers=True) + self.requires("date/3.0.4", transitive_headers=True) self.requires("lz4/1.10.0", force=True) - self.requires("protobuf/6.32.1", force=True) - self.requires("sqlite3/3.49.1", force=True) + self.requires("protobuf/6.33.5", force=True) + self.requires("sqlite3/3.51.0", force=True) if self.options.jemalloc: self.requires("jemalloc/5.3.0") if self.options.rocksdb: self.requires("rocksdb/10.5.1") - self.requires("xxhash/0.8.3", **transitive_headers_opt) + self.requires("xxhash/0.8.3", transitive_headers=True) exports_sources = ( "CMakeLists.txt", diff --git a/docs/build/environment.md b/docs/build/environment.md index c67877a082..66bed06c26 100644 --- a/docs/build/environment.md +++ b/docs/build/environment.md @@ -109,3 +109,32 @@ Install CMake with Homebrew too: ``` brew install cmake ``` + +## Clang-tidy + +Clang-tidy is required to run static analysis checks locally (see [CONTRIBUTING.md](../../CONTRIBUTING.md)). +It is not required to build the project. Currently this project uses clang-tidy version 21. + +### Linux + +LLVM 21 is not available in the default Debian 12 (Bookworm) repositories. +Install it using the official LLVM apt installer: + +``` +wget https://apt.llvm.org/llvm.sh +chmod +x llvm.sh +sudo ./llvm.sh 21 +sudo apt install --yes clang-tidy-21 +``` + +Then use `run-clang-tidy-21` when running clang-tidy locally. + +### macOS + +Install LLVM 21 via Homebrew: + +``` +brew install llvm@21 +``` + +Then use `run-clang-tidy` from the LLVM 21 Homebrew prefix when running clang-tidy locally. diff --git a/include/xrpl/basics/BasicConfig.h b/include/xrpl/basics/BasicConfig.h index f02bf07a83..eaa53f93d6 100644 --- a/include/xrpl/basics/BasicConfig.h +++ b/include/xrpl/basics/BasicConfig.h @@ -311,7 +311,7 @@ template bool set(T& target, T const& defaultValue, std::string const& name, Section const& section) { - bool found_and_valid = set(target, name, section); + bool const found_and_valid = set(target, name, section); if (!found_and_valid) target = defaultValue; return found_and_valid; diff --git a/include/xrpl/basics/CountedObject.h b/include/xrpl/basics/CountedObject.h index 55a895dbb1..acf75360e1 100644 --- a/include/xrpl/basics/CountedObject.h +++ b/include/xrpl/basics/CountedObject.h @@ -34,7 +34,7 @@ public: { // Insert ourselves at the front of the lock-free linked list CountedObjects& instance = CountedObjects::getInstance(); - Counter* head; + Counter* head = nullptr; do { diff --git a/include/xrpl/basics/DecayingSample.h b/include/xrpl/basics/DecayingSample.h index a8d6a2360e..d3343535e9 100644 --- a/include/xrpl/basics/DecayingSample.h +++ b/include/xrpl/basics/DecayingSample.h @@ -93,7 +93,7 @@ class DecayWindow public: using time_point = typename Clock::time_point; - explicit DecayWindow(time_point now) : value_(0), when_(now) + explicit DecayWindow(time_point now) : when_(now) { } @@ -125,7 +125,7 @@ private: when_ = now; } - double value_; + double value_{0}; time_point when_; }; diff --git a/include/xrpl/basics/IntrusivePointer.h b/include/xrpl/basics/IntrusivePointer.h index e6261be340..f816af1c05 100644 --- a/include/xrpl/basics/IntrusivePointer.h +++ b/include/xrpl/basics/IntrusivePointer.h @@ -84,7 +84,8 @@ public: template requires std::convertible_to - SharedIntrusive(SharedIntrusive&& rhs); + SharedIntrusive( + SharedIntrusive&& rhs); // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) SharedIntrusive& operator=(SharedIntrusive const& rhs); @@ -106,7 +107,8 @@ public: template requires std::convertible_to SharedIntrusive& - operator=(SharedIntrusive&& rhs); + operator=( + SharedIntrusive&& rhs); // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) /** Adopt the raw pointer. The strong reference may or may not be incremented, depending on the TAdoptTag @@ -314,7 +316,8 @@ public: template requires std::convertible_to - SharedWeakUnion(SharedIntrusive&& rhs); + SharedWeakUnion( + SharedIntrusive&& rhs); // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) SharedWeakUnion& operator=(SharedWeakUnion const& rhs); @@ -327,7 +330,8 @@ public: template requires std::convertible_to SharedWeakUnion& - operator=(SharedIntrusive&& rhs); + operator=( + SharedIntrusive&& rhs); // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) ~SharedWeakUnion(); diff --git a/include/xrpl/basics/IntrusivePointer.ipp b/include/xrpl/basics/IntrusivePointer.ipp index de57e61ba6..59caf5a931 100644 --- a/include/xrpl/basics/IntrusivePointer.ipp +++ b/include/xrpl/basics/IntrusivePointer.ipp @@ -68,9 +68,7 @@ SharedIntrusive::operator=(SharedIntrusive const& rhs) template template -// clang-format off -requires std::convertible_to -// clang-format on + requires std::convertible_to SharedIntrusive& SharedIntrusive::operator=(SharedIntrusive const& rhs) { @@ -101,9 +99,7 @@ SharedIntrusive::operator=(SharedIntrusive&& rhs) template template -// clang-format off -requires std::convertible_to -// clang-format on + requires std::convertible_to SharedIntrusive& SharedIntrusive::operator=(SharedIntrusive&& rhs) { @@ -307,9 +303,7 @@ WeakIntrusive::WeakIntrusive(SharedIntrusive const& rhs) : ptr_{rhs.unsafe template template -// clang-format off -requires std::convertible_to -// clang-format on + requires std::convertible_to WeakIntrusive& WeakIntrusive::operator=(SharedIntrusive const& rhs) { @@ -454,9 +448,7 @@ SharedWeakUnion::operator=(SharedWeakUnion const& rhs) template template -// clang-format off -requires std::convertible_to -// clang-format on + requires std::convertible_to SharedWeakUnion& SharedWeakUnion::operator=(SharedIntrusive const& rhs) { @@ -470,9 +462,7 @@ SharedWeakUnion::operator=(SharedIntrusive const& rhs) template template -// clang-format off -requires std::convertible_to -// clang-format on + requires std::convertible_to SharedWeakUnion& SharedWeakUnion::operator=(SharedIntrusive&& rhs) { diff --git a/include/xrpl/basics/IntrusiveRefCounts.h b/include/xrpl/basics/IntrusiveRefCounts.h index 3b2be5c625..5a51b3c3bf 100644 --- a/include/xrpl/basics/IntrusiveRefCounts.h +++ b/include/xrpl/basics/IntrusiveRefCounts.h @@ -448,7 +448,7 @@ inline void partialDestructorFinished(T** o) { T& self = **o; - IntrusiveRefCounts::RefCountPair p = + IntrusiveRefCounts::RefCountPair const p = self.refCounts.fetch_or(IntrusiveRefCounts::partialDestroyFinishedMask); XRPL_ASSERT( (!p.partialDestroyFinishedBit && p.partialDestroyStartedBit && !p.strong), diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index e22319b69c..e2efcdfbef 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -73,12 +73,12 @@ struct MantissaRange enum mantissa_scale { small, large }; explicit constexpr MantissaRange(mantissa_scale scale_) - : min(getMin(scale_)), max(min * 10 - 1), log(logTen(min).value_or(-1)), scale(scale_) + : min(getMin(scale_)), log(logTen(min).value_or(-1)), scale(scale_) { } rep min; - rep max; + rep max{min * 10 - 1}; int log; mantissa_scale scale; diff --git a/include/xrpl/basics/SlabAllocator.h b/include/xrpl/basics/SlabAllocator.h index d7ca3a87f1..4ed88a32f7 100644 --- a/include/xrpl/basics/SlabAllocator.h +++ b/include/xrpl/basics/SlabAllocator.h @@ -91,10 +91,10 @@ class SlabAllocator std::uint8_t* allocate() noexcept { - std::uint8_t* ret; + std::uint8_t* ret = nullptr; // NOLINT(misc-const-correctness) { - std::lock_guard l(m_); + std::lock_guard const l(m_); ret = l_; @@ -123,7 +123,7 @@ class SlabAllocator { XRPL_ASSERT(own(ptr), "xrpl::SlabAllocator::SlabBlock::deallocate : own input"); - std::lock_guard l(m_); + std::lock_guard const l(m_); // Use memcpy to avoid unaligned UB // (will optimize to equivalent code) @@ -210,16 +210,13 @@ public: // No slab can satisfy our request, so we attempt to allocate a new // one here: - std::size_t size = slabSize_; + std::size_t const size = slabSize_; // We want to allocate the memory at a 2 MiB boundary, to make it // possible to use hugepage mappings on Linux: auto buf = boost::alignment::aligned_alloc(megabytes(std::size_t(2)), size); - - // clang-format off if (!buf) [[unlikely]] return nullptr; - // clang-format on #if BOOST_OS_LINUX // When allocating large blocks, attempt to leverage Linux's diff --git a/include/xrpl/basics/StringUtilities.h b/include/xrpl/basics/StringUtilities.h index 9cf6cd315d..592eee6d53 100644 --- a/include/xrpl/basics/StringUtilities.h +++ b/include/xrpl/basics/StringUtilities.h @@ -66,12 +66,12 @@ strUnHex(std::size_t strSize, Iterator begin, Iterator end) while (iter != end) { - int cHigh = digitLookupTable[*iter++]; + int const cHigh = digitLookupTable[*iter++]; if (cHigh < 0) return {}; - int cLow = digitLookupTable[*iter++]; + int const cLow = digitLookupTable[*iter++]; if (cLow < 0) return {}; diff --git a/include/xrpl/basics/TaggedCache.h b/include/xrpl/basics/TaggedCache.h index 6cbe8680c9..1a19c653bc 100644 --- a/include/xrpl/basics/TaggedCache.h +++ b/include/xrpl/basics/TaggedCache.h @@ -182,8 +182,7 @@ private: : hook(collector->make_hook(handler)) , size(collector->make_gauge(prefix, "size")) , hit_rate(collector->make_gauge(prefix, "hit_rate")) - , hits(0) - , misses(0) + { } @@ -191,8 +190,8 @@ private: beast::insight::Gauge size; beast::insight::Gauge hit_rate; - std::size_t hits; - std::size_t misses; + std::size_t hits{0}; + std::size_t misses{0}; }; class KeyOnlyEntry @@ -294,10 +293,10 @@ private: clock_type::duration const m_target_age; // Number of items cached - int m_cache_count; + int m_cache_count{0}; cache_type m_cache; // Hold strong reference to recent objects - std::uint64_t m_hits; - std::uint64_t m_misses; + std::uint64_t m_hits{0}; + std::uint64_t m_misses{0}; }; } // namespace xrpl diff --git a/include/xrpl/basics/TaggedCache.ipp b/include/xrpl/basics/TaggedCache.ipp index 8c0fde5e7d..6879ad435d 100644 --- a/include/xrpl/basics/TaggedCache.ipp +++ b/include/xrpl/basics/TaggedCache.ipp @@ -36,9 +36,7 @@ inline TaggedCache< , m_name(name) , m_target_size(size) , m_target_age(expiration) - , m_cache_count(0) - , m_hits(0) - , m_misses(0) + { } diff --git a/include/xrpl/basics/base_uint.h b/include/xrpl/basics/base_uint.h index 6d2a0b9939..5fb13319ea 100644 --- a/include/xrpl/basics/base_uint.h +++ b/include/xrpl/basics/base_uint.h @@ -212,7 +212,7 @@ private: while (in != sv.end()) { std::uint32_t accum = {}; - for (std::uint32_t shift : {4u, 0u, 12u, 8u, 20u, 16u, 28u, 24u}) + for (std::uint32_t const shift : {4u, 0u, 12u, 8u, 20u, 16u, 28u, 24u}) { if (auto const result = hexCharToUInt(*in++, shift, accum); result != ParseResult::okay) @@ -335,11 +335,13 @@ public: operator=(std::uint64_t uHost) { *this = beast::zero; + // NOLINTBEGIN(cppcoreguidelines-pro-type-member-init) union { unsigned u[2]; std::uint64_t ul; }; + // NOLINTEND(cppcoreguidelines-pro-type-member-init) // Put in least significant bits. ul = boost::endian::native_to_big(uHost); data_[WIDTH - 2] = u[0]; @@ -444,7 +446,7 @@ public: for (int i = WIDTH; i--;) { - std::uint64_t n = carry + boost::endian::big_to_native(data_[i]) + + std::uint64_t const n = carry + boost::endian::big_to_native(data_[i]) + boost::endian::big_to_native(b.data_[i]); data_[i] = boost::endian::native_to_big(static_cast(n)); @@ -621,7 +623,7 @@ template <> inline std::size_t extract(uint256 const& key) { - std::size_t result; + std::size_t result = 0; // Use memcpy to avoid unaligned UB // (will optimize to equivalent code) std::memcpy(&result, key.data(), sizeof(std::size_t)); diff --git a/include/xrpl/basics/contract.h b/include/xrpl/basics/contract.h index f41c272b61..e2d6dafe55 100644 --- a/include/xrpl/basics/contract.h +++ b/include/xrpl/basics/contract.h @@ -54,7 +54,7 @@ Throw(Args&&... args) E e(std::forward(args)...); LogThrow(std::string("Throwing exception of type " + beast::type_name() + ": ") + e.what()); - throw e; + throw std::move(e); } /** Called when faulty logic causes a broken invariant. */ diff --git a/include/xrpl/basics/hardened_hash.h b/include/xrpl/basics/hardened_hash.h index b05ecda7a6..05e6ab417f 100644 --- a/include/xrpl/basics/hardened_hash.h +++ b/include/xrpl/basics/hardened_hash.h @@ -32,7 +32,7 @@ make_seed_pair() noexcept // state_t& operator=(state_t const&) = delete; }; static state_t state; - std::lock_guard lock(state.mutex); + std::lock_guard const lock(state.mutex); return {state.dist(state.gen), state.dist(state.gen)}; } diff --git a/include/xrpl/basics/random.h b/include/xrpl/basics/random.h index 399439c023..db66b303d4 100644 --- a/include/xrpl/basics/random.h +++ b/include/xrpl/basics/random.h @@ -14,11 +14,13 @@ namespace xrpl { #ifndef __INTELLISENSE__ static_assert( + // NOLINTNEXTLINE(misc-redundant-expression) std::is_integral::value && std::is_unsigned::value, "The Ripple default PRNG engine must return an unsigned integral type."); static_assert( + // NOLINTNEXTLINE(misc-redundant-expression) std::numeric_limits::max() >= std::numeric_limits::max(), "The Ripple default PRNG engine return must be at least 64 bits wide."); @@ -56,9 +58,9 @@ default_prng() // The thread-specific PRNGs: thread_local beast::xor_shift_engine engine = [] { - std::uint64_t seed; + std::uint64_t seed = 0; { - std::lock_guard lk(m); + std::lock_guard const lk(m); std::uniform_int_distribution distribution{1}; seed = distribution(seeder); } diff --git a/include/xrpl/beast/asio/io_latency_probe.h b/include/xrpl/beast/asio/io_latency_probe.h index 81c8bc0dfa..2dc1fcba15 100644 --- a/include/xrpl/beast/asio/io_latency_probe.h +++ b/include/xrpl/beast/asio/io_latency_probe.h @@ -23,15 +23,15 @@ private: std::recursive_mutex m_mutex; std::condition_variable_any m_cond; - std::size_t m_count; + std::size_t m_count{1}; duration const m_period; boost::asio::io_context& m_ios; boost::asio::basic_waitable_timer m_timer; - bool m_cancel; + bool m_cancel{false}; public: io_latency_probe(duration const& period, boost::asio::io_context& ios) - : m_count(1), m_period(period), m_ios(ios), m_timer(m_ios), m_cancel(false) + : m_period(period), m_ios(ios), m_timer(m_ios) { } @@ -83,7 +83,7 @@ public: void sample_one(Handler&& handler) { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); if (m_cancel) throw std::logic_error("io_latency_probe is canceled"); boost::asio::post( @@ -98,7 +98,7 @@ public: void sample(Handler&& handler) { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); if (m_cancel) throw std::logic_error("io_latency_probe is canceled"); boost::asio::post( @@ -122,14 +122,14 @@ private: void addref() { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); ++m_count; } void release() { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); if (--m_count == 0) m_cond.notify_all(); } @@ -192,7 +192,7 @@ private: m_handler(elapsed); { - std::lock_guard lock(m_probe->m_mutex); + std::lock_guard const lock(m_probe->m_mutex); if (m_probe->m_cancel) return; } diff --git a/include/xrpl/beast/container/aged_map.h b/include/xrpl/beast/container/aged_map.h index e9505f2763..3815f44329 100644 --- a/include/xrpl/beast/container/aged_map.h +++ b/include/xrpl/beast/container/aged_map.h @@ -16,4 +16,4 @@ template < class Allocator = std::allocator>> using aged_map = detail::aged_ordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_multimap.h b/include/xrpl/beast/container/aged_multimap.h index 7625694f66..bb098b63b2 100644 --- a/include/xrpl/beast/container/aged_multimap.h +++ b/include/xrpl/beast/container/aged_multimap.h @@ -16,4 +16,4 @@ template < class Allocator = std::allocator>> using aged_multimap = detail::aged_ordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_multiset.h b/include/xrpl/beast/container/aged_multiset.h index 8d906c694f..60682db0ca 100644 --- a/include/xrpl/beast/container/aged_multiset.h +++ b/include/xrpl/beast/container/aged_multiset.h @@ -15,4 +15,4 @@ template < class Allocator = std::allocator> using aged_multiset = detail::aged_ordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_set.h b/include/xrpl/beast/container/aged_set.h index 2c601f5f41..76ff40b63a 100644 --- a/include/xrpl/beast/container/aged_set.h +++ b/include/xrpl/beast/container/aged_set.h @@ -15,4 +15,4 @@ template < class Allocator = std::allocator> using aged_set = detail::aged_ordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_unordered_map.h b/include/xrpl/beast/container/aged_unordered_map.h index 520ffe5848..ea53320e91 100644 --- a/include/xrpl/beast/container/aged_unordered_map.h +++ b/include/xrpl/beast/container/aged_unordered_map.h @@ -17,4 +17,4 @@ template < class Allocator = std::allocator>> using aged_unordered_map = detail::aged_unordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_unordered_multimap.h b/include/xrpl/beast/container/aged_unordered_multimap.h index dc6338949b..9cb1443cad 100644 --- a/include/xrpl/beast/container/aged_unordered_multimap.h +++ b/include/xrpl/beast/container/aged_unordered_multimap.h @@ -17,4 +17,4 @@ template < class Allocator = std::allocator>> using aged_unordered_multimap = detail::aged_unordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_unordered_multiset.h b/include/xrpl/beast/container/aged_unordered_multiset.h index b251f20077..ced01987aa 100644 --- a/include/xrpl/beast/container/aged_unordered_multiset.h +++ b/include/xrpl/beast/container/aged_unordered_multiset.h @@ -17,4 +17,4 @@ template < using aged_unordered_multiset = detail::aged_unordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/aged_unordered_set.h b/include/xrpl/beast/container/aged_unordered_set.h index a1c032e159..3f4575f6bc 100644 --- a/include/xrpl/beast/container/aged_unordered_set.h +++ b/include/xrpl/beast/container/aged_unordered_set.h @@ -16,4 +16,4 @@ template < class Allocator = std::allocator> using aged_unordered_set = detail::aged_unordered_container; -} +} // namespace beast diff --git a/include/xrpl/beast/container/detail/aged_ordered_container.h b/include/xrpl/beast/container/detail/aged_ordered_container.h index b482cd33c1..dad0d92e0b 100644 --- a/include/xrpl/beast/container/detail/aged_ordered_container.h +++ b/include/xrpl/beast/container/detail/aged_ordered_container.h @@ -262,7 +262,9 @@ private: { } - config_t(config_t&& other, Allocator const& alloc) + config_t( + config_t&& other, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + Allocator const& alloc) : KeyValueCompare(std::move(other.key_compare())) , beast::detail::empty_base_optimization(alloc) , clock(other.clock) @@ -552,7 +554,10 @@ public: aged_ordered_container(aged_ordered_container&& other); - aged_ordered_container(aged_ordered_container&& other, Allocator const& alloc); + aged_ordered_container( + // NOLINTNEXTLINE(cppcoreguidelines-rvalue-reference-param-not-moved) + aged_ordered_container&& other, + Allocator const& alloc); aged_ordered_container(std::initializer_list init, clock_type& clock); @@ -1290,7 +1295,7 @@ aged_ordered_container::aged_ template aged_ordered_container::aged_ordered_container( - aged_ordered_container&& other, + aged_ordered_container&& other, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) Allocator const& alloc) : m_config(std::move(other.m_config), alloc) #if BOOST_VERSION >= 108000 diff --git a/include/xrpl/beast/container/detail/aged_unordered_container.h b/include/xrpl/beast/container/detail/aged_unordered_container.h index d912f06ce1..dfc853f019 100644 --- a/include/xrpl/beast/container/detail/aged_unordered_container.h +++ b/include/xrpl/beast/container/detail/aged_unordered_container.h @@ -318,7 +318,9 @@ private: { } - config_t(config_t&& other, Allocator const& alloc) + config_t( + config_t&& other, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + Allocator const& alloc) : ValueHash(std::move(other.hash_function())) , KeyValueEqual(std::move(other.key_eq())) , beast::detail::empty_base_optimization(alloc) @@ -774,7 +776,10 @@ public: aged_unordered_container(aged_unordered_container&& other); - aged_unordered_container(aged_unordered_container&& other, Allocator const& alloc); + aged_unordered_container( + // NOLINTNEXTLINE(cppcoreguidelines-rvalue-reference-param-not-moved) + aged_unordered_container&& other, + Allocator const& alloc); aged_unordered_container(std::initializer_list init, clock_type& clock); @@ -1838,7 +1843,10 @@ template < class KeyEqual, class Allocator> aged_unordered_container:: - aged_unordered_container(aged_unordered_container&& other, Allocator const& alloc) + aged_unordered_container( + // NOLINTNEXTLINE(cppcoreguidelines-rvalue-reference-param-not-moved) + aged_unordered_container&& other, + Allocator const& alloc) : m_config(std::move(other.m_config), alloc) , m_buck(alloc) , m_cont(m_buck, std::cref(m_config.value_hash()), std::cref(m_config.key_value_equal())) diff --git a/include/xrpl/beast/core/List.h b/include/xrpl/beast/core/List.h index 504dec4c4a..560467c8dd 100644 --- a/include/xrpl/beast/core/List.h +++ b/include/xrpl/beast/core/List.h @@ -449,7 +449,7 @@ public: iterator erase(iterator pos) noexcept { - Node* node = &*pos; + Node const* node = &*pos; ++pos; node->m_next->m_prev = node->m_prev; node->m_prev->m_next = node->m_next; diff --git a/include/xrpl/beast/core/LockFreeStack.h b/include/xrpl/beast/core/LockFreeStack.h index fe3baa0564..cf512725fe 100644 --- a/include/xrpl/beast/core/LockFreeStack.h +++ b/include/xrpl/beast/core/LockFreeStack.h @@ -187,7 +187,7 @@ public: bool push_front(Node* node) { - bool first; + bool first = false; Node* old_head = m_head.load(std::memory_order_relaxed); do { @@ -211,7 +211,7 @@ public: pop_front() { Node* node = m_head.load(); - Node* new_head; + Node* new_head = nullptr; do { if (node == &m_end) diff --git a/include/xrpl/beast/hash/xxhasher.h b/include/xrpl/beast/hash/xxhasher.h index 473907ea89..7c6ae894fc 100644 --- a/include/xrpl/beast/hash/xxhasher.h +++ b/include/xrpl/beast/hash/xxhasher.h @@ -23,7 +23,7 @@ private: // A 64-byte buffer should to be big enough for us static constexpr std::size_t INTERNAL_BUFFER_SIZE = 64; - alignas(64) std::array buffer_; + alignas(64) std::array buffer_{}; std::span readBuffer_; std::span writeBuffer_; diff --git a/include/xrpl/beast/test/yield_to.h b/include/xrpl/beast/test/yield_to.h index 6c49c4a89c..918ca3c0cc 100644 --- a/include/xrpl/beast/test/yield_to.h +++ b/include/xrpl/beast/test/yield_to.h @@ -114,7 +114,7 @@ enable_yield_to::spawn(F0&& f, FN&&... fn) boost::context::fixedsize_stack(2 * 1024 * 1024), [&](yield_context yield) { f(yield); - std::lock_guard lock{m_}; + std::lock_guard const lock{m_}; if (--running_ == 0) cv_.notify_all(); }, diff --git a/include/xrpl/beast/unit_test/results.h b/include/xrpl/beast/unit_test/results.h index cbd0a71057..b8a8e2aadf 100644 --- a/include/xrpl/beast/unit_test/results.h +++ b/include/xrpl/beast/unit_test/results.h @@ -35,10 +35,10 @@ private: class tests_t : public detail::const_container> { private: - std::size_t failed_; + std::size_t failed_{0}; public: - tests_t() : failed_(0) + tests_t() { } @@ -167,12 +167,12 @@ public: class results : public detail::const_container> { private: - std::size_t m_cases; - std::size_t total_; - std::size_t failed_; + std::size_t m_cases{0}; + std::size_t total_{0}; + std::size_t failed_{0}; public: - results() : m_cases(0), total_(0), failed_(0) + results() { } diff --git a/include/xrpl/beast/unit_test/runner.h b/include/xrpl/beast/unit_test/runner.h index 90d8a2f4b5..c8a6956732 100644 --- a/include/xrpl/beast/unit_test/runner.h +++ b/include/xrpl/beast/unit_test/runner.h @@ -228,7 +228,7 @@ template void runner::testcase(std::string const& name) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // Name may not be empty BOOST_ASSERT(default_ || !name.empty()); // Forgot to call pass or fail @@ -244,7 +244,7 @@ template void runner::pass() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (default_) testcase(""); on_pass(); @@ -255,7 +255,7 @@ template void runner::fail(std::string const& reason) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (default_) testcase(""); on_fail(reason); @@ -267,7 +267,7 @@ template void runner::log(std::string const& s) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (default_) testcase(""); on_log(s); diff --git a/include/xrpl/beast/unit_test/suite.h b/include/xrpl/beast/unit_test/suite.h index 9031f9833e..fa5157e126 100644 --- a/include/xrpl/beast/unit_test/suite.h +++ b/include/xrpl/beast/unit_test/suite.h @@ -300,7 +300,7 @@ private: static suite** p_this_suite() { - static suite* pts = nullptr; + static suite* pts = nullptr; // NOLINT(misc-const-correctness) return &pts; } diff --git a/include/xrpl/beast/utility/PropertyStream.h b/include/xrpl/beast/utility/PropertyStream.h index 3d29138a12..290730c1a2 100644 --- a/include/xrpl/beast/utility/PropertyStream.h +++ b/include/xrpl/beast/utility/PropertyStream.h @@ -311,7 +311,7 @@ private: std::string const m_name; std::recursive_mutex lock_; Item item_; - Source* parent_; + Source* parent_{nullptr}; List children_; public: diff --git a/include/xrpl/beast/utility/Zero.h b/include/xrpl/beast/utility/Zero.h index 00e91a1a47..3b50b3fe00 100644 --- a/include/xrpl/beast/utility/Zero.h +++ b/include/xrpl/beast/utility/Zero.h @@ -28,7 +28,7 @@ struct Zero namespace { static constexpr Zero zero{}; -} +} // namespace /** Default implementation of signum calls the method on the class. */ template diff --git a/include/xrpl/beast/utility/instrumentation.h b/include/xrpl/beast/utility/instrumentation.h index 106856514b..39b80bc438 100644 --- a/include/xrpl/beast/utility/instrumentation.h +++ b/include/xrpl/beast/utility/instrumentation.h @@ -15,7 +15,7 @@ #define ALWAYS_OR_UNREACHABLE(cond, message) assert((message) && (cond)) #define SOMETIMES(cond, message, ...) #define REACHABLE(message, ...) -#define UNREACHABLE(message, ...) assert((message) && false) +#define UNREACHABLE(message, ...) assert((message) && false) // NOLINT(misc-static-assert) #endif #define XRPL_ASSERT ALWAYS_OR_UNREACHABLE diff --git a/include/xrpl/beast/xor_shift_engine.h b/include/xrpl/beast/xor_shift_engine.h index d49cb08fc0..4fbe5ec165 100644 --- a/include/xrpl/beast/xor_shift_engine.h +++ b/include/xrpl/beast/xor_shift_engine.h @@ -37,7 +37,7 @@ public: } private: - result_type s_[2]; + result_type s_[2]{}; static result_type murmurhash3(result_type x); diff --git a/include/xrpl/core/ClosureCounter.h b/include/xrpl/core/ClosureCounter.h index 6802a03f3d..b1939b2e63 100644 --- a/include/xrpl/core/ClosureCounter.h +++ b/include/xrpl/core/ClosureCounter.h @@ -56,7 +56,7 @@ private: // a lock. This removes a small timing window that occurs if the // waiting thread is handling a spurious wakeup when closureCount_ // drops to zero. - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; // Update closureCount_. Notify if stopping and closureCount_ == 0. if ((--closureCount_ == 0) && waitForClosures_) @@ -92,7 +92,9 @@ private: ++counter_; } - Substitute(ClosureCounter& counter, Closure&& closure) + Substitute( + ClosureCounter& counter, + Closure&& closure) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) : counter_(counter), closure_(std::forward(closure)) { ++counter_; @@ -168,7 +170,7 @@ public: { std::optional> ret; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; if (!waitForClosures_) ret.emplace(*this, std::forward(closure)); @@ -191,7 +193,7 @@ public: bool joined() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return waitForClosures_; } }; diff --git a/include/xrpl/core/Coro.ipp b/include/xrpl/core/Coro.ipp index e7c08e65a6..38d921a658 100644 --- a/include/xrpl/core/Coro.ipp +++ b/include/xrpl/core/Coro.ipp @@ -7,7 +7,6 @@ JobQueue::Coro::Coro(Coro_create_t, JobQueue& jq, JobType type, std::string cons : jq_(jq) , type_(type) , name_(name) - , running_(false) , coro_( // Stack size of 1MB wasn't sufficient for deep calls. ASAN tests flagged the issue. Hence // increasing the size to 1.5MB. @@ -70,14 +69,24 @@ JobQueue::Coro::resume() running_ = true; } { - std::lock_guard lock(jq_.m_mutex); + std::lock_guard lk(jq_.m_mutex); --jq_.nSuspend_; } auto saved = detail::getLocalValues().release(); detail::getLocalValues().reset(&lvs_); std::lock_guard lock(mutex_); - XRPL_ASSERT(static_cast(coro_), "xrpl::JobQueue::Coro::resume : is runnable"); - coro_(); + // A late resume() can arrive after the coroutine has already completed. + // This is an expected (if rare) outcome of the race condition documented + // in JobQueue.h:354-377 where post() schedules a resume job before the + // coroutine yields — the mutex serializes access, but by the time this + // resume() acquires the lock the coroutine may have already run to + // completion. Calling operator() on a completed boost::coroutine2 is + // undefined behavior, so we must check and skip invoking the coroutine + // body if it has already completed. + if (coro_) + { + coro_(); + } detail::getLocalValues().release(); detail::getLocalValues().reset(saved); std::lock_guard lk(mutex_run_); diff --git a/include/xrpl/core/JobQueue.h b/include/xrpl/core/JobQueue.h index f40a892173..558e55cf31 100644 --- a/include/xrpl/core/JobQueue.h +++ b/include/xrpl/core/JobQueue.h @@ -16,7 +16,7 @@ namespace xrpl { namespace perf { class PerfLog; -} +} // namespace perf class Logs; struct Coro_create_t @@ -45,7 +45,7 @@ public: JobQueue& jq_; JobType type_; std::string name_; - bool running_; + bool running_{false}; std::mutex mutex_; std::mutex mutex_run_; std::condition_variable cv_; @@ -99,8 +99,8 @@ public: Effects: The coroutine continues execution from where it last left off using this same thread. - Undefined behavior if called after the coroutine has completed - with a return (as opposed to a yield()). + If the coroutine has already completed, returns immediately + (handles the documented post-before-yield race condition). Undefined behavior if resume() or post() called consecutively without a corresponding yield. */ @@ -224,7 +224,7 @@ private: beast::Journal m_journal; mutable std::mutex m_mutex; - std::uint64_t m_lastJob; + std::uint64_t m_lastJob{0}; std::set m_jobSet; JobCounter jobCounter_; std::atomic_bool stopping_{false}; @@ -233,7 +233,7 @@ private: JobTypeData m_invalidJobData; // The number of jobs currently in processTask() - int m_processCount; + int m_processCount{0}; // The number of suspended coroutines int nSuspend_ = 0; @@ -316,7 +316,7 @@ private: // Returns the limit of running jobs for the given job type. // For jobs with no limit, we return the largest int. Hopefully that // will be enough. - int + static int getJobLimit(JobType type); }; @@ -357,8 +357,10 @@ private: If the post() job were to be executed before yield(), undefined behavior would occur. The lock ensures that coro_ is not called again until we exit the coroutine. At which point a scheduled resume() job waiting on the lock - would gain entry, harmlessly call coro_ and immediately return as we have - already completed the coroutine. + would gain entry. resume() checks if the coroutine has already completed + (coro_ converts to false) and, if so, skips invoking operator() since + calling operator() on a completed boost::coroutine2 pull_type is undefined + behavior. The race condition occurs as follows: diff --git a/include/xrpl/core/JobTypeData.h b/include/xrpl/core/JobTypeData.h index 32df3e88cf..c180629af7 100644 --- a/include/xrpl/core/JobTypeData.h +++ b/include/xrpl/core/JobTypeData.h @@ -19,13 +19,13 @@ public: JobTypeInfo const& info; /* The number of jobs waiting */ - int waiting; + int waiting{0}; /* The number presently running */ - int running; + int running{0}; /* And the number we deferred executing because of job limits */ - int deferred; + int deferred{0}; /* Notification callbacks */ beast::insight::Event dequeue; @@ -35,12 +35,8 @@ public: JobTypeInfo const& info_, beast::insight::Collector::ptr const& collector, Logs& logs) noexcept - : m_load(logs.journal("LoadMonitor")) - , m_collector(collector) - , info(info_) - , waiting(0) - , running(0) - , deferred(0) + : m_load(logs.journal("LoadMonitor")), m_collector(collector), info(info_) + { m_load.setTargetLatency(info.getAverageLatency(), info.getPeakLatency()); diff --git a/include/xrpl/core/JobTypes.h b/include/xrpl/core/JobTypes.h index 4dc2fd96cd..98de97a1b4 100644 --- a/include/xrpl/core/JobTypes.h +++ b/include/xrpl/core/JobTypes.h @@ -24,7 +24,7 @@ private: std::chrono::milliseconds{0}) { using namespace std::chrono_literals; - int maxLimit = std::numeric_limits::max(); + int const maxLimit = std::numeric_limits::max(); auto add = [this]( JobType jt, diff --git a/include/xrpl/core/LoadMonitor.h b/include/xrpl/core/LoadMonitor.h index 71fbf75d68..b8777a7056 100644 --- a/include/xrpl/core/LoadMonitor.h +++ b/include/xrpl/core/LoadMonitor.h @@ -36,10 +36,10 @@ public: { Stats(); - std::uint64_t count; + std::uint64_t count{0}; std::chrono::milliseconds latencyAvg; std::chrono::milliseconds latencyPeak; - bool isOverloaded; + bool isOverloaded{false}; }; Stats @@ -54,8 +54,8 @@ private: std::mutex mutex_; - std::uint64_t mCounts; - int mLatencyEvents; + std::uint64_t mCounts{0}; + int mLatencyEvents{0}; std::chrono::milliseconds mLatencyMSAvg; std::chrono::milliseconds mLatencyMSPeak; std::chrono::milliseconds mTargetLatencyAvg; diff --git a/include/xrpl/core/PeerReservationTable.h b/include/xrpl/core/PeerReservationTable.h index ffaef2fa08..fc943f0807 100644 --- a/include/xrpl/core/PeerReservationTable.h +++ b/include/xrpl/core/PeerReservationTable.h @@ -67,7 +67,7 @@ public: bool contains(PublicKey const& nodeId) { - std::lock_guard lock(this->mutex_); + std::lock_guard const lock(this->mutex_); return table_.find({nodeId}) != table_.end(); } @@ -92,7 +92,7 @@ public: private: beast::Journal mutable journal_; std::mutex mutable mutex_; - DatabaseCon* connection_; + DatabaseCon* connection_{}; std::unordered_set, KeyEqual> table_; }; diff --git a/include/xrpl/core/PerfLog.h b/include/xrpl/core/PerfLog.h index 64bdb3b625..8da6a313c8 100644 --- a/include/xrpl/core/PerfLog.h +++ b/include/xrpl/core/PerfLog.h @@ -14,7 +14,7 @@ namespace beast { class Journal; -} +} // namespace beast namespace xrpl { class Application; diff --git a/include/xrpl/core/ServiceRegistry.h b/include/xrpl/core/ServiceRegistry.h index 1a2e33d5ee..8b7d4b4464 100644 --- a/include/xrpl/core/ServiceRegistry.h +++ b/include/xrpl/core/ServiceRegistry.h @@ -3,7 +3,6 @@ #include #include #include -#include #include @@ -12,17 +11,31 @@ namespace xrpl { // Forward declarations namespace NodeStore { class Database; -} +} // namespace NodeStore namespace Resource { class Manager; -} +} // namespace Resource namespace perf { class PerfLog; -} +} // namespace perf // This is temporary until we migrate all code to use ServiceRegistry. class Application; +template < + class Key, + class T, + bool IsKeyCache, + class SharedWeakUnionPointer, + class SharedPointerType, + class Hash, + class KeyEqual, + class Mutex> +class TaggedCache; +class STLedgerEntry; +using SLE = STLedgerEntry; +using CachedSLEs = TaggedCache; + // Forward declarations class AcceptedLedger; class AmendmentTable; @@ -45,7 +58,7 @@ class NetworkIDService; class OpenLedger; class OrderBookDB; class Overlay; -class PathRequests; +class PathRequestManager; class PeerReservationTable; class PendingSaves; class RelationalDatabase; @@ -89,7 +102,7 @@ public: getNodeFamily() = 0; virtual TimeKeeper& - timeKeeper() = 0; + getTimeKeeper() = 0; virtual JobQueue& getJobQueue() = 0; @@ -98,7 +111,7 @@ public: getTempNodeCache() = 0; virtual CachedSLEs& - cachedSLEs() = 0; + getCachedSLEs() = 0; virtual NetworkIDService& getNetworkIDService() = 0; @@ -120,26 +133,26 @@ public: getValidations() = 0; virtual ValidatorList& - validators() = 0; + getValidators() = 0; virtual ValidatorSite& - validatorSites() = 0; + getValidatorSites() = 0; virtual ManifestCache& - validatorManifests() = 0; + getValidatorManifests() = 0; virtual ManifestCache& - publisherManifests() = 0; + getPublisherManifests() = 0; // Network services virtual Overlay& - overlay() = 0; + getOverlay() = 0; virtual Cluster& - cluster() = 0; + getCluster() = 0; virtual PeerReservationTable& - peerReservations() = 0; + getPeerReservations() = 0; virtual Resource::Manager& getResourceManager() = 0; @@ -174,13 +187,13 @@ public: getLedgerReplayer() = 0; virtual PendingSaves& - pendingSaves() = 0; + getPendingSaves() = 0; virtual OpenLedger& - openLedger() = 0; + getOpenLedger() = 0; virtual OpenLedger const& - openLedger() const = 0; + getOpenLedger() const = 0; // Transaction and operation services virtual NetworkOPs& @@ -195,8 +208,8 @@ public: virtual TxQ& getTxQ() = 0; - virtual PathRequests& - getPathRequests() = 0; + virtual PathRequestManager& + getPathRequestManager() = 0; // Server services virtual ServerHandler& @@ -210,16 +223,16 @@ public: isStopping() const = 0; virtual beast::Journal - journal(std::string const& name) = 0; + getJournal(std::string const& name) = 0; virtual boost::asio::io_context& getIOContext() = 0; virtual Logs& - logs() = 0; + getLogs() = 0; virtual std::optional const& - trapTxID() const = 0; + getTrapTxID() const = 0; /** Retrieve the "wallet database" */ virtual DatabaseCon& @@ -228,7 +241,7 @@ public: // Temporary: Get the underlying Application for functions that haven't // been migrated yet. This should be removed once all code is migrated. virtual Application& - app() = 0; + getApp() = 0; }; } // namespace xrpl diff --git a/include/xrpl/core/StartUpType.h b/include/xrpl/core/StartUpType.h index 74a1898806..46359ad7b6 100644 --- a/include/xrpl/core/StartUpType.h +++ b/include/xrpl/core/StartUpType.h @@ -5,7 +5,7 @@ namespace xrpl { -enum class StartUpType { FRESH, NORMAL, LOAD, LOAD_FILE, REPLAY, NETWORK }; +enum class StartUpType { Fresh, Normal, Load, LoadFile, Replay, Network }; inline std::ostream& operator<<(std::ostream& os, StartUpType const& type) diff --git a/include/xrpl/core/detail/Workers.h b/include/xrpl/core/detail/Workers.h index 8d898e35c0..dbc93ecf81 100644 --- a/include/xrpl/core/detail/Workers.h +++ b/include/xrpl/core/detail/Workers.h @@ -13,7 +13,7 @@ namespace xrpl { namespace perf { class PerfLog; -} +} // namespace perf /** * `Workers` is effectively a thread pool. The constructor takes a "callback" @@ -183,8 +183,8 @@ private: std::thread thread_; std::mutex mutex_; std::condition_variable wakeup_; - int wakeCount_; // how many times to un-pause - bool shouldExit_; + int wakeCount_{0}; // how many times to un-pause + bool shouldExit_{false}; }; private: @@ -197,9 +197,9 @@ private: std::string m_threadNames; // The name to give each thread std::condition_variable m_cv; // signaled when all threads paused std::mutex m_mut; - bool m_allPaused; + bool m_allPaused{true}; semaphore m_semaphore; // each pending task is 1 resource - int m_numberOfThreads; // how many we want active now + int m_numberOfThreads{0}; // how many we want active now std::atomic m_activeCount; // to know when all are paused std::atomic m_pauseCount; // how many threads need to pause now std::atomic m_runningTaskCount; // how many calls to processTask() active diff --git a/include/xrpl/core/detail/semaphore.h b/include/xrpl/core/detail/semaphore.h index fad3bf5e29..b3bee00588 100644 --- a/include/xrpl/core/detail/semaphore.h +++ b/include/xrpl/core/detail/semaphore.h @@ -55,7 +55,7 @@ public: void notify() { - std::lock_guard lock{m_mutex}; + std::lock_guard const lock{m_mutex}; ++m_count; m_cond.notify_one(); } diff --git a/include/xrpl/json/json_reader.h b/include/xrpl/json/json_reader.h index 09dac80a2f..dd1be76923 100644 --- a/include/xrpl/json/json_reader.h +++ b/include/xrpl/json/json_reader.h @@ -103,9 +103,9 @@ private: public: explicit ErrorInfo() = default; - Token token_; + Token token_{}; std::string message_; - Location extra_; + Location extra_{}; }; using Errors = std::deque; @@ -173,11 +173,11 @@ private: Nodes nodes_; Errors errors_; std::string document_; - Location begin_; - Location end_; - Location current_; - Location lastValueEnd_; - Value* lastValue_; + Location begin_{}; + Location end_{}; + Location current_{}; + Location lastValueEnd_{}; + Value* lastValue_{}; }; template diff --git a/include/xrpl/json/json_value.h b/include/xrpl/json/json_value.h index fc7625d67a..ef1d0fbcb8 100644 --- a/include/xrpl/json/json_value.h +++ b/include/xrpl/json/json_value.h @@ -641,7 +641,7 @@ public: SelfType operator++(int) { - SelfType temp(*this); + SelfType const temp(*this); ++*this; return temp; } @@ -649,7 +649,7 @@ public: SelfType operator--(int) { - SelfType temp(*this); + SelfType const temp(*this); --*this; return temp; } diff --git a/include/xrpl/json/json_writer.h b/include/xrpl/json/json_writer.h index cc3790a7dd..e49abcd81a 100644 --- a/include/xrpl/json/json_writer.h +++ b/include/xrpl/json/json_writer.h @@ -106,8 +106,8 @@ private: ChildValues childValues_; std::string document_; std::string indentString_; - int rightMargin_; - int indentSize_; + int rightMargin_{74}; + int indentSize_{3}; bool addChildValues_{}; }; @@ -171,9 +171,9 @@ private: using ChildValues = std::vector; ChildValues childValues_; - std::ostream* document_; + std::ostream* document_{nullptr}; std::string indentString_; - int rightMargin_; + int rightMargin_{74}; std::string indentation_; bool addChildValues_{}; }; diff --git a/include/xrpl/ledger/AmendmentTable.h b/include/xrpl/ledger/AmendmentTable.h index fb90d6e859..6ecfe2a240 100644 --- a/include/xrpl/ledger/AmendmentTable.h +++ b/include/xrpl/ledger/AmendmentTable.h @@ -143,7 +143,7 @@ public: // Inject appropriate pseudo-transactions for (auto const& it : actions) { - STTx amendTx(ttAMENDMENT, [&it, seq = lastClosedLedger->seq() + 1](auto& obj) { + STTx const amendTx(ttAMENDMENT, [&it, seq = lastClosedLedger->seq() + 1](auto& obj) { obj.setAccountID(sfAccount, AccountID()); obj.setFieldH256(sfAmendment, it.first); obj.setFieldU32(sfLedgerSequence, seq); diff --git a/include/xrpl/ledger/CachedSLEs.h b/include/xrpl/ledger/CachedSLEs.h index 2909501b1d..c05aab8856 100644 --- a/include/xrpl/ledger/CachedSLEs.h +++ b/include/xrpl/ledger/CachedSLEs.h @@ -6,4 +6,4 @@ namespace xrpl { using CachedSLEs = TaggedCache; -} +} // namespace xrpl diff --git a/src/xrpld/app/misc/CanonicalTXSet.h b/include/xrpl/ledger/CanonicalTXSet.h similarity index 100% rename from src/xrpld/app/misc/CanonicalTXSet.h rename to include/xrpl/ledger/CanonicalTXSet.h diff --git a/src/xrpld/app/ledger/Ledger.h b/include/xrpl/ledger/Ledger.h similarity index 84% rename from src/xrpld/app/ledger/Ledger.h rename to include/xrpl/ledger/Ledger.h index f040e93369..75a8f55dc0 100644 --- a/src/xrpld/app/ledger/Ledger.h +++ b/include/xrpl/ledger/Ledger.h @@ -1,13 +1,12 @@ #pragma once -#include -#include - #include #include #include #include +#include #include +#include #include #include #include @@ -15,7 +14,7 @@ namespace xrpl { -class Application; +class ServiceRegistry; class Job; class TransactionMaster; @@ -83,21 +82,26 @@ public: */ Ledger( create_genesis_t, - Config const& config, + Rules const& rules, + Fees const& fees, std::vector const& amendments, Family& family); - Ledger(LedgerHeader const& info, Config const& config, Family& family); + Ledger(LedgerHeader const& info, Rules const& rules, Family& family); /** Used for ledgers loaded from JSON files @param acquire If true, acquires the ledger if not found locally + + @note The fees parameter provides default values, but setup() may + override them from the ledger state if fee-related SLEs exist. */ Ledger( LedgerHeader const& info, bool& loaded, bool acquire, - Config const& config, + Rules const& rules, + Fees const& fees, Family& family, beast::Journal j); @@ -113,7 +117,8 @@ public: Ledger( std::uint32_t ledgerSeq, NetClock::time_point closeTime, - Config const& config, + Rules const& rules, + Fees const& fees, Family& family); ~Ledger() = default; @@ -322,7 +327,7 @@ public: walkLedger(beast::Journal j, bool parallel = false) const; bool - assertSensible(beast::Journal ledgerJ) const; + isSensible() const; void invariants() const; @@ -379,8 +384,26 @@ private: bool setup(); - void - defaultFees(Config const& config); + /** @brief Deserialize a SHAMapItem containing a single STTx. + * + * @param item The SHAMapItem to deserialize. + * @return A shared pointer to the deserialized transaction. + * @throw May throw on deserialization error. + */ + static std::shared_ptr + deserializeTx(SHAMapItem const& item); + + /** @brief Deserialize a SHAMapItem containing STTx + STObject metadata. + * + * The SHAMapItem must contain two variable length serialization objects. + * + * @param item The SHAMapItem to deserialize. + * @return A pair containing shared pointers to the deserialized transaction + * and metadata. + * @throw May throw on deserialization error. + */ + static std::pair, std::shared_ptr> + deserializeTxPlusMeta(SHAMapItem const& item); bool mImmutable; @@ -402,54 +425,4 @@ private: /** A ledger wrapped in a CachedView. */ using CachedLedger = CachedView; -//------------------------------------------------------------------------------ -// -// API -// -//------------------------------------------------------------------------------ - -extern bool -pendSaveValidated( - Application& app, - std::shared_ptr const& ledger, - bool isSynchronous, - bool isCurrent); - -std::shared_ptr -loadLedgerHelper(LedgerHeader const& sinfo, Application& app, bool acquire); - -std::shared_ptr -loadByIndex(std::uint32_t ledgerIndex, Application& app, bool acquire = true); - -std::shared_ptr -loadByHash(uint256 const& ledgerHash, Application& app, bool acquire = true); - -// Fetch the ledger with the highest sequence contained in the database -extern std::tuple, std::uint32_t, uint256> -getLatestLedger(Application& app); - -/** Deserialize a SHAMapItem containing a single STTx - - Throw: - - May throw on deserializaton error -*/ -std::shared_ptr -deserializeTx(SHAMapItem const& item); - -/** Deserialize a SHAMapItem containing STTx + STObject metadata - - The SHAMap must contain two variable length - serialization objects. - - Throw: - - May throw on deserializaton error -*/ -std::pair, std::shared_ptr> -deserializeTxPlusMeta(SHAMapItem const& item); - -uint256 -calculateLedgerHash(LedgerHeader const& info); - } // namespace xrpl diff --git a/src/xrpld/consensus/LedgerTiming.h b/include/xrpl/ledger/LedgerTiming.h similarity index 100% rename from src/xrpld/consensus/LedgerTiming.h rename to include/xrpl/ledger/LedgerTiming.h diff --git a/include/xrpl/ledger/OrderBookDB.h b/include/xrpl/ledger/OrderBookDB.h index 3d689607bf..5bf66eb4ab 100644 --- a/include/xrpl/ledger/OrderBookDB.h +++ b/include/xrpl/ledger/OrderBookDB.h @@ -76,16 +76,33 @@ public: @return true if a book from this issue to XRP exists */ virtual bool - isBookToXRP(Issue const& issue, std::optional domain = std::nullopt) = 0; + isBookToXRP(Issue const& issue, std::optional const& domain = std::nullopt) = 0; + /** + * Process a transaction for order book tracking. + * @param ledger The ledger the transaction was applied to + * @param alTx The transaction to process + * @param jvObj The JSON object of the transaction + */ virtual void processTxn( std::shared_ptr const& ledger, AcceptedLedgerTx const& alTx, MultiApiJson const& jvObj) = 0; + /** + * Get the book listeners for a book. + * @param book The book to get the listeners for + * @return The book listeners for the book + */ virtual BookListeners::pointer getBookListeners(Book const&) = 0; + + /** + * Create a new book listeners for a book. + * @param book The book to create the listeners for + * @return The new book listeners for the book + */ virtual BookListeners::pointer makeBookListeners(Book const&) = 0; }; diff --git a/src/xrpld/app/ledger/PendingSaves.h b/include/xrpl/ledger/PendingSaves.h similarity index 93% rename from src/xrpld/app/ledger/PendingSaves.h rename to include/xrpl/ledger/PendingSaves.h index 76958fc78a..4e952547da 100644 --- a/src/xrpld/app/ledger/PendingSaves.h +++ b/include/xrpl/ledger/PendingSaves.h @@ -31,7 +31,7 @@ public: bool startWork(LedgerIndex seq) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto it = map_.find(seq); @@ -54,7 +54,7 @@ public: void finishWork(LedgerIndex seq) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); map_.erase(seq); await_.notify_all(); @@ -64,7 +64,7 @@ public: bool pending(LedgerIndex seq) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return map_.find(seq) != map_.end(); } @@ -117,7 +117,7 @@ public: std::map getSnapshot() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return map_; } diff --git a/include/xrpl/nodestore/Scheduler.h b/include/xrpl/nodestore/Scheduler.h index 6e01533930..dc3e1e3d15 100644 --- a/include/xrpl/nodestore/Scheduler.h +++ b/include/xrpl/nodestore/Scheduler.h @@ -16,7 +16,7 @@ struct FetchReport { } - std::chrono::milliseconds elapsed; + std::chrono::milliseconds elapsed{}; FetchType const fetchType; bool wasFound = false; }; diff --git a/include/xrpl/nodestore/detail/BatchWriter.h b/include/xrpl/nodestore/detail/BatchWriter.h index 1820435133..93993d1c3e 100644 --- a/include/xrpl/nodestore/detail/BatchWriter.h +++ b/include/xrpl/nodestore/detail/BatchWriter.h @@ -71,8 +71,8 @@ private: Scheduler& m_scheduler; LockType mWriteMutex; CondvarType mWriteCondition; - int mWriteLoad; - bool mWritePending; + int mWriteLoad{0}; + bool mWritePending{false}; Batch mWriteSet; }; diff --git a/include/xrpl/nodestore/detail/EncodedBlob.h b/include/xrpl/nodestore/detail/EncodedBlob.h index 78e7153f73..b05583475e 100644 --- a/include/xrpl/nodestore/detail/EncodedBlob.h +++ b/include/xrpl/nodestore/detail/EncodedBlob.h @@ -35,7 +35,7 @@ namespace NodeStore { class EncodedBlob { /** The 32-byte key of the serialized object. */ - std::array key_; + std::array key_{}; /** A pre-allocated buffer for the serialized object. @@ -43,7 +43,8 @@ class EncodedBlob 1024 more bytes. The precise size is calculated automatically at compile time so as to avoid wasting space on padding bytes. */ - std::array payload_; + std::array + payload_{}; /** The size of the serialized data. */ std::uint32_t size_; diff --git a/include/xrpl/nodestore/detail/codec.h b/include/xrpl/nodestore/detail/codec.h index 8a337ca4c3..4e12c6b4db 100644 --- a/include/xrpl/nodestore/detail/codec.h +++ b/include/xrpl/nodestore/detail/codec.h @@ -56,7 +56,7 @@ lz4_compress(void const* in, std::size_t in_size, BufferFactory&& bf) using std::runtime_error; using namespace nudb::detail; std::pair result; - std::array::max> vi; + std::array::max> vi{}; auto const n = write_varint(vi.data(), in_size); auto const out_max = LZ4_compressBound(in_size); std::uint8_t* out = reinterpret_cast(bf(n + out_max)); @@ -88,7 +88,7 @@ nodeobject_decompress(void const* in, std::size_t in_size, BufferFactory&& bf) using namespace nudb::detail; std::uint8_t const* p = reinterpret_cast(in); - std::size_t type; + std::size_t type = 0; auto const vn = read_varint(p, in_size, type); if (vn == 0) Throw("nodeobject decompress"); @@ -117,7 +117,7 @@ nodeobject_decompress(void const* in, std::size_t in_size, BufferFactory&& bf) "nodeobject codec v1: short inner node size: " + std::string("in_size = ") + std::to_string(in_size) + " hs = " + std::to_string(hs)); istream is(p, in_size); - std::uint16_t mask; + std::uint16_t mask = 0; read(is, mask); // Mask in_size -= hs; result.second = 525; @@ -196,10 +196,10 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) if (in_size == 525) { istream is(in, in_size); - std::uint32_t index; - std::uint32_t unused; - std::uint8_t kind; - std::uint32_t prefix; + std::uint32_t index = 0; + std::uint32_t unused = 0; + std::uint8_t kind = 0; + std::uint32_t prefix = 0; read(is, index); read(is, unused); read(is, kind); @@ -208,7 +208,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) { std::size_t n = 0; std::uint16_t mask = 0; - std::array vh; + std::array vh{}; for (unsigned bit = 0x8000; bit; bit >>= 1) { void const* const h = is(32); @@ -247,7 +247,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) } } - std::array::max> vi; + std::array::max> vi{}; constexpr std::size_t codecType = 1; auto const vn = write_varint(vi.data(), codecType); @@ -257,7 +257,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) // case 0 was uncompressed data; we always compress now. case 1: // lz4 { - std::uint8_t* p; + std::uint8_t* p = nullptr; auto const lzr = NodeStore::lz4_compress(in, in_size, [&p, &vn, &bf](std::size_t n) { p = reinterpret_cast(bf(vn + n)); return p + vn; @@ -287,10 +287,10 @@ filter_inner(void* in, std::size_t in_size) if (in_size == 525) { istream is(in, in_size); - std::uint32_t index; - std::uint32_t unused; - std::uint8_t kind; - std::uint32_t prefix; + std::uint32_t index = 0; + std::uint32_t unused = 0; + std::uint8_t kind = 0; + std::uint32_t prefix = 0; read(is, index); read(is, unused); read(is, kind); diff --git a/include/xrpl/nodestore/detail/varint.h b/include/xrpl/nodestore/detail/varint.h index 98f8d8ff08..c84ed383ed 100644 --- a/include/xrpl/nodestore/detail/varint.h +++ b/include/xrpl/nodestore/detail/varint.h @@ -82,6 +82,7 @@ template std::size_t write_varint(void* p0, std::size_t v) { + // NOLINTNEXTLINE(misc-const-correctness) std::uint8_t* p = reinterpret_cast(p0); do { diff --git a/include/xrpl/protocol/AmountConversions.h b/include/xrpl/protocol/AmountConversions.h index e1a224dac9..7e41eff41a 100644 --- a/include/xrpl/protocol/AmountConversions.h +++ b/include/xrpl/protocol/AmountConversions.h @@ -102,7 +102,7 @@ template T toAmount(Issue const& issue, Number const& n, Number::rounding_mode mode = Number::getround()) { - saveNumberRoundMode rm(Number::getround()); + saveNumberRoundMode const rm(Number::getround()); if (isXRP(issue)) Number::setround(mode); diff --git a/include/xrpl/protocol/Fees.h b/include/xrpl/protocol/Fees.h index 8157fdf31e..05460c0796 100644 --- a/include/xrpl/protocol/Fees.h +++ b/include/xrpl/protocol/Fees.h @@ -4,6 +4,11 @@ namespace xrpl { +// Deprecated constant for backwards compatibility with pre-XRPFees amendment. +// This was the reference fee units used in the old fee calculation. +inline constexpr std::uint32_t FEE_UNITS_DEPRECATED = 10; + +// Number of micro-drops in one drop. constexpr std::uint32_t MICRO_DROPS_PER_DROP{1'000'000}; /** Reflects the fee settings for a particular ledger. @@ -13,18 +18,34 @@ constexpr std::uint32_t MICRO_DROPS_PER_DROP{1'000'000}; */ struct Fees { - XRPAmount base{0}; // Reference tx cost (drops) - XRPAmount reserve{0}; // Reserve base (drops) - XRPAmount increment{0}; // Reserve increment (drops) - std::uint32_t extensionComputeLimit{0}; // Extension compute limit (instructions) - std::uint32_t extensionSizeLimit{0}; // Extension size limit (bytes) - std::uint32_t gasPrice{0}; // price of WASM gas (micro-drops) + /** @brief Cost of a reference transaction in drops. */ + XRPAmount base{0}; + + /** @brief Minimum XRP an account must hold to exist on the ledger. */ + XRPAmount reserve{0}; + + /** @brief Additional XRP reserve required per owned ledger object. */ + XRPAmount increment{0}; + + /** @brief Compute limit for Feature Extensions (instructions). */ + std::uint32_t extensionComputeLimit{0}; + + /** @brief Size limit for Feature Extensions (bytes). */ + std::uint32_t extensionSizeLimit{0}; + + /** @brief Price of WASM gas (micro-drops). */ + std::uint32_t gasPrice{0}; explicit Fees() = default; Fees(Fees const&) = default; Fees& operator=(Fees const&) = default; + Fees(XRPAmount base_, XRPAmount reserve_, XRPAmount increment_) + : base(base_), reserve(reserve_), increment(increment_) + { + } + /** Returns the account reserve given the owner count, in drops. The reserve is calculated as the reserve base plus diff --git a/include/xrpl/protocol/IOUAmount.h b/include/xrpl/protocol/IOUAmount.h index 2ee453f575..47aa35e0e8 100644 --- a/include/xrpl/protocol/IOUAmount.h +++ b/include/xrpl/protocol/IOUAmount.h @@ -26,8 +26,8 @@ class IOUAmount : private boost::totally_ordered, private boost::addi private: using mantissa_type = std::int64_t; using exponent_type = int; - mantissa_type mantissa_; - exponent_type exponent_; + mantissa_type mantissa_{}; + exponent_type exponent_{}; /** Adjusts the mantissa and exponent to the proper range. diff --git a/include/xrpl/protocol/Indexes.h b/include/xrpl/protocol/Indexes.h index 7884905d9e..574bbfbde6 100644 --- a/include/xrpl/protocol/Indexes.h +++ b/include/xrpl/protocol/Indexes.h @@ -363,11 +363,12 @@ uint256 getTicketIndex(AccountID const& account, SeqProxy ticketSeq); template +// NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init) struct keyletDesc { std::function function; Json::StaticString expectedLEName; - bool includeInTests; + bool includeInTests{}; }; // This list should include all of the keylet functions that take a single diff --git a/include/xrpl/protocol/Issue.h b/include/xrpl/protocol/Issue.h index c8e598a540..7bd01185c9 100644 --- a/include/xrpl/protocol/Issue.h +++ b/include/xrpl/protocol/Issue.h @@ -96,7 +96,7 @@ operator<=>(Issue const& lhs, Issue const& rhs) inline Issue const& xrpIssue() { - static Issue issue{xrpCurrency(), xrpAccount()}; + static Issue const issue{xrpCurrency(), xrpAccount()}; return issue; } @@ -104,7 +104,7 @@ xrpIssue() inline Issue const& noIssue() { - static Issue issue{noCurrency(), noAccount()}; + static Issue const issue{noCurrency(), noAccount()}; return issue; } diff --git a/include/xrpl/protocol/LedgerHeader.h b/include/xrpl/protocol/LedgerHeader.h index 1dc67cada5..6e22ad268d 100644 --- a/include/xrpl/protocol/LedgerHeader.h +++ b/include/xrpl/protocol/LedgerHeader.h @@ -72,4 +72,8 @@ deserializeHeader(Slice data, bool hasHash = false); LedgerHeader deserializePrefixedHeader(Slice data, bool hasHash = false); +/** Calculate the hash of a ledger header. */ +uint256 +calculateLedgerHash(LedgerHeader const& info); + } // namespace xrpl diff --git a/include/xrpl/protocol/Permissions.h b/include/xrpl/protocol/Permissions.h index 65861addc7..0ec4f04f1a 100644 --- a/include/xrpl/protocol/Permissions.h +++ b/include/xrpl/protocol/Permissions.h @@ -72,12 +72,12 @@ public: isDelegable(std::uint32_t const& permissionValue, Rules const& rules) const; // for tx level permission, permission value is equal to tx type plus one - uint32_t - txToPermissionType(TxType const& type) const; + static uint32_t + txToPermissionType(TxType const& type); // tx type value is permission value minus one - TxType - permissionToTxType(uint32_t const& value) const; + static TxType + permissionToTxType(uint32_t const& value); }; } // namespace xrpl diff --git a/include/xrpl/protocol/Quality.h b/include/xrpl/protocol/Quality.h index 09b0f4e7cb..e9451d44ed 100644 --- a/include/xrpl/protocol/Quality.h +++ b/include/xrpl/protocol/Quality.h @@ -56,8 +56,8 @@ struct TAmounts return *this; } - In in; - Out out; + In in{}; + Out out{}; }; using Amounts = TAmounts; @@ -304,8 +304,8 @@ Quality::ceil_TAmounts_helper( // Use the existing STAmount implementation for now, but consider // replacing with code specific to IOUAMount and XRPAmount - Amounts stAmt(toSTAmount(amount.in), toSTAmount(amount.out)); - STAmount stLim(toSTAmount(limit)); + Amounts const stAmt(toSTAmount(amount.in), toSTAmount(amount.out)); + STAmount const stLim(toSTAmount(limit)); Amounts const stRes = ((*this).*ceil_function)(stAmt, stLim, roundUp...); return TAmounts(toAmount(stRes.in), toAmount(stRes.out)); } diff --git a/include/xrpl/protocol/RippleLedgerHash.h b/include/xrpl/protocol/RippleLedgerHash.h index 2a51298d3d..9dab644663 100644 --- a/include/xrpl/protocol/RippleLedgerHash.h +++ b/include/xrpl/protocol/RippleLedgerHash.h @@ -6,4 +6,4 @@ namespace xrpl { using LedgerHash = uint256; -} +} // namespace xrpl diff --git a/include/xrpl/protocol/STAmount.h b/include/xrpl/protocol/STAmount.h index dadeec096f..df26f99b75 100644 --- a/include/xrpl/protocol/STAmount.h +++ b/include/xrpl/protocol/STAmount.h @@ -35,9 +35,9 @@ public: private: Asset mAsset; - mantissa_type mValue; + mantissa_type mValue{}; exponent_type mOffset; - bool mIsNegative; + bool mIsNegative{}; public: using value_type = STAmount; @@ -532,7 +532,7 @@ STAmount::fromNumber(A const& a, Number const& number) { bool const negative = number.mantissa() < 0; Number const working{negative ? -number : number}; - Asset asset{a}; + Asset const asset{a}; if (asset.integral()) { std::uint64_t const intValue = static_cast(working); @@ -716,7 +716,7 @@ roundToAsset( std::int32_t scale, Number::rounding_mode rounding = Number::getround()) { - NumberRoundModeGuard mg(rounding); + NumberRoundModeGuard const mg(rounding); STAmount const ret{asset, value}; if (ret.integral()) return ret; diff --git a/include/xrpl/protocol/STBase.h b/include/xrpl/protocol/STBase.h index 7f06b01ca4..8edeb26424 100644 --- a/include/xrpl/protocol/STBase.h +++ b/include/xrpl/protocol/STBase.h @@ -83,7 +83,7 @@ to_json(T const& t) namespace detail { class STVar; -} +} // namespace detail // VFALCO TODO fix this restriction on copy assignment. // diff --git a/include/xrpl/protocol/STLedgerEntry.h b/include/xrpl/protocol/STLedgerEntry.h index dde7d49ebd..a28868cd7a 100644 --- a/include/xrpl/protocol/STLedgerEntry.h +++ b/include/xrpl/protocol/STLedgerEntry.h @@ -8,7 +8,7 @@ namespace xrpl { class Rules; namespace test { class Invariants_test; -} +} // namespace test class STLedgerEntry final : public STObject, public CountedObject { @@ -86,7 +86,9 @@ inline STLedgerEntry::STLedgerEntry(LedgerEntryType type, uint256 const& key) { } -inline STLedgerEntry::STLedgerEntry(SerialIter&& sit, uint256 const& index) +inline STLedgerEntry::STLedgerEntry( + SerialIter&& sit, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + uint256 const& index) : STLedgerEntry(sit, index) { } diff --git a/include/xrpl/protocol/STObject.h b/include/xrpl/protocol/STObject.h index ecfae0086b..61a1cce05e 100644 --- a/include/xrpl/protocol/STObject.h +++ b/include/xrpl/protocol/STObject.h @@ -671,7 +671,7 @@ public: OptionalProxy& operator=(std::nullopt_t const&); OptionalProxy& - operator=(optional_type&& v); + operator=(optional_type&& v); // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) OptionalProxy& operator=(optional_type const& v); @@ -766,7 +766,7 @@ STObject::Proxy::assign(U&& u) st_->makeFieldAbsent(*f_); return; } - T* t; + T* t = nullptr; if (style_ == soeINVALID) t = dynamic_cast(st_->getPField(*f_, true)); else @@ -851,7 +851,9 @@ STObject::OptionalProxy::operator=(std::nullopt_t const&) -> OptionalProxy& template auto -STObject::OptionalProxy::operator=(optional_type&& v) -> OptionalProxy& +STObject::OptionalProxy::operator=( + optional_type&& v) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + -> OptionalProxy& { if (v) this->assign(std::move(*v)); @@ -930,6 +932,7 @@ STObject::Transform::operator()(detail::STVar const& e) const //------------------------------------------------------------------------------ +// NOLINTNEXTLINE(cppcoreguidelines-rvalue-reference-param-not-moved) inline STObject::STObject(SerialIter&& sit, SField const& name) : STObject(sit, name) { } @@ -1153,7 +1156,7 @@ STObject::getFieldByValue(SField const& field) const if (!rf) throwFieldNotFound(field); - SerializedTypeID id = rf->getSType(); + SerializedTypeID const id = rf->getSType(); if (id == STI_NOTPRESENT) return V(); // optional field not present @@ -1180,7 +1183,7 @@ STObject::getFieldByConstRef(SField const& field, V const& empty) const if (!rf) throwFieldNotFound(field); - SerializedTypeID id = rf->getSType(); + SerializedTypeID const id = rf->getSType(); if (id == STI_NOTPRESENT) return empty; // optional field not present diff --git a/include/xrpl/protocol/STTx.h b/include/xrpl/protocol/STTx.h index f200c19eac..b27d9e0637 100644 --- a/include/xrpl/protocol/STTx.h +++ b/include/xrpl/protocol/STTx.h @@ -179,7 +179,8 @@ sterilize(STTx const& stx); bool isPseudoTx(STObject const& tx); -inline STTx::STTx(SerialIter&& sit) : STTx(sit) +inline STTx::STTx(SerialIter&& sit) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + : STTx(sit) { } diff --git a/include/xrpl/protocol/STVector256.h b/include/xrpl/protocol/STVector256.h index dd77067b7c..815224def2 100644 --- a/include/xrpl/protocol/STVector256.h +++ b/include/xrpl/protocol/STVector256.h @@ -69,9 +69,6 @@ public: std::vector::iterator insert(std::vector::const_iterator pos, uint256 const& value); - std::vector::iterator - insert(std::vector::const_iterator pos, uint256&& value); - void push_back(uint256 const& v); @@ -184,12 +181,6 @@ STVector256::insert(std::vector::const_iterator pos, uint256 const& val return mValue.insert(pos, value); } -inline std::vector::iterator -STVector256::insert(std::vector::const_iterator pos, uint256&& value) -{ - return mValue.insert(pos, std::move(value)); -} - inline void STVector256::push_back(uint256 const& v) { diff --git a/include/xrpl/protocol/Serializer.h b/include/xrpl/protocol/Serializer.h index 98cefb4d08..2d3489fe7b 100644 --- a/include/xrpl/protocol/Serializer.h +++ b/include/xrpl/protocol/Serializer.h @@ -69,7 +69,7 @@ public: int add32(T i) { - int ret = mData.size(); + int const ret = mData.size(); mData.push_back(static_cast((i >> 24) & 0xff)); mData.push_back(static_cast((i >> 16) & 0xff)); mData.push_back(static_cast((i >> 8) & 0xff)); @@ -85,7 +85,7 @@ public: int add64(T i) { - int ret = mData.size(); + int const ret = mData.size(); mData.push_back(static_cast((i >> 56) & 0xff)); mData.push_back(static_cast((i >> 48) & 0xff)); mData.push_back(static_cast((i >> 40) & 0xff)); @@ -299,7 +299,7 @@ template int Serializer::addVL(Iter begin, Iter end, int len) { - int ret = addEncoded(len); + int const ret = addEncoded(len); for (; begin != end; ++begin) { addRaw(begin->data(), begin->size()); @@ -336,7 +336,7 @@ public: static_assert(N > 0, ""); } - std::size_t + [[nodiscard]] bool empty() const noexcept { return remain_ == 0; diff --git a/include/xrpl/protocol/TxSearched.h b/include/xrpl/protocol/TxSearched.h index e085bff315..c3359ee5ac 100644 --- a/include/xrpl/protocol/TxSearched.h +++ b/include/xrpl/protocol/TxSearched.h @@ -2,6 +2,6 @@ namespace xrpl { -enum class TxSearched { all, some, unknown }; +enum class TxSearched { All, Some, Unknown }; -} +} // namespace xrpl diff --git a/include/xrpl/protocol/detail/STVar.h b/include/xrpl/protocol/detail/STVar.h index bab2c2e024..1131437850 100644 --- a/include/xrpl/protocol/detail/STVar.h +++ b/include/xrpl/protocol/detail/STVar.h @@ -25,16 +25,10 @@ extern nonPresentObject_t nonPresentObject; // Concept to constrain STVar constructors, which // instantiate ST* types from SerializedTypeID -// clang-format off template concept ValidConstructSTArgs = - (std::is_same_v< - std::tuple...>, - std::tuple> || - std::is_same_v< - std::tuple...>, - std::tuple>); -// clang-format on + (std::is_same_v...>, std::tuple> || + std::is_same_v...>, std::tuple>); // "variant" that can hold any type of serialized object // and includes a small-object allocation optimization. @@ -56,7 +50,7 @@ public: STVar& operator=(STVar&& rhs); - STVar(STBase&& t) + STVar(STBase&& t) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) { p_ = t.move(max_size, &d_); } diff --git a/include/xrpl/protocol/detail/b58_utils.h b/include/xrpl/protocol/detail/b58_utils.h index adb889ee53..5ad12d56e3 100644 --- a/include/xrpl/protocol/detail/b58_utils.h +++ b/include/xrpl/protocol/detail/b58_utils.h @@ -59,7 +59,7 @@ inplace_bigint_add(std::span a, std::uint64_t b) return TokenCodecErrc::inputTooSmall; } - std::uint64_t carry; + std::uint64_t carry = 0; std::tie(a[0], carry) = carrying_add(a[0], b); for (auto& v : a.subspan(1)) @@ -162,7 +162,7 @@ b58_10_to_b58_be(std::uint64_t input) int i = 0; while (input > 0) { - std::uint64_t rem; + std::uint64_t rem = 0; std::tie(input, rem) = div_rem(input, 58); result[resultSize - 1 - i] = rem; i += 1; diff --git a/include/xrpl/protocol/detail/features.macro b/include/xrpl/protocol/detail/features.macro index 33e36b2612..6688592d07 100644 --- a/include/xrpl/protocol/detail/features.macro +++ b/include/xrpl/protocol/detail/features.macro @@ -11,65 +11,66 @@ #error "undefined macro: XRPL_RETIRE_FIX" #endif -// clang-format off // Add new amendments to the top of this list. // Keep it sorted in reverse chronological order. -XRPL_FEATURE(SmartEscrow, Supported::no, VoteBehavior::DefaultNo) +XRPL_FEATURE(SmartEscrow, Supported::no, VoteBehavior::DefaultNo) +XRPL_FIX (Security3_1_3, Supported::no, VoteBehavior::DefaultNo) XRPL_FIX (PermissionedDomainInvariant, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (ExpiredNFTokenOfferRemoval, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (BatchInnerSigs, Supported::no, VoteBehavior::DefaultNo) -XRPL_FEATURE(LendingProtocol, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(PermissionDelegationV1_1, Supported::no, VoteBehavior::DefaultNo) -XRPL_FIX (DirectoryLimit, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (IncludeKeyletFields, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(DynamicMPT, Supported::no, VoteBehavior::DefaultNo) -XRPL_FIX (TokenEscrowV1, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (PriceOracleOrder, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (MPTDeliveredAmount, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (AMMClawbackRounding, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(TokenEscrow, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (EnforceNFTokenTrustlineV2, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (AMMv1_3, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(PermissionedDEX, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(Batch, Supported::no, VoteBehavior::DefaultNo) -XRPL_FEATURE(SingleAssetVault, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (PayChanCancelAfter, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (InvalidTxFlags, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (FrozenLPTokenTransfer, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(DeepFreeze, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(PermissionedDomains, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(DynamicNFT, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(Credentials, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(AMMClawback, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (AMMv1_2, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(MPTokensV1, Supported::yes, VoteBehavior::DefaultNo) -// InvariantsV1_1 will be changes to Supported::yes when all the -// invariants expected to be included under it are complete. -XRPL_FEATURE(InvariantsV1_1, Supported::no, VoteBehavior::DefaultNo) -XRPL_FIX (NFTokenPageLinks, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (InnerObjTemplate2, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (EnforceNFTokenTrustline, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (ReducedOffersV2, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(NFTokenMintOffer, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (AMMv1_1, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (PreviousTxnID, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (XChainRewardRounding, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (EmptyDID, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(PriceOracle, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (AMMOverflowOffer, Supported::yes, VoteBehavior::DefaultYes) -XRPL_FIX (InnerObjTemplate, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (NFTokenReserve, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (FillOrKill, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(DID, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (DisallowIncomingV1, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(XChainBridge, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(AMM, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(Clawback, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (UniversalNumber, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo) -XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes) +XRPL_FIX (ExpiredNFTokenOfferRemoval, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (BatchInnerSigs, Supported::no, VoteBehavior::DefaultNo) +XRPL_FEATURE(LendingProtocol, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(PermissionDelegationV1_1, Supported::no, VoteBehavior::DefaultNo) +XRPL_FIX (DirectoryLimit, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (IncludeKeyletFields, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(DynamicMPT, Supported::no, VoteBehavior::DefaultNo) +XRPL_FIX (TokenEscrowV1, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (PriceOracleOrder, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (MPTDeliveredAmount, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (AMMClawbackRounding, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(TokenEscrow, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (EnforceNFTokenTrustlineV2, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (AMMv1_3, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(PermissionedDEX, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(Batch, Supported::no, VoteBehavior::DefaultNo) +XRPL_FEATURE(SingleAssetVault, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (PayChanCancelAfter, Supported::yes, VoteBehavior::DefaultNo) +// Check flags in Credential transactions +XRPL_FIX (InvalidTxFlags, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (FrozenLPTokenTransfer, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(DeepFreeze, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(PermissionedDomains, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(DynamicNFT, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(Credentials, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(AMMClawback, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (AMMv1_2, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(MPTokensV1, Supported::yes, VoteBehavior::DefaultNo) +// InvariantsV1_1 will be changed to Supported::yes when all the invariants expected to be included +// under it are complete. +XRPL_FEATURE(InvariantsV1_1, Supported::no, VoteBehavior::DefaultNo) +XRPL_FIX (NFTokenPageLinks, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (InnerObjTemplate2, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (EnforceNFTokenTrustline, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (ReducedOffersV2, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(NFTokenMintOffer, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (AMMv1_1, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (PreviousTxnID, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (XChainRewardRounding, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (EmptyDID, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(PriceOracle, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (AMMOverflowOffer, Supported::yes, VoteBehavior::DefaultYes) +XRPL_FIX (InnerObjTemplate, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (NFTokenReserve, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (FillOrKill, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(DID, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (DisallowIncomingV1, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(XChainBridge, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(AMM, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(Clawback, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (UniversalNumber, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo) +XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes) // The following amendments are obsolete, but must remain supported // because they could potentially get enabled. @@ -143,5 +144,3 @@ XRPL_RETIRE_FEATURE(SortedDirectories) XRPL_RETIRE_FEATURE(TicketBatch) XRPL_RETIRE_FEATURE(TickSize) XRPL_RETIRE_FEATURE(TrustSetAuth) - -// clang-format on diff --git a/include/xrpl/protocol/detail/sfields.macro b/include/xrpl/protocol/detail/sfields.macro index d51c6ddee8..2ad8d252eb 100644 --- a/include/xrpl/protocol/detail/sfields.macro +++ b/include/xrpl/protocol/detail/sfields.macro @@ -5,7 +5,6 @@ #error "undefined macro: TYPED_SFIELD" #endif -// clang-format off // untyped UNTYPED_SFIELD(sfLedgerEntry, LEDGERENTRY, 257) @@ -424,5 +423,3 @@ UNTYPED_SFIELD(sfAcceptedCredentials, ARRAY, 28) UNTYPED_SFIELD(sfPermissions, ARRAY, 29) UNTYPED_SFIELD(sfRawTransactions, ARRAY, 30) UNTYPED_SFIELD(sfBatchSigners, ARRAY, 31, SField::sMD_Default, SField::notSigning) - -// clang-format on diff --git a/include/xrpl/protocol/detail/token_errors.h b/include/xrpl/protocol/detail/token_errors.h index 686851f508..54b283c41a 100644 --- a/include/xrpl/protocol/detail/token_errors.h +++ b/include/xrpl/protocol/detail/token_errors.h @@ -15,7 +15,7 @@ enum class TokenCodecErrc { overflowAdd, unknown, }; -} +} // namespace xrpl namespace std { template <> @@ -69,7 +69,7 @@ public: inline xrpl::detail::TokenCodecErrcCategory const& TokenCodecErrcCategory() { - static xrpl::detail::TokenCodecErrcCategory c; + static xrpl::detail::TokenCodecErrcCategory const c; return c; } diff --git a/include/xrpl/protocol/json_get_or_throw.h b/include/xrpl/protocol/json_get_or_throw.h index 336d875450..4406d9ff24 100644 --- a/include/xrpl/protocol/json_get_or_throw.h +++ b/include/xrpl/protocol/json_get_or_throw.h @@ -112,7 +112,7 @@ getOrThrow(Json::Value const& v, xrpl::SField const& field) { auto const s = inner.asString(); // parse as hex - std::uint64_t val; + std::uint64_t val = 0; auto [p, ec] = std::from_chars(s.data(), s.data() + s.size(), val, 16); diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index 8b810d50d1..632b7df770 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -21,690 +21,663 @@ namespace jss { error: Common properties of RPC error responses. */ -// clang-format off -JSS(AL_size); // out: GetCounts -JSS(AL_hit_rate); // out: GetCounts -JSS(AcceptedCredentials); // out: AccountObjects -JSS(ACCOUNT_SET_FLAGS); // out: RPC server_definitions -JSS(Account); // in: TransactionSign; field. -JSS(AMMID); // field -JSS(Amount); // in: TransactionSign; field. -JSS(Amount2); // in/out: AMM IOU/XRP pool, deposit, withdraw amount -JSS(Asset); // in: AMM Asset1 -JSS(Asset2); // in: AMM Asset2 -JSS(AssetClass); // in: Oracle -JSS(AssetPrice); // in: Oracle -JSS(AuthAccount); // in: AMM Auction Slot -JSS(AuthAccounts); // in: AMM Auction Slot -JSS(BaseAsset); // in: Oracle -JSS(BidMax); // in: AMM Bid -JSS(BidMin); // in: AMM Bid -JSS(ClearFlag); // field. -JSS(Counterparty); // field. -JSS(CounterpartySignature);// field. -JSS(DeliverMax); // out: alias to Amount -JSS(DeliverMin); // in: TransactionSign -JSS(Destination); // in: TransactionSign; field. -JSS(EPrice); // in: AMM Deposit option -JSS(Fee); // in/out: TransactionSign; field. -JSS(Flags); // in/out: TransactionSign; field. -JSS(Holder); // field. -JSS(Invalid); // -JSS(Issuer); // in: Credential transactions -JSS(IssuingChainDoor); // field. -JSS(IssuingChainIssue); // field. -JSS(LastLedgerSequence); // in: TransactionSign; field -JSS(LastUpdateTime); // field. -JSS(LimitAmount); // field. -JSS(LockingChainDoor); // field. -JSS(LockingChainIssue); // field. -JSS(NetworkID); // field. -JSS(LPTokenOut); // in: AMM Liquidity Provider deposit tokens -JSS(LPTokenIn); // in: AMM Liquidity Provider withdraw tokens -JSS(LPToken); // out: AMM Liquidity Provider tokens info -JSS(OfferSequence); // field. -JSS(OracleDocumentID); // field -JSS(Owner); // field -JSS(Paths); // in/out: TransactionSign -JSS(PriceDataSeries); // field. -JSS(PriceData); // field. -JSS(Provider); // field. -JSS(QuoteAsset); // in: Oracle. -JSS(RawTransaction); // in: Batch -JSS(RawTransactions); // in: Batch -JSS(SLE_hit_rate); // out: GetCounts. -JSS(Scale); // field. -JSS(SettleDelay); // in: TransactionSign -JSS(SendMax); // in: TransactionSign -JSS(Sequence); // in/out: TransactionSign; field. -JSS(SetFlag); // field. -JSS(Signer); // field. -JSS(Signers); // field. -JSS(SigningPubKey); // field. -JSS(Subject); // in: Credential transactions -JSS(TakerGets); // field. -JSS(TakerPays); // field. -JSS(TradingFee); // in/out: AMM trading fee -JSS(TransactionType); // in: TransactionSign. -JSS(TransferRate); // in: TransferRate. -JSS(TxnSignature); // field. -JSS(URI); // field. -JSS(VoteSlots); // out: AMM Vote -JSS(aborted); // out: InboundLedger -JSS(accepted); // out: LedgerToJson, OwnerInfo, SubmitTransaction -JSS(accountState); // out: LedgerToJson -JSS(accountTreeHash); // out: ledger/Ledger.cpp -JSS(account_data); // out: AccountInfo -JSS(account_flags); // out: AccountInfo -JSS(account_hash); // out: LedgerToJson -JSS(account_id); // out: WalletPropose -JSS(account_nfts); // out: AccountNFTs -JSS(account_objects); // out: AccountObjects -JSS(account_root); // in: LedgerEntry -JSS(account_sequence_next); // out: SubmitTransaction +JSS(AL_size); // out: GetCounts +JSS(AL_hit_rate); // out: GetCounts +JSS(AcceptedCredentials); // out: AccountObjects +JSS(ACCOUNT_SET_FLAGS); // out: RPC server_definitions +JSS(Account); // in: TransactionSign; field. +JSS(AMMID); // field +JSS(Amount); // in: TransactionSign; field. +JSS(Amount2); // in/out: AMM IOU/XRP pool, deposit, withdraw amount +JSS(Asset); // in: AMM Asset1 +JSS(Asset2); // in: AMM Asset2 +JSS(AssetClass); // in: Oracle +JSS(AssetPrice); // in: Oracle +JSS(AuthAccount); // in: AMM Auction Slot +JSS(AuthAccounts); // in: AMM Auction Slot +JSS(BaseAsset); // in: Oracle +JSS(BidMax); // in: AMM Bid +JSS(BidMin); // in: AMM Bid +JSS(ClearFlag); // field. +JSS(Counterparty); // field. +JSS(CounterpartySignature); // field. +JSS(DeliverMax); // out: alias to Amount +JSS(DeliverMin); // in: TransactionSign +JSS(Destination); // in: TransactionSign; field. +JSS(EPrice); // in: AMM Deposit option +JSS(Fee); // in/out: TransactionSign; field. +JSS(Flags); // in/out: TransactionSign; field. +JSS(Holder); // field. +JSS(Invalid); // +JSS(Issuer); // in: Credential transactions +JSS(IssuingChainDoor); // field. +JSS(IssuingChainIssue); // field. +JSS(LastLedgerSequence); // in: TransactionSign; field +JSS(LastUpdateTime); // field. +JSS(LimitAmount); // field. +JSS(LockingChainDoor); // field. +JSS(LockingChainIssue); // field. +JSS(NetworkID); // field. +JSS(LPTokenOut); // in: AMM Liquidity Provider deposit tokens +JSS(LPTokenIn); // in: AMM Liquidity Provider withdraw tokens +JSS(LPToken); // out: AMM Liquidity Provider tokens info +JSS(OfferSequence); // field. +JSS(OracleDocumentID); // field +JSS(Owner); // field +JSS(Paths); // in/out: TransactionSign +JSS(PriceDataSeries); // field. +JSS(PriceData); // field. +JSS(Provider); // field. +JSS(QuoteAsset); // in: Oracle. +JSS(RawTransaction); // in: Batch +JSS(RawTransactions); // in: Batch +JSS(SLE_hit_rate); // out: GetCounts. +JSS(Scale); // field. +JSS(SettleDelay); // in: TransactionSign +JSS(SendMax); // in: TransactionSign +JSS(Sequence); // in/out: TransactionSign; field. +JSS(SetFlag); // field. +JSS(Signer); // field. +JSS(Signers); // field. +JSS(SigningPubKey); // field. +JSS(Subject); // in: Credential transactions +JSS(TakerGets); // field. +JSS(TakerPays); // field. +JSS(TradingFee); // in/out: AMM trading fee +JSS(TransactionType); // in: TransactionSign. +JSS(TransferRate); // in: TransferRate. +JSS(TxnSignature); // field. +JSS(URI); // field. +JSS(VoteSlots); // out: AMM Vote +JSS(aborted); // out: InboundLedger +JSS(accepted); // out: LedgerToJson, OwnerInfo, SubmitTransaction +JSS(accountState); // out: LedgerToJson +JSS(accountTreeHash); // out: ledger/Ledger.cpp +JSS(account_data); // out: AccountInfo +JSS(account_flags); // out: AccountInfo +JSS(account_hash); // out: LedgerToJson +JSS(account_id); // out: WalletPropose +JSS(account_nfts); // out: AccountNFTs +JSS(account_objects); // out: AccountObjects +JSS(account_root); // in: LedgerEntry +JSS(account_sequence_next); // out: SubmitTransaction JSS(account_sequence_available); // out: SubmitTransaction JSS(account_history_tx_stream); // in: Subscribe, Unsubscribe JSS(account_history_tx_index); // out: Account txn history subscribe - -JSS(account_history_tx_first); // out: Account txn history subscribe -JSS(account_history_boundary); // out: Account txn history subscribe -JSS(accounts); // in: LedgerEntry, Subscribe, - // handlers/Ledger, Unsubscribe -JSS(accounts_proposed); // in: Subscribe, Unsubscribe -JSS(action); -JSS(active); // out: OverlayImpl -JSS(acquiring); // out: LedgerRequest -JSS(address); // out: PeerImp -JSS(affected); // out: AcceptedLedgerTx -JSS(age); // out: NetworkOPs, Peers -JSS(alternatives); // out: PathRequest, RipplePathFind -JSS(amendment_blocked); // out: NetworkOPs -JSS(amm_account); // in: amm_info -JSS(amount); // out: AccountChannels, amm_info -JSS(amount2); // out: amm_info -JSS(api_version); // in: many, out: Version -JSS(api_version_low); // out: Version -JSS(applied); // out: SubmitTransaction -JSS(asks); // out: Subscribe -JSS(asset); // in: amm_info -JSS(asset2); // in: amm_info -JSS(assets); // out: GatewayBalances -JSS(asset_frozen); // out: amm_info -JSS(asset2_frozen); // out: amm_info -JSS(attestations); -JSS(attestation_reward_account); -JSS(auction_slot); // out: amm_info -JSS(authorized); // out: AccountLines -JSS(authorize); // out: delegate -JSS(authorized_credentials); // in: ledger_entry DepositPreauth -JSS(auth_accounts); // out: amm_info -JSS(auth_change); // out: AccountInfo -JSS(auth_change_queued); // out: AccountInfo -JSS(available); // out: ValidatorList -JSS(avg_bps_recv); // out: Peers -JSS(avg_bps_sent); // out: Peers -JSS(balance); // out: AccountLines -JSS(balances); // out: GatewayBalances -JSS(base); // out: LogLevel -JSS(base_asset); // in: get_aggregate_price -JSS(base_fee); // out: NetworkOPs -JSS(base_fee_xrp); // out: NetworkOPs -JSS(bids); // out: Subscribe -JSS(binary); // in: AccountTX, LedgerEntry, - // AccountTxOld, Tx LedgerData -JSS(blob); // out: ValidatorList -JSS(blobs_v2); // out: ValidatorList - // in: UNL -JSS(books); // in: Subscribe, Unsubscribe -JSS(both); // in: Subscribe, Unsubscribe -JSS(both_sides); // in: Subscribe, Unsubscribe -JSS(branch); // out: server_info -JSS(broadcast); // out: SubmitTransaction -JSS(bridge_account); // in: LedgerEntry -JSS(build_path); // in: TransactionSign -JSS(build_version); // out: NetworkOPs -JSS(cancel_after); // out: AccountChannels -JSS(can_delete); // out: CanDelete -JSS(mpt_amount); // out: mpt_holders -JSS(mpt_issuance_id); // in: Payment, mpt_holders -JSS(mptoken_index); // out: mpt_holders -JSS(changes); // out: BookChanges -JSS(channel_id); // out: AccountChannels -JSS(channels); // out: AccountChannels -JSS(check_nodes); // in: LedgerCleaner -JSS(clear); // in/out: FetchInfo -JSS(close); // out: BookChanges -JSS(close_flags); // out: LedgerToJson -JSS(close_time); // in: Application, out: NetworkOPs, - // RCLCxPeerPos, LedgerToJson -JSS(close_time_iso); // out: Tx, NetworkOPs, TransactionEntry - // AccountTx, LedgerToJson -JSS(close_time_estimated); // in: Application, out: LedgerToJson -JSS(close_time_human); // out: LedgerToJson -JSS(close_time_offset); // out: NetworkOPs -JSS(close_time_resolution); // in: Application; out: LedgerToJson -JSS(closed); // out: NetworkOPs, LedgerToJson, - // handlers/Ledger -JSS(closed_ledger); // out: NetworkOPs -JSS(cluster); // out: PeerImp -JSS(code); // out: errors -JSS(command); // in: RPCHandler -JSS(common); // out: RPC server_definitions -JSS(complete); // out: NetworkOPs, InboundLedger -JSS(complete_ledgers); // out: NetworkOPs, PeerImp -JSS(consensus); // out: NetworkOPs, LedgerConsensus -JSS(converge_time); // out: NetworkOPs -JSS(converge_time_s); // out: NetworkOPs -JSS(cookie); // out: NetworkOPs -JSS(count); // in: AccountTx*, ValidatorList -JSS(counters); // in/out: retrieve counters -JSS(credentials); // in: deposit_authorized -JSS(credential_type); // in: LedgerEntry DepositPreauth -JSS(ctid); // in/out: Tx RPC -JSS(currency_a); // out: BookChanges -JSS(currency_b); // out: BookChanges -JSS(currency); // in: paths/PathRequest, STAmount - // out: STPathSet, STAmount, - // AccountLines -JSS(current); // out: OwnerInfo -JSS(current_activities); -JSS(current_ledger_size); // out: TxQ -JSS(current_queue_size); // out: TxQ -JSS(data); // out: LedgerData -JSS(date); // out: tx/Transaction, NetworkOPs -JSS(dbKBLedger); // out: getCounts -JSS(dbKBTotal); // out: getCounts -JSS(dbKBTransaction); // out: getCounts -JSS(debug_signing); // in: TransactionSign -JSS(deletion_blockers_only); // in: AccountObjects -JSS(delivered_amount); // out: insertDeliveredAmount -JSS(deposit_authorized); // out: deposit_authorized -JSS(deprecated); // out -JSS(descending); // in: AccountTx* -JSS(description); // in/out: Reservations -JSS(destination); // in: nft_buy_offers, nft_sell_offers -JSS(destination_account); // in: PathRequest, RipplePathFind, account_lines - // out: AccountChannels -JSS(destination_amount); // in: PathRequest, RipplePathFind -JSS(destination_currencies); // in: PathRequest, RipplePathFind -JSS(destination_tag); // in: PathRequest - // out: AccountChannels -JSS(details); // out: Manifest, server_info -JSS(dir_entry); // out: DirectoryEntryIterator -JSS(dir_index); // out: DirectoryEntryIterator -JSS(dir_root); // out: DirectoryEntryIterator -JSS(discounted_fee); // out: amm_info -JSS(domain); // out: ValidatorInfo, Manifest -JSS(drops); // out: TxQ -JSS(duration_us); // out: NetworkOPs -JSS(effective); // out: ValidatorList - // in: UNL -JSS(enabled); // out: AmendmentTable -JSS(engine_result); // out: NetworkOPs, TransactionSign, Submit -JSS(engine_result_code); // out: NetworkOPs, TransactionSign, Submit -JSS(engine_result_message); // out: NetworkOPs, TransactionSign, Submit -JSS(entire_set); // out: get_aggregate_price -JSS(ephemeral_key); // out: ValidatorInfo - // in/out: Manifest -JSS(error); // out: error -JSS(errored); -JSS(error_code); // out: error -JSS(error_exception); // out: Submit -JSS(error_message); // out: error -JSS(expand); // in: handler/Ledger -JSS(expected_date); // out: any (warnings) -JSS(expected_date_UTC); // out: any (warnings) -JSS(expected_ledger_size); // out: TxQ -JSS(expiration); // out: AccountOffers, AccountChannels, - // ValidatorList, amm_info -JSS(extension_compute); // out: NetworkOps -JSS(extension_size); // out: NetworkOps -JSS(gas_price); // out: NetworkOps -JSS(fail_hard); // in: Sign, Submit -JSS(failed); // out: InboundLedger -JSS(feature); // in: Feature -JSS(features); // out: Feature -JSS(fee_base); // out: NetworkOPs -JSS(fee_div_max); // in: TransactionSign -JSS(fee_level); // out: AccountInfo -JSS(fee_mult_max); // in: TransactionSign -JSS(fee_ref); // out: NetworkOPs, DEPRECATED -JSS(fetch_pack); // out: NetworkOPs -JSS(FIELDS); // out: RPC server_definitions - // matches definitions.json format -JSS(first); // out: rpc/Version -JSS(finished); -JSS(fix_txns); // in: LedgerCleaner -JSS(flags); // out: AccountOffers, - // NetworkOPs -JSS(forward); // in: AccountTx -JSS(freeze); // out: AccountLines -JSS(freeze_peer); // out: AccountLines -JSS(deep_freeze); // out: AccountLines -JSS(deep_freeze_peer); // out: AccountLines -JSS(frozen_balances); // out: GatewayBalances -JSS(full); // in: LedgerClearer, handlers/Ledger -JSS(full_reply); // out: PathFind -JSS(fullbelow_size); // out: GetCounts -JSS(git); // out: server_info -JSS(good); // out: RPCVersion -JSS(hash); // out: NetworkOPs, InboundLedger, - // LedgerToJson, STTx; field -JSS(have_header); // out: InboundLedger -JSS(have_state); // out: InboundLedger -JSS(have_transactions); // out: InboundLedger -JSS(high); // out: BookChanges -JSS(highest_sequence); // out: AccountInfo -JSS(highest_ticket); // out: AccountInfo -JSS(historical_perminute); // historical_perminute. -JSS(holders); // out: MPTHolders -JSS(hostid); // out: NetworkOPs -JSS(hotwallet); // in: GatewayBalances -JSS(id); // websocket. -JSS(ident); // in: AccountCurrencies, AccountInfo, - // OwnerInfo -JSS(ignore_default); // in: AccountLines -JSS(in); // out: OverlayImpl -JSS(inLedger); // out: tx/Transaction -JSS(inbound); // out: PeerImp -JSS(index); // in: LedgerEntry - // out: STLedgerEntry, - // LedgerEntry, TxHistory, LedgerData -JSS(info); // out: ServerInfo, ConsensusInfo, FetchInfo -JSS(initial_sync_duration_us); -JSS(internal_command); // in: Internal -JSS(invalid_API_version); // out: Many, when a request has an invalid - // version -JSS(io_latency_ms); // out: NetworkOPs -JSS(ip); // in: Connect, out: OverlayImpl -JSS(is_burned); // out: nft_info (clio) -JSS(isSerialized); // out: RPC server_definitions - // matches definitions.json format -JSS(isSigningField); // out: RPC server_definitions - // matches definitions.json format -JSS(isVLEncoded); // out: RPC server_definitions - // matches definitions.json format -JSS(issuer); // in: RipplePathFind, Subscribe, - // Unsubscribe, BookOffers - // out: STPathSet, STAmount -JSS(job); -JSS(job_queue); -JSS(jobs); -JSS(jsonrpc); // json version -JSS(jq_trans_overflow); // JobQueue transaction limit overflow. -JSS(kept); // out: SubmitTransaction -JSS(key); // out -JSS(key_type); // in/out: WalletPropose, TransactionSign -JSS(latency); // out: PeerImp -JSS(last); // out: RPCVersion -JSS(last_close); // out: NetworkOPs -JSS(last_refresh_time); // out: ValidatorSite -JSS(last_refresh_status); // out: ValidatorSite -JSS(last_refresh_message); // out: ValidatorSite -JSS(ledger); // in: NetworkOPs, LedgerCleaner, - // RPCHelpers - // out: NetworkOPs, PeerImp -JSS(ledger_current_index); // out: NetworkOPs, RPCHelpers, - // LedgerCurrent, LedgerAccept, - // AccountLines -JSS(ledger_data); // out: LedgerHeader -JSS(ledger_hash); // in: RPCHelpers, LedgerRequest, - // RipplePathFind, TransactionEntry, - // handlers/Ledger - // out: NetworkOPs, RPCHelpers, - // LedgerClosed, LedgerData, - // AccountLines -JSS(ledger_hit_rate); // out: GetCounts -JSS(ledger_index); // in/out: many -JSS(ledger_index_max); // in, out: AccountTx* -JSS(ledger_index_min); // in, out: AccountTx* -JSS(ledger_max); // in, out: AccountTx* -JSS(ledger_min); // in, out: AccountTx* -JSS(ledger_time); // out: NetworkOPs -JSS(LEDGER_ENTRY_TYPES); // out: RPC server_definitions - // matches definitions.json format -JSS(LEDGER_ENTRY_FLAGS); // out: RPC server_definitions -JSS(LEDGER_ENTRY_FORMATS); // out: RPC server_definitions -JSS(levels); // LogLevels -JSS(limit); // in/out: AccountTx*, AccountOffers, - // AccountLines, AccountObjects - // in: LedgerData, BookOffers -JSS(limit_peer); // out: AccountLines -JSS(lines); // out: AccountLines -JSS(list); // out: ValidatorList -JSS(load); // out: NetworkOPs, PeerImp -JSS(load_base); // out: NetworkOPs -JSS(load_factor); // out: NetworkOPs -JSS(load_factor_cluster); // out: NetworkOPs -JSS(load_factor_fee_escalation); // out: NetworkOPs -JSS(load_factor_fee_queue); // out: NetworkOPs -JSS(load_factor_fee_reference); // out: NetworkOPs -JSS(load_factor_local); // out: NetworkOPs -JSS(load_factor_net); // out: NetworkOPs -JSS(load_factor_server); // out: NetworkOPs -JSS(load_fee); // out: LoadFeeTrackImp, NetworkOPs -JSS(loan_broker_id); // in: LedgerEntry -JSS(loan_seq); // in: LedgerEntry -JSS(local); // out: resource/Logic.h -JSS(local_txs); // out: GetCounts -JSS(local_static_keys); // out: ValidatorList -JSS(locked); // out: GatewayBalances -JSS(low); // out: BookChanges -JSS(lowest_sequence); // out: AccountInfo -JSS(lowest_ticket); // out: AccountInfo -JSS(lp_token); // out: amm_info -JSS(majority); // out: RPC feature -JSS(manifest); // out: ValidatorInfo, Manifest -JSS(marker); // in/out: AccountTx, AccountOffers, - // AccountLines, AccountObjects, - // LedgerData - // in: BookOffers -JSS(master_key); // out: WalletPropose, NetworkOPs, - // ValidatorInfo - // in/out: Manifest -JSS(master_seed); // out: WalletPropose -JSS(master_seed_hex); // out: WalletPropose -JSS(master_signature); // out: pubManifest -JSS(max_ledger); // in/out: LedgerCleaner -JSS(max_queue_size); // out: TxQ -JSS(max_spend_drops); // out: AccountInfo -JSS(max_spend_drops_total); // out: AccountInfo -JSS(mean); // out: get_aggregate_price -JSS(median); // out: get_aggregate_price -JSS(median_fee); // out: TxQ -JSS(median_level); // out: TxQ -JSS(message); // error. -JSS(meta); // out: NetworkOPs, AccountTx*, Tx -JSS(meta_blob); // out: NetworkOPs, AccountTx*, Tx -JSS(metaData); -JSS(metadata); // out: TransactionEntry -JSS(method); // RPC -JSS(methods); -JSS(metrics); // out: Peers -JSS(min_count); // in: GetCounts -JSS(min_ledger); // in: LedgerCleaner -JSS(minimum_fee); // out: TxQ -JSS(minimum_level); // out: TxQ -JSS(missingCommand); // error -JSS(name); // out: AmendmentTableImpl, PeerImp -JSS(needed_state_hashes); // out: InboundLedger -JSS(needed_transaction_hashes); // out: InboundLedger -JSS(network_id); // out: NetworkOPs -JSS(network_ledger); // out: NetworkOPs -JSS(next_refresh_time); // out: ValidatorSite -JSS(nft_id); // in: nft_sell_offers, nft_buy_offers -JSS(nft_offer_index); // out nft_buy_offers, nft_sell_offers -JSS(nft_serial); // out: account_nfts -JSS(nft_taxon); // out: nft_info (clio) -JSS(nftoken_id); // out: insertNFTokenID -JSS(nftoken_ids); // out: insertNFTokenID -JSS(no_ripple); // out: AccountLines -JSS(no_ripple_peer); // out: AccountLines -JSS(node); // out: LedgerEntry -JSS(node_binary); // out: LedgerEntry -JSS(node_read_bytes); // out: GetCounts -JSS(node_read_errors); // out: GetCounts -JSS(node_read_retries); // out: GetCounts -JSS(node_reads_hit); // out: GetCounts -JSS(node_reads_total); // out: GetCounts -JSS(node_reads_duration_us); // out: GetCounts -JSS(node_size); // out: server_info -JSS(nodes); // out: VaultInfo -JSS(nodestore); // out: GetCounts -JSS(node_writes); // out: GetCounts -JSS(node_written_bytes); // out: GetCounts -JSS(node_writes_duration_us); // out: GetCounts -JSS(node_write_retries); // out: GetCounts -JSS(node_writes_delayed); // out::GetCounts -JSS(nth); // out: RPC server_definitions -JSS(obligations); // out: GatewayBalances -JSS(offers); // out: NetworkOPs, AccountOffers, Subscribe -JSS(offer_id); // out: insertNFTokenOfferID -JSS(offline); // in: TransactionSign -JSS(offset); // in/out: AccountTxOld -JSS(open); // out: handlers/Ledger -JSS(open_ledger_cost); // out: SubmitTransaction -JSS(open_ledger_fee); // out: TxQ -JSS(open_ledger_level); // out: TxQ -JSS(optionality); // out: server_definitions -JSS(oracles); // in: get_aggregate_price -JSS(oracle_document_id); // in: get_aggregate_price -JSS(out); // out: OverlayImpl -JSS(owner); // in: LedgerEntry, out: NetworkOPs -JSS(owner_funds); // in/out: Ledger, NetworkOPs, AcceptedLedgerTx -JSS(page_index); -JSS(params); // RPC -JSS(parent_close_time); // out: LedgerToJson -JSS(parent_hash); // out: LedgerToJson -JSS(partition); // in: LogLevel -JSS(passphrase); // in: WalletPropose -JSS(password); // in: Subscribe -JSS(paths); // in: RipplePathFind -JSS(paths_canonical); // out: RipplePathFind -JSS(paths_computed); // out: PathRequest, RipplePathFind -JSS(peer); // in: AccountLines -JSS(peer_authorized); // out: AccountLines -JSS(peer_id); // out: RCLCxPeerPos -JSS(peers); // out: InboundLedger, handlers/Peers, Overlay -JSS(peer_disconnects); // Severed peer connection counter. -JSS(peer_disconnects_resources); // Severed peer connections because of - // excess resource consumption. -JSS(port); // in: Connect, out: NetworkOPs -JSS(ports); // out: NetworkOPs -JSS(previous); // out: Reservations -JSS(previous_ledger); // out: LedgerPropose -JSS(price); // out: amm_info, AuctionSlot -JSS(proof); // in: BookOffers -JSS(propose_seq); // out: LedgerPropose -JSS(proposers); // out: NetworkOPs, LedgerConsensus -JSS(protocol); // out: NetworkOPs, PeerImp -JSS(proxied); // out: RPC ping -JSS(pseudo_account); // out: AccountInfo -JSS(pubkey_node); // out: NetworkOPs -JSS(pubkey_publisher); // out: ValidatorList -JSS(pubkey_validator); // out: NetworkOPs, ValidatorList -JSS(public_key); // out: OverlayImpl, PeerImp, WalletPropose, - // ValidatorInfo - // in/out: Manifest -JSS(public_key_hex); // out: WalletPropose -JSS(published_ledger); // out: NetworkOPs -JSS(publisher_lists); // out: ValidatorList -JSS(quality); // out: NetworkOPs -JSS(quality_in); // out: AccountLines -JSS(quality_out); // out: AccountLines -JSS(queue); // in: AccountInfo -JSS(queue_data); // out: AccountInfo -JSS(queued); // out: SubmitTransaction -JSS(queued_duration_us); -JSS(quote_asset); // in: get_aggregate_price -JSS(random); // out: Random -JSS(raw_meta); // out: AcceptedLedgerTx -JSS(receive_currencies); // out: AccountCurrencies -JSS(reference_level); // out: TxQ -JSS(refresh_interval); // in: UNL -JSS(refresh_interval_min); // out: ValidatorSites -JSS(regular_seed); // in/out: LedgerEntry -JSS(remaining); // out: ValidatorList -JSS(remote); // out: Logic.h -JSS(request); // RPC -JSS(requested); // out: Manifest -JSS(reservations); // out: Reservations -JSS(reserve_base); // out: NetworkOPs -JSS(reserve_base_xrp); // out: NetworkOPs -JSS(reserve_inc); // out: NetworkOPs -JSS(reserve_inc_xrp); // out: NetworkOPs -JSS(response); // websocket -JSS(result); // RPC -JSS(ripple_lines); // out: NetworkOPs -JSS(ripple_state); // in: LedgerEntr -JSS(ripplerpc); // ripple RPC version -JSS(role); // out: Ping.cpp -JSS(rpc); -JSS(rt_accounts); // in: Subscribe, Unsubscribe -JSS(running_duration_us); -JSS(search_depth); // in: RipplePathFind -JSS(searched_all); // out: Tx -JSS(secret); // in: TransactionSign, - // ValidationCreate, ValidationSeed, - // channel_authorize -JSS(seed); // -JSS(seed_hex); // in: WalletPropose, TransactionSign -JSS(send_currencies); // out: AccountCurrencies -JSS(send_max); // in: PathRequest, RipplePathFind -JSS(seq); // in: LedgerEntry; - // out: NetworkOPs, RPCSub, AccountOffers, - // ValidatorList, ValidatorInfo, Manifest -JSS(sequence); // in: UNL -JSS(sequence_count); // out: AccountInfo -JSS(server_domain); // out: NetworkOPs -JSS(server_state); // out: NetworkOPs -JSS(server_state_duration_us);// out: NetworkOPs -JSS(server_status); // out: NetworkOPs -JSS(server_version); // out: NetworkOPs -JSS(settle_delay); // out: AccountChannels -JSS(severity); // in: LogLevel -JSS(shares); // out: VaultInfo -JSS(signature); // out: NetworkOPs, ChannelAuthorize -JSS(signature_target); // in: TransactionSign -JSS(signature_verified); // out: ChannelVerify -JSS(signing_key); // out: NetworkOPs -JSS(signing_keys); // out: ValidatorList -JSS(signing_time); // out: NetworkOPs -JSS(signer_lists); // in/out: AccountInfo -JSS(size); // out: get_aggregate_price -JSS(snapshot); // in: Subscribe -JSS(source_account); // in: PathRequest, RipplePathFind -JSS(source_amount); // in: PathRequest, RipplePathFind -JSS(source_currencies); // in: PathRequest, RipplePathFind -JSS(source_tag); // out: AccountChannels -JSS(stand_alone); // out: NetworkOPs -JSS(standard_deviation); // out: get_aggregate_price -JSS(start); // in: TxHistory -JSS(started); -JSS(state_accounting); // out: NetworkOPs -JSS(state_now); // in: Subscribe -JSS(status); // error -JSS(stop); // in: LedgerCleaner -JSS(stop_history_tx_only); // in: Unsubscribe, stop history tx stream -JSS(streams); // in: Subscribe, Unsubscribe -JSS(strict); // in: AccountCurrencies, AccountInfo -JSS(sub_index); // in: LedgerEntry -JSS(subcommand); // in: PathFind -JSS(subject); // in: LedgerEntry Credential -JSS(success); // rpc -JSS(supported); // out: AmendmentTableImpl -JSS(sync_mode); // in: Submit -JSS(system_time_offset); // out: NetworkOPs -JSS(tag); // out: Peers -JSS(taker); // in: Subscribe, BookOffers -JSS(taker_gets); // in: Subscribe, Unsubscribe, BookOffers -JSS(taker_gets_funded); // out: NetworkOPs -JSS(taker_pays); // in: Subscribe, Unsubscribe, BookOffers -JSS(taker_pays_funded); // out: NetworkOPs -JSS(threshold); // in: Blacklist -JSS(ticket_count); // out: AccountInfo -JSS(ticket_seq); // in: LedgerEntry -JSS(time); -JSS(timeouts); // out: InboundLedger -JSS(time_threshold); // in/out: Oracle aggregate -JSS(time_interval); // out: AMM Auction Slot -JSS(track); // out: PeerImp -JSS(traffic); // out: Overlay -JSS(trim); // in: get_aggregate_price -JSS(trimmed_set); // out: get_aggregate_price -JSS(total); // out: counters -JSS(total_bytes_recv); // out: Peers -JSS(total_bytes_sent); // out: Peers -JSS(total_coins); // out: LedgerToJson -JSS(trading_fee); // out: amm_info -JSS(transTreeHash); // out: ledger/Ledger.cpp -JSS(transaction); // in: Tx - // out: NetworkOPs, AcceptedLedgerTx, -JSS(transaction_hash); // out: RCLCxPeerPos, LedgerToJson -JSS(transactions); // out: LedgerToJson, - // in: AccountTx*, Unsubscribe -JSS(TRANSACTION_RESULTS); // out: RPC server_definitions - // matches definitions.json format -JSS(TRANSACTION_TYPES); // out: RPC server_definitions - // matches definitions.json format -JSS(TRANSACTION_FLAGS); // out: RPC server_definitions -JSS(TRANSACTION_FORMATS); // out: RPC server_definitions -JSS(TYPES); // out: RPC server_definitions - // matches definitions.json format -JSS(transfer_rate); // out: nft_info (clio) -JSS(transitions); // out: NetworkOPs -JSS(treenode_cache_size); // out: GetCounts -JSS(treenode_track_size); // out: GetCounts -JSS(trusted); // out: UnlList -JSS(trusted_validator_keys); // out: ValidatorList -JSS(tx); // out: STTx, AccountTx* -JSS(tx_blob); // in/out: Submit, - // in: TransactionSign, AccountTx* -JSS(tx_hash); // in: TransactionEntry -JSS(tx_json); // in/out: TransactionSign - // out: TransactionEntry -JSS(tx_signing_hash); // out: TransactionSign -JSS(tx_unsigned); // out: TransactionSign -JSS(txn_count); // out: NetworkOPs -JSS(txr_tx_cnt); // out: protocol message tx's count -JSS(txr_tx_sz); // out: protocol message tx's size -JSS(txr_have_txs_cnt); // out: protocol message have tx count -JSS(txr_have_txs_sz); // out: protocol message have tx size -JSS(txr_get_ledger_cnt); // out: protocol message get ledger count -JSS(txr_get_ledger_sz); // out: protocol message get ledger size -JSS(txr_ledger_data_cnt); // out: protocol message ledger data count -JSS(txr_ledger_data_sz); // out: protocol message ledger data size -JSS(txr_transactions_cnt); // out: protocol message get object count -JSS(txr_transactions_sz); // out: protocol message get object size -JSS(txr_selected_cnt); // out: selected peers count -JSS(txr_suppressed_cnt); // out: suppressed peers count -JSS(txr_not_enabled_cnt); // out: peers with tx reduce-relay disabled count -JSS(txr_missing_tx_freq); // out: missing tx frequency average -JSS(txs); // out: TxHistory -JSS(type); // in: AccountObjects - // out: NetworkOPs, RPC server_definitions - // OverlayImpl, Logic -JSS(type_hex); // out: STPathSet -JSS(unl); // out: UnlList -JSS(unlimited); // out: Connection.h -JSS(uptime); // out: GetCounts -JSS(uri); // out: ValidatorSites -JSS(url); // in/out: Subscribe, Unsubscribe -JSS(url_password); // in: Subscribe -JSS(url_username); // in: Subscribe -JSS(urlgravatar); // -JSS(username); // in: Subscribe -JSS(validated); // out: NetworkOPs, RPCHelpers, AccountTx* - // Tx -JSS(validator_list_expires); // out: NetworkOps, ValidatorList -JSS(validator_list); // out: NetworkOps, ValidatorList -JSS(validators); -JSS(validated_hash); // out: NetworkOPs -JSS(validated_ledger); // out: NetworkOPs -JSS(validated_ledger_index); // out: SubmitTransaction -JSS(validated_ledgers); // out: NetworkOPs -JSS(validation_key); // out: ValidationCreate, ValidationSeed -JSS(validation_private_key); // out: ValidationCreate -JSS(validation_public_key); // out: ValidationCreate, ValidationSeed -JSS(validation_quorum); // out: NetworkOPs -JSS(validation_seed); // out: ValidationCreate, ValidationSeed -JSS(validations); // out: AmendmentTableImpl -JSS(validator_list_threshold); // out: ValidatorList -JSS(validator_sites); // out: ValidatorSites -JSS(value); // out: STAmount -JSS(vault_id); // in: VaultInfo -JSS(version); // out: RPCVersion -JSS(vetoed); // out: AmendmentTableImpl -JSS(volume_a); // out: BookChanges -JSS(volume_b); // out: BookChanges -JSS(vote); // in: Feature -JSS(vote_slots); // out: amm_info -JSS(vote_weight); // out: amm_info -JSS(warning); // rpc: -JSS(warnings); // out: server_info, server_state -JSS(workers); -JSS(write_load); // out: GetCounts -// clang-format on +JSS(account_history_tx_first); // out: Account txn history subscribe +JSS(account_history_boundary); // out: Account txn history subscribe +JSS(accounts); // in: LedgerEntry, Subscribe, handlers/Ledger, Unsubscribe +JSS(accounts_proposed); // in: Subscribe, Unsubscribe +JSS(action); // +JSS(active); // out: OverlayImpl +JSS(acquiring); // out: LedgerRequest +JSS(address); // out: PeerImp +JSS(affected); // out: AcceptedLedgerTx +JSS(age); // out: NetworkOPs, Peers +JSS(alternatives); // out: PathRequest, RipplePathFind +JSS(amendment_blocked); // out: NetworkOPs +JSS(amm_account); // in: amm_info +JSS(amount); // out: AccountChannels, amm_info +JSS(amount2); // out: amm_info +JSS(api_version); // in: many, out: Version +JSS(api_version_low); // out: Version +JSS(applied); // out: SubmitTransaction +JSS(asks); // out: Subscribe +JSS(asset); // in: amm_info +JSS(asset2); // in: amm_info +JSS(assets); // out: GatewayBalances +JSS(asset_frozen); // out: amm_info +JSS(asset2_frozen); // out: amm_info +JSS(attestations); // +JSS(attestation_reward_account); // +JSS(auction_slot); // out: amm_info +JSS(authorized); // out: AccountLines +JSS(authorize); // out: delegate +JSS(authorized_credentials); // in: ledger_entry DepositPreauth +JSS(auth_accounts); // out: amm_info +JSS(auth_change); // out: AccountInfo +JSS(auth_change_queued); // out: AccountInfo +JSS(available); // out: ValidatorList +JSS(avg_bps_recv); // out: Peers +JSS(avg_bps_sent); // out: Peers +JSS(balance); // out: AccountLines +JSS(balances); // out: GatewayBalances +JSS(base); // out: LogLevel +JSS(base_asset); // in: get_aggregate_price +JSS(base_fee); // out: NetworkOPs +JSS(base_fee_xrp); // out: NetworkOPs +JSS(bids); // out: Subscribe +JSS(binary); // in: AccountTX, LedgerEntry, AccountTxOld, Tx LedgerData +JSS(blob); // out: ValidatorList +JSS(blobs_v2); // out: ValidatorList + // in: UNL +JSS(books); // in: Subscribe, Unsubscribe +JSS(both); // in: Subscribe, Unsubscribe +JSS(both_sides); // in: Subscribe, Unsubscribe +JSS(branch); // out: server_info +JSS(broadcast); // out: SubmitTransaction +JSS(bridge_account); // in: LedgerEntry +JSS(build_path); // in: TransactionSign +JSS(build_version); // out: NetworkOPs +JSS(cancel_after); // out: AccountChannels +JSS(can_delete); // out: CanDelete +JSS(mpt_amount); // out: mpt_holders +JSS(mpt_issuance_id); // in: Payment, mpt_holders +JSS(mptoken_index); // out: mpt_holders +JSS(changes); // out: BookChanges +JSS(channel_id); // out: AccountChannels +JSS(channels); // out: AccountChannels +JSS(check_nodes); // in: LedgerCleaner +JSS(clear); // in/out: FetchInfo +JSS(close); // out: BookChanges +JSS(close_flags); // out: LedgerToJson +JSS(close_time); // in: Application, out: NetworkOPs, RCLCxPeerPos, LedgerToJson +JSS(close_time_iso); // out: Tx, NetworkOPs, TransactionEntry AccountTx, LedgerToJson +JSS(close_time_estimated); // in: Application, out: LedgerToJson +JSS(close_time_human); // out: LedgerToJson +JSS(close_time_offset); // out: NetworkOPs +JSS(close_time_resolution); // in: Application; out: LedgerToJson +JSS(closed); // out: NetworkOPs, LedgerToJson, handlers/Ledger +JSS(closed_ledger); // out: NetworkOPs +JSS(cluster); // out: PeerImp +JSS(code); // out: errors +JSS(command); // in: RPCHandler +JSS(common); // out: RPC server_definitions +JSS(complete); // out: NetworkOPs, InboundLedger +JSS(complete_ledgers); // out: NetworkOPs, PeerImp +JSS(consensus); // out: NetworkOPs, LedgerConsensus +JSS(converge_time); // out: NetworkOPs +JSS(converge_time_s); // out: NetworkOPs +JSS(cookie); // out: NetworkOPs +JSS(count); // in: AccountTx*, ValidatorList +JSS(counters); // in/out: retrieve counters +JSS(credentials); // in: deposit_authorized +JSS(credential_type); // in: LedgerEntry DepositPreauth +JSS(ctid); // in/out: Tx RPC +JSS(currency_a); // out: BookChanges +JSS(currency_b); // out: BookChanges +JSS(currency); // in: paths/PathRequest, STAmount + // out: STPathSet, STAmount, AccountLines +JSS(current); // out: OwnerInfo +JSS(current_activities); // +JSS(current_ledger_size); // out: TxQ +JSS(current_queue_size); // out: TxQ +JSS(data); // out: LedgerData +JSS(date); // out: tx/Transaction, NetworkOPs +JSS(dbKBLedger); // out: getCounts +JSS(dbKBTotal); // out: getCounts +JSS(dbKBTransaction); // out: getCounts +JSS(debug_signing); // in: TransactionSign +JSS(deletion_blockers_only); // in: AccountObjects +JSS(delivered_amount); // out: insertDeliveredAmount +JSS(deposit_authorized); // out: deposit_authorized +JSS(deprecated); // +JSS(descending); // in: AccountTx* +JSS(description); // in/out: Reservations +JSS(destination); // in: nft_buy_offers, nft_sell_offers +JSS(destination_account); // in: PathRequest, RipplePathFind, account_lines + // out: AccountChannels +JSS(destination_amount); // in: PathRequest, RipplePathFind +JSS(destination_currencies); // in: PathRequest, RipplePathFind +JSS(destination_tag); // in: PathRequest + // out: AccountChannels +JSS(details); // out: Manifest, server_info +JSS(dir_entry); // out: DirectoryEntryIterator +JSS(dir_index); // out: DirectoryEntryIterator +JSS(dir_root); // out: DirectoryEntryIterator +JSS(discounted_fee); // out: amm_info +JSS(domain); // out: ValidatorInfo, Manifest +JSS(drops); // out: TxQ +JSS(duration_us); // out: NetworkOPs +JSS(effective); // out: ValidatorList + // in: UNL +JSS(enabled); // out: AmendmentTable +JSS(engine_result); // out: NetworkOPs, TransactionSign, Submit +JSS(engine_result_code); // out: NetworkOPs, TransactionSign, Submit +JSS(engine_result_message); // out: NetworkOPs, TransactionSign, Submit +JSS(entire_set); // out: get_aggregate_price +JSS(ephemeral_key); // out: ValidatorInfo + // in/out: Manifest +JSS(error); // out: error +JSS(errored); // +JSS(error_code); // out: error +JSS(error_exception); // out: Submit +JSS(error_message); // out: error +JSS(expand); // in: handler/Ledger +JSS(expected_date); // out: any (warnings) +JSS(expected_date_UTC); // out: any (warnings) +JSS(expected_ledger_size); // out: TxQ +JSS(expiration); // out: AccountOffers, AccountChannels, ValidatorList, amm_info +JSS(extension_compute); // out: NetworkOPs +JSS(extension_size); // out: NetworkOPs +JSS(gas_price); // out: NetworkOPs +JSS(fail_hard); // in: Sign, Submit +JSS(failed); // out: InboundLedger +JSS(feature); // in: Feature +JSS(features); // out: Feature +JSS(fee_base); // out: NetworkOPs +JSS(fee_div_max); // in: TransactionSign +JSS(fee_level); // out: AccountInfo +JSS(fee_mult_max); // in: TransactionSign +JSS(fee_ref); // out: NetworkOPs, DEPRECATED +JSS(fetch_pack); // out: NetworkOPs +JSS(FIELDS); // out: RPC server_definitions + // matches definitions.json format +JSS(first); // out: rpc/Version +JSS(finished); // +JSS(fix_txns); // in: LedgerCleaner +JSS(flags); // out: AccountOffers, NetworkOPs +JSS(forward); // in: AccountTx +JSS(freeze); // out: AccountLines +JSS(freeze_peer); // out: AccountLines +JSS(deep_freeze); // out: AccountLines +JSS(deep_freeze_peer); // out: AccountLines +JSS(frozen_balances); // out: GatewayBalances +JSS(full); // in: LedgerClearer, handlers/Ledger +JSS(full_reply); // out: PathFind +JSS(fullbelow_size); // out: GetCounts +JSS(git); // out: server_info +JSS(good); // out: RPCVersion +JSS(hash); // out: NetworkOPs, InboundLedger, LedgerToJson, STTx; field +JSS(have_header); // out: InboundLedger +JSS(have_state); // out: InboundLedger +JSS(have_transactions); // out: InboundLedger +JSS(high); // out: BookChanges +JSS(highest_sequence); // out: AccountInfo +JSS(highest_ticket); // out: AccountInfo +JSS(historical_perminute); // historical_perminute. +JSS(holders); // out: MPTHolders +JSS(hostid); // out: NetworkOPs +JSS(hotwallet); // in: GatewayBalances +JSS(id); // websocket. +JSS(ident); // in: AccountCurrencies, AccountInfo, OwnerInfo +JSS(ignore_default); // in: AccountLines +JSS(in); // out: OverlayImpl +JSS(inLedger); // out: tx/Transaction +JSS(inbound); // out: PeerImp +JSS(index); // in: LedgerEntry + // out: STLedgerEntry, LedgerEntry, TxHistory, LedgerData +JSS(info); // out: ServerInfo, ConsensusInfo, FetchInfo +JSS(initial_sync_duration_us); // +JSS(internal_command); // in: Internal +JSS(invalid_API_version); // out: Many, when a request has an invalid version +JSS(io_latency_ms); // out: NetworkOPs +JSS(ip); // in: Connect, out: OverlayImpl +JSS(is_burned); // out: nft_info (clio) +JSS(isSerialized); // out: RPC server_definitions + // matches definitions.json format +JSS(isSigningField); // out: RPC server_definitions + // matches definitions.json format +JSS(isVLEncoded); // out: RPC server_definitions + // matches definitions.json format +JSS(issuer); // in: RipplePathFind, Subscribe, Unsubscribe, BookOffers + // out: STPathSet, STAmount +JSS(job); // +JSS(job_queue); // +JSS(jobs); // +JSS(jsonrpc); // json version +JSS(jq_trans_overflow); // JobQueue transaction limit overflow. +JSS(kept); // out: SubmitTransaction +JSS(key); // out +JSS(key_type); // in/out: WalletPropose, TransactionSign +JSS(latency); // out: PeerImp +JSS(last); // out: RPCVersion +JSS(last_close); // out: NetworkOPs +JSS(last_refresh_time); // out: ValidatorSite +JSS(last_refresh_status); // out: ValidatorSite +JSS(last_refresh_message); // out: ValidatorSite +JSS(ledger); // in: NetworkOPs, LedgerCleaner, RPCHelpers + // out: NetworkOPs, PeerImp +JSS(ledger_current_index); // out: NetworkOPs, RPCHelpers, LedgerCurrent, LedgerAccept, + // AccountLines +JSS(ledger_data); // out: LedgerHeader +JSS(ledger_hash); // in: RPCHelpers, LedgerRequest, RipplePathFind, + // TransactionEntry, handlers/Ledger + // out: NetworkOPs, RPCHelpers, LedgerClosed, LedgerData, + // AccountLines +JSS(ledger_hit_rate); // out: GetCounts +JSS(ledger_index); // in/out: many +JSS(ledger_index_max); // in, out: AccountTx* +JSS(ledger_index_min); // in, out: AccountTx* +JSS(ledger_max); // in, out: AccountTx* +JSS(ledger_min); // in, out: AccountTx* +JSS(ledger_time); // out: NetworkOPs +JSS(LEDGER_ENTRY_TYPES); // out: RPC server_definitions + // matches definitions.json format +JSS(LEDGER_ENTRY_FLAGS); // out: RPC server_definitions +JSS(LEDGER_ENTRY_FORMATS); // out: RPC server_definitions +JSS(levels); // LogLevels +JSS(limit); // in/out: AccountTx*, AccountOffers, AccountLines, AccountObjects + // in: LedgerData, BookOffers +JSS(limit_peer); // out: AccountLines +JSS(lines); // out: AccountLines +JSS(list); // out: ValidatorList +JSS(load); // out: NetworkOPs, PeerImp +JSS(load_base); // out: NetworkOPs +JSS(load_factor); // out: NetworkOPs +JSS(load_factor_cluster); // out: NetworkOPs +JSS(load_factor_fee_escalation); // out: NetworkOPs +JSS(load_factor_fee_queue); // out: NetworkOPs +JSS(load_factor_fee_reference); // out: NetworkOPs +JSS(load_factor_local); // out: NetworkOPs +JSS(load_factor_net); // out: NetworkOPs +JSS(load_factor_server); // out: NetworkOPs +JSS(load_fee); // out: LoadFeeTrackImp, NetworkOPs +JSS(loan_broker_id); // in: LedgerEntry +JSS(loan_seq); // in: LedgerEntry +JSS(local); // out: resource/Logic.h +JSS(local_txs); // out: GetCounts +JSS(local_static_keys); // out: ValidatorList +JSS(locked); // out: GatewayBalances +JSS(low); // out: BookChanges +JSS(lowest_sequence); // out: AccountInfo +JSS(lowest_ticket); // out: AccountInfo +JSS(lp_token); // out: amm_info +JSS(majority); // out: RPC feature +JSS(manifest); // out: ValidatorInfo, Manifest +JSS(marker); // in/out: AccountTx, AccountOffers, AccountLines, AccountObjects, + // LedgerData + // in: BookOffers +JSS(master_key); // out: WalletPropose, NetworkOPs, ValidatorInfo + // in/out: Manifest +JSS(master_seed); // out: WalletPropose +JSS(master_seed_hex); // out: WalletPropose +JSS(master_signature); // out: pubManifest +JSS(max_ledger); // in/out: LedgerCleaner +JSS(max_queue_size); // out: TxQ +JSS(max_spend_drops); // out: AccountInfo +JSS(max_spend_drops_total); // out: AccountInfo +JSS(mean); // out: get_aggregate_price +JSS(median); // out: get_aggregate_price +JSS(median_fee); // out: TxQ +JSS(median_level); // out: TxQ +JSS(message); // error. +JSS(meta); // out: NetworkOPs, AccountTx*, Tx +JSS(meta_blob); // out: NetworkOPs, AccountTx*, Tx +JSS(metaData); // +JSS(metadata); // out: TransactionEntry +JSS(method); // RPC +JSS(methods); // +JSS(metrics); // out: Peers +JSS(min_count); // in: GetCounts +JSS(min_ledger); // in: LedgerCleaner +JSS(minimum_fee); // out: TxQ +JSS(minimum_level); // out: TxQ +JSS(missingCommand); // error +JSS(name); // out: AmendmentTableImpl, PeerImp +JSS(needed_state_hashes); // out: InboundLedger +JSS(needed_transaction_hashes); // out: InboundLedger +JSS(network_id); // out: NetworkOPs +JSS(network_ledger); // out: NetworkOPs +JSS(next_refresh_time); // out: ValidatorSite +JSS(nft_id); // in: nft_sell_offers, nft_buy_offers +JSS(nft_offer_index); // out nft_buy_offers, nft_sell_offers +JSS(nft_serial); // out: account_nfts +JSS(nft_taxon); // out: nft_info (clio) +JSS(nftoken_id); // out: insertNFTokenID +JSS(nftoken_ids); // out: insertNFTokenID +JSS(no_ripple); // out: AccountLines +JSS(no_ripple_peer); // out: AccountLines +JSS(node); // out: LedgerEntry +JSS(node_binary); // out: LedgerEntry +JSS(node_read_bytes); // out: GetCounts +JSS(node_read_errors); // out: GetCounts +JSS(node_read_retries); // out: GetCounts +JSS(node_reads_hit); // out: GetCounts +JSS(node_reads_total); // out: GetCounts +JSS(node_reads_duration_us); // out: GetCounts +JSS(node_size); // out: server_info +JSS(nodes); // out: VaultInfo +JSS(nodestore); // out: GetCounts +JSS(node_writes); // out: GetCounts +JSS(node_written_bytes); // out: GetCounts +JSS(node_writes_duration_us); // out: GetCounts +JSS(node_write_retries); // out: GetCounts +JSS(node_writes_delayed); // out::GetCounts +JSS(nth); // out: RPC server_definitions +JSS(obligations); // out: GatewayBalances +JSS(offers); // out: NetworkOPs, AccountOffers, Subscribe +JSS(offer_id); // out: insertNFTokenOfferID +JSS(offline); // in: TransactionSign +JSS(offset); // in/out: AccountTxOld +JSS(open); // out: handlers/Ledger +JSS(open_ledger_cost); // out: SubmitTransaction +JSS(open_ledger_fee); // out: TxQ +JSS(open_ledger_level); // out: TxQ +JSS(optionality); // out: server_definitions +JSS(oracles); // in: get_aggregate_price +JSS(oracle_document_id); // in: get_aggregate_price +JSS(out); // out: OverlayImpl +JSS(owner); // in: LedgerEntry, out: NetworkOPs +JSS(owner_funds); // in/out: Ledger, NetworkOPs, AcceptedLedgerTx +JSS(page_index); // +JSS(params); // RPC +JSS(parent_close_time); // out: LedgerToJson +JSS(parent_hash); // out: LedgerToJson +JSS(partition); // in: LogLevel +JSS(passphrase); // in: WalletPropose +JSS(password); // in: Subscribe +JSS(paths); // in: RipplePathFind +JSS(paths_canonical); // out: RipplePathFind +JSS(paths_computed); // out: PathRequest, RipplePathFind +JSS(peer); // in: AccountLines +JSS(peer_authorized); // out: AccountLines +JSS(peer_id); // out: RCLCxPeerPos +JSS(peers); // out: InboundLedger, handlers/Peers, Overlay +JSS(peer_disconnects); // Severed peer connection counter. +JSS(peer_disconnects_resources); // Severed peer connections because of + // excess resource consumption. +JSS(port); // in: Connect, out: NetworkOPs +JSS(ports); // out: NetworkOPs +JSS(previous); // out: Reservations +JSS(previous_ledger); // out: LedgerPropose +JSS(price); // out: amm_info, AuctionSlot +JSS(proof); // in: BookOffers +JSS(propose_seq); // out: LedgerPropose +JSS(proposers); // out: NetworkOPs, LedgerConsensus +JSS(protocol); // out: NetworkOPs, PeerImp +JSS(proxied); // out: RPC ping +JSS(pseudo_account); // out: AccountInfo +JSS(pubkey_node); // out: NetworkOPs +JSS(pubkey_publisher); // out: ValidatorList +JSS(pubkey_validator); // out: NetworkOPs, ValidatorList +JSS(public_key); // out: OverlayImpl, PeerImp, WalletPropose, ValidatorInfo + // in/out: Manifest +JSS(public_key_hex); // out: WalletPropose +JSS(published_ledger); // out: NetworkOPs +JSS(publisher_lists); // out: ValidatorList +JSS(quality); // out: NetworkOPs +JSS(quality_in); // out: AccountLines +JSS(quality_out); // out: AccountLines +JSS(queue); // in: AccountInfo +JSS(queue_data); // out: AccountInfo +JSS(queued); // out: SubmitTransaction +JSS(queued_duration_us); // +JSS(quote_asset); // in: get_aggregate_price +JSS(random); // out: Random +JSS(raw_meta); // out: AcceptedLedgerTx +JSS(receive_currencies); // out: AccountCurrencies +JSS(reference_level); // out: TxQ +JSS(refresh_interval); // in: UNL +JSS(refresh_interval_min); // out: ValidatorSites +JSS(regular_seed); // in/out: LedgerEntry +JSS(remaining); // out: ValidatorList +JSS(remote); // out: Logic.h +JSS(request); // RPC +JSS(requested); // out: Manifest +JSS(reservations); // out: Reservations +JSS(reserve_base); // out: NetworkOPs +JSS(reserve_base_xrp); // out: NetworkOPs +JSS(reserve_inc); // out: NetworkOPs +JSS(reserve_inc_xrp); // out: NetworkOPs +JSS(response); // websocket +JSS(result); // RPC +JSS(ripple_lines); // out: NetworkOPs +JSS(ripple_state); // in: LedgerEntr +JSS(ripplerpc); // ripple RPC version +JSS(role); // out: Ping.cpp +JSS(rpc); // +JSS(rt_accounts); // in: Subscribe, Unsubscribe +JSS(running_duration_us); // +JSS(search_depth); // in: RipplePathFind +JSS(searched_all); // out: Tx +JSS(secret); // in: TransactionSign, ValidationCreate, ValidationSeed, + // channel_authorize +JSS(seed); // +JSS(seed_hex); // in: WalletPropose, TransactionSign +JSS(send_currencies); // out: AccountCurrencies +JSS(send_max); // in: PathRequest, RipplePathFind +JSS(seq); // in: LedgerEntry + // out: NetworkOPs, RPCSub, AccountOffers, ValidatorList, + // ValidatorInfo, Manifest +JSS(sequence); // in: UNL +JSS(sequence_count); // out: AccountInfo +JSS(server_domain); // out: NetworkOPs +JSS(server_state); // out: NetworkOPs +JSS(server_state_duration_us); // out: NetworkOPs +JSS(server_status); // out: NetworkOPs +JSS(server_version); // out: NetworkOPs +JSS(settle_delay); // out: AccountChannels +JSS(severity); // in: LogLevel +JSS(shares); // out: VaultInfo +JSS(signature); // out: NetworkOPs, ChannelAuthorize +JSS(signature_target); // in: TransactionSign +JSS(signature_verified); // out: ChannelVerify +JSS(signing_key); // out: NetworkOPs +JSS(signing_keys); // out: ValidatorList +JSS(signing_time); // out: NetworkOPs +JSS(signer_lists); // in/out: AccountInfo +JSS(size); // out: get_aggregate_price +JSS(snapshot); // in: Subscribe +JSS(source_account); // in: PathRequest, RipplePathFind +JSS(source_amount); // in: PathRequest, RipplePathFind +JSS(source_currencies); // in: PathRequest, RipplePathFind +JSS(source_tag); // out: AccountChannels +JSS(stand_alone); // out: NetworkOPs +JSS(standard_deviation); // out: get_aggregate_price +JSS(start); // in: TxHistory +JSS(started); // +JSS(state_accounting); // out: NetworkOPs +JSS(state_now); // in: Subscribe +JSS(status); // error +JSS(stop); // in: LedgerCleaner +JSS(stop_history_tx_only); // in: Unsubscribe, stop history tx stream +JSS(streams); // in: Subscribe, Unsubscribe +JSS(strict); // in: AccountCurrencies, AccountInfo +JSS(sub_index); // in: LedgerEntry +JSS(subcommand); // in: PathFind +JSS(subject); // in: LedgerEntry Credential +JSS(success); // rpc +JSS(supported); // out: AmendmentTableImpl +JSS(sync_mode); // in: Submit +JSS(system_time_offset); // out: NetworkOPs +JSS(tag); // out: Peers +JSS(taker); // in: Subscribe, BookOffers +JSS(taker_gets); // in: Subscribe, Unsubscribe, BookOffers +JSS(taker_gets_funded); // out: NetworkOPs +JSS(taker_pays); // in: Subscribe, Unsubscribe, BookOffers +JSS(taker_pays_funded); // out: NetworkOPs +JSS(threshold); // in: Blacklist +JSS(ticket_count); // out: AccountInfo +JSS(ticket_seq); // in: LedgerEntry +JSS(time); // +JSS(timeouts); // out: InboundLedger +JSS(time_threshold); // in/out: Oracle aggregate +JSS(time_interval); // out: AMM Auction Slot +JSS(track); // out: PeerImp +JSS(traffic); // out: Overlay +JSS(trim); // in: get_aggregate_price +JSS(trimmed_set); // out: get_aggregate_price +JSS(total); // out: counters +JSS(total_bytes_recv); // out: Peers +JSS(total_bytes_sent); // out: Peers +JSS(total_coins); // out: LedgerToJson +JSS(trading_fee); // out: amm_info +JSS(transTreeHash); // out: ledger/Ledger.cpp +JSS(transaction); // in: Tx + // out: NetworkOPs, AcceptedLedgerTx, +JSS(transaction_hash); // out: RCLCxPeerPos, LedgerToJson +JSS(transactions); // out: LedgerToJson, + // in: AccountTx*, Unsubscribe +JSS(TRANSACTION_RESULTS); // out: RPC server_definitions + // matches definitions.json format +JSS(TRANSACTION_TYPES); // out: RPC server_definitions + // matches definitions.json format +JSS(TRANSACTION_FLAGS); // out: RPC server_definitions +JSS(TRANSACTION_FORMATS); // out: RPC server_definitions +JSS(TYPES); // out: RPC server_definitions + // matches definitions.json format +JSS(transfer_rate); // out: nft_info (clio) +JSS(transitions); // out: NetworkOPs +JSS(treenode_cache_size); // out: GetCounts +JSS(treenode_track_size); // out: GetCounts +JSS(trusted); // out: UnlList +JSS(trusted_validator_keys); // out: ValidatorList +JSS(tx); // out: STTx, AccountTx* +JSS(tx_blob); // in/out: Submit, + // in: TransactionSign, AccountTx* +JSS(tx_hash); // in: TransactionEntry +JSS(tx_json); // in/out: TransactionSign + // out: TransactionEntry +JSS(tx_signing_hash); // out: TransactionSign +JSS(tx_unsigned); // out: TransactionSign +JSS(txn_count); // out: NetworkOPs +JSS(txr_tx_cnt); // out: protocol message tx's count +JSS(txr_tx_sz); // out: protocol message tx's size +JSS(txr_have_txs_cnt); // out: protocol message have tx count +JSS(txr_have_txs_sz); // out: protocol message have tx size +JSS(txr_get_ledger_cnt); // out: protocol message get ledger count +JSS(txr_get_ledger_sz); // out: protocol message get ledger size +JSS(txr_ledger_data_cnt); // out: protocol message ledger data count +JSS(txr_ledger_data_sz); // out: protocol message ledger data size +JSS(txr_transactions_cnt); // out: protocol message get object count +JSS(txr_transactions_sz); // out: protocol message get object size +JSS(txr_selected_cnt); // out: selected peers count +JSS(txr_suppressed_cnt); // out: suppressed peers count +JSS(txr_not_enabled_cnt); // out: peers with tx reduce-relay disabled count +JSS(txr_missing_tx_freq); // out: missing tx frequency average +JSS(txs); // out: TxHistory +JSS(type); // in: AccountObjects + // out: NetworkOPs, RPC server_definitions OverlayImpl, Logic +JSS(type_hex); // out: STPathSet +JSS(unl); // out: UnlList +JSS(unlimited); // out: Connection.h +JSS(uptime); // out: GetCounts +JSS(uri); // out: ValidatorSites +JSS(url); // in/out: Subscribe, Unsubscribe +JSS(url_password); // in: Subscribe +JSS(url_username); // in: Subscribe +JSS(urlgravatar); // +JSS(username); // in: Subscribe +JSS(validated); // out: NetworkOPs, RPCHelpers, AccountTx*, Tx +JSS(validator_list_expires); // out: NetworkOps, ValidatorList +JSS(validator_list); // out: NetworkOps, ValidatorList +JSS(validators); // +JSS(validated_hash); // out: NetworkOPs +JSS(validated_ledger); // out: NetworkOPs +JSS(validated_ledger_index); // out: SubmitTransaction +JSS(validated_ledgers); // out: NetworkOPs +JSS(validation_key); // out: ValidationCreate, ValidationSeed +JSS(validation_private_key); // out: ValidationCreate +JSS(validation_public_key); // out: ValidationCreate, ValidationSeed +JSS(validation_quorum); // out: NetworkOPs +JSS(validation_seed); // out: ValidationCreate, ValidationSeed +JSS(validations); // out: AmendmentTableImpl +JSS(validator_list_threshold); // out: ValidatorList +JSS(validator_sites); // out: ValidatorSites +JSS(value); // out: STAmount +JSS(vault_id); // in: VaultInfo +JSS(version); // out: RPCVersion +JSS(vetoed); // out: AmendmentTableImpl +JSS(volume_a); // out: BookChanges +JSS(volume_b); // out: BookChanges +JSS(vote); // in: Feature +JSS(vote_slots); // out: amm_info +JSS(vote_weight); // out: amm_info +JSS(warning); // rpc: +JSS(warnings); // out: server_info, server_state +JSS(workers); // +JSS(write_load); // out: GetCounts #pragma push_macro("TRANSACTION") #undef TRANSACTION @@ -721,11 +694,11 @@ JSS(write_load); // out: GetCounts #pragma push_macro("LEDGER_ENTRY_DUPLICATE") #undef LEDGER_ENTRY_DUPLICATE -#define LEDGER_ENTRY(tag, value, name, rpcName, fields) \ - JSS(name); \ +#define LEDGER_ENTRY(tag, value, name, rpcName, ...) \ + JSS(name); \ JSS(rpcName); -#define LEDGER_ENTRY_DUPLICATE(tag, value, name, rpcName, fields) JSS(rpcName); +#define LEDGER_ENTRY_DUPLICATE(tag, value, name, rpcName, ...) JSS(rpcName); #include diff --git a/include/xrpl/protocol/nft.h b/include/xrpl/protocol/nft.h index 4be58c381c..821d146ff7 100644 --- a/include/xrpl/protocol/nft.h +++ b/include/xrpl/protocol/nft.h @@ -39,7 +39,7 @@ constexpr std::uint16_t const flagMutable = 0x0010; inline std::uint16_t getFlags(uint256 const& id) { - std::uint16_t flags; + std::uint16_t flags = 0; memcpy(&flags, id.begin(), 2); return boost::endian::big_to_native(flags); } @@ -47,7 +47,7 @@ getFlags(uint256 const& id) inline std::uint16_t getTransferFee(uint256 const& id) { - std::uint16_t fee; + std::uint16_t fee = 0; memcpy(&fee, id.begin() + 2, 2); return boost::endian::big_to_native(fee); } @@ -55,7 +55,7 @@ getTransferFee(uint256 const& id) inline std::uint32_t getSerial(uint256 const& id) { - std::uint32_t seq; + std::uint32_t seq = 0; memcpy(&seq, id.begin() + 28, 4); return boost::endian::big_to_native(seq); } @@ -87,7 +87,7 @@ cipheredTaxon(std::uint32_t tokenSeq, Taxon taxon) inline Taxon getTaxon(uint256 const& id) { - std::uint32_t taxon; + std::uint32_t taxon = 0; memcpy(&taxon, id.begin() + 24, 4); taxon = boost::endian::big_to_native(taxon); diff --git a/include/xrpl/protocol_autogen/.clang-tidy b/include/xrpl/protocol_autogen/.clang-tidy new file mode 100644 index 0000000000..fbc003598d --- /dev/null +++ b/include/xrpl/protocol_autogen/.clang-tidy @@ -0,0 +1,3 @@ +# This disables all checks for this directory and its subdirectories +Checks: "-*" +InheritParentConfig: false diff --git a/include/xrpl/protocol_autogen/ledger_entries/FeeSettings.h b/include/xrpl/protocol_autogen/ledger_entries/FeeSettings.h index e3c9ca0091..a33dfd74f7 100644 --- a/include/xrpl/protocol_autogen/ledger_entries/FeeSettings.h +++ b/include/xrpl/protocol_autogen/ledger_entries/FeeSettings.h @@ -213,6 +213,78 @@ public: return this->sle_->isFieldPresent(sfReserveIncrementDrops); } + /** + * @brief Get sfExtensionComputeLimit (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getExtensionComputeLimit() const + { + if (hasExtensionComputeLimit()) + return this->sle_->at(sfExtensionComputeLimit); + return std::nullopt; + } + + /** + * @brief Check if sfExtensionComputeLimit is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasExtensionComputeLimit() const + { + return this->sle_->isFieldPresent(sfExtensionComputeLimit); + } + + /** + * @brief Get sfExtensionSizeLimit (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getExtensionSizeLimit() const + { + if (hasExtensionSizeLimit()) + return this->sle_->at(sfExtensionSizeLimit); + return std::nullopt; + } + + /** + * @brief Check if sfExtensionSizeLimit is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasExtensionSizeLimit() const + { + return this->sle_->isFieldPresent(sfExtensionSizeLimit); + } + + /** + * @brief Get sfGasPrice (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getGasPrice() const + { + if (hasGasPrice()) + return this->sle_->at(sfGasPrice); + return std::nullopt; + } + + /** + * @brief Check if sfGasPrice is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasGasPrice() const + { + return this->sle_->isFieldPresent(sfGasPrice); + } + /** * @brief Get sfPreviousTxnID (soeOPTIONAL) * @return The field value, or std::nullopt if not present. @@ -373,6 +445,39 @@ public: return *this; } + /** + * @brief Set sfExtensionComputeLimit (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + FeeSettingsBuilder& + setExtensionComputeLimit(std::decay_t const& value) + { + object_[sfExtensionComputeLimit] = value; + return *this; + } + + /** + * @brief Set sfExtensionSizeLimit (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + FeeSettingsBuilder& + setExtensionSizeLimit(std::decay_t const& value) + { + object_[sfExtensionSizeLimit] = value; + return *this; + } + + /** + * @brief Set sfGasPrice (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + FeeSettingsBuilder& + setGasPrice(std::decay_t const& value) + { + object_[sfGasPrice] = value; + return *this; + } + /** * @brief Set sfPreviousTxnID (soeOPTIONAL) * @return Reference to this builder for method chaining. diff --git a/include/xrpl/protocol_autogen/transactions/SetFee.h b/include/xrpl/protocol_autogen/transactions/SetFee.h index 7bf73201b9..119b2b24f4 100644 --- a/include/xrpl/protocol_autogen/transactions/SetFee.h +++ b/include/xrpl/protocol_autogen/transactions/SetFee.h @@ -254,6 +254,84 @@ public: { return this->tx_->isFieldPresent(sfReserveIncrementDrops); } + + /** + * @brief Get sfExtensionComputeLimit (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getExtensionComputeLimit() const + { + if (hasExtensionComputeLimit()) + { + return this->tx_->at(sfExtensionComputeLimit); + } + return std::nullopt; + } + + /** + * @brief Check if sfExtensionComputeLimit is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasExtensionComputeLimit() const + { + return this->tx_->isFieldPresent(sfExtensionComputeLimit); + } + + /** + * @brief Get sfExtensionSizeLimit (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getExtensionSizeLimit() const + { + if (hasExtensionSizeLimit()) + { + return this->tx_->at(sfExtensionSizeLimit); + } + return std::nullopt; + } + + /** + * @brief Check if sfExtensionSizeLimit is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasExtensionSizeLimit() const + { + return this->tx_->isFieldPresent(sfExtensionSizeLimit); + } + + /** + * @brief Get sfGasPrice (soeOPTIONAL) + * @return The field value, or std::nullopt if not present. + */ + [[nodiscard]] + protocol_autogen::Optional + getGasPrice() const + { + if (hasGasPrice()) + { + return this->tx_->at(sfGasPrice); + } + return std::nullopt; + } + + /** + * @brief Check if sfGasPrice is present. + * @return True if the field is present, false otherwise. + */ + [[nodiscard]] + bool + hasGasPrice() const + { + return this->tx_->isFieldPresent(sfGasPrice); + } }; /** @@ -384,6 +462,39 @@ public: return *this; } + /** + * @brief Set sfExtensionComputeLimit (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + SetFeeBuilder& + setExtensionComputeLimit(std::decay_t const& value) + { + object_[sfExtensionComputeLimit] = value; + return *this; + } + + /** + * @brief Set sfExtensionSizeLimit (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + SetFeeBuilder& + setExtensionSizeLimit(std::decay_t const& value) + { + object_[sfExtensionSizeLimit] = value; + return *this; + } + + /** + * @brief Set sfGasPrice (soeOPTIONAL) + * @return Reference to this builder for method chaining. + */ + SetFeeBuilder& + setGasPrice(std::decay_t const& value) + { + object_[sfGasPrice] = value; + return *this; + } + /** * @brief Build and return the SetFee wrapper. * @param publicKey The public key for signing. diff --git a/include/xrpl/rdb/DatabaseCon.h b/include/xrpl/rdb/DatabaseCon.h index d1fb7114e3..7400593214 100644 --- a/include/xrpl/rdb/DatabaseCon.h +++ b/include/xrpl/rdb/DatabaseCon.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -13,7 +14,7 @@ namespace soci { class session; -} +} // namespace soci namespace xrpl { @@ -69,7 +70,7 @@ public: { explicit Setup() = default; - StartUpType startUp = StartUpType::NORMAL; + StartUpType startUp = StartUpType::Normal; bool standAlone = false; boost::filesystem::path dataDir; // Indicates whether or not to return the `globalPragma` @@ -94,7 +95,7 @@ public: struct CheckpointerSetup { JobQueue* jobQueue; - Logs* logs; + std::reference_wrapper registry; }; template @@ -106,9 +107,8 @@ public: beast::Journal journal) // Use temporary files or regular DB files? : DatabaseCon( - setup.standAlone && setup.startUp != StartUpType::LOAD && - setup.startUp != StartUpType::LOAD_FILE && - setup.startUp != StartUpType::REPLAY + setup.standAlone && setup.startUp != StartUpType::Load && + setup.startUp != StartUpType::LoadFile && setup.startUp != StartUpType::Replay ? "" : (setup.dataDir / dbName), setup.commonPragma(), @@ -129,7 +129,7 @@ public: beast::Journal journal) : DatabaseCon(setup, dbName, pragma, initSQL, journal) { - setupCheckpointing(checkpointerSetup.jobQueue, *checkpointerSetup.logs); + setupCheckpointing(checkpointerSetup.jobQueue, checkpointerSetup.registry.get()); } template @@ -154,7 +154,7 @@ public: beast::Journal journal) : DatabaseCon(dataDir, dbName, pragma, initSQL, journal) { - setupCheckpointing(checkpointerSetup.jobQueue, *checkpointerSetup.logs); + setupCheckpointing(checkpointerSetup.jobQueue, checkpointerSetup.registry.get()); } ~DatabaseCon(); @@ -177,7 +177,7 @@ public: private: void - setupCheckpointing(JobQueue*, Logs&); + setupCheckpointing(JobQueue*, ServiceRegistry&); template DatabaseCon( diff --git a/include/xrpl/rdb/RelationalDatabase.h b/include/xrpl/rdb/RelationalDatabase.h index e728e518aa..1c28ddec0a 100644 --- a/include/xrpl/rdb/RelationalDatabase.h +++ b/include/xrpl/rdb/RelationalDatabase.h @@ -49,21 +49,21 @@ public: struct AccountTxOptions { AccountID const& account; - std::uint32_t minLedger; - std::uint32_t maxLedger; - std::uint32_t offset; - std::uint32_t limit; - bool bUnlimited; + /// Ledger sequence range to search. A value of 0 for min or max + /// means unbounded in that direction (no constraint applied). + LedgerRange ledgerRange{}; + std::uint32_t offset = 0; + std::uint32_t limit = 0; + bool bUnlimited{}; }; struct AccountTxPageOptions { AccountID const& account; - std::uint32_t minLedger; - std::uint32_t maxLedger; + LedgerRange ledgerRange{}; std::optional marker; - std::uint32_t limit; - bool bAdmin; + std::uint32_t limit = 0; + bool bAdmin = false; }; using AccountTx = std::pair, std::shared_ptr>; @@ -88,8 +88,8 @@ public: struct AccountTxResult { std::variant transactions; - LedgerRange ledgerRange; - uint32_t limit; + LedgerRange ledgerRange{}; + uint32_t limit = 0; std::optional marker; }; @@ -247,7 +247,7 @@ public: * @return Struct CountMinMax which contains the minimum sequence, * maximum sequence and number of ledgers. */ - virtual struct CountMinMax + virtual CountMinMax getLedgerCountMinMax() = 0; /** @@ -405,10 +405,10 @@ public: * @param id Hash of the transaction. * @param range Range of ledgers to check, if present. * @param ec Default error code value. - * @return Transaction and its metadata if found, otherwise TxSearched::all + * @return Transaction and its metadata if found, otherwise TxSearched::All * if a range is provided and all ledgers from the range are present - * in the database, TxSearched::some if a range is provided and not - * all ledgers are present, TxSearched::unknown if the range is not + * in the database, TxSearched::Some if a range is provided and not + * all ledgers are present, TxSearched::Unknown if the range is not * provided or a deserializing error occurred. In the last case the * error code is returned via the ec parameter, in other cases the * default error code is not changed. @@ -455,9 +455,10 @@ public: closeTransactionDB() = 0; }; -template +template T rangeCheckedCast(C c) + requires(std::is_arithmetic_v && std::is_arithmetic_v && std::convertible_to) { if ((c > std::numeric_limits::max()) || (!std::numeric_limits::is_signed && c < 0) || (std::numeric_limits::is_signed && std::numeric_limits::is_signed && diff --git a/include/xrpl/rdb/SociDB.h b/include/xrpl/rdb/SociDB.h index acfc183076..9c575359c1 100644 --- a/include/xrpl/rdb/SociDB.h +++ b/include/xrpl/rdb/SociDB.h @@ -13,8 +13,8 @@ #pragma clang diagnostic ignored "-Wdeprecated" #endif -#include #include +#include #define SOCI_USE_BOOST #include @@ -25,7 +25,7 @@ namespace sqlite_api { struct sqlite3; -} +} // namespace sqlite_api namespace xrpl { @@ -111,7 +111,7 @@ public: and so must outlive them both. */ std::shared_ptr -makeCheckpointer(std::uintptr_t id, std::weak_ptr, JobQueue&, Logs&); +makeCheckpointer(std::uintptr_t id, std::weak_ptr, JobQueue&, ServiceRegistry&); } // namespace xrpl diff --git a/include/xrpl/resource/Fees.h b/include/xrpl/resource/Fees.h index 0ba083d4fe..ebda0e98db 100644 --- a/include/xrpl/resource/Fees.h +++ b/include/xrpl/resource/Fees.h @@ -5,38 +5,30 @@ namespace xrpl { namespace Resource { -// clang-format off /** Schedule of fees charged for imposing load on the server. */ /** @{ */ -extern Charge const feeMalformedRequest; // A request that we can immediately - // tell is invalid -extern Charge const feeRequestNoReply; // A request that we cannot satisfy -extern Charge const feeInvalidSignature; // An object whose signature we had - // to check and it failed -extern Charge const feeUselessData; // Data we have no use for -extern Charge const feeInvalidData; // Data we have to verify before - // rejecting +extern Charge const feeMalformedRequest; // A request that we can immediately tell is invalid. +extern Charge const feeRequestNoReply; // A request that we cannot satisfy. +extern Charge const feeInvalidSignature; // An object whose signature we had to check that failed. +extern Charge const feeUselessData; // Data we have no use for. +extern Charge const feeInvalidData; // Data we have to verify before rejecting. // RPC loads -extern Charge const feeMalformedRPC; // An RPC request that we can - // immediately tell is invalid. -extern Charge const feeReferenceRPC; // A default "reference" unspecified - // load -extern Charge const feeExceptionRPC; // RPC load that causes an exception -extern Charge const feeMediumBurdenRPC; // A somewhat burdensome RPC load -extern Charge const feeHeavyBurdenRPC; // A very burdensome RPC load +extern Charge const feeMalformedRPC; // An RPC request that we can immediately tell is invalid. +extern Charge const feeReferenceRPC; // A default "reference" unspecified load. +extern Charge const feeExceptionRPC; // RPC load that causes an exception. +extern Charge const feeMediumBurdenRPC; // A somewhat burdensome RPC load. +extern Charge const feeHeavyBurdenRPC; // A very burdensome RPC load. // Peer loads -extern Charge const feeTrivialPeer; // Requires no reply -extern Charge const feeModerateBurdenPeer; // Requires some work -extern Charge const feeHeavyBurdenPeer; // Extensive work +extern Charge const feeTrivialPeer; // Requires no reply. +extern Charge const feeModerateBurdenPeer; // Requires some work. +extern Charge const feeHeavyBurdenPeer; // Extensive work. // Administrative -extern Charge const feeWarning; // The cost of receiving a warning -extern Charge const feeDrop; // The cost of being dropped for - // excess load +extern Charge const feeWarning; // The cost of receiving a warning. +extern Charge const feeDrop; // The cost of being dropped for excess load. /** @} */ -// clang-format on } // namespace Resource } // namespace xrpl diff --git a/include/xrpl/resource/Gossip.h b/include/xrpl/resource/Gossip.h index e581145149..9a70309cc4 100644 --- a/include/xrpl/resource/Gossip.h +++ b/include/xrpl/resource/Gossip.h @@ -17,7 +17,7 @@ struct Gossip { explicit Item() = default; - int balance; + int balance{}; beast::IP::Endpoint address; }; diff --git a/include/xrpl/resource/detail/Entry.h b/include/xrpl/resource/detail/Entry.h index ecff8828af..2a6414778c 100644 --- a/include/xrpl/resource/detail/Entry.h +++ b/include/xrpl/resource/detail/Entry.h @@ -62,7 +62,7 @@ struct Entry : public beast::List::Node std::optional publicKey; // Back pointer to the map key (bit of a hack here) - Key const* key; + Key const* key{}; // Number of Consumer references int refcount; diff --git a/include/xrpl/resource/detail/Import.h b/include/xrpl/resource/detail/Import.h index 790fc0596a..bee90afbf0 100644 --- a/include/xrpl/resource/detail/Import.h +++ b/include/xrpl/resource/detail/Import.h @@ -13,7 +13,7 @@ struct Import { explicit Item() = default; - int balance; + int balance{}; Consumer consumer; }; diff --git a/include/xrpl/resource/detail/Logic.h b/include/xrpl/resource/detail/Logic.h index 9a7959f481..66c47bc538 100644 --- a/include/xrpl/resource/detail/Logic.h +++ b/include/xrpl/resource/detail/Logic.h @@ -93,7 +93,7 @@ public: Entry* entry(nullptr); { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto [resultIt, resultInserted] = table_.emplace( std::piecewise_construct, std::make_tuple(kindInbound, address.at_port(0)), // Key @@ -123,7 +123,7 @@ public: Entry* entry(nullptr); { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto [resultIt, resultInserted] = table_.emplace( std::piecewise_construct, std::make_tuple(kindOutbound, address), // Key @@ -156,7 +156,7 @@ public: Entry* entry(nullptr); { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto [resultIt, resultInserted] = table_.emplace( std::piecewise_construct, std::make_tuple(kindUnlimited, address.at_port(1)), // Key @@ -191,11 +191,11 @@ public: clock_type::time_point const now(m_clock.now()); Json::Value ret(Json::objectValue); - std::lock_guard _(lock_); + std::lock_guard const _(lock_); for (auto& inboundEntry : inbound_) { - int localBalance = inboundEntry.local_balance.value(now); + int const localBalance = inboundEntry.local_balance.value(now); if ((localBalance + inboundEntry.remote_balance) >= threshold) { Json::Value& entry = (ret[inboundEntry.to_string()] = Json::objectValue); @@ -206,7 +206,7 @@ public: } for (auto& outboundEntry : outbound_) { - int localBalance = outboundEntry.local_balance.value(now); + int const localBalance = outboundEntry.local_balance.value(now); if ((localBalance + outboundEntry.remote_balance) >= threshold) { Json::Value& entry = (ret[outboundEntry.to_string()] = Json::objectValue); @@ -217,7 +217,7 @@ public: } for (auto& adminEntry : admin_) { - int localBalance = adminEntry.local_balance.value(now); + int const localBalance = adminEntry.local_balance.value(now); if ((localBalance + adminEntry.remote_balance) >= threshold) { Json::Value& entry = (ret[adminEntry.to_string()] = Json::objectValue); @@ -236,7 +236,7 @@ public: clock_type::time_point const now(m_clock.now()); Gossip gossip; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); gossip.items.reserve(inbound_.size()); @@ -261,7 +261,7 @@ public: { auto const elapsed = m_clock.now(); { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto [resultIt, resultInserted] = importTable_.emplace( std::piecewise_construct, std::make_tuple(origin), // Key @@ -318,7 +318,7 @@ public: void periodicActivity() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto const elapsed = m_clock.now(); @@ -374,7 +374,7 @@ public: void erase(Table::iterator iter) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); Entry& entry(iter->second); XRPL_ASSERT(entry.refcount == 0, "xrpl::Resource::Logic::erase : entry not used"); inactive_.erase(inactive_.iterator_to(entry)); @@ -384,14 +384,14 @@ public: void acquire(Entry& entry) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); ++entry.refcount; } void release(Entry& entry) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); if (--entry.refcount == 0) { JLOG(m_journal.debug()) << "Inactive " << entry; @@ -442,7 +442,7 @@ public: if (!context.empty()) context = " (" + context + ")"; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); clock_type::time_point const now(m_clock.now()); int const balance(entry.add(fee.cost(), now)); JLOG(getStream(fee.cost(), m_journal)) << "Charging " << entry << " for " << fee << context; @@ -455,7 +455,7 @@ public: if (entry.isUnlimited()) return false; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); bool notify(false); auto const elapsed = m_clock.now(); if (entry.balance(m_clock.now()) >= warningThreshold && elapsed != entry.lastWarningTime) @@ -478,7 +478,7 @@ public: if (entry.isUnlimited()) return false; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); bool drop(false); clock_type::time_point const now(m_clock.now()); int const balance(entry.balance(now)); @@ -500,7 +500,7 @@ public: int balance(Entry& entry) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); return entry.balance(m_clock.now()); } @@ -529,7 +529,7 @@ public: { clock_type::time_point const now(m_clock.now()); - std::lock_guard _(lock_); + std::lock_guard const _(lock_); { beast::PropertyStream::Set s("inbound", map); diff --git a/include/xrpl/server/LoadFeeTrack.h b/include/xrpl/server/LoadFeeTrack.h index fc031a1833..226408dbde 100644 --- a/include/xrpl/server/LoadFeeTrack.h +++ b/include/xrpl/server/LoadFeeTrack.h @@ -26,10 +26,6 @@ class LoadFeeTrack final public: explicit LoadFeeTrack(beast::Journal journal = beast::Journal(beast::Journal::getNullSink())) : j_(journal) - , localTxnLoadFee_(lftNormalFee) - , remoteTxnLoadFee_(lftNormalFee) - , clusterTxnLoadFee_(lftNormalFee) - , raiseCount_(0) { } @@ -39,28 +35,28 @@ public: setRemoteFee(std::uint32_t f) { JLOG(j_.trace()) << "setRemoteFee: " << f; - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); remoteTxnLoadFee_ = f; } std::uint32_t getRemoteFee() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return remoteTxnLoadFee_; } std::uint32_t getLocalFee() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return localTxnLoadFee_; } std::uint32_t getClusterFee() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return clusterTxnLoadFee_; } @@ -73,14 +69,14 @@ public: std::uint32_t getLoadFactor() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return std::max({clusterTxnLoadFee_, localTxnLoadFee_, remoteTxnLoadFee_}); } std::pair getScalingFactors() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return std::make_pair( std::max(localTxnLoadFee_, remoteTxnLoadFee_), @@ -91,7 +87,7 @@ public: setClusterFee(std::uint32_t fee) { JLOG(j_.trace()) << "setClusterFee: " << fee; - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); clusterTxnLoadFee_ = fee; } @@ -103,14 +99,14 @@ public: bool isLoadedLocal() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee); } bool isLoadedCluster() const { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee) || (clusterTxnLoadFee_ != lftNormalFee); } @@ -124,10 +120,10 @@ private: beast::Journal const j_; std::mutex mutable lock_; - std::uint32_t localTxnLoadFee_; // Scale factor, lftNormalFee = normal fee - std::uint32_t remoteTxnLoadFee_; // Scale factor, lftNormalFee = normal fee - std::uint32_t clusterTxnLoadFee_; // Scale factor, lftNormalFee = normal fee - std::uint32_t raiseCount_; + std::uint32_t localTxnLoadFee_{lftNormalFee}; // Scale factor, lftNormalFee = normal fee + std::uint32_t remoteTxnLoadFee_{lftNormalFee}; // Scale factor, lftNormalFee = normal fee + std::uint32_t clusterTxnLoadFee_{lftNormalFee}; // Scale factor, lftNormalFee = normal fee + std::uint32_t raiseCount_{0}; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/server/Manifest.h b/include/xrpl/server/Manifest.h index 7f1bba921e..02c370561a 100644 --- a/include/xrpl/server/Manifest.h +++ b/include/xrpl/server/Manifest.h @@ -401,7 +401,7 @@ public: void for_each_manifest(Function&& f) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; for (auto const& [_, manifest] : map_) { (void)_; @@ -429,7 +429,7 @@ public: void for_each_manifest(PreFun&& pf, EachFun&& f) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; pf(map_.size()); for (auto const& [_, manifest] : map_) { diff --git a/include/xrpl/server/Port.h b/include/xrpl/server/Port.h index 1dfa93b0a7..c7acabbc85 100644 --- a/include/xrpl/server/Port.h +++ b/include/xrpl/server/Port.h @@ -19,7 +19,7 @@ namespace boost { namespace asio { namespace ssl { class context; -} +} // namespace ssl } // namespace asio } // namespace boost @@ -54,7 +54,7 @@ struct Port int limit = 0; // Websocket disconnects if send queue exceeds this limit - std::uint16_t ws_queue_limit; + std::uint16_t ws_queue_limit{}; // Returns `true` if any websocket protocols are specified bool @@ -90,7 +90,7 @@ struct ParsedPort std::string ssl_ciphers; boost::beast::websocket::permessage_deflate pmd_options; int limit = 0; - std::uint16_t ws_queue_limit; + std::uint16_t ws_queue_limit{}; std::optional ip; std::optional port; diff --git a/include/xrpl/server/State.h b/include/xrpl/server/State.h index 48e11869f4..c3cc4f609c 100644 --- a/include/xrpl/server/State.h +++ b/include/xrpl/server/State.h @@ -12,7 +12,7 @@ struct SavedState { std::string writableDb; std::string archiveDb; - LedgerIndex lastRotated; + LedgerIndex lastRotated{}; }; /** diff --git a/include/xrpl/server/detail/BaseHTTPPeer.h b/include/xrpl/server/detail/BaseHTTPPeer.h index f900261b84..878f6a1ddf 100644 --- a/include/xrpl/server/detail/BaseHTTPPeer.h +++ b/include/xrpl/server/detail/BaseHTTPPeer.h @@ -48,14 +48,14 @@ protected: struct buffer { - buffer(void const* ptr, std::size_t len) : data(new char[len]), bytes(len), used(0) + buffer(void const* ptr, std::size_t len) : data(new char[len]), bytes(len) { memcpy(data.get(), ptr, len); } std::unique_ptr data; std::size_t bytes; - std::size_t used; + std::size_t used{0}; }; Port const& port_; @@ -300,7 +300,7 @@ BaseHTTPPeer::on_write(error_code const& ec, std::size_t bytes_tr return fail(ec, "write"); bytes_out_ += bytes_transferred; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); wq2_.clear(); wq2_.reserve(wq_.size()); std::swap(wq2_, wq_); @@ -392,7 +392,7 @@ BaseHTTPPeer::write(void const* buf, std::size_t bytes) if (bytes == 0) return; if ([&] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); wq_.emplace_back(buf, bytes); return wq_.size() == 1 && wq2_.size() == 0; }()) @@ -443,7 +443,7 @@ BaseHTTPPeer::complete() complete_ = true; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (!wq_.empty() && !wq2_.empty()) return; } @@ -476,7 +476,7 @@ BaseHTTPPeer::close(bool graceful) { graceful_ = true; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (!wq_.empty() || !wq2_.empty()) return; } diff --git a/include/xrpl/server/detail/BaseWSPeer.h b/include/xrpl/server/detail/BaseWSPeer.h index f415520e59..9213a955f0 100644 --- a/include/xrpl/server/detail/BaseWSPeer.h +++ b/include/xrpl/server/detail/BaseWSPeer.h @@ -418,7 +418,7 @@ BaseWSPeer::on_ping_pong( { if (kind == boost::beast::websocket::frame_type::pong) { - boost::beast::string_view p(payload_.begin()); + boost::beast::string_view const p(payload_.begin()); if (payload == p) { close_on_timer_ = false; diff --git a/include/xrpl/server/detail/Door.h b/include/xrpl/server/detail/Door.h index f977dc6002..87baad42db 100644 --- a/include/xrpl/server/detail/Door.h +++ b/include/xrpl/server/detail/Door.h @@ -88,8 +88,12 @@ private: boost::asio::io_context& ioc_; acceptor_type acceptor_; boost::asio::strand strand_; - bool ssl_; - bool plain_; + bool ssl_{ + port_.protocol.count("https") > 0 || port_.protocol.count("wss") > 0 || + port_.protocol.count("wss2") > 0 || port_.protocol.count("peer") > 0}; + bool plain_{ + port_.protocol.count("http") > 0 || port_.protocol.count("ws") > 0 || + port_.protocol.count("ws2")}; static constexpr std::chrono::milliseconds INITIAL_ACCEPT_DELAY{50}; static constexpr std::chrono::milliseconds MAX_ACCEPT_DELAY{2000}; std::chrono::milliseconds accept_delay_{INITIAL_ACCEPT_DELAY}; @@ -274,12 +278,6 @@ Door::Door( , ioc_(io_context) , acceptor_(io_context) , strand_(boost::asio::make_strand(io_context)) - , ssl_( - port_.protocol.count("https") > 0 || port_.protocol.count("wss") > 0 || - port_.protocol.count("wss2") > 0 || port_.protocol.count("peer") > 0) - , plain_( - port_.protocol.count("http") > 0 || port_.protocol.count("ws") > 0 || - port_.protocol.count("ws2")) , backoff_timer_(io_context) { reOpen(); @@ -397,7 +395,7 @@ Door::query_fd_stats() const return std::nullopt; #else FDStats s; - struct rlimit rl; + struct rlimit rl{}; if (getrlimit(RLIMIT_NOFILE, &rl) != 0 || rl.rlim_cur == RLIM_INFINITY) return std::nullopt; s.limit = static_cast(rl.rlim_cur); diff --git a/include/xrpl/server/detail/ServerImpl.h b/include/xrpl/server/detail/ServerImpl.h index 1f91413521..0b5d075d87 100644 --- a/include/xrpl/server/detail/ServerImpl.h +++ b/include/xrpl/server/detail/ServerImpl.h @@ -74,7 +74,7 @@ private: std::vector ports_; std::vector>> list_; int high_ = 0; - std::array hist_; + std::array hist_{}; io_list ios_; diff --git a/include/xrpl/server/detail/io_list.h b/include/xrpl/server/detail/io_list.h index 5b1a02e039..f1cc04f683 100644 --- a/include/xrpl/server/detail/io_list.h +++ b/include/xrpl/server/detail/io_list.h @@ -165,7 +165,7 @@ io_list::work::destroy() return; std::function f; { - std::lock_guard lock(ios_->m_); + std::lock_guard const lock(ios_->m_); ios_->map_.erase(this); if (--ios_->n_ == 0 && ios_->closed_) { @@ -195,7 +195,7 @@ io_list::emplace(Args&&... args) auto sp = std::make_shared(std::forward(args)...); decltype(sp) dead; - std::lock_guard lock(m_); + std::lock_guard const lock(m_); if (!closed_) { ++n_; diff --git a/include/xrpl/shamap/SHAMap.h b/include/xrpl/shamap/SHAMap.h index 2c0910a830..213e7ce0ce 100644 --- a/include/xrpl/shamap/SHAMap.h +++ b/include/xrpl/shamap/SHAMap.h @@ -520,7 +520,7 @@ private: // getMissingNodes helper functions void gmn_ProcessNodes(MissingNodes&, MissingNodes::StackEntry& node); - void + static void gmn_ProcessDeferredReads(MissingNodes&); // fetch from DB helper function diff --git a/include/xrpl/shamap/SHAMapItem.h b/include/xrpl/shamap/SHAMapItem.h index dd098d88aa..da70e16db3 100644 --- a/include/xrpl/shamap/SHAMapItem.h +++ b/include/xrpl/shamap/SHAMapItem.h @@ -141,6 +141,7 @@ make_shamapitem(uint256 const& tag, Slice data) XRPL_ASSERT( data.size() <= megabytes(16), "xrpl::make_shamapitem : maximum input size"); + // NOLINTNEXTLINE(misc-const-correctness) std::uint8_t* raw = detail::slabber.allocate(data.size()); // If we can't grab memory from the slab allocators, we fall back to diff --git a/include/xrpl/tx/ApplyContext.h b/include/xrpl/tx/ApplyContext.h index 9e382556c2..6341c0bcc5 100644 --- a/include/xrpl/tx/ApplyContext.h +++ b/include/xrpl/tx/ApplyContext.h @@ -37,7 +37,7 @@ public: XRPL_ASSERT((flags & tapBATCH) == 0, "Batch apply flag should not be set"); } - ServiceRegistry& registry; + std::reference_wrapper registry; STTx const& tx; TER const preclaimResult; XRPAmount const baseFee; @@ -111,7 +111,7 @@ public: checkInvariants(TER const result, XRPAmount const fee); private: - TER + static TER failInvariantCheck(TER const result); template diff --git a/include/xrpl/tx/Transactor.h b/include/xrpl/tx/Transactor.h index 8d816f60f8..287f785cd7 100644 --- a/include/xrpl/tx/Transactor.h +++ b/include/xrpl/tx/Transactor.h @@ -13,7 +13,7 @@ namespace xrpl { struct PreflightContext { public: - ServiceRegistry& registry; + std::reference_wrapper registry; STTx const& tx; Rules const rules; ApplyFlags flags; @@ -56,7 +56,7 @@ public: struct PreclaimContext { public: - ServiceRegistry& registry; + std::reference_wrapper registry; ReadView const& view; TER preflightResult; ApplyFlags flags; @@ -116,12 +116,13 @@ protected: AccountID const account_; XRPAmount preFeeBalance_{}; // Balance before fees. - virtual ~Transactor() = default; Transactor(Transactor const&) = delete; Transactor& operator=(Transactor const&) = delete; public: + virtual ~Transactor() = default; + enum ConsequencesFactoryType { Normal, Blocker, Custom }; /** Process the transaction. */ ApplyResult diff --git a/include/xrpl/tx/invariants/AMMInvariant.h b/include/xrpl/tx/invariants/AMMInvariant.h index 63ebb804ae..e872c61f76 100644 --- a/include/xrpl/tx/invariants/AMMInvariant.h +++ b/include/xrpl/tx/invariants/AMMInvariant.h @@ -15,12 +15,12 @@ class ValidAMM std::optional ammAccount_; std::optional lptAMMBalanceAfter_; std::optional lptAMMBalanceBefore_; - bool ammPoolChanged_; + bool ammPoolChanged_{false}; public: enum class ZeroAllowed : bool { No = false, Yes = true }; - ValidAMM() : ammPoolChanged_{false} + ValidAMM() { } void diff --git a/include/xrpl/tx/invariants/FreezeInvariant.h b/include/xrpl/tx/invariants/FreezeInvariant.h index ac9d83166e..645f444462 100644 --- a/include/xrpl/tx/invariants/FreezeInvariant.h +++ b/include/xrpl/tx/invariants/FreezeInvariant.h @@ -48,7 +48,7 @@ private: bool isValidEntry(std::shared_ptr const& before, std::shared_ptr const& after); - STAmount + static STAmount calculateBalanceChange( std::shared_ptr const& before, std::shared_ptr const& after, @@ -63,7 +63,7 @@ private: std::shared_ptr findIssuer(AccountID const& issuerID, ReadView const& view); - bool + static bool validateIssuerChanges( std::shared_ptr const& issuer, IssuerChanges const& changes, @@ -71,7 +71,7 @@ private: beast::Journal const& j, bool enforce); - bool + static bool validateFrozenState( BalanceChange const& change, bool high, diff --git a/include/xrpl/tx/invariants/InvariantCheck.h b/include/xrpl/tx/invariants/InvariantCheck.h index e0ad65f14c..e7ced63785 100644 --- a/include/xrpl/tx/invariants/InvariantCheck.h +++ b/include/xrpl/tx/invariants/InvariantCheck.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -111,7 +112,7 @@ public: void visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - bool + static bool finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); }; diff --git a/include/xrpl/tx/invariants/LoanBrokerInvariant.h b/include/xrpl/tx/invariants/LoanBrokerInvariant.h new file mode 100644 index 0000000000..e7d14a638b --- /dev/null +++ b/include/xrpl/tx/invariants/LoanBrokerInvariant.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +/** + * @brief Invariants: Loan brokers are internally consistent + * + * 1. If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most one + * node (the root), which will only hold entries for `RippleState` or + * `MPToken` objects. + * + */ +class ValidLoanBroker +{ + // Not all of these elements will necessarily be populated. Remaining items + // will be looked up as needed. + struct BrokerInfo + { + SLE::const_pointer brokerBefore = nullptr; + // After is used for most of the checks, except + // those that check changed values. + SLE::const_pointer brokerAfter = nullptr; + }; + // Collect all the LoanBrokers found directly or indirectly through + // pseudo-accounts. Key is the brokerID / index. It will be used to find the + // LoanBroker object if brokerBefore and brokerAfter are nullptr + std::map brokers_; + // Collect all the modified trust lines. Their high and low accounts will be + // loaded to look for LoanBroker pseudo-accounts. + std::vector lines_; + // Collect all the modified MPTokens. Their accounts will be loaded to look + // for LoanBroker pseudo-accounts. + std::vector mpts_; + + static bool + goodZeroDirectory(ReadView const& view, SLE::const_ref dir, beast::Journal const& j); + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/LoanInvariant.h b/include/xrpl/tx/invariants/LoanInvariant.h index be771cd582..bda9c51653 100644 --- a/include/xrpl/tx/invariants/LoanInvariant.h +++ b/include/xrpl/tx/invariants/LoanInvariant.h @@ -1,57 +1,14 @@ #pragma once -#include #include #include #include #include -#include #include namespace xrpl { -/** - * @brief Invariants: Loan brokers are internally consistent - * - * 1. If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most one - * node (the root), which will only hold entries for `RippleState` or - * `MPToken` objects. - * - */ -class ValidLoanBroker -{ - // Not all of these elements will necessarily be populated. Remaining items - // will be looked up as needed. - struct BrokerInfo - { - SLE::const_pointer brokerBefore = nullptr; - // After is used for most of the checks, except - // those that check changed values. - SLE::const_pointer brokerAfter = nullptr; - }; - // Collect all the LoanBrokers found directly or indirectly through - // pseudo-accounts. Key is the brokerID / index. It will be used to find the - // LoanBroker object if brokerBefore and brokerAfter are nullptr - std::map brokers_; - // Collect all the modified trust lines. Their high and low accounts will be - // loaded to look for LoanBroker pseudo-accounts. - std::vector lines_; - // Collect all the modified MPTokens. Their accounts will be loaded to look - // for LoanBroker pseudo-accounts. - std::vector mpts_; - - bool - goodZeroDirectory(ReadView const& view, SLE::const_ref dir, beast::Journal const& j) const; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - /** * @brief Invariants: Loans are internally consistent * diff --git a/src/xrpld/app/paths/AMMLiquidity.h b/include/xrpl/tx/paths/AMMLiquidity.h similarity index 100% rename from src/xrpld/app/paths/AMMLiquidity.h rename to include/xrpl/tx/paths/AMMLiquidity.h diff --git a/src/xrpld/app/paths/AMMOffer.h b/include/xrpl/tx/paths/AMMOffer.h similarity index 99% rename from src/xrpld/app/paths/AMMOffer.h rename to include/xrpl/tx/paths/AMMOffer.h index aa6132dfce..4ef1b2048b 100644 --- a/src/xrpld/app/paths/AMMOffer.h +++ b/include/xrpl/tx/paths/AMMOffer.h @@ -37,7 +37,7 @@ private: // else the amounts quality Quality const quality_; // AMM offer can be consumed once at a given iteration - bool consumed_; + bool consumed_{false}; public: AMMOffer( diff --git a/include/xrpl/tx/paths/BookTip.h b/include/xrpl/tx/paths/BookTip.h index 98036a86eb..6a1805e83a 100644 --- a/include/xrpl/tx/paths/BookTip.h +++ b/include/xrpl/tx/paths/BookTip.h @@ -16,7 +16,7 @@ class BookTip { private: ApplyView& view_; - bool m_valid; + bool m_valid{false}; uint256 m_book; uint256 m_end; uint256 m_dir; diff --git a/include/xrpl/tx/paths/Flow.h b/include/xrpl/tx/paths/Flow.h index 32e8c3611b..f37c9d56c3 100644 --- a/include/xrpl/tx/paths/Flow.h +++ b/include/xrpl/tx/paths/Flow.h @@ -9,7 +9,7 @@ namespace xrpl { namespace path { namespace detail { struct FlowDebugInfo; -} +} // namespace detail } // namespace path /** diff --git a/include/xrpl/tx/paths/Offer.h b/include/xrpl/tx/paths/Offer.h index 4b161c5f2d..de3eed933a 100644 --- a/include/xrpl/tx/paths/Offer.h +++ b/include/xrpl/tx/paths/Offer.h @@ -32,10 +32,10 @@ class TOffer : private TOfferBase { private: SLE::pointer m_entry; - Quality m_quality; + Quality m_quality{}; AccountID m_account; - TAmounts m_amounts; + TAmounts m_amounts{}; void setFieldAmounts(); diff --git a/include/xrpl/tx/paths/OfferStream.h b/include/xrpl/tx/paths/OfferStream.h index df96a1b6da..ba553360ef 100644 --- a/include/xrpl/tx/paths/OfferStream.h +++ b/include/xrpl/tx/paths/OfferStream.h @@ -19,11 +19,11 @@ public: { private: std::uint32_t const limit_; - std::uint32_t count_; + std::uint32_t count_{0}; beast::Journal j_; public: - StepCounter(std::uint32_t limit, beast::Journal j) : limit_(limit), count_(0), j_(j) + StepCounter(std::uint32_t limit, beast::Journal j) : limit_(limit), j_(j) { } diff --git a/include/xrpl/tx/paths/RippleCalc.h b/include/xrpl/tx/paths/RippleCalc.h index a5cecc18bf..55f552a61f 100644 --- a/include/xrpl/tx/paths/RippleCalc.h +++ b/include/xrpl/tx/paths/RippleCalc.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include @@ -13,7 +13,7 @@ namespace path { namespace detail { struct FlowDebugInfo; -} +} // namespace detail /** RippleCalc calculates the quality of a payment path. @@ -92,7 +92,7 @@ public: STPathSet const& spsPaths, std::optional const& domainID, - Logs& l, + ServiceRegistry& registry, Input const* const pInputs = nullptr); // The view we are currently working on diff --git a/include/xrpl/tx/paths/detail/AmountSpec.h b/include/xrpl/tx/paths/detail/AmountSpec.h index 690e67ae22..1adee6a0a3 100644 --- a/include/xrpl/tx/paths/detail/AmountSpec.h +++ b/include/xrpl/tx/paths/detail/AmountSpec.h @@ -12,7 +12,7 @@ struct AmountSpec { explicit AmountSpec() = default; - bool native; + bool native{}; union { XRPAmount xrp; diff --git a/src/xrpld/app/paths/detail/StepChecks.h b/include/xrpl/tx/paths/detail/StepChecks.h similarity index 100% rename from src/xrpld/app/paths/detail/StepChecks.h rename to include/xrpl/tx/paths/detail/StepChecks.h diff --git a/include/xrpl/tx/paths/detail/Steps.h b/include/xrpl/tx/paths/detail/Steps.h index 53c9294155..0b75974acb 100644 --- a/include/xrpl/tx/paths/detail/Steps.h +++ b/include/xrpl/tx/paths/detail/Steps.h @@ -147,29 +147,26 @@ public: /** If this step is a DirectStepI, return the quality in of the dst account. - */ + */ virtual std::uint32_t lineQualityIn(ReadView const&) const { return QUALITY_ONE; } - // clang-format off /** Find an upper bound of quality for the step @param v view to query the ledger state from @param prevStepDir Set to DebtDirection::redeems if the previous step redeems. - @return A pair. The first element is the upper bound of quality for the step, or std::nullopt if the - step is dry. The second element will be set to DebtDirection::redeems if this steps redeems, - DebtDirection:issues if this step issues. - @note it is an upper bound because offers on the books may be unfunded. - If there is always a funded offer at the tip of the book, then we could - rename this `theoreticalQuality` rather than `qualityUpperBound`. It - could still differ from the actual quality, but except for "dust" amounts, - it should be a good estimate for the actual quality. - */ - // clang-format on + @return A pair. The first element is the upper bound of quality for the step, or std::nullopt + if the step is dry. The second element will be set to DebtDirection::redeems if this + steps redeems, DebtDirection:issues if this step issues. + @note It is an upper bound because offers on the books may be unfunded. If there is always a + funded offer at the tip of the book, then we could rename this `theoreticalQuality` + rather than `qualityUpperBound`. It could still differ from the actual quality, but + except for "dust" amounts, it should be a good estimate for the actual quality. + */ virtual std::pair, DebtDirection> qualityUpperBound(ReadView const& v, DebtDirection prevStepDir) const = 0; diff --git a/include/xrpl/tx/paths/detail/StrandFlow.h b/include/xrpl/tx/paths/detail/StrandFlow.h index 2a94b9b968..fba631c695 100644 --- a/include/xrpl/tx/paths/detail/StrandFlow.h +++ b/include/xrpl/tx/paths/detail/StrandFlow.h @@ -27,7 +27,7 @@ namespace xrpl { template struct StrandResult { - bool success; ///< Strand succeeded + bool success = false; ///< Strand succeeded TInAmt in = beast::zero; ///< Currency amount in TOutAmt out = beast::zero; ///< Currency amount out std::optional sandbox; ///< Resulting Sandbox state @@ -61,7 +61,7 @@ struct StrandResult } StrandResult(Strand const& strand, boost::container::flat_set ofrsToRm_) - : success(false), ofrsToRm(std::move(ofrsToRm_)), ofrsUsed(offersUsed(strand)) + : ofrsToRm(std::move(ofrsToRm_)), ofrsUsed(offersUsed(strand)) { } }; @@ -571,7 +571,7 @@ flow( std::size_t const maxTries = 1000; std::size_t curTry = 0; - std::uint32_t maxOffersToConsider = 1500; + std::uint32_t const maxOffersToConsider = 1500; std::uint32_t offersConsidered = 0; // There is a bug in gcc that incorrectly warns about using uninitialized diff --git a/include/xrpl/tx/transactors/dex/AMMHelpers.h b/include/xrpl/tx/transactors/dex/AMMHelpers.h index e2735ea80f..55f27a3f06 100644 --- a/include/xrpl/tx/transactors/dex/AMMHelpers.h +++ b/include/xrpl/tx/transactors/dex/AMMHelpers.h @@ -22,7 +22,7 @@ reduceOffer(auto const& amount) static Number const reducedOfferPct(9999, -4); // Make sure the result is always less than amount or zero. - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); return amount * reducedOfferPct; } @@ -121,7 +121,6 @@ withinRelativeDistance(Quality const& calcQuality, Quality const& reqQuality, Nu * @param dist requested relative distance * @return true if within dist, false otherwise */ -// clang-format off template requires( std::is_same_v || std::is_same_v || @@ -134,7 +133,6 @@ withinRelativeDistance(Amt const& calc, Amt const& req, Number const& dist) auto const [min, max] = std::minmax(calc, req); return ((max - min) / max) < dist; } -// clang-format on /** Solve quadratic equation to find takerGets or takerPays. Round * to minimize the amount in order to maximize the quality. @@ -175,7 +173,7 @@ getAMMOfferStartWithTakerGets( if (targetQuality.rate() == beast::zero) return std::nullopt; - NumberRoundModeGuard mg(Number::to_nearest); + NumberRoundModeGuard const mg(Number::to_nearest); auto const f = feeMult(tfee); auto const a = 1; auto const b = pool.in * (1 - 1 / f) / targetQuality.rate() - 2 * pool.out; @@ -203,7 +201,7 @@ getAMMOfferStartWithTakerGets( // Try to reduce the offer size to improve the quality. // The quality might still not match the targetQuality for a tiny offer. - if (auto const amounts = getAmounts(*nTakerGets); Quality{amounts} < targetQuality) + if (auto amounts = getAmounts(*nTakerGets); Quality{amounts} < targetQuality) return getAmounts(detail::reduceOffer(amounts.out)); else return amounts; @@ -242,7 +240,7 @@ getAMMOfferStartWithTakerPays( if (targetQuality.rate() == beast::zero) return std::nullopt; - NumberRoundModeGuard mg(Number::to_nearest); + NumberRoundModeGuard const mg(Number::to_nearest); auto const f = feeMult(tfee); auto const& a = f; auto const b = pool.in * (1 + f); @@ -270,7 +268,7 @@ getAMMOfferStartWithTakerPays( // Try to reduce the offer size to improve the quality. // The quality might still not match the targetQuality for a tiny offer. - if (auto const amounts = getAmounts(*nTakerPays); Quality{amounts} < targetQuality) + if (auto amounts = getAmounts(*nTakerPays); Quality{amounts} < targetQuality) return getAmounts(detail::reduceOffer(amounts.in)); else return amounts; @@ -335,8 +333,7 @@ changeSpotPriceQuality( } auto const takerPays = toAmount(getIssue(pool.in), nTakerPays, Number::upward); // should not fail - if (auto const amounts = - TAmounts{takerPays, swapAssetIn(pool, takerPays, tfee)}; + if (auto amounts = TAmounts{takerPays, swapAssetIn(pool, takerPays, tfee)}; Quality{amounts} < quality && !withinRelativeDistance(Quality{amounts}, quality, Number(1, -7))) { @@ -362,7 +359,7 @@ changeSpotPriceQuality( // Generate the offer starting with XRP side. Return seated offer amounts // if the offer can be generated, otherwise nullopt. - auto const amounts = [&]() { + auto amounts = [&]() { if (isXRP(getIssue(pool.out))) return getAMMOfferStartWithTakerGets(pool, quality, tfee); return getAMMOfferStartWithTakerPays(pool, quality, tfee); @@ -438,7 +435,7 @@ swapAssetIn(TAmounts const& pool, TIn const& assetIn, std::uint16_t t // 1-fee // maximize: // fee - saveNumberRoundMode _{Number::getround()}; + saveNumberRoundMode const _{Number::getround()}; Number::setround(Number::upward); auto const numerator = pool.in * pool.out; @@ -502,7 +499,7 @@ swapAssetOut(TAmounts const& pool, TOut const& assetOut, std::uint16_ // maximize: // tfee/100000 - saveNumberRoundMode _{Number::getround()}; + saveNumberRoundMode const _{Number::getround()}; Number::setround(Number::upward); auto const numerator = pool.in * pool.out; diff --git a/include/xrpl/tx/transactors/lending/LendingHelpers.h b/include/xrpl/tx/transactors/lending/LendingHelpers.h index 4057c9c173..897ca3995b 100644 --- a/include/xrpl/tx/transactors/lending/LendingHelpers.h +++ b/include/xrpl/tx/transactors/lending/LendingHelpers.h @@ -143,7 +143,7 @@ struct LoanProperties // - A minimum scale required to represent the periodic payment accurately // All loan state values (principal, interest, fees) are rounded to this // scale. - std::int32_t loanScale; + std::int32_t loanScale{}; // The principal portion of the first payment. Number firstPaymentPrincipal; diff --git a/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h b/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h index 0ebde22a37..5ef12df282 100644 --- a/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h +++ b/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h @@ -10,7 +10,7 @@ struct MPTCreateArgs { std::optional priorBalance; AccountID const& account; - std::uint32_t sequence; + std::uint32_t sequence = 0; std::uint32_t flags = 0; std::optional maxAmount{}; std::optional assetScale{}; diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index bd37b4e42e..61bbedfd1a 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -182,11 +182,11 @@ public: addInstance(StorePtr& s, WasmExternVec const& imports); std::int64_t - getGas(); + getGas() const; private: WasmExternVec - buildImports(StorePtr& s, ImportVec const& imports); + buildImports(StorePtr& s, ImportVec const& imports) const; }; class WasmiEngine @@ -273,7 +273,7 @@ private: FuncInfo getFunc(std::string_view funcName) const; - std::vector + static std::vector convertParams(std::vector const& params); static int diff --git a/src/libxrpl/basics/Archive.cpp b/src/libxrpl/basics/Archive.cpp index a09d77d794..e77dabcd68 100644 --- a/src/libxrpl/basics/Archive.cpp +++ b/src/libxrpl/basics/Archive.cpp @@ -20,7 +20,7 @@ extractTarLz4(boost::filesystem::path const& src, boost::filesystem::path const& Throw("Invalid source file"); using archive_ptr = std::unique_ptr; - archive_ptr ar{archive_read_new(), [](struct archive* a) { archive_read_free(a); }}; + archive_ptr const ar{archive_read_new(), [](struct archive* a) { archive_read_free(a); }}; if (!ar) Throw("Failed to allocate archive"); @@ -36,7 +36,8 @@ extractTarLz4(boost::filesystem::path const& src, boost::filesystem::path const& Throw(archive_error_string(ar.get())); } - archive_ptr aw{archive_write_disk_new(), [](struct archive* a) { archive_write_free(a); }}; + archive_ptr const aw{ + archive_write_disk_new(), [](struct archive* a) { archive_write_free(a); }}; if (!aw) Throw("Failed to allocate archive"); diff --git a/src/libxrpl/basics/BasicConfig.cpp b/src/libxrpl/basics/BasicConfig.cpp index edc8bea7d9..ba10a575d9 100644 --- a/src/libxrpl/basics/BasicConfig.cpp +++ b/src/libxrpl/basics/BasicConfig.cpp @@ -126,7 +126,7 @@ BasicConfig::section(std::string const& name) Section const& BasicConfig::section(std::string const& name) const { - static Section none(""); + static Section const none(""); auto const iter = map_.find(name); if (iter == map_.end()) return none; diff --git a/src/libxrpl/basics/FileUtilities.cpp b/src/libxrpl/basics/FileUtilities.cpp index 0f636276da..96ec3fa3ba 100644 --- a/src/libxrpl/basics/FileUtilities.cpp +++ b/src/libxrpl/basics/FileUtilities.cpp @@ -26,7 +26,7 @@ getFileContents( using namespace boost::filesystem; using namespace boost::system::errc; - path fullPath{canonical(sourcePath, ec)}; + path const fullPath{canonical(sourcePath, ec)}; if (ec) return {}; @@ -45,7 +45,7 @@ getFileContents( return {}; } - std::string const result{ + std::string result{ std::istreambuf_iterator{fileStream}, std::istreambuf_iterator{}}; if (fileStream.bad()) diff --git a/src/libxrpl/basics/Log.cpp b/src/libxrpl/basics/Log.cpp index 9cebd1f04a..f0a546ee75 100644 --- a/src/libxrpl/basics/Log.cpp +++ b/src/libxrpl/basics/Log.cpp @@ -119,7 +119,7 @@ Logs::open(boost::filesystem::path const& pathToLogFile) beast::Journal::Sink& Logs::get(std::string const& name) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const result = sinks_.emplace(name, makeSink(name, thresh_)); return *result.first->second; } @@ -145,7 +145,7 @@ Logs::threshold() const void Logs::threshold(beast::severities::Severity thresh) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); thresh_ = thresh; for (auto& sink : sinks_) sink.second->threshold(thresh); @@ -155,7 +155,7 @@ std::vector> Logs::partition_severities() const { std::vector> list; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list.reserve(sinks_.size()); for (auto const& [name, sink] : sinks_) list.emplace_back(name, toString(fromSeverity(sink->threshold()))); @@ -171,7 +171,7 @@ Logs::write( { std::string s; format(s, text, level, partition); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); file_.writeln(s); if (!silent_) std::cerr << s << '\n'; @@ -183,7 +183,7 @@ Logs::write( std::string Logs::rotate() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); bool const wasOpened = file_.closeAndReopen(); if (wasOpened) return "The log file was closed and reopened."; @@ -411,7 +411,7 @@ public: std::unique_ptr set(std::unique_ptr sink) { - std::lock_guard _(m_); + std::lock_guard const _(m_); using std::swap; swap(holder_, sink); @@ -431,7 +431,7 @@ public: beast::Journal::Sink& get() { - std::lock_guard _(m_); + std::lock_guard const _(m_); return sink_.get(); } }; diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index b64c2f5707..7077030ccc 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -161,7 +161,7 @@ Number::Guard::push(T d) noexcept inline unsigned Number::Guard::pop() noexcept { - unsigned d = (digits_ & 0xF000'0000'0000'0000) >> 60; + unsigned const d = (digits_ & 0xF000'0000'0000'0000) >> 60; digits_ <<= 4; return d; } @@ -325,7 +325,7 @@ Number::externalToInternal(rep mantissa) // int128_t, negate that, and cast it back down to the internalrep // In practice, this is only going to cover the case of // std::numeric_limits::min(). - int128_t temp = mantissa; + int128_t const temp = mantissa; return static_cast(-temp); } @@ -530,7 +530,7 @@ Number::operator+=(Number const& y) uint128_t xm = mantissa_; auto xe = exponent_; - bool yn = y.negative_; + bool const yn = y.negative_; uint128_t ym = y.mantissa_; auto ye = y.exponent_; Guard g; @@ -644,14 +644,14 @@ Number::operator*=(Number const& y) // *m = mantissa // *e = exponent - bool xn = negative_; - int xs = xn ? -1 : 1; + bool const xn = negative_; + int const xs = xn ? -1 : 1; internalrep xm = mantissa_; auto xe = exponent_; - bool yn = y.negative_; - int ys = yn ? -1 : 1; - internalrep ym = y.mantissa_; + bool const yn = y.negative_; + int const ys = yn ? -1 : 1; + internalrep const ym = y.mantissa_; auto ye = y.exponent_; auto zm = uint128_t(xm) * uint128_t(ym); @@ -706,13 +706,13 @@ Number::operator/=(Number const& y) // *m = mantissa // *e = exponent - bool np = negative_; - int ns = (np ? -1 : 1); + bool const np = negative_; + int const ns = (np ? -1 : 1); auto nm = mantissa_; auto ne = exponent_; - bool dp = y.negative_; - int ds = (dp ? -1 : 1); + bool const dp = y.negative_; + int const ds = (dp ? -1 : 1); auto dm = y.mantissa_; auto de = y.exponent_; @@ -728,7 +728,7 @@ Number::operator/=(Number const& y) // f can be up to 10^(38-19) = 10^19 safely static_assert(smallRange.log == 15); static_assert(largeRange.log == 18); - bool small = Number::getMantissaScale() == MantissaRange::small; + bool const small = Number::getMantissaScale() == MantissaRange::small; uint128_t const f = small ? 100'000'000'000'000'000 : 10'000'000'000'000'000'000ULL; XRPL_ASSERT_PARTS(f >= minMantissa * 10, "Number::operator/=", "factor expected size"); @@ -955,9 +955,13 @@ ln(Number const& x, int iterations = 50) static Number const LN2(693'147'180'559'945'309ll, -18); if (x <= 0) + { throw std::runtime_error("Not a positive value"); - else if (x == 1) + } + if (x == 1) + { return N0; + } int exponent = 0; Number mantissa = x; @@ -979,7 +983,7 @@ ln(Number const& x, int iterations = 50) for (int i = 1; i <= iterations; ++i) { - sum = sum + z / (2 * i - 1); + sum = sum + z / ((2 * i) - 1); z = z * zz; } @@ -993,9 +997,13 @@ log10(Number const& x, int iterations) static Number const LN10(2'302'585'092'994'046ll, -15); if (x <= 0) + { throw std::runtime_error("Not a positive value"); - else if (x == 1) + } + if (x == 1) + { return N0; + } if (x <= Number(10)) { @@ -1047,8 +1055,8 @@ root(Number f, unsigned d) auto const di = static_cast(d); auto ex = [e = e, di = di]() // Euclidean remainder of e/d { - int k = (e >= 0 ? e : e - (di - 1)) / di; - int k2 = e - k * di; + int const k = (e >= 0 ? e : e - (di - 1)) / di; + int const k2 = e - (k * di); if (k2 == 0) return 0; return di - k2; @@ -1065,7 +1073,7 @@ root(Number f, unsigned d) } // Quadratic least squares curve fit of f^(1/d) in the range [0, 1] - auto const D = ((6 * di + 11) * di + 6) * di + 1; + auto const D = (((6 * di + 11) * di + 6) * di) + 1; auto const a0 = 3 * di * ((2 * di - 3) * di + 1); auto const a1 = 24 * di * (2 * di - 1); auto const a2 = -30 * (di - 1) * di; diff --git a/src/libxrpl/basics/ResolverAsio.cpp b/src/libxrpl/basics/ResolverAsio.cpp index b746092645..305bdb6451 100644 --- a/src/libxrpl/basics/ResolverAsio.cpp +++ b/src/libxrpl/basics/ResolverAsio.cpp @@ -152,7 +152,7 @@ public: void asyncHandlersComplete() { - std::unique_lock lk{m_mut}; + std::unique_lock const lk{m_mut}; m_asyncHandlersCompleted = true; m_cv.notify_all(); } @@ -169,10 +169,10 @@ public: XRPL_ASSERT(m_stopped == true, "xrpl::ResolverAsioImpl::start : stopped"); XRPL_ASSERT(m_stop_called == false, "xrpl::ResolverAsioImpl::start : not stopping"); - if (m_stopped.exchange(false) == true) + if (m_stopped.exchange(false)) { { - std::lock_guard lk{m_mut}; + std::lock_guard const lk{m_mut}; m_asyncHandlersCompleted = false; } addReference(); @@ -182,7 +182,7 @@ public: void stop_async() override { - if (m_stop_called.exchange(true) == false) + if (!m_stop_called.exchange(true)) { boost::asio::dispatch( m_io_context, @@ -229,7 +229,7 @@ public: { XRPL_ASSERT(m_stop_called == true, "xrpl::ResolverAsioImpl::do_stop : stopping"); - if (m_stopped.exchange(true) == false) + if (!m_stopped.exchange(true)) { m_work.clear(); m_resolver.cancel(); @@ -271,7 +271,7 @@ public: m_strand, std::bind(&ResolverAsioImpl::do_work, this, CompletionCounter(this)))); } - HostAndPort + static HostAndPort parseName(std::string const& str) { // first attempt to parse as an endpoint (IP addr + port). @@ -319,7 +319,7 @@ public: void do_work(CompletionCounter) { - if (m_stop_called == true) + if (m_stop_called) return; // We don't have any work to do at this time @@ -327,7 +327,7 @@ public: return; std::string const name(m_work.front().names.back()); - HandlerType handler(m_work.front().handler); + HandlerType const handler(m_work.front().handler); m_work.front().names.pop_back(); @@ -367,7 +367,7 @@ public: { XRPL_ASSERT(!names.empty(), "xrpl::ResolverAsioImpl::do_resolve : names non-empty"); - if (m_stop_called == false) + if (!m_stop_called) { m_work.emplace_back(names, handler); diff --git a/src/libxrpl/basics/StringUtilities.cpp b/src/libxrpl/basics/StringUtilities.cpp index 0dd466c9b4..5e3b100b26 100644 --- a/src/libxrpl/basics/StringUtilities.cpp +++ b/src/libxrpl/basics/StringUtilities.cpp @@ -24,7 +24,7 @@ sqlBlobLiteral(Blob const& blob) { std::string j; - j.reserve(blob.size() * 2 + 3); + j.reserve((blob.size() * 2) + 3); j.push_back('X'); j.push_back('\''); boost::algorithm::hex(blob.begin(), blob.end(), std::back_inserter(j)); @@ -37,7 +37,7 @@ bool parseUrl(parsedURL& pUrl, std::string const& strUrl) { // scheme://username:password@hostname:port/rest - static boost::regex reUrl( + static boost::regex const reUrl( "(?i)\\`\\s*" // required scheme "([[:alpha:]][-+.[:alpha:][:digit:]]*?):" diff --git a/src/libxrpl/basics/base64.cpp b/src/libxrpl/basics/base64.cpp index 31888ec99c..cf6af3db70 100644 --- a/src/libxrpl/basics/base64.cpp +++ b/src/libxrpl/basics/base64.cpp @@ -103,11 +103,11 @@ std::size_t constexpr decoded_size(std::size_t n) std::size_t encode(void* dest, void const* src, std::size_t len) { - char* out = static_cast(dest); + char* out = static_cast(dest); // NOLINT(misc-const-correctness) char const* in = static_cast(src); auto const tab = base64::get_alphabet(); - for (auto n = len / 3; n--;) + for (auto n = len / 3; n != 0u; --n) { *out++ = tab[(in[0] & 0xfc) >> 2]; *out++ = tab[((in[0] & 0x03) << 4) + ((in[1] & 0xf0) >> 4)]; @@ -154,7 +154,7 @@ encode(void* dest, void const* src, std::size_t len) std::pair decode(void* dest, char const* src, std::size_t len) { - char* out = static_cast(dest); + char* out = static_cast(dest); // NOLINT(misc-const-correctness) auto in = reinterpret_cast(src); unsigned char c3[3]{}, c4[4]{}; int i = 0; @@ -162,7 +162,7 @@ decode(void* dest, char const* src, std::size_t len) auto const inverse = base64::get_inverse(); - while (len-- && *in != '=') + while (((len--) != 0u) && *in != '=') { auto const v = inverse[*in]; if (v == -1) @@ -181,7 +181,7 @@ decode(void* dest, char const* src, std::size_t len) } } - if (i) + if (i != 0) { c3[0] = (c4[0] << 2) + ((c4[1] & 0x30) >> 4); c3[1] = ((c4[1] & 0xf) << 4) + ((c4[2] & 0x3c) >> 2); diff --git a/src/libxrpl/basics/make_SSLContext.cpp b/src/libxrpl/basics/make_SSLContext.cpp index 74aab709d8..c5ff456d25 100644 --- a/src/libxrpl/basics/make_SSLContext.cpp +++ b/src/libxrpl/basics/make_SSLContext.cpp @@ -140,7 +140,7 @@ initAnonymous(boost::asio::ssl::context& context) auto const ts = std::time(nullptr) - (25 * 60 * 60); - int ret = std::strftime(buf, sizeof(buf) - 1, "%y%m%d000000Z", std::gmtime(&ts)); + int const ret = std::strftime(buf, sizeof(buf) - 1, "%y%m%d000000Z", std::gmtime(&ts)); buf[ret] = 0; @@ -253,7 +253,7 @@ initAuthenticated( // VFALCO Replace fopen() with RAII FILE* f = fopen(chain_file.c_str(), "r"); - if (!f) + if (f == nullptr) { LogicError( "Problem opening SSL chain file" + diff --git a/src/libxrpl/beast/clock/basic_seconds_clock.cpp b/src/libxrpl/beast/clock/basic_seconds_clock.cpp index 4727599740..c928c8c579 100644 --- a/src/libxrpl/beast/clock/basic_seconds_clock.cpp +++ b/src/libxrpl/beast/clock/basic_seconds_clock.cpp @@ -41,7 +41,7 @@ seconds_clock_thread::~seconds_clock_thread() XRPL_ASSERT( thread_.joinable(), "beast::seconds_clock_thread::~seconds_clock_thread : thread joinable"); { - std::lock_guard lock(mut_); + std::lock_guard const lock(mut_); stop_ = true; } // publish stop_ asap so if waiting thread times-out, it will see it cv_.notify_one(); diff --git a/src/libxrpl/beast/core/CurrentThreadName.cpp b/src/libxrpl/beast/core/CurrentThreadName.cpp index 8e54a74e4d..6f22687dcc 100644 --- a/src/libxrpl/beast/core/CurrentThreadName.cpp +++ b/src/libxrpl/beast/core/CurrentThreadName.cpp @@ -95,11 +95,6 @@ setCurrentThreadNameImpl(std::string_view name) { std::cerr << "WARNING: Thread name \"" << name << "\" (length " << name.size() << ") exceeds maximum of " << maxThreadNameLength << " characters on Linux.\n"; - - XRPL_ASSERT( - false, - "beast::detail::setCurrentThreadNameImpl : Thread name exceeds " - "maximum length for Linux"); } #endif } diff --git a/src/libxrpl/beast/core/SemanticVersion.cpp b/src/libxrpl/beast/core/SemanticVersion.cpp index 34bb5e3df0..0601690560 100644 --- a/src/libxrpl/beast/core/SemanticVersion.cpp +++ b/src/libxrpl/beast/core/SemanticVersion.cpp @@ -62,7 +62,7 @@ chopUInt(int& value, int limit, std::string& input) return std::isdigit(c, std::locale::classic()); }); - std::string item(input.begin(), left_iter); + std::string const item(input.begin(), left_iter); // Must not be empty if (item.empty()) @@ -320,7 +320,7 @@ compare(SemanticVersion const& lhs, SemanticVersion const& rhs) { XRPL_ASSERT(!isNumeric(right), "beast::compare : both inputs non-numeric"); - int result = left.compare(right); + int const result = left.compare(right); if (result != 0) return result; diff --git a/src/libxrpl/beast/insight/Collector.cpp b/src/libxrpl/beast/insight/Collector.cpp index 37b199fa7f..d4a528473b 100644 --- a/src/libxrpl/beast/insight/Collector.cpp +++ b/src/libxrpl/beast/insight/Collector.cpp @@ -4,5 +4,5 @@ namespace beast { namespace insight { Collector::~Collector() = default; -} +} // namespace insight } // namespace beast diff --git a/src/libxrpl/beast/insight/Groups.cpp b/src/libxrpl/beast/insight/Groups.cpp index 2b4178a9ca..393deca101 100644 --- a/src/libxrpl/beast/insight/Groups.cpp +++ b/src/libxrpl/beast/insight/Groups.cpp @@ -98,7 +98,7 @@ public: Group::ptr const& get(std::string const& name) override { - std::pair result(m_items.emplace(name, Group::ptr())); + std::pair const result(m_items.emplace(name, Group::ptr())); Group::ptr& group(result.first->second); if (result.second) group = std::make_shared(name, m_collector); diff --git a/src/libxrpl/beast/insight/Hook.cpp b/src/libxrpl/beast/insight/Hook.cpp index d5e0a3439f..f74f3e8705 100644 --- a/src/libxrpl/beast/insight/Hook.cpp +++ b/src/libxrpl/beast/insight/Hook.cpp @@ -5,5 +5,5 @@ namespace beast { namespace insight { HookImpl::~HookImpl() = default; -} +} // namespace insight } // namespace beast diff --git a/src/libxrpl/beast/insight/StatsDCollector.cpp b/src/libxrpl/beast/insight/StatsDCollector.cpp index cc3bbf2861..7d80e1a052 100644 --- a/src/libxrpl/beast/insight/StatsDCollector.cpp +++ b/src/libxrpl/beast/insight/StatsDCollector.cpp @@ -293,14 +293,14 @@ public: void add(StatsDMetricBase& metric) { - std::lock_guard _(metricsLock_); + std::lock_guard const _(metricsLock_); metrics_.push_back(metric); } void remove(StatsDMetricBase& metric) { - std::lock_guard _(metricsLock_); + std::lock_guard const _(metricsLock_); metrics_.erase(metrics_.iterator_to(metric)); } @@ -352,7 +352,7 @@ public: } } - void + static void log(std::vector const& buffers) { (void)buffers; @@ -444,7 +444,7 @@ public: return; } - std::lock_guard _(metricsLock_); + std::lock_guard const _(metricsLock_); for (auto& m : metrics_) m.do_process(); diff --git a/src/libxrpl/beast/net/IPAddressV6.cpp b/src/libxrpl/beast/net/IPAddressV6.cpp index a261002ed3..30e2eefb96 100644 --- a/src/libxrpl/beast/net/IPAddressV6.cpp +++ b/src/libxrpl/beast/net/IPAddressV6.cpp @@ -10,7 +10,7 @@ bool is_private(AddressV6 const& addr) { return ( - (addr.to_bytes()[0] & 0xfd) || // TODO fc00::/8 too ? + ((addr.to_bytes()[0] & 0xfd) != 0) || // TODO fc00::/8 too ? (addr.is_v4_mapped() && is_private(boost::asio::ip::make_address_v4(boost::asio::ip::v4_mapped, addr)))); } diff --git a/src/libxrpl/beast/net/IPEndpoint.cpp b/src/libxrpl/beast/net/IPEndpoint.cpp index f8352f4318..7e2799b46c 100644 --- a/src/libxrpl/beast/net/IPEndpoint.cpp +++ b/src/libxrpl/beast/net/IPEndpoint.cpp @@ -57,7 +57,7 @@ Endpoint::to_string() const if (port() != 0 && address().is_v6()) s += '['; s += address().to_string(); - if (port()) + if (port() != 0u) { if (address().is_v6()) s += ']'; @@ -111,7 +111,7 @@ operator>>(std::istream& is, Endpoint& endpoint) // so we continue to honor that here by assuming we are at the end // of the address portion if we hit a space (or the separator // we were expecting to see) - if (isspace(static_cast(i)) || (readTo && i == readTo)) + if ((isspace(static_cast(i)) != 0) || ((readTo != 0) && i == readTo)) break; if ((i == '.') || (i >= '0' && i <= ':') || (i >= 'a' && i <= 'f') || @@ -120,14 +120,13 @@ operator>>(std::istream& is, Endpoint& endpoint) addrStr += i; // don't exceed a reasonable length... - if (addrStr.size() == INET6_ADDRSTRLEN || - (readTo && readTo == ':' && addrStr.size() > 15)) + if (addrStr.size() == INET6_ADDRSTRLEN || (readTo == ':' && addrStr.size() > 15)) { is.setstate(std::ios_base::failbit); return is; } - if (!readTo && (i == '.' || i == ':')) + if ((readTo == 0) && (i == '.' || i == ':')) { // if we see a dot first, must be IPv4 // otherwise must be non-bracketed IPv6 @@ -145,7 +144,7 @@ operator>>(std::istream& is, Endpoint& endpoint) if (readTo == ']' && is.rdbuf()->in_avail() > 0) { is.get(i); - if (!(isspace(static_cast(i)) || i == ':')) + if ((isspace(static_cast(i)) == 0) && i != ':') { is.unget(); is.setstate(std::ios_base::failbit); diff --git a/src/libxrpl/beast/utility/beast_PropertyStream.cpp b/src/libxrpl/beast/utility/beast_PropertyStream.cpp index 454b9d1323..662d763ce0 100644 --- a/src/libxrpl/beast/utility/beast_PropertyStream.cpp +++ b/src/libxrpl/beast/utility/beast_PropertyStream.cpp @@ -151,14 +151,13 @@ PropertyStream::Set::stream() const // //------------------------------------------------------------------------------ -PropertyStream::Source::Source(std::string const& name) - : m_name(name), item_(this), parent_(nullptr) +PropertyStream::Source::Source(std::string const& name) : m_name(name), item_(this) { } PropertyStream::Source::~Source() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); if (parent_ != nullptr) parent_->remove(*this); removeAll(); @@ -174,8 +173,8 @@ void PropertyStream::Source::add(Source& source) { std::lock(lock_, source.lock_); - std::lock_guard lk1(lock_, std::adopt_lock); - std::lock_guard lk2(source.lock_, std::adopt_lock); + std::lock_guard const lk1(lock_, std::adopt_lock); + std::lock_guard const lk2(source.lock_, std::adopt_lock); XRPL_ASSERT( source.parent_ == nullptr, "beast::PropertyStream::Source::add : null source parent"); @@ -187,8 +186,8 @@ void PropertyStream::Source::remove(Source& child) { std::lock(lock_, child.lock_); - std::lock_guard lk1(lock_, std::adopt_lock); - std::lock_guard lk2(child.lock_, std::adopt_lock); + std::lock_guard const lk1(lock_, std::adopt_lock); + std::lock_guard const lk2(child.lock_, std::adopt_lock); XRPL_ASSERT( child.parent_ == this, "beast::PropertyStream::Source::remove : child parent match"); @@ -199,10 +198,10 @@ PropertyStream::Source::remove(Source& child) void PropertyStream::Source::removeAll() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); for (auto iter = children_.begin(); iter != children_.end();) { - std::lock_guard _cl((*iter)->lock_); + std::lock_guard const _cl((*iter)->lock_); remove(*(*iter)); } } @@ -222,7 +221,7 @@ PropertyStream::Source::write(PropertyStream& stream) Map map(m_name, stream); onWrite(map); - std::lock_guard _(lock_); + std::lock_guard const _(lock_); for (auto& child : children_) child.source().write(stream); @@ -299,9 +298,9 @@ PropertyStream::Source::peel_name(std::string* path) if (path->empty()) return ""; - std::string::const_iterator first = (*path).begin(); - std::string::const_iterator last = (*path).end(); - std::string::const_iterator pos = std::find(first, last, '/'); + std::string::const_iterator const first = (*path).begin(); + std::string::const_iterator const last = (*path).end(); + std::string::const_iterator const pos = std::find(first, last, '/'); std::string s(first, pos); if (pos != last) @@ -320,11 +319,11 @@ PropertyStream::Source::peel_name(std::string* path) PropertyStream::Source* PropertyStream::Source::find_one_deep(std::string const& name) { - Source* found = find_one(name); + Source* found = find_one(name); // NOLINT(misc-const-correctness) if (found != nullptr) return found; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); for (auto& s : children_) { found = s.source().find_one_deep(name); @@ -355,7 +354,7 @@ PropertyStream::Source::find_path(std::string path) PropertyStream::Source* PropertyStream::Source::find_one(std::string const& name) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); for (auto& s : children_) { if (s.source().m_name == name) diff --git a/src/libxrpl/core/HashRouter.cpp b/src/libxrpl/core/HashRouter.cpp index dff1394f77..f21daf84a2 100644 --- a/src/libxrpl/core/HashRouter.cpp +++ b/src/libxrpl/core/HashRouter.cpp @@ -22,7 +22,7 @@ HashRouter::emplace(uint256 const& key) -> std::pair void HashRouter::addSuppression(uint256 const& key) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); emplace(key); } @@ -36,7 +36,7 @@ HashRouter::addSuppressionPeer(uint256 const& key, PeerShortID peer) std::pair> HashRouter::addSuppressionPeerWithStatus(uint256 const& key, PeerShortID peer) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto result = emplace(key); result.first.addPeer(peer); @@ -46,7 +46,7 @@ HashRouter::addSuppressionPeerWithStatus(uint256 const& key, PeerShortID peer) bool HashRouter::addSuppressionPeer(uint256 const& key, PeerShortID peer, HashRouterFlags& flags) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto [s, created] = emplace(key); s.addPeer(peer); @@ -61,7 +61,7 @@ HashRouter::shouldProcess( HashRouterFlags& flags, std::chrono::seconds tx_interval) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto result = emplace(key); auto& s = result.first; @@ -73,7 +73,7 @@ HashRouter::shouldProcess( HashRouterFlags HashRouter::getFlags(uint256 const& key) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return emplace(key).first.getFlags(); } @@ -83,7 +83,7 @@ HashRouter::setFlags(uint256 const& key, HashRouterFlags flags) { XRPL_ASSERT(static_cast(flags), "xrpl::HashRouter::setFlags : valid input"); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto& s = emplace(key).first; @@ -97,7 +97,7 @@ HashRouter::setFlags(uint256 const& key, HashRouterFlags flags) auto HashRouter::shouldRelay(uint256 const& key) -> std::optional> { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto& s = emplace(key).first; diff --git a/src/libxrpl/core/detail/JobQueue.cpp b/src/libxrpl/core/detail/JobQueue.cpp index 9adbf6312b..ddfc42c97e 100644 --- a/src/libxrpl/core/detail/JobQueue.cpp +++ b/src/libxrpl/core/detail/JobQueue.cpp @@ -13,9 +13,7 @@ JobQueue::JobQueue( Logs& logs, perf::PerfLog& perfLog) : m_journal(journal) - , m_lastJob(0) , m_invalidJobData(JobTypes::instance().getInvalid(), collector, logs) - , m_processCount(0) , m_workers(*this, &perfLog, "JobQueue", threadCount) , perfLog_(perfLog) , m_collector(collector) @@ -26,7 +24,7 @@ JobQueue::JobQueue( job_count = m_collector->make_gauge("job_count"); { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); for (auto const& x : JobTypes::instance()) { @@ -52,7 +50,7 @@ JobQueue::~JobQueue() void JobQueue::collect() { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); job_count = m_jobSet.size(); } @@ -78,14 +76,13 @@ JobQueue::addRefCountedJob(JobType type, std::string const& name, JobFunction co "requires no threads"); { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); auto result = m_jobSet.emplace(type, name, ++m_lastJob, data.load(), func); auto const& job = *result.first; JobType const type(job.getType()); XRPL_ASSERT(type != jtINVALID, "xrpl::JobQueue::addRefCountedJob : has valid job type"); - XRPL_ASSERT( - m_jobSet.find(job) != m_jobSet.end(), "xrpl::JobQueue::addRefCountedJob : job found"); + XRPL_ASSERT(m_jobSet.contains(job), "xrpl::JobQueue::addRefCountedJob : job found"); perfLog_.jobQueue(type); JobTypeData& data(getJobTypeData(type)); @@ -107,9 +104,9 @@ JobQueue::addRefCountedJob(JobType type, std::string const& name, JobFunction co int JobQueue::getJobCount(JobType t) const { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); - JobDataMap::const_iterator c = m_jobData.find(t); + JobDataMap::const_iterator const c = m_jobData.find(t); return (c == m_jobData.end()) ? 0 : c->second.waiting; } @@ -117,9 +114,9 @@ JobQueue::getJobCount(JobType t) const int JobQueue::getJobCountTotal(JobType t) const { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); - JobDataMap::const_iterator c = m_jobData.find(t); + JobDataMap::const_iterator const c = m_jobData.find(t); return (c == m_jobData.end()) ? 0 : (c->second.waiting + c->second.running); } @@ -130,7 +127,7 @@ JobQueue::getJobCountGE(JobType t) const // return the number of jobs at this priority level or greater int ret = 0; - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); for (auto const& x : m_jobData) { @@ -144,7 +141,7 @@ JobQueue::getJobCountGE(JobType t) const std::unique_ptr JobQueue::makeLoadEvent(JobType t, std::string const& name) { - JobDataMap::iterator iter(m_jobData.find(t)); + JobDataMap::iterator const iter(m_jobData.find(t)); XRPL_ASSERT(iter != m_jobData.end(), "xrpl::JobQueue::makeLoadEvent : valid job type input"); if (iter == m_jobData.end()) @@ -159,7 +156,7 @@ JobQueue::addLoadEvents(JobType t, int count, std::chrono::milliseconds elapsed) if (isStopped()) LogicError("JobQueue::addLoadEvents() called after JobQueue stopped"); - JobDataMap::iterator iter(m_jobData.find(t)); + JobDataMap::iterator const iter(m_jobData.find(t)); XRPL_ASSERT(iter != m_jobData.end(), "xrpl::JobQueue::addLoadEvents : valid job type input"); iter->second.load().addSamples(count, elapsed); } @@ -182,7 +179,7 @@ JobQueue::getJson(int c) Json::Value priorities = Json::arrayValue; - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); for (auto& x : m_jobData) { @@ -193,10 +190,10 @@ JobQueue::getJson(int c) JobTypeData& data(x.second); - LoadMonitor::Stats stats(data.stats()); + LoadMonitor::Stats const stats(data.stats()); - int waiting(data.waiting); - int running(data.running); + int const waiting(data.waiting); + int const running(data.running); if ((stats.count != 0) || (waiting != 0) || (stats.latencyPeak != 0ms) || (running != 0)) { @@ -239,7 +236,7 @@ JobQueue::rendezvous() JobTypeData& JobQueue::getJobTypeData(JobType type) { - JobDataMap::iterator c(m_jobData.find(type)); + JobDataMap::iterator const c(m_jobData.find(type)); XRPL_ASSERT(c != m_jobData.end(), "xrpl::JobQueue::getJobTypeData : valid job type input"); // NIKB: This is ugly and I hate it. We must remove jtINVALID completely @@ -339,12 +336,12 @@ JobQueue::processTask(int instance) { Job job; { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); getNextJob(job); ++m_processCount; } type = job.getType(); - JobTypeData& data(getJobTypeData(type)); + JobTypeData const& data(getJobTypeData(type)); JLOG(m_journal.trace()) << "Doing " << data.name() << "job"; // The amount of time that the job was in the queue @@ -366,7 +363,7 @@ JobQueue::processTask(int instance) } { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); // Job should be destroyed before stopping // otherwise destructors with side effects can access // parent objects that are already destroyed. diff --git a/src/libxrpl/core/detail/LoadMonitor.cpp b/src/libxrpl/core/detail/LoadMonitor.cpp index 89a364ca30..e613717ed8 100644 --- a/src/libxrpl/core/detail/LoadMonitor.cpp +++ b/src/libxrpl/core/detail/LoadMonitor.cpp @@ -15,16 +15,14 @@ TODO //------------------------------------------------------------------------------ -LoadMonitor::Stats::Stats() : count(0), latencyAvg(0), latencyPeak(0), isOverloaded(false) +LoadMonitor::Stats::Stats() : latencyAvg(0), latencyPeak(0) { } //------------------------------------------------------------------------------ LoadMonitor::LoadMonitor(beast::Journal j) - : mCounts(0) - , mLatencyEvents(0) - , mLatencyMSAvg(0) + : mLatencyMSAvg(0) , mLatencyMSPeak(0) , mTargetLatencyAvg(0) , mTargetLatencyPk(0) @@ -104,7 +102,7 @@ LoadMonitor::addLoadSample(LoadEvent const& s) void LoadMonitor::addSamples(int count, std::chrono::milliseconds latency) { - std::lock_guard sl(mutex_); + std::lock_guard const sl(mutex_); update(); mCounts += count; @@ -136,12 +134,12 @@ LoadMonitor::isOverTarget(std::chrono::milliseconds avg, std::chrono::millisecon bool LoadMonitor::isOver() { - std::lock_guard sl(mutex_); + std::lock_guard const sl(mutex_); update(); if (mLatencyEvents == 0) - return 0; + return false; return isOverTarget( mLatencyMSAvg / (mLatencyEvents * 4), mLatencyMSPeak / (mLatencyEvents * 4)); @@ -153,7 +151,7 @@ LoadMonitor::getStats() using namespace std::chrono_literals; Stats stats; - std::lock_guard sl(mutex_); + std::lock_guard const sl(mutex_); update(); diff --git a/src/libxrpl/core/detail/Workers.cpp b/src/libxrpl/core/detail/Workers.cpp index c037169a29..ed9d09d1e8 100644 --- a/src/libxrpl/core/detail/Workers.cpp +++ b/src/libxrpl/core/detail/Workers.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -13,9 +12,7 @@ Workers::Workers( : m_callback(callback) , perfLog_(perfLog) , m_threadNames(threadNames) - , m_allPaused(true) , m_semaphore(0) - , m_numberOfThreads(0) , m_activeCount(0) , m_pauseCount(0) , m_runningTaskCount(0) @@ -47,7 +44,7 @@ Workers::setNumberOfThreads(int numberOfThreads) if (m_numberOfThreads == numberOfThreads) return; - if (perfLog_) + if (perfLog_ != nullptr) perfLog_->resizeJobs(numberOfThreads); if (numberOfThreads > m_numberOfThreads) @@ -96,11 +93,13 @@ Workers::stop() { setNumberOfThreads(0); + // Wait until all workers have paused AND no tasks are actively running. + // Both conditions are needed because m_allPaused (mutex-protected) and + // m_runningTaskCount (atomic) are not synchronized under the same lock, + // so m_allPaused can momentarily be true while a task is still finishing. std::unique_lock lk{m_mut}; - m_cv.wait(lk, [this] { return m_allPaused; }); + m_cv.wait(lk, [this] { return m_allPaused && numberOfCurrentlyRunningTasks() == 0; }); lk.unlock(); - - XRPL_ASSERT(numberOfCurrentlyRunningTasks() == 0, "xrpl::Workers::stop : zero running tasks"); } void @@ -120,7 +119,7 @@ Workers::deleteWorkers(beast::LockFreeStack& stack) { for (;;) { - Worker* const worker = stack.pop_front(); + Worker const* const worker = stack.pop_front(); if (worker != nullptr) { @@ -137,11 +136,8 @@ Workers::deleteWorkers(beast::LockFreeStack& stack) //------------------------------------------------------------------------------ Workers::Worker::Worker(Workers& workers, std::string const& threadName, int const instance) - : m_workers{workers} - , threadName_{threadName} - , instance_{instance} - , wakeCount_{0} - , shouldExit_{false} + : m_workers{workers}, threadName_{threadName}, instance_{instance} + { thread_ = std::thread{&Workers::Worker::run, this}; } @@ -149,7 +145,7 @@ Workers::Worker::Worker(Workers& workers, std::string const& threadName, int con Workers::Worker::~Worker() { { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; ++wakeCount_; shouldExit_ = true; } @@ -161,7 +157,7 @@ Workers::Worker::~Worker() void Workers::Worker::notify() { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; ++wakeCount_; wakeup_.notify_one(); } @@ -177,7 +173,7 @@ Workers::Worker::run() // if (++m_workers.m_activeCount == 1) { - std::lock_guard lk{m_workers.m_mut}; + std::lock_guard const lk{m_workers.m_mut}; m_workers.m_allPaused = false; } @@ -215,7 +211,18 @@ Workers::Worker::run() // ++m_workers.m_runningTaskCount; m_workers.m_callback.processTask(instance_); - --m_workers.m_runningTaskCount; + + // When the running task count drops to zero, wake stop() which + // may be waiting for both m_allPaused and zero running tasks. + // Locking m_mut before notify_all() prevents a lost wakeup: + // it serializes against the predicate check inside stop()'s + // cv.wait(), ensuring the notification is not missed between + // the predicate evaluation and the actual sleep. + if (--m_workers.m_runningTaskCount == 0) + { + std::lock_guard const lk{m_workers.m_mut}; + m_workers.m_cv.notify_all(); + } } // Any worker that goes into the paused list must @@ -229,7 +236,7 @@ Workers::Worker::run() // if (--m_workers.m_activeCount == 0) { - std::lock_guard lk{m_workers.m_mut}; + std::lock_guard const lk{m_workers.m_mut}; m_workers.m_allPaused = true; m_workers.m_cv.notify_all(); } diff --git a/src/libxrpl/crypto/RFC1751.cpp b/src/libxrpl/crypto/RFC1751.cpp index f7c1e675cb..f7098f3833 100644 --- a/src/libxrpl/crypto/RFC1751.cpp +++ b/src/libxrpl/crypto/RFC1751.cpp @@ -210,8 +210,8 @@ RFC1751::extract(char const* s, int start, int length) int const shiftR = 24 - (length + (start % 8)); cl = s[start / 8]; // get components - cc = (shiftR < 16) ? s[start / 8 + 1] : 0; - cr = (shiftR < 8) ? s[start / 8 + 2] : 0; + cc = (shiftR < 16) ? s[(start / 8) + 1] : 0; + cr = (shiftR < 8) ? s[(start / 8) + 2] : 0; x = ((long)(cl << 8 | cc) << 8 | cr); // Put bits together x = x >> shiftR; // Right justify number @@ -265,13 +265,13 @@ RFC1751::insert(char* s, int x, int start, int length) if (shift + length > 16) { s[start / 8] |= cl; - s[start / 8 + 1] |= cc; - s[start / 8 + 2] |= cr; + s[(start / 8) + 1] |= cc; + s[(start / 8) + 2] |= cr; } else if (shift + length > 8) { s[start / 8] |= cc; - s[start / 8 + 1] |= cr; + s[(start / 8) + 1] |= cr; } else { @@ -284,7 +284,7 @@ RFC1751::standard(std::string& strWord) { for (auto& letter : strWord) { - if (islower(static_cast(letter))) + if (islower(static_cast(letter)) != 0) { letter = toupper(static_cast(letter)); } @@ -312,10 +312,10 @@ RFC1751::wsrch(std::string const& strWord, int iMin, int iMax) while (iResult < 0 && iMin != iMax) { // Have a range to search. - int iMid = iMin + (iMax - iMin) / 2; - int iDir = strWord.compare(s_dictionary[iMid]); + int const iMid = iMin + ((iMax - iMin) / 2); + int const iDir = strWord.compare(s_dictionary[iMid]); - if (!iDir) + if (iDir == 0) { iResult = iMid; // Found it. } @@ -349,7 +349,7 @@ RFC1751::etob(std::string& strData, std::vector vsHuman) for (auto& strWord : vsHuman) { - int l = strWord.length(); + int const l = strWord.length(); if (l > 4 || l < 1) return -1; diff --git a/src/libxrpl/crypto/csprng.cpp b/src/libxrpl/crypto/csprng.cpp index 25e24c0b08..343bed9be0 100644 --- a/src/libxrpl/crypto/csprng.cpp +++ b/src/libxrpl/crypto/csprng.cpp @@ -42,7 +42,7 @@ csprng_engine::mix_entropy(void* buffer, std::size_t count) e = rd(); } - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // We add data to the pool, but we conservatively assume that // it contributes no actual entropy. diff --git a/src/libxrpl/json/Writer.cpp b/src/libxrpl/json/Writer.cpp index 6ff5a130dd..ea7b4b51ae 100644 --- a/src/libxrpl/json/Writer.cpp +++ b/src/libxrpl/json/Writer.cpp @@ -80,7 +80,7 @@ public: void start(CollectionType ct) { - char ch = (ct == array) ? openBracket : openBrace; + char const ch = (ct == array) ? openBracket : openBrace; output({&ch, 1}); stack_.push(Collection()); stack_.top().type = ct; @@ -152,7 +152,7 @@ public: #ifndef NDEBUG // Make sure we haven't already seen this tag. auto& tags = stack_.top().tags; - check(tags.find(tag) == tags.end(), "Already seen tag " + tag); + check(!tags.contains(tag), "Already seen tag " + tag); tags.insert(tag); #endif diff --git a/src/libxrpl/json/json_reader.cpp b/src/libxrpl/json/json_reader.cpp index 4c2a27400f..71365ba6c1 100644 --- a/src/libxrpl/json/json_reader.cpp +++ b/src/libxrpl/json/json_reader.cpp @@ -93,7 +93,7 @@ Reader::parse(char const* beginDoc, char const* endDoc, Value& root) nodes_.pop(); nodes_.push(&root); - bool successful = readValue(0); + bool const successful = readValue(0); Token token{}; skipCommentTokens(token); @@ -186,7 +186,7 @@ Reader::readToken(Token& token) { skipSpaces(); token.start_ = current_; - Char c = getNextChar(); + Char const c = getNextChar(); bool ok = true; switch (c) @@ -275,7 +275,7 @@ Reader::skipSpaces() { while (current_ != end_) { - Char c = *current_; + Char const c = *current_; if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { @@ -296,7 +296,7 @@ Reader::match(Location pattern, int patternLength) int index = patternLength; - while (index--) + while ((index--) != 0) { if (current_[index] != pattern[index]) return false; @@ -309,7 +309,7 @@ Reader::match(Location pattern, int patternLength) bool Reader::readComment() { - Char c = getNextChar(); + Char const c = getNextChar(); if (c == '*') return readCStyleComment(); @@ -325,7 +325,7 @@ Reader::readCStyleComment() { while (current_ != end_) { - Char c = getNextChar(); + Char const c = getNextChar(); if (c == '*' && *current_ == '/') break; @@ -339,7 +339,7 @@ Reader::readCppStyleComment() { while (current_ != end_) { - Char c = getNextChar(); + Char const c = getNextChar(); if (c == '\r' || c == '\n') break; @@ -362,7 +362,7 @@ Reader::readNumber() while (current_ != end_) { - if (!std::isdigit(static_cast(*current_))) + if (std::isdigit(static_cast(*current_)) == 0) { auto ret = std::find(std::begin(extended_tokens), std::end(extended_tokens), *current_); @@ -444,7 +444,7 @@ Reader::readObject(Token& tokenStart, unsigned depth) Value& value = currentValue()[name]; nodes_.push(&value); - bool ok = readValue(depth + 1); + bool const ok = readValue(depth + 1); nodes_.pop(); if (!ok) // error already set @@ -506,7 +506,8 @@ Reader::readArray(Token& tokenStart, unsigned depth) ok = readToken(token); } - bool badTokenType = (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + bool const badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); if (!ok || badTokenType) { @@ -525,7 +526,7 @@ bool Reader::decodeNumber(Token& token) { Location current = token.start_; - bool isNegative = *current == '-'; + bool const isNegative = *current == '-'; if (isNegative) ++current; @@ -546,7 +547,7 @@ Reader::decodeNumber(Token& token) while (current < token.end_ && (value <= Value::maxUInt)) { - Char c = *current++; + Char const c = *current++; if (c < '0' || c > '9') { @@ -606,7 +607,7 @@ Reader::decodeDouble(Token& token) double value = 0; int const bufferSize = 32; int count = 0; - int length = int(token.end_ - token.start_); + int const length = int(token.end_ - token.start_); // Sanity check to avoid buffer overflow exploits. if (length < 0) { @@ -627,7 +628,7 @@ Reader::decodeDouble(Token& token) } else { - std::string buffer(token.start_, token.end_); + std::string const buffer(token.start_, token.end_); count = sscanf(buffer.c_str(), format, &value); } if (count != 1) @@ -657,7 +658,7 @@ Reader::decodeString(Token& token, std::string& decoded) while (current != end) { - Char c = *current++; + Char const c = *current++; if (c == '"') { @@ -668,7 +669,7 @@ Reader::decodeString(Token& token, std::string& decoded) if (current == end) return addError("Empty escape sequence in string", token, current); - Char escape = *current++; + Char const escape = *current++; switch (escape) { @@ -783,7 +784,7 @@ Reader::decodeUnicodeEscapeSequence( for (int index = 0; index < 4; ++index) { - Char c = *current++; + Char const c = *current++; unicode *= 16; if (c >= '0' && c <= '9') @@ -825,7 +826,7 @@ Reader::addError(std::string const& message, Token& token, Location extra) bool Reader::recoverFromError(TokenType skipUntilToken) { - int errorCount = int(errors_.size()); + int const errorCount = int(errors_.size()); Token skip{}; while (true) @@ -872,7 +873,7 @@ Reader::getLocationLineAndColumn(Location location, int& line, int& column) cons while (current < location && current != end_) { - Char c = *current++; + Char const c = *current++; if (c == '\r') { @@ -913,7 +914,7 @@ Reader::getFormattedErrorMessages() const formattedMessage += "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; formattedMessage += " " + error.message_ + "\n"; - if (error.extra_) + if (error.extra_ != nullptr) formattedMessage += "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; } @@ -924,7 +925,7 @@ std::istream& operator>>(std::istream& sin, Value& root) { Json::Reader reader; - bool ok = reader.parse(sin, root); + bool const ok = reader.parse(sin, root); // XRPL_ASSERT(ok, "Json::operator>>() : parse succeeded"); if (!ok) diff --git a/src/libxrpl/json/json_value.cpp b/src/libxrpl/json/json_value.cpp index 94b077d224..d4351b23ef 100644 --- a/src/libxrpl/json/json_value.cpp +++ b/src/libxrpl/json/json_value.cpp @@ -40,10 +40,10 @@ public: // return 0; if (length == unknown) - length = value ? (unsigned int)strlen(value) : 0; + length = (value != nullptr) ? (unsigned int)strlen(value) : 0; char* newString = static_cast(malloc(length + 1)); - if (value) + if (value != nullptr) memcpy(newString, value, length); newString[length] = 0; return newString; @@ -52,7 +52,7 @@ public: void releaseStringValue(char* value) override { - if (value) + if (value != nullptr) free(value); } }; @@ -60,6 +60,7 @@ public: static ValueAllocator*& valueAllocator() { + // NOLINTNEXTLINE(misc-const-correctness) static ValueAllocator* valueAllocator = new DefaultValueAllocator; return valueAllocator; } @@ -108,14 +109,14 @@ Value::CZString::CZString(CZString const& other) Value::CZString::~CZString() { - if (cstr_ && index_ == duplicate) + if ((cstr_ != nullptr) && index_ == duplicate) valueAllocator()->releaseMemberName(const_cast(cstr_)); } bool Value::CZString::operator<(CZString const& other) const { - if (cstr_ && other.cstr_) + if ((cstr_ != nullptr) && (other.cstr_ != nullptr)) return strcmp(cstr_, other.cstr_) < 0; return index_ < other.index_; @@ -124,7 +125,7 @@ Value::CZString::operator<(CZString const& other) const bool Value::CZString::operator==(CZString const& other) const { - if (cstr_ && other.cstr_) + if ((cstr_ != nullptr) && (other.cstr_ != nullptr)) return strcmp(cstr_, other.cstr_) == 0; return index_ == other.index_; @@ -251,7 +252,7 @@ Value::Value(Value const& other) : type_(other.type_) break; case stringValue: - if (other.value_.string_) + if (other.value_.string_ != nullptr) { value_.string_ = valueAllocator()->duplicateStringValue(other.value_.string_); allocated_ = true; @@ -294,7 +295,7 @@ Value::~Value() case arrayValue: case objectValue: - if (value_.map_) + if (value_.map_ != nullptr) delete value_.map_; break; @@ -333,11 +334,11 @@ Value::swap(Value& other) noexcept { std::swap(value_, other.value_); - ValueType temp = type_; + ValueType const temp = type_; type_ = other.type_; other.type_ = temp; - int temp2 = allocated_; + int const temp2 = allocated_; allocated_ = other.allocated_; other.allocated_ = temp2; } @@ -392,16 +393,16 @@ operator<(Value const& x, Value const& y) return x.value_.real_ < y.value_.real_; case booleanValue: - return x.value_.bool_ < y.value_.bool_; + return static_cast(x.value_.bool_) < static_cast(y.value_.bool_); case stringValue: - return (x.value_.string_ == 0 && y.value_.string_) || - (y.value_.string_ && x.value_.string_ && + return (x.value_.string_ == 0 && (y.value_.string_ != nullptr)) || + ((y.value_.string_ != nullptr) && (x.value_.string_ != nullptr) && strcmp(x.value_.string_, y.value_.string_) < 0); case arrayValue: case objectValue: { - if (int signum = int(x.value_.map_->size()) - y.value_.map_->size()) + if (int const signum = int(x.value_.map_->size()) - y.value_.map_->size()) return signum < 0; return *x.value_.map_ < *y.value_.map_; @@ -413,7 +414,7 @@ operator<(Value const& x, Value const& y) // LCOV_EXCL_STOP } - return 0; // unreachable + return false; // unreachable } bool @@ -422,9 +423,9 @@ operator==(Value const& x, Value const& y) if (x.type_ != y.type_) { if (x.type_ == intValue && y.type_ == uintValue) - return !integerCmp(x.value_.int_, y.value_.uint_); + return integerCmp(x.value_.int_, y.value_.uint_) == 0; if (x.type_ == uintValue && y.type_ == intValue) - return !integerCmp(y.value_.int_, x.value_.uint_); + return integerCmp(y.value_.int_, x.value_.uint_) == 0; return false; } @@ -447,8 +448,8 @@ operator==(Value const& x, Value const& y) case stringValue: return x.value_.string_ == y.value_.string_ || - (y.value_.string_ && x.value_.string_ && - !strcmp(x.value_.string_, y.value_.string_)); + ((y.value_.string_ != nullptr) && (x.value_.string_ != nullptr) && + (strcmp(x.value_.string_, y.value_.string_) == 0)); case arrayValue: case objectValue: @@ -461,7 +462,7 @@ operator==(Value const& x, Value const& y) // LCOV_EXCL_STOP } - return 0; // unreachable + return false; // unreachable } char const* @@ -480,7 +481,7 @@ Value::asString() const return ""; case stringValue: - return value_.string_ ? value_.string_ : ""; + return (value_.string_ != nullptr) ? value_.string_ : ""; case booleanValue: return value_.bool_ ? "true" : "false"; @@ -525,7 +526,7 @@ Value::asInt() const case realValue: JSON_ASSERT_MESSAGE( - value_.real_ >= minInt && value_.real_ <= maxInt, + (value_.real_ >= minInt && value_.real_ <= maxInt), "Real out of signed integer range"); return Int(value_.real_); @@ -533,7 +534,7 @@ Value::asInt() const return value_.bool_ ? 1 : 0; case stringValue: { - char const* const str{value_.string_ ? value_.string_ : ""}; + char const* const str{(value_.string_ != nullptr) ? value_.string_ : ""}; return beast::lexicalCastThrow(str); } @@ -584,7 +585,7 @@ Value::asAbsUInt() const return value_.bool_ ? 1 : 0; case stringValue: { - char const* const str{value_.string_ ? value_.string_ : ""}; + char const* const str{(value_.string_ != nullptr) ? value_.string_ : ""}; auto const temp = beast::lexicalCastThrow(str); if (temp < 0) { @@ -626,14 +627,15 @@ Value::asUInt() const case realValue: JSON_ASSERT_MESSAGE( - value_.real_ >= 0 && value_.real_ <= maxUInt, "Real out of unsigned integer range"); + (value_.real_ >= 0 && value_.real_ <= maxUInt), + "Real out of unsigned integer range"); return UInt(value_.real_); case booleanValue: return value_.bool_ ? 1 : 0; case stringValue: { - char const* const str{value_.string_ ? value_.string_ : ""}; + char const* const str{(value_.string_ != nullptr) ? value_.string_ : ""}; return beast::lexicalCastThrow(str); } @@ -703,7 +705,7 @@ Value::asBool() const return value_.bool_; case stringValue: - return value_.string_ && value_.string_[0] != 0; + return (value_.string_ != nullptr) && value_.string_[0] != 0; case arrayValue: case objectValue: @@ -745,13 +747,13 @@ Value::isConvertibleTo(ValueType other) const other == realValue || other == stringValue || other == booleanValue; case booleanValue: - return (other == nullValue && value_.bool_ == false) || other == intValue || + return (other == nullValue && !value_.bool_) || other == intValue || other == uintValue || other == realValue || other == stringValue || other == booleanValue; case stringValue: return other == stringValue || - (other == nullValue && (!value_.string_ || value_.string_[0] == 0)); + (other == nullValue && ((value_.string_ == nullptr) || value_.string_[0] == 0)); case arrayValue: return other == arrayValue || (other == nullValue && value_.map_->empty()); @@ -813,10 +815,10 @@ operator bool() const if (isString()) { auto s = asCString(); - return s && s[0]; + return (s != nullptr) && (s[0] != 0); } - return !(isArray() || isObject()) || size(); + return !(isArray() || isObject()) || (size() != 0u); } void @@ -847,13 +849,13 @@ Value::operator[](UInt index) if (type_ == nullValue) *this = Value(arrayValue); - CZString key(index); + CZString const key(index); ObjectValues::iterator it = value_.map_->lower_bound(key); if (it != value_.map_->end() && (*it).first == key) return (*it).second; - ObjectValues::value_type defaultValue(key, null); + ObjectValues::value_type const defaultValue(key, null); it = value_.map_->insert(it, defaultValue); return (*it).second; } @@ -868,8 +870,8 @@ Value::operator[](UInt index) const if (type_ == nullValue) return null; - CZString key(index); - ObjectValues::const_iterator it = value_.map_->find(key); + CZString const key(index); + ObjectValues::const_iterator const it = value_.map_->find(key); if (it == value_.map_->end()) return null; @@ -892,13 +894,13 @@ Value::resolveReference(char const* key, bool isStatic) if (type_ == nullValue) *this = Value(objectValue); - CZString actualKey(key, isStatic ? CZString::noDuplication : CZString::duplicateOnCopy); + CZString const actualKey(key, isStatic ? CZString::noDuplication : CZString::duplicateOnCopy); ObjectValues::iterator it = value_.map_->lower_bound(actualKey); if (it != value_.map_->end() && (*it).first == actualKey) return (*it).second; - ObjectValues::value_type defaultValue(actualKey, null); + ObjectValues::value_type const defaultValue(actualKey, null); it = value_.map_->insert(it, defaultValue); Value& value = (*it).second; return value; @@ -927,8 +929,8 @@ Value::operator[](char const* key) const if (type_ == nullValue) return null; - CZString actualKey(key, CZString::noDuplication); - ObjectValues::const_iterator it = value_.map_->find(actualKey); + CZString const actualKey(key, CZString::noDuplication); + ObjectValues::const_iterator const it = value_.map_->find(actualKey); if (it == value_.map_->end()) return null; @@ -994,8 +996,8 @@ Value::removeMember(char const* key) if (type_ == nullValue) return null; - CZString actualKey(key, CZString::noDuplication); - ObjectValues::iterator it = value_.map_->find(actualKey); + CZString const actualKey(key, CZString::noDuplication); + ObjectValues::iterator const it = value_.map_->find(actualKey); if (it == value_.map_->end()) return null; @@ -1045,7 +1047,7 @@ Value::getMemberNames() const Members members; members.reserve(value_.map_->size()); ObjectValues::const_iterator it = value_.map_->begin(); - ObjectValues::const_iterator itEnd = value_.map_->end(); + ObjectValues::const_iterator const itEnd = value_.map_->end(); for (; it != itEnd; ++it) members.push_back(std::string((*it).first.c_str())); @@ -1139,7 +1141,7 @@ Value::begin() const { case arrayValue: case objectValue: - if (value_.map_) + if (value_.map_ != nullptr) return const_iterator(value_.map_->begin()); break; @@ -1157,7 +1159,7 @@ Value::end() const { case arrayValue: case objectValue: - if (value_.map_) + if (value_.map_ != nullptr) return const_iterator(value_.map_->end()); break; @@ -1175,7 +1177,7 @@ Value::begin() { case arrayValue: case objectValue: - if (value_.map_) + if (value_.map_ != nullptr) return iterator(value_.map_->begin()); break; default: @@ -1192,7 +1194,7 @@ Value::end() { case arrayValue: case objectValue: - if (value_.map_) + if (value_.map_ != nullptr) return iterator(value_.map_->end()); break; default: diff --git a/src/libxrpl/json/json_valueiterator.cpp b/src/libxrpl/json/json_valueiterator.cpp index e49ad50f9a..b3cf7e6538 100644 --- a/src/libxrpl/json/json_valueiterator.cpp +++ b/src/libxrpl/json/json_valueiterator.cpp @@ -89,7 +89,7 @@ ValueIteratorBase::key() const { Value::CZString const czString = (*current_).first; - if (czString.c_str()) + if (czString.c_str() != nullptr) { if (czString.isStaticString()) return Value(StaticString(czString.c_str())); @@ -105,7 +105,7 @@ ValueIteratorBase::index() const { Value::CZString const czString = (*current_).first; - if (!czString.c_str()) + if (czString.c_str() == nullptr) return czString.index(); return Value::UInt(-1); @@ -115,7 +115,7 @@ char const* ValueIteratorBase::memberName() const { char const* name = (*current_).first.c_str(); - return name ? name : ""; + return (name != nullptr) ? name : ""; } // ////////////////////////////////////////////////////////////////// diff --git a/src/libxrpl/json/json_writer.cpp b/src/libxrpl/json/json_writer.cpp index 66507f0111..150a7fe2e5 100644 --- a/src/libxrpl/json/json_writer.cpp +++ b/src/libxrpl/json/json_writer.cpp @@ -23,7 +23,7 @@ isControlCharacter(char ch) static bool containsControlCharacter(char const* str) { - while (*str) + while (*str != 0) { if (isControlCharacter(*(str++))) return true; @@ -47,8 +47,8 @@ std::string valueToString(Int value) { char buffer[32]; - char* current = buffer + sizeof(buffer); - bool isNegative = value < 0; + char* current = buffer + sizeof(buffer); // NOLINT(misc-const-correctness) + bool const isNegative = value < 0; if (isNegative) value = -value; @@ -66,7 +66,7 @@ std::string valueToString(UInt value) { char buffer[32]; - char* current = buffer + sizeof(buffer); + char* current = buffer + sizeof(buffer); // NOLINT(misc-const-correctness) uintToString(value, current); XRPL_ASSERT(current >= buffer, "Json::valueToString(UInt) : buffer check"); return current; @@ -106,7 +106,7 @@ valueToQuotedString(char const* value) // We have to walk value and escape any special characters. // Appending to std::string is not efficient, but this should be rare. // (Note: forward slashes are *not* rare, but I am not escaping them.) - unsigned maxsize = strlen(value) * 2 + 3; // all-escaped+quotes+NULL + unsigned const maxsize = (strlen(value) * 2) + 3; // all-escaped+quotes+NULL std::string result; result.reserve(maxsize); // to avoid lots of mallocs result += "\""; @@ -213,7 +213,7 @@ FastWriter::writeValue(Value const& value) case arrayValue: { document_ += "["; - int size = value.size(); + int const size = value.size(); for (int index = 0; index < size; ++index) { @@ -252,7 +252,7 @@ FastWriter::writeValue(Value const& value) // Class StyledWriter // ////////////////////////////////////////////////////////////////// -StyledWriter::StyledWriter() : rightMargin_(74), indentSize_(3) +StyledWriter::StyledWriter() { } @@ -338,7 +338,7 @@ StyledWriter::writeValue(Value const& value) void StyledWriter::writeArrayValue(Value const& value) { - unsigned size = value.size(); + unsigned const size = value.size(); if (size == 0) { @@ -346,13 +346,13 @@ StyledWriter::writeArrayValue(Value const& value) } else { - bool isArrayMultiLine = isMultilineArray(value); + bool const isArrayMultiLine = isMultilineArray(value); if (isArrayMultiLine) { writeWithIndent("["); indent(); - bool hasChildValue = !childValues_.empty(); + bool const hasChildValue = !childValues_.empty(); unsigned index = 0; while (true) @@ -401,7 +401,7 @@ StyledWriter::writeArrayValue(Value const& value) bool StyledWriter::isMultilineArray(Value const& value) { - int size = value.size(); + int const size = value.size(); bool isMultiLine = size * 3 >= rightMargin_; childValues_.clear(); @@ -416,7 +416,7 @@ StyledWriter::isMultilineArray(Value const& value) { childValues_.reserve(size); addChildValues_ = true; - int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + int lineLength = 4 + ((size - 1) * 2); // '[ ' + ', '*n + ' ]' for (int index = 0; index < size; ++index) { @@ -449,7 +449,7 @@ StyledWriter::writeIndent() { if (!document_.empty()) { - char last = document_[document_.length() - 1]; + char const last = document_[document_.length() - 1]; if (last == ' ') // already indented return; @@ -486,8 +486,7 @@ StyledWriter::unindent() // Class StyledStreamWriter // ////////////////////////////////////////////////////////////////// -StyledStreamWriter::StyledStreamWriter(std::string indentation) - : document_(nullptr), rightMargin_(74), indentation_(indentation) +StyledStreamWriter::StyledStreamWriter(std::string indentation) : indentation_(indentation) { } @@ -573,7 +572,7 @@ StyledStreamWriter::writeValue(Value const& value) void StyledStreamWriter::writeArrayValue(Value const& value) { - unsigned size = value.size(); + unsigned const size = value.size(); if (size == 0) { @@ -581,13 +580,13 @@ StyledStreamWriter::writeArrayValue(Value const& value) } else { - bool isArrayMultiLine = isMultilineArray(value); + bool const isArrayMultiLine = isMultilineArray(value); if (isArrayMultiLine) { writeWithIndent("["); indent(); - bool hasChildValue = !childValues_.empty(); + bool const hasChildValue = !childValues_.empty(); unsigned index = 0; while (true) @@ -636,7 +635,7 @@ StyledStreamWriter::writeArrayValue(Value const& value) bool StyledStreamWriter::isMultilineArray(Value const& value) { - int size = value.size(); + int const size = value.size(); bool isMultiLine = size * 3 >= rightMargin_; childValues_.clear(); @@ -651,7 +650,7 @@ StyledStreamWriter::isMultilineArray(Value const& value) { childValues_.reserve(size); addChildValues_ = true; - int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + int lineLength = 4 + ((size - 1) * 2); // '[ ' + ', '*n + ' ]' for (int index = 0; index < size; ++index) { diff --git a/src/libxrpl/ledger/ApplyStateTable.cpp b/src/libxrpl/ledger/ApplyStateTable.cpp index a0074c0b53..9ebbca8ac5 100644 --- a/src/libxrpl/ledger/ApplyStateTable.cpp +++ b/src/libxrpl/ledger/ApplyStateTable.cpp @@ -127,8 +127,8 @@ ApplyStateTable::apply( auto curNode = item.second.second; if ((type == &sfModifiedNode) && (*curNode == *origNode)) continue; - std::uint16_t nodeType = curNode ? curNode->getFieldU16(sfLedgerEntryType) - : origNode->getFieldU16(sfLedgerEntryType); + std::uint16_t const nodeType = curNode ? curNode->getFieldU16(sfLedgerEntryType) + : origNode->getFieldU16(sfLedgerEntryType); meta.setAffectedNode(item.first, *type, nodeType); if (type == &sfDeletedNode) { @@ -275,9 +275,7 @@ ApplyStateTable::exists(ReadView const& base, Keylet const& k) const case Action::modify: break; } - if (!k.check(*sle)) - return false; - return true; + return k.check(*sle); } auto diff --git a/src/libxrpl/ledger/ApplyView.cpp b/src/libxrpl/ledger/ApplyView.cpp index 463b2ba538..476b635511 100644 --- a/src/libxrpl/ledger/ApplyView.cpp +++ b/src/libxrpl/ledger/ApplyView.cpp @@ -32,11 +32,11 @@ createRoot( auto findPreviousPage(ApplyView& view, Keylet const& directory, SLE::ref start) { - std::uint64_t page = start->getFieldU64(sfIndexPrevious); + std::uint64_t const page = start->getFieldU64(sfIndexPrevious); auto node = start; - if (page) + if (page != 0u) { node = view.peek(keylet::page(directory, page)); if (!node) diff --git a/src/libxrpl/ledger/BookListeners.cpp b/src/libxrpl/ledger/BookListeners.cpp index 22b78e46bb..8699d891a0 100644 --- a/src/libxrpl/ledger/BookListeners.cpp +++ b/src/libxrpl/ledger/BookListeners.cpp @@ -5,21 +5,21 @@ namespace xrpl { void BookListeners::addSubscriber(InfoSub::ref sub) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); mListeners[sub->getSeq()] = sub; } void BookListeners::removeSubscriber(std::uint64_t seq) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); mListeners.erase(seq); } void BookListeners::publish(MultiApiJson const& jvObj, hash_set& havePublished) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto it = mListeners.cbegin(); while (it != mListeners.cend()) diff --git a/src/libxrpl/ledger/CachedView.cpp b/src/libxrpl/ledger/CachedView.cpp index 5c15ccdac4..aa075d69a4 100644 --- a/src/libxrpl/ledger/CachedView.cpp +++ b/src/libxrpl/ledger/CachedView.cpp @@ -21,7 +21,7 @@ CachedViewImpl::read(Keylet const& k) const auto const digest = [&]() -> std::optional { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const iter = map_.find(k.key); if (iter != map_.end()) { @@ -57,7 +57,7 @@ CachedViewImpl::read(Keylet const& k) const // Avoid acquiring this lock unless necessary. It is only necessary if // the key was not found in the map_. The lock is needed to add the key // and digest. - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); map_.emplace(k.key, *digest); } if (!sle || !k.check(*sle)) diff --git a/src/xrpld/app/misc/CanonicalTXSet.cpp b/src/libxrpl/ledger/CanonicalTXSet.cpp similarity index 97% rename from src/xrpld/app/misc/CanonicalTXSet.cpp rename to src/libxrpl/ledger/CanonicalTXSet.cpp index f971c100eb..72f45731fb 100644 --- a/src/xrpld/app/misc/CanonicalTXSet.cpp +++ b/src/libxrpl/ledger/CanonicalTXSet.cpp @@ -1,4 +1,4 @@ -#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/Ledger.cpp b/src/libxrpl/ledger/Ledger.cpp similarity index 73% rename from src/xrpld/app/ledger/Ledger.cpp rename to src/libxrpl/ledger/Ledger.cpp index 636410e57a..d2e7b25347 100644 --- a/src/xrpld/app/ledger/Ledger.cpp +++ b/src/libxrpl/ledger/Ledger.cpp @@ -1,19 +1,9 @@ -#include -#include -#include -#include -#include -#include -#include - #include #include #include -#include -#include #include -#include -#include +#include +#include #include #include #include @@ -21,7 +11,6 @@ #include #include #include -#include #include #include @@ -30,23 +19,6 @@ namespace xrpl { create_genesis_t const create_genesis{}; -uint256 -calculateLedgerHash(LedgerHeader const& info) -{ - // VFALCO This has to match addRaw in View.h. - return sha512Half( - HashPrefix::ledgerMaster, - std::uint32_t(info.seq), - std::uint64_t(info.drops.drops()), - info.parentHash, - info.txHash, - info.accountHash, - std::uint32_t(info.parentCloseTime.time_since_epoch().count()), - std::uint32_t(info.closeTime.time_since_epoch().count()), - std::uint8_t(info.closeTimeResolution.count()), - std::uint8_t(info.closeFlags)); -} - //------------------------------------------------------------------------------ class Ledger::sles_iter_impl : public sles_type::iter_base @@ -108,8 +80,7 @@ public: txs_iter_impl(txs_iter_impl const&) = default; - txs_iter_impl(bool metadata, SHAMap::const_iterator iter) - : metadata_(metadata), iter_(std::move(iter)) + txs_iter_impl(bool metadata, SHAMap::const_iterator iter) : metadata_(metadata), iter_(iter) { } @@ -138,8 +109,8 @@ public: { auto const& item = *iter_; if (metadata_) - return deserializeTxPlusMeta(item); - return {deserializeTx(item), nullptr}; + return Ledger::deserializeTxPlusMeta(item); + return {Ledger::deserializeTx(item), nullptr}; } }; @@ -147,13 +118,15 @@ public: Ledger::Ledger( create_genesis_t, - Config const& config, + Rules const& rules, + Fees const& fees, std::vector const& amendments, Family& family) : mImmutable(false) , txMap_(SHAMapType::TRANSACTION, family) , stateMap_(SHAMapType::STATE, family) - , rules_{config.features} + , fees_(fees) + , rules_(rules) , j_(beast::Journal(beast::Journal::getNullSink())) { header_.seq = 1; @@ -182,25 +155,25 @@ Ledger::Ledger( // Whether featureXRPFees is supported will depend on startup options. if (std::find(amendments.begin(), amendments.end(), featureXRPFees) != amendments.end()) { - sle->at(sfBaseFeeDrops) = config.FEES.reference_fee; - sle->at(sfReserveBaseDrops) = config.FEES.account_reserve; - sle->at(sfReserveIncrementDrops) = config.FEES.owner_reserve; + sle->at(sfBaseFeeDrops) = fees.base; + sle->at(sfReserveBaseDrops) = fees.reserve; + sle->at(sfReserveIncrementDrops) = fees.increment; } else { - if (auto const f = config.FEES.reference_fee.dropsAs()) + if (auto const f = fees.base.dropsAs()) sle->at(sfBaseFee) = *f; - if (auto const f = config.FEES.account_reserve.dropsAs()) + if (auto const f = fees.reserve.dropsAs()) sle->at(sfReserveBase) = *f; - if (auto const f = config.FEES.owner_reserve.dropsAs()) + if (auto const f = fees.increment.dropsAs()) sle->at(sfReserveIncrement) = *f; - sle->at(sfReferenceFeeUnits) = Config::FEE_UNITS_DEPRECATED; + sle->at(sfReferenceFeeUnits) = FEE_UNITS_DEPRECATED; } if (std::find(amendments.begin(), amendments.end(), featureSmartEscrow) != amendments.end()) { - sle->at(sfExtensionComputeLimit) = config.FEES.extension_compute_limit; - sle->at(sfExtensionSizeLimit) = config.FEES.extension_size_limit; - sle->at(sfGasPrice) = config.FEES.gas_price; + sle->at(sfExtensionComputeLimit) = fees.extensionComputeLimit; + sle->at(sfExtensionSizeLimit) = fees.extensionSizeLimit; + sle->at(sfGasPrice) = fees.gasPrice; } rawInsert(sle); } @@ -213,13 +186,15 @@ Ledger::Ledger( LedgerHeader const& info, bool& loaded, bool acquire, - Config const& config, + Rules const& rules, + Fees const& fees, Family& family, beast::Journal j) : mImmutable(true) , txMap_(SHAMapType::TRANSACTION, info.txHash, family) , stateMap_(SHAMapType::STATE, info.accountHash, family) - , rules_(config.features) + , fees_(fees) + , rules_(rules) , header_(info) , j_(j) { @@ -241,7 +216,6 @@ Ledger::Ledger( txMap_.setImmutable(); stateMap_.setImmutable(); - defaultFees(config); if (!setup()) loaded = false; @@ -281,11 +255,11 @@ Ledger::Ledger(Ledger const& prevLedger, NetClock::time_point closeTime) } } -Ledger::Ledger(LedgerHeader const& info, Config const& config, Family& family) +Ledger::Ledger(LedgerHeader const& info, Rules const& rules, Family& family) : mImmutable(true) , txMap_(SHAMapType::TRANSACTION, info.txHash, family) , stateMap_(SHAMapType::STATE, info.accountHash, family) - , rules_{config.features} + , rules_(rules) , header_(info) , j_(beast::Journal(beast::Journal::getNullSink())) { @@ -295,18 +269,19 @@ Ledger::Ledger(LedgerHeader const& info, Config const& config, Family& family) Ledger::Ledger( std::uint32_t ledgerSeq, NetClock::time_point closeTime, - Config const& config, + Rules const& rules, + Fees const& fees, Family& family) : mImmutable(false) , txMap_(SHAMapType::TRANSACTION, family) , stateMap_(SHAMapType::STATE, family) - , rules_{config.features} + , fees_(fees) + , rules_(rules) , j_(beast::Journal(beast::Journal::getNullSink())) { header_.seq = ledgerSeq; header_.closeTime = closeTime; header_.closeTimeResolution = ledgerDefaultTimeResolution; - defaultFees(config); setup(); } @@ -356,14 +331,14 @@ Ledger::addSLE(SLE const& sle) //------------------------------------------------------------------------------ std::shared_ptr -deserializeTx(SHAMapItem const& item) +Ledger::deserializeTx(SHAMapItem const& item) { SerialIter sit(item.slice()); return std::make_shared(sit); } std::pair, std::shared_ptr> -deserializeTxPlusMeta(SHAMapItem const& item) +Ledger::deserializeTxPlusMeta(SHAMapItem const& item) { std::pair, std::shared_ptr> result; SerialIter sit(item.slice()); @@ -666,29 +641,6 @@ Ledger::setup() return ret; } -void -Ledger::defaultFees(Config const& config) -{ - XRPL_ASSERT( - fees_.base == 0 && fees_.reserve == 0 && fees_.increment == 0 && - fees_.extensionComputeLimit == 0 && fees_.extensionSizeLimit == 0 && - fees_.gasPrice == 0, - "xrpl::Ledger::defaultFees : zero fees"); - if (fees_.base == 0) - fees_.base = config.FEES.reference_fee; - if (fees_.reserve == 0) - fees_.reserve = config.FEES.account_reserve; - if (fees_.increment == 0) - fees_.increment = config.FEES.owner_reserve; - - if (fees_.extensionComputeLimit == 0) - fees_.extensionComputeLimit = config.FEES.extension_compute_limit; - if (fees_.extensionSizeLimit == 0) - fees_.extensionSizeLimit = config.FEES.extension_size_limit; - if (fees_.gasPrice == 0) - fees_.gasPrice = config.FEES.gas_price; -} - std::shared_ptr Ledger::peek(Keylet const& k) const { @@ -771,7 +723,7 @@ Ledger::updateNegativeUNL() if (sle->isFieldPresent(sfDisabledValidators)) { auto const& oldNUnl = sle->getFieldArray(sfDisabledValidators); - for (auto v : oldNUnl) + for (auto const& v : oldNUnl) { if (hasToReEnable && v.isFieldPresent(sfPublicKey) && v.getFieldVL(sfPublicKey) == sle->getFieldVL(sfValidatorToReEnable)) @@ -855,27 +807,17 @@ Ledger::walkLedger(beast::Journal j, bool parallel) const } bool -Ledger::assertSensible(beast::Journal ledgerJ) const +Ledger::isSensible() const { - if (header_.hash.isNonZero() && header_.accountHash.isNonZero() && - (header_.accountHash == stateMap_.getHash().as_uint256()) && - (header_.txHash == txMap_.getHash().as_uint256())) - { - return true; - } - - // LCOV_EXCL_START - Json::Value j = getJson({*this, {}}); - - j[jss::accountTreeHash] = to_string(header_.accountHash); - j[jss::transTreeHash] = to_string(header_.txHash); - - JLOG(ledgerJ.fatal()) << "ledger is not sensible" << j; - - UNREACHABLE("xrpl::Ledger::assertSensible : ledger is not sensible"); - - return false; - // LCOV_EXCL_STOP + if (header_.hash.isZero()) + return false; + if (header_.accountHash.isZero()) + return false; + if (header_.accountHash != stateMap_.getHash().as_uint256()) + return false; + if (header_.txHash != txMap_.getHash().as_uint256()) + return false; + return true; } // update the skip list with the information from our previous ledger @@ -886,7 +828,7 @@ Ledger::updateSkipList() if (header_.seq == 0) // genesis ledger has no previous ledger return; - std::uint32_t prevIndex = header_.seq - 1; + std::uint32_t const prevIndex = header_.seq - 1; // update record of every 256th ledger if ((prevIndex & 0xff) == 0) @@ -964,76 +906,6 @@ Ledger::isVotingLedger() const return ::xrpl::isVotingLedger(header_.seq + 1); } -static bool -saveValidatedLedger(Application& app, std::shared_ptr const& ledger, bool current) -{ - auto j = app.journal("Ledger"); - auto seq = ledger->header().seq; - if (!app.pendingSaves().startWork(seq)) - { - // The save was completed synchronously - JLOG(j.debug()) << "Save aborted"; - return true; - } - - auto& db = app.getRelationalDatabase(); - - auto const res = db.saveValidatedLedger(ledger, current); - - // Clients can now trust the database for - // information about this ledger sequence. - app.pendingSaves().finishWork(seq); - return res; -} - -/** Save, or arrange to save, a fully-validated ledger - Returns false on error -*/ -bool -pendSaveValidated( - Application& app, - std::shared_ptr const& ledger, - bool isSynchronous, - bool isCurrent) -{ - if (!app.getHashRouter().setFlags(ledger->header().hash, HashRouterFlags::SAVED)) - { - // We have tried to save this ledger recently - auto stream = app.journal("Ledger").debug(); - JLOG(stream) << "Double pend save for " << ledger->header().seq; - - if (!isSynchronous || !app.pendingSaves().pending(ledger->header().seq)) - { - // Either we don't need it to be finished - // or it is finished - return true; - } - } - - XRPL_ASSERT(ledger->isImmutable(), "xrpl::pendSaveValidated : immutable ledger"); - - if (!app.pendingSaves().shouldWork(ledger->header().seq, isSynchronous)) - { - auto stream = app.journal("Ledger").debug(); - JLOG(stream) << "Pend save with seq in pending saves " << ledger->header().seq; - - return true; - } - - // See if we can use the JobQueue. - if (!isSynchronous && - app.getJobQueue().addJob( - isCurrent ? jtPUBLEDGER : jtPUBOLDLEDGER, - std::to_string(ledger->seq()), - [&app, ledger, isCurrent]() { saveValidatedLedger(app, ledger, isCurrent); })) - { - return true; - } - - // The JobQueue won't do the Job. Do the save synchronously. - return saveValidatedLedger(app, ledger, isCurrent); -} - void Ledger::unshare() const { @@ -1047,84 +919,5 @@ Ledger::invariants() const stateMap_.invariants(); txMap_.invariants(); } -//------------------------------------------------------------------------------ - -/* - * Make ledger using info loaded from database. - * - * @param LedgerHeader: Ledger information. - * @param app: Link to the Application. - * @param acquire: Acquire the ledger if not found locally. - * @return Shared pointer to the ledger. - */ -std::shared_ptr -loadLedgerHelper(LedgerHeader const& info, Application& app, bool acquire) -{ - bool loaded = false; - auto ledger = std::make_shared( - info, loaded, acquire, app.config(), app.getNodeFamily(), app.journal("Ledger")); - - if (!loaded) - ledger.reset(); - - return ledger; -} - -static void -finishLoadByIndexOrHash( - std::shared_ptr const& ledger, - Config const& config, - beast::Journal j) -{ - if (!ledger) - return; - - XRPL_ASSERT( - ledger->header().seq < XRP_LEDGER_EARLIEST_FEES || ledger->read(keylet::fees()), - "xrpl::finishLoadByIndexOrHash : valid ledger fees"); - ledger->setImmutable(); - - JLOG(j.trace()) << "Loaded ledger: " << to_string(ledger->header().hash); - - ledger->setFull(); -} - -std::tuple, std::uint32_t, uint256> -getLatestLedger(Application& app) -{ - std::optional const info = app.getRelationalDatabase().getNewestLedgerInfo(); - if (!info) - return {std::shared_ptr(), {}, {}}; - return {loadLedgerHelper(*info, app, true), info->seq, info->hash}; -} - -std::shared_ptr -loadByIndex(std::uint32_t ledgerIndex, Application& app, bool acquire) -{ - if (std::optional info = - app.getRelationalDatabase().getLedgerInfoByIndex(ledgerIndex)) - { - std::shared_ptr ledger = loadLedgerHelper(*info, app, acquire); - finishLoadByIndexOrHash(ledger, app.config(), app.journal("Ledger")); - return ledger; - } - return {}; -} - -std::shared_ptr -loadByHash(uint256 const& ledgerHash, Application& app, bool acquire) -{ - if (std::optional info = - app.getRelationalDatabase().getLedgerInfoByHash(ledgerHash)) - { - std::shared_ptr ledger = loadLedgerHelper(*info, app, acquire); - finishLoadByIndexOrHash(ledger, app.config(), app.journal("Ledger")); - XRPL_ASSERT( - !ledger || ledger->header().hash == ledgerHash, - "xrpl::loadByHash : ledger hash match if loaded"); - return ledger; - } - return {}; -} } // namespace xrpl diff --git a/src/libxrpl/ledger/PaymentSandbox.cpp b/src/libxrpl/ledger/PaymentSandbox.cpp index 1f84da1dcb..a56d730b5a 100644 --- a/src/libxrpl/ledger/PaymentSandbox.cpp +++ b/src/libxrpl/ledger/PaymentSandbox.cpp @@ -164,7 +164,7 @@ PaymentSandbox::balanceHook( auto delta = amount.zeroed(); auto lastBal = amount; auto minBal = amount; - for (auto curSB = this; curSB; curSB = curSB->ps_) + for (auto curSB = this; curSB != nullptr; curSB = curSB->ps_) { if (auto adj = curSB->tab_.adjustments(account, issuer, currency)) { @@ -198,7 +198,7 @@ std::uint32_t PaymentSandbox::ownerCountHook(AccountID const& account, std::uint32_t count) const { std::uint32_t result = count; - for (auto curSB = this; curSB; curSB = curSB->ps_) + for (auto curSB = this; curSB != nullptr; curSB = curSB->ps_) { if (auto adj = curSB->tab_.ownerCount(account)) result = std::max(result, *adj); diff --git a/src/libxrpl/ledger/ReadView.cpp b/src/libxrpl/ledger/ReadView.cpp index e0764d6c81..8e6763410c 100644 --- a/src/libxrpl/ledger/ReadView.cpp +++ b/src/libxrpl/ledger/ReadView.cpp @@ -58,7 +58,7 @@ makeRulesGivenLedger( std::unordered_set> const& presets) { Keylet const k = keylet::amendments(); - std::optional digest = ledger.digest(k.key); + std::optional const digest = ledger.digest(k.key); if (digest) { auto const sle = ledger.read(k); diff --git a/src/libxrpl/ledger/View.cpp b/src/libxrpl/ledger/View.cpp index ef6a66744d..1702d4243b 100644 --- a/src/libxrpl/ledger/View.cpp +++ b/src/libxrpl/ledger/View.cpp @@ -242,7 +242,7 @@ hashOfSeq(ReadView const& ledger, LedgerIndex seq, beast::Journal journal) if (seq == (ledger.seq() - 1)) return ledger.header().parentHash; - if (int diff = ledger.seq() - seq; diff <= 256) + if (int const diff = ledger.seq() - seq; diff <= 256) { // Within 256... auto const hashIndex = ledger.read(keylet::skip()); @@ -433,8 +433,7 @@ doWithdraw( j) < amount) { // LCOV_EXCL_START - JLOG(j.error()) << "LoanBrokerCoverWithdraw: negative balance of " - "broker cover assets."; + JLOG(j.error()) << "doWithdraw: negative balance of broker cover assets."; return tefINTERNAL; // LCOV_EXCL_STOP } diff --git a/src/libxrpl/ledger/helpers/CredentialHelpers.cpp b/src/libxrpl/ledger/helpers/CredentialHelpers.cpp index 234ca7ea17..32db285f1e 100644 --- a/src/libxrpl/ledger/helpers/CredentialHelpers.cpp +++ b/src/libxrpl/ledger/helpers/CredentialHelpers.cpp @@ -78,7 +78,7 @@ deleteSLE(ApplyView& view, std::shared_ptr const& sleCredential, beast::Jou auto const issuer = sleCredential->getAccountID(sfIssuer); auto const subject = sleCredential->getAccountID(sfSubject); - bool const accepted = sleCredential->getFlags() & lsfAccepted; + bool const accepted = (sleCredential->getFlags() & lsfAccepted) != 0u; auto err = delSLE(issuer, sfIssuerNode, !accepted || (subject == issuer)); if (!isTesSuccess(err)) @@ -147,7 +147,7 @@ valid(STTx const& tx, ReadView const& view, AccountID const& src, beast::Journal return tecBAD_CREDENTIALS; } - if (!(sleCred->getFlags() & lsfAccepted)) + if ((sleCred->getFlags() & lsfAccepted) == 0u) { JLOG(j.trace()) << "Credential isn't accepted. Cred: " << h; return tecBAD_CREDENTIALS; @@ -188,7 +188,7 @@ validDomain(ReadView const& view, uint256 domainID, AccountID const& subject) foundExpired = true; continue; } - if (sleCredential->getFlags() & lsfAccepted) + if ((sleCredential->getFlags() & lsfAccepted) != 0u) { return tesSUCCESS; } @@ -309,7 +309,7 @@ verifyValidDomain(ApplyView& view, AccountID const& account, uint256 domainID, b if (!sleCredential) continue; // expired, i.e. deleted in credentials::removeExpired - if (sleCredential->getFlags() & lsfAccepted) + if ((sleCredential->getFlags() & lsfAccepted) != 0u) return tesSUCCESS; } @@ -336,7 +336,7 @@ verifyDepositPreauth( if (credentialsPresent && credentials::removeExpired(view, tx.getFieldV256(sfCredentialIDs), j)) return tecEXPIRED; - if (sleDst && (sleDst->getFlags() & lsfDepositAuth)) + if (sleDst && ((sleDst->getFlags() & lsfDepositAuth) != 0u)) { if (src != dst) { diff --git a/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp b/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp index f0ca83f2cd..dba71e0acd 100644 --- a/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp +++ b/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp @@ -69,7 +69,7 @@ forEachItem( for (auto const& key : sle->getFieldV256(sfIndexes)) f(view.read(keylet::child(key))); auto const next = sle->getFieldU64(sfIndexNext); - if (!next) + if (next == 0u) return; pos = keylet::page(root, next); } diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index cbf37a06a8..31c1d543f5 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -1,6 +1,7 @@ #include // #include +#include #include #include #include @@ -12,21 +13,6 @@ namespace xrpl { -// Forward declarations for functions that remain in View.h/cpp -bool -isVaultPseudoAccountFrozen( - ReadView const& view, - AccountID const& account, - MPTIssue const& mptShare, - int depth); - -[[nodiscard]] TER -dirLink( - ApplyView& view, - AccountID const& owner, - std::shared_ptr& object, - SF_UINT64 const& node = sfOwnerNode); - bool isGlobalFrozen(ReadView const& view, MPTIssue const& mptIssue) { @@ -83,7 +69,7 @@ transferRate(ReadView const& view, MPTID const& issuanceID) // which represents 50% of 1,000,000,000 if (auto const sle = view.read(keylet::mptIssuance(issuanceID)); sle && sle->isFieldPresent(sfTransferFee)) - return Rate{1'000'000'000u + 10'000 * sle->getFieldU16(sfTransferFee)}; + return Rate{1'000'000'000u + (10'000 * sle->getFieldU16(sfTransferFee))}; return parityRate; } @@ -149,7 +135,7 @@ authorizeMPToken( // When a holder wants to unauthorize/delete a MPT, the ledger must // - delete mptokenKey from owner directory // - delete the MPToken - if (flags & tfMPTUnauthorize) + if ((flags & tfMPTUnauthorize) != 0) { auto const mptokenKey = keylet::mptoken(mptIssuanceID, account); auto const sleMpt = view.peek(mptokenKey); @@ -229,7 +215,7 @@ authorizeMPToken( // Issuer wants to unauthorize the holder, unset lsfMPTAuthorized on // their MPToken - if (flags & tfMPTUnauthorize) + if ((flags & tfMPTUnauthorize) != 0) { flagsOut &= ~lsfMPTAuthorized; } @@ -490,7 +476,7 @@ canTransfer( if (!sleIssuance) return tecOBJECT_NOT_FOUND; - if (!(sleIssuance->getFieldU32(sfFlags) & lsfMPTCanTransfer)) + if (!sleIssuance->isFlag(lsfMPTCanTransfer)) { if (from != (*sleIssuance)[sfIssuer] && to != (*sleIssuance)[sfIssuer]) return TER{tecNO_AUTH}; diff --git a/src/libxrpl/ledger/helpers/OfferHelpers.cpp b/src/libxrpl/ledger/helpers/OfferHelpers.cpp index 9422153b10..3d63240fd0 100644 --- a/src/libxrpl/ledger/helpers/OfferHelpers.cpp +++ b/src/libxrpl/ledger/helpers/OfferHelpers.cpp @@ -16,7 +16,7 @@ offerDelete(ApplyView& view, std::shared_ptr const& sle, beast::Journal j) auto owner = sle->getAccountID(sfAccount); // Detect legacy directories. - uint256 uDirectory = sle->getFieldH256(sfBookDirectory); + uint256 const uDirectory = sle->getFieldH256(sfBookDirectory); if (!view.dirRemove(keylet::ownerDir(owner), sle->getFieldU64(sfOwnerNode), offerIndex, false)) { diff --git a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp index e88afe0cfb..697b8fc293 100644 --- a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp +++ b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp @@ -224,10 +224,10 @@ trustCreate( bSetHigh ? sfLowLimit : sfHighLimit, STAmount(Issue{saBalance.getCurrency(), bSetDst ? uSrcAccountID : uDstAccountID})); - if (uQualityIn) + if (uQualityIn != 0u) sleRippleState->setFieldU32(bSetHigh ? sfHighQualityIn : sfLowQualityIn, uQualityIn); - if (uQualityOut) + if (uQualityOut != 0u) sleRippleState->setFieldU32(bSetHigh ? sfHighQualityOut : sfLowQualityOut, uQualityOut); std::uint32_t uFlags = bSetHigh ? lsfHighReserve : lsfLowReserve; @@ -275,8 +275,8 @@ trustDelete( beast::Journal j) { // Detect legacy dirs. - std::uint64_t uLowNode = sleRippleState->getFieldU64(sfLowNode); - std::uint64_t uHighNode = sleRippleState->getFieldU64(sfHighNode); + std::uint64_t const uLowNode = sleRippleState->getFieldU64(sfLowNode); + std::uint64_t const uHighNode = sleRippleState->getFieldU64(sfHighNode); JLOG(j.trace()) << "trustDelete: Deleting ripple line: low"; @@ -327,16 +327,16 @@ updateTrustLine( // Sender balance was positive. && after <= beast::zero // Sender is zero or negative. - && (flags & (!bSenderHigh ? lsfLowReserve : lsfHighReserve)) + && ((flags & (!bSenderHigh ? lsfLowReserve : lsfHighReserve)) != 0u) // Sender reserve is set. && static_cast(flags & (!bSenderHigh ? lsfLowNoRipple : lsfHighNoRipple)) != static_cast(sle->getFlags() & lsfDefaultRipple) && - !(flags & (!bSenderHigh ? lsfLowFreeze : lsfHighFreeze)) && + ((flags & (!bSenderHigh ? lsfLowFreeze : lsfHighFreeze)) == 0u) && !state->getFieldAmount(!bSenderHigh ? sfLowLimit : sfHighLimit) // Sender trust limit is 0. - && !state->getFieldU32(!bSenderHigh ? sfLowQualityIn : sfHighQualityIn) + && (state->getFieldU32(!bSenderHigh ? sfLowQualityIn : sfHighQualityIn) == 0u) // Sender quality in is 0. - && !state->getFieldU32(!bSenderHigh ? sfLowQualityOut : sfHighQualityOut)) + && (state->getFieldU32(!bSenderHigh ? sfLowQualityOut : sfHighQualityOut) == 0u)) // Sender quality out is 0. { // VFALCO Where is the line being deleted? @@ -348,7 +348,7 @@ updateTrustLine( // Balance is zero, receiver reserve is clear. if (!after // Balance is zero. - && !(flags & (bSenderHigh ? lsfLowReserve : lsfHighReserve))) + && ((flags & (bSenderHigh ? lsfLowReserve : lsfHighReserve)) == 0u)) return true; } return false; @@ -374,7 +374,7 @@ issueIOU( JLOG(j.trace()) << "issueIOU: " << to_string(account) << ": " << amount.getFullText(); - bool bSenderHigh = issue.account > account; + bool const bSenderHigh = issue.account > account; auto const index = keylet::line(issue.account, account, issue.currency); @@ -428,7 +428,7 @@ issueIOU( if (!receiverAccount) return tefINTERNAL; // LCOV_EXCL_LINE - bool noRipple = (receiverAccount->getFlags() & lsfDefaultRipple) == 0; + bool const noRipple = (receiverAccount->getFlags() & lsfDefaultRipple) == 0; return trustCreate( view, @@ -468,7 +468,7 @@ redeemIOU( JLOG(j.trace()) << "redeemIOU: " << to_string(account) << ": " << amount.getFullText(); - bool bSenderHigh = account > issue.account; + bool const bSenderHigh = account > issue.account; if (auto state = view.peek(keylet::line(account, issue.account, issue.currency))) { @@ -539,11 +539,12 @@ requireAuth(ReadView const& view, Issue const& issue, AccountID const& account, // If this is a weak or legacy check, or if the account has a line, fail if // auth is required and not set on the line if (auto const issuerAccount = view.read(keylet::account(issue.account)); - issuerAccount && (*issuerAccount)[sfFlags] & lsfRequireAuth) + issuerAccount && (((*issuerAccount)[sfFlags] & lsfRequireAuth) != 0u)) { if (trustLine) { - return ((*trustLine)[sfFlags] & ((account > issue.account) ? lsfLowAuth : lsfHighAuth)) + return (((*trustLine)[sfFlags] & + ((account > issue.account) ? lsfLowAuth : lsfHighAuth)) != 0u) ? tesSUCCESS : TER{tecNO_AUTH}; } @@ -575,7 +576,7 @@ canTransfer(ReadView const& view, Issue const& issue, AccountID const& from, Acc bool const issuerHigh = issuerId > account; return line->isFlag(issuerHigh ? lsfHighNoRipple : lsfLowNoRipple); } - return sleIssuer->isFlag(lsfDefaultRipple) == false; + return !sleIssuer->isFlag(lsfDefaultRipple); }; // Fail if rippling disabled on both trust lines @@ -748,7 +749,7 @@ deleteAMMTrustLine( } auto const uFlags = !ammLow ? lsfLowReserve : lsfHighReserve; - if (!(sleState->getFlags() & uFlags)) + if ((sleState->getFlags() & uFlags) == 0u) return tecINTERNAL; // LCOV_EXCL_LINE adjustOwnerCount(view, !ammLow ? sleLow : sleHigh, -1, j); diff --git a/src/libxrpl/ledger/helpers/TokenHelpers.cpp b/src/libxrpl/ledger/helpers/TokenHelpers.cpp index 7a98445b0a..8d2b0d5fff 100644 --- a/src/libxrpl/ledger/helpers/TokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/TokenHelpers.cpp @@ -161,7 +161,7 @@ getLineIfUsable( FreezeHandling zeroIfFrozen, beast::Journal j) { - auto const sle = view.read(keylet::line(account, issuer, currency)); + auto sle = view.read(keylet::line(account, issuer, currency)); if (!sle) { @@ -253,7 +253,7 @@ accountHolds( beast::Journal j, SpendableHandling includeFullBalance) { - STAmount amount; + STAmount const amount; if (isXRP(currency)) { return {xrpLiquid(view, account, 0, j)}; @@ -570,17 +570,18 @@ rippleCreditIOU( // Sender balance was positive. && saBalance <= beast::zero // Sender is zero or negative. - && (uFlags & (!bSenderHigh ? lsfLowReserve : lsfHighReserve)) + && ((uFlags & (!bSenderHigh ? lsfLowReserve : lsfHighReserve)) != 0u) // Sender reserve is set. && static_cast(uFlags & (!bSenderHigh ? lsfLowNoRipple : lsfHighNoRipple)) != static_cast( view.read(keylet::account(uSenderID))->getFlags() & lsfDefaultRipple) && - !(uFlags & (!bSenderHigh ? lsfLowFreeze : lsfHighFreeze)) && + ((uFlags & (!bSenderHigh ? lsfLowFreeze : lsfHighFreeze)) == 0u) && !sleRippleState->getFieldAmount(!bSenderHigh ? sfLowLimit : sfHighLimit) // Sender trust limit is 0. - && !sleRippleState->getFieldU32(!bSenderHigh ? sfLowQualityIn : sfHighQualityIn) + && (sleRippleState->getFieldU32(!bSenderHigh ? sfLowQualityIn : sfHighQualityIn) == 0u) // Sender quality in is 0. - && !sleRippleState->getFieldU32(!bSenderHigh ? sfLowQualityOut : sfHighQualityOut)) + && + (sleRippleState->getFieldU32(!bSenderHigh ? sfLowQualityOut : sfHighQualityOut) == 0u)) // Sender quality out is 0. { // Clear the reserve of the sender, possibly delete the line! @@ -592,7 +593,7 @@ rippleCreditIOU( // Balance is zero, receiver reserve is clear. bDelete = !saBalance // Balance is zero. - && !(uFlags & (bSenderHigh ? lsfLowReserve : lsfHighReserve)); + && ((uFlags & (bSenderHigh ? lsfLowReserve : lsfHighReserve)) == 0u); // Receiver reserve is clear. } @@ -725,7 +726,7 @@ rippleSendMultiIOU( for (auto const& r : receivers) { auto const& receiverID = r.first; - STAmount amount{issue, r.second}; + STAmount const amount{issue, r.second}; /* If we aren't sending anything or if the sender is the same as the * receiver then we don't need to do anything. @@ -751,7 +752,7 @@ rippleSendMultiIOU( // Calculate the amount to transfer accounting // for any transfer fees if the fee is not waived: - STAmount actualSend = (waiveFee == WaiveTransferFee::Yes) + STAmount const actualSend = (waiveFee == WaiveTransferFee::Yes) ? amount : multiply(amount, transferRate(view, issuer)); actual += actualSend; @@ -822,9 +823,9 @@ accountSendIOU( */ TER terResult(tesSUCCESS); - SLE::pointer sender = + SLE::pointer const sender = uSenderID != beast::zero ? view.peek(keylet::account(uSenderID)) : SLE::pointer(); - SLE::pointer receiver = + SLE::pointer const receiver = uReceiverID != beast::zero ? view.peek(keylet::account(uReceiverID)) : SLE::pointer(); if (auto stream = j.trace()) @@ -920,7 +921,7 @@ accountSendMultiIOU( * ensure that transfers are balanced. */ - SLE::pointer sender = + SLE::pointer const sender = senderID != beast::zero ? view.peek(keylet::account(senderID)) : SLE::pointer(); if (auto stream = j.trace()) @@ -939,7 +940,7 @@ accountSendMultiIOU( for (auto const& r : receivers) { auto const& receiverID = r.first; - STAmount amount{issue, r.second}; + STAmount const amount{issue, r.second}; if (amount < beast::zero) { @@ -952,7 +953,7 @@ accountSendMultiIOU( if (!amount || (senderID == receiverID)) continue; - SLE::pointer receiver = + SLE::pointer const receiver = receiverID != beast::zero ? view.peek(keylet::account(receiverID)) : SLE::pointer(); if (auto stream = j.trace()) @@ -1154,63 +1155,93 @@ rippleSendMultiMPT( beast::Journal j, WaiveTransferFee waiveFee) { - // Safe to get MPT since rippleSendMultiMPT is only called by - // accountSendMultiMPT auto const& issuer = mptIssue.getIssuer(); auto const sle = view.read(keylet::mptIssuance(mptIssue.getMptID())); if (!sle) return tecOBJECT_NOT_FOUND; - // These may diverge + // For the issuer-as-sender case, track the running total to validate + // against MaximumAmount. The read-only SLE (view.read) is not updated + // by rippleCreditMPT, so a per-iteration SLE read would be stale. + // Use uint64_t, not STAmount, to keep MaximumAmount comparisons in exact + // integer arithmetic. STAmount implicitly converts to Number, whose + // small-scale mantissa (~16 digits) can lose precision for values near + // maxMPTokenAmount (19 digits). + std::uint64_t totalSendAmount{0}; + std::uint64_t const maximumAmount = sle->at(~sfMaximumAmount).value_or(maxMPTokenAmount); + std::uint64_t const outstandingAmount = sle->getFieldU64(sfOutstandingAmount); + + // actual accumulates the total cost to the sender (includes transfer + // fees for third-party transit sends). takeFromSender accumulates only + // the transit portion that is debited to the issuer in bulk after the + // loop. They diverge when there are transfer fees. STAmount takeFromSender{mptIssue}; actual = takeFromSender; - for (auto const& r : receivers) + for (auto const& [receiverID, amt] : receivers) { - auto const& receiverID = r.first; - STAmount amount{mptIssue, r.second}; + STAmount const amount{mptIssue, amt}; if (amount < beast::zero) - { return tecINTERNAL; // LCOV_EXCL_LINE - } - /* If we aren't sending anything or if the sender is the same as the - * receiver then we don't need to do anything. - */ - if (!amount || (senderID == receiverID)) + if (!amount || senderID == receiverID) continue; if (senderID == issuer || receiverID == issuer) { - // if sender is issuer, check that the new OutstandingAmount will - // not exceed MaximumAmount if (senderID == issuer) { XRPL_ASSERT_PARTS( takeFromSender == beast::zero, "xrpl::rippleSendMultiMPT", "sender == issuer, takeFromSender == zero"); - auto const sendAmount = amount.mpt().value(); - auto const maximumAmount = sle->at(~sfMaximumAmount).value_or(maxMPTokenAmount); - if (sendAmount > maximumAmount || - sle->getFieldU64(sfOutstandingAmount) > maximumAmount - sendAmount) - return tecPATH_DRY; + + std::uint64_t const sendAmount = amount.mpt().value(); + + if (view.rules().enabled(fixSecurity3_1_3)) + { + // Post-fixSecurity3_1_3: aggregate MaximumAmount + // check. WARNING: the order of conditions is + // critical — each guards the subtraction in the + // next against unsigned underflow. Do not reorder. + bool const exceedsMaximumAmount = + // This send alone exceeds the max cap + sendAmount > maximumAmount || + // The aggregate of all sends exceeds the max cap + totalSendAmount > maximumAmount - sendAmount || + // Outstanding + aggregate exceeds the max cap + outstandingAmount > maximumAmount - sendAmount - totalSendAmount; + + if (exceedsMaximumAmount) + return tecPATH_DRY; + totalSendAmount += sendAmount; + } + else + { + // Pre-fixSecurity3_1_3: per-iteration MaximumAmount + // check. Reads sfOutstandingAmount from a stale + // view.read() snapshot — incorrect for multi-destination + // sends but retained for ledger replay compatibility. + if (sendAmount > maximumAmount || + outstandingAmount > maximumAmount - sendAmount) + return tecPATH_DRY; + } } // Direct send: redeeming MPTs and/or sending own MPTs. if (auto const ter = rippleCreditMPT(view, senderID, receiverID, amount, j)) return ter; actual += amount; - // Do not add amount to takeFromSender, because rippleCreditMPT took - // it + // Do not add amount to takeFromSender, because rippleCreditMPT + // took it. continue; } // Sending 3rd party MPTs: transit. - STAmount actualSend = (waiveFee == WaiveTransferFee::Yes) + STAmount const actualSend = (waiveFee == WaiveTransferFee::Yes) ? amount : multiply(amount, transferRate(view, amount.get().getMptID())); actual += actualSend; diff --git a/src/libxrpl/ledger/helpers/VaultHelpers.cpp b/src/libxrpl/ledger/helpers/VaultHelpers.cpp index 3ded720289..83a1b9fc4f 100644 --- a/src/libxrpl/ledger/helpers/VaultHelpers.cpp +++ b/src/libxrpl/ledger/helpers/VaultHelpers.cpp @@ -92,7 +92,7 @@ sharesToAssetsWithdraw( std::shared_ptr const& issuance, STAmount const& shares) { - XRPL_ASSERT(!shares.negative(), "xrpl::sharesToAssetsDeposit : non-negative shares"); + XRPL_ASSERT(!shares.negative(), "xrpl::sharesToAssetsWithdraw : non-negative shares"); XRPL_ASSERT( shares.asset() == vault->at(sfShareMPTID), "xrpl::sharesToAssetsWithdraw : shares and vault match"); diff --git a/src/libxrpl/net/HTTPClient.cpp b/src/libxrpl/net/HTTPClient.cpp index 8ddae12a7e..5cb01cb54b 100644 --- a/src/libxrpl/net/HTTPClient.cpp +++ b/src/libxrpl/net/HTTPClient.cpp @@ -59,6 +59,7 @@ public: //-------------------------------------------------------------------------- void + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) makeGet(std::string const& strPath, boost::asio::streambuf& sb, std::string const& strHost) { std::ostream osRequest(&sb); @@ -346,10 +347,10 @@ public: {std::istreambuf_iterator(&mHeader)}, std::istreambuf_iterator()}; JLOG(j_.trace()) << "Header: \"" << strHeader << "\""; - static boost::regex reStatus{"\\`HTTP/1\\S+ (\\d{3}) .*\\'"}; // HTTP/1.1 200 OK - static boost::regex reSize{ + static boost::regex const reStatus{"\\`HTTP/1\\S+ (\\d{3}) .*\\'"}; // HTTP/1.1 200 OK + static boost::regex const reSize{ "\\`.*\\r\\nContent-Length:\\s+([0-9]+).*\\'", boost::regex::icase}; - static boost::regex reBody{"\\`.*\\r\\n\\r\\n(.*)\\'"}; + static boost::regex const reBody{"\\`.*\\r\\n\\r\\n(.*)\\'"}; boost::smatch smMatch; // Match status code. @@ -427,7 +428,7 @@ public: else { mResponse.commit(bytes_transferred); - std::string strBody{ + std::string const strBody{ {std::istreambuf_iterator(&mResponse)}, std::istreambuf_iterator()}; invokeComplete(ecResult, mStatus, mBody + strBody); } @@ -546,7 +547,7 @@ HTTPClient::get( complete, beast::Journal& j) { - std::deque deqSites(1, strSite); + std::deque const deqSites(1, strSite); auto client = std::make_shared(io_context, port, responseMax, j); client->get(bSSL, deqSites, strPath, timeout, complete); @@ -566,7 +567,7 @@ HTTPClient::request( complete, beast::Journal& j) { - std::deque deqSites(1, strSite); + std::deque const deqSites(1, strSite); auto client = std::make_shared(io_context, port, responseMax, j); client->request(bSSL, deqSites, setRequest, timeout, complete); diff --git a/src/libxrpl/nodestore/BatchWriter.cpp b/src/libxrpl/nodestore/BatchWriter.cpp index 98fe78c489..75b9a8dcde 100644 --- a/src/libxrpl/nodestore/BatchWriter.cpp +++ b/src/libxrpl/nodestore/BatchWriter.cpp @@ -4,7 +4,7 @@ namespace xrpl { namespace NodeStore { BatchWriter::BatchWriter(Callback& callback, Scheduler& scheduler) - : m_callback(callback), m_scheduler(scheduler), mWriteLoad(0), mWritePending(false) + : m_callback(callback), m_scheduler(scheduler) { mWriteSet.reserve(batchWritePreallocationSize); } @@ -37,7 +37,7 @@ BatchWriter::store(std::shared_ptr const& object) int BatchWriter::getWriteLoad() { - std::lock_guard sl(mWriteMutex); + std::lock_guard const sl(mWriteMutex); return std::max(mWriteLoad, static_cast(mWriteSet.size())); } @@ -58,7 +58,7 @@ BatchWriter::writeBatch() set.reserve(batchWritePreallocationSize); { - std::lock_guard sl(mWriteMutex); + std::lock_guard const sl(mWriteMutex); mWriteSet.swap(set); XRPL_ASSERT( diff --git a/src/libxrpl/nodestore/Database.cpp b/src/libxrpl/nodestore/Database.cpp index 4e0d5be05d..5d9d153f57 100644 --- a/src/libxrpl/nodestore/Database.cpp +++ b/src/libxrpl/nodestore/Database.cpp @@ -122,7 +122,7 @@ void Database::stop() { { - std::lock_guard lock(readLock_); + std::lock_guard const lock(readLock_); if (!readStopping_.exchange(true, std::memory_order_relaxed)) { @@ -158,7 +158,7 @@ Database::asyncFetch( std::uint32_t ledgerSeq, std::function const&)>&& cb) { - std::lock_guard lock(readLock_); + std::lock_guard const lock(readLock_); if (!isStopping()) { @@ -238,7 +238,7 @@ Database::getCountsJson(Json::Value& obj) XRPL_ASSERT(obj.isObject(), "xrpl::NodeStore::Database::getCountsJson : valid input type"); { - std::unique_lock lock(readLock_); + std::unique_lock const lock(readLock_); obj["read_queue"] = static_cast(read_.size()); } diff --git a/src/libxrpl/nodestore/DatabaseRotatingImp.cpp b/src/libxrpl/nodestore/DatabaseRotatingImp.cpp index 6cf51fbf31..aa04b17b33 100644 --- a/src/libxrpl/nodestore/DatabaseRotatingImp.cpp +++ b/src/libxrpl/nodestore/DatabaseRotatingImp.cpp @@ -33,7 +33,7 @@ DatabaseRotatingImp::rotate( // deleted. std::shared_ptr oldArchiveBackend; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); archiveBackend_->setDeletePath(); oldArchiveBackend = std::move(archiveBackend_); @@ -50,14 +50,14 @@ DatabaseRotatingImp::rotate( std::string DatabaseRotatingImp::getName() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return writableBackend_->getName(); } std::int32_t DatabaseRotatingImp::getWriteLoad() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return writableBackend_->getWriteLoad(); } @@ -65,7 +65,7 @@ void DatabaseRotatingImp::importDatabase(Database& source) { auto const backend = [&] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return writableBackend_; }(); @@ -75,7 +75,7 @@ DatabaseRotatingImp::importDatabase(Database& source) void DatabaseRotatingImp::sync() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); writableBackend_->sync(); } @@ -85,7 +85,7 @@ DatabaseRotatingImp::store(NodeObjectType type, Blob&& data, uint256 const& hash auto nObj = NodeObject::createObject(type, std::move(data), hash); auto const backend = [&] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return writableBackend_; }(); @@ -133,7 +133,7 @@ DatabaseRotatingImp::fetchNodeObject( std::shared_ptr nodeObject; auto [writable, archive] = [&] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return std::make_pair(writableBackend_, archiveBackend_); }(); @@ -147,7 +147,7 @@ DatabaseRotatingImp::fetchNodeObject( { { // Refresh the writable backend pointer - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); writable = writableBackend_; } @@ -167,7 +167,7 @@ void DatabaseRotatingImp::for_each(std::function)> f) { auto [writable, archive] = [&] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return std::make_pair(writableBackend_, archiveBackend_); }(); diff --git a/src/libxrpl/nodestore/ManagerImp.cpp b/src/libxrpl/nodestore/ManagerImp.cpp index b749a329ff..7925ccdb91 100644 --- a/src/libxrpl/nodestore/ManagerImp.cpp +++ b/src/libxrpl/nodestore/ManagerImp.cpp @@ -55,7 +55,7 @@ ManagerImp::make_Backend( missing_backend(); auto factory{find(type)}; - if (!factory) + if (factory == nullptr) { missing_backend(); } @@ -80,14 +80,14 @@ ManagerImp::make_Database( void ManagerImp::insert(Factory& factory) { - std::lock_guard _(mutex_); + std::lock_guard const _(mutex_); list_.push_back(&factory); } void ManagerImp::erase(Factory& factory) { - std::lock_guard _(mutex_); + std::lock_guard const _(mutex_); auto const iter = std::find_if( list_.begin(), list_.end(), [&factory](Factory* other) { return other == &factory; }); XRPL_ASSERT(iter != list_.end(), "xrpl::NodeStore::ManagerImp::erase : valid input"); @@ -97,7 +97,7 @@ ManagerImp::erase(Factory& factory) Factory* ManagerImp::find(std::string const& name) { - std::lock_guard _(mutex_); + std::lock_guard const _(mutex_); auto const iter = std::find_if(list_.begin(), list_.end(), [&name](Factory* other) { return boost::iequals(name, other->getName()); }); diff --git a/src/libxrpl/nodestore/backend/MemoryFactory.cpp b/src/libxrpl/nodestore/backend/MemoryFactory.cpp index 0366fe3573..a245af3030 100644 --- a/src/libxrpl/nodestore/backend/MemoryFactory.cpp +++ b/src/libxrpl/nodestore/backend/MemoryFactory.cpp @@ -45,7 +45,7 @@ public: MemoryDB& open(std::string const& path) { - std::lock_guard _(mutex_); + std::lock_guard const _(mutex_); auto const result = map_.emplace(std::piecewise_construct, std::make_tuple(path), std::make_tuple()); MemoryDB& db = result.first->second; @@ -120,9 +120,9 @@ public: { XRPL_ASSERT(db_, "xrpl::NodeStore::MemoryBackend::fetch : non-null database"); - std::lock_guard _(db_->mutex); + std::lock_guard const _(db_->mutex); - Map::iterator iter = db_->table.find(hash); + Map::iterator const iter = db_->table.find(hash); if (iter == db_->table.end()) { pObject->reset(); @@ -140,7 +140,7 @@ public: for (auto const& h : hashes) { std::shared_ptr nObj; - Status status = fetch(h, &nObj); + Status const status = fetch(h, &nObj); if (status != ok) { results.push_back({}); @@ -158,7 +158,7 @@ public: store(std::shared_ptr const& object) override { XRPL_ASSERT(db_, "xrpl::NodeStore::MemoryBackend::store : non-null database"); - std::lock_guard _(db_->mutex); + std::lock_guard const _(db_->mutex); db_->table.emplace(object->getHash(), object); } diff --git a/src/libxrpl/nodestore/backend/NuDBFactory.cpp b/src/libxrpl/nodestore/backend/NuDBFactory.cpp index 2d8cffa85a..424778f280 100644 --- a/src/libxrpl/nodestore/backend/NuDBFactory.cpp +++ b/src/libxrpl/nodestore/backend/NuDBFactory.cpp @@ -214,7 +214,7 @@ public: for (auto const& h : hashes) { std::shared_ptr nObj; - Status status = fetch(h, &nObj); + Status const status = fetch(h, &nObj); if (status != ok) { results.push_back({}); @@ -231,7 +231,7 @@ public: void do_insert(std::shared_ptr const& no) { - EncodedBlob e(no); + EncodedBlob const e(no); nudb::error_code ec; nudb::detail::buffer bf; auto const result = nodeobject_compress(e.getData(), e.getSize(), bf); @@ -353,7 +353,7 @@ private: auto const kp = (folder / "nudb.key").string(); std::size_t const defaultSize = nudb::block_size(kp); // Default 4K from NuDB - std::size_t blockSize = defaultSize; + std::size_t const blockSize = defaultSize; std::string blockSizeStr; if (!get_if_exists(keyValues, "nudb_block_size", blockSizeStr)) @@ -434,7 +434,7 @@ public: void registerNuDBFactory(Manager& manager) { - static NuDBFactory instance{manager}; + static NuDBFactory const instance{manager}; } } // namespace NodeStore diff --git a/src/libxrpl/nodestore/backend/NullFactory.cpp b/src/libxrpl/nodestore/backend/NullFactory.cpp index ab5b7d0117..617dfd893d 100644 --- a/src/libxrpl/nodestore/backend/NullFactory.cpp +++ b/src/libxrpl/nodestore/backend/NullFactory.cpp @@ -117,7 +117,7 @@ public: void registerNullFactory(Manager& manager) { - static NullFactory instance{manager}; + static NullFactory const instance{manager}; } } // namespace NodeStore diff --git a/src/libxrpl/nodestore/backend/RocksDBFactory.cpp b/src/libxrpl/nodestore/backend/RocksDBFactory.cpp index 67c329bb4a..4ce7c3f10c 100644 --- a/src/libxrpl/nodestore/backend/RocksDBFactory.cpp +++ b/src/libxrpl/nodestore/backend/RocksDBFactory.cpp @@ -37,18 +37,17 @@ public: static void thread_entry(void* ptr) { - ThreadParams* const p(reinterpret_cast(ptr)); - void (*f)(void*) = p->f; + ThreadParams const* const p(reinterpret_cast(ptr)); + auto const f = p->f; + void* a(p->a); delete p; static std::atomic n; std::size_t const id(++n); - std::stringstream ss; - ss << "rocksdb #" << id; - beast::setCurrentThreadName(ss.str()); + beast::setCurrentThreadName("rocksdb #" + std::to_string(id)); - (*f)(a); + f(a); } void @@ -89,7 +88,7 @@ public: rocksdb::BlockBasedTableOptions table_options; m_options.env = env; - bool hard_set = keyValues.exists("hard_set") && get(keyValues, "hard_set"); + bool const hard_set = keyValues.exists("hard_set") && get(keyValues, "hard_set"); if (keyValues.exists("cache_mb")) { @@ -162,7 +161,7 @@ public: if (keyValues.exists("bbt_options")) { - rocksdb::ConfigOptions config_options; + rocksdb::ConfigOptions const config_options; auto const s = rocksdb::GetBlockBasedTableOptionsFromString( config_options, table_options, get(keyValues, "bbt_options"), &table_options); if (!s.ok()) @@ -212,8 +211,8 @@ public: } rocksdb::DB* db = nullptr; m_options.create_if_missing = createIfMissing; - rocksdb::Status status = rocksdb::DB::Open(m_options, m_name, &db); - if (!status.ok() || !db) + rocksdb::Status const status = rocksdb::DB::Open(m_options, m_name, &db); + if (!status.ok() || (db == nullptr)) { Throw( std::string("Unable to open/create RocksDB: ") + status.ToString()); @@ -235,7 +234,7 @@ public: m_db.reset(); if (m_deletePath) { - boost::filesystem::path dir = m_name; + boost::filesystem::path const dir = m_name; boost::filesystem::remove_all(dir); } } @@ -262,7 +261,7 @@ public: std::string string; - rocksdb::Status getStatus = m_db->Get(options, slice, &string); + rocksdb::Status const getStatus = m_db->Get(options, slice, &string); if (getStatus.ok()) { @@ -308,7 +307,7 @@ public: for (auto const& h : hashes) { std::shared_ptr nObj; - Status status = fetch(h, &nObj); + Status const status = fetch(h, &nObj); if (status != ok) { results.push_back({}); @@ -339,7 +338,7 @@ public: for (auto const& e : batch) { - EncodedBlob encoded(e); + EncodedBlob const encoded(e); wb.Put( rocksdb::Slice(std::bit_cast(encoded.getKey()), m_keyBytes), @@ -456,7 +455,7 @@ public: void registerRocksDBFactory(Manager& manager) { - static RocksDBFactory instance{manager}; + static RocksDBFactory const instance{manager}; } } // namespace NodeStore diff --git a/src/libxrpl/protocol/AccountID.cpp b/src/libxrpl/protocol/AccountID.cpp index 4edbf5c0e7..2c64457c87 100644 --- a/src/libxrpl/protocol/AccountID.cpp +++ b/src/libxrpl/protocol/AccountID.cpp @@ -55,7 +55,7 @@ public: packed_spinlock sl(locks_, index % 64); { - std::lock_guard lock(sl); + std::lock_guard const lock(sl); // The check against the first character of the encoding ensures // that we don't mishandle the case of the all-zero account: @@ -68,7 +68,7 @@ public: XRPL_ASSERT(ret.size() <= 38, "xrpl::detail::AccountIdCache : maximum result size"); { - std::lock_guard lock(sl); + std::lock_guard const lock(sl); cache_[index].id = id; std::strcpy(cache_[index].encoding, ret.c_str()); } diff --git a/src/libxrpl/protocol/BuildInfo.cpp b/src/libxrpl/protocol/BuildInfo.cpp index 7d9a2047a9..0fddb9ff19 100644 --- a/src/libxrpl/protocol/BuildInfo.cpp +++ b/src/libxrpl/protocol/BuildInfo.cpp @@ -113,7 +113,7 @@ encodeSoftwareVersion(std::string_view versionStr) { std::uint8_t x = 0; - for (auto id : v.preReleaseIdentifiers) + for (auto const& id : v.preReleaseIdentifiers) { auto parsePreRelease = [](std::string_view identifier, std::string_view prefix, @@ -140,7 +140,7 @@ encodeSoftwareVersion(std::string_view versionStr) if (x == 0) x = parsePreRelease(id, "b", 0x40, 0, 63); - if (x & 0xC0) + if ((x & 0xC0) != 0) { c |= static_cast(x) << 16; break; diff --git a/src/libxrpl/protocol/ErrorCodes.cpp b/src/libxrpl/protocol/ErrorCodes.cpp index 33ec869db6..407e1ab3f3 100644 --- a/src/libxrpl/protocol/ErrorCodes.cpp +++ b/src/libxrpl/protocol/ErrorCodes.cpp @@ -205,9 +205,7 @@ make_error(error_code_i code, std::string const& message) bool contains_error(Json::Value const& json) { - if (json.isObject() && json.isMember(jss::error)) - return true; - return false; + return json.isObject() && json.isMember(jss::error); } int diff --git a/src/libxrpl/protocol/Feature.cpp b/src/libxrpl/protocol/Feature.cpp index f91e164c92..1762d7d22d 100644 --- a/src/libxrpl/protocol/Feature.cpp +++ b/src/libxrpl/protocol/Feature.cpp @@ -209,7 +209,7 @@ FeatureCollections::getRegisteredFeature(std::string const& name) const XRPL_ASSERT( readOnly.load(), "xrpl::FeatureCollections::getRegisteredFeature : startup completed"); Feature const* feature = getByName(name); - if (feature) + if (feature != nullptr) return feature->feature; return std::nullopt; } @@ -229,7 +229,7 @@ FeatureCollections::registerFeature(std::string const& name, Supported support, support == Supported::yes || vote == VoteBehavior::DefaultNo, "Invalid feature parameters. Must be supported to be up-voted."); Feature const* i = getByName(name); - if (!i) + if (i == nullptr) { check(features.size() < detail::numFeatures, "More features defined than allocated."); @@ -283,7 +283,7 @@ FeatureCollections::featureToBitsetIndex(uint256 const& f) const readOnly.load(), "xrpl::FeatureCollections::featureToBitsetIndex : startup completed"); Feature const* feature = getByFeature(f); - if (!feature) + if (feature == nullptr) LogicError("Invalid Feature ID"); return getIndex(*feature); @@ -303,7 +303,7 @@ FeatureCollections::featureToName(uint256 const& f) const { XRPL_ASSERT(readOnly.load(), "xrpl::FeatureCollections::featureToName : startup completed"); Feature const* feature = getByFeature(f); - return feature ? feature->name : to_string(f); + return (feature != nullptr) ? feature->name : to_string(f); } FeatureCollections featureCollections; diff --git a/src/libxrpl/protocol/IOUAmount.cpp b/src/libxrpl/protocol/IOUAmount.cpp index eba78e6051..338f2c2760 100644 --- a/src/libxrpl/protocol/IOUAmount.cpp +++ b/src/libxrpl/protocol/IOUAmount.cpp @@ -186,7 +186,7 @@ mulRatio(IOUAmount const& amt, std::uint32_t num, std::uint32_t den, bool roundU { using namespace boost::multiprecision; - if (!den) + if (den == 0u) Throw("division by zero"); // A vector with the value 10^index for indexes from 0 to 29 diff --git a/src/libxrpl/protocol/InnerObjectFormats.cpp b/src/libxrpl/protocol/InnerObjectFormats.cpp index 8139ef0f55..8429c51aea 100644 --- a/src/libxrpl/protocol/InnerObjectFormats.cpp +++ b/src/libxrpl/protocol/InnerObjectFormats.cpp @@ -164,7 +164,7 @@ InnerObjectFormats::InnerObjectFormats() InnerObjectFormats const& InnerObjectFormats::getInstance() { - static InnerObjectFormats instance; + static InnerObjectFormats const instance; return instance; } @@ -172,7 +172,7 @@ SOTemplate const* InnerObjectFormats::findSOTemplateBySField(SField const& sField) const { auto itemPtr = findByType(sField.getCode()); - if (itemPtr) + if (itemPtr != nullptr) return &(itemPtr->getSOTemplate()); return nullptr; diff --git a/src/libxrpl/protocol/LedgerFormats.cpp b/src/libxrpl/protocol/LedgerFormats.cpp index 30725f44a9..9f8bd6a2ba 100644 --- a/src/libxrpl/protocol/LedgerFormats.cpp +++ b/src/libxrpl/protocol/LedgerFormats.cpp @@ -40,7 +40,7 @@ LedgerFormats::LedgerFormats() LedgerFormats const& LedgerFormats::getInstance() { - static LedgerFormats instance; + static LedgerFormats const instance; return instance; } diff --git a/src/libxrpl/protocol/LedgerHeader.cpp b/src/libxrpl/protocol/LedgerHeader.cpp index 270833c6fa..38e7a7f6dd 100644 --- a/src/libxrpl/protocol/LedgerHeader.cpp +++ b/src/libxrpl/protocol/LedgerHeader.cpp @@ -1,7 +1,9 @@ #include #include +#include #include #include +#include namespace xrpl { @@ -51,4 +53,21 @@ deserializePrefixedHeader(Slice data, bool hasHash) return deserializeHeader(data + 4, hasHash); } +uint256 +calculateLedgerHash(LedgerHeader const& info) +{ + // VFALCO This has to match addRaw in View.h. + return sha512Half( + HashPrefix::ledgerMaster, + std::uint32_t(info.seq), + std::uint64_t(info.drops.drops()), + info.parentHash, + info.txHash, + info.accountHash, + std::uint32_t(info.parentCloseTime.time_since_epoch().count()), + std::uint32_t(info.closeTime.time_since_epoch().count()), + std::uint8_t(info.closeTimeResolution.count()), + std::uint8_t(info.closeFlags)); +} + } // namespace xrpl diff --git a/src/libxrpl/protocol/NFTokenID.cpp b/src/libxrpl/protocol/NFTokenID.cpp index d867cdb8c9..a808ef1fcf 100644 --- a/src/libxrpl/protocol/NFTokenID.cpp +++ b/src/libxrpl/protocol/NFTokenID.cpp @@ -159,7 +159,7 @@ insertNFTokenID( } else if (type == ttNFTOKEN_CANCEL_OFFER) { - std::vector result = getNFTokenIDFromDeletedOffer(transactionMeta); + std::vector const result = getNFTokenIDFromDeletedOffer(transactionMeta); response[jss::nftoken_ids] = Json::Value(Json::arrayValue); for (auto const& nftID : result) diff --git a/src/libxrpl/protocol/NFTokenOfferID.cpp b/src/libxrpl/protocol/NFTokenOfferID.cpp index e7ebbcf84b..4af589a4e9 100644 --- a/src/libxrpl/protocol/NFTokenOfferID.cpp +++ b/src/libxrpl/protocol/NFTokenOfferID.cpp @@ -24,7 +24,7 @@ canHaveNFTokenOfferID( return false; TxType const tt = serializedTx->getTxnType(); - if (!(tt == ttNFTOKEN_MINT && serializedTx->isFieldPresent(sfAmount)) && + if ((tt != ttNFTOKEN_MINT || !serializedTx->isFieldPresent(sfAmount)) && tt != ttNFTOKEN_CREATE_OFFER) return false; diff --git a/src/libxrpl/protocol/Permissions.cpp b/src/libxrpl/protocol/Permissions.cpp index 4137c73624..47fc0d28b6 100644 --- a/src/libxrpl/protocol/Permissions.cpp +++ b/src/libxrpl/protocol/Permissions.cpp @@ -176,13 +176,13 @@ Permission::isDelegable(std::uint32_t const& permissionValue, Rules const& rules } uint32_t -Permission::txToPermissionType(TxType const& type) const +Permission::txToPermissionType(TxType const& type) { return static_cast(type) + 1; } TxType -Permission::permissionToTxType(uint32_t const& value) const +Permission::permissionToTxType(uint32_t const& value) { return static_cast(value - 1); } diff --git a/src/libxrpl/protocol/PublicKey.cpp b/src/libxrpl/protocol/PublicKey.cpp index 2c63ddac64..fc63edd2fc 100644 --- a/src/libxrpl/protocol/PublicKey.cpp +++ b/src/libxrpl/protocol/PublicKey.cpp @@ -75,7 +75,7 @@ static std::string sliceToHex(Slice const& slice) { std::string s; - if (slice[0] & 0x80) + if ((slice[0] & 0x80) != 0) { s.reserve(2 * (slice.size() + 2)); s = "0x00"; @@ -130,11 +130,11 @@ ecdsaCanonicality(Slice const& sig) if (!r || !s || !p.empty()) return std::nullopt; - uint264 R(sliceToHex(*r)); + uint264 const R(sliceToHex(*r)); if (R >= G) return std::nullopt; - uint264 S(sliceToHex(*s)); + uint264 const S(sliceToHex(*s)); if (S >= G) return std::nullopt; diff --git a/src/libxrpl/protocol/QualityFunction.cpp b/src/libxrpl/protocol/QualityFunction.cpp index ebc59dcc83..1774603a61 100644 --- a/src/libxrpl/protocol/QualityFunction.cpp +++ b/src/libxrpl/protocol/QualityFunction.cpp @@ -31,7 +31,7 @@ QualityFunction::outFromAvgQ(Quality const& quality) { if (m_ != 0 && quality.rate() != beast::zero) { - saveNumberRoundMode rm(Number::setround(Number::rounding_mode::upward)); + saveNumberRoundMode const rm(Number::setround(Number::rounding_mode::upward)); auto const out = (1 / quality.rate() - b_) / m_; if (out <= 0) return std::nullopt; diff --git a/src/libxrpl/protocol/Rules.cpp b/src/libxrpl/protocol/Rules.cpp index 4ef052d2cc..fd54a1eff2 100644 --- a/src/libxrpl/protocol/Rules.cpp +++ b/src/libxrpl/protocol/Rules.cpp @@ -39,7 +39,7 @@ setCurrentTransactionRules(std::optional r) // Make global changes associated with the rules before the value is moved. // Push the appropriate setting, instead of having the class pull every time // the value is needed. That could get expensive fast. - bool enableLargeNumbers = + bool const enableLargeNumbers = !r || (r->enabled(featureSingleAssetVault) || r->enabled(featureLendingProtocol)); Number::setMantissaScale(enableLargeNumbers ? MantissaRange::large : MantissaRange::small); diff --git a/src/libxrpl/protocol/STAccount.cpp b/src/libxrpl/protocol/STAccount.cpp index ffd0b5d3c8..2dc83cb591 100644 --- a/src/libxrpl/protocol/STAccount.cpp +++ b/src/libxrpl/protocol/STAccount.cpp @@ -84,7 +84,7 @@ bool STAccount::isEquivalent(STBase const& t) const { auto const* const tPtr = dynamic_cast(&t); - return tPtr && (default_ == tPtr->default_) && (value_ == tPtr->value_); + return (tPtr != nullptr) && (default_ == tPtr->default_) && (value_ == tPtr->value_); } bool diff --git a/src/libxrpl/protocol/STAmount.cpp b/src/libxrpl/protocol/STAmount.cpp index 92ce129825..cc935cff61 100644 --- a/src/libxrpl/protocol/STAmount.cpp +++ b/src/libxrpl/protocol/STAmount.cpp @@ -152,9 +152,9 @@ STAmount::STAmount(SerialIter& sit, SField const& name) : STBase(name) value &= ~(1023ull << (64 - 10)); - if (value) + if (value != 0u) { - bool isNegative = (offset & 256) == 0; + bool const isNegative = (offset & 256) == 0; offset = (offset & 255) - 97; // center the range if (value < cMinValue || value > cMaxValue || offset < cMinOffset || offset > cMaxOffset) @@ -181,7 +181,7 @@ STAmount::STAmount(SerialIter& sit, SField const& name) : STBase(name) } STAmount::STAmount(SField const& name, std::int64_t mantissa) - : STBase(name), mAsset(xrpIssue()), mValue(0), mOffset(0), mIsNegative(false) + : STBase(name), mAsset(xrpIssue()), mOffset(0) { set(mantissa); } @@ -410,7 +410,7 @@ operator+(STAmount const& v1, STAmount const& v2) // This addition cannot overflow an std::int64_t. It can overflow an // STAmount and the constructor will throw. - std::int64_t fv = vv1 + vv2; + std::int64_t const fv = vv1 + vv2; if ((fv >= -10) && (fv <= 10)) return {v1.getFName(), v1.asset()}; @@ -454,13 +454,13 @@ getRate(STAmount const& offerOut, STAmount const& offerIn) try { - STAmount r = divide(offerIn, offerOut, noIssue()); + STAmount const r = divide(offerIn, offerOut, noIssue()); if (r == beast::zero) // offer is too good return 0; XRPL_ASSERT( (r.exponent() >= -100) && (r.exponent() <= 155), "xrpl::getRate : exponent inside range"); - std::uint64_t ret = r.exponent() + 100; + std::uint64_t const ret = r.exponent() + 100; return (ret << (64 - 8)) | r.mantissa(); } catch (...) @@ -502,17 +502,14 @@ canAdd(STAmount const& a, STAmount const& b) // XRP case (overflow & underflow check) if (isXRP(a) && isXRP(b)) { - XRPAmount A = a.xrp(); - XRPAmount B = b.xrp(); + XRPAmount const A = a.xrp(); + XRPAmount const B = b.xrp(); - if ((B > XRPAmount{0} && + return !( + (B > XRPAmount{0} && A > XRPAmount{std::numeric_limits::max()} - B) || (B < XRPAmount{0} && - A < XRPAmount{std::numeric_limits::min()} - B)) - { - return false; - } - return true; + A < XRPAmount{std::numeric_limits::min()} - B)); } // IOU case (precision check) @@ -520,25 +517,21 @@ canAdd(STAmount const& a, STAmount const& b) { static STAmount const one{IOUAmount{1, 0}, noIssue()}; static STAmount const maxLoss{IOUAmount{1, -4}, noIssue()}; - STAmount lhs = divide((a - b) + b, a, noIssue()) - one; - STAmount rhs = divide((b - a) + a, b, noIssue()) - one; + STAmount const lhs = divide((a - b) + b, a, noIssue()) - one; + STAmount const rhs = divide((b - a) + a, b, noIssue()) - one; return ((rhs.negative() ? -rhs : rhs) + (lhs.negative() ? -lhs : lhs)) <= maxLoss; } // MPT (overflow & underflow check) if (a.holds() && b.holds()) { - MPTAmount A = a.mpt(); - MPTAmount B = b.mpt(); - if ((B > MPTAmount{0} && + MPTAmount const A = a.mpt(); + MPTAmount const B = b.mpt(); + return !( + (B > MPTAmount{0} && A > MPTAmount{std::numeric_limits::max()} - B) || (B < MPTAmount{0} && - A < MPTAmount{std::numeric_limits::min()} - B)) - { - return false; - } - - return true; + A < MPTAmount{std::numeric_limits::min()} - B)); } // LCOV_EXCL_START UNREACHABLE("STAmount::canAdd : unexpected STAmount type"); @@ -577,8 +570,8 @@ canSubtract(STAmount const& a, STAmount const& b) // XRP case (underflow & overflow check) if (isXRP(a) && isXRP(b)) { - XRPAmount A = a.xrp(); - XRPAmount B = b.xrp(); + XRPAmount const A = a.xrp(); + XRPAmount const B = b.xrp(); // Check for underflow if (B > XRPAmount{0} && A < B) return false; @@ -600,8 +593,8 @@ canSubtract(STAmount const& a, STAmount const& b) // MPT case (underflow & overflow check) if (a.holds() && b.holds()) { - MPTAmount A = a.mpt(); - MPTAmount B = b.mpt(); + MPTAmount const A = a.mpt(); + MPTAmount const B = b.mpt(); // Underflow check if (B > MPTAmount{0} && A < B) @@ -803,7 +796,7 @@ bool STAmount::isEquivalent(STBase const& t) const { STAmount const* v = dynamic_cast(&t); - return v && (*v == *this); + return (v != nullptr) && (*v == *this); } bool @@ -854,7 +847,7 @@ STAmount::canonicalize() if (getSTNumberSwitchover()) { - Number num(mIsNegative, mValue, mOffset, Number::unchecked{}); + Number const num(mIsNegative, mValue, mOffset, Number::unchecked{}); auto set = [&](auto const& val) { auto const value = val.value(); mIsNegative = value < 0; @@ -984,8 +977,8 @@ amountFromQuality(std::uint64_t rate) if (rate == 0) return STAmount(noIssue()); - std::uint64_t mantissa = rate & ~(255ull << (64 - 8)); - int exponent = static_cast(rate >> (64 - 8)) - 100; + std::uint64_t const mantissa = rate & ~(255ull << (64 - 8)); + int const exponent = static_cast(rate >> (64 - 8)) - 100; return STAmount(noIssue(), mantissa, exponent); } @@ -1481,7 +1474,7 @@ roundToScale(STAmount const& value, std::int32_t scale, Number::rounding_mode ro STAmount const referenceValue{value.asset(), STAmount::cMinValue, scale, value.negative()}; - NumberRoundModeGuard mg(rounding); + NumberRoundModeGuard const mg(rounding); // With an IOU, the the result of addition will be truncated to the // precision of the larger value, which in this case is referenceValue. Then // remove the reference value via subtraction, and we're left with the @@ -1523,8 +1516,8 @@ mulRoundImpl(STAmount const& v1, STAmount const& v2, Asset const& asset, bool ro if (v1.native() && v2.native() && xrp) { - std::uint64_t minV = std::min(getSNValue(v1), getSNValue(v2)); - std::uint64_t maxV = std::max(getSNValue(v1), getSNValue(v2)); + std::uint64_t const minV = std::min(getSNValue(v1), getSNValue(v2)); + std::uint64_t const maxV = std::max(getSNValue(v1), getSNValue(v2)); if (minV > 3000000000ull) // sqrt(cMaxNative) Throw("Native value overflow"); diff --git a/src/libxrpl/protocol/STBlob.cpp b/src/libxrpl/protocol/STBlob.cpp index 1a9dae7771..e7d45a698d 100644 --- a/src/libxrpl/protocol/STBlob.cpp +++ b/src/libxrpl/protocol/STBlob.cpp @@ -53,7 +53,7 @@ bool STBlob::isEquivalent(STBase const& t) const { STBlob const* v = dynamic_cast(&t); - return v && (value_ == v->value_); + return (v != nullptr) && (value_ == v->value_); } bool diff --git a/src/libxrpl/protocol/STCurrency.cpp b/src/libxrpl/protocol/STCurrency.cpp index 1616de59b9..3ca7b60d6b 100644 --- a/src/libxrpl/protocol/STCurrency.cpp +++ b/src/libxrpl/protocol/STCurrency.cpp @@ -56,7 +56,7 @@ bool STCurrency::isEquivalent(STBase const& t) const { STCurrency const* v = dynamic_cast(&t); - return v && (*v == *this); + return (v != nullptr) && (*v == *this); } bool diff --git a/src/libxrpl/protocol/STIssue.cpp b/src/libxrpl/protocol/STIssue.cpp index 1d37554251..5acf4abcb6 100644 --- a/src/libxrpl/protocol/STIssue.cpp +++ b/src/libxrpl/protocol/STIssue.cpp @@ -38,7 +38,7 @@ STIssue::STIssue(SerialIter& sit, SField const& name) : STBase{name} // - 160 bits MPT issuer account // - 160 bits black hole account // - 32 bits sequence - AccountID account = static_cast(sit.get160()); + AccountID const account = static_cast(sit.get160()); // MPT if (noAccount() == account) { @@ -50,7 +50,7 @@ STIssue::STIssue(SerialIter& sit, SField const& name) : STBase{name} mptID.data() + sizeof(sequence), currencyOrAccount.data(), sizeof(currencyOrAccount)); - MPTIssue issue{mptID}; + MPTIssue const issue{mptID}; asset_ = issue; } else @@ -110,7 +110,7 @@ bool STIssue::isEquivalent(STBase const& t) const { STIssue const* v = dynamic_cast(&t); - return v && (*v == *this); + return (v != nullptr) && (*v == *this); } bool diff --git a/src/libxrpl/protocol/STLedgerEntry.cpp b/src/libxrpl/protocol/STLedgerEntry.cpp index aa97b6b3a2..5a80559c98 100644 --- a/src/libxrpl/protocol/STLedgerEntry.cpp +++ b/src/libxrpl/protocol/STLedgerEntry.cpp @@ -136,7 +136,7 @@ STLedgerEntry::isThreadedType(Rules const& rules) const // Exclude PrevTxnID/PrevTxnLgrSeq if the fixPreviousTxnID amendment is not // enabled and the ledger object type is in the above set bool const excludePrevTxnID = !rules.enabled(fixPreviousTxnID) && - std::count(newPreviousTxnIDTypes.cbegin(), newPreviousTxnIDTypes.cend(), type_); + (std::count(newPreviousTxnIDTypes.cbegin(), newPreviousTxnIDTypes.cend(), type_) != 0); return !excludePrevTxnID && getFieldIndex(sfPreviousTxnID) != -1; } @@ -147,7 +147,7 @@ STLedgerEntry::thread( uint256& prevTxID, std::uint32_t& prevLedgerID) { - uint256 oldPrevTxID = getFieldH256(sfPreviousTxnID); + uint256 const oldPrevTxID = getFieldH256(sfPreviousTxnID); JLOG(debugLog().info()) << "Thread Tx:" << txID << " prev:" << oldPrevTxID; diff --git a/src/libxrpl/protocol/STNumber.cpp b/src/libxrpl/protocol/STNumber.cpp index aab4bdc0f5..8899a76a35 100644 --- a/src/libxrpl/protocol/STNumber.cpp +++ b/src/libxrpl/protocol/STNumber.cpp @@ -177,7 +177,7 @@ partsFromString(std::string const& number) // 6 = exponent sign // 7 = exponent number - bool negative = (match[1].matched && (match[1] == "-")); + bool const negative = (match[1].matched && (match[1] == "-")); std::uint64_t mantissa = 0; int exponent = 0; @@ -241,6 +241,7 @@ numberFromJson(SField const& field, Json::Value const& value) // Number mantissas are much bigger than the allowable parsed values, so // it can't be out of range. static_assert( + // NOLINTNEXTLINE(misc-redundant-expression) std::numeric_limits::max() >= std::numeric_limits::max()); } diff --git a/src/libxrpl/protocol/STObject.cpp b/src/libxrpl/protocol/STObject.cpp index fe9e95cc82..f758760337 100644 --- a/src/libxrpl/protocol/STObject.cpp +++ b/src/libxrpl/protocol/STObject.cpp @@ -156,7 +156,7 @@ STObject::applyTemplate(SOTemplate const& type) auto throwFieldErr = [](std::string const& field, char const* description) { std::stringstream ss; ss << "Field '" << field << "' " << description; - std::string text{ss.str()}; + std::string const text{ss.str()}; JLOG(debugLog().error()) << "STObject::applyTemplate failed: " << text; Throw(text); }; @@ -204,7 +204,7 @@ void STObject::applyTemplateFromSField(SField const& sField) { SOTemplate const* elements = InnerObjectFormats::getInstance().findSOTemplateBySField(sField); - if (elements) + if (elements != nullptr) applyTemplate(*elements); // May throw } @@ -276,7 +276,7 @@ STObject::hasMatchingEntry(STBase const& t) const { STBase const* o = peekAtPField(t.getFName()); - if (!o) + if (o == nullptr) return false; return t == *o; @@ -343,7 +343,7 @@ STObject::isEquivalent(STBase const& t) const { STObject const* v = dynamic_cast(&t); - if (!v) + if (v == nullptr) return false; if (mType != nullptr && v->mType == mType) @@ -400,7 +400,7 @@ STObject::getFieldIndex(SField const& field) const STBase const& STObject::peekAtField(SField const& field) const { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) throwFieldNotFound(field); @@ -411,7 +411,7 @@ STObject::peekAtField(SField const& field) const STBase& STObject::getField(SField const& field) { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) throwFieldNotFound(field); @@ -428,7 +428,7 @@ STObject::getFieldSType(int index) const STBase const* STObject::peekAtPField(SField const& field) const { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) return nullptr; @@ -439,7 +439,7 @@ STObject::peekAtPField(SField const& field) const STBase* STObject::getPField(SField const& field, bool createOkay) { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) { @@ -455,7 +455,7 @@ STObject::getPField(SField const& field, bool createOkay) bool STObject::isFieldPresent(SField const& field) const { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) return false; @@ -480,7 +480,7 @@ STObject::setFlag(std::uint32_t f) { STUInt32* t = dynamic_cast(getPField(sfFlags, true)); - if (!t) + if (t == nullptr) return false; t->setValue(t->value() | f); @@ -492,7 +492,7 @@ STObject::clearFlag(std::uint32_t f) { STUInt32* t = dynamic_cast(getPField(sfFlags)); - if (!t) + if (t == nullptr) return false; t->setValue(t->value() & ~f); @@ -510,7 +510,7 @@ STObject::getFlags(void) const { STUInt32 const* t = dynamic_cast(peekAtPField(sfFlags)); - if (!t) + if (t == nullptr) return 0; return t->value(); @@ -519,7 +519,7 @@ STObject::getFlags(void) const STBase* STObject::makeFieldPresent(SField const& field) { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) { @@ -529,7 +529,7 @@ STObject::makeFieldPresent(SField const& field) return getPIndex(emplace_back(detail::nonPresentObject, field)); } - STBase* f = getPIndex(index); + STBase* f = getPIndex(index); // NOLINT(misc-const-correctness) if (f->getSType() != STI_NOTPRESENT) return f; @@ -541,7 +541,7 @@ STObject::makeFieldPresent(SField const& field) void STObject::makeFieldAbsent(SField const& field) { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) throwFieldNotFound(field); @@ -556,7 +556,7 @@ STObject::makeFieldAbsent(SField const& field) bool STObject::delField(SField const& field) { - int index = getFieldIndex(field); + int const index = getFieldIndex(field); if (index == -1) return false; @@ -574,7 +574,7 @@ STObject::delField(int index) SOEStyle STObject::getStyle(SField const& field) const { - return mType ? mType->style(field) : soeINVALID; + return (mType != nullptr) ? mType->style(field) : soeINVALID; } unsigned char @@ -640,7 +640,7 @@ STObject::getAccountID(SField const& field) const Blob STObject::getFieldVL(SField const& field) const { - STBlob empty; + STBlob const empty; STBlob const& b = getFieldByConstRef(field, empty); return Blob(b.data(), b.data() + b.size()); } @@ -877,10 +877,7 @@ STObject::operator==(STObject const& obj) const ++fields; } - if (fields != matches) - return false; - - return true; + return fields == matches; } void @@ -917,7 +914,8 @@ STObject::getSortedFields(STObject const& objToSort, WhichFields whichFields) for (detail::STVar const& elem : objToSort.v_) { STBase const& base = elem.get(); - if ((base.getSType() != STI_NOTPRESENT) && base.getFName().shouldInclude(whichFields)) + if ((base.getSType() != STI_NOTPRESENT) && + base.getFName().shouldInclude(static_cast(whichFields))) { sf.push_back(&base); } diff --git a/src/libxrpl/protocol/STParsedJSON.cpp b/src/libxrpl/protocol/STParsedJSON.cpp index 0bf0c827af..c928f49375 100644 --- a/src/libxrpl/protocol/STParsedJSON.cpp +++ b/src/libxrpl/protocol/STParsedJSON.cpp @@ -1075,25 +1075,25 @@ parseArray( // TODO: There doesn't seem to be a nice way to get just the // first/only key in an object without copying all keys into // a vector - std::string const objectName(json[i].getMemberNames()[0]); + std::string const memberName(json[i].getMemberNames()[0]); ; - auto const& nameField(SField::getField(objectName)); + auto const& nameField(SField::getField(memberName)); if (nameField == sfInvalid) { - error = unknown_field(json_name, objectName); + error = unknown_field(json_name, memberName); return std::nullopt; } - Json::Value const objectFields(json[i][objectName]); + Json::Value const objectFields(json[i][memberName]); std::stringstream ss; - ss << json_name << "." << "[" << i << "]." << objectName; + ss << json_name << "." << "[" << i << "]." << memberName; auto ret = parseObject(ss.str(), objectFields, nameField, depth + 1, error); if (!ret) { - std::string errMsg = error["error_message"].asString(); + std::string const errMsg = error["error_message"].asString(); error["error_message"] = "Error at '" + ss.str() + "'. " + errMsg; return std::nullopt; } diff --git a/src/libxrpl/protocol/STPathSet.cpp b/src/libxrpl/protocol/STPathSet.cpp index 060f5c4d7c..2536c18e4e 100644 --- a/src/libxrpl/protocol/STPathSet.cpp +++ b/src/libxrpl/protocol/STPathSet.cpp @@ -45,7 +45,7 @@ STPathSet::STPathSet(SerialIter& sit, SField const& name) : STBase(name) std::vector path; for (;;) { - int iType = sit.get8(); + int const iType = sit.get8(); if (iType == STPathElement::typeNone || iType == STPathElement::typeBoundary) { @@ -61,7 +61,7 @@ STPathSet::STPathSet(SerialIter& sit, SField const& name) : STBase(name) if (iType == STPathElement::typeNone) return; } - else if (iType & ~STPathElement::typeAll) + else if ((iType & ~STPathElement::typeAll) != 0) { JLOG(debugLog().error()) << "Bad path element " << iType << " in pathset"; Throw("bad path element"); @@ -76,13 +76,13 @@ STPathSet::STPathSet(SerialIter& sit, SField const& name) : STBase(name) Currency currency; AccountID issuer; - if (hasAccount) + if (hasAccount != 0) account = sit.get160(); - if (hasCurrency) + if (hasCurrency != 0) currency = sit.get160(); - if (hasIssuer) + if (hasIssuer != 0) issuer = sit.get160(); path.emplace_back(account, currency, issuer, hasCurrency); @@ -127,7 +127,7 @@ bool STPathSet::isEquivalent(STBase const& t) const { STPathSet const* v = dynamic_cast(&t); - return v && (value == v->value); + return (v != nullptr) && (value == v->value); } bool @@ -153,20 +153,20 @@ STPath::getJson(JsonOptions) const { Json::Value ret(Json::arrayValue); - for (auto it : mPath) + for (auto const& it : mPath) { Json::Value elem(Json::objectValue); auto const iType = it.getNodeType(); elem[jss::type] = iType; - if (iType & STPathElement::typeAccount) + if ((iType & STPathElement::typeAccount) != 0u) elem[jss::account] = to_string(it.getAccountID()); - if (iType & STPathElement::typeCurrency) + if ((iType & STPathElement::typeCurrency) != 0u) elem[jss::currency] = to_string(it.getCurrency()); - if (iType & STPathElement::typeIssuer) + if ((iType & STPathElement::typeIssuer) != 0u) elem[jss::issuer] = to_string(it.getIssuerID()); ret.append(elem); @@ -179,7 +179,7 @@ Json::Value STPathSet::getJson(JsonOptions options) const { Json::Value ret(Json::arrayValue); - for (auto it : value) + for (auto const& it : value) ret.append(it.getJson(options)); return ret; @@ -205,17 +205,17 @@ STPathSet::add(Serializer& s) const for (auto const& speElement : spPath) { - int iType = speElement.getNodeType(); + int const iType = speElement.getNodeType(); s.add8(iType); - if (iType & STPathElement::typeAccount) + if ((iType & STPathElement::typeAccount) != 0) s.addBitString(speElement.getAccountID()); - if (iType & STPathElement::typeCurrency) + if ((iType & STPathElement::typeCurrency) != 0) s.addBitString(speElement.getCurrency()); - if (iType & STPathElement::typeIssuer) + if ((iType & STPathElement::typeIssuer) != 0) s.addBitString(speElement.getIssuerID()); } diff --git a/src/libxrpl/protocol/STTx.cpp b/src/libxrpl/protocol/STTx.cpp index 00a2acd788..f8600e167f 100644 --- a/src/libxrpl/protocol/STTx.cpp +++ b/src/libxrpl/protocol/STTx.cpp @@ -77,7 +77,7 @@ STTx::STTx(STObject&& object) : STObject(std::move(object)) STTx::STTx(SerialIter& sit) : STObject(sfTransaction) { - int length = sit.getBytesLeft(); + int const length = sit.getBytesLeft(); if ((length < txMinSizeBytes) || (length > txMaxSizeBytes)) Throw("Transaction length invalid"); @@ -329,7 +329,7 @@ STTx::getJson(JsonOptions options, bool binary) const if (binary) { - Serializer s = STObject::getSerializer(); + Serializer const s = STObject::getSerializer(); std::string const dataBin = strHex(s.peekData()); if (V1) @@ -378,7 +378,7 @@ STTx::getMetaSQL( TxnSql status, std::string const& escapedMetaData) const { - static boost::format bfTrans("('%s', '%s', '%s', '%d', '%d', '%c', %s, %s)"); + static boost::format const bfTrans("('%s', '%s', '%s', '%d', '%d', '%c', %s, %s)"); std::string rTxn = sqlBlobLiteral(rawTxn.peekData()); auto format = TxFormats::getInstance().findByType(tx_type_); @@ -574,7 +574,7 @@ STTx::getBatchTransactionIDs() const { XRPL_ASSERT(getTxnType() == ttBATCH, "STTx::getBatchTransactionIDs : not a batch transaction"); XRPL_ASSERT( - getFieldArray(sfRawTransactions).size() != 0, + !getFieldArray(sfRawTransactions).empty(), "STTx::getBatchTransactionIDs : empty raw transactions"); // The list of inner ids is built once, then reused on subsequent calls. @@ -618,7 +618,7 @@ isMemoOkay(STObject const& st, std::string& reason) { auto memoObj = dynamic_cast(&memo); - if (!memoObj || (memoObj->getFName() != sfMemo)) + if ((memoObj == nullptr) || (memoObj->getFName() != sfMemo)) { reason = "A memo array may contain only Memo objects."; return false; @@ -656,20 +656,20 @@ isMemoOkay(STObject const& st, std::string& reason) static constexpr std::array const allowedSymbols = []() { std::array a{}; - std::string_view symbols( + std::string_view const symbols( "0123456789" "-._~:/?#[]@!$&'()*+,;=%" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"); - for (unsigned char c : symbols) + for (unsigned char const c : symbols) a[c] = 1; return a; }(); - for (unsigned char c : *optData) + for (unsigned char const c : *optData) { - if (!allowedSymbols[c]) + if (allowedSymbols[c] == 0) { reason = "The MemoType and MemoFormat fields may only " @@ -691,7 +691,7 @@ isAccountFieldOkay(STObject const& st) for (int i = 0; i < st.getCount(); ++i) { auto t = dynamic_cast(st.peekAtPIndex(i)); - if (t && t->isDefault()) + if ((t != nullptr) && t->isDefault()) return false; } diff --git a/src/libxrpl/protocol/STValidation.cpp b/src/libxrpl/protocol/STValidation.cpp index 7362a45d84..3da706f331 100644 --- a/src/libxrpl/protocol/STValidation.cpp +++ b/src/libxrpl/protocol/STValidation.cpp @@ -38,22 +38,22 @@ STValidation::validationFormat() // guarantee the initialization order. // clang-format off static SOTemplate const format{ - {sfFlags, soeREQUIRED}, - {sfLedgerHash, soeREQUIRED}, - {sfLedgerSequence, soeREQUIRED}, - {sfCloseTime, soeOPTIONAL}, - {sfLoadFee, soeOPTIONAL}, - {sfAmendments, soeOPTIONAL}, - {sfBaseFee, soeOPTIONAL}, - {sfReserveBase, soeOPTIONAL}, - {sfReserveIncrement, soeOPTIONAL}, - {sfSigningTime, soeREQUIRED}, - {sfSigningPubKey, soeREQUIRED}, - {sfSignature, soeREQUIRED}, - {sfConsensusHash, soeOPTIONAL}, - {sfCookie, soeDEFAULT}, - {sfValidatedHash, soeOPTIONAL}, - {sfServerVersion, soeOPTIONAL}, + {sfFlags, soeREQUIRED}, + {sfLedgerHash, soeREQUIRED}, + {sfLedgerSequence, soeREQUIRED}, + {sfCloseTime, soeOPTIONAL}, + {sfLoadFee, soeOPTIONAL}, + {sfAmendments, soeOPTIONAL}, + {sfBaseFee, soeOPTIONAL}, + {sfReserveBase, soeOPTIONAL}, + {sfReserveIncrement, soeOPTIONAL}, + {sfSigningTime, soeREQUIRED}, + {sfSigningPubKey, soeREQUIRED}, + {sfSignature, soeREQUIRED}, + {sfConsensusHash, soeOPTIONAL}, + {sfCookie, soeDEFAULT}, + {sfValidatedHash, soeOPTIONAL}, + {sfServerVersion, soeOPTIONAL}, // featureXRPFees {sfBaseFeeDrops, soeOPTIONAL}, {sfReserveBaseDrops, soeOPTIONAL}, @@ -111,7 +111,7 @@ STValidation::isValid() const noexcept getSignerPublic(), getSigningHash(), makeSlice(getFieldVL(sfSignature)), - getFlags() & vfFullyCanonicalSig); + (getFlags() & vfFullyCanonicalSig) != 0u); } return valid_.value(); diff --git a/src/libxrpl/protocol/STVar.cpp b/src/libxrpl/protocol/STVar.cpp index 255514d70c..8b76d8a322 100644 --- a/src/libxrpl/protocol/STVar.cpp +++ b/src/libxrpl/protocol/STVar.cpp @@ -60,7 +60,7 @@ STVar::operator=(STVar const& rhs) if (&rhs != this) { destroy(); - if (rhs.p_) + if (rhs.p_ != nullptr) { p_ = rhs.p_->copy(max_size, &d_); } diff --git a/src/libxrpl/protocol/STVector256.cpp b/src/libxrpl/protocol/STVector256.cpp index 6357e2f2cb..2a70dd1e05 100644 --- a/src/libxrpl/protocol/STVector256.cpp +++ b/src/libxrpl/protocol/STVector256.cpp @@ -68,7 +68,7 @@ bool STVector256::isEquivalent(STBase const& t) const { STVector256 const* v = dynamic_cast(&t); - return v && (mValue == v->mValue); + return (v != nullptr) && (mValue == v->mValue); } Json::Value diff --git a/src/libxrpl/protocol/STXChainBridge.cpp b/src/libxrpl/protocol/STXChainBridge.cpp index 85d36f9b46..428e4655ff 100644 --- a/src/libxrpl/protocol/STXChainBridge.cpp +++ b/src/libxrpl/protocol/STXChainBridge.cpp @@ -167,7 +167,7 @@ bool STXChainBridge::isEquivalent(STBase const& t) const { STXChainBridge const* v = dynamic_cast(&t); - return v && (*v == *this); + return (v != nullptr) && (*v == *this); } bool diff --git a/src/libxrpl/protocol/SecretKey.cpp b/src/libxrpl/protocol/SecretKey.cpp index aa398e9fe1..f58bb81a88 100644 --- a/src/libxrpl/protocol/SecretKey.cpp +++ b/src/libxrpl/protocol/SecretKey.cpp @@ -185,7 +185,7 @@ public: if (secp256k1_ec_seckey_tweak_add(secp256k1Context(), rpk.data(), tweak.data()) == 1) { - SecretKey sk{Slice{rpk.data(), rpk.size()}}; + SecretKey const sk{Slice{rpk.data(), rpk.size()}}; secure_erase(rpk.data(), rpk.size()); return sk; } @@ -270,7 +270,7 @@ randomSecretKey() { std::uint8_t buf[32]; beast::rngfill(buf, sizeof(buf), crypto_prng()); - SecretKey sk(Slice{buf, sizeof(buf)}); + SecretKey const sk(Slice{buf, sizeof(buf)}); secure_erase(buf, sizeof(buf)); return sk; } @@ -281,7 +281,7 @@ generateSecretKey(KeyType type, Seed const& seed) if (type == KeyType::ed25519) { auto key = sha512Half_s(Slice(seed.data(), seed.size())); - SecretKey sk{Slice{key.data(), key.size()}}; + SecretKey const sk{Slice{key.data(), key.size()}}; secure_erase(key.data(), key.size()); return sk; } @@ -289,7 +289,7 @@ generateSecretKey(KeyType type, Seed const& seed) if (type == KeyType::secp256k1) { auto key = detail::deriveDeterministicRootKey(seed); - SecretKey sk{Slice{key.data(), key.size()}}; + SecretKey const sk{Slice{key.data(), key.size()}}; secure_erase(key.data(), key.size()); return sk; } @@ -335,7 +335,7 @@ generateKeyPair(KeyType type, Seed const& seed) switch (type) { case KeyType::secp256k1: { - detail::Generator g(seed); + detail::Generator const g(seed); return g(0); } default: diff --git a/src/libxrpl/protocol/Seed.cpp b/src/libxrpl/protocol/Seed.cpp index 8aa1d8b67d..6d33013f2f 100644 --- a/src/libxrpl/protocol/Seed.cpp +++ b/src/libxrpl/protocol/Seed.cpp @@ -48,7 +48,7 @@ randomSeed() { std::array buffer{}; beast::rngfill(buffer.data(), buffer.size(), crypto_prng()); - Seed seed(makeSlice(buffer)); + Seed const seed(makeSlice(buffer)); secure_erase(buffer.data(), buffer.size()); return seed; } diff --git a/src/libxrpl/protocol/Serializer.cpp b/src/libxrpl/protocol/Serializer.cpp index 08d221f75b..4e6a49f572 100644 --- a/src/libxrpl/protocol/Serializer.cpp +++ b/src/libxrpl/protocol/Serializer.cpp @@ -23,7 +23,7 @@ namespace xrpl { int Serializer::add16(std::uint16_t i) { - int ret = mData.size(); + int const ret = mData.size(); mData.push_back(static_cast(i >> 8)); mData.push_back(static_cast(i & 0xff)); return ret; @@ -73,7 +73,7 @@ Serializer::addInteger(std::int32_t i) int Serializer::addRaw(Blob const& vector) { - int ret = mData.size(); + int const ret = mData.size(); mData.insert(mData.end(), vector.begin(), vector.end()); return ret; } @@ -81,7 +81,7 @@ Serializer::addRaw(Blob const& vector) int Serializer::addRaw(Slice slice) { - int ret = mData.size(); + int const ret = mData.size(); mData.insert(mData.end(), slice.begin(), slice.end()); return ret; } @@ -89,7 +89,7 @@ Serializer::addRaw(Slice slice) int Serializer::addRaw(Serializer const& s) { - int ret = mData.size(); + int const ret = mData.size(); mData.insert(mData.end(), s.begin(), s.end()); return ret; } @@ -97,7 +97,7 @@ Serializer::addRaw(Serializer const& s) int Serializer::addRaw(void const* ptr, int len) { - int ret = mData.size(); + int const ret = mData.size(); mData.insert(mData.end(), (char const*)ptr, ((char const*)ptr) + len); return ret; } @@ -105,7 +105,7 @@ Serializer::addRaw(void const* ptr, int len) int Serializer::addFieldID(int type, int name) { - int ret = mData.size(); + int const ret = mData.size(); XRPL_ASSERT( (type > 0) && (type < 256) && (name > 0) && (name < 256), "xrpl::Serializer::addFieldID : inputs inside range"); @@ -143,7 +143,7 @@ Serializer::addFieldID(int type, int name) int Serializer::add8(unsigned char byte) { - int ret = mData.size(); + int const ret = mData.size(); mData.push_back(byte); return ret; } @@ -177,7 +177,7 @@ Serializer::getSHA512Half() const int Serializer::addVL(Blob const& vector) { - int ret = addEncoded(vector.size()); + int const ret = addEncoded(vector.size()); addRaw(vector); XRPL_ASSERT( mData.size() == (ret + vector.size() + encodeLengthLength(vector.size())), @@ -188,7 +188,7 @@ Serializer::addVL(Blob const& vector) int Serializer::addVL(Slice const& slice) { - int ret = addEncoded(slice.size()); + int const ret = addEncoded(slice.size()); if (!slice.empty()) addRaw(slice.data(), slice.size()); return ret; @@ -197,9 +197,9 @@ Serializer::addVL(Slice const& slice) int Serializer::addVL(void const* ptr, int len) { - int ret = addEncoded(len); + int const ret = addEncoded(len); - if (len) + if (len != 0) addRaw(ptr, len); return ret; @@ -298,7 +298,7 @@ Serializer::decodeVLLength(int b1, int b2) if (b1 > 240) Throw("b1>240"); - return 193 + (b1 - 193) * 256 + b2; + return 193 + ((b1 - 193) * 256) + b2; } int @@ -310,7 +310,7 @@ Serializer::decodeVLLength(int b1, int b2, int b3) if (b1 > 254) Throw("b1>254"); - return 12481 + (b1 - 241) * 65536 + b2 * 256 + b3; + return 12481 + ((b1 - 241) * 65536) + (b2 * 256) + b3; } //------------------------------------------------------------------------------ @@ -343,7 +343,7 @@ SerialIter::get8() { if (remain_ < 1) Throw("invalid SerialIter get8"); - unsigned char t = *p_; + unsigned char const t = *p_; ++p_; ++used_; --remain_; @@ -469,23 +469,23 @@ SerialIter::getRaw(int size) int SerialIter::getVLDataLength() { - int b1 = get8(); + int const b1 = get8(); int datLen = 0; - int lenLen = Serializer::decodeLengthLength(b1); + int const lenLen = Serializer::decodeLengthLength(b1); if (lenLen == 1) { datLen = Serializer::decodeVLLength(b1); } else if (lenLen == 2) { - int b2 = get8(); + int const b2 = get8(); datLen = Serializer::decodeVLLength(b1, b2); } else { XRPL_ASSERT(lenLen == 3, "xrpl::SerialIter::getVLDataLength : lenLen is 3"); - int b2 = get8(); - int b3 = get8(); + int const b2 = get8(); + int const b3 = get8(); datLen = Serializer::decodeVLLength(b1, b2, b3); } return datLen; @@ -496,7 +496,7 @@ SerialIter::getSlice(std::size_t bytes) { if (bytes > remain_) Throw("invalid SerialIter getSlice"); - Slice s(p_, bytes); + Slice const s(p_, bytes); p_ += bytes; used_ += bytes; remain_ -= bytes; diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index f4932b2af4..3c797a7c8c 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -28,7 +28,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) auto affectedNodes = dynamic_cast(obj.peekAtPField(sfAffectedNodes)); XRPL_ASSERT(affectedNodes, "xrpl::TxMeta::TxMeta(STObject) : type cast succeeded"); - if (affectedNodes) + if (affectedNodes != nullptr) nodes_ = *affectedNodes; setAdditionalFields(obj); @@ -39,7 +39,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) { SerialIter sit(makeSlice(vec)); - STObject obj(sit, sfMetadata); + STObject const obj(sit, sfMetadata); result_ = obj.getFieldU8(sfTransactionResult); index_ = obj.getFieldU32(sfTransactionIndex); nodes_ = obj.getFieldArray(sfAffectedNodes); @@ -89,14 +89,14 @@ TxMeta::getAffectedAccounts() const // Meta#getAffectedAccounts for (auto const& node : nodes_) { - int index = + int const index = node.getFieldIndex((node.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); if (index != -1) { auto const* inner = dynamic_cast(&node.peekAtIndex(index)); XRPL_ASSERT(inner, "xrpl::getAffectedAccounts : STObject type cast succeeded"); - if (inner) + if (inner != nullptr) { for (auto const& field : *inner) { @@ -146,7 +146,7 @@ TxMeta::getAffectedAccounts() const STObject& TxMeta::getAffectedNode(SLE::ref node, SField const& type) { - uint256 index = node->key(); + uint256 const index = node->key(); for (auto& n : nodes_) { if (n.getFieldH256(sfLedgerIndex) == index) diff --git a/src/libxrpl/protocol/UintTypes.cpp b/src/libxrpl/protocol/UintTypes.cpp index df9eadb511..5ace6c29d6 100644 --- a/src/libxrpl/protocol/UintTypes.cpp +++ b/src/libxrpl/protocol/UintTypes.cpp @@ -63,7 +63,7 @@ to_string(Currency const& currency) bool to_currency(Currency& currency, std::string const& code) { - if (code.empty() || !code.compare(systemCurrencyCode())) + if (code.empty() || (code.compare(systemCurrencyCode()) == 0)) { currency = beast::zero; return true; diff --git a/src/libxrpl/protocol/XChainAttestations.cpp b/src/libxrpl/protocol/XChainAttestations.cpp index 314bf9f6d3..c255f743e3 100644 --- a/src/libxrpl/protocol/XChainAttestations.cpp +++ b/src/libxrpl/protocol/XChainAttestations.cpp @@ -74,7 +74,7 @@ AttestationBase::sameEventHelper(AttestationBase const& lhs, AttestationBase con bool AttestationBase::verify(STXChainBridge const& bridge) const { - std::vector msg = message(bridge); + std::vector const msg = message(bridge); return xrpl::verify(publicKey, makeSlice(msg), signature); } diff --git a/src/libxrpl/protocol/tokens.cpp b/src/libxrpl/protocol/tokens.cpp index b46591725f..e2a77fbf10 100644 --- a/src/libxrpl/protocol/tokens.cpp +++ b/src/libxrpl/protocol/tokens.cpp @@ -263,7 +263,7 @@ decodeBase58(std::string const& s) // Allocate enough space in big-endian base256 representation. // log(58) / log(256), rounded up. - std::vector b256(remain * 733 / 1000 + 1); + std::vector b256((remain * 733 / 1000) + 1); while (remain > 0) { auto carry = alphabetReverse[*psz]; @@ -308,7 +308,7 @@ encodeBase58Token(TokenType type, void const* token, std::size_t size) // Lay the data out as // buf[0] = safe_cast>(type); - if (size) + if (size != 0u) std::memcpy(buf.data() + 1, token, size); checksum(buf.data() + 1 + size, buf.data(), 1 + size); @@ -383,7 +383,7 @@ b256_to_b58_be(std::span input, std::span out) { break; } - auto const src_i_end = input.size() - i * 8; + auto const src_i_end = input.size() - (i * 8); if (src_i_end >= 8) { std::memcpy(&base_2_64_coeff_buf[num_coeff], &input[src_i_end - 8], 8); @@ -445,12 +445,12 @@ b256_to_b58_be(std::span input, std::span out) std::array const b58_be = xrpl::b58_fast::detail::b58_10_to_b58_be(base_58_10_coeff[i]); std::size_t to_skip = 0; - std::span b58_be_s{b58_be.data(), b58_be.size()}; + std::span const b58_be_s{b58_be.data(), b58_be.size()}; if (skip_zeros) { to_skip = count_leading_zeros(b58_be_s); skip_zeros = false; - if (out.size() < (i + 1) * 10 - to_skip) + if (out.size() < ((i + 1) * 10) - to_skip) { return Unexpected(TokenCodecErrc::outputTooSmall); } @@ -502,12 +502,12 @@ b58_to_b256_be(std::string_view input, std::span out) // log(2^(38*8),58^10)) ~= 5.18. So 6 coeff are enough std::array b_58_10_coeff{}; auto [num_full_coeffs, partial_coeff_len] = xrpl::b58_fast::detail::div_rem(input.size(), 10); - auto const num_partial_coeffs = partial_coeff_len ? 1 : 0; + auto const num_partial_coeffs = (partial_coeff_len != 0u) ? 1 : 0; auto const num_b_58_10_coeffs = num_full_coeffs + num_partial_coeffs; XRPL_ASSERT( num_b_58_10_coeffs <= b_58_10_coeff.size(), "xrpl::b58_fast::detail::b58_to_b256_be : maximum coeff"); - for (unsigned char c : input.substr(0, partial_coeff_len)) + for (unsigned char const c : input.substr(0, partial_coeff_len)) { auto cur_val = ::xrpl::alphabetReverse[c]; if (cur_val < 0) @@ -521,7 +521,7 @@ b58_to_b256_be(std::string_view input, std::span out) { for (int j = 0; j < num_full_coeffs; ++j) { - unsigned char c = input[partial_coeff_len + j * 10 + i]; + unsigned char const c = input[partial_coeff_len + (j * 10) + i]; auto cur_val = ::xrpl::alphabetReverse[c]; if (cur_val < 0) { @@ -586,7 +586,7 @@ b58_to_b256_be(std::string_view input, std::span out) cur_out_i += 1; } } - if ((cur_out_i + 8 * (cur_result_size - 1)) > out.size()) + if ((cur_out_i + (8 * (cur_result_size - 1))) > out.size()) { return Unexpected(TokenCodecErrc::outputTooSmall); } @@ -626,7 +626,7 @@ encodeBase58Token( size_t const checksum_i = input.size() + 1; // buf[checksum_i..checksum_i + 4] = checksum checksum(buf.data() + checksum_i, buf.data(), checksum_i); - std::span b58Span(buf.data(), input.size() + 5); + std::span const b58Span(buf.data(), input.size() + 5); return detail::b256_to_b58_be(b58Span, out); } // Convert from base 58 to base 256, largest coefficients first @@ -680,8 +680,8 @@ encodeBase58Token(TokenType type, void const* token, std::size_t size) // over-allocation, this function uses 128 (again, over-allocation assuming // 2 base 58 char per byte) sr.resize(128); - std::span outSp(reinterpret_cast(sr.data()), sr.size()); - std::span inSp(reinterpret_cast(token), size); + std::span const outSp(reinterpret_cast(sr.data()), sr.size()); + std::span const inSp(reinterpret_cast(token), size); auto r = b58_fast::encodeBase58Token(type, inSp, outSp); if (!r) return {}; @@ -696,7 +696,7 @@ decodeBase58Token(std::string const& s, TokenType type) // The largest object encoded as base58 is 33 bytes; 64 is plenty (and // there's no benefit making it smaller) sr.resize(64); - std::span outSp(reinterpret_cast(sr.data()), sr.size()); + std::span const outSp(reinterpret_cast(sr.data()), sr.size()); auto r = b58_fast::decodeBase58Token(type, s, outSp); if (!r) return {}; diff --git a/src/libxrpl/rdb/DatabaseCon.cpp b/src/libxrpl/rdb/DatabaseCon.cpp index 344df85b4a..bca14f9bfa 100644 --- a/src/libxrpl/rdb/DatabaseCon.cpp +++ b/src/libxrpl/rdb/DatabaseCon.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include #include @@ -25,26 +25,29 @@ public: std::shared_ptr fromId(std::uintptr_t id) { - std::lock_guard l{mutex_}; + std::lock_guard const l{mutex_}; auto it = checkpointers_.find(id); if (it != checkpointers_.end()) return it->second; - return {}; + return nullptr; } void erase(std::uintptr_t id) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; checkpointers_.erase(id); } std::shared_ptr - create(std::shared_ptr const& session, JobQueue& jobQueue, Logs& logs) + create( + std::shared_ptr const& session, + JobQueue& jobQueue, + ServiceRegistry& registry) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; auto const id = nextId_++; - auto const r = makeCheckpointer(id, session, jobQueue, logs); + auto const r = makeCheckpointer(id, session, jobQueue, registry); checkpointers_[id] = r; return r; } @@ -64,7 +67,7 @@ DatabaseCon::~DatabaseCon() { checkpointers.erase(checkpointer_->id()); - std::weak_ptr wk(checkpointer_); + std::weak_ptr const wk(checkpointer_); checkpointer_.reset(); // The references to our Checkpointer held by 'checkpointer_' and @@ -72,7 +75,7 @@ DatabaseCon::~DatabaseCon() // checkpoint is currently in progress. Wait for it to end, otherwise // creating a new DatabaseCon to the same database may fail due to the // database being locked by our (now old) Checkpointer. - while (wk.use_count()) + while (wk.use_count() != 0) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); } @@ -82,11 +85,11 @@ DatabaseCon::~DatabaseCon() std::unique_ptr const> DatabaseCon::Setup::globalPragma; void -DatabaseCon::setupCheckpointing(JobQueue* q, Logs& l) +DatabaseCon::setupCheckpointing(JobQueue* q, ServiceRegistry& registry) { - if (!q) + if (q == nullptr) Throw("No JobQueue"); - checkpointer_ = checkpointers.create(session_, *q, l); + checkpointer_ = checkpointers.create(session_, *q, registry); } } // namespace xrpl diff --git a/src/libxrpl/rdb/SociDB.cpp b/src/libxrpl/rdb/SociDB.cpp index baadeef00a..780e05854f 100644 --- a/src/libxrpl/rdb/SociDB.cpp +++ b/src/libxrpl/rdb/SociDB.cpp @@ -93,12 +93,12 @@ open(soci::session& s, std::string const& beName, std::string const& connectionS static sqlite_api::sqlite3* getConnection(soci::session& s) { - sqlite_api::sqlite3* result = nullptr; + sqlite_api::sqlite3* result = nullptr; // NOLINT(misc-const-correctness) auto be = s.get_backend(); if (auto b = dynamic_cast(be)) result = b->conn_; - if (!result) + if (result == nullptr) Throw("Didn't get a database connection."); return result; @@ -107,7 +107,7 @@ getConnection(soci::session& s) std::uint32_t getKBUsedAll(soci::session& s) { - if (!getConnection(s)) + if (getConnection(s) == nullptr) Throw("No connection found."); return static_cast(sqlite_api::sqlite3_memory_used() / kilobytes(1)); } @@ -187,8 +187,11 @@ public: std::uintptr_t id, std::weak_ptr session, JobQueue& q, - Logs& logs) - : id_(id), session_(std::move(session)), jobQueue_(q), j_(logs.journal("WALCheckpointer")) + ServiceRegistry& registry) + : id_(id) + , session_(std::move(session)) + , jobQueue_(q) + , j_(registry.getJournal("WALCheckpointer")) { if (auto [conn, keepAlive] = getConnection(); conn) { @@ -219,7 +222,7 @@ public: schedule() override { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (running_) return; running_ = true; @@ -239,7 +242,7 @@ public: self->checkpoint(); })) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); running_ = false; } } @@ -249,11 +252,12 @@ public: { auto [conn, keepAlive] = getConnection(); (void)keepAlive; - if (!conn) + if (conn == nullptr) return; int log = 0, ckpt = 0; - int ret = sqlite3_wal_checkpoint_v2(conn, nullptr, SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); + int const ret = + sqlite3_wal_checkpoint_v2(conn, nullptr, SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); auto fname = sqlite3_db_filename(conn, "main"); if (ret != SQLITE_OK) @@ -266,7 +270,7 @@ public: JLOG(j_.trace()) << "WAL(" << fname << "): frames=" << log << ", written=" << ckpt; } - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); running_ = false; } @@ -307,9 +311,9 @@ makeCheckpointer( std::uintptr_t id, std::weak_ptr session, JobQueue& queue, - Logs& logs) + ServiceRegistry& registry) { - return std::make_shared(id, std::move(session), queue, logs); + return std::make_shared(id, std::move(session), queue, registry); } } // namespace xrpl diff --git a/src/libxrpl/resource/Consumer.cpp b/src/libxrpl/resource/Consumer.cpp index e9435bd340..c1cb9d4367 100644 --- a/src/libxrpl/resource/Consumer.cpp +++ b/src/libxrpl/resource/Consumer.cpp @@ -23,7 +23,7 @@ Consumer::Consumer() : m_logic(nullptr), m_entry(nullptr) Consumer::Consumer(Consumer const& other) : m_logic(other.m_logic), m_entry(nullptr) { - if (m_logic && other.m_entry) + if ((m_logic != nullptr) && (other.m_entry != nullptr)) { m_entry = other.m_entry; m_logic->acquire(*m_entry); @@ -32,7 +32,7 @@ Consumer::Consumer(Consumer const& other) : m_logic(other.m_logic), m_entry(null Consumer::~Consumer() { - if (m_logic && m_entry) + if ((m_logic != nullptr) && (m_entry != nullptr)) m_logic->release(*m_entry); } @@ -43,14 +43,14 @@ Consumer::operator=(Consumer const& other) return *this; // remove old ref - if (m_logic && m_entry) + if ((m_logic != nullptr) && (m_entry != nullptr)) m_logic->release(*m_entry); m_logic = other.m_logic; m_entry = other.m_entry; // add new ref - if (m_logic && m_entry) + if ((m_logic != nullptr) && (m_entry != nullptr)) m_logic->acquire(*m_entry); return *this; @@ -68,7 +68,7 @@ Consumer::to_string() const bool Consumer::isUnlimited() const { - if (m_entry) + if (m_entry != nullptr) return m_entry->isUnlimited(); return false; @@ -78,7 +78,7 @@ Disposition Consumer::disposition() const { Disposition d = ok; - if (m_logic && m_entry) + if ((m_logic != nullptr) && (m_entry != nullptr)) d = m_logic->charge(*m_entry, Charge(0)); return d; @@ -89,7 +89,7 @@ Consumer::charge(Charge const& what, std::string const& context) { Disposition d = ok; - if (m_logic && m_entry && !m_entry->isUnlimited()) + if ((m_logic != nullptr) && (m_entry != nullptr) && !m_entry->isUnlimited()) d = m_logic->charge(*m_entry, what, context); return d; diff --git a/src/libxrpl/resource/ResourceManager.cpp b/src/libxrpl/resource/ResourceManager.cpp index 1e7aadfa8d..d0e45d4c0e 100644 --- a/src/libxrpl/resource/ResourceManager.cpp +++ b/src/libxrpl/resource/ResourceManager.cpp @@ -50,7 +50,7 @@ public: ~ManagerImp() override { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); stop_ = true; cond_.notify_one(); } diff --git a/src/libxrpl/server/InfoSub.cpp b/src/libxrpl/server/InfoSub.cpp index 5857e4d6ae..ea70dc3a83 100644 --- a/src/libxrpl/server/InfoSub.cpp +++ b/src/libxrpl/server/InfoSub.cpp @@ -65,7 +65,7 @@ InfoSub::onSendEmpty() void InfoSub::insertSubAccountInfo(AccountID const& account, bool rt) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (rt) { @@ -80,7 +80,7 @@ InfoSub::insertSubAccountInfo(AccountID const& account, bool rt) void InfoSub::deleteSubAccountInfo(AccountID const& account, bool rt) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (rt) { @@ -95,14 +95,14 @@ InfoSub::deleteSubAccountInfo(AccountID const& account, bool rt) bool InfoSub::insertSubAccountHistory(AccountID const& account) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); return accountHistorySubscriptions_.insert(account).second; } void InfoSub::deleteSubAccountHistory(AccountID const& account) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); accountHistorySubscriptions_.erase(account); } diff --git a/src/libxrpl/server/LoadFeeTrack.cpp b/src/libxrpl/server/LoadFeeTrack.cpp index e206b50863..d698e2420e 100644 --- a/src/libxrpl/server/LoadFeeTrack.cpp +++ b/src/libxrpl/server/LoadFeeTrack.cpp @@ -12,7 +12,7 @@ namespace xrpl { bool LoadFeeTrack::raiseLocalFee() { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); if (++raiseCount_ < 2) return false; @@ -37,7 +37,7 @@ LoadFeeTrack::raiseLocalFee() bool LoadFeeTrack::lowerLocalFee() { - std::lock_guard sl(lock_); + std::lock_guard const sl(lock_); std::uint32_t const origFee = localTxnLoadFee_; raiseCount_ = 0; diff --git a/src/xrpld/app/misc/detail/Manifest.cpp b/src/libxrpl/server/Manifest.cpp similarity index 97% rename from src/xrpld/app/misc/detail/Manifest.cpp rename to src/libxrpl/server/Manifest.cpp index 4526bf6c16..f4634982d0 100644 --- a/src/xrpld/app/misc/detail/Manifest.cpp +++ b/src/libxrpl/server/Manifest.cpp @@ -279,7 +279,7 @@ loadValidatorToken(std::vector const& blob, beast::Journal journal) std::optional ManifestCache::getSigningKey(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto const iter = map_.find(pk); if (iter != map_.end() && !iter->second.revoked()) @@ -291,7 +291,7 @@ ManifestCache::getSigningKey(PublicKey const& pk) const PublicKey ManifestCache::getMasterKey(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; if (auto const iter = signingToMasterKeys_.find(pk); iter != signingToMasterKeys_.end()) return iter->second; @@ -302,7 +302,7 @@ ManifestCache::getMasterKey(PublicKey const& pk) const std::optional ManifestCache::getSequence(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto const iter = map_.find(pk); if (iter != map_.end() && !iter->second.revoked()) @@ -314,7 +314,7 @@ ManifestCache::getSequence(PublicKey const& pk) const std::optional ManifestCache::getDomain(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto const iter = map_.find(pk); if (iter != map_.end() && !iter->second.revoked()) @@ -326,7 +326,7 @@ ManifestCache::getDomain(PublicKey const& pk) const std::optional ManifestCache::getManifest(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto const iter = map_.find(pk); if (iter != map_.end() && !iter->second.revoked()) @@ -338,7 +338,7 @@ ManifestCache::getManifest(PublicKey const& pk) const bool ManifestCache::revoked(PublicKey const& pk) const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto const iter = map_.find(pk); if (iter != map_.end()) @@ -437,12 +437,12 @@ ManifestCache::applyManifest(Manifest m) }; { - std::shared_lock sl{mutex_}; + std::shared_lock const sl{mutex_}; if (auto d = prewriteCheck(map_.find(m.masterKey), /*checkSig*/ true, sl)) return *d; } - std::unique_lock sl{mutex_}; + std::unique_lock const sl{mutex_}; auto const iter = map_.find(m.masterKey); // Since we released the previously held read lock, it's possible that the // collections have been written to. This means we need to run @@ -562,7 +562,7 @@ ManifestCache::save( std::string const& dbTable, std::function const& isTrusted) { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; auto db = dbCon.checkoutDb(); saveManifests(*db, dbTable, isTrusted, map_, j_); diff --git a/src/libxrpl/server/State.cpp b/src/libxrpl/server/State.cpp index 371f2b4d0a..a7c0c0fca2 100644 --- a/src/libxrpl/server/State.cpp +++ b/src/libxrpl/server/State.cpp @@ -31,7 +31,7 @@ initStateDB(soci::session& session, BasicConfig const& config, std::string const count = *countO; } - if (!count) + if (count == 0) { session << "INSERT INTO DbState VALUES (1, '', '', 0);"; } @@ -45,7 +45,7 @@ initStateDB(soci::session& session, BasicConfig const& config, std::string const count = *countO; } - if (!count) + if (count == 0) { session << "INSERT INTO CanDelete VALUES (1, 0);"; } diff --git a/src/libxrpl/server/Vacuum.cpp b/src/libxrpl/server/Vacuum.cpp index 89764b777a..bcf5941e95 100644 --- a/src/libxrpl/server/Vacuum.cpp +++ b/src/libxrpl/server/Vacuum.cpp @@ -9,7 +9,7 @@ namespace xrpl { bool doVacuumDB(DatabaseCon::Setup const& setup, beast::Journal j) { - boost::filesystem::path dbPath = setup.dataDir / TxDBName; + boost::filesystem::path const dbPath = setup.dataDir / TxDBName; uintmax_t const dbSize = file_size(dbPath); XRPL_ASSERT(dbSize != static_cast(-1), "ripple:doVacuumDB : file_size succeeded"); diff --git a/src/libxrpl/server/Wallet.cpp b/src/libxrpl/server/Wallet.cpp index 95c2e89a20..8da934a921 100644 --- a/src/libxrpl/server/Wallet.cpp +++ b/src/libxrpl/server/Wallet.cpp @@ -199,13 +199,13 @@ bool createFeatureVotes(soci::session& session) { soci::transaction tr(session); - std::string sql = + std::string const sql = "SELECT count(*) FROM sqlite_master " "WHERE type='table' AND name='FeatureVotes'"; // SOCI requires boost::optional (not std::optional) as the parameter. boost::optional featureVotesCount; session << sql, soci::into(featureVotesCount); - bool exists = static_cast(*featureVotesCount); + bool const exists = static_cast(*featureVotesCount); // Create FeatureVotes table in WalletDB if it doesn't exist if (!exists) @@ -232,8 +232,8 @@ readAmendments( return safe_cast(dbVote.value_or(1)); }; - soci::transaction tr(session); - std::string sql = + soci::transaction const tr(session); + std::string const sql = "SELECT AmendmentHash, AmendmentName, Veto FROM " "( SELECT AmendmentHash, AmendmentName, Veto, RANK() OVER " "( PARTITION BY AmendmentHash ORDER BY ROWID DESC ) " diff --git a/src/libxrpl/shamap/SHAMap.cpp b/src/libxrpl/shamap/SHAMap.cpp index a6aacfabc9..505d20651e 100644 --- a/src/libxrpl/shamap/SHAMap.cpp +++ b/src/libxrpl/shamap/SHAMap.cpp @@ -85,11 +85,11 @@ SHAMap::dirtyUp( while (!stack.empty()) { auto node = intr_ptr::dynamic_pointer_cast(stack.top().first); - SHAMapNodeID nodeID = stack.top().second; + SHAMapNodeID const nodeID = stack.top().second; stack.pop(); XRPL_ASSERT(node, "xrpl::SHAMap::dirtyUp : non-null node"); - int branch = selectBranch(nodeID, target); + int const branch = selectBranch(nodeID, target); XRPL_ASSERT(branch >= 0, "xrpl::SHAMap::dirtyUp : valid branch"); node = unshareNode(std::move(node), nodeID); @@ -129,8 +129,8 @@ SHAMap::walkTowardsKey(uint256 const& id, SharedPtrNodeStack* stack) const SHAMapLeafNode* SHAMap::findKey(uint256 const& id) const { - SHAMapLeafNode* leaf = walkTowardsKey(id); - if (leaf && leaf->peekItem()->key() != id) + SHAMapLeafNode* leaf = walkTowardsKey(id); // NOLINT(misc-const-correctness) + if ((leaf != nullptr) && leaf->peekItem()->key() != id) leaf = nullptr; return leaf; } @@ -221,7 +221,7 @@ SHAMap::fetchNodeNT(SHAMapHash const& hash, SHAMapSyncFilter* filter) const } } - if (filter) + if (filter != nullptr) node = checkFilter(hash, filter); return node; @@ -253,9 +253,9 @@ SHAMap::fetchNode(SHAMapHash const& hash) const SHAMapTreeNode* SHAMap::descendThrow(SHAMapInnerNode* parent, int branch) const { - SHAMapTreeNode* ret = descend(parent, branch); + SHAMapTreeNode* ret = descend(parent, branch); // NOLINT(misc-const-correctness) - if (!ret && !parent->isEmptyBranch(branch)) + if ((ret == nullptr) && !parent->isEmptyBranch(branch)) Throw(type_, parent->getChildHash(branch)); return ret; @@ -275,8 +275,8 @@ SHAMap::descendThrow(SHAMapInnerNode& parent, int branch) const SHAMapTreeNode* SHAMap::descend(SHAMapInnerNode* parent, int branch) const { - SHAMapTreeNode* ret = parent->getChildPointer(branch); - if (ret || !backed_) + SHAMapTreeNode* ret = parent->getChildPointer(branch); // NOLINT(misc-const-correctness) + if ((ret != nullptr) || !backed_) return ret; intr_ptr::SharedPtr node = fetchNodeNT(parent->getChildHash(branch)); @@ -326,9 +326,9 @@ SHAMap::descend( XRPL_ASSERT( !parent->isEmptyBranch(branch), "xrpl::SHAMap::descend : parent branch is non-empty"); - SHAMapTreeNode* child = parent->getChildPointer(branch); + SHAMapTreeNode* child = parent->getChildPointer(branch); // NOLINT(misc-const-correctness) - if (!child) + if (child == nullptr) { auto const& childHash = parent->getChildHash(branch); intr_ptr::SharedPtr childNode = fetchNodeNT(childHash, filter); @@ -353,8 +353,8 @@ SHAMap::descendAsync( { pending = false; - SHAMapTreeNode* ret = parent->getChildPointer(branch); - if (ret) + SHAMapTreeNode* ret = parent->getChildPointer(branch); // NOLINT(misc-const-correctness) + if (ret != nullptr) return ret; auto const& hash = parent->getChildHash(branch); @@ -362,7 +362,7 @@ SHAMap::descendAsync( auto ptr = cacheLookup(hash); if (!ptr) { - if (filter) + if (filter != nullptr) ptr = checkFilter(hash, filter); if (!ptr && backed_) @@ -483,14 +483,14 @@ SHAMap::onlyBelow(SHAMapTreeNode* node) const { if (!inner->isEmptyBranch(i)) { - if (nextNode) + if (nextNode != nullptr) return no_item; nextNode = descendThrow(inner, i); } } - if (!nextNode) + if (nextNode == nullptr) { // LCOV_EXCL_START UNREACHABLE("xrpl::SHAMap::onlyBelow : no next node"); @@ -513,8 +513,8 @@ SHAMapLeafNode const* SHAMap::peekFirstItem(SharedPtrNodeStack& stack) const { XRPL_ASSERT(stack.empty(), "xrpl::SHAMap::peekFirstItem : empty stack input"); - SHAMapLeafNode* node = firstBelow(root_, stack); - if (!node) + SHAMapLeafNode const* node = firstBelow(root_, stack); + if (node == nullptr) { while (!stack.empty()) stack.pop(); @@ -540,7 +540,7 @@ SHAMap::peekNextItem(uint256 const& id, SharedPtrNodeStack& stack) const { node = descendThrow(*inner, i); auto leaf = firstBelow(node, stack, i); - if (!leaf) + if (leaf == nullptr) Throw(type_, id); XRPL_ASSERT(leaf->isLeaf(), "xrpl::SHAMap::peekNextItem : leaf is valid"); return leaf; @@ -555,9 +555,9 @@ SHAMap::peekNextItem(uint256 const& id, SharedPtrNodeStack& stack) const boost::intrusive_ptr const& SHAMap::peekItem(uint256 const& id) const { - SHAMapLeafNode* leaf = findKey(id); + SHAMapLeafNode const* leaf = findKey(id); - if (!leaf) + if (leaf == nullptr) return no_item; return leaf->peekItem(); @@ -566,9 +566,9 @@ SHAMap::peekItem(uint256 const& id) const boost::intrusive_ptr const& SHAMap::peekItem(uint256 const& id, SHAMapHash& hash) const { - SHAMapLeafNode* leaf = findKey(id); + SHAMapLeafNode const* leaf = findKey(id); - if (!leaf) + if (leaf == nullptr) return no_item; hash = leaf->getHash(); @@ -598,7 +598,7 @@ SHAMap::upper_bound(uint256 const& id) const { node = descendThrow(*inner, branch); auto leaf = firstBelow(node, stack, branch); - if (!leaf) + if (leaf == nullptr) Throw(type_, id); return const_iterator(this, leaf->peekItem().get(), std::move(stack)); } @@ -631,7 +631,7 @@ SHAMap::lower_bound(uint256 const& id) const { node = descendThrow(*inner, branch); auto leaf = lastBelow(node, stack, branch); - if (!leaf) + if (leaf == nullptr) Throw(type_, id); return const_iterator(this, leaf->peekItem().get(), std::move(stack)); } @@ -667,7 +667,7 @@ SHAMap::delItem(uint256 const& id) if (!leaf || (leaf->peekItem()->key() != id)) return false; - SHAMapNodeType type = leaf->getType(); + SHAMapNodeType const type = leaf->getType(); using TreeNodeType = intr_ptr::SharedPtr; @@ -677,7 +677,7 @@ SHAMap::delItem(uint256 const& id) while (!stack.empty()) { auto node = intr_ptr::static_pointer_cast(stack.top().first); - SHAMapNodeID nodeID = stack.top().second; + SHAMapNodeID const nodeID = stack.top().second; stack.pop(); node = unshareNode(std::move(node), nodeID); @@ -741,7 +741,7 @@ SHAMap::addGiveItem(SHAMapNodeType type, boost::intrusive_ptr XRPL_ASSERT(type != SHAMapNodeType::tnINNER, "xrpl::SHAMap::addGiveItem : valid type input"); // add the specified item, does not update - uint256 tag = item->key(); + uint256 const tag = item->key(); SharedPtrNodeStack stack; walkTowardsKey(tag, &stack); @@ -763,7 +763,7 @@ SHAMap::addGiveItem(SHAMapNodeType type, boost::intrusive_ptr { // easy case, we end on an inner node auto inner = intr_ptr::static_pointer_cast(node); - int branch = selectBranch(nodeID, tag); + int const branch = selectBranch(nodeID, tag); XRPL_ASSERT( inner->isEmptyBranch(branch), "xrpl::SHAMap::addGiveItem : inner branch is empty"); inner->setChild(branch, makeTypedLeaf(type, std::move(item), cowid_)); @@ -825,7 +825,7 @@ bool SHAMap::updateGiveItem(SHAMapNodeType type, boost::intrusive_ptr item) { // can't change the tag but can change the hash - uint256 tag = item->key(); + uint256 const tag = item->key(); XRPL_ASSERT(state_ != SHAMapState::Immutable, "xrpl::SHAMap::updateGiveItem : not immutable"); @@ -995,7 +995,7 @@ SHAMap::walkSubTree(bool doWrite, NodeObjectType t) int pos = 0; // We can't flush an inner node until we flush its children - while (1) + while (true) { while (pos < branchFactor) { @@ -1007,7 +1007,7 @@ SHAMap::walkSubTree(bool doWrite, NodeObjectType t) { // No need to do I/O. If the node isn't linked, // it can't need to be flushed - int branch = pos; + int const branch = pos; auto child = node->getChild(pos++); if (child && (child->cowid() != 0)) @@ -1021,10 +1021,7 @@ SHAMap::walkSubTree(bool doWrite, NodeObjectType t) // save our place and work on this node stack.emplace(std::move(node), branch); - // The semantics of this changes when we move to c++-20 - // Right now no move will occur; With c++-20 child will - // be moved from. - node = intr_ptr::static_pointer_cast(std::move(child)); + node = intr_ptr::static_pointer_cast(child); pos = 0; } else @@ -1109,7 +1106,7 @@ SHAMap::dump(bool hash) const if (!inner->isEmptyBranch(i)) { auto child = inner->getChildPointer(i); - if (child) + if (child != nullptr) { XRPL_ASSERT( child->getHash() == inner->getChildHash(i), diff --git a/src/libxrpl/shamap/SHAMapDelta.cpp b/src/libxrpl/shamap/SHAMapDelta.cpp index 98a31fea55..ded57760f1 100644 --- a/src/libxrpl/shamap/SHAMapDelta.cpp +++ b/src/libxrpl/shamap/SHAMapDelta.cpp @@ -136,7 +136,7 @@ SHAMap::compare(SHAMap const& otherMap, Delta& differences, int maxCount) const auto [ourNode, otherNode] = nodeStack.top(); nodeStack.pop(); - if (!ourNode || !otherNode) + if ((ourNode == nullptr) || (otherNode == nullptr)) { // LCOV_EXCL_START UNREACHABLE("xrpl::SHAMap::compare : missing a node"); @@ -241,14 +241,14 @@ SHAMap::walkMap(std::vector& missingNodes, int maxMissing) co while (!nodeStack.empty()) { - intr_ptr::SharedPtr node = std::move(nodeStack.top()); + intr_ptr::SharedPtr const node = std::move(nodeStack.top()); nodeStack.pop(); for (int i = 0; i < 16; ++i) { if (!node->isEmptyBranch(i)) { - intr_ptr::SharedPtr nextNode = descendNoStore(*node, i); + intr_ptr::SharedPtr const nextNode = descendNoStore(*node, i); if (nextNode) { @@ -310,7 +310,8 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis { while (!nodeStack.empty()) { - intr_ptr::SharedPtr node = std::move(nodeStack.top()); + intr_ptr::SharedPtr const node = + std::move(nodeStack.top()); XRPL_ASSERT(node, "xrpl::SHAMap::walkMapParallel : non-null node"); nodeStack.pop(); @@ -318,7 +319,7 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis { if (node->isEmptyBranch(i)) continue; - intr_ptr::SharedPtr nextNode = + intr_ptr::SharedPtr const nextNode = descendNoStore(*node, i); if (nextNode) @@ -332,7 +333,7 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis } else { - std::lock_guard l{m}; + std::lock_guard const l{m}; missingNodes.emplace_back(type_, node->getChildHash(i)); if (--maxMissing <= 0) return; @@ -342,7 +343,7 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis } catch (SHAMapMissingNode const& e) { - std::lock_guard l(m); + std::lock_guard const l(m); exceptions.push_back(e); } }, @@ -352,7 +353,7 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis for (std::thread& worker : workers) worker.join(); - std::lock_guard l(m); + std::lock_guard const l(m); if (exceptions.empty()) return true; std::stringstream ss; diff --git a/src/libxrpl/shamap/SHAMapInnerNode.cpp b/src/libxrpl/shamap/SHAMapInnerNode.cpp index 599d343745..91249d139e 100644 --- a/src/libxrpl/shamap/SHAMapInnerNode.cpp +++ b/src/libxrpl/shamap/SHAMapInnerNode.cpp @@ -82,7 +82,7 @@ SHAMapInnerNode::clone(std::uint32_t cowid) const } spinlock sl(lock_); - std::lock_guard lock(sl); + std::lock_guard const lock(sl); if (thisIsSparse) { @@ -313,7 +313,7 @@ SHAMapInnerNode::getChildPointer(int branch) auto const index = *getChildIndex(branch); packed_spinlock sl(lock_, index); - std::lock_guard lock(sl); + std::lock_guard const lock(sl); return hashesAndChildren_.getChildren()[index].get(); } @@ -328,7 +328,7 @@ SHAMapInnerNode::getChild(int branch) auto const index = *getChildIndex(branch); packed_spinlock sl(lock_, index); - std::lock_guard lock(sl); + std::lock_guard const lock(sl); return hashesAndChildren_.getChildren()[index]; } @@ -361,7 +361,7 @@ SHAMapInnerNode::canonicalizeChild(int branch, intr_ptr::SharedPtr("Incorrect mask for " + to_string(*this)); SHAMapNodeID node{depth_ + 1, id_}; - node.id_.begin()[depth_ / 2] |= (depth_ & 1) ? m : (m << 4); + node.id_.begin()[depth_ / 2] |= ((depth_ & 1) != 0u) ? m : (m << 4); return node; } @@ -87,7 +87,7 @@ deserializeSHAMapNodeID(void const* data, std::size_t size) if (size == 33) { - unsigned int depth = *(static_cast(data) + 32); + unsigned int const depth = *(static_cast(data) + 32); if (depth <= SHAMap::leafDepth) { auto const id = uint256::fromVoid(data); @@ -106,7 +106,7 @@ selectBranch(SHAMapNodeID const& id, uint256 const& hash) auto const depth = id.getDepth(); auto branch = static_cast(*(hash.begin() + (depth / 2))); - if (depth & 1) + if ((depth & 1) != 0u) { branch &= 0xf; } diff --git a/src/libxrpl/shamap/SHAMapSync.cpp b/src/libxrpl/shamap/SHAMapSync.cpp index c6e4c3dcb0..2074b43cb4 100644 --- a/src/libxrpl/shamap/SHAMapSync.cpp +++ b/src/libxrpl/shamap/SHAMapSync.cpp @@ -41,7 +41,7 @@ SHAMap::visitNodes(std::function const& function) const { if (!node->isEmptyBranch(pos)) { - intr_ptr::SharedPtr child = descendNoStore(*node, pos); + intr_ptr::SharedPtr const child = descendNoStore(*node, pos); if (!function(*child)) return; @@ -93,13 +93,13 @@ SHAMap::visitDifferences( if (root_->getHash().isZero()) return; - if (have && (root_->getHash() == have->root_->getHash())) + if ((have != nullptr) && (root_->getHash() == have->root_->getHash())) return; if (root_->isLeaf()) { auto leaf = intr_ptr::static_pointer_cast(root_); - if (!have || !have->hasLeafNode(leaf->peekItem()->key(), leaf->getHash())) + if ((have == nullptr) || !have->hasLeafNode(leaf->peekItem()->key(), leaf->getHash())) function(*root_); return; } @@ -124,16 +124,16 @@ SHAMap::visitDifferences( if (!node->isEmptyBranch(i)) { auto const& childHash = node->getChildHash(i); - SHAMapNodeID childID = nodeID.getChildNodeID(i); + SHAMapNodeID const childID = nodeID.getChildNodeID(i); auto next = descendThrow(node, i); if (next->isInner()) { - if (!have || !have->hasInnerNode(childID, childHash)) + if ((have == nullptr) || !have->hasInnerNode(childID, childHash)) stack.push({safe_downcast(next), childID}); } else if ( - !have || + (have == nullptr) || !have->hasLeafNode( safe_downcast(next)->peekItem()->key(), childHash)) { @@ -160,7 +160,7 @@ SHAMap::gmn_ProcessNodes(MissingNodes& mn, MissingNodes::StackEntry& se) while (currentChild < 16) { - int branch = (firstChild + currentChild++) % 16; + int const branch = (firstChild + currentChild++) % 16; if (node->isEmptyBranch(branch)) continue; @@ -182,7 +182,7 @@ SHAMap::gmn_ProcessNodes(MissingNodes& mn, MissingNodes::StackEntry& se) [node, nodeID, branch, &mn]( intr_ptr::SharedPtr found, SHAMapHash const&) { // a read completed asynchronously - std::unique_lock lock{mn.deferLock_}; + std::unique_lock const lock{mn.deferLock_}; mn.finishedReads_.emplace_back(node, nodeID, branch, std::move(found)); mn.deferCondVar_.notify_one(); }); @@ -192,7 +192,7 @@ SHAMap::gmn_ProcessNodes(MissingNodes& mn, MissingNodes::StackEntry& se) fullBelow = false; ++mn.deferred_; } - else if (!d) + else if (d == nullptr) { // node is not in database @@ -327,7 +327,7 @@ SHAMap::getMissingNodes(int max, SHAMapSyncFilter* filter) if ((node == nullptr) && !mn.stack_.empty()) { // Pick up where we left off with this node's parent - bool was = fullBelow; // was full below + bool const was = fullBelow; // was full below pos = mn.stack_.top(); mn.stack_.pop(); @@ -347,7 +347,7 @@ SHAMap::getMissingNodes(int max, SHAMapSyncFilter* filter) // We have either emptied the stack or // posted as many deferred reads as we can - if (mn.deferred_) + if (mn.deferred_ != 0) gmn_ProcessDeferredReads(mn); if (mn.max_ <= 0) @@ -402,9 +402,9 @@ SHAMap::getNodeFat( auto node = root_.get(); SHAMapNodeID nodeID; - while (node && node->isInner() && (nodeID.getDepth() < wanted.getDepth())) + while ((node != nullptr) && node->isInner() && (nodeID.getDepth() < wanted.getDepth())) { - int branch = selectBranch(nodeID, wanted.getNodeID()); + int const branch = selectBranch(nodeID, wanted.getNodeID()); auto inner = safe_downcast(node); if (inner->isEmptyBranch(branch)) return false; @@ -445,7 +445,7 @@ SHAMap::getNodeFat( // We descend inner nodes with only a single child // without decrementing the depth auto inner = safe_downcast(node); - int bc = inner->getBranchCount(); + int const bc = inner->getBranchCount(); if ((depth > 0) || (bc == 1)) { @@ -509,7 +509,7 @@ SHAMap::addRootNode(SHAMapHash const& hash, Slice const& rootNode, SHAMapSyncFil if (root_->isLeaf()) clearSynching(); - if (filter) + if (filter != nullptr) { Serializer s; root_->serializeWithPrefix(s); @@ -615,7 +615,7 @@ SHAMap::addKnownNode(SHAMapNodeID const& node, Slice const& rawNode, SHAMapSyncF newNode = prevNode->canonicalizeChild(branch, std::move(newNode)); - if (filter) + if (filter != nullptr) { Serializer s; newNode->serializeWithPrefix(s); @@ -643,7 +643,7 @@ SHAMap::deepCompare(SHAMap& other) const auto const [node, otherNode] = stack.top(); stack.pop(); - if (!node || !otherNode) + if ((node == nullptr) || (otherNode == nullptr)) { JLOG(journal_.info()) << "unable to fetch node"; return false; @@ -685,7 +685,7 @@ SHAMap::deepCompare(SHAMap& other) const auto next = descend(node_inner, i); auto otherNext = other.descend(other_inner, i); - if (!next || !otherNext) + if ((next == nullptr) || (otherNext == nullptr)) { JLOG(journal_.warn()) << "unable to fetch inner node"; return false; @@ -709,7 +709,7 @@ SHAMap::hasInnerNode(SHAMapNodeID const& targetNodeID, SHAMapHash const& targetN while (node->isInner() && (nodeID.getDepth() < targetNodeID.getDepth())) { - int branch = selectBranch(nodeID, targetNodeID.getNodeID()); + int const branch = selectBranch(nodeID, targetNodeID.getNodeID()); auto inner = safe_downcast(node); if (inner->isEmptyBranch(branch)) return false; @@ -734,7 +734,7 @@ SHAMap::hasLeafNode(uint256 const& tag, SHAMapHash const& targetNodeHash) const do { - int branch = selectBranch(nodeID, tag); + int const branch = selectBranch(nodeID, tag); auto inner = safe_downcast(node); if (inner->isEmptyBranch(branch)) return false; // Dead end, node must not be here diff --git a/src/libxrpl/tx/ApplyContext.cpp b/src/libxrpl/tx/ApplyContext.cpp index f62c63d1e6..d503643662 100644 --- a/src/libxrpl/tx/ApplyContext.cpp +++ b/src/libxrpl/tx/ApplyContext.cpp @@ -40,7 +40,7 @@ ApplyContext::discard() std::optional ApplyContext::apply(TER ter) { - return view_->apply(base_, tx, ter, parentBatchId_, flags_ & tapDRY_RUN, journal); + return view_->apply(base_, tx, ter, parentBatchId_, (flags_ & tapDRY_RUN) != 0u, journal); } std::size_t @@ -98,7 +98,7 @@ ApplyContext::checkInvariantsHelper( // short-circuits). While the logic is still correct, the log // message won't be. Every failed invariant should write to the log, // not just the first one. - std::array finalizers{ + std::array const finalizers{ {std::get(checkers).finalize(tx, result, fee, *view_, journal)...}}; // call each check's finalizer to see that it passes diff --git a/src/libxrpl/tx/SignerEntries.cpp b/src/libxrpl/tx/SignerEntries.cpp index aca1f2c19a..75659a7f04 100644 --- a/src/libxrpl/tx/SignerEntries.cpp +++ b/src/libxrpl/tx/SignerEntries.cpp @@ -12,8 +12,6 @@ namespace xrpl { Expected, NotTEC> SignerEntries::deserialize(STObject const& obj, beast::Journal journal, std::string_view annotation) { - std::pair, NotTEC> s; - if (!obj.isFieldPresent(sfSignerEntries)) { JLOG(journal.trace()) << "Malformed " << annotation << ": Need signer entry array."; diff --git a/src/libxrpl/tx/Transactor.cpp b/src/libxrpl/tx/Transactor.cpp index 6e334b5563..8847174122 100644 --- a/src/libxrpl/tx/Transactor.cpp +++ b/src/libxrpl/tx/Transactor.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -35,7 +34,7 @@ preflight0(PreflightContext const& ctx, std::uint32_t flagMask) if (!isPseudoTx(ctx.tx) || ctx.tx.isFieldPresent(sfNetworkID)) { - uint32_t nodeNID = ctx.registry.getNetworkIDService().getNetworkID(); + uint32_t const nodeNID = ctx.registry.get().getNetworkIDService().getNetworkID(); std::optional txNID = ctx.tx[~sfNetworkID]; if (nodeNID <= 1024) @@ -65,7 +64,7 @@ preflight0(PreflightContext const& ctx, std::uint32_t flagMask) return temINVALID; } - if (ctx.tx.getFlags() & flagMask) + if ((ctx.tx.getFlags() & flagMask) != 0u) { JLOG(ctx.j.debug()) << ctx.tx.peekAtField(sfTransactionType).getFullText() << ": invalid flags."; @@ -96,7 +95,7 @@ preflightCheckSigningKey(STObject const& sigObject, beast::Journal j) std::optional preflightCheckSimulateKeys(ApplyFlags flags, STObject const& sigObject, beast::Journal j) { - if (flags & tapDRY_RUN) // simulation + if ((flags & tapDRY_RUN) != 0u) // simulation { std::optional const signature = sigObject[~sfTxnSignature]; if (signature && !signature->empty()) @@ -212,7 +211,7 @@ Transactor::preflight2(PreflightContext const& ctx) // Do not add any checks after this point that are relevant for // batch inner transactions. They will be skipped. - auto const sigValid = checkValidity(ctx.registry.getHashRouter(), ctx.tx, ctx.rules); + auto const sigValid = checkValidity(ctx.registry.get().getHashRouter(), ctx.tx, ctx.rules); if (sigValid.first == Validity::SigBad) { // LCOV_EXCL_START JLOG(ctx.j.debug()) << "preflight2: bad signature. " << sigValid.second; @@ -302,7 +301,7 @@ Transactor::calculateOwnerReserveFee(ReadView const& view, STTx const& tx) // need to rethink charging an owner reserve as a transaction fee. // TODO: This function is static, and I don't want to add more parameters. // When it is finally refactored to be in a context that has access to the - // Application, include "app().overlay().networkID() > 2 ||" in the + // Application, include "app().getOverlay().networkID() > 2 ||" in the // condition. XRPL_ASSERT( view.fees().increment > view.fees().base * 100, @@ -318,7 +317,7 @@ Transactor::minimumFee( Fees const& fees, ApplyFlags flags) { - return scaleFeeLoad(baseFee, registry.getFeeTrack(), fees, flags & tapUNLIMITED); + return scaleFeeLoad(baseFee, registry.getFeeTrack(), fees, (flags & tapUNLIMITED) != 0u); } TER @@ -329,7 +328,7 @@ Transactor::checkFee(PreclaimContext const& ctx, XRPAmount baseFee) auto const feePaid = ctx.tx[sfFee].xrp(); - if (ctx.flags & tapBATCH) + if ((ctx.flags & tapBATCH) != 0u) { if (feePaid == beast::zero) return tesSUCCESS; @@ -364,6 +363,13 @@ Transactor::checkFee(PreclaimContext const& ctx, XRPAmount baseFee) auto const balance = (*sle)[sfBalance].xrp(); + // NOTE: Because preclaim evaluates against a static readview, it + // does not reflect fee deductions from other transactions paid by + // the same account within the current ledger. + // As a result, if an account's balance is over-committed across multiple + // transactions, this check may pass optimistically. + // The fee shortfall will be handled by the Transactor::reset mechanism, + // which caps the fee to the remaining actual balance. if (balance < feePaid) { JLOG(ctx.j.trace()) << "Insufficient balance:" << " balance=" << to_string(balance) @@ -653,7 +659,7 @@ Transactor::checkSign( return tesSUCCESS; } - if ((flags & tapDRY_RUN) && pkSigner.empty() && !sigObject.isFieldPresent(sfSigners)) + if (((flags & tapDRY_RUN) != 0u) && pkSigner.empty() && !sigObject.isFieldPresent(sfSigners)) { // simulate: skip signature validation when neither SigningPubKey nor // Signers are provided @@ -677,8 +683,7 @@ Transactor::checkSign( } // Look up the account. - auto const idSigner = - pkSigner.empty() ? idAccount : calcAccountID(PublicKey(makeSlice(pkSigner))); + auto const idSigner = calcAccountID(PublicKey(makeSlice(pkSigner))); auto const sleAccount = view.read(keylet::account(idAccount)); if (!sleAccount) return terNO_ACCOUNT; @@ -779,7 +784,7 @@ Transactor::checkMultiSign( beast::Journal const j) { // Get id's SignerList and Quorum. - std::shared_ptr sleAccountSigners = view.read(keylet::signers(id)); + std::shared_ptr const sleAccountSigners = view.read(keylet::signers(id)); // If the signer list doesn't exist the account is not multi-signing. if (!sleAccountSigners) { @@ -886,7 +891,7 @@ Transactor::checkMultiSign( // Master Key. Account may not have asfDisableMaster set. std::uint32_t const signerAccountFlags = sleTxSignerRoot->getFieldU32(sfFlags); - if (signerAccountFlags & lsfDisableMaster) + if ((signerAccountFlags & lsfDisableMaster) != 0u) { JLOG(j.trace()) << "applyTransaction: Signer:Account lsfDisableMaster."; return tefMASTER_DISABLED; @@ -1075,15 +1080,15 @@ Transactor::operator()() // // raii classes for the current ledger rules. // fixUniversalNumber predate the rulesGuard and should be replaced. - NumberSO stNumberSO{view().rules().enabled(fixUniversalNumber)}; - CurrentTransactionRulesGuard currentTransactionRulesGuard(view().rules()); + NumberSO const stNumberSO{view().rules().enabled(fixUniversalNumber)}; + CurrentTransactionRulesGuard const currentTransactionRulesGuard(view().rules()); #ifdef DEBUG { Serializer ser; ctx_.tx.add(ser); SerialIter sit(ser.slice()); - STTx s2(sit); + STTx const s2(sit); if (!s2.isEquivalent(ctx_.tx)) { @@ -1097,7 +1102,8 @@ Transactor::operator()() } #endif - if (auto const& trap = ctx_.registry.trapTxID(); trap && *trap == ctx_.tx.getTransactionID()) + if (auto const& trap = ctx_.registry.get().getTrapTxID(); + trap && *trap == ctx_.tx.getTransactionID()) { trapTransaction(*trap); } @@ -1119,7 +1125,7 @@ Transactor::operator()() if (ctx_.size() > oversizeMetaDataCap) result = tecOVERSIZE; - if (isTecClaim(result) && (view().flags() & tapFAIL_HARD)) + if (isTecClaim(result) && ((view().flags() & tapFAIL_HARD) != 0u)) { // If the tapFAIL_HARD flag is set, a tec result // must not do anything @@ -1199,16 +1205,27 @@ Transactor::operator()() // If necessary, remove any offers found unfunded during processing if ((result == tecOVERSIZE) || (result == tecKILLED)) - removeUnfundedOffers(view(), removedOffers, ctx_.registry.journal("View")); + { + removeUnfundedOffers(view(), removedOffers, ctx_.registry.get().getJournal("View")); + } if (result == tecEXPIRED) - removeExpiredNFTokenOffers(view(), expiredNFTokenOffers, ctx_.registry.journal("View")); + { + removeExpiredNFTokenOffers( + view(), expiredNFTokenOffers, ctx_.registry.get().getJournal("View")); + } if (result == tecINCOMPLETE) - removeDeletedTrustLines(view(), removedTrustLines, ctx_.registry.journal("View")); + { + removeDeletedTrustLines( + view(), removedTrustLines, ctx_.registry.get().getJournal("View")); + } if (result == tecEXPIRED) - removeExpiredCredentials(view(), expiredCredentials, ctx_.registry.journal("View")); + { + removeExpiredCredentials( + view(), expiredCredentials, ctx_.registry.get().getJournal("View")); + } applied = isTecClaim(result); } @@ -1264,7 +1281,7 @@ Transactor::operator()() metadata = ctx_.apply(result); } - if (ctx_.flags() & tapDRY_RUN) + if ((ctx_.flags() & tapDRY_RUN) != 0u) { applied = false; } diff --git a/src/libxrpl/tx/apply.cpp b/src/libxrpl/tx/apply.cpp index 8fd898366e..c8016002c2 100644 --- a/src/libxrpl/tx/apply.cpp +++ b/src/libxrpl/tx/apply.cpp @@ -116,7 +116,7 @@ template ApplyResult apply(ServiceRegistry& registry, OpenView& view, PreflightChecks&& preflightChecks) { - NumberSO stNumberSO{view.rules().enabled(fixUniversalNumber)}; + NumberSO const stNumberSO{view.rules().enabled(fixUniversalNumber)}; return doApply(preclaim(preflightChecks(), registry, view), registry, view); } @@ -149,7 +149,7 @@ applyBatchTransactions( beast::Journal j) { XRPL_ASSERT( - batchTxn.getTxnType() == ttBATCH && batchTxn.getFieldArray(sfRawTransactions).size() != 0, + batchTxn.getTxnType() == ttBATCH && !batchTxn.getFieldArray(sfRawTransactions).empty(), "Batch transaction missing sfRawTransactions"); auto const parentBatchId = batchTxn.getTransactionID(); @@ -188,13 +188,13 @@ applyBatchTransactions( if (!isTesSuccess(result.ter)) { - if (mode & tfAllOrNothing) + if ((mode & tfAllOrNothing) != 0u) return false; - if (mode & tfUntilFailure) + if ((mode & tfUntilFailure) != 0u) break; } - else if (mode & tfOnlyOne) + else if ((mode & tfOnlyOne) != 0u) { break; } diff --git a/src/libxrpl/tx/applySteps.cpp b/src/libxrpl/tx/applySteps.cpp index 6c6b3f8c98..447ba685cc 100644 --- a/src/libxrpl/tx/applySteps.cpp +++ b/src/libxrpl/tx/applySteps.cpp @@ -95,34 +95,32 @@ with_txn_type(Rules const& rules, TxType txnType, F&& f) // For Transactor::Normal // -// clang-format off // Current formatter for rippled is based on clang-10, which does not handle `requires` clauses template -requires(T::ConsequencesFactory == Transactor::Normal) + requires(T::ConsequencesFactory == Transactor::Normal) TxConsequences - consequences_helper(PreflightContext const& ctx) +consequences_helper(PreflightContext const& ctx) { return TxConsequences(ctx.tx); }; // For Transactor::Blocker template -requires(T::ConsequencesFactory == Transactor::Blocker) + requires(T::ConsequencesFactory == Transactor::Blocker) TxConsequences - consequences_helper(PreflightContext const& ctx) +consequences_helper(PreflightContext const& ctx) { return TxConsequences(ctx.tx, TxConsequences::blocker); }; // For Transactor::Custom template -requires(T::ConsequencesFactory == Transactor::Custom) + requires(T::ConsequencesFactory == Transactor::Custom) TxConsequences - consequences_helper(PreflightContext const& ctx) +consequences_helper(PreflightContext const& ctx) { return T::makeTxConsequences(ctx); }; -// clang-format on static std::pair invoke_preflight(PreflightContext const& ctx) diff --git a/src/libxrpl/tx/invariants/AMMInvariant.cpp b/src/libxrpl/tx/invariants/AMMInvariant.cpp index b64be6192b..96df97016f 100644 --- a/src/libxrpl/tx/invariants/AMMInvariant.cpp +++ b/src/libxrpl/tx/invariants/AMMInvariant.cpp @@ -28,7 +28,7 @@ ValidAMM::visitEntry( } // AMM pool changed else if ( - (type == ltRIPPLE_STATE && after->getFlags() & lsfAMMNode) || + (type == ltRIPPLE_STATE && ((after->getFlags() & lsfAMMNode) != 0u)) || (type == ltACCOUNT_ROOT && after->isFieldPresent(sfAMMID))) { ammPoolChanged_ = true; diff --git a/src/libxrpl/tx/invariants/FreezeInvariant.cpp b/src/libxrpl/tx/invariants/FreezeInvariant.cpp index f38d260782..0048da7a84 100644 --- a/src/libxrpl/tx/invariants/FreezeInvariant.cpp +++ b/src/libxrpl/tx/invariants/FreezeInvariant.cpp @@ -127,7 +127,7 @@ TransfersNotFrozen::calculateBalanceChange( bool isDelete) { auto const getBalance = [](auto const& line, auto const& other, bool zero) { - STAmount amt = line ? line->at(sfBalance) : other->at(sfBalance).zeroed(); + STAmount const amt = line ? line->at(sfBalance) : other->at(sfBalance).zeroed(); return zero ? amt.zeroed() : amt; }; @@ -271,12 +271,7 @@ TransfersNotFrozen::validateFrozenState( "xrpl::TransfersNotFrozen::validateFrozenState : enforce " "invariant."); - if (enforce) - { - return false; - } - - return true; + return !enforce; } } // namespace xrpl diff --git a/src/libxrpl/tx/invariants/InvariantCheck.cpp b/src/libxrpl/tx/invariants/InvariantCheck.cpp index 16108472aa..bf0f65f000 100644 --- a/src/libxrpl/tx/invariants/InvariantCheck.cpp +++ b/src/libxrpl/tx/invariants/InvariantCheck.cpp @@ -631,11 +631,11 @@ NoDeepFreezeTrustLinesWithoutFreeze::visitEntry( if (after && after->getType() == ltRIPPLE_STATE) { std::uint32_t const uFlags = after->getFieldU32(sfFlags); - bool const lowFreeze = uFlags & lsfLowFreeze; - bool const lowDeepFreeze = uFlags & lsfLowDeepFreeze; + bool const lowFreeze = (uFlags & lsfLowFreeze) != 0u; + bool const lowDeepFreeze = (uFlags & lsfLowDeepFreeze) != 0u; - bool const highFreeze = uFlags & lsfHighFreeze; - bool const highDeepFreeze = uFlags & lsfHighDeepFreeze; + bool const highFreeze = (uFlags & lsfHighFreeze) != 0u; + bool const highDeepFreeze = (uFlags & lsfHighDeepFreeze) != 0u; deepFreezeWithoutFreeze_ = (lowDeepFreeze && !lowFreeze) || (highDeepFreeze && !highFreeze); } diff --git a/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp new file mode 100644 index 0000000000..2bc9e622ad --- /dev/null +++ b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp @@ -0,0 +1,194 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidLoanBroker::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (after) + { + if (after->getType() == ltLOAN_BROKER) + { + auto& broker = brokers_[after->key()]; + broker.brokerBefore = before; + broker.brokerAfter = after; + } + else if (after->getType() == ltACCOUNT_ROOT && after->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = after->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + else if (after->getType() == ltRIPPLE_STATE) + { + lines_.emplace_back(after); + } + else if (after->getType() == ltMPTOKEN) + { + mpts_.emplace_back(after); + } + } +} + +bool +ValidLoanBroker::goodZeroDirectory( + ReadView const& view, + SLE::const_ref dir, + beast::Journal const& j) +{ + auto const next = dir->at(~sfIndexNext); + auto const prev = dir->at(~sfIndexPrevious); + if ((prev && (*prev != 0u)) || (next && (*next != 0u))) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has multiple directory pages"; + return false; + } + auto indexes = dir->getFieldV256(sfIndexes); + if (indexes.size() > 1) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has multiple indexes in the Directory root"; + return false; + } + if (indexes.size() == 1) + { + auto const index = indexes.value().front(); + auto const sle = view.read(keylet::unchecked(index)); + if (!sle) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker directory corrupt"; + return false; + } + if (sle->getType() != ltRIPPLE_STATE && sle->getType() != ltMPTOKEN) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has an unexpected entry in the directory"; + return false; + } + } + + return true; +} + +bool +ValidLoanBroker::finalize( + STTx const& tx, + TER const, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + // Loan Brokers will not exist on ledger if the Lending Protocol amendment + // is not enabled, so there's no need to check it. + + for (auto const& line : lines_) + { + for (auto const& field : {&sfLowLimit, &sfHighLimit}) + { + auto const account = view.read(keylet::account(line->at(*field).getIssuer())); + // This Invariant doesn't know about the rules for Trust Lines, so + // if the account is missing, don't treat it as an error. This + // loop is only concerned with finding Broker pseudo-accounts + if (account && account->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = account->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + } + } + for (auto const& mpt : mpts_) + { + auto const account = view.read(keylet::account(mpt->at(sfAccount))); + // This Invariant doesn't know about the rules for MPTokens, so + // if the account is missing, don't treat is as an error. This + // loop is only concerned with finding Broker pseudo-accounts + if (account && account->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = account->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + } + + for (auto const& [brokerID, broker] : brokers_) + { + auto const& after = + broker.brokerAfter ? broker.brokerAfter : view.read(keylet::loanbroker(brokerID)); + + if (!after) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker missing"; + return false; + } + + auto const& before = broker.brokerBefore; + + // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3123-invariants + // If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most + // one node (the root), which will only hold entries for `RippleState` + // or `MPToken` objects. + if (after->at(sfOwnerCount) == 0) + { + auto const dir = view.read(keylet::ownerDir(after->at(sfAccount))); + if (dir) + { + if (!goodZeroDirectory(view, dir, j)) + { + return false; + } + } + } + if (before && before->at(sfLoanSequence) > after->at(sfLoanSequence)) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker sequence number " + "decreased"; + return false; + } + if (after->at(sfDebtTotal) < 0) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker debt total is negative"; + return false; + } + if (after->at(sfCoverAvailable) < 0) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available is negative"; + return false; + } + auto const vault = view.read(keylet::vault(after->at(sfVaultID))); + if (!vault) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker vault ID is invalid"; + return false; + } + auto const& vaultAsset = vault->at(sfAsset); + if (after->at(sfCoverAvailable) < accountHolds( + view, + after->at(sfAccount), + vaultAsset, + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j)) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available " + "is less than pseudo-account asset balance"; + return false; + } + } + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/LoanInvariant.cpp b/src/libxrpl/tx/invariants/LoanInvariant.cpp index 0df7e409d1..6ce1261612 100644 --- a/src/libxrpl/tx/invariants/LoanInvariant.cpp +++ b/src/libxrpl/tx/invariants/LoanInvariant.cpp @@ -2,197 +2,11 @@ // #include #include -#include -#include -#include #include #include -#include namespace xrpl { -void -ValidLoanBroker::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (after) - { - if (after->getType() == ltLOAN_BROKER) - { - auto& broker = brokers_[after->key()]; - broker.brokerBefore = before; - broker.brokerAfter = after; - } - else if (after->getType() == ltACCOUNT_ROOT && after->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = after->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - else if (after->getType() == ltRIPPLE_STATE) - { - lines_.emplace_back(after); - } - else if (after->getType() == ltMPTOKEN) - { - mpts_.emplace_back(after); - } - } -} - -bool -ValidLoanBroker::goodZeroDirectory( - ReadView const& view, - SLE::const_ref dir, - beast::Journal const& j) const -{ - auto const next = dir->at(~sfIndexNext); - auto const prev = dir->at(~sfIndexPrevious); - if ((prev && *prev) || (next && *next)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has multiple directory pages"; - return false; - } - auto indexes = dir->getFieldV256(sfIndexes); - if (indexes.size() > 1) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has multiple indexes in the Directory root"; - return false; - } - if (indexes.size() == 1) - { - auto const index = indexes.value().front(); - auto const sle = view.read(keylet::unchecked(index)); - if (!sle) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker directory corrupt"; - return false; - } - if (sle->getType() != ltRIPPLE_STATE && sle->getType() != ltMPTOKEN) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has an unexpected entry in the directory"; - return false; - } - } - - return true; -} - -bool -ValidLoanBroker::finalize( - STTx const& tx, - TER const, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - // Loan Brokers will not exist on ledger if the Lending Protocol amendment - // is not enabled, so there's no need to check it. - - for (auto const& line : lines_) - { - for (auto const& field : {&sfLowLimit, &sfHighLimit}) - { - auto const account = view.read(keylet::account(line->at(*field).getIssuer())); - // This Invariant doesn't know about the rules for Trust Lines, so - // if the account is missing, don't treat it as an error. This - // loop is only concerned with finding Broker pseudo-accounts - if (account && account->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = account->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - } - } - for (auto const& mpt : mpts_) - { - auto const account = view.read(keylet::account(mpt->at(sfAccount))); - // This Invariant doesn't know about the rules for MPTokens, so - // if the account is missing, don't treat is as an error. This - // loop is only concerned with finding Broker pseudo-accounts - if (account && account->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = account->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - } - - for (auto const& [brokerID, broker] : brokers_) - { - auto const& after = - broker.brokerAfter ? broker.brokerAfter : view.read(keylet::loanbroker(brokerID)); - - if (!after) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker missing"; - return false; - } - - auto const& before = broker.brokerBefore; - - // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3123-invariants - // If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most - // one node (the root), which will only hold entries for `RippleState` - // or `MPToken` objects. - if (after->at(sfOwnerCount) == 0) - { - auto const dir = view.read(keylet::ownerDir(after->at(sfAccount))); - if (dir) - { - if (!goodZeroDirectory(view, dir, j)) - { - return false; - } - } - } - if (before && before->at(sfLoanSequence) > after->at(sfLoanSequence)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker sequence number " - "decreased"; - return false; - } - if (after->at(sfDebtTotal) < 0) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker debt total is negative"; - return false; - } - if (after->at(sfCoverAvailable) < 0) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available is negative"; - return false; - } - auto const vault = view.read(keylet::vault(after->at(sfVaultID))); - if (!vault) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker vault ID is invalid"; - return false; - } - auto const& vaultAsset = vault->at(sfAsset); - if (after->at(sfCoverAvailable) < accountHolds( - view, - after->at(sfAccount), - vaultAsset, - FreezeHandling::fhIGNORE_FREEZE, - AuthHandling::ahIGNORE_AUTH, - j)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available " - "is less than pseudo-account asset balance"; - return false; - } - } - return true; -} - -//------------------------------------------------------------------------------ - void ValidLoan::visitEntry( bool isDelete, @@ -236,8 +50,7 @@ ValidLoan::finalize( after->at(sfPrincipalOutstanding) == beast::zero && after->at(sfManagementFeeOutstanding) == beast::zero) { - JLOG(j.fatal()) << "Invariant failed: Loan with zero payments " - "remaining has not been paid off"; + JLOG(j.fatal()) << "Invariant failed: Fully paid off Loan still has payments remaining"; return false; } if (before && (before->isFlag(lsfLoanOverpayment) != after->isFlag(lsfLoanOverpayment))) diff --git a/src/libxrpl/tx/invariants/MPTInvariant.cpp b/src/libxrpl/tx/invariants/MPTInvariant.cpp index a3a5bf897d..7b76e70c86 100644 --- a/src/libxrpl/tx/invariants/MPTInvariant.cpp +++ b/src/libxrpl/tx/invariants/MPTInvariant.cpp @@ -56,7 +56,7 @@ ValidMPTIssuance::finalize( { auto const& rules = view.rules(); [[maybe_unused]] - bool enforceCreatedByIssuer = + bool const enforceCreatedByIssuer = rules.enabled(featureSingleAssetVault) || rules.enabled(featureLendingProtocol); if (mptCreatedByIssuer_) { diff --git a/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp index 02eaee0552..7365fc7b1a 100644 --- a/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp +++ b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp @@ -38,7 +38,7 @@ ValidPermissionedDomain::visitEntry( break; } } - sleStatus.emplace_back(std::move(ss)); + sleStatus.emplace_back(ss); }; if (after) diff --git a/src/libxrpl/tx/invariants/VaultInvariant.cpp b/src/libxrpl/tx/invariants/VaultInvariant.cpp index f0dd82c2f8..c6b3295569 100644 --- a/src/libxrpl/tx/invariants/VaultInvariant.cpp +++ b/src/libxrpl/tx/invariants/VaultInvariant.cpp @@ -205,7 +205,7 @@ ValidVault::finalize( for (auto const& e : beforeMPTs_) { if (e.share.getMptID() == beforeVault.shareMPTID) - return std::move(e); + return e; } return std::nullopt; }(); @@ -374,7 +374,7 @@ ValidVault::finalize( for (auto const& e : beforeMPTs_) { if (e.share.getMptID() == beforeVault.shareMPTID) - return std::move(e); + return e; } return std::nullopt; }(); diff --git a/src/xrpld/app/paths/detail/AMMLiquidity.cpp b/src/libxrpl/tx/paths/AMMLiquidity.cpp similarity index 96% rename from src/xrpld/app/paths/detail/AMMLiquidity.cpp rename to src/libxrpl/tx/paths/AMMLiquidity.cpp index 72ee8eb261..bb7f229374 100644 --- a/src/xrpld/app/paths/detail/AMMLiquidity.cpp +++ b/src/libxrpl/tx/paths/AMMLiquidity.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include namespace xrpl { @@ -50,12 +50,10 @@ AMMLiquidity::generateFibSeqOffer(TAmounts const& balances if (ammContext_.curIters() == 0) return cur; - // clang-format off constexpr std::uint32_t fib[AMMContext::MaxIterations] = { - 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, - 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, - 196418, 317811, 514229, 832040, 1346269}; - // clang-format on + 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, + 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, + 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269}; XRPL_ASSERT( !ammContext_.maxItersReached(), diff --git a/src/xrpld/app/paths/detail/AMMOffer.cpp b/src/libxrpl/tx/paths/AMMOffer.cpp similarity index 95% rename from src/xrpld/app/paths/detail/AMMOffer.cpp rename to src/libxrpl/tx/paths/AMMOffer.cpp index 4871d2251a..79071850c2 100644 --- a/src/xrpld/app/paths/detail/AMMOffer.cpp +++ b/src/libxrpl/tx/paths/AMMOffer.cpp @@ -1,7 +1,6 @@ -#include -#include - #include +#include +#include namespace xrpl { @@ -11,11 +10,8 @@ AMMOffer::AMMOffer( TAmounts const& amounts, TAmounts const& balances, Quality const& quality) - : ammLiquidity_(ammLiquidity) - , amounts_(amounts) - , balances_(balances) - , quality_(quality) - , consumed_(false) + : ammLiquidity_(ammLiquidity), amounts_(amounts), balances_(balances), quality_(quality) + { } diff --git a/src/xrpld/app/paths/detail/BookStep.cpp b/src/libxrpl/tx/paths/BookStep.cpp similarity index 98% rename from src/xrpld/app/paths/detail/BookStep.cpp rename to src/libxrpl/tx/paths/BookStep.cpp index e0053956a8..ddba0c1ae9 100644 --- a/src/xrpld/app/paths/detail/BookStep.cpp +++ b/src/libxrpl/tx/paths/BookStep.cpp @@ -1,6 +1,3 @@ -#include -#include - #include #include #include @@ -11,6 +8,8 @@ #include #include #include +#include +#include #include #include #include @@ -452,7 +451,7 @@ public: std::uint32_t getOfrInRate(Step const* prevStep, AccountID const& owner, std::uint32_t trIn) const { - auto const srcAcct = prevStep ? prevStep->directStepSrcAcct() : std::nullopt; + auto const srcAcct = (prevStep != nullptr) ? prevStep->directStepSrcAcct() : std::nullopt; return owner == srcAcct // If offer crossing && prevStep is DirectI ? QUALITY_ONE // && src is offer owner @@ -467,9 +466,9 @@ public: AccountID const& strandDst, std::uint32_t trOut) const { - return // If offer crossing - prevStep && prevStep->bookStepBook() && // && prevStep is BookStep - owner == strandDst // && dest is offer owner + return // If offer crossing + (prevStep != nullptr) && prevStep->bookStepBook() && // && prevStep is BookStep + owner == strandDst // && dest is offer owner ? QUALITY_ONE : trOut; // then rate = QUALITY_ONE } @@ -1010,7 +1009,7 @@ BookStep::revImp( return DebtDirection::issues; }(); auto const r = forEachOffer(sb, afView, prevStepDebtDir, eachOffer); - boost::container::flat_set toRm = std::move(std::get<0>(r)); + boost::container::flat_set const toRm = std::move(std::get<0>(r)); std::uint32_t const offersConsumed = std::get<1>(r); offersUsed_ = offersConsumed; SetUnion(ofrsToRm, toRm); @@ -1172,7 +1171,7 @@ BookStep::fwdImp( return DebtDirection::issues; }(); auto const r = forEachOffer(sb, afView, prevStepDebtDir, eachOffer); - boost::container::flat_set toRm = std::move(std::get<0>(r)); + boost::container::flat_set const toRm = std::move(std::get<0>(r)); std::uint32_t const offersConsumed = std::get<1>(r); offersUsed_ = offersConsumed; SetUnion(ofrsToRm, toRm); @@ -1260,13 +1259,14 @@ BookStep::check(StrandContext const& ctx) const // Do not allow two books to output the same issue. This may cause offers on // one step to unfund offers in another step. - if (!ctx.seenBookOuts.insert(book_.out).second || ctx.seenDirectIssues[0].count(book_.out)) + if (!ctx.seenBookOuts.insert(book_.out).second || + (ctx.seenDirectIssues[0].count(book_.out) != 0u)) { JLOG(j_.debug()) << "BookStep: loop detected: " << *this; return temBAD_PATH_LOOP; } - if (ctx.seenDirectIssues[1].count(book_.out)) + if (ctx.seenDirectIssues[1].count(book_.out) != 0u) { JLOG(j_.debug()) << "BookStep: loop detected: " << *this; return temBAD_PATH_LOOP; @@ -1282,7 +1282,7 @@ BookStep::check(StrandContext const& ctx) const return tecNO_ISSUER; } - if (ctx.prevStep) + if (ctx.prevStep != nullptr) { if (auto const prev = ctx.prevStep->directStepSrcAcct()) { @@ -1292,7 +1292,7 @@ BookStep::check(StrandContext const& ctx) const auto sle = view.read(keylet::line(*prev, cur, book_.in.currency)); if (!sle) return terNO_LINE; - if ((*sle)[sfFlags] & ((cur > *prev) ? lsfHighNoRipple : lsfLowNoRipple)) + if (((*sle)[sfFlags] & ((cur > *prev) ? lsfHighNoRipple : lsfLowNoRipple)) != 0u) return terNO_RIPPLE; } } diff --git a/src/libxrpl/tx/paths/BookTip.cpp b/src/libxrpl/tx/paths/BookTip.cpp index 5611a081c3..f9b700b7af 100644 --- a/src/libxrpl/tx/paths/BookTip.cpp +++ b/src/libxrpl/tx/paths/BookTip.cpp @@ -5,7 +5,7 @@ namespace xrpl { BookTip::BookTip(ApplyView& view, Book const& book) - : view_(view), m_valid(false), m_book(getBookBase(book)), m_end(getQualityNext(m_book)) + : view_(view), m_book(getBookBase(book)), m_end(getQualityNext(m_book)) { } diff --git a/src/xrpld/app/paths/detail/DirectStep.cpp b/src/libxrpl/tx/paths/DirectStep.cpp similarity index 96% rename from src/xrpld/app/paths/detail/DirectStep.cpp rename to src/libxrpl/tx/paths/DirectStep.cpp index 0c8693eef4..9cae103d8f 100644 --- a/src/xrpld/app/paths/detail/DirectStep.cpp +++ b/src/libxrpl/tx/paths/DirectStep.cpp @@ -1,5 +1,3 @@ -#include - #include #include #include @@ -7,6 +5,7 @@ #include #include #include +#include #include #include @@ -224,15 +223,15 @@ public: using DirectStepI::check; - bool - verifyPrevStepDebtDirection(DebtDirection) const + static bool + verifyPrevStepDebtDirection(DebtDirection) { // A payment doesn't care whether or not prevStepRedeems. return true; } - bool - verifyDstQualityIn(std::uint32_t dstQIn) const + static bool + verifyDstQualityIn(std::uint32_t dstQIn) { // Payments have no particular expectations for what dstQIn will be. return true; @@ -275,8 +274,8 @@ public: using DirectStepI::check; - bool - verifyPrevStepDebtDirection(DebtDirection prevStepDir) const + static bool + verifyPrevStepDebtDirection(DebtDirection prevStepDir) { // During offer crossing we rely on the fact that prevStepRedeems // will *always* issue. That's because: @@ -288,16 +287,16 @@ public: return issues(prevStepDir); } - bool - verifyDstQualityIn(std::uint32_t dstQIn) const + static bool + verifyDstQualityIn(std::uint32_t dstQIn) { // Due to a couple of factors dstQIn is always QUALITY_ONE for // offer crossing. If that changes we need to know. return dstQIn == QUALITY_ONE; } - std::uint32_t - quality(ReadView const& sb, QualityDirection qDir) const; + static std::uint32_t + quality(ReadView const& sb, QualityDirection qDir); // Compute the maximum value that can flow from src->dst at // the best available quality. @@ -308,8 +307,8 @@ public: // Verify the consistency of the step. These checks are specific to // offer crossing and assume that general checks were already performed. - TER - check(StrandContext const& ctx, std::shared_ptr const& sleSrc) const; + static TER + check(StrandContext const& ctx, std::shared_ptr const& sleSrc); std::string logString() const override @@ -356,13 +355,13 @@ DirectIPaymentStep::quality(ReadView const& sb, QualityDirection qDir) const return QUALITY_ONE; auto const q = (*sle)[field]; - if (!q) + if (q == 0u) return QUALITY_ONE; return q; } std::uint32_t -DirectIOfferCrossingStep::quality(ReadView const&, QualityDirection qDir) const +DirectIOfferCrossingStep::quality(ReadView const&, QualityDirection qDir) { // If offer crossing then ignore trust line Quality fields. This // preserves a long-standing tradition. @@ -411,21 +410,21 @@ DirectIPaymentStep::check(StrandContext const& ctx, std::shared_ptr c auto const authField = (src_ > dst_) ? lsfHighAuth : lsfLowAuth; - if (((*sleSrc)[sfFlags] & lsfRequireAuth) && !((*sleLine)[sfFlags] & authField) && - (*sleLine)[sfBalance] == beast::zero) + if ((((*sleSrc)[sfFlags] & lsfRequireAuth) != 0u) && + (((*sleLine)[sfFlags] & authField) == 0u) && (*sleLine)[sfBalance] == beast::zero) { JLOG(j_.debug()) << "DirectStepI: can't receive IOUs from issuer without auth." << " src: " << src_; return terNO_AUTH; } - if (ctx.prevStep) + if (ctx.prevStep != nullptr) { if (ctx.prevStep->bookStepBook()) { auto const noRippleSrcToDst = ((*sleLine)[sfFlags] & ((src_ > dst_) ? lsfHighNoRipple : lsfLowNoRipple)); - if (noRippleSrcToDst) + if (noRippleSrcToDst != 0u) return terNO_RIPPLE; } } @@ -447,7 +446,7 @@ DirectIPaymentStep::check(StrandContext const& ctx, std::shared_ptr c } TER -DirectIOfferCrossingStep::check(StrandContext const&, std::shared_ptr const&) const +DirectIOfferCrossingStep::check(StrandContext const&, std::shared_ptr const&) { // The standard checks are all we can do because any remaining checks // require the existence of a trust line. Offer crossing does not @@ -714,7 +713,7 @@ template std::pair DirectStepI::qualitiesSrcRedeems(ReadView const& sb) const { - if (!prevStep_) + if (prevStep_ == nullptr) return {QUALITY_ONE, QUALITY_ONE}; auto const prevStepQIn = prevStep_->lineQualityIn(sb); @@ -829,7 +828,7 @@ DirectStepI::check(StrandContext const& ctx) const // If previous step was a direct step then we need to check // no ripple flags. - if (ctx.prevStep) + if (ctx.prevStep != nullptr) { if (auto prevSrc = ctx.prevStep->directStepSrcAcct()) { @@ -842,9 +841,9 @@ DirectStepI::check(StrandContext const& ctx) const Issue const srcIssue{currency_, src_}; Issue const dstIssue{currency_, dst_}; - if (ctx.seenBookOuts.count(srcIssue)) + if (ctx.seenBookOuts.count(srcIssue) != 0u) { - if (!ctx.prevStep) + if (ctx.prevStep == nullptr) { // LCOV_EXCL_START UNREACHABLE( @@ -905,7 +904,7 @@ make_DirectStepI( { TER ter = tefINTERNAL; std::unique_ptr r; - if (ctx.offerCrossing) + if (ctx.offerCrossing != 0u) { auto offerCrossingStep = std::make_unique(ctx, src, dst, c); ter = offerCrossingStep->check(ctx); diff --git a/src/libxrpl/tx/paths/OfferStream.cpp b/src/libxrpl/tx/paths/OfferStream.cpp index b7dc431b23..acb2df1429 100644 --- a/src/libxrpl/tx/paths/OfferStream.cpp +++ b/src/libxrpl/tx/paths/OfferStream.cpp @@ -203,7 +203,7 @@ TOfferStreamBase::step() if (!tip_.step(j_)) return false; - std::shared_ptr entry = tip_.entry(); + std::shared_ptr const entry = tip_.entry(); // If we exceed the maximum number of allowed steps, we're done. if (!counter_.step()) diff --git a/src/xrpld/app/paths/detail/PaySteps.cpp b/src/libxrpl/tx/paths/PaySteps.cpp similarity index 95% rename from src/xrpld/app/paths/detail/PaySteps.cpp rename to src/libxrpl/tx/paths/PaySteps.cpp index 9087647aeb..33b63f7714 100644 --- a/src/xrpld/app/paths/detail/PaySteps.cpp +++ b/src/libxrpl/tx/paths/PaySteps.cpp @@ -55,8 +55,8 @@ toStep( { auto& j = ctx.j; - if (ctx.isFirst && e1->isAccount() && (e1->getNodeType() & STPathElement::typeCurrency) && - isXRP(e1->getCurrency())) + if (ctx.isFirst && e1->isAccount() && + ((e1->getNodeType() & STPathElement::typeCurrency) != 0u) && isXRP(e1->getCurrency())) { return make_XRPEndpointStep(ctx, e1->getAccountID()); } @@ -83,10 +83,12 @@ toStep( (e2->getNodeType() & STPathElement::typeCurrency) || (e2->getNodeType() & STPathElement::typeIssuer), "xrpl::toStep : currency or issuer"); - auto const outCurrency = - e2->getNodeType() & STPathElement::typeCurrency ? e2->getCurrency() : curIssue.currency; - auto const outIssuer = - e2->getNodeType() & STPathElement::typeIssuer ? e2->getIssuerID() : curIssue.account; + auto const outCurrency = ((e2->getNodeType() & STPathElement::typeCurrency) != 0u) + ? e2->getCurrency() + : curIssue.currency; + auto const outIssuer = ((e2->getNodeType() & STPathElement::typeIssuer) != 0u) + ? e2->getIssuerID() + : curIssue.account; if (isXRP(curIssue.currency) && isXRP(outCurrency)) { @@ -132,12 +134,12 @@ toStrand( { auto const t = pe.getNodeType(); - if ((t & ~STPathElement::typeAll) || !t) + if (((t & ~STPathElement::typeAll) != 0u) || (t == 0u)) return {temBAD_PATH, Strand{}}; - bool const hasAccount = t & STPathElement::typeAccount; - bool const hasIssuer = t & STPathElement::typeIssuer; - bool const hasCurrency = t & STPathElement::typeCurrency; + bool const hasAccount = (t & STPathElement::typeAccount) != 0u; + bool const hasIssuer = (t & STPathElement::typeIssuer) != 0u; + bool const hasCurrency = (t & STPathElement::typeCurrency) != 0u; if (hasAccount && (hasIssuer || hasCurrency)) return {temBAD_PATH, Strand{}}; @@ -192,7 +194,7 @@ toStrand( STPathElement const& lastCurrency = *std::find_if(normPath.rbegin(), normPath.rend(), hasCurrency); if ((lastCurrency.getCurrency() != deliver.currency) || - (offerCrossing && lastCurrency.getIssuerID() != deliver.account)) + ((offerCrossing != 0u) && lastCurrency.getIssuerID() != deliver.account)) { normPath.emplace_back(std::nullopt, deliver.currency, deliver.account); } diff --git a/src/libxrpl/tx/paths/RippleCalc.cpp b/src/libxrpl/tx/paths/RippleCalc.cpp index e87ecab90f..c9f0c9e0fb 100644 --- a/src/libxrpl/tx/paths/RippleCalc.cpp +++ b/src/libxrpl/tx/paths/RippleCalc.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -35,17 +34,17 @@ RippleCalc::rippleCalculate( STPathSet const& spsPaths, std::optional const& domainID, - Logs& l, + ServiceRegistry& registry, Input const* const pInputs) { Output flowOut; PaymentSandbox flowSB(&view); - auto j = l.journal("Flow"); + auto j = registry.getJournal("Flow"); { - bool const defaultPaths = !pInputs ? true : pInputs->defaultPathsAllowed; + bool const defaultPaths = (pInputs == nullptr) ? true : pInputs->defaultPathsAllowed; - bool const partialPayment = !pInputs ? false : pInputs->partialPaymentAllowed; + bool const partialPayment = (pInputs == nullptr) ? false : pInputs->partialPaymentAllowed; auto const limitQuality = [&]() -> std::optional { if (pInputs && pInputs->limitQuality && saMaxAmountReq > beast::zero) diff --git a/src/xrpld/app/paths/detail/XRPEndpointStep.cpp b/src/libxrpl/tx/paths/XRPEndpointStep.cpp similarity index 99% rename from src/xrpld/app/paths/detail/XRPEndpointStep.cpp rename to src/libxrpl/tx/paths/XRPEndpointStep.cpp index 620d901f22..7452f57ecd 100644 --- a/src/xrpld/app/paths/detail/XRPEndpointStep.cpp +++ b/src/libxrpl/tx/paths/XRPEndpointStep.cpp @@ -1,5 +1,3 @@ -#include - #include #include #include @@ -9,6 +7,7 @@ #include #include #include +#include #include #include @@ -369,7 +368,7 @@ make_XRPEndpointStep(StrandContext const& ctx, AccountID const& acc) { TER ter = tefINTERNAL; std::unique_ptr r; - if (ctx.offerCrossing) + if (ctx.offerCrossing != 0u) { auto offerCrossingStep = std::make_unique(ctx, acc); ter = offerCrossingStep->check(ctx); diff --git a/src/libxrpl/tx/transactors/account/AccountDelete.cpp b/src/libxrpl/tx/transactors/account/AccountDelete.cpp index fed265c125..8c2f23b754 100644 --- a/src/libxrpl/tx/transactors/account/AccountDelete.cpp +++ b/src/libxrpl/tx/transactors/account/AccountDelete.cpp @@ -22,10 +22,7 @@ namespace xrpl { bool AccountDelete::checkExtraFeatures(PreflightContext const& ctx) { - if (ctx.tx.isFieldPresent(sfCredentialIDs) && !ctx.rules.enabled(featureCredentials)) - return false; - - return true; + return !ctx.tx.isFieldPresent(sfCredentialIDs) || ctx.rules.enabled(featureCredentials); } NotTEC @@ -216,7 +213,7 @@ AccountDelete::preclaim(PreclaimContext const& ctx) if (!sleDst) return tecNO_DST; - if ((*sleDst)[sfFlags] & lsfRequireDestTag && !ctx.tx[~sfDestinationTag]) + if ((((*sleDst)[sfFlags] & lsfRequireDestTag) != 0u) && !ctx.tx[~sfDestinationTag]) return tecDST_TAG_NEEDED; // If credentials are provided - check them anyway @@ -228,7 +225,7 @@ AccountDelete::preclaim(PreclaimContext const& ctx) if (!ctx.tx.isFieldPresent(sfCredentialIDs)) { // Check whether the destination account requires deposit authorization. - if (sleDst->getFlags() & lsfDepositAuth) + if ((sleDst->getFlags() & lsfDepositAuth) != 0u) { if (!ctx.view.exists(keylet::depositPreauth(dst, account))) return tecNO_PERMISSION; @@ -313,7 +310,7 @@ AccountDelete::preclaim(PreclaimContext const& ctx) LedgerEntryType const nodeType{safe_cast((*sleItem)[sfLedgerEntryType])}; - if (!nonObligationDeleter(nodeType)) + if (nonObligationDeleter(nodeType) == nullptr) return tecHAS_OBLIGATIONS; // We found a deletable directory entry. Count it. If we find too diff --git a/src/libxrpl/tx/transactors/account/AccountSet.cpp b/src/libxrpl/tx/transactors/account/AccountSet.cpp index 33759c6ec4..af3edb5768 100644 --- a/src/libxrpl/tx/transactors/account/AccountSet.cpp +++ b/src/libxrpl/tx/transactors/account/AccountSet.cpp @@ -63,8 +63,9 @@ AccountSet::preflight(PreflightContext const& ctx) // // RequireAuth // - bool bSetRequireAuth = (uTxFlags & tfRequireAuth) || (uSetFlag == asfRequireAuth); - bool bClearRequireAuth = (uTxFlags & tfOptionalAuth) || (uClearFlag == asfRequireAuth); + bool const bSetRequireAuth = ((uTxFlags & tfRequireAuth) != 0u) || (uSetFlag == asfRequireAuth); + bool const bClearRequireAuth = + ((uTxFlags & tfOptionalAuth) != 0u) || (uClearFlag == asfRequireAuth); if (bSetRequireAuth && bClearRequireAuth) { @@ -75,8 +76,10 @@ AccountSet::preflight(PreflightContext const& ctx) // // RequireDestTag // - bool bSetRequireDest = (uTxFlags & tfRequireDestTag) || (uSetFlag == asfRequireDest); - bool bClearRequireDest = (uTxFlags & tfOptionalDestTag) || (uClearFlag == asfRequireDest); + bool const bSetRequireDest = + ((uTxFlags & tfRequireDestTag) != 0u) || (uSetFlag == asfRequireDest); + bool const bClearRequireDest = + ((uTxFlags & tfOptionalDestTag) != 0u) || (uClearFlag == asfRequireDest); if (bSetRequireDest && bClearRequireDest) { @@ -87,8 +90,9 @@ AccountSet::preflight(PreflightContext const& ctx) // // DisallowXRP // - bool bSetDisallowXRP = (uTxFlags & tfDisallowXRP) || (uSetFlag == asfDisallowXRP); - bool bClearDisallowXRP = (uTxFlags & tfAllowXRP) || (uClearFlag == asfDisallowXRP); + bool const bSetDisallowXRP = ((uTxFlags & tfDisallowXRP) != 0u) || (uSetFlag == asfDisallowXRP); + bool const bClearDisallowXRP = + ((uTxFlags & tfAllowXRP) != 0u) || (uClearFlag == asfDisallowXRP); if (bSetDisallowXRP && bClearDisallowXRP) { @@ -99,9 +103,9 @@ AccountSet::preflight(PreflightContext const& ctx) // TransferRate if (tx.isFieldPresent(sfTransferRate)) { - std::uint32_t uRate = tx.getFieldU32(sfTransferRate); + std::uint32_t const uRate = tx.getFieldU32(sfTransferRate); - if (uRate && (uRate < QUALITY_ONE)) + if ((uRate != 0u) && (uRate < QUALITY_ONE)) { JLOG(j.trace()) << "Malformed transaction: Transfer rate too small."; return temBAD_TRANSFER_RATE; @@ -118,7 +122,8 @@ AccountSet::preflight(PreflightContext const& ctx) if (tx.isFieldPresent(sfTickSize)) { auto uTickSize = tx[sfTickSize]; - if (uTickSize && ((uTickSize < Quality::minTickSize) || (uTickSize > Quality::maxTickSize))) + if ((uTickSize != 0u) && + ((uTickSize < Quality::minTickSize) || (uTickSize > Quality::maxTickSize))) { JLOG(j.trace()) << "Malformed transaction: Bad tick size."; return temBAD_TICK_SIZE; @@ -175,7 +180,7 @@ AccountSet::checkPermission(ReadView const& view, STTx const& tx) // AccountSet transaction. If any delegated account is trying to // update the flag on behalf of another account, it is not // authorized. - if (uSetFlag != 0 || uClearFlag != 0 || uTxFlags & tfUniversalMask) + if (uSetFlag != 0 || uClearFlag != 0 || ((uTxFlags & tfUniversalMask) != 0u)) return terNO_DELEGATE_PERMISSION; if (tx.isFieldPresent(sfEmailHash) && !granularPermissions.contains(AccountEmailHashSet)) @@ -215,17 +220,17 @@ AccountSet::preclaim(PreclaimContext const& ctx) std::uint32_t const uSetFlag = ctx.tx.getFieldU32(sfSetFlag); // legacy AccountSet flags - bool bSetRequireAuth = (uTxFlags & tfRequireAuth) || (uSetFlag == asfRequireAuth); + bool const bSetRequireAuth = ((uTxFlags & tfRequireAuth) != 0u) || (uSetFlag == asfRequireAuth); // // RequireAuth // - if (bSetRequireAuth && !(uFlagsIn & lsfRequireAuth)) + if (bSetRequireAuth && ((uFlagsIn & lsfRequireAuth) == 0u)) { if (!dirIsEmpty(ctx.view, keylet::ownerDir(id))) { JLOG(ctx.j.trace()) << "Retry: Owner directory not empty."; - return (ctx.flags & tapRETRY) ? TER{terOWNERS} : TER{tecOWNERS}; + return ((ctx.flags & tapRETRY) != 0u) ? TER{terOWNERS} : TER{tecOWNERS}; } } @@ -236,7 +241,7 @@ AccountSet::preclaim(PreclaimContext const& ctx) { if (uSetFlag == asfAllowTrustLineClawback) { - if (uFlagsIn & lsfNoFreeze) + if ((uFlagsIn & lsfNoFreeze) != 0u) { JLOG(ctx.j.trace()) << "Can't set Clawback if NoFreeze is set"; return tecNO_PERMISSION; @@ -251,7 +256,7 @@ AccountSet::preclaim(PreclaimContext const& ctx) else if (uSetFlag == asfNoFreeze) { // Cannot set NoFreeze if clawback is enabled - if (uFlagsIn & lsfAllowTrustLineClawback) + if ((uFlagsIn & lsfAllowTrustLineClawback) != 0u) { JLOG(ctx.j.trace()) << "Can't set NoFreeze if clawback is enabled"; return tecNO_PERMISSION; @@ -278,12 +283,15 @@ AccountSet::doApply() // legacy AccountSet flags std::uint32_t const uTxFlags{tx.getFlags()}; - bool const bSetRequireDest{(uTxFlags & tfRequireDestTag) || (uSetFlag == asfRequireDest)}; - bool const bClearRequireDest{(uTxFlags & tfOptionalDestTag) || (uClearFlag == asfRequireDest)}; - bool const bSetRequireAuth{(uTxFlags & tfRequireAuth) || (uSetFlag == asfRequireAuth)}; - bool const bClearRequireAuth{(uTxFlags & tfOptionalAuth) || (uClearFlag == asfRequireAuth)}; - bool const bSetDisallowXRP{(uTxFlags & tfDisallowXRP) || (uSetFlag == asfDisallowXRP)}; - bool const bClearDisallowXRP{(uTxFlags & tfAllowXRP) || (uClearFlag == asfDisallowXRP)}; + bool const bSetRequireDest{ + ((uTxFlags & tfRequireDestTag) != 0u) || (uSetFlag == asfRequireDest)}; + bool const bClearRequireDest{ + ((uTxFlags & tfOptionalDestTag) != 0u) || (uClearFlag == asfRequireDest)}; + bool const bSetRequireAuth{((uTxFlags & tfRequireAuth) != 0u) || (uSetFlag == asfRequireAuth)}; + bool const bClearRequireAuth{ + ((uTxFlags & tfOptionalAuth) != 0u) || (uClearFlag == asfRequireAuth)}; + bool const bSetDisallowXRP{((uTxFlags & tfDisallowXRP) != 0u) || (uSetFlag == asfDisallowXRP)}; + bool const bClearDisallowXRP{((uTxFlags & tfAllowXRP) != 0u) || (uClearFlag == asfDisallowXRP)}; bool const sigWithMaster{[&tx, &acct = account_]() { auto const spk = tx.getSigningPubKey(); @@ -301,13 +309,13 @@ AccountSet::doApply() // // RequireAuth // - if (bSetRequireAuth && !(uFlagsIn & lsfRequireAuth)) + if (bSetRequireAuth && ((uFlagsIn & lsfRequireAuth) == 0u)) { JLOG(j_.trace()) << "Set RequireAuth."; uFlagsOut |= lsfRequireAuth; } - if (bClearRequireAuth && (uFlagsIn & lsfRequireAuth)) + if (bClearRequireAuth && ((uFlagsIn & lsfRequireAuth) != 0u)) { JLOG(j_.trace()) << "Clear RequireAuth."; uFlagsOut &= ~lsfRequireAuth; @@ -316,13 +324,13 @@ AccountSet::doApply() // // RequireDestTag // - if (bSetRequireDest && !(uFlagsIn & lsfRequireDestTag)) + if (bSetRequireDest && ((uFlagsIn & lsfRequireDestTag) == 0u)) { JLOG(j_.trace()) << "Set lsfRequireDestTag."; uFlagsOut |= lsfRequireDestTag; } - if (bClearRequireDest && (uFlagsIn & lsfRequireDestTag)) + if (bClearRequireDest && ((uFlagsIn & lsfRequireDestTag) != 0u)) { JLOG(j_.trace()) << "Clear lsfRequireDestTag."; uFlagsOut &= ~lsfRequireDestTag; @@ -331,13 +339,13 @@ AccountSet::doApply() // // DisallowXRP // - if (bSetDisallowXRP && !(uFlagsIn & lsfDisallowXRP)) + if (bSetDisallowXRP && ((uFlagsIn & lsfDisallowXRP) == 0u)) { JLOG(j_.trace()) << "Set lsfDisallowXRP."; uFlagsOut |= lsfDisallowXRP; } - if (bClearDisallowXRP && (uFlagsIn & lsfDisallowXRP)) + if (bClearDisallowXRP && ((uFlagsIn & lsfDisallowXRP) != 0u)) { JLOG(j_.trace()) << "Clear lsfDisallowXRP."; uFlagsOut &= ~lsfDisallowXRP; @@ -346,7 +354,7 @@ AccountSet::doApply() // // DisableMaster // - if ((uSetFlag == asfDisableMaster) && !(uFlagsIn & lsfDisableMaster)) + if ((uSetFlag == asfDisableMaster) && ((uFlagsIn & lsfDisableMaster) == 0u)) { if (!sigWithMaster) { @@ -364,7 +372,7 @@ AccountSet::doApply() uFlagsOut |= lsfDisableMaster; } - if ((uClearFlag == asfDisableMaster) && (uFlagsIn & lsfDisableMaster)) + if ((uClearFlag == asfDisableMaster) && ((uFlagsIn & lsfDisableMaster) != 0u)) { JLOG(j_.trace()) << "Clear lsfDisableMaster."; uFlagsOut &= ~lsfDisableMaster; @@ -389,7 +397,7 @@ AccountSet::doApply() // if (uSetFlag == asfNoFreeze) { - if (!sigWithMaster && !(uFlagsIn & lsfDisableMaster)) + if (!sigWithMaster && ((uFlagsIn & lsfDisableMaster) == 0u)) { JLOG(j_.trace()) << "Must use master key to set NoFreeze."; return tecNEED_MASTER_KEY; @@ -526,7 +534,7 @@ AccountSet::doApply() // if (tx.isFieldPresent(sfTransferRate)) { - std::uint32_t uRate = tx.getFieldU32(sfTransferRate); + std::uint32_t const uRate = tx.getFieldU32(sfTransferRate); if (uRate == 0 || uRate == QUALITY_ONE) { diff --git a/src/libxrpl/tx/transactors/account/SetRegularKey.cpp b/src/libxrpl/tx/transactors/account/SetRegularKey.cpp index 08175b196f..471da26c88 100644 --- a/src/libxrpl/tx/transactors/account/SetRegularKey.cpp +++ b/src/libxrpl/tx/transactors/account/SetRegularKey.cpp @@ -17,7 +17,7 @@ SetRegularKey::calculateBaseFee(ReadView const& view, STTx const& tx) { auto const sle = view.read(keylet::account(id)); - if (sle && (!(sle->getFlags() & lsfPasswordSpent))) + if (sle && ((sle->getFlags() & lsfPasswordSpent) == 0u)) { // flag is armed and they signed with the right account return XRPAmount{0}; diff --git a/src/libxrpl/tx/transactors/account/SignerListSet.cpp b/src/libxrpl/tx/transactors/account/SignerListSet.cpp index fe9e80d7e0..90ab8daf6f 100644 --- a/src/libxrpl/tx/transactors/account/SignerListSet.cpp +++ b/src/libxrpl/tx/transactors/account/SignerListSet.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -30,7 +29,7 @@ SignerListSet::determineOperation(STTx const& tx, ApplyFlags flags, beast::Journ Operation op = unknown; bool const hasSignerEntries(tx.isFieldPresent(sfSignerEntries)); - if (quorum && hasSignerEntries) + if ((quorum != 0u) && hasSignerEntries) { auto signers = SignerEntries::deserialize(tx, j, "transaction"); @@ -168,7 +167,7 @@ removeSignersFromLedger( { // We have to examine the current SignerList so we know how much to // reduce the OwnerCount. - SLE::pointer signers = view.peek(signerListKeylet); + SLE::pointer const signers = view.peek(signerListKeylet); // If the signer list doesn't exist we've already succeeded in deleting it. if (!signers) @@ -197,7 +196,7 @@ removeSignersFromLedger( } adjustOwnerCount( - view, view.peek(accountKeylet), removeFromOwnerCount, registry.journal("View")); + view, view.peek(accountKeylet), removeFromOwnerCount, registry.getJournal("View")); view.erase(signers); @@ -300,7 +299,7 @@ SignerListSet::replaceSignerList() std::uint32_t const oldOwnerCount{(*sle)[sfOwnerCount]}; constexpr int addedOwnerCount = 1; - std::uint32_t flags{lsfOneOwnerCount}; + std::uint32_t const flags{lsfOneOwnerCount}; XRPAmount const newReserve{view().fees().accountReserve(oldOwnerCount + addedOwnerCount)}; @@ -315,7 +314,7 @@ SignerListSet::replaceSignerList() view().insert(signerList); writeSignersToSLE(signerList, flags); - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); // Add the signer list to the account's directory. auto const page = ctx_.view().dirInsert(ownerDirKeylet, signerListKeylet, describeOwnerDir(account_)); @@ -340,7 +339,7 @@ SignerListSet::destroySignerList() auto const accountKeylet = keylet::account(account_); // Destroying the signer list is only allowed if either the master key // is enabled or there is a regular key. - SLE::pointer ledgerEntry = view().peek(accountKeylet); + SLE::pointer const ledgerEntry = view().peek(accountKeylet); if (!ledgerEntry) return tefINTERNAL; // LCOV_EXCL_LINE @@ -363,7 +362,7 @@ SignerListSet::writeSignersToSLE(SLE::pointer const& ledgerEntry, std::uint32_t } ledgerEntry->setFieldU32(sfSignerQuorum, quorum_); ledgerEntry->setFieldU32(sfSignerListID, DEFAULT_SIGNER_LIST_ID); - if (flags) // Only set flags if they are non-default (default is zero). + if (flags != 0u) // Only set flags if they are non-default (default is zero). ledgerEntry->setFieldU32(sfFlags, flags); // Create the SignerListArray one SignerEntry at a time. diff --git a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp index 9ac755cf4d..9074122cdf 100644 --- a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp +++ b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp @@ -109,7 +109,7 @@ checkAttestationPublicKey( if (accountFromPK == attestationSignerAccount) { // master key - if (sleAttestationSigningAccount->getFieldU32(sfFlags) & lsfDisableMaster) + if ((sleAttestationSigningAccount->getFieldU32(sfFlags) & lsfDisableMaster) != 0u) { JLOG(j.trace()) << "Attempt to add an attestation with " "disabled master key."; @@ -119,7 +119,7 @@ checkAttestationPublicKey( else { // regular key - if (std::optional regularKey = + if (std::optional const regularKey = (*sleAttestationSigningAccount)[~sfRegularKey]; regularKey != accountFromPK) { @@ -326,7 +326,8 @@ onClaim( std::unordered_map const& signersList, beast::Journal j) { - XChainClaimAttestation::MatchFields toMatch{sendingAmount, wasLockingChainSend, std::nullopt}; + XChainClaimAttestation::MatchFields const toMatch{ + sendingAmount, wasLockingChainSend, std::nullopt}; return claimHelper(attestations, view, toMatch, CheckDst::ignore, quorum, signersList, j); } @@ -386,7 +387,7 @@ transferHelper( { // Check dst tag and deposit auth - if ((sleDst->getFlags() & lsfRequireDestTag) && !dstTag) + if (((sleDst->getFlags() & lsfRequireDestTag) != 0u) && !dstTag) return tecDST_TAG_NEEDED; // If the destination is the claim owner, and this is a claim @@ -395,7 +396,7 @@ transferHelper( bool const canBypassDepositAuth = dst == claimOwner && depositAuthPolicy == DepositAuthPolicy::dstCanBypass; - if (!canBypassDepositAuth && (sleDst->getFlags() & lsfDepositAuth) && + if (!canBypassDepositAuth && ((sleDst->getFlags() & lsfDepositAuth) != 0u) && !psb.exists(keylet::depositPreauth(dst, src))) { return tecNO_PERMISSION; @@ -418,7 +419,7 @@ transferHelper( auto const reserve = psb.fees().accountReserve(ownerCount); auto const availableBalance = [&]() -> STAmount { - STAmount const curBal = (*sleSrc)[sfBalance]; + STAmount curBal = (*sleSrc)[sfBalance]; // Checking that account == src and postFeeBalance == curBal is // not strictly necessary, but helps protect against future // changes @@ -638,7 +639,7 @@ finalizeClaimHelper( auto const round_mode = innerSb.rules().enabled(fixXChainRewardRounding) ? Number::rounding_mode::downward : Number::getround(); - saveNumberRoundMode _{Number::setround(round_mode)}; + saveNumberRoundMode const _{Number::setround(round_mode)}; STAmount const den{rewardAccounts.size()}; return divide(rewardPool, den, rewardPool.issue()); @@ -1403,7 +1404,7 @@ XChainCreateBridge::preclaim(PreclaimContext const& ctx) // Allowing clawing back funds would break the bridge's invariant that // wrapped funds are always backed by locked funds - if (sleIssuer->getFlags() & lsfAllowTrustLineClawback) + if ((sleIssuer->getFlags() & lsfAllowTrustLineClawback) != 0u) return tecNO_PERMISSION; } @@ -1482,7 +1483,7 @@ BridgeModify::preflight(PreflightContext const& ctx) auto const reward = ctx.tx[~sfSignatureReward]; auto const minAccountCreate = ctx.tx[~sfMinAccountCreateAmount]; auto const bridgeSpec = ctx.tx[sfXChainBridge]; - bool const clearAccountCreate = ctx.tx.getFlags() & tfClearAccountCreateAmount; + bool const clearAccountCreate = (ctx.tx.getFlags() & tfClearAccountCreateAmount) != 0u; if (!reward && !minAccountCreate && !clearAccountCreate) { @@ -1540,7 +1541,7 @@ BridgeModify::doApply() auto const bridgeSpec = ctx_.tx[sfXChainBridge]; auto const reward = ctx_.tx[~sfSignatureReward]; auto const minAccountCreate = ctx_.tx[~sfMinAccountCreateAmount]; - bool const clearAccountCreate = ctx_.tx.getFlags() & tfClearAccountCreateAmount; + bool const clearAccountCreate = (ctx_.tx.getFlags() & tfClearAccountCreateAmount) != 0u; auto const sleAcct = ctx_.view().peek(keylet::account(account)); if (!sleAcct) diff --git a/src/libxrpl/tx/transactors/check/CheckCancel.cpp b/src/libxrpl/tx/transactors/check/CheckCancel.cpp index 2d08b2f1b0..be3b434fb6 100644 --- a/src/libxrpl/tx/transactors/check/CheckCancel.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCancel.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -58,7 +57,7 @@ CheckCancel::doApply() AccountID const srcId{sleCheck->getAccountID(sfAccount)}; AccountID const dstId{sleCheck->getAccountID(sfDestination)}; - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); // If the check is not written to self (and it shouldn't be), remove the // check from the destination account root. diff --git a/src/libxrpl/tx/transactors/check/CheckCash.cpp b/src/libxrpl/tx/transactors/check/CheckCash.cpp index 7fa53c7352..fa908c3aa3 100644 --- a/src/libxrpl/tx/transactors/check/CheckCash.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCash.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -82,7 +81,8 @@ CheckCash::preclaim(PreclaimContext const& ctx) return tecNO_ENTRY; } - if ((sleDst->getFlags() & lsfRequireDestTag) && !sleCheck->isFieldPresent(sfDestinationTag)) + if (((sleDst->getFlags() & lsfRequireDestTag) != 0u) && + !sleCheck->isFieldPresent(sfDestinationTag)) { // The tag is basically account-specific information we don't // understand, but we can require someone to fill it in. @@ -155,7 +155,7 @@ CheckCash::preclaim(PreclaimContext const& ctx) return tecNO_ISSUER; } - if (sleIssuer->at(sfFlags) & lsfRequireAuth) + if ((sleIssuer->at(sfFlags) & lsfRequireAuth) != 0u) { auto const sleTrustLine = ctx.view.read(keylet::line(dstId, issuerId, currency)); @@ -172,7 +172,7 @@ CheckCash::preclaim(PreclaimContext const& ctx) bool const canonical_gt(dstId > issuerId); bool const is_authorized( - sleTrustLine->at(sfFlags) & (canonical_gt ? lsfLowAuth : lsfHighAuth)); + (sleTrustLine->at(sfFlags) & (canonical_gt ? lsfLowAuth : lsfHighAuth)) != 0u); if (!is_authorized) { @@ -232,7 +232,7 @@ CheckCash::doApply() // // If it is not a check to self (as should be the case), then there's // work to do... - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); auto const optDeliverMin = ctx_.tx[~sfDeliverMin]; if (srcId != account_) @@ -325,28 +325,26 @@ CheckCash::doApply() STAmount initialBalance(flowDeliver.issue()); initialBalance.setIssuer(noAccount()); - // clang-format off if (TER const ter = trustCreate( - psb, // payment sandbox - destLow, // is dest low? - issuer, // source - account_, // destination - trustLineKey.key, // ledger index - sleDst, // Account to add to - false, // authorize account - (sleDst->getFlags() & lsfDefaultRipple) == 0, - false, // freeze trust line - false, // deep freeze trust line - initialBalance, // zero initial balance - Issue(currency, account_), // limit of zero - 0, // quality in - 0, // quality out - viewJ); // journal + psb, // payment sandbox + destLow, // is dest low? + issuer, // source + account_, // destination + trustLineKey.key, // ledger index + sleDst, // Account to add to + false, // authorize account + (sleDst->getFlags() & lsfDefaultRipple) == 0, // + false, // freeze trust line + false, // deep freeze trust line + initialBalance, // zero initial balance + Issue(currency, account_), // limit of zero + 0, // quality in + 0, // quality out + viewJ); // journal !isTesSuccess(ter)) { return ter; } - // clang-format on psb.update(sleDst); @@ -367,7 +365,7 @@ CheckCash::doApply() STAmount const savedLimit = sleTrustLine->at(tweakedLimit); // Make sure the tweaked limits are restored when we leave scope. - scope_exit fixup([&psb, &trustLineKey, &tweakedLimit, &savedLimit]() { + scope_exit const fixup([&psb, &trustLineKey, &tweakedLimit, &savedLimit]() { if (auto const sleTrustLine = psb.peek(trustLineKey)) sleTrustLine->at(tweakedLimit) = savedLimit; }); diff --git a/src/libxrpl/tx/transactors/check/CheckCreate.cpp b/src/libxrpl/tx/transactors/check/CheckCreate.cpp index 50554a1beb..fde3373691 100644 --- a/src/libxrpl/tx/transactors/check/CheckCreate.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCreate.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -63,7 +62,7 @@ CheckCreate::preclaim(PreclaimContext const& ctx) auto const flags = sleDst->getFlags(); // Check if the destination has disallowed incoming checks - if (flags & lsfDisallowIncomingCheck) + if ((flags & lsfDisallowIncomingCheck) != 0u) return tecNO_PERMISSION; // Pseudo-accounts cannot cash checks. Note, this is not amendment-gated @@ -73,7 +72,7 @@ CheckCreate::preclaim(PreclaimContext const& ctx) if (isPseudoAccount(sleDst)) return tecNO_PERMISSION; - if ((flags & lsfRequireDestTag) && !ctx.tx.isFieldPresent(sfDestinationTag)) + if (((flags & lsfRequireDestTag) != 0u) && !ctx.tx.isFieldPresent(sfDestinationTag)) { // The tag is basically account-specific information we don't // understand, but we can require someone to fill it in. @@ -169,7 +168,7 @@ CheckCreate::doApply() view().insert(sleCheck); - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); // If it's not a self-send (and it shouldn't be), add Check to the // destination's owner directory. if (dstAccountId != account_) diff --git a/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp b/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp index c4842b54e4..9c0018a647 100644 --- a/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp +++ b/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp @@ -60,7 +60,7 @@ CredentialAccept::preclaim(PreclaimContext const& ctx) return tecNO_ENTRY; } - if (sleCred->getFieldU32(sfFlags) & lsfAccepted) + if ((sleCred->getFieldU32(sfFlags) & lsfAccepted) != 0u) { JLOG(ctx.j.warn()) << "Credential already accepted: " << to_string(subject) << ", " << to_string(issuer) << ", " << credType; diff --git a/src/libxrpl/tx/transactors/dex/AMMBid.cpp b/src/libxrpl/tx/transactors/dex/AMMBid.cpp index a1ace702dc..f5b9445ead 100644 --- a/src/libxrpl/tx/transactors/dex/AMMBid.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMBid.cpp @@ -54,7 +54,7 @@ AMMBid::preflight(PreflightContext const& ctx) } if (ctx.rules.enabled(fixAMMv1_3)) { - AccountID account = ctx.tx[sfAccount]; + AccountID const account = ctx.tx[sfAccount]; std::set unique; for (auto const& obj : authAccounts) { diff --git a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp index a5fda15033..b8f4fe4b1b 100644 --- a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp @@ -40,7 +40,7 @@ AMMClawback::preflight(PreflightContext const& ctx) auto const flags = ctx.tx.getFlags(); - if (flags & tfClawTwoAssets && asset.account != asset2.account) + if (((flags & tfClawTwoAssets) != 0u) && asset.account != asset2.account) { JLOG(ctx.j.trace()) << "AMMClawback: tfClawTwoAssets can only be enabled when two " "assets in the AMM pool are both issued by the issuer"; @@ -90,7 +90,8 @@ AMMClawback::preclaim(PreclaimContext const& ctx) // If AllowTrustLineClawback is not set or NoFreeze is set, return no // permission - if (!(issuerFlagsIn & lsfAllowTrustLineClawback) || (issuerFlagsIn & lsfNoFreeze)) + if (((issuerFlagsIn & lsfAllowTrustLineClawback) == 0u) || + ((issuerFlagsIn & lsfNoFreeze) != 0u)) return tecNO_PERMISSION; return tesSUCCESS; @@ -215,7 +216,7 @@ AMMClawback::applyGuts(Sandbox& sb) return tecINTERNAL; // LCOV_EXCL_LINE auto const flags = ctx_.tx.getFlags(); - if (flags & tfClawTwoAssets) + if ((flags & tfClawTwoAssets) != 0u) return rippleCredit(sb, holder, issuer, *amount2Withdraw, true, j_); return tesSUCCESS; diff --git a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp index dd717948b3..069fadf103 100644 --- a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp @@ -246,7 +246,7 @@ applyCreate(ApplyContext& ctx_, Sandbox& sb, AccountID const& account_, beast::J // Set AMM flag on AMM trustline if (!isXRP(amount)) { - SLE::pointer sleRippleState = sb.peek(keylet::line(accountId, amount.issue())); + SLE::pointer const sleRippleState = sb.peek(keylet::line(accountId, amount.issue())); if (!sleRippleState) { return tecINTERNAL; // LCOV_EXCL_LINE @@ -281,7 +281,7 @@ applyCreate(ApplyContext& ctx_, Sandbox& sb, AccountID const& account_, beast::J Book const book{issueIn, issueOut, std::nullopt}; auto const dir = keylet::quality(keylet::book(book), uRate); if (auto const bookExisted = static_cast(sb.read(dir)); !bookExisted) - ctx_.registry.getOrderBookDB().addOrderBook(book); + ctx_.registry.get().getOrderBookDB().addOrderBook(book); }; addOrderBook(amount.issue(), amount2.issue(), getRate(amount2, amount)); addOrderBook(amount2.issue(), amount.issue(), getRate(amount, amount2)); diff --git a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp index cae83ccef1..eb3e61e80b 100644 --- a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp @@ -44,35 +44,35 @@ AMMDeposit::preflight(PreflightContext const& ctx) JLOG(ctx.j.debug()) << "AMM Deposit: invalid flags."; return temMALFORMED; } - if (flags & tfLPToken) + if ((flags & tfLPToken) != 0u) { // if included then both amount and amount2 are deposit min if (!lpTokens || ePrice || (amount && !amount2) || (!amount && amount2) || tradingFee) return temMALFORMED; } - else if (flags & tfSingleAsset) + else if ((flags & tfSingleAsset) != 0u) { // if included then lpTokens is deposit min if (!amount || amount2 || ePrice || tradingFee) return temMALFORMED; } - else if (flags & tfTwoAsset) + else if ((flags & tfTwoAsset) != 0u) { // if included then lpTokens is deposit min if (!amount || !amount2 || ePrice || tradingFee) return temMALFORMED; } - else if (flags & tfOneAssetLPToken) + else if ((flags & tfOneAssetLPToken) != 0u) { if (!amount || !lpTokens || amount2 || ePrice || tradingFee) return temMALFORMED; } - else if (flags & tfLimitLPToken) + else if ((flags & tfLimitLPToken) != 0u) { if (!amount || !ePrice || lpTokens || amount2 || tradingFee) return temMALFORMED; } - else if (flags & tfTwoAssetIfEmpty) + else if ((flags & tfTwoAssetIfEmpty) != 0u) { if (!amount || !amount2 || ePrice || lpTokens) return temMALFORMED; @@ -156,7 +156,7 @@ AMMDeposit::preclaim(PreclaimContext const& ctx) if (!expected) return expected.error(); // LCOV_EXCL_LINE auto const [amountBalance, amount2Balance, lptAMMBalance] = *expected; - if (ctx.tx.getFlags() & tfTwoAssetIfEmpty) + if ((ctx.tx.getFlags() & tfTwoAssetIfEmpty) != 0u) { if (lptAMMBalance != beast::zero) return tecAMM_NOT_EMPTY; @@ -283,7 +283,7 @@ AMMDeposit::preclaim(PreclaimContext const& ctx) }; // amount and amount2 are deposit min in case of tfLPToken - if (!(ctx.tx.getFlags() & tfLPToken)) + if ((ctx.tx.getFlags() & tfLPToken) == 0u) { if (auto const ter = checkAmount(amount, true)) return ter; diff --git a/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp b/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp index 20ffab52ca..386608229b 100644 --- a/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp @@ -7,7 +7,7 @@ ammLPTokens(STAmount const& asset1, STAmount const& asset2, Issue const& lptIssu { // AMM invariant: sqrt(asset1 * asset2) >= LPTokensBalance auto const rounding = isFeatureEnabled(fixAMMv1_3) ? Number::downward : Number::getround(); - NumberRoundModeGuard g(rounding); + NumberRoundModeGuard const g(rounding); auto const tokens = root2(asset1 * asset2); return toSTAmount(lptIssue, tokens); } @@ -142,7 +142,7 @@ adjustLPTokens(STAmount const& lptAMMBalance, STAmount const& lpTokens, IsDeposi { // Force rounding downward to ensure adjusted tokens are less or equal // to requested tokens. - saveNumberRoundMode rm(Number::setround(Number::rounding_mode::downward)); + saveNumberRoundMode const rm(Number::setround(Number::rounding_mode::downward)); if (isDeposit == IsDeposit::Yes) return (lptAMMBalance + lpTokens) - lptAMMBalance; return (lpTokens - lptAMMBalance) + lptAMMBalance; @@ -251,7 +251,7 @@ solveQuadraticEqSmallest(Number const& a, Number const& b, Number const& c) STAmount multiply(STAmount const& amount, Number const& frac, Number::rounding_mode rm) { - NumberRoundModeGuard g(rm); + NumberRoundModeGuard const g(rm); auto const t = amount * frac; return toSTAmount(amount.issue(), t, rm); } @@ -270,7 +270,7 @@ getRoundedAsset( auto const rm = detail::getAssetRounding(isDeposit); if (isDeposit == IsDeposit::Yes) return multiply(balance, productCb(), rm); - NumberRoundModeGuard g(rm); + NumberRoundModeGuard const g(rm); return toSTAmount(balance.issue(), productCb(), rm); } @@ -304,7 +304,7 @@ getRoundedLPTokens( auto const rm = detail::getLPTokenRounding(isDeposit); if (isDeposit == IsDeposit::Yes) { - NumberRoundModeGuard g(rm); + NumberRoundModeGuard const g(rm); return toSTAmount(lptAMMBalance.issue(), productCb(), rm); } return multiply(lptAMMBalance, productCb(), rm); diff --git a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp index b822ff6b84..7c87d53ea0 100644 --- a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp @@ -42,37 +42,37 @@ AMMWithdraw::preflight(PreflightContext const& ctx) JLOG(ctx.j.debug()) << "AMM Withdraw: invalid flags."; return temMALFORMED; } - if (flags & tfLPToken) + if ((flags & tfLPToken) != 0u) { if (!lpTokens || amount || amount2 || ePrice) return temMALFORMED; } - else if (flags & tfWithdrawAll) + else if ((flags & tfWithdrawAll) != 0u) { if (lpTokens || amount || amount2 || ePrice) return temMALFORMED; } - else if (flags & tfOneAssetWithdrawAll) + else if ((flags & tfOneAssetWithdrawAll) != 0u) { if (!amount || lpTokens || amount2 || ePrice) return temMALFORMED; } - else if (flags & tfSingleAsset) + else if ((flags & tfSingleAsset) != 0u) { if (!amount || lpTokens || amount2 || ePrice) return temMALFORMED; } - else if (flags & tfTwoAsset) + else if ((flags & tfTwoAsset) != 0u) { if (!amount || !amount2 || lpTokens || ePrice) return temMALFORMED; } - else if (flags & tfOneAssetLPToken) + else if ((flags & tfOneAssetLPToken) != 0u) { if (!amount || !lpTokens || amount2 || ePrice) return temMALFORMED; } - else if (flags & tfLimitLPToken) + else if ((flags & tfLimitLPToken) != 0u) { if (!amount || !ePrice || lpTokens || amount2) return temMALFORMED; @@ -104,7 +104,7 @@ AMMWithdraw::preflight(PreflightContext const& ctx) if (auto const res = invalidAMMAmount( *amount, std::make_optional(std::make_pair(asset, asset2)), - (flags & (tfOneAssetWithdrawAll | tfOneAssetLPToken)) || ePrice)) + ((flags & (tfOneAssetWithdrawAll | tfOneAssetLPToken)) != 0u) || ePrice)) { JLOG(ctx.j.debug()) << "AMM Withdraw: invalid Asset1Out"; return res; @@ -139,7 +139,7 @@ tokensWithdraw( std::optional const& tokensIn, std::uint32_t flags) { - if (flags & (tfWithdrawAll | tfOneAssetWithdrawAll)) + if ((flags & (tfWithdrawAll | tfOneAssetWithdrawAll)) != 0u) return lpTokens; return tokensIn; } @@ -248,7 +248,7 @@ AMMWithdraw::preclaim(PreclaimContext const& ctx) return temBAD_AMM_TOKENS; } - if (ctx.tx.getFlags() & (tfLPToken | tfWithdrawAll)) + if ((ctx.tx.getFlags() & (tfLPToken | tfWithdrawAll)) != 0u) { if (auto const ter = checkAmount(amountBalance, amountBalance)) return ter; @@ -1018,7 +1018,7 @@ AMMWithdraw::singleWithdrawEPrice( WithdrawAll AMMWithdraw::isWithdrawAll(STTx const& tx) { - if (tx[sfFlags] & (tfWithdrawAll | tfOneAssetWithdrawAll)) + if ((tx[sfFlags] & (tfWithdrawAll | tfOneAssetWithdrawAll)) != 0u) return WithdrawAll::Yes; return WithdrawAll::No; } diff --git a/src/libxrpl/tx/transactors/dex/OfferCancel.cpp b/src/libxrpl/tx/transactors/dex/OfferCancel.cpp index 9d60347778..f8164401b7 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCancel.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCancel.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -9,7 +8,7 @@ namespace xrpl { NotTEC OfferCancel::preflight(PreflightContext const& ctx) { - if (!ctx.tx[sfOfferSequence]) + if (ctx.tx[sfOfferSequence] == 0u) { JLOG(ctx.j.trace()) << "OfferCancel::preflight: missing sequence"; return temBAD_SEQUENCE; @@ -54,7 +53,7 @@ OfferCancel::doApply() if (auto sleOffer = view().peek(keylet::offer(account_, offerSequence))) { JLOG(j_.debug()) << "Trying to cancel offer #" << offerSequence; - return offerDelete(view(), sleOffer, ctx_.registry.journal("View")); + return offerDelete(view(), sleOffer, ctx_.registry.get().getJournal("View")); } JLOG(j_.debug()) << "Offer #" << offerSequence << " can't be found."; diff --git a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp index d52fa94877..20524f73ae 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp @@ -30,10 +30,7 @@ OfferCreate::makeTxConsequences(PreflightContext const& ctx) bool OfferCreate::checkExtraFeatures(PreflightContext const& ctx) { - if (ctx.tx.isFieldPresent(sfDomainID) && !ctx.rules.enabled(featurePermissionedDEX)) - return false; - - return true; + return !ctx.tx.isFieldPresent(sfDomainID) || ctx.rules.enabled(featurePermissionedDEX); } std::uint32_t @@ -59,8 +56,8 @@ OfferCreate::preflight(PreflightContext const& ctx) if (tx.isFlag(tfHybrid) && !tx.isFieldPresent(sfDomainID)) return temINVALID_FLAG; - bool const bImmediateOrCancel(uTxFlags & tfImmediateOrCancel); - bool const bFillOrKill(uTxFlags & tfFillOrKill); + bool const bImmediateOrCancel((uTxFlags & tfImmediateOrCancel) != 0u); + bool const bFillOrKill((uTxFlags & tfFillOrKill) != 0u); if (bImmediateOrCancel && bFillOrKill) { @@ -82,8 +79,8 @@ OfferCreate::preflight(PreflightContext const& ctx) return temBAD_SEQUENCE; } - STAmount saTakerPays = tx[sfTakerPays]; - STAmount saTakerGets = tx[sfTakerGets]; + STAmount const saTakerPays = tx[sfTakerPays]; + STAmount const saTakerGets = tx[sfTakerGets]; if (!isLegalNet(saTakerPays) || !isLegalNet(saTakerGets)) return temBAD_AMOUNT; @@ -147,7 +144,7 @@ OfferCreate::preclaim(PreclaimContext const& ctx) std::uint32_t const uAccountSequence = sleCreator->getFieldU32(sfSequence); - auto viewJ = ctx.registry.journal("View"); + auto viewJ = ctx.registry.get().getJournal("View"); if (isGlobalFrozen(ctx.view, uPaysIssuerID) || isGlobalFrozen(ctx.view, uGetsIssuerID)) { @@ -215,7 +212,7 @@ OfferCreate::checkAcceptAsset( JLOG(j.debug()) << "delay: can't receive IOUs from non-existent issuer: " << to_string(issue.account); - return (flags & tapRETRY) ? TER{terNO_ACCOUNT} : TER{tecNO_ISSUER}; + return ((flags & tapRETRY) != 0u) ? TER{terNO_ACCOUNT} : TER{tecNO_ISSUER}; } // An account cannot create a trustline to itself, so no line can exist @@ -224,13 +221,13 @@ OfferCreate::checkAcceptAsset( if (issue.account == id) return tesSUCCESS; - if ((*issuerAccount)[sfFlags] & lsfRequireAuth) + if (((*issuerAccount)[sfFlags] & lsfRequireAuth) != 0u) { auto const trustLine = view.read(keylet::line(id, issue.account, issue.currency)); if (!trustLine) { - return (flags & tapRETRY) ? TER{terNO_LINE} : TER{tecNO_LINE}; + return ((flags & tapRETRY) != 0u) ? TER{terNO_LINE} : TER{tecNO_LINE}; } // Entries have a canonical representation, determined by a @@ -238,13 +235,14 @@ OfferCreate::checkAcceptAsset( // ordering. Determine which entry we need to access. bool const canonical_gt(id > issue.account); - bool const is_authorized((*trustLine)[sfFlags] & (canonical_gt ? lsfLowAuth : lsfHighAuth)); + bool const is_authorized( + ((*trustLine)[sfFlags] & (canonical_gt ? lsfLowAuth : lsfHighAuth)) != 0u); if (!is_authorized) { JLOG(j.debug()) << "delay: can't receive IOUs from issuer without auth."; - return (flags & tapRETRY) ? TER{terNO_AUTH} : TER{tecNO_AUTH}; + return ((flags & tapRETRY) != 0u) ? TER{terNO_AUTH} : TER{tecNO_AUTH}; } } @@ -257,7 +255,7 @@ OfferCreate::checkAcceptAsset( // There's no difference which side enacted deep freeze, accepting // tokens shouldn't be possible. - bool const deepFrozen = (*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze); + bool const deepFrozen = ((*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze)) != 0u; if (deepFrozen) { @@ -313,7 +311,7 @@ OfferCreate::flowCross( // If we're creating a passive offer adjust the threshold so we only // cross offers that have a better quality than this one. std::uint32_t const txFlags = ctx_.tx.getFlags(); - if (txFlags & tfPassive) + if ((txFlags & tfPassive) != 0u) ++threshold; // Don't send more than our balance. @@ -334,7 +332,7 @@ OfferCreate::flowCross( // Special handling for the tfSell flag. STAmount deliver = takerAmount.out; OfferCrossing offerCrossing = OfferCrossing::yes; - if (txFlags & tfSell) + if ((txFlags & tfSell) != 0u) { offerCrossing = OfferCrossing::sell; // We are selling, so we will accept *more* than the offer @@ -362,9 +360,9 @@ OfferCreate::flowCross( account_, account_, paths, - true, // default path - !(txFlags & tfFillOrKill), // partial payment - true, // owner pays transfer fee + true, // default path + (txFlags & tfFillOrKill) == 0u, // partial payment + true, // owner pays transfer fee offerCrossing, threshold, sendMax, @@ -398,7 +396,7 @@ OfferCreate::flowCross( { STAmount const rate{Quality{takerAmount.out, takerAmount.in}.rate()}; - if (txFlags & tfSell) + if ((txFlags & tfSell) != 0u) { // If selling then scale the new out amount based on how // much we sold during crossing. This preserves the offer @@ -504,7 +502,7 @@ OfferCreate::applyHybrid( bookArr.push_back(std::move(bookInfo)); if (!bookExists) - ctx_.registry.getOrderBookDB().addOrderBook(book); + ctx_.registry.get().getOrderBookDB().addOrderBook(book); sleOffer->setFieldArray(sfAdditionalBooks, bookArr); return tesSUCCESS; @@ -517,11 +515,11 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) std::uint32_t const uTxFlags = ctx_.tx.getFlags(); - bool const bPassive(uTxFlags & tfPassive); - bool const bImmediateOrCancel(uTxFlags & tfImmediateOrCancel); - bool const bFillOrKill(uTxFlags & tfFillOrKill); - bool const bSell(uTxFlags & tfSell); - bool const bHybrid(uTxFlags & tfHybrid); + bool const bPassive((uTxFlags & tfPassive) != 0u); + bool const bImmediateOrCancel((uTxFlags & tfImmediateOrCancel) != 0u); + bool const bFillOrKill((uTxFlags & tfFillOrKill) != 0u); + bool const bSell((uTxFlags & tfSell) != 0u); + bool const bHybrid((uTxFlags & tfHybrid) != 0u); auto saTakerPays = ctx_.tx[sfTakerPays]; auto saTakerGets = ctx_.tx[sfTakerGets]; @@ -538,7 +536,7 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) // end up on the books. auto uRate = getRate(saTakerGets, saTakerPays); - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); TER result = tesSUCCESS; @@ -739,7 +737,8 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) return {tefINTERNAL, false}; { - XRPAmount reserve = sb.fees().accountReserve(sleCreator->getFieldU32(sfOwnerCount) + 1); + XRPAmount const reserve = + sb.fees().accountReserve(sleCreator->getFieldU32(sfOwnerCount) + 1); if (preFeeBalance_ < reserve) { @@ -848,7 +847,7 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) sb.insert(sleOffer); if (!bookExisted) - ctx_.registry.getOrderBookDB().addOrderBook(book); + ctx_.registry.get().getOrderBookDB().addOrderBook(book); JLOG(j_.debug()) << "final result: success"; diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp index 1250d950cd..e47f008357 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp @@ -33,7 +33,7 @@ escrowCancelPreclaimHelper( AccountID const& account, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the account, return tecINTERNAL if (issuer == account) return tecINTERNAL; // LCOV_EXCL_LINE @@ -52,7 +52,7 @@ escrowCancelPreclaimHelper( AccountID const& account, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the account, return tecINTERNAL if (issuer == account) return tecINTERNAL; // LCOV_EXCL_LINE diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp index 8b823de160..ed0bbeea44 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp @@ -163,7 +163,7 @@ escrowCreatePreclaimHelper( AccountID const& dest, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the account, return tecNO_PERMISSION if (issuer == account) return tecNO_PERMISSION; @@ -233,7 +233,7 @@ escrowCreatePreclaimHelper( AccountID const& dest, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the account, return tecNO_PERMISSION if (issuer == account) return tecNO_PERMISSION; @@ -353,8 +353,7 @@ escrowLockApplyHelper( if (issuer == sender) return tecINTERNAL; // LCOV_EXCL_LINE - auto const ter = rippleCredit( - view, sender, issuer, amount, amount.holds() ? false : true, journal); + auto const ter = rippleCredit(view, sender, issuer, amount, !amount.holds(), journal); if (!isTesSuccess(ter)) return ter; // LCOV_EXCL_LINE return tesSUCCESS; @@ -415,7 +414,7 @@ EscrowCreate::doApply() auto const sled = ctx_.view().read(keylet::account(ctx_.tx[sfDestination])); if (!sled) return tecNO_DST; // LCOV_EXCL_LINE - if (((*sled)[sfFlags] & lsfRequireDestTag) && !ctx_.tx[~sfDestinationTag]) + if ((((*sled)[sfFlags] & lsfRequireDestTag) != 0u) && !ctx_.tx[~sfDestinationTag]) return tecDST_TAG_NEEDED; } diff --git a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp index 8a05b2b160..e05ba87bbb 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp @@ -73,7 +73,7 @@ EscrowFinish::preflightSigValidated(PreflightContext const& ctx) if (cb && fb) { - auto& router = ctx.registry.getHashRouter(); + auto& router = ctx.registry.get().getHashRouter(); auto const id = ctx.tx.getTransactionID(); auto const flags = router.getFlags(id); @@ -127,7 +127,7 @@ escrowFinishPreclaimHelper( AccountID const& dest, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the account, return tesSUCCESS if (issuer == dest) return tesSUCCESS; @@ -150,7 +150,7 @@ escrowFinishPreclaimHelper( AccountID const& dest, STAmount const& amount) { - AccountID issuer = amount.getIssuer(); + AccountID const issuer = amount.getIssuer(); // If the issuer is the same as the dest, return tesSUCCESS if (issuer == dest) return tesSUCCESS; @@ -237,7 +237,7 @@ EscrowFinish::doApply() // Check cryptocondition fulfillment { auto const id = ctx_.tx.getTransactionID(); - auto flags = ctx_.registry.getHashRouter().getFlags(id); + auto flags = ctx_.registry.get().getHashRouter().getFlags(id); auto const cb = ctx_.tx[~sfCondition]; @@ -261,7 +261,7 @@ EscrowFinish::doApply() flags = SF_CF_INVALID; } - ctx_.registry.getHashRouter().setFlags(id, flags); + ctx_.registry.get().getHashRouter().setFlags(id, flags); // LCOV_EXCL_STOP } diff --git a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h b/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h index 5fdc43c359..8991fb06cc 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h +++ b/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h @@ -69,28 +69,26 @@ escrowUnlockApplyHelper( STAmount initialBalance(amount.issue()); initialBalance.setIssuer(noAccount()); - // clang-format off if (TER const ter = trustCreate( - view, // payment sandbox - recvLow, // is dest low? - issuer, // source - receiver, // destination - trustLineKey.key, // ledger index - sleDest, // Account to add to - false, // authorize account - (sleDest->getFlags() & lsfDefaultRipple) == 0, - false, // freeze trust line - false, // deep freeze trust line - initialBalance, // zero initial balance - Issue(currency, receiver), // limit of zero - 0, // quality in - 0, // quality out - journal); // journal + view, // payment sandbox + recvLow, // is dest low? + issuer, // source + receiver, // destination + trustLineKey.key, // ledger index + sleDest, // Account to add to + false, // authorize account + (sleDest->getFlags() & lsfDefaultRipple) == 0, // + false, // freeze trust line + false, // deep freeze trust line + initialBalance, // zero initial balance + Issue(currency, receiver), // limit of zero + 0, // quality in + 0, // quality out + journal); // journal !isTesSuccess(ter)) { - return ter; // LCOV_EXCL_LINE + return ter; // LCOV_EXCL_LINE } - // clang-format on view.update(sleDest); } diff --git a/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp b/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp index ad4cd8440d..bad55e9222 100644 --- a/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp +++ b/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp @@ -1253,7 +1253,7 @@ checkLoanGuards( // loan can't be amortized in the specified number of payments, raise an // error { - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); if (std::int64_t const computedPayments{ properties.loanState.valueOutstanding / roundedPayment}; @@ -1486,7 +1486,7 @@ computeLoanProperties( auto const [totalValueOutstanding, loanScale] = [&]() { // only round up if there should be interest - NumberRoundModeGuard mg(periodicRate == 0 ? Number::to_nearest : Number::upward); + NumberRoundModeGuard const mg(periodicRate == 0 ? Number::to_nearest : Number::upward); // Use STAmount's internal rounding instead of roundToAsset, because // we're going to use this result to determine the scale for all the // other rounding. diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp index 24aa3f8bf2..627b16794b 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp @@ -137,11 +137,11 @@ determineClawAmount( { auto const maxClawAmount = [&]() { // Always round the minimum required up - NumberRoundModeGuard mg1(Number::upward); + NumberRoundModeGuard const mg1(Number::upward); auto const minRequiredCover = tenthBipsOfValue(sleBroker[sfDebtTotal], TenthBips32(sleBroker[sfCoverRateMinimum])); // The subtraction probably won't round, but round down if it does. - NumberRoundModeGuard mg2(Number::downward); + NumberRoundModeGuard const mg2(Number::downward); return sleBroker[sfCoverAvailable] - minRequiredCover; }(); if (maxClawAmount <= beast::zero) diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp index 6946992376..d03edad0a2 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp @@ -119,7 +119,7 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx) auto const minimumCover = [&]() { // Always round the minimum required up. // Applies to `tenthBipsOfValue` as well as `roundToAsset`. - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); return roundToAsset( vaultAsset, tenthBipsOfValue(currentDebtTotal, TenthBips32(sleBroker->at(sfCoverRateMinimum))), diff --git a/src/libxrpl/tx/transactors/lending/LoanManage.cpp b/src/libxrpl/tx/transactors/lending/LoanManage.cpp index d507ba5499..adef5374b9 100644 --- a/src/libxrpl/tx/transactors/lending/LoanManage.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanManage.cpp @@ -26,7 +26,7 @@ LoanManage::preflight(PreflightContext const& ctx) return temINVALID; // Flags are mutually exclusive - if (auto const flagField = ctx.tx[~sfFlags]; flagField && *flagField) + if (auto const flagField = ctx.tx[~sfFlags]; flagField && (*flagField != 0u)) { auto const flags = *flagField & tfUniversalMask; if ((flags & (flags - 1)) != 0) @@ -144,7 +144,7 @@ LoanManage::defaultLoan( TenthBips32 const coverRateLiquidation{brokerSle->at(sfCoverRateLiquidation)}; auto const defaultCovered = [&]() { // Always round the minimum required up. - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); auto const minimumCover = tenthBipsOfValue(brokerDebtTotalProxy.value(), coverRateMinimum); // Round the liquidation amount up, too auto const covered = roundToAsset( diff --git a/src/libxrpl/tx/transactors/lending/LoanPay.cpp b/src/libxrpl/tx/transactors/lending/LoanPay.cpp index 8739cb645a..f748a670fd 100644 --- a/src/libxrpl/tx/transactors/lending/LoanPay.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanPay.cpp @@ -117,7 +117,7 @@ LoanPay::calculateBaseFee(ReadView const& view, STTx const& tx) // If making an overpayment, count it as a full payment because it will do // about the same amount of work, if not more. - NumberRoundModeGuard mg(tx.isFlag(tfLoanOverpayment) ? Number::upward : Number::downward); + NumberRoundModeGuard const mg(tx.isFlag(tfLoanOverpayment) ? Number::upward : Number::downward); // Estimate how many payments will be made Number const numPaymentEstimate = static_cast(amount / regularPayment); @@ -277,7 +277,7 @@ LoanPay::doApply() // Round the minimum required cover up to be conservative. This ensures // CoverAvailable never drops below the theoretical minimum, protecting // the broker's solvency. - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); return coverAvailableProxy >= roundToAsset( asset, tenthBipsOfValue(debtTotalProxy.value(), coverRateMinimum), loanScale) && diff --git a/src/libxrpl/tx/transactors/lending/LoanSet.cpp b/src/libxrpl/tx/transactors/lending/LoanSet.cpp index f046a24961..9cc4042365 100644 --- a/src/libxrpl/tx/transactors/lending/LoanSet.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanSet.cpp @@ -466,7 +466,7 @@ LoanSet::doApply() // Round the minimum required cover up to be conservative. This ensures // CoverAvailable never drops below the theoretical minimum, protecting // the broker's solvency. - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); if (brokerSle->at(sfCoverAvailable) < tenthBipsOfValue(newDebtTotal, coverRateMinimum)) { JLOG(j_.warn()) << "Insufficient first-loss capital to cover the loan."; diff --git a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp index 15a745b8dd..e061dbe7ec 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp @@ -344,7 +344,7 @@ NFTokenAcceptOffer::transferNFToken( if (!tokenAndPage) return tecINTERNAL; // LCOV_EXCL_LINE - if (auto const ret = nft::removeToken(view(), seller, nftokenID, std::move(tokenAndPage->page)); + if (auto const ret = nft::removeToken(view(), seller, nftokenID, tokenAndPage->page); !isTesSuccess(ret)) return ret; diff --git a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp index 6d9ee56c51..5a31e35470 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp @@ -29,7 +29,7 @@ NFTokenBurn::preclaim(PreclaimContext const& ctx) // do so if the token is marked as burnable. if (auto const account = ctx.tx[sfAccount]; owner != account) { - if (!(nft::getFlags(ctx.tx[sfNFTokenID]) & nft::flagBurnable)) + if ((nft::getFlags(ctx.tx[sfNFTokenID]) & nft::flagBurnable) == 0) return tecNO_PERMISSION; if (auto const issuer = nft::getIssuer(ctx.tx[sfNFTokenID]); issuer != account) diff --git a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp index eaca8b3380..f5fdc89550 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp @@ -45,7 +45,7 @@ NFTokenCreateOffer::preclaim(PreclaimContext const& ctx) std::uint32_t const txFlags = ctx.tx.getFlags(); if (!nft::findToken( - ctx.view, ctx.tx[(txFlags & tfSellNFToken) ? sfAccount : sfOwner], nftokenID)) + ctx.view, ctx.tx[((txFlags & tfSellNFToken) != 0u) ? sfAccount : sfOwner], nftokenID)) return tecNO_ENTRY; // Use implementation shared with NFTokenMint diff --git a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp index 1b2c9c2ab0..8ccd4e9552 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp @@ -30,7 +30,7 @@ NFTokenModify::preclaim(PreclaimContext const& ctx) return tecNO_ENTRY; // Check if the NFT is mutable - if (!(nft::getFlags(ctx.tx[sfNFTokenID]) & nft::flagMutable)) + if ((nft::getFlags(ctx.tx[sfNFTokenID]) & nft::flagMutable) == 0) return tecNO_PERMISSION; // Verify permissions for the issuer diff --git a/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp b/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp index f7c12b5488..3368887d94 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp @@ -64,7 +64,7 @@ getPageForToken( // A suitable page doesn't exist; we'll have to create one. if (!cp) { - STArray arr; + STArray const arr; cp = std::make_shared(last); cp->setFieldArray(sfNFTokens, arr); view.insert(cp); @@ -245,7 +245,7 @@ insertToken(ApplyView& view, AccountID owner, STObject&& nft) // First, we need to locate the page the NFT belongs to, creating it // if necessary. This operation may fail if it is impossible to insert // the NFT. - std::shared_ptr page = + std::shared_ptr const page = getPageForToken(view, owner, nft[sfNFTokenID], [](ApplyView& view, AccountID const& owner) { adjustOwnerCount( view, @@ -338,13 +338,13 @@ mergePages(ApplyView& view, std::shared_ptr const& p1, std::shared_ptr TER removeToken(ApplyView& view, AccountID const& owner, uint256 const& nftokenID) { - std::shared_ptr page = locatePage(view, owner, nftokenID); + std::shared_ptr const page = locatePage(view, owner, nftokenID); // If the page couldn't be found, the given NFT isn't owned by this account if (!page) return tecNO_ENTRY; - return removeToken(view, owner, nftokenID, std::move(page)); + return removeToken(view, owner, nftokenID, page); } /** Remove the token from the owner's token directory. */ @@ -519,7 +519,7 @@ removeToken( std::optional findToken(ReadView const& view, AccountID const& owner, uint256 const& nftokenID) { - std::shared_ptr page = locatePage(view, owner, nftokenID); + std::shared_ptr const page = locatePage(view, owner, nftokenID); // If the page couldn't be found, the given NFT isn't owned by this account if (!page) @@ -601,7 +601,7 @@ removeTokenOffersWithLimit(ApplyView& view, Keylet const& directory, std::size_t if (maxDeletableOffers == deletedOffersCount) break; } - } while (pageIndex.value_or(0) && maxDeletableOffers != deletedOffersCount); + } while ((pageIndex.value_or(0) != 0u) && maxDeletableOffers != deletedOffersCount); return deletedOffersCount; } @@ -612,7 +612,7 @@ notTooManyOffers(ReadView const& view, uint256 const& nftokenID) std::size_t totalOffers = 0; { - Dir buys(view, keylet::nft_buys(nftokenID)); + Dir const buys(view, keylet::nft_buys(nftokenID)); for (auto iter = buys.begin(); iter != buys.end(); iter.next_page()) { totalOffers += iter.page_size(); @@ -622,7 +622,7 @@ notTooManyOffers(ReadView const& view, uint256 const& nftokenID) } { - Dir sells(view, keylet::nft_sells(nftokenID)); + Dir const sells(view, keylet::nft_sells(nftokenID)); for (auto iter = sells.begin(); iter != sells.end(); iter.next_page()) { totalOffers += iter.page_size(); @@ -647,8 +647,8 @@ deleteTokenOffer(ApplyView& view, std::shared_ptr const& offer) auto const nftokenID = (*offer)[sfNFTokenID]; if (!view.dirRemove( - ((*offer)[sfFlags] & lsfSellNFToken) ? keylet::nft_sells(nftokenID) - : keylet::nft_buys(nftokenID), + (((*offer)[sfFlags] & lsfSellNFToken) != 0u) ? keylet::nft_sells(nftokenID) + : keylet::nft_buys(nftokenID), (*offer)[sfNFTokenOfferNode], offer->key(), false)) @@ -799,7 +799,7 @@ tokenOfferCreatePreflight( if (!isXRP(amount)) { - if (nftFlags & nft::flagOnlyXRP) + if ((nftFlags & nft::flagOnlyXRP) != 0) return temBAD_AMOUNT; if (!amount) @@ -808,7 +808,7 @@ tokenOfferCreatePreflight( // If this is an offer to buy, you must offer something; if it's an // offer to sell, you can ask for nothing. - bool const isSellOffer = txFlags & tfSellNFToken; + bool const isSellOffer = (txFlags & tfSellNFToken) != 0u; if (!isSellOffer && !amount) return temBAD_AMOUNT; @@ -844,7 +844,7 @@ tokenOfferCreatePreclaim( std::optional const& owner, std::uint32_t txFlags) { - if (!(nftFlags & nft::flagCreateTrustLines) && !amount.native() && xferFee) + if (((nftFlags & nft::flagCreateTrustLines) == 0) && !amount.native() && (xferFee != 0u)) { if (!view.exists(keylet::account(nftIssuer))) return tecNO_ISSUER; @@ -866,7 +866,7 @@ tokenOfferCreatePreclaim( return tecFROZEN; } - if (nftIssuer != acctID && !(nftFlags & nft::flagTransferable)) + if (nftIssuer != acctID && ((nftFlags & nft::flagTransferable) == 0)) { auto const root = view.read(keylet::account(nftIssuer)); XRPL_ASSERT(root, "xrpl::nft::tokenOfferCreatePreclaim : non-null account"); @@ -899,7 +899,7 @@ tokenOfferCreatePreclaim( return tecNO_DST; // check if the destination has disallowed incoming offers - if (sleDst->getFlags() & lsfDisallowIncomingNFTokenOffer) + if ((sleDst->getFlags() & lsfDisallowIncomingNFTokenOffer) != 0u) return tecNO_PERMISSION; } @@ -912,7 +912,7 @@ tokenOfferCreatePreclaim( if (!sleOwner) return tecNO_TARGET; - if (sleOwner->getFlags() & lsfDisallowIncomingNFTokenOffer) + if ((sleOwner->getFlags() & lsfDisallowIncomingNFTokenOffer) != 0u) return tecNO_PERMISSION; } @@ -960,7 +960,7 @@ tokenOfferCreateApply( if (!ownerNode) return tecDIR_FULL; // LCOV_EXCL_LINE - bool const isSellOffer = txFlags & tfSellNFToken; + bool const isSellOffer = (txFlags & tfSellNFToken) != 0u; // Token offers are also added to the token's buy or sell offer // directory @@ -1094,7 +1094,8 @@ checkTrustlineDeepFrozen( // There's no difference which side enacted deep freeze, accepting // tokens shouldn't be possible. - bool const deepFrozen = (*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze); + bool const deepFrozen = + ((*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze)) != 0u; if (deepFrozen) { diff --git a/src/libxrpl/tx/transactors/oracle/OracleSet.cpp b/src/libxrpl/tx/transactors/oracle/OracleSet.cpp index 061dd16b0c..772756ad6d 100644 --- a/src/libxrpl/tx/transactors/oracle/OracleSet.cpp +++ b/src/libxrpl/tx/transactors/oracle/OracleSet.cpp @@ -236,7 +236,7 @@ OracleSet::doApply() } STArray updatedSeries; for (auto const& iter : pairs) - updatedSeries.push_back(std::move(iter.second)); + updatedSeries.push_back(iter.second); sle->setFieldArray(sfPriceDataSeries, updatedSeries); if (ctx_.tx.isFieldPresent(sfURI)) sle->setFieldVL(sfURI, ctx_.tx[sfURI]); @@ -284,7 +284,7 @@ OracleSet::doApply() pairs.emplace(key, std::move(priceData)); } for (auto const& iter : pairs) - series.push_back(std::move(iter.second)); + series.push_back(iter.second); } sle->setFieldArray(sfPriceDataSeries, series); diff --git a/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp b/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp index 60b8dcd823..0f4681a3ad 100644 --- a/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp +++ b/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp @@ -19,10 +19,7 @@ DepositPreauth::checkExtraFeatures(PreflightContext const& ctx) bool const unauthArrPresent = ctx.tx.isFieldPresent(sfUnauthorizeCredentials); bool const authCredPresent = authArrPresent || unauthArrPresent; - if (authCredPresent && !ctx.rules.enabled(featureCredentials)) - return false; - - return true; + return !authCredPresent || ctx.rules.enabled(featureCredentials); } NotTEC @@ -46,7 +43,7 @@ DepositPreauth::preflight(PreflightContext const& ctx) return temMALFORMED; } - if (authPresent) + if (authPresent != 0) { // Make sure that the passed account is valid. AccountID const& target(optAuth ? *optAuth : *optUnauth); diff --git a/src/libxrpl/tx/transactors/payment/Payment.cpp b/src/libxrpl/tx/transactors/payment/Payment.cpp index 38765016b5..bf8a0caa4b 100644 --- a/src/libxrpl/tx/transactors/payment/Payment.cpp +++ b/src/libxrpl/tx/transactors/payment/Payment.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -91,9 +90,9 @@ Payment::preflight(PreflightContext const& ctx) if (mptDirect && ctx.tx.isFieldPresent(sfPaths)) return temMALFORMED; - bool const partialPaymentAllowed = txFlags & tfPartialPayment; - bool const limitQuality = txFlags & tfLimitQuality; - bool const defaultPathsAllowed = !(txFlags & tfNoRippleDirect); + bool const partialPaymentAllowed = (txFlags & tfPartialPayment) != 0u; + bool const limitQuality = (txFlags & tfLimitQuality) != 0u; + bool const defaultPathsAllowed = (txFlags & tfNoRippleDirect) == 0u; bool const hasPaths = tx.isFieldPresent(sfPaths); bool const hasMax = tx.isFieldPresent(sfSendMax); @@ -269,7 +268,7 @@ Payment::preclaim(PreclaimContext const& ctx) { // Ripple if source or destination is non-native or if there are paths. std::uint32_t const txFlags = ctx.tx.getFlags(); - bool const partialPaymentAllowed = txFlags & tfPartialPayment; + bool const partialPaymentAllowed = (txFlags & tfPartialPayment) != 0u; auto const hasPaths = ctx.tx.isFieldPresent(sfPaths); auto const sendMax = ctx.tx[~sfSendMax]; @@ -314,7 +313,9 @@ Payment::preclaim(PreclaimContext const& ctx) return tecNO_DST_INSUF_XRP; } } - else if ((sleDst->getFlags() & lsfRequireDestTag) && !ctx.tx.isFieldPresent(sfDestinationTag)) + else if ( + ((sleDst->getFlags() & lsfRequireDestTag) != 0u) && + !ctx.tx.isFieldPresent(sfDestinationTag)) { // The tag is basically account-specific information we don't // understand, but we can require someone to fill it in. @@ -363,9 +364,9 @@ Payment::doApply() // Ripple if source or destination is non-native or if there are paths. std::uint32_t const txFlags = ctx_.tx.getFlags(); - bool const partialPaymentAllowed = txFlags & tfPartialPayment; - bool const limitQuality = txFlags & tfLimitQuality; - bool const defaultPathsAllowed = !(txFlags & tfNoRippleDirect); + bool const partialPaymentAllowed = (txFlags & tfPartialPayment) != 0u; + bool const limitQuality = (txFlags & tfLimitQuality) != 0u; + bool const defaultPathsAllowed = (txFlags & tfNoRippleDirect) == 0u; auto const hasPaths = ctx_.tx.isFieldPresent(sfPaths); auto const sendMax = ctx_.tx[~sfSendMax]; @@ -433,7 +434,7 @@ Payment::doApply() account_, ctx_.tx.getFieldPathSet(sfPaths), ctx_.tx[~sfDomainID], - ctx_.registry.logs(), + ctx_.registry, &rcInput); // VFALCO NOTE We might not need to apply, depending // on the TER. But always applying *should* @@ -558,18 +559,23 @@ Payment::doApply() // This is the total reserve in drops. auto const reserve = view().fees().accountReserve(ownerCount); - // preFeeBalance_ is the balance on the sending account BEFORE the - // fees were charged. We want to make sure we have enough reserve - // to send. Allow final spend to use reserve for fee. - auto const mmm = std::max(reserve, ctx_.tx.getFieldAmount(sfFee).xrp()); + // In a delegated payment, the fee payer is the delegated account, + // not the source account (account_). + bool const accountIsPayer = (ctx_.tx.getFeePayer() == account_); - if (preFeeBalance_ < dstAmount.xrp() + mmm) + // preFeeBalance_ is the balance on the source account (account_) BEFORE the fees + // were charged. If source account is the fee payer, it must also cover the fee. + // The final spend may use the reserve to cover fees. + auto const minRequiredFunds = + accountIsPayer ? std::max(reserve, ctx_.tx.getFieldAmount(sfFee).xrp()) : reserve; + + if (preFeeBalance_ < dstAmount.xrp() + minRequiredFunds) { // Vote no. However the transaction might succeed, if applied in // a different order. JLOG(j_.trace()) << "Delay transaction: Insufficient funds: " << to_string(preFeeBalance_) - << " / " << to_string(dstAmount.xrp() + mmm) << " (" << to_string(reserve) - << ")"; + << " / " << to_string(dstAmount.xrp() + minRequiredFunds) << " (" + << to_string(reserve) << ")"; return tecUNFUNDED_PAYMENT; } @@ -619,7 +625,7 @@ Payment::doApply() sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + dstAmount); // Re-arm the password change fee if we can and need to. - if ((sleDst->getFlags() & lsfPasswordSpent)) + if ((sleDst->getFlags() & lsfPasswordSpent) != 0u) sleDst->clearFlag(lsfPasswordSpent); return tesSUCCESS; diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp index 6ba489bbc3..91de511883 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -42,7 +41,7 @@ PaymentChannelClaim::preflight(PreflightContext const& ctx) { auto const flags = ctx.tx.getFlags(); - if ((flags & tfClose) && (flags & tfRenew)) + if (((flags & tfClose) != 0u) && ((flags & tfRenew) != 0u)) return temMALFORMED; } @@ -109,7 +108,7 @@ PaymentChannelClaim::doApply() auto const closeTime = ctx_.view().header().parentCloseTime.time_since_epoch().count(); if ((cancelAfter && closeTime >= *cancelAfter) || (curExpiration && closeTime >= *curExpiration)) - return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.journal("View")); + return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.get().getJournal("View")); } if (txAccount != src && txAccount != dst) @@ -158,7 +157,7 @@ PaymentChannelClaim::doApply() ctx_.view().update(slep); } - if (ctx_.tx.getFlags() & tfRenew) + if ((ctx_.tx.getFlags() & tfRenew) != 0u) { if (src != txAccount) return tecNO_PERMISSION; @@ -166,11 +165,11 @@ PaymentChannelClaim::doApply() ctx_.view().update(slep); } - if (ctx_.tx.getFlags() & tfClose) + if ((ctx_.tx.getFlags() & tfClose) != 0u) { // Channel will close immediately if dry or the receiver closes if (dst == txAccount || (*slep)[sfBalance] == (*slep)[sfAmount]) - return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.journal("View")); + return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.get().getJournal("View")); auto const settleExpiration = ctx_.view().header().parentCloseTime.time_since_epoch().count() + diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp index 3f7e1e1814..c12169fc0e 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp @@ -85,10 +85,10 @@ PaymentChannelCreate::preclaim(PreclaimContext const& ctx) auto const flags = sled->getFlags(); // Check if they have disallowed incoming payment channels - if (flags & lsfDisallowIncomingPayChan) + if ((flags & lsfDisallowIncomingPayChan) != 0u) return tecNO_PERMISSION; - if ((flags & lsfRequireDestTag) && !ctx.tx[~sfDestinationTag]) + if (((flags & lsfRequireDestTag) != 0u) && !ctx.tx[~sfDestinationTag]) return tecDST_TAG_NEEDED; // Pseudo-accounts cannot receive payment channels, other than native diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp index 6c08cc466c..c42e8545f5 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp @@ -38,7 +38,7 @@ PaymentChannelFund::doApply() auto const cancelAfter = (*slep)[~sfCancelAfter]; auto const closeTime = ctx_.view().header().parentCloseTime.time_since_epoch().count(); if ((cancelAfter && closeTime >= *cancelAfter) || (expiration && closeTime >= *expiration)) - return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.journal("View")); + return closeChannel(slep, ctx_.view(), k.key, ctx_.registry.get().getJournal("View")); } if (src != txAccount) diff --git a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp index e8df51c9d9..30f24241aa 100644 --- a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp +++ b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp @@ -100,8 +100,6 @@ PermissionedDomainSet::doApply() Keylet const pdKeylet = keylet::permissionedDomain(account_, ctx_.tx.getFieldU32(sfSequence)); auto slePd = std::make_shared(pdKeylet); - if (!slePd) - return tefINTERNAL; // LCOV_EXCL_LINE slePd->setAccountID(sfOwner, account_); slePd->setFieldU32(sfSequence, ctx_.tx.getFieldU32(sfSequence)); diff --git a/src/libxrpl/tx/transactors/system/Batch.cpp b/src/libxrpl/tx/transactors/system/Batch.cpp index b2a111a182..cd3ac9a16c 100644 --- a/src/libxrpl/tx/transactors/system/Batch.cpp +++ b/src/libxrpl/tx/transactors/system/Batch.cpp @@ -123,7 +123,7 @@ Batch::calculateBaseFee(ReadView const& view, STTx const& tx) } // LCOV_EXCL_STOP - XRPAmount signerFees = signerCount * view.fees().base; + XRPAmount const signerFees = signerCount * view.fees().base; // LCOV_EXCL_START if (signerFees > maxAmount - txnFees) @@ -270,7 +270,7 @@ Batch::preflight(PreflightContext const& ctx) return temINVALID_INNER_BATCH; } - if (!(stx.getFlags() & tfInnerBatchTxn)) + if ((stx.getFlags() & tfInnerBatchTxn) == 0u) { JLOG(ctx.j.debug()) << "BatchTrace[" << parentBatchId << "]: " << "inner txn must have the tfInnerBatchTxn flag. " @@ -335,7 +335,7 @@ Batch::preflight(PreflightContext const& ctx) } // Duplicate sequence and ticket checks - if (flags & (tfAllOrNothing | tfUntilFailure)) + if ((flags & (tfAllOrNothing | tfUntilFailure)) != 0u) { if (auto const seq = stx.getFieldU32(sfSequence); seq != 0) { diff --git a/src/libxrpl/tx/transactors/system/Change.cpp b/src/libxrpl/tx/transactors/system/Change.cpp index c84d056c24..77dba8d5e2 100644 --- a/src/libxrpl/tx/transactors/system/Change.cpp +++ b/src/libxrpl/tx/transactors/system/Change.cpp @@ -156,7 +156,7 @@ Change::preCompute() TER Change::applyAmendment() { - uint256 amendment(ctx_.tx.getFieldH256(sfAmendment)); + uint256 const amendment(ctx_.tx.getFieldH256(sfAmendment)); auto const k = keylet::amendments(); @@ -214,7 +214,7 @@ Change::applyAmendment() entry[sfAmendment] = amendment; entry[sfCloseTime] = view().parentCloseTime().time_since_epoch().count(); - if (!ctx_.registry.getAmendmentTable().isSupported(amendment)) + if (!ctx_.registry.get().getAmendmentTable().isSupported(amendment)) { JLOG(j_.warn()) << "Unsupported amendment " << amendment << " received a majority."; } @@ -225,13 +225,13 @@ Change::applyAmendment() amendments.push_back(amendment); amendmentObject->setFieldV256(sfAmendments, amendments); - ctx_.registry.getAmendmentTable().enable(amendment); + ctx_.registry.get().getAmendmentTable().enable(amendment); - if (!ctx_.registry.getAmendmentTable().isSupported(amendment)) + if (!ctx_.registry.get().getAmendmentTable().isSupported(amendment)) { JLOG(j_.error()) << "Unsupported amendment " << amendment << " activated: server blocked."; - ctx_.registry.getOPs().setAmendmentBlocked(); + ctx_.registry.get().getOPs().setAmendmentBlocked(); } } @@ -312,7 +312,7 @@ Change::applyUNLModify() return tefFAILURE; } - bool const disabling = ctx_.tx.getFieldU8(sfUNLModifyDisabling); + bool const disabling = ctx_.tx.getFieldU8(sfUNLModifyDisabling) != 0u; auto const seq = ctx_.tx.getFieldU32(sfLedgerSequence); if (seq != view().seq()) { diff --git a/src/libxrpl/tx/transactors/system/TicketCreate.cpp b/src/libxrpl/tx/transactors/system/TicketCreate.cpp index a064c158d1..c4e281c357 100644 --- a/src/libxrpl/tx/transactors/system/TicketCreate.cpp +++ b/src/libxrpl/tx/transactors/system/TicketCreate.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -71,7 +70,7 @@ TicketCreate::doApply() return tecINSUFFICIENT_RESERVE; } - beast::Journal viewJ{ctx_.registry.journal("View")}; + beast::Journal const viewJ{ctx_.registry.get().getJournal("View")}; // The starting ticket sequence is the same as the current account // root sequence. Before we got here to doApply(), the transaction @@ -89,7 +88,7 @@ TicketCreate::doApply() { std::uint32_t const curTicketSeq = firstTicketSeq + i; Keylet const ticketKeylet = keylet::ticket(account_, curTicketSeq); - SLE::pointer sleTicket = std::make_shared(ticketKeylet); + SLE::pointer const sleTicket = std::make_shared(ticketKeylet); sleTicket->setAccountID(sfAccount, account_); sleTicket->setFieldU32(sfTicketSequence, curTicketSeq); diff --git a/src/libxrpl/tx/transactors/token/Clawback.cpp b/src/libxrpl/tx/transactors/token/Clawback.cpp index e8ba3cc0c5..57175ba427 100644 --- a/src/libxrpl/tx/transactors/token/Clawback.cpp +++ b/src/libxrpl/tx/transactors/token/Clawback.cpp @@ -90,7 +90,8 @@ preclaimHelper( // If AllowTrustLineClawback is not set or NoFreeze is set, return no // permission - if (!(issuerFlagsIn & lsfAllowTrustLineClawback) || (issuerFlagsIn & lsfNoFreeze)) + if (((issuerFlagsIn & lsfAllowTrustLineClawback) == 0u) || + ((issuerFlagsIn & lsfNoFreeze) != 0u)) return tecNO_PERMISSION; auto const sleRippleState = @@ -138,7 +139,7 @@ preclaimHelper( if (!sleIssuance) return tecOBJECT_NOT_FOUND; - if (!((*sleIssuance)[sfFlags] & lsfMPTCanClawback)) + if (((*sleIssuance)[sfFlags] & lsfMPTCanClawback) == 0u) return tecNO_PERMISSION; if (sleIssuance->getAccountID(sfIssuer) != issuer) diff --git a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp index 77551b372b..3ddc6d2c05 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp @@ -38,7 +38,7 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) // `holderID` is NOT used if (!holderID) { - std::shared_ptr sleMpt = + std::shared_ptr const sleMpt = ctx.view.read(keylet::mptoken(ctx.tx[sfMPTokenIssuanceID], accountID)); // There is an edge case where all holders have zero balance, issuance @@ -48,7 +48,7 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) // before fetching the MPTIssuance object. // if holder wants to delete/unauthorize a mpt - if (ctx.tx.getFlags() & tfMPTUnauthorize) + if ((ctx.tx.getFlags() & tfMPTUnauthorize) != 0u) { if (!sleMpt) return tecOBJECT_NOT_FOUND; @@ -116,7 +116,7 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) // If tx is submitted by issuer, it only applies for MPT with // lsfMPTRequireAuth set - if (!(mptIssuanceFlags & lsfMPTRequireAuth)) + if ((mptIssuanceFlags & lsfMPTRequireAuth) == 0u) return tecNO_AUTH; // The holder must create the MPT before the issuer can authorize it. diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp index 58accf0271..6bcb1175e8 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp @@ -33,8 +33,8 @@ MPTokenIssuanceCreate::preflight(PreflightContext const& ctx) { // If the mutable flags field is included, at least one flag must be // specified. - if (auto const mutableFlags = ctx.tx[~sfMutableFlags]; - mutableFlags && (!*mutableFlags || *mutableFlags & tmfMPTokenIssuanceCreateMutableMask)) + if (auto const mutableFlags = ctx.tx[~sfMutableFlags]; mutableFlags && + ((*mutableFlags == 0u) || ((*mutableFlags & tmfMPTokenIssuanceCreateMutableMask) != 0u))) return temINVALID_FLAG; if (auto const fee = ctx.tx[~sfTransferFee]) diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp index dc5827419b..fc09a53ae1 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp @@ -55,7 +55,7 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) auto const txFlags = ctx.tx.getFlags(); // fails if both flags are set - if ((txFlags & tfMPTLock) && (txFlags & tfMPTUnlock)) + if (((txFlags & tfMPTLock) != 0u) && ((txFlags & tfMPTUnlock) != 0u)) return temINVALID_FLAG; auto const accountID = ctx.tx[sfAccount]; @@ -77,7 +77,7 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) return temMALFORMED; // Can not set flags when mutating MPTokenIssuance - if (isMutate && (txFlags & tfUniversalMask)) + if (isMutate && ((txFlags & tfUniversalMask) != 0u)) return temMALFORMED; if (transferFee && *transferFee > maxTransferFee) @@ -88,7 +88,7 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) if (mutableFlags) { - if (!*mutableFlags || (*mutableFlags & tmfMPTokenIssuanceSetMutableMask)) + if ((*mutableFlags == 0u) || ((*mutableFlags & tmfMPTokenIssuanceSetMutableMask) != 0u)) return temINVALID_FLAG; // Can not set and clear the same flag @@ -102,7 +102,7 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) // Trying to set a non-zero TransferFee and clear MPTCanTransfer // in the same transaction is not allowed. - if (transferFee.value_or(0) && (*mutableFlags & tmfMPTClearCanTransfer)) + if ((transferFee.value_or(0) != 0u) && ((*mutableFlags & tmfMPTClearCanTransfer) != 0u)) return temMALFORMED; } } @@ -130,16 +130,16 @@ MPTokenIssuanceSet::checkPermission(ReadView const& view, STTx const& tx) // this is added in case more flags will be added for MPTokenIssuanceSet // in the future. Currently unreachable. - if (txFlags & tfMPTokenIssuanceSetMask) + if ((txFlags & tfMPTokenIssuanceSetMask) != 0u) return terNO_DELEGATE_PERMISSION; // LCOV_EXCL_LINE std::unordered_set granularPermissions; loadGranularPermission(sle, ttMPTOKEN_ISSUANCE_SET, granularPermissions); - if (txFlags & tfMPTLock && !granularPermissions.contains(MPTokenIssuanceLock)) + if (((txFlags & tfMPTLock) != 0u) && !granularPermissions.contains(MPTokenIssuanceLock)) return terNO_DELEGATE_PERMISSION; - if (txFlags & tfMPTUnlock && !granularPermissions.contains(MPTokenIssuanceUnlock)) + if (((txFlags & tfMPTUnlock) != 0u) && !granularPermissions.contains(MPTokenIssuanceUnlock)) return terNO_DELEGATE_PERMISSION; return tesSUCCESS; @@ -258,11 +258,11 @@ MPTokenIssuanceSet::doApply() std::uint32_t const flagsIn = sle->getFieldU32(sfFlags); std::uint32_t flagsOut = flagsIn; - if (txFlags & tfMPTLock) + if ((txFlags & tfMPTLock) != 0u) { flagsOut |= lsfMPTLocked; } - else if (txFlags & tfMPTUnlock) + else if ((txFlags & tfMPTUnlock) != 0u) { flagsOut &= ~lsfMPTLocked; } @@ -271,17 +271,17 @@ MPTokenIssuanceSet::doApply() { for (auto const& f : mptMutabilityFlags) { - if (mutableFlags & f.setFlag) + if ((mutableFlags & f.setFlag) != 0u) { flagsOut |= f.canMutateFlag; } - else if (mutableFlags & f.clearFlag) + else if ((mutableFlags & f.clearFlag) != 0u) { flagsOut &= ~f.canMutateFlag; } } - if (mutableFlags & tmfMPTClearCanTransfer) + if ((mutableFlags & tmfMPTClearCanTransfer) != 0u) { // If the lsfMPTCanTransfer flag is being cleared, then also clear // the TransferFee field. diff --git a/src/libxrpl/tx/transactors/token/TrustSet.cpp b/src/libxrpl/tx/transactors/token/TrustSet.cpp index 22588b977a..feefa6a7ac 100644 --- a/src/libxrpl/tx/transactors/token/TrustSet.cpp +++ b/src/libxrpl/tx/transactors/token/TrustSet.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -65,7 +64,7 @@ TrustSet::preflight(PreflightContext const& ctx) { // Even though the deep freeze flags are included in the // `tfTrustSetMask`, they are not valid if the amendment is not enabled. - if (uTxFlags & (tfSetDeepFreeze | tfClearDeepFreeze)) + if ((uTxFlags & (tfSetDeepFreeze | tfClearDeepFreeze)) != 0u) { return temINVALID_FLAG; } @@ -128,7 +127,7 @@ TrustSet::checkPermission(ReadView const& view, STTx const& tx) // Currently we only support TrustlineAuthorize, TrustlineFreeze and // TrustlineUnfreeze granular permission. Setting other flags returns // error. - if (txFlags & tfTrustSetPermissionMask) + if ((txFlags & tfTrustSetPermissionMask) != 0u) return terNO_DELEGATE_PERMISSION; if (tx.isFieldPresent(sfQualityIn) || tx.isFieldPresent(sfQualityOut)) @@ -146,11 +145,11 @@ TrustSet::checkPermission(ReadView const& view, STTx const& tx) std::unordered_set granularPermissions; loadGranularPermission(sle, ttTRUST_SET, granularPermissions); - if (txFlags & tfSetfAuth && !granularPermissions.contains(TrustlineAuthorize)) + if (((txFlags & tfSetfAuth) != 0u) && !granularPermissions.contains(TrustlineAuthorize)) return terNO_DELEGATE_PERMISSION; - if (txFlags & tfSetFreeze && !granularPermissions.contains(TrustlineFreeze)) + if (((txFlags & tfSetFreeze) != 0u) && !granularPermissions.contains(TrustlineFreeze)) return terNO_DELEGATE_PERMISSION; - if (txFlags & tfClearFreeze && !granularPermissions.contains(TrustlineUnfreeze)) + if (((txFlags & tfClearFreeze) != 0u) && !granularPermissions.contains(TrustlineUnfreeze)) return terNO_DELEGATE_PERMISSION; // updating LimitAmount is not allowed only with granular permissions, @@ -179,9 +178,9 @@ TrustSet::preclaim(PreclaimContext const& ctx) std::uint32_t const uTxFlags = ctx.tx.getFlags(); - bool const bSetAuth = (uTxFlags & tfSetfAuth); + bool const bSetAuth = (uTxFlags & tfSetfAuth) != 0u; - if (bSetAuth && !(sle->getFieldU32(sfFlags) & lsfRequireAuth)) + if (bSetAuth && ((sle->getFieldU32(sfFlags) & lsfRequireAuth) == 0u)) { JLOG(ctx.j.trace()) << "Retry: Auth not required."; return tefNO_AUTH_REQUIRED; @@ -203,7 +202,7 @@ TrustSet::preclaim(PreclaimContext const& ctx) // If the destination has opted to disallow incoming trustlines // then honour that flag - if (sleDst->getFlags() & lsfDisallowIncomingTrustline) + if ((sleDst->getFlags() & lsfDisallowIncomingTrustline) != 0u) { // The original implementation of featureDisallowIncoming was // too restrictive. If @@ -268,8 +267,8 @@ TrustSet::preclaim(PreclaimContext const& ctx) if (ctx.view.rules().enabled(featureDeepFreeze)) { bool const bNoFreeze = sle->isFlag(lsfNoFreeze); - bool const bSetFreeze = (uTxFlags & tfSetFreeze); - bool const bSetDeepFreeze = (uTxFlags & tfSetDeepFreeze); + bool const bSetFreeze = (uTxFlags & tfSetFreeze) != 0u; + bool const bSetDeepFreeze = (uTxFlags & tfSetDeepFreeze) != 0u; if (bNoFreeze && (bSetFreeze || bSetDeepFreeze)) { @@ -277,8 +276,8 @@ TrustSet::preclaim(PreclaimContext const& ctx) return tecNO_PERMISSION; } - bool const bClearFreeze = (uTxFlags & tfClearFreeze); - bool const bClearDeepFreeze = (uTxFlags & tfClearDeepFreeze); + bool const bClearFreeze = (uTxFlags & tfClearFreeze) != 0u; + bool const bClearDeepFreeze = (uTxFlags & tfClearDeepFreeze) != 0u; if ((bSetFreeze || bSetDeepFreeze) && (bClearFreeze || bClearDeepFreeze)) { // Freezing and unfreezing in the same transaction should be @@ -300,7 +299,7 @@ TrustSet::preclaim(PreclaimContext const& ctx) // Trying to set deep freeze on not already frozen trust line must // fail. This also checks that clearing normal freeze while deep // frozen must not work - if (deepFrozen && !frozen) + if ((deepFrozen != 0u) && (frozen == 0u)) { return tecNO_PERMISSION; } @@ -319,7 +318,7 @@ TrustSet::doApply() bool const bQualityOut(ctx_.tx.isFieldPresent(sfQualityOut)); Currency const currency(saLimitAmount.getCurrency()); - AccountID uDstAccountID(saLimitAmount.getIssuer()); + AccountID const uDstAccountID(saLimitAmount.getIssuer()); // true, if current is high account. bool const bHigh = account_ > uDstAccountID; @@ -351,7 +350,7 @@ TrustSet::doApply() XRPAmount const reserveCreate( (uOwnerCount < 2) ? XRPAmount(beast::zero) : view().fees().accountReserve(uOwnerCount + 1)); - std::uint32_t uQualityIn(bQualityIn ? ctx_.tx.getFieldU32(sfQualityIn) : 0); + std::uint32_t const uQualityIn(bQualityIn ? ctx_.tx.getFieldU32(sfQualityIn) : 0); std::uint32_t uQualityOut(bQualityOut ? ctx_.tx.getFieldU32(sfQualityOut) : 0); if (bQualityOut && QUALITY_ONE == uQualityOut) @@ -359,17 +358,17 @@ TrustSet::doApply() std::uint32_t const uTxFlags = ctx_.tx.getFlags(); - bool const bSetAuth = (uTxFlags & tfSetfAuth); - bool const bSetNoRipple = (uTxFlags & tfSetNoRipple); - bool const bClearNoRipple = (uTxFlags & tfClearNoRipple); - bool const bSetFreeze = (uTxFlags & tfSetFreeze); - bool const bClearFreeze = (uTxFlags & tfClearFreeze); - bool const bSetDeepFreeze = (uTxFlags & tfSetDeepFreeze); - bool const bClearDeepFreeze = (uTxFlags & tfClearDeepFreeze); + bool const bSetAuth = (uTxFlags & tfSetfAuth) != 0u; + bool const bSetNoRipple = (uTxFlags & tfSetNoRipple) != 0u; + bool const bClearNoRipple = (uTxFlags & tfClearNoRipple) != 0u; + bool const bSetFreeze = (uTxFlags & tfSetFreeze) != 0u; + bool const bClearFreeze = (uTxFlags & tfClearFreeze) != 0u; + bool const bSetDeepFreeze = (uTxFlags & tfSetDeepFreeze) != 0u; + bool const bClearDeepFreeze = (uTxFlags & tfClearDeepFreeze) != 0u; - auto viewJ = ctx_.registry.journal("View"); + auto viewJ = ctx_.registry.get().getJournal("View"); - SLE::pointer sleDst = view().peek(keylet::account(uDstAccountID)); + SLE::pointer const sleDst = view().peek(keylet::account(uDstAccountID)); if (!sleDst) { @@ -380,7 +379,8 @@ TrustSet::doApply() STAmount saLimitAllow = saLimitAmount; saLimitAllow.setIssuer(account_); - SLE::pointer sleRippleState = view().peek(keylet::line(account_, uDstAccountID, currency)); + SLE::pointer const sleRippleState = + view().peek(keylet::line(account_, uDstAccountID, currency)); if (sleRippleState) { @@ -424,7 +424,7 @@ TrustSet::doApply() uLowQualityIn = sleRippleState->getFieldU32(sfLowQualityIn); uHighQualityIn = sleRippleState->getFieldU32(sfHighQualityIn); } - else if (uQualityIn) + else if (uQualityIn != 0u) { // Setting. @@ -460,7 +460,7 @@ TrustSet::doApply() uLowQualityOut = sleRippleState->getFieldU32(sfLowQualityOut); uHighQualityOut = sleRippleState->getFieldU32(sfHighQualityOut); } - else if (uQualityOut) + else if (uQualityOut != 0u) { // Setting. @@ -516,23 +516,23 @@ TrustSet::doApply() if (QUALITY_ONE == uHighQualityOut) uHighQualityOut = 0; - bool const bLowDefRipple = sleLowAccount->getFlags() & lsfDefaultRipple; - bool const bHighDefRipple = sleHighAccount->getFlags() & lsfDefaultRipple; + bool const bLowDefRipple = (sleLowAccount->getFlags() & lsfDefaultRipple) != 0u; + bool const bHighDefRipple = (sleHighAccount->getFlags() & lsfDefaultRipple) != 0u; - bool const bLowReserveSet = uLowQualityIn || uLowQualityOut || - ((uFlagsOut & lsfLowNoRipple) == 0) != bLowDefRipple || (uFlagsOut & lsfLowFreeze) || - saLowLimit || saLowBalance > beast::zero; + bool const bLowReserveSet = (uLowQualityIn != 0u) || (uLowQualityOut != 0u) || + ((uFlagsOut & lsfLowNoRipple) == 0) != bLowDefRipple || + ((uFlagsOut & lsfLowFreeze) != 0u) || saLowLimit || saLowBalance > beast::zero; bool const bLowReserveClear = !bLowReserveSet; - bool const bHighReserveSet = uHighQualityIn || uHighQualityOut || - ((uFlagsOut & lsfHighNoRipple) == 0) != bHighDefRipple || (uFlagsOut & lsfHighFreeze) || - saHighLimit || saHighBalance > beast::zero; + bool const bHighReserveSet = (uHighQualityIn != 0u) || (uHighQualityOut != 0u) || + ((uFlagsOut & lsfHighNoRipple) == 0) != bHighDefRipple || + ((uFlagsOut & lsfHighFreeze) != 0u) || saHighLimit || saHighBalance > beast::zero; bool const bHighReserveClear = !bHighReserveSet; bool const bDefault = bLowReserveClear && bHighReserveClear; - bool const bLowReserved = (uFlagsIn & lsfLowReserve); - bool const bHighReserved = (uFlagsIn & lsfHighReserve); + bool const bLowReserved = (uFlagsIn & lsfLowReserve) != 0u; + bool const bHighReserved = (uFlagsIn & lsfHighReserve) != 0u; bool bReserveIncrease = false; @@ -603,11 +603,11 @@ TrustSet::doApply() } // Line does not exist. else if ( - !saLimitAmount && // Setting default limit. - (!bQualityIn || !uQualityIn) && // Not setting quality in or - // setting default quality in. - (!bQualityOut || !uQualityOut) && // Not setting quality out or - // setting default quality out. + !saLimitAmount && // Setting default limit. + (!bQualityIn || (uQualityIn == 0u)) && // Not setting quality in or + // setting default quality in. + (!bQualityOut || (uQualityOut == 0u)) && // Not setting quality out or + // setting default quality out. (!bSetAuth)) { JLOG(j_.trace()) << "Redundant: Setting non-existent ripple line to defaults."; @@ -626,7 +626,7 @@ TrustSet::doApply() else { // Zero balance in currency. - STAmount saBalance(Issue{currency, noAccount()}); + STAmount const saBalance(Issue{currency, noAccount()}); auto const k = keylet::line(account_, uDstAccountID, currency); diff --git a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp index a650aed310..6a4d6a579e 100644 --- a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp @@ -334,7 +334,7 @@ VaultClawback::doApply() lossUnrealized <= (assetsTotal - assetsAvailable), "xrpl::VaultClawback::doApply : loss and assets do balance"); - AccountID holder = tx[sfHolder]; + AccountID const holder = tx[sfHolder]; STAmount sharesDestroyed = {share}; STAmount assetsRecovered = {vault->at(sfAsset)}; diff --git a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp index 0fc074bae2..02f8ecb57b 100644 --- a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp @@ -165,7 +165,7 @@ VaultCreate::doApply() std::uint32_t mptFlags = 0; if ((txFlags & tfVaultShareNonTransferable) == 0) mptFlags |= (lsfMPTCanEscrow | lsfMPTCanTrade | lsfMPTCanTransfer); - if (txFlags & tfVaultPrivate) + if ((txFlags & tfVaultPrivate) != 0u) mptFlags |= lsfMPTRequireAuth; // Note, here we are **not** creating an MPToken for the assets held in @@ -211,7 +211,7 @@ VaultCreate::doApply() { vault->at(sfWithdrawalPolicy) = vaultStrategyFirstComeFirstServe; } - if (scale) + if (scale != 0u) vault->at(sfScale) = scale; view().insert(vault); @@ -222,7 +222,7 @@ VaultCreate::doApply() return err; // If the vault is private, set the authorized flag for the vault owner - if (txFlags & tfVaultPrivate) + if ((txFlags & tfVaultPrivate) != 0u) { if (auto const err = authorizeMPToken( view(), preFeeBalance_, mptIssuanceID, pseudoId, ctx_.journal, {}, account_); diff --git a/src/libxrpl/tx/transactors/vault/VaultDelete.cpp b/src/libxrpl/tx/transactors/vault/VaultDelete.cpp index 1e2e46e165..5a60c0032c 100644 --- a/src/libxrpl/tx/transactors/vault/VaultDelete.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultDelete.cpp @@ -55,7 +55,7 @@ VaultDelete::preclaim(PreclaimContext const& ctx) if (!sleMPT) { // LCOV_EXCL_START - JLOG(ctx.j.error()) << "VaultDeposit: missing issuance of vault shares."; + JLOG(ctx.j.error()) << "VaultDelete: missing issuance of vault shares."; return tecOBJECT_NOT_FOUND; // LCOV_EXCL_STOP } @@ -63,7 +63,7 @@ VaultDelete::preclaim(PreclaimContext const& ctx) if (sleMPT->at(sfIssuer) != vault->getAccountID(sfAccount)) { // LCOV_EXCL_START - JLOG(ctx.j.error()) << "VaultDeposit: invalid owner of vault shares."; + JLOG(ctx.j.error()) << "VaultDelete: invalid owner of vault shares."; return tecNO_PERMISSION; // LCOV_EXCL_STOP } @@ -200,8 +200,6 @@ VaultDelete::doApply() // Destroy the vault. view().erase(vault); - associateAsset(*vault, asset); - return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/vault/VaultSet.cpp b/src/libxrpl/tx/transactors/vault/VaultSet.cpp index 532edcdcef..b54389bcde 100644 --- a/src/libxrpl/tx/transactors/vault/VaultSet.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultSet.cpp @@ -14,10 +14,7 @@ namespace xrpl { bool VaultSet::checkExtraFeatures(PreflightContext const& ctx) { - if (ctx.tx.isFieldPresent(sfDomainID) && !ctx.rules.enabled(featurePermissionedDomains)) - return false; - - return true; + return !ctx.tx.isFieldPresent(sfDomainID) || ctx.rules.enabled(featurePermissionedDomains); } NotTEC diff --git a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp index e4c671b462..f6b8c98788 100644 --- a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp @@ -43,10 +43,10 @@ VaultWithdraw::preclaim(PreclaimContext const& ctx) if (!vault) return tecNO_ENTRY; - auto const assets = ctx.tx[sfAmount]; + auto const amount = ctx.tx[sfAmount]; auto const vaultAsset = vault->at(sfAsset); auto const vaultShare = vault->at(sfShareMPTID); - if (assets.asset() != vaultAsset && assets.asset() != vaultShare) + if (amount.asset() != vaultAsset && amount.asset() != vaultShare) return tecWRONG_ASSET; auto const& vaultAccount = vault->at(sfAccount); @@ -67,8 +67,53 @@ VaultWithdraw::preclaim(PreclaimContext const& ctx) // LCOV_EXCL_STOP } - if (auto const ret = canWithdraw(ctx.view, ctx.tx)) - return ret; + if (ctx.view.rules().enabled(fixSecurity3_1_3) && amount.asset() == vaultShare) + { + // Post-fixSecurity3_1_3: if the user specified shares, convert + // to the equivalent asset amount before checking withdrawal + // limits. Pre-amendment the limit check was skipped for + // share-denominated withdrawals. + auto const sleIssuance = ctx.view.read(keylet::mptIssuance(vaultShare)); + if (!sleIssuance) + { + // LCOV_EXCL_START + JLOG(ctx.j.error()) << "VaultWithdraw: missing issuance of vault shares."; + return tefINTERNAL; + // LCOV_EXCL_STOP + } + + try + { + auto const maybeAssets = sharesToAssetsWithdraw(vault, sleIssuance, amount); + if (!maybeAssets) + return tefINTERNAL; // LCOV_EXCL_LINE + + if (auto const ret = canWithdraw( + ctx.view, + account, + dstAcct, + *maybeAssets, + ctx.tx.isFieldPresent(sfDestinationTag))) + return ret; + } + catch (std::overflow_error const&) + { + // It's easy to hit this exception from Number with large enough Scale + // so we avoid spamming the log and only use debug here. + JLOG(ctx.j.debug()) // + << "VaultWithdraw: overflow error with" + << " scale=" << (int)vault->at(sfScale) // + << ", assetsTotal=" << vault->at(sfAssetsTotal) + << ", sharesTotal=" << sleIssuance->at(sfOutstandingAmount) + << ", amount=" << amount.value(); + return tecPATH_DRY; + } + } + else + { + if (auto const ret = canWithdraw(ctx.view, ctx.tx)) + return ret; + } // If sending to Account (i.e. not a transfer), we will also create (only // if authorized) a trust line or MPToken as needed, in doApply(). diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 030148da14..0b31bcd6ce 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -27,7 +27,7 @@ protected: bool good_; public: - Number2(Slice const& data) : Number(), good_(false) + Number2(Slice const& data) : good_(false) { if (data.size() != encodedFloatSize) return; @@ -39,7 +39,7 @@ public: } uint64_t const v = SerialIter(data).get64(); - if (!(v & STAmount::cIssuedCurrency)) + if ((v & STAmount::cIssuedCurrency) == 0u) return; int32_t const e = static_cast((v >> encodedMantissaBits) & 0xFFull); @@ -47,9 +47,9 @@ public: if (decodedExponent < wasmMinExponent || decodedExponent > wasmMaxExponent) return; - int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; + int64_t const neg = ((v & STAmount::cPositive) != 0u) ? 1 : -1; int64_t const m = neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); - if (!m) + if (m == 0) return; Number x(makeNumber(m, decodedExponent)); @@ -120,20 +120,24 @@ public: v |= STAmount::cIssuedCurrency; uint64_t const absM = std::abs(m); - if (!absM) + if (absM == 0u) { return floatNull; } - else if (absM > maxEncodedMantissa) + if (absM > maxEncodedMantissa) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } v |= absM; if (e > wasmMaxExponent) + { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (e < wasmMinExponent) + } + if (e < wasmMinExponent) + { return floatNull; + } uint64_t const normExp = e - wasmMinExponent + 1; //+97 v |= normExp << encodedMantissaBits; @@ -160,10 +164,9 @@ struct FloatState { Number::rounding_mode oldMode_; MantissaRange::mantissa_scale oldScale_; - bool good_; + bool good_{false}; - FloatState(int32_t mode) - : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()), good_(false) + FloatState(int32_t mode) : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()) { if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; @@ -281,7 +284,11 @@ floatCompareImpl(Slice const& x, Slice const& y) detail::Number2 yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - return xx < yy ? 2 : (xx == yy ? 0 : 1); + if (xx < yy) + return 2; + if (xx == yy) + return 0; + return 1; } // LCOV_EXCL_START catch (...) @@ -443,7 +450,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) detail::Number2 xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - if (xx == Number() && !n) + if (xx == Number() && (n == 0)) return Unexpected(HostFunctionError::INVALID_PARAMS); detail::Number2 res(power(xx, n, 1)); diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 1344d4f5bc..67542ac559 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -24,7 +24,7 @@ getIntBytes(STBase const* obj) static Expected getAnyFieldData(STBase const* obj) { - if (!obj) + if (obj == nullptr) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); auto const stype = obj->getSType(); @@ -42,13 +42,13 @@ getAnyFieldData(STBase const* obj) return Unexpected(HostFunctionError::NOT_LEAF_FIELD); case STI_ACCOUNT: { - auto const* account(static_cast(obj)); + auto const* account(dynamic_cast(obj)); auto const& data = account->value(); return Bytes{data.begin(), data.end()}; } case STI_ISSUE: { - auto const* issue(static_cast(obj)); + auto const* issue(dynamic_cast(obj)); Asset const& asset(issue->value()); // XRP and IOU will be processed by serializer if (asset.holds()) @@ -61,7 +61,7 @@ getAnyFieldData(STBase const* obj) } case STI_VL: { - auto const* vl(static_cast(obj)); + auto const* vl(dynamic_cast(obj)); auto const& data = vl->value(); return Bytes{data.begin(), data.end()}; } @@ -84,7 +84,7 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_STOP case STI_UINT256: { - auto const* uint256Obj(static_cast(obj)); + auto const* uint256Obj(dynamic_cast(obj)); auto const& data = uint256Obj->value(); return Bytes{data.begin(), data.end()}; } @@ -106,7 +106,7 @@ getAnyFieldData(FieldValue const& variantObj) { return getAnyFieldData(*obj); } - else if (uint256 const* const* u = std::get_if(&variantObj)) + if (uint256 const* const* u = std::get_if(&variantObj)) { return Bytes((*u)->begin(), (*u)->end()); } @@ -117,13 +117,14 @@ getAnyFieldData(FieldValue const& variantObj) static inline bool noField(STBase const* field) { - return !field || (STI_NOTPRESENT == field->getSType()) || (STI_UNKNOWN == field->getSType()); + return (field == nullptr) || (STI_NOTPRESENT == field->getSType()) || + (STI_UNKNOWN == field->getSType()); } static Expected locateField(STObject const& obj, Slice const& locator) { - if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 + if (locator.empty() || ((locator.size() & 3) != 0u)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); static_assert(maxWasmParamLength % sizeof(int32_t) == 0); @@ -133,10 +134,14 @@ locateField(STObject const& obj, Slice const& locator) { uintptr_t const p = reinterpret_cast(locator.data()); - if (p & (alignof(int32_t) - 1)) // unaligned + if ((p & (alignof(int32_t) - 1)) != 0u) + { // unaligned memcpy(&locBuf[0], locator.data(), locator.size()); + } else + { locPtr = reinterpret_cast(locator.data()); + } } STBase const* field = nullptr; @@ -160,14 +165,14 @@ locateField(STObject const& obj, Slice const& locator) if (STI_ARRAY == field->getSType()) { - auto const* arr = static_cast(field); + auto const* arr = dynamic_cast(field); if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) { - auto const* o = static_cast(field); + auto const* o = dynamic_cast(field); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) @@ -178,7 +183,7 @@ locateField(STObject const& obj, Slice const& locator) } else if (STI_VECTOR256 == field->getSType()) { - auto const* v = static_cast(field); + auto const* v = dynamic_cast(field); if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); return FieldValue(&(v->operator[](sfieldCode))); @@ -201,9 +206,9 @@ getArrayLen(FieldValue const& variantField) if (STBase const* const* field = std::get_if(&variantField)) { if ((*field)->getSType() == STI_VECTOR256) - return static_cast(*field)->size(); + return dynamic_cast(*field)->size(); if ((*field)->getSType() == STI_ARRAY) - return static_cast(*field)->size(); + return dynamic_cast(*field)->size(); } // uint256 is not an array so that variant should still return NO_ARRAY @@ -222,8 +227,10 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) if (cacheIdx == 0) { for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + { if (!cache_[cacheIdx]) break; + } } else { diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index fbf85d8a12..ac002d723f 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 656e51f75e..6003aefd84 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -21,19 +21,19 @@ setData( uint8_t const* src, int32_t srcSize) { - if (!srcSize) + if (srcSize == 0) return 0; // LCOV_EXCL_LINE - if (dst < 0 || dstSize < 0 || !src || srcSize < 0) + if (dst < 0 || dstSize < 0 || (src == nullptr) || srcSize < 0) return HfErrorToInt(HostFunctionError::INVALID_PARAMS); if (srcSize > maxWasmDataLength) return HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE); - auto const memory = runtime ? runtime->getMem() : wmem(); + auto const memory = (runtime != nullptr) ? runtime->getMem() : wmem(); // LCOV_EXCL_START - if (!memory.s) + if (memory.s == 0u) return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); // LCOV_EXCL_STOP if ((int64_t)dst + dstSize > memory.s) @@ -78,9 +78,13 @@ getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) T x; uintptr_t p = reinterpret_cast(r->data()); if (p & (alignof(T) - 1)) // unaligned + { memcpy(&x, r->data(), sizeof(T)); + } else + { x = *reinterpret_cast(r->data()); + } x = adjustWasmEndianess(x); return x; @@ -335,7 +339,7 @@ checkGas(void* env) HostFunctions* hf = reinterpret_cast(udata->first); auto const* runtime = reinterpret_cast(hf->getRT()); - if (!runtime) + if (runtime == nullptr) { wasm_trap_t* trap = reinterpret_cast( WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE @@ -1405,7 +1409,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, HostFunctionError::INVALID_PARAMS); } - return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex), index); + return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex != 0), index); } wasm_trap_t* diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 6d264c5e50..8147f84588 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -24,22 +24,24 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) { wasm_byte_vec_t error_message WASM_EMPTY_VEC; - if (trap) + if (trap != nullptr) wasm_trap_message(trap, &error_message); - if (error_message.size) + if (error_message.size != 0u) { j << "WASMI Error: " << msg << ", " << std::string_view(error_message.data, error_message.size - 1); } else + { j << "WASMI Error: " << msg; + } - if (error_message.size) + if (error_message.size != 0u) wasm_byte_vec_delete(&error_message); } - if (trap) + if (trap != nullptr) wasm_trap_delete(trap); #ifdef DEBUG_OUTPUT @@ -62,7 +64,7 @@ InstanceWrapper::init( InstancePtr mi = InstancePtr( wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); - if (!mi || trap) + if (!mi || (trap != nullptr)) { print_wasm_error("can't create instance", trap, j); throw std::runtime_error("can't create instance"); @@ -124,7 +126,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (!instance_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (!exportTypes.vec_.size) + if (exportTypes.vec_.size == 0u) throw std::runtime_error("no export"); // LCOV_EXCL_LINE if (exportTypes.vec_.size != exports_.vec_.size) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE @@ -150,7 +152,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp } } - if (!f || !ft) + if ((f == nullptr) || (ft == nullptr)) throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); return {f, ft}; @@ -178,7 +180,7 @@ InstanceWrapper::getMem() const } } - if (!mem) + if (mem == nullptr) return {}; // LCOV_EXCL_LINE return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; @@ -187,7 +189,7 @@ InstanceWrapper::getMem() const std::int64_t InstanceWrapper::getGas() const { - if (!store_) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE std::uint64_t gas = 0; wasm_store_get_fuel(store_, &gas); @@ -197,13 +199,13 @@ InstanceWrapper::getGas() const std::int64_t InstanceWrapper::setGas(std::int64_t gas) const { - if (!store_) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE if (gas < 0) gas = std::numeric_limits::max(); wasmi_error_t* err = wasm_store_set_fuel(store_, static_cast(gas)); - if (err) + if (err != nullptr) { // LCOV_EXCL_START print_wasm_error("Can't set instance gas", nullptr, j_); @@ -282,7 +284,7 @@ static WasmValtypeVec makeImpParams(WasmImportFunc const& imp) { auto const paramSize = imp.params.size(); - if (!paramSize) + if (paramSize == 0u) return {}; WasmValtypeVec v(paramSize); @@ -331,12 +333,12 @@ makeImpReturn(WasmImportFunc const& imp) } WasmExternVec -ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) +ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const { WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); - if (!importTypes.vec_.size) + if (importTypes.vec_.size == 0u) return {}; if (imports.empty()) throw std::runtime_error("Missing imports"); @@ -355,8 +357,10 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) + { throw std::runtime_error( "Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE + } // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) @@ -384,7 +388,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) reinterpret_cast(imp.wrap), (void*)&obj, nullptr); - if (!func) + if (func == nullptr) { // LCOV_EXCL_START throw std::runtime_error("can't create import function " + imp.name); @@ -471,7 +475,7 @@ ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) // } std::int64_t -ModuleWrapper::getGas() +ModuleWrapper::getGas() const { return instanceWrap_ ? instanceWrap_.getGas() : -1; } @@ -490,9 +494,11 @@ std::unique_ptr WasmiEngine::init() { wasm_config_t* config = wasm_config_new(); - if (!config) + if (config == nullptr) + { return std::unique_ptr{ nullptr, &wasm_engine_delete}; // LCOV_EXCL_LINE + } wasmi_config_consume_fuel_set(config, true); wasmi_config_ignore_custom_sections_set(config, true); wasmi_config_wasm_mutable_globals_set(config, false); @@ -531,7 +537,7 @@ WasmiEngine::addModule( if (gas < 0) gas = std::numeric_limits::max(); wasmi_error_t* err = wasm_store_set_fuel(store_.get(), static_cast(gas)); - if (err) + if (err != nullptr) { // LCOV_EXCL_START print_wasm_error("Error setting gas", nullptr, j_); @@ -792,14 +798,20 @@ WasmiEngine::runHlp( auto const res = call<1>(f, p); if (res.f) + { throw std::runtime_error("<" + std::string(funcName) + "> failure"); - else if (!res.r.vec_.size) + } + if (res.r.vec_.size == 0u) + { throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE - else if (res.r.vec_.data[0].kind != WASM_I32) + } + if (res.r.vec_.data[0].kind != WASM_I32) + { throw std::runtime_error( "<" + std::string(funcName) + "> return type mismatch, ret: " + std::to_string(static_cast(res.r.vec_.data[0].kind))); + } if (gas == -1) gas = std::numeric_limits::max(); diff --git a/src/test/app/AMMCalc_test.cpp b/src/test/app/AMMCalc_test.cpp index c1068b08ba..c3091a166d 100644 --- a/src/test/app/AMMCalc_test.cpp +++ b/src/test/app/AMMCalc_test.cpp @@ -37,10 +37,10 @@ class AMMCalc_test : public beast::unit_test::suite str = boost::regex_replace(str, boost::regex("^(A|O)[(]"), ""); boost::smatch match; // XXX(val))? - boost::regex rx("^([^(]+)[(]([^)]+)[)]([)])?$"); + boost::regex const rx("^([^(]+)[(]([^)]+)[)]([)])?$"); if (boost::regex_search(str, match, rx)) { - if (delimited) + if (delimited != nullptr) *delimited = (match[3] != ""); if (match[1] == "XRP") { @@ -65,14 +65,14 @@ class AMMCalc_test : public beast::unit_test::suite str = boost::regex_replace(str, boost::regex("^T[(]"), ""); // XXX(rate))? boost::smatch match; - boost::regex rx("^([^(]+)[(]([^)]+)[)]([)])?$"); + boost::regex const rx("^([^(]+)[(]([^)]+)[)]([)])?$"); if (boost::regex_search(str, match, rx)) { std::string const currency = match[1]; // input is rate * 100, no fraction - std::uint32_t rate = 10'000'000 * std::stoi(match[2].str()); + std::uint32_t const rate = 10'000'000 * std::stoi(match[2].str()); // true if delimited - ) - return {{currency, rate, match[3] != "" ? true : false}}; + return {{currency, rate, match[3] != ""}}; } return std::nullopt; } @@ -94,7 +94,7 @@ class AMMCalc_test : public beast::unit_test::suite if (p == end_) return std::nullopt; std::string const s = *p; - bool const amm = s[0] == 'O' ? false : true; + bool const amm = s[0] != 'O'; auto const a1 = getAmt(p++); if (!a1 || p == end_) return std::nullopt; @@ -161,7 +161,7 @@ class AMMCalc_test : public beast::unit_test::suite return {{pairs, *swap, *rate, fee}}; } - std::string + static std::string toString(STAmount const& a) { std::stringstream str; @@ -169,7 +169,7 @@ class AMMCalc_test : public beast::unit_test::suite return str.str(); } - STAmount + static STAmount mulratio(STAmount const& amt, std::uint32_t a, std::uint32_t b, bool round) { if (a == b) @@ -179,7 +179,7 @@ class AMMCalc_test : public beast::unit_test::suite return toSTAmount(mulRatio(amt.iou(), a, b, round), amt.issue()); } - void + static void swapOut(swapargs const& args) { auto const vp = std::get(args); @@ -242,7 +242,7 @@ class AMMCalc_test : public beast::unit_test::suite std::cout << "in: " << toString(resultIn) << " out: " << toString(resultOut) << std::endl; } - void + static void swapIn(swapargs const& args) { auto const vp = std::get(args); @@ -310,7 +310,7 @@ class AMMCalc_test : public beast::unit_test::suite { using namespace jtx; auto const a = arg(); - boost::regex re(","); + boost::regex const re(","); token_iter p(a.begin(), a.end(), re, -1); // Token is denoted as CUR(xxx), where CUR is the currency code // and xxx is the amount, for instance: XRP(100) or USD(11.5) @@ -391,7 +391,7 @@ class AMMCalc_test : public beast::unit_test::suite // 10 is AMM trading fee else if (*p == "changespq") { - Env env(*this); + Env const env(*this); if (auto const pool = getAmounts(++p)) { if (auto const offer = getAmounts(p)) diff --git a/src/test/app/AMMClawback_test.cpp b/src/test/app/AMMClawback_test.cpp index 9033fe2bdd..245ee38ac2 100644 --- a/src/test/app/AMMClawback_test.cpp +++ b/src/test/app/AMMClawback_test.cpp @@ -18,8 +18,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test if holder does not exist. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(100000), gw, alice); env.close(); @@ -32,7 +32,7 @@ class AMMClawback_test : public beast::unit_test::suite env.trust(USD(10000), alice); env(pay(gw, alice, USD(100))); - AMM amm(env, alice, XRP(100), USD(100)); + AMM const amm(env, alice, XRP(100), USD(100)); env.close(); env(amm::ammClawback(gw, Account("unknown"), USD, XRP, std::nullopt), @@ -44,7 +44,7 @@ class AMMClawback_test : public beast::unit_test::suite { Env env(*this); Account gw{"gateway"}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(100000), gw, alice); env.close(); @@ -75,8 +75,8 @@ class AMMClawback_test : public beast::unit_test::suite // return temMALFORMED error. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -91,7 +91,7 @@ class AMMClawback_test : public beast::unit_test::suite env(pay(gw, alice, USD(100))); env.close(); - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // Issuer can not clawback from himself. env(amm::ammClawback(gw, gw, USD, XRP, std::nullopt), ter(temMALFORMED)); @@ -103,8 +103,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Asset field matches the Account field. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -119,7 +119,7 @@ class AMMClawback_test : public beast::unit_test::suite env(pay(gw, alice, USD(100))); env.close(); - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // The Asset's issuer field is alice, while the Account field is gw. // This should return temMALFORMED because they do not match. @@ -131,8 +131,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Amount field matches the Asset field. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -147,7 +147,7 @@ class AMMClawback_test : public beast::unit_test::suite env(pay(gw, alice, USD(100))); env.close(); - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // The Asset's issuer subfield is gw account and Amount's issuer // subfield is alice account. Return temBAD_AMOUNT because @@ -160,8 +160,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Amount is invalid, which is less than zero. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -176,7 +176,7 @@ class AMMClawback_test : public beast::unit_test::suite env(pay(gw, alice, USD(100))); env.close(); - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // Return temBAD_AMOUNT if the Amount value is less than 0. env(amm::ammClawback( @@ -193,8 +193,8 @@ class AMMClawback_test : public beast::unit_test::suite // transaction is prohibited. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -207,7 +207,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(gw, alice["USD"](-100))); // gw creates AMM pool of XRP/USD. - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // If asfAllowTrustLineClawback is not set, the issuer is not // allowed to send the AMMClawback transaction. @@ -217,8 +217,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test invalid flag. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -233,7 +233,7 @@ class AMMClawback_test : public beast::unit_test::suite env(pay(gw, alice, USD(100))); env.close(); - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // Return temINVALID_FLAG when providing invalid flag. env(amm::ammClawback(gw, alice, USD, XRP, std::nullopt), @@ -245,8 +245,8 @@ class AMMClawback_test : public beast::unit_test::suite // are not issued by the same issuer. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); env.close(); @@ -262,7 +262,7 @@ class AMMClawback_test : public beast::unit_test::suite env.close(); // gw creates AMM pool of XRP/USD. - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); // Return temINVALID_FLAG because the issuer set tfClawTwoAssets, // but the issuer only issues USD in the pool. The issuer is not @@ -276,8 +276,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test clawing back XRP is being prohibited. { Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, alice); env.close(); @@ -293,7 +293,7 @@ class AMMClawback_test : public beast::unit_test::suite env.close(); // Alice creates AMM pool of XRP/USD. - AMM amm(env, alice, XRP(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, XRP(1000), USD(2000), ter(tesSUCCESS)); env.close(); // Clawback XRP is prohibited. @@ -309,8 +309,8 @@ class AMMClawback_test : public beast::unit_test::suite if (!features[featureAMMClawback]) { Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, alice); env.close(); @@ -342,9 +342,9 @@ class AMMClawback_test : public beast::unit_test::suite // issuer. Claw back USD, and EUR goes back to the holder. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); env.close(); @@ -370,7 +370,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, EUR(3000))); // Alice creates AMM pool of EUR/USD. - AMM amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); env.close(); BEAST_EXPECT( @@ -422,8 +422,8 @@ class AMMClawback_test : public beast::unit_test::suite // to the holder. { Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, alice); env.close(); @@ -441,7 +441,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, USD(3000))); // Alice creates AMM pool of XRP/USD. - AMM amm(env, alice, XRP(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, XRP(1000), USD(2000), ter(tesSUCCESS)); env.close(); BEAST_EXPECT(amm.expectBalances(USD(2000), XRP(1000), IOUAmount{1414213562373095, -9})); @@ -501,9 +501,9 @@ class AMMClawback_test : public beast::unit_test::suite // balance in AMM pool. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); env.close(); @@ -527,7 +527,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, EUR(6000))); // Alice creates AMM pool of EUR/USD - AMM amm(env, alice, EUR(5000), USD(4000), ter(tesSUCCESS)); + AMM const amm(env, alice, EUR(5000), USD(4000), ter(tesSUCCESS)); env.close(); if (!features[fixAMMv1_3]) @@ -672,8 +672,8 @@ class AMMClawback_test : public beast::unit_test::suite // creates the AMM pool EUR/XRP. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; Account alice{"alice"}; Account bob{"bob"}; env.fund(XRP(1000000), gw, gw2, alice, bob); @@ -1082,9 +1082,9 @@ class AMMClawback_test : public beast::unit_test::suite // issuer. Claw back all the USD for different users. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; Account bob{"bob"}; Account carol{"carol"}; env.fund(XRP(1000000), gw, gw2, alice, bob, carol); @@ -1288,7 +1288,7 @@ class AMMClawback_test : public beast::unit_test::suite // different users. { Env env(*this, features); - Account gw{"gateway"}; + Account const gw{"gateway"}; Account alice{"alice"}; Account bob{"bob"}; env.fund(XRP(1000000), gw, alice, bob); @@ -1400,8 +1400,8 @@ class AMMClawback_test : public beast::unit_test::suite // Test AMMClawback for USD/EUR pool. The assets are issued by different // issuer. Claw back all the USD for different users. Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; Account bob{"bob"}; Account carol{"carol"}; env.fund(XRP(1000000), gw, alice, bob, carol); @@ -1534,9 +1534,9 @@ class AMMClawback_test : public beast::unit_test::suite // Test AMMClawback for USD/EUR pool. The assets are issued by different // issuer. Claw back all the USD for different users. Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; Account bob{"bob"}; env.fund(XRP(1000000), gw, gw2, alice, bob); env.close(); @@ -1629,7 +1629,7 @@ class AMMClawback_test : public beast::unit_test::suite // gw and gw2 issues token for each other. Test AMMClawback from // each other. Env env(*this, features); - Account gw{"gateway"}; + Account const gw{"gateway"}; Account gw2{"gateway2"}; Account alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); @@ -1815,8 +1815,8 @@ class AMMClawback_test : public beast::unit_test::suite using namespace jtx; Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, alice); env.close(); @@ -1829,7 +1829,7 @@ class AMMClawback_test : public beast::unit_test::suite env.trust(USD(100000), alice); env(pay(gw, alice, USD(5000))); - AMM amm(env, gw, USD(1000), XRP(2000), ter(tesSUCCESS)); + AMM const amm(env, gw, USD(1000), XRP(2000), ter(tesSUCCESS)); env.close(); // Alice did not deposit in the amm pool. So AMMClawback from Alice @@ -1846,9 +1846,9 @@ class AMMClawback_test : public beast::unit_test::suite // test individually frozen trustline. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); env.close(); @@ -1872,7 +1872,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, EUR(3000))); // Alice creates AMM pool of EUR/USD. - AMM amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); env.close(); BEAST_EXPECT( @@ -1910,9 +1910,9 @@ class AMMClawback_test : public beast::unit_test::suite // test individually frozen trustline of both USD and EUR currency. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); env.close(); @@ -1936,7 +1936,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, EUR(3000))); // Alice creates AMM pool of EUR/USD. - AMM amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); env.close(); BEAST_EXPECT( @@ -1960,9 +1960,9 @@ class AMMClawback_test : public beast::unit_test::suite // test gw global freeze. { Env env(*this, features); - Account gw{"gateway"}; - Account gw2{"gateway2"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; + Account const alice{"alice"}; env.fund(XRP(1000000), gw, gw2, alice); env.close(); @@ -1986,7 +1986,7 @@ class AMMClawback_test : public beast::unit_test::suite env.require(balance(alice, EUR(3000))); // Alice creates AMM pool of EUR/USD. - AMM amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); + AMM const amm(env, alice, EUR(1000), USD(2000), ter(tesSUCCESS)); env.close(); BEAST_EXPECT( @@ -2010,8 +2010,8 @@ class AMMClawback_test : public beast::unit_test::suite // global freeze. { Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; Account bob{"bob"}; Account carol{"carol"}; env.fund(XRP(1000000), gw, alice, bob, carol); @@ -2149,7 +2149,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test AMMClawback for USD/XRP pool. Claw back USD, and XRP goes back // to the holder. Env env(*this, features, std::make_unique(&logs)); - Account gw{"gateway"}; + Account const gw{"gateway"}; Account alice{"alice"}; env.fund(XRP(1000000000), gw, alice); env.close(); @@ -2357,7 +2357,7 @@ class AMMClawback_test : public beast::unit_test::suite Account gw{"gateway"}, alice{"alice"}, bob{"bob"}; auto const USD = setupAccounts(env, gw, alice, bob); - Account gw2{"gateway2"}; + Account const gw2{"gateway2"}; env.fund(XRP(100000), gw2); env.close(); auto const EUR = gw2["EUR"]; diff --git a/src/test/app/AMMExtended_test.cpp b/src/test/app/AMMExtended_test.cpp index 93ad92af3d..cc63f3d124 100644 --- a/src/test/app/AMMExtended_test.cpp +++ b/src/test/app/AMMExtended_test.cpp @@ -5,11 +5,10 @@ #include #include -#include - #include #include #include +#include #include #include #include @@ -62,9 +61,9 @@ private: env(offer(carol, XRP(50), USD(50))); // Good quality path - AMM ammCarol(env, carol, BTC(1'000), USD(100'100)); + AMM const ammCarol(env, carol, BTC(1'000), USD(100'100)); - PathSet paths(Path(XRP, USD), Path(USD)); + PathSet const paths(Path(XRP, USD), Path(USD)); env(pay(alice, bob, USD(100)), json(paths.json()), @@ -115,7 +114,7 @@ private: env(pay(gw2, bob, USD2(50))); env.close(); - AMM ammDan(env, dan, XRP(10'000), USD1(10'000)); + AMM const ammDan(env, dan, XRP(10'000), USD1(10'000)); env(pay(alice, carol, USD2(50)), path(~USD1, bob), @@ -146,7 +145,7 @@ private: env(pay(gw2, bob, USD2(50))); env.close(); - AMM ammDan(env, dan, XRP(10'000), USD1(10'050)); + AMM const ammDan(env, dan, XRP(10'000), USD1(10'050)); env(pay(alice, carol, USD2(50)), path(~USD1, bob), @@ -270,7 +269,7 @@ private: fund(env, gw, {bob, alice}, XRP(300'000), {USD(100)}, Fund::All); - AMM ammAlice(env, alice, XRP(150'000), USD(50)); + AMM const ammAlice(env, alice, XRP(150'000), USD(50)); // Existing offer pays better than this wants. // Partially consume existing offer. @@ -303,7 +302,7 @@ private: env(pay(gw, alice, alice["USD"](500))); - AMM ammAlice(env, alice, XRP(150'000), USD(51)); + AMM const ammAlice(env, alice, XRP(150'000), USD(51)); env(offer(bob, USD(1), XRP(3'000))); BEAST_EXPECT(ammAlice.expectBalances(XRP(153'000), USD(50), ammAlice.tokens())); @@ -335,7 +334,7 @@ private: env.require(owners(alice, 1), owners(bob, 1)); env(pay(gw, alice, alice["USD"](100))); - AMM ammBob(env, bob, USD(200), XRP(1'500)); + AMM const ammBob(env, bob, USD(200), XRP(1'500)); env(pay(alice, alice, XRP(500)), sendmax(USD(100))); @@ -460,7 +459,7 @@ private: env(pay(gw2, dan, dan["EUR"](400))); env.close(); - AMM ammCarol(env, carol, USD1(5'000), XRP(50'000)); + AMM const ammCarol(env, carol, USD1(5'000), XRP(50'000)); env(offer(dan, XRP(500), EUR1(50))); env.close(); @@ -514,7 +513,7 @@ private: env(pay(gw1, bob, bob["USD"](1'200))); - AMM ammBob(env, bob, XRP(1'000), USD1(1'200)); + AMM const ammBob(env, bob, XRP(1'000), USD1(1'200)); // Alice has 350 fees - a reserve of 50 = 250 reserve = 100 available. // Ask for more than available to prove reserve works. env(offer(alice, USD1(200), XRP(200))); @@ -549,7 +548,7 @@ private: env(pay(gw, bob, USD(1))); env(pay(gw, alice, USD(200))); - AMM ammAlice(env, alice, USD(150), XRP(150'100)); + AMM const ammAlice(env, alice, USD(150), XRP(150'100)); env(offer(bob, XRP(100), USD(0.1))); BEAST_EXPECT(ammAlice.expectBalances(USD(150.1), XRP(150'000), ammAlice.tokens())); @@ -602,7 +601,7 @@ private: env(pay(gw, bob, bob["USD"](2'200))); - AMM ammBob(env, bob, XRP(1'000), USD(2'200)); + AMM const ammBob(env, bob, XRP(1'000), USD(2'200)); // Alice has 350 fees - a reserve of 50 = 250 reserve = 100 available. // Ask for more than available to prove reserve works. // Taker pays 100 USD for 100 XRP. @@ -630,7 +629,7 @@ private: auto const starting_xrp = XRP(100.1) + reserve(env, 1) + env.current()->fees().base * 2; fund(env, gw, {alice, bob}, starting_xrp, {XTS(100), XXX(100)}, Fund::All); - AMM ammAlice(env, alice, XTS(100), XXX(100)); + AMM const ammAlice(env, alice, XTS(100), XXX(100)); Json::Value payment; payment[jss::secret] = toBase58(generateSeed("bob")); @@ -678,8 +677,8 @@ private: // o carol has EUR but wants USD. // Note that carol's offer must come last. If carol's offer is // placed before AMM is created, then autobridging will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); - AMM ammBob(env, bob, EUR(10'000), XRP(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammBob(env, bob, EUR(10'000), XRP(10'100)); // Carol makes an offer that consumes AMM liquidity and // fully consumes Carol's offer. @@ -705,7 +704,7 @@ private: // Note that carol's offer must come last. If carol's offer is // placed before AMM and bob's offer are created, then autobridging // will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); env(offer(bob, EUR(100), XRP(100))); env.close(); @@ -735,7 +734,7 @@ private: // autobridging will not occur. env(offer(alice, XRP(100), USD(100))); env.close(); - AMM ammBob(env, bob, EUR(10'000), XRP(10'100)); + AMM const ammBob(env, bob, EUR(10'000), XRP(10'100)); // Carol makes an offer that consumes AMM liquidity and // fully consumes Carol's offer. @@ -765,7 +764,7 @@ private: { Env env{*this, features}; fund(env, gw, {alice, bob}, {USD(20'000)}, Fund::All); - AMM ammBob(env, bob, XRP(20'000), USD(200)); + AMM const ammBob(env, bob, XRP(20'000), USD(200)); // alice submits a tfSell | tfFillOrKill offer that does not cross. env(offer(alice, USD(2.1), XRP(210), tfSell | tfFillOrKill), ter(killedCode)); @@ -775,7 +774,7 @@ private: { Env env{*this, features}; fund(env, gw, {alice, bob}, {USD(1'000)}, Fund::All); - AMM ammBob(env, bob, XRP(20'000), USD(200)); + AMM const ammBob(env, bob, XRP(20'000), USD(200)); // alice submits a tfSell | tfFillOrKill offer that crosses. // Even though tfSell is present it doesn't matter this time. env(offer(alice, USD(2), XRP(220), tfSell | tfFillOrKill)); @@ -791,7 +790,7 @@ private: // returns more than was asked for (because of the tfSell flag). Env env{*this, features}; fund(env, gw, {alice, bob}, {USD(1'000)}, Fund::All); - AMM ammBob(env, bob, XRP(20'000), USD(200)); + AMM const ammBob(env, bob, XRP(20'000), USD(200)); env(offer(alice, USD(10), XRP(1'500), tfSell | tfFillOrKill)); env.close(); @@ -810,7 +809,7 @@ private: // which matches alice's offer quality is ~ 10XRP/0.01996USD. Env env{*this, features}; fund(env, gw, {alice, bob}, {USD(10'000)}, Fund::All); - AMM ammBob(env, bob, XRP(5000), USD(10)); + AMM const ammBob(env, bob, XRP(5000), USD(10)); env(offer(alice, USD(1), XRP(501), tfSell | tfFillOrKill), ter(tecKILLED)); env.close(); @@ -877,7 +876,7 @@ private: // o carol has EUR but wants USD. // Note that Carol's offer must come last. If Carol's offer is // placed before AMM is created, then autobridging will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); env(offer(bob, EUR(100), XRP(100))); env.close(); @@ -908,7 +907,7 @@ private: // o carol has EUR but wants USD. // Note that Carol's offer must come last. If Carol's offer is // placed before AMM is created, then autobridging will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'050)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'050)); env(offer(bob, EUR(100), XRP(100))); env.close(); @@ -954,7 +953,7 @@ private: // o carol has EUR but wants USD. // Note that Carol's offer must come last. If Carol's offer is // placed before AMM is created, then autobridging will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); env(offer(bob, EUR(100), XRP(100))); env.close(); @@ -996,7 +995,7 @@ private: // o carol has EUR but wants USD. // Note that Carol's offer must come last. If Carol's offer is // placed before AMM is created, then autobridging will not occur. - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); env(offer(bob, EUR(100), XRP(100))); env.close(); @@ -1030,7 +1029,7 @@ private: env.fund(XRP(30'000) + f, alice, bob); env.close(); - AMM ammBob(env, bob, XRP(10'000), USD_bob(10'100)); + AMM const ammBob(env, bob, XRP(10'000), USD_bob(10'100)); env(offer(alice, USD_bob(100), XRP(100))); env.close(); @@ -1087,7 +1086,7 @@ private: BEAST_EXPECT(expectHolding(env, dan, A_BUX(none))); BEAST_EXPECT(expectHolding(env, dan, D_BUX(none))); - AMM ammBob(env, bob, A_BUX(30), D_BUX(30)); + AMM const ammBob(env, bob, A_BUX(30), D_BUX(30)); env(trust(ann, D_BUX(100))); env.close(); @@ -1144,7 +1143,7 @@ private: env(pay(bob, carol, B_BUX(400))); env(pay(ann, carol, A_BUX(400))); - AMM ammCarol(env, carol, A_BUX(300), B_BUX(330)); + AMM const ammCarol(env, carol, A_BUX(300), B_BUX(330)); // cam puts an offer on the books that her upcoming offer could cross. // But this offer should be deleted, not crossed, by her upcoming @@ -1216,7 +1215,7 @@ private: env(pay(gw, alice, USD(1'000))); env.close(); // Alice is able to create AMM since the GW has authorized her - AMM ammAlice(env, alice, USD(1'000), XRP(1'050)); + AMM const ammAlice(env, alice, USD(1'000), XRP(1'050)); // Set up authorized trust line for AMM. env(trust(gw, STAmount{Issue{USD.currency, ammAlice.ammAccount()}, 10}), @@ -1251,7 +1250,7 @@ private: // Alice doesn't have the funds { - AMM ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecUNFUNDED_AMM)); + AMM const ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecUNFUNDED_AMM)); } env(fset(gw, asfRequireAuth)); @@ -1268,7 +1267,7 @@ private: // Alice should not be able to create AMM without authorization. { - AMM ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecNO_LINE)); + AMM const ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecNO_LINE)); } // Set up a trust line for Alice, but don't authorize it. Alice @@ -1277,7 +1276,7 @@ private: env.close(); { - AMM ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecNO_AUTH)); + AMM const ammAlice(env, alice, USD(1'000), XRP(1'000), ter(tecNO_AUTH)); } // Finally, set up an authorized trust line for Alice. Now Alice's @@ -1287,7 +1286,7 @@ private: env(pay(gw, alice, USD(1'000))); env.close(); - AMM ammAlice(env, alice, USD(1'000), XRP(1'050)); + AMM const ammAlice(env, alice, USD(1'000), XRP(1'050)); // Set up authorized trust line for AMM. env(trust(gw, STAmount{Issue{USD.currency, ammAlice.ammAccount()}, 10}), @@ -1350,7 +1349,7 @@ private: env.fund(XRP(100'000'250), alice); fund(env, gw, {carol, bob}, {USD(100)}, Fund::All); fund(env, gw, {alice}, {USD(100)}, Fund::IOUOnly); - AMM ammCarol(env, carol, XRP(100), USD(100)); + AMM const ammCarol(env, carol, XRP(100), USD(100)); STPathSet st; STAmount sa; @@ -1384,7 +1383,7 @@ private: env.trust(AUD(2'000), bob, carol); env(pay(gw, carol, AUD(51))); env.close(); - AMM ammCarol(env, carol, XRP(40), AUD(51)); + AMM const ammCarol(env, carol, XRP(40), AUD(51)); env(pay(alice, bob, AUD(10)), sendmax(XRP(100)), paths(XRP)); env.close(); // AMM offer is 51.282052XRP/11AUD, 11AUD/1.1 = 10AUD to bob @@ -1405,7 +1404,7 @@ private: // XRP -> IOU receive max Env env = pathTestEnv(); fund(env, gw, {alice, bob, charlie}, {USD(11)}, Fund::All); - AMM ammCharlie(env, charlie, XRP(10), USD(11)); + AMM const ammCharlie(env, charlie, XRP(10), USD(11)); auto [st, sa, da] = find_paths(env, alice, bob, USD(-1), XRP(1).value()); BEAST_EXPECT(sa == XRP(1)); BEAST_EXPECT(equal(da, USD(1))); @@ -1421,7 +1420,7 @@ private: // IOU -> XRP receive max Env env = pathTestEnv(); fund(env, gw, {alice, bob, charlie}, {USD(11)}, Fund::All); - AMM ammCharlie(env, charlie, XRP(11), USD(10)); + AMM const ammCharlie(env, charlie, XRP(11), USD(10)); env.close(); auto [st, sa, da] = find_paths(env, alice, bob, drops(-1), USD(1).value()); BEAST_EXPECT(sa == USD(1)); @@ -1442,13 +1441,13 @@ private: testcase("Path Find: XRP -> XRP and XRP -> IOU"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account G3{"G3"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const G3{"G3"}; + Account const M1{"M1"}; env.fund(XRP(100'000), A1); env.fund(XRP(10'000), A2); @@ -1473,8 +1472,8 @@ private: env(pay(G3, M1, G3["ABC"](25'000))); env.close(); - AMM ammM1_G1_G2(env, M1, G1["XYZ"](1'000), G2["XYZ"](1'000)); - AMM ammM1_XRP_G3(env, M1, XRP(10'000), G3["ABC"](1'000)); + AMM const ammM1_G1_G2(env, M1, G1["XYZ"](1'000), G2["XYZ"](1'000)); + AMM const ammM1_XRP_G3(env, M1, XRP(10'000), G3["ABC"](1'000)); STPathSet st; STAmount sa, da; @@ -1527,10 +1526,10 @@ private: testcase("Path Find: non-XRP -> XRP"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account G3{"G3"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const G3{"G3"}; + Account const M1{"M1"}; env.fund(XRP(1'000), A1, A2, G3); env.fund(XRP(11'000), M1); @@ -1545,7 +1544,7 @@ private: env(pay(G3, M1, G3["ABC"](1'200))); env.close(); - AMM ammM1(env, M1, G3["ABC"](1'000), XRP(10'010)); + AMM const ammM1(env, M1, G3["ABC"](1'000), XRP(10'010)); STPathSet st; STAmount sa, da; @@ -1563,16 +1562,16 @@ private: testcase("Path Find: non-XRP -> non-XRP, same currency"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account G3{"G3"}; - Account G4{"G4"}; - Account M1{"M1"}; - Account M2{"M2"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const G3{"G3"}; + Account const G4{"G4"}; + Account const M1{"M1"}; + Account const M2{"M2"}; env.fund(XRP(1'000), A1, A2, A3, G1, G2, G3, G4); env.fund(XRP(10'000), A4); @@ -1597,9 +1596,9 @@ private: env(pay(G2, M2, G2["HKD"](5'000))); env.close(); - AMM ammM1(env, M1, G1["HKD"](1'010), G2["HKD"](1'000)); - AMM ammM2XRP_G2(env, M2, XRP(10'000), G2["HKD"](1'010)); - AMM ammM2G1_XRP(env, M2, G1["HKD"](1'010), XRP(10'000)); + AMM const ammM1(env, M1, G1["HKD"](1'010), G2["HKD"](1'000)); + AMM const ammM2XRP_G2(env, M2, XRP(10'000), G2["HKD"](1'010)); + AMM const ammM2G1_XRP(env, M2, G1["HKD"](1'010), XRP(10'000)); STPathSet st; STAmount sa, da; @@ -1693,12 +1692,12 @@ private: testcase("Path Find: non-XRP -> non-XRP, same currency"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const M1{"M1"}; env.fund(XRP(11'000), M1); env.fund(XRP(1'000), A1, A2, A3, G1, G2); @@ -1717,7 +1716,7 @@ private: env(pay(G2, M1, G2["HKD"](5'000))); env.close(); - AMM ammM1(env, M1, G1["HKD"](1'010), G2["HKD"](1'000)); + AMM const ammM1(env, M1, G1["HKD"](1'010), G2["HKD"](1'000)); // E) Gateway to user // Source -> OB -> AC -> Destination @@ -1760,7 +1759,7 @@ private: // tecPATH_DRY, but the entire path should not be marked as dry. // This is the second error case to test (when flowV1 is used). env(offer(bob, EUR(50), XRP(50))); - AMM ammBob(env, bob, ammXrpPool, USD(150)); + AMM const ammBob(env, bob, ammXrpPool, USD(150)); env(pay(alice, carol, USD(1'000'000)), path(~XRP, ~USD), @@ -1784,7 +1783,7 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000), {BTC(100), USD(150)}, Fund::All); - AMM ammBob(env, bob, BTC(100), USD(150)); + AMM const ammBob(env, bob, BTC(100), USD(150)); env(pay(alice, carol, USD(50)), path(~USD), sendmax(BTC(50))); @@ -1800,8 +1799,8 @@ private: fund(env, gw, {alice, carol, bob}, XRP(10'000), {BTC(100), USD(150)}, Fund::All); - AMM ammBobBTC_XRP(env, bob, BTC(100), XRP(150)); - AMM ammBobXRP_USD(env, bob, XRP(100), USD(150)); + AMM const ammBobBTC_XRP(env, bob, BTC(100), XRP(150)); + AMM const ammBobXRP_USD(env, bob, XRP(100), USD(150)); env(pay(alice, carol, USD(50)), path(~XRP, ~USD), sendmax(BTC(50))); @@ -1818,7 +1817,7 @@ private: fund(env, gw, {alice, carol, bob}, XRP(10'000), {USD(150)}, Fund::All); - AMM ammBob(env, bob, XRP(100), USD(150)); + AMM const ammBob(env, bob, XRP(100), USD(150)); env(pay(alice, carol, USD(50)), path(~USD), sendmax(XRP(50))); @@ -1834,7 +1833,7 @@ private: fund(env, gw, {alice, carol, bob}, XRP(10'000), {USD(100)}, Fund::All); - AMM ammBob(env, bob, USD(100), XRP(150)); + AMM const ammBob(env, bob, USD(100), XRP(150)); env(pay(alice, carol, XRP(50)), path(~XRP), sendmax(USD(50))); @@ -1864,7 +1863,7 @@ private: env(offer(bob, BTC(50), USD(50))); env(offer(bob, BTC(40), EUR(50))); env.close(); - AMM ammBob(env, bob, EUR(100), USD(150)); + AMM const ammBob(env, bob, EUR(100), USD(150)); // unfund offer env(pay(bob, gw, EUR(50))); @@ -1915,7 +1914,7 @@ private: env.close(); // This is multiplath, which generates limited # of offers - AMM ammBobBTC_USD(env, bob, BTC(50), USD(50)); + AMM const ammBobBTC_USD(env, bob, BTC(50), USD(50)); env(offer(bob, BTC(60), EUR(50))); env(offer(carol, BTC(1'000), EUR(1))); env(offer(bob, EUR(50), USD(50))); @@ -1927,9 +1926,9 @@ private: BEAST_EXPECT(isOffer(env, carol, BTC(1'000), EUR(1))); BEAST_EXPECT(isOffer(env, bob, EUR(50), USD(50))); - auto flowJournal = env.app().logs().journal("Flow"); + auto flowJournal = env.app().getJournal("Flow"); auto const flowResult = [&] { - STAmount deliver(USD(51)); + STAmount const deliver(USD(51)); STAmount smax(BTC(61)); PaymentSandbox sb(env.current().get(), tapNONE); STPathSet paths; @@ -1942,10 +1941,10 @@ private: }; { // BTC -> USD - STPath p1({IPE(USD.issue())}); + STPath const p1({IPE(USD.issue())}); paths.push_back(p1); // BTC -> EUR -> USD - STPath p2({IPE(EUR.issue()), IPE(USD.issue())}); + STPath const p2({IPE(EUR.issue()), IPE(USD.issue())}); paths.push_back(p2); } @@ -1966,7 +1965,7 @@ private: }(); BEAST_EXPECT(flowResult.removableOffers.size() == 1); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { if (flowResult.removableOffers.empty()) return false; Sandbox sb(&view, tapNONE); @@ -2008,7 +2007,7 @@ private: env.close(); // env(offer(bob, USD(1), drops(2)), txflags(tfPassive)); - AMM ammBob(env, bob, USD(8), XRPAmount{21}); + AMM const ammBob(env, bob, USD(8), XRPAmount{21}); env(offer(bob, drops(1), EUR(1'000)), txflags(tfPassive)); env(pay(alice, carol, EUR(1)), @@ -2035,7 +2034,7 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm(env, bob, GBP(1'000), USD(1'000)); + AMM const amm(env, bob, GBP(1'000), USD(1'000)); env(pay(alice, carol, USD(100)), path(~USD), @@ -2076,7 +2075,7 @@ private: env(offer(ed, GBP(1'000), EUR(1'000)), txflags(tfPassive)); env.close(); - AMM amm(env, bob, EUR(1'000), USD(1'000)); + AMM const amm(env, bob, EUR(1'000), USD(1'000)); env(pay(alice, carol, USD(100)), path(~EUR, ~USD), @@ -2110,8 +2109,8 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm1(env, bob, GBP(1'000), EUR(1'000)); - AMM amm2(env, ed, EUR(1'000), USD(1'000)); + AMM const amm1(env, bob, GBP(1'000), EUR(1'000)); + AMM const amm2(env, ed, EUR(1'000), USD(1'000)); env(pay(alice, carol, USD(100)), path(~EUR, ~USD), @@ -2160,7 +2159,7 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm(env, bob, USD(1'000), EUR(1'100)); + AMM const amm(env, bob, USD(1'000), EUR(1'100)); env(offer(alice, EUR(100), USD(100))); env.close(); @@ -2179,7 +2178,7 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm(env, bob, GBP(1'000), USD(1'000)); + AMM const amm(env, bob, GBP(1'000), USD(1'000)); // requested quality limit is 100USD/178.58GBP = 0.55997 // trade quality is 100USD/178.5714 = 0.55999 @@ -2210,7 +2209,7 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm(env, bob, GBP(1'000), USD(1'200)); + AMM const amm(env, bob, GBP(1'000), USD(1'200)); // requested quality limit is 90USD/120GBP = 0.75 // trade quality is 22.5USD/30GBP = 0.75 @@ -2260,7 +2259,7 @@ private: env(offer(ed, GBP(1'000), EUR(1'000)), txflags(tfPassive)); env.close(); - AMM amm(env, bob, EUR(1'000), USD(1'400)); + AMM const amm(env, bob, EUR(1'000), USD(1'400)); // requested quality limit is 95USD/140GBP = 0.6785 // trade quality is 59.7321USD/88.0262GBP = 0.6785 @@ -2341,7 +2340,7 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm(env, bob, GBP(1'000), EUR(1'000)); + AMM const amm(env, bob, GBP(1'000), EUR(1'000)); env(offer(ed, EUR(1'000), USD(1'400)), txflags(tfPassive)); env.close(); @@ -2413,8 +2412,8 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm1(env, bob, GBP(1'000), EUR(1'000)); - AMM amm2(env, ed, EUR(1'000), USD(1'400)); + AMM const amm1(env, bob, GBP(1'000), EUR(1'000)); + AMM const amm2(env, ed, EUR(1'000), USD(1'400)); // requested quality limit is 90USD/145GBP = 0.6206 // trade quality is 66.7432USD/107.5308GBP = 0.6206 @@ -2475,8 +2474,8 @@ private: env(rate(gw, 1.25)); env.close(); - AMM amm1(env, alice, GBP(1'000), EUR(1'000)); - AMM amm2(env, bob, EUR(1'000), USD(1'400)); + AMM const amm1(env, alice, GBP(1'000), EUR(1'000)); + AMM const amm2(env, bob, EUR(1'000), USD(1'400)); // requested quality limit is 90USD/120GBP = 0.75 // trade quality is 81.1111USD/108.1481GBP = 0.75 @@ -2535,7 +2534,7 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000), {USD(2'000)}); - AMM ammBob(env, bob, XRP(1'000), USD(1'050)); + AMM const ammBob(env, bob, XRP(1'000), USD(1'050)); env(offer(bob, XRP(100), USD(50))); env(pay(alice, carol, USD(100)), @@ -2562,8 +2561,8 @@ private: // fails with tecPATH_DRY. fund(env, gw, {alice, bob}, XRP(10'000), {USD(200), EUR(200)}, Fund::All); - AMM ammAliceXRP_USD(env, alice, XRP(100), USD(101)); - AMM ammAliceXRP_EUR(env, alice, XRP(100), EUR(101)); + AMM const ammAliceXRP_USD(env, alice, XRP(100), USD(101)); + AMM const ammAliceXRP_EUR(env, alice, XRP(100), EUR(101)); env.close(); TER const expectedTer = TER{temBAD_PATH_LOOP}; @@ -2580,8 +2579,8 @@ private: // with tecPATH_DRY. fund(env, gw, {alice, bob}, XRP(10'000), {USD(200), EUR(200)}, Fund::All); - AMM ammAliceXRP_USD(env, alice, XRP(100), USD(100)); - AMM ammAliceXRP_EUR(env, alice, XRP(100), EUR(100)); + AMM const ammAliceXRP_USD(env, alice, XRP(100), USD(100)); + AMM const ammAliceXRP_EUR(env, alice, XRP(100), EUR(100)); // EUR -> //XRP -> //USD ->XRP env(pay(alice, bob, XRP(1)), path(~XRP, ~USD, ~XRP), @@ -2598,9 +2597,9 @@ private: // with tecPATH_DRY. fund(env, gw, {alice, bob}, XRP(10'000), {USD(200), EUR(200), JPY(200)}, Fund::All); - AMM ammAliceXRP_USD(env, alice, XRP(100), USD(100)); - AMM ammAliceXRP_EUR(env, alice, XRP(100), EUR(100)); - AMM ammAliceXRP_JPY(env, alice, XRP(100), JPY(100)); + AMM const ammAliceXRP_USD(env, alice, XRP(100), USD(100)); + AMM const ammAliceXRP_EUR(env, alice, XRP(100), EUR(100)); + AMM const ammAliceXRP_JPY(env, alice, XRP(100), JPY(100)); env(pay(alice, bob, JPY(1)), path(~XRP, ~EUR, ~XRP, ~JPY), @@ -2629,7 +2628,7 @@ private: env(pay(gw, dan, USD(1))); n_offers(env, 2'000, bob, XRP(1), USD(1)); n_offers(env, 1, dan, XRP(1), USD(1)); - AMM ammEd(env, ed, XRP(9), USD(11)); + AMM const ammEd(env, ed, XRP(9), USD(11)); // Alice offers to buy 1000 XRP for 1000 USD. She takes Bob's first // offer, removes 999 more as unfunded, then hits the step limit. @@ -2688,7 +2687,7 @@ private: txflags(tfPartialPayment), ter(temBAD_AMOUNT)); env(pay(gw, carol, USD(50))); - AMM ammCarol(env, carol, XRP(10), USD(15)); + AMM const ammCarol(env, carol, XRP(10), USD(15)); env(pay(alice, bob, USD(10)), paths(XRP), deliver_min(USD(7)), @@ -2704,7 +2703,7 @@ private: fund(env, gw, {alice, bob}, XRP(10'000)); env.trust(USD(1'100), alice, bob); env(pay(gw, bob, USD(1'100))); - AMM ammBob(env, bob, XRP(1'000), USD(1'100)); + AMM const ammBob(env, bob, XRP(1'000), USD(1'100)); env(pay(alice, alice, USD(10'000)), paths(XRP), deliver_min(USD(100)), @@ -2718,7 +2717,7 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000)); env.trust(USD(1'200), bob, carol); env(pay(gw, bob, USD(1'200))); - AMM ammBob(env, bob, XRP(5'500), USD(1'200)); + AMM const ammBob(env, bob, XRP(5'500), USD(1'200)); env(pay(alice, carol, USD(10'000)), paths(XRP), deliver_min(USD(200)), @@ -2744,7 +2743,7 @@ private: env(pay(gw, dan, USD(1'100))); env(offer(bob, XRP(100), USD(100))); env(offer(bob, XRP(1'000), USD(100))); - AMM ammDan(env, dan, XRP(1'000), USD(1'100)); + AMM const ammDan(env, dan, XRP(1'000), USD(1'100)); if (!features[fixAMMv1_1]) { env(pay(alice, carol, USD(10'000)), @@ -2795,7 +2794,7 @@ private: env(pay(gw, alice, USD(500))); env.close(); - AMM ammAlice(env, alice, XRP(100), USD(140)); + AMM const ammAlice(env, alice, XRP(100), USD(140)); // becky pays herself USD (10) by consuming part of alice's offer. // Make sure the payment works if PaymentAuth is not involved. @@ -2830,7 +2829,7 @@ private: env(pay(gw, alice, USD(150))); env(pay(gw, carol, USD(150))); - AMM ammCarol(env, carol, USD(100), XRPAmount(101)); + AMM const ammCarol(env, carol, USD(100), XRPAmount(101)); // Make sure bob's trust line is all set up so he can receive USD. env(pay(alice, bob, USD(50))); @@ -2927,7 +2926,7 @@ private: env(pay(G1, alice, G1["USD"](205))); env.close(); - AMM ammAlice(env, alice, XRP(500), G1["USD"](105)); + AMM const ammAlice(env, alice, XRP(500), G1["USD"](105)); { auto lines = getAccountLines(env, bob); @@ -3041,11 +3040,11 @@ private: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; env.fund(XRP(12'000), G1); env.fund(XRP(1'000), A1); @@ -3064,7 +3063,7 @@ private: env(pay(G1, A4, G1["BTC"](100))); env.close(); - AMM ammG1(env, G1, XRP(10'000), G1["USD"](100)); + AMM const ammG1(env, G1, XRP(10'000), G1["USD"](100)); env(offer(A1, XRP(10'000), G1["USD"](100)), txflags(tfPassive)); env(offer(A2, G1["USD"](100), XRP(10'000)), txflags(tfPassive)); env.close(); @@ -3130,7 +3129,7 @@ private: env.require(nflags(G1, asfNoFreeze)); // test: assets can't be bought on the market - AMM ammA3(env, A3, G1["BTC"](1), XRP(1), ter(tecFROZEN)); + AMM const ammA3(env, A3, G1["BTC"](1), XRP(1), ter(tecFROZEN)); // test: assets can't be sold on the market // AMM is bidirectional @@ -3171,10 +3170,10 @@ private: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; + Account const G1{"G1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; env.fund(XRP(2'000), G1, A3, A4); env.fund(XRP(2'000), A2); @@ -3189,7 +3188,7 @@ private: env(pay(G1, A4, G1["USD"](2'001))); env.close(); - AMM ammA3(env, A3, XRP(1'000), G1["USD"](1'001)); + AMM const ammA3(env, A3, XRP(1'000), G1["USD"](1'001)); // removal after successful payment // test: make a payment with partially consuming offer @@ -3300,8 +3299,8 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000), {USD(2'000), EUR(1'000)}); - AMM bobXRP_USD(env, bob, XRP(1'000), USD(1'000)); - AMM bobUSD_EUR(env, bob, USD(1'000), EUR(1'000)); + AMM const bobXRP_USD(env, bob, XRP(1'000), USD(1'000)); + AMM const bobUSD_EUR(env, bob, USD(1'000), EUR(1'000)); // payment path: XRP -> XRP/USD -> USD/EUR -> EUR/USD env(pay(alice, carol, USD(100)), @@ -3328,10 +3327,10 @@ private: fund(env, bob, {alice, gw}, {BobUSD(100), BobEUR(100)}, Fund::IOUOnly); env.close(); - AMM ammBobXRP_USD(env, bob, XRP(100), BobUSD(100)); + AMM const ammBobXRP_USD(env, bob, XRP(100), BobUSD(100)); env(offer(gw, XRP(100), USD(100)), txflags(tfPassive)); - AMM ammBobUSD_EUR(env, bob, BobUSD(100), BobEUR(100)); + AMM const ammBobUSD_EUR(env, bob, BobUSD(100), BobEUR(100)); env(offer(gw, USD(100), EUR(100)), txflags(tfPassive)); Path const p = [&] { @@ -3341,7 +3340,7 @@ private: return result; }(); - PathSet paths(p); + PathSet const paths(p); env(pay(alice, alice, EUR(1)), json(paths.json()), @@ -3355,7 +3354,7 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000), {USD(100)}); - AMM ammBob(env, bob, XRP(100), USD(100)); + AMM const ammBob(env, bob, XRP(100), USD(100)); // payment path: XRP -> XRP/USD -> USD/XRP env(pay(alice, carol, XRP(100)), @@ -3369,7 +3368,7 @@ private: fund(env, gw, {alice, bob, carol}, XRP(10'000), {USD(100)}); - AMM ammBob(env, bob, XRP(100), USD(100)); + AMM const ammBob(env, bob, XRP(100), USD(100)); // payment path: XRP -> XRP/USD -> USD/XRP env(pay(alice, carol, XRP(100)), @@ -3399,7 +3398,7 @@ private: env(pay(gw, alice, USD(100))); env.close(); - AMM ammBob(env, bob, XRP(100), USD(100)); + AMM const ammBob(env, bob, XRP(100), USD(100)); // payment path: USD -> USD/XRP -> XRP/USD env(pay(alice, carol, USD(100)), @@ -3422,9 +3421,9 @@ private: env(pay(gw, bob, EUR(200))); env(pay(gw, bob, CNY(100))); - AMM ammBobXRP_USD(env, bob, XRP(100), USD(100)); - AMM ammBobUSD_EUR(env, bob, USD(100), EUR(100)); - AMM ammBobEUR_CNY(env, bob, EUR(100), CNY(100)); + AMM const ammBobXRP_USD(env, bob, XRP(100), USD(100)); + AMM const ammBobUSD_EUR(env, bob, USD(100), EUR(100)); + AMM const ammBobEUR_CNY(env, bob, EUR(100), CNY(100)); // payment path: XRP->XRP/USD->USD/EUR->USD/CNY env(pay(alice, carol, CNY(100)), diff --git a/src/test/app/AMM_test.cpp b/src/test/app/AMM_test.cpp index a0a38b9791..c19eb971a7 100644 --- a/src/test/app/AMM_test.cpp +++ b/src/test/app/AMM_test.cpp @@ -87,7 +87,7 @@ private: env(rate(gw, 1.25)); env.close(); // no transfer fee on create - AMM ammAlice(env, alice, USD(20'000), BTC(0.5)); + AMM const ammAlice(env, alice, USD(20'000), BTC(0.5)); BEAST_EXPECT(ammAlice.expectBalances(USD(20'000), BTC(0.5), IOUAmount{100, 0})); BEAST_EXPECT(expectHolding(env, alice, USD(0))); BEAST_EXPECT(expectHolding(env, alice, BTC(0))); @@ -104,7 +104,7 @@ private: env.close(); env(pay(gw, alice, USD(10'000))); env.close(); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000)); } // Cleared global freeze @@ -118,10 +118,10 @@ private: env.close(); env(fset(gw, asfGlobalFreeze)); env.close(); - AMM ammAliceFail(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); + AMM const ammAliceFail(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); env(fclear(gw, asfGlobalFreeze)); env.close(); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000)); } // Trading fee @@ -153,7 +153,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, XRP(10'000), XRP(10'000), ter(temBAD_AMM_TOKENS)); + AMM const ammAlice(env, alice, XRP(10'000), XRP(10'000), ter(temBAD_AMM_TOKENS)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -161,7 +161,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, USD(10'000), USD(10'000), ter(temBAD_AMM_TOKENS)); + AMM const ammAlice(env, alice, USD(10'000), USD(10'000), ter(temBAD_AMM_TOKENS)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -169,13 +169,13 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, XRP(0), USD(10'000), ter(temBAD_AMOUNT)); + AMM const ammAlice(env, alice, XRP(0), USD(10'000), ter(temBAD_AMOUNT)); BEAST_EXPECT(!ammAlice.ammExists()); - AMM ammAlice1(env, alice, XRP(10'000), USD(0), ter(temBAD_AMOUNT)); + AMM const ammAlice1(env, alice, XRP(10'000), USD(0), ter(temBAD_AMOUNT)); BEAST_EXPECT(!ammAlice1.ammExists()); - AMM ammAlice2(env, alice, XRP(10'000), USD(-10'000), ter(temBAD_AMOUNT)); + AMM const ammAlice2(env, alice, XRP(10'000), USD(-10'000), ter(temBAD_AMOUNT)); BEAST_EXPECT(!ammAlice2.ammExists()); - AMM ammAlice3(env, alice, XRP(-10'000), USD(10'000), ter(temBAD_AMOUNT)); + AMM const ammAlice3(env, alice, XRP(-10'000), USD(10'000), ter(temBAD_AMOUNT)); BEAST_EXPECT(!ammAlice3.ammExists()); } @@ -183,7 +183,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, XRP(10'000), BAD(10'000), ter(temBAD_CURRENCY)); + AMM const ammAlice(env, alice, XRP(10'000), BAD(10'000), ter(temBAD_CURRENCY)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -191,7 +191,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, XRP(10'000), USD(40'000), ter(tecUNFUNDED_AMM)); + AMM const ammAlice(env, alice, XRP(10'000), USD(40'000), ter(tecUNFUNDED_AMM)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -199,7 +199,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice(env, alice, XRP(40'000), USD(10'000), ter(tecUNFUNDED_AMM)); + AMM const ammAlice(env, alice, XRP(40'000), USD(10'000), ter(tecUNFUNDED_AMM)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -207,7 +207,7 @@ private: { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice( + AMM const ammAlice( env, alice, XRP(10'000), @@ -224,14 +224,14 @@ private: // AMM already exists testAMM([&](AMM& ammAlice, Env& env) { - AMM ammCarol(env, carol, XRP(10'000), USD(10'000), ter(tecDUPLICATE)); + AMM const ammCarol(env, carol, XRP(10'000), USD(10'000), ter(tecDUPLICATE)); }); // Invalid flags { Env env{*this}; fund(env, gw, {alice}, {USD(30'000)}, Fund::All); - AMM ammAlice( + AMM const ammAlice( env, alice, XRP(10'000), @@ -249,9 +249,9 @@ private: // Invalid Account { Env env{*this}; - Account bad("bad"); + Account const bad("bad"); env.memoize(bad); - AMM ammAlice( + AMM const ammAlice( env, bad, XRP(10'000), @@ -275,7 +275,7 @@ private: env.close(); env(trust(gw, alice["USD"](30'000))); env.close(); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecNO_AUTH)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecNO_AUTH)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -288,7 +288,7 @@ private: env.close(); env(trust(gw, alice["USD"](30'000))); env.close(); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -301,7 +301,7 @@ private: env.close(); env(trust(gw, alice["USD"](0), tfSetFreeze)); env.close(); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000), ter(tecFROZEN)); BEAST_EXPECT(!ammAlice.ammExists()); } @@ -317,7 +317,7 @@ private: env.close(); env(offer(alice, XRP(101), USD(100))); env(offer(alice, XRP(102), USD(100))); - AMM ammAlice(env, alice, XRP(1'000), USD(1'000), ter(tecUNFUNDED_AMM)); + AMM const ammAlice(env, alice, XRP(1'000), USD(1'000), ter(tecUNFUNDED_AMM)); } // Insufficient reserve, IOU/IOU @@ -334,14 +334,14 @@ private: env.close(); env(offer(alice, EUR(101), USD(100))); env(offer(alice, EUR(102), USD(100))); - AMM ammAlice(env, alice, EUR(1'000), USD(1'000), ter(tecINSUF_RESERVE_LINE)); + AMM const ammAlice(env, alice, EUR(1'000), USD(1'000), ter(tecINSUF_RESERVE_LINE)); } // Insufficient fee { Env env(*this); fund(env, gw, {alice}, XRP(2'000), {USD(2'000), EUR(2'000)}); - AMM ammAlice( + AMM const ammAlice( env, alice, EUR(1'000), @@ -360,13 +360,13 @@ private: // AMM with one LPToken from another AMM. testAMM([&](AMM& ammAlice, Env& env) { fund(env, gw, {alice}, {EUR(10'000)}, Fund::IOUOnly); - AMM ammAMMToken( + AMM const ammAMMToken( env, alice, EUR(10'000), STAmount{ammAlice.lptIssue(), 1'000'000}, ter(tecAMM_INVALID_TOKENS)); - AMM ammAMMToken1( + AMM const ammAMMToken1( env, alice, STAmount{ammAlice.lptIssue(), 1'000'000}, @@ -377,10 +377,10 @@ private: // AMM with two LPTokens from other AMMs. testAMM([&](AMM& ammAlice, Env& env) { fund(env, gw, {alice}, {EUR(10'000)}, Fund::IOUOnly); - AMM ammAlice1(env, alice, XRP(10'000), EUR(10'000)); + AMM const ammAlice1(env, alice, XRP(10'000), EUR(10'000)); auto const token1 = ammAlice.lptIssue(); auto const token2 = ammAlice1.lptIssue(); - AMM ammAMMTokens( + AMM const ammAMMTokens( env, alice, STAmount{token1, 1'000'000}, @@ -393,21 +393,21 @@ private: Env env(*this); env.fund(XRP(30'000), gw); env(fclear(gw, asfDefaultRipple)); - AMM ammGw(env, gw, XRP(10'000), USD(10'000), ter(terNO_RIPPLE)); + AMM const ammGw(env, gw, XRP(10'000), USD(10'000), ter(terNO_RIPPLE)); env.fund(XRP(30'000), alice); env.trust(USD(30'000), alice); env(pay(gw, alice, USD(30'000))); - AMM ammAlice(env, alice, XRP(10'000), USD(10'000), ter(terNO_RIPPLE)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'000), ter(terNO_RIPPLE)); Account const gw1("gw1"); env.fund(XRP(30'000), gw1); env(fclear(gw1, asfDefaultRipple)); env.trust(USD(30'000), gw1); env(pay(gw, gw1, USD(30'000))); auto const USD1 = gw1["USD"]; - AMM ammGwGw1(env, gw, USD(10'000), USD1(10'000), ter(terNO_RIPPLE)); + AMM const ammGwGw1(env, gw, USD(10'000), USD1(10'000), ter(terNO_RIPPLE)); env.trust(USD1(30'000), alice); env(pay(gw1, alice, USD1(30'000))); - AMM ammAlice1(env, alice, USD(10'000), USD1(10'000), ter(terNO_RIPPLE)); + AMM const ammAlice1(env, alice, USD(10'000), USD1(10'000), ter(terNO_RIPPLE)); } } @@ -429,106 +429,65 @@ private: std::optional, std::optional, std::optional, - std::optional>> - invalidOptions = { - // flags, tokens, asset1In, asset2in, EPrice, tfee - {tfLPToken, 1'000, std::nullopt, USD(100), std::nullopt, std::nullopt}, - {tfLPToken, 1'000, XRP(100), std::nullopt, std::nullopt, std::nullopt}, - {tfLPToken, - 1'000, - std::nullopt, - std::nullopt, - STAmount{USD, 1, -1}, - std::nullopt}, - {tfLPToken, - std::nullopt, - USD(100), - std::nullopt, - STAmount{USD, 1, -1}, - std::nullopt}, - {tfLPToken, 1'000, XRP(100), std::nullopt, STAmount{USD, 1, -1}, std::nullopt}, - {tfLPToken, 1'000, std::nullopt, std::nullopt, std::nullopt, 1'000}, - {tfSingleAsset, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, - {tfSingleAsset, - std::nullopt, - std::nullopt, - USD(100), - std::nullopt, - std::nullopt}, - {tfSingleAsset, - std::nullopt, - std::nullopt, - std::nullopt, - STAmount{USD, 1, -1}, - std::nullopt}, - {tfSingleAsset, std::nullopt, USD(100), std::nullopt, std::nullopt, 1'000}, - {tfTwoAsset, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, - {tfTwoAsset, - std::nullopt, - XRP(100), - USD(100), - STAmount{USD, 1, -1}, - std::nullopt}, - {tfTwoAsset, std::nullopt, XRP(100), std::nullopt, std::nullopt, std::nullopt}, - {tfTwoAsset, std::nullopt, XRP(100), USD(100), std::nullopt, 1'000}, - {tfTwoAsset, - std::nullopt, - std::nullopt, - USD(100), - STAmount{USD, 1, -1}, - std::nullopt}, - {tfOneAssetLPToken, - 1'000, - std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt}, - {tfOneAssetLPToken, - std::nullopt, - XRP(100), - USD(100), - std::nullopt, - std::nullopt}, - {tfOneAssetLPToken, - std::nullopt, - XRP(100), - std::nullopt, - STAmount{USD, 1, -1}, - std::nullopt}, - {tfOneAssetLPToken, 1'000, XRP(100), std::nullopt, std::nullopt, 1'000}, - {tfLimitLPToken, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, - {tfLimitLPToken, 1'000, USD(100), std::nullopt, std::nullopt, std::nullopt}, - {tfLimitLPToken, std::nullopt, USD(100), XRP(100), std::nullopt, std::nullopt}, - {tfLimitLPToken, - std::nullopt, - XRP(100), - std::nullopt, - STAmount{USD, 1, -1}, - 1'000}, - {tfTwoAssetIfEmpty, - std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - 1'000}, - {tfTwoAssetIfEmpty, - 1'000, - std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt}, - {tfTwoAssetIfEmpty, - std::nullopt, - XRP(100), - USD(100), - STAmount{USD, 1, -1}, - std::nullopt}, - {tfTwoAssetIfEmpty | tfLPToken, - std::nullopt, - XRP(100), - USD(100), - STAmount{USD, 1, -1}, - std::nullopt}}; + std::optional>> const invalidOptions = { + // flags, tokens, asset1In, asset2in, EPrice, tfee + {tfLPToken, 1'000, std::nullopt, USD(100), std::nullopt, std::nullopt}, + {tfLPToken, 1'000, XRP(100), std::nullopt, std::nullopt, std::nullopt}, + {tfLPToken, 1'000, std::nullopt, std::nullopt, STAmount{USD, 1, -1}, std::nullopt}, + {tfLPToken, + std::nullopt, + USD(100), + std::nullopt, + STAmount{USD, 1, -1}, + std::nullopt}, + {tfLPToken, 1'000, XRP(100), std::nullopt, STAmount{USD, 1, -1}, std::nullopt}, + {tfLPToken, 1'000, std::nullopt, std::nullopt, std::nullopt, 1'000}, + {tfSingleAsset, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, + {tfSingleAsset, std::nullopt, std::nullopt, USD(100), std::nullopt, std::nullopt}, + {tfSingleAsset, + std::nullopt, + std::nullopt, + std::nullopt, + STAmount{USD, 1, -1}, + std::nullopt}, + {tfSingleAsset, std::nullopt, USD(100), std::nullopt, std::nullopt, 1'000}, + {tfTwoAsset, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, + {tfTwoAsset, std::nullopt, XRP(100), USD(100), STAmount{USD, 1, -1}, std::nullopt}, + {tfTwoAsset, std::nullopt, XRP(100), std::nullopt, std::nullopt, std::nullopt}, + {tfTwoAsset, std::nullopt, XRP(100), USD(100), std::nullopt, 1'000}, + {tfTwoAsset, + std::nullopt, + std::nullopt, + USD(100), + STAmount{USD, 1, -1}, + std::nullopt}, + {tfOneAssetLPToken, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, + {tfOneAssetLPToken, std::nullopt, XRP(100), USD(100), std::nullopt, std::nullopt}, + {tfOneAssetLPToken, + std::nullopt, + XRP(100), + std::nullopt, + STAmount{USD, 1, -1}, + std::nullopt}, + {tfOneAssetLPToken, 1'000, XRP(100), std::nullopt, std::nullopt, 1'000}, + {tfLimitLPToken, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, + {tfLimitLPToken, 1'000, USD(100), std::nullopt, std::nullopt, std::nullopt}, + {tfLimitLPToken, std::nullopt, USD(100), XRP(100), std::nullopt, std::nullopt}, + {tfLimitLPToken, std::nullopt, XRP(100), std::nullopt, STAmount{USD, 1, -1}, 1'000}, + {tfTwoAssetIfEmpty, std::nullopt, std::nullopt, std::nullopt, std::nullopt, 1'000}, + {tfTwoAssetIfEmpty, 1'000, std::nullopt, std::nullopt, std::nullopt, std::nullopt}, + {tfTwoAssetIfEmpty, + std::nullopt, + XRP(100), + USD(100), + STAmount{USD, 1, -1}, + std::nullopt}, + {tfTwoAssetIfEmpty | tfLPToken, + std::nullopt, + XRP(100), + USD(100), + STAmount{USD, 1, -1}, + std::nullopt}}; for (auto const& it : invalidOptions) { ammAlice.deposit( @@ -1445,7 +1404,7 @@ private: testAMM( [&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .asset1Out = XRP(100), .err = ter(tecAMM_BALANCE), }; @@ -1455,7 +1414,7 @@ private: testAMM( [&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .asset1Out = USD(100), .err = ter(tecAMM_BALANCE), }; @@ -1478,7 +1437,7 @@ private: env(pay(gw, alice, USD(10'000))); env.close(); AMM ammAlice(env, alice, XRP(10'000), USD(10'000)); - WithdrawArg args{ + WithdrawArg const args{ .account = bob, .asset1Out = USD(100), .err = ter(tecNO_AUTH), @@ -1516,79 +1475,58 @@ private: std::optional, std::optional, std::optional, - NotTEC>> - invalidOptions = { - // tokens, asset1Out, asset2Out, EPrice, flags, ter - {std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - temMALFORMED}, - {std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - tfSingleAsset | tfTwoAsset, - temMALFORMED}, - {1'000, std::nullopt, std::nullopt, std::nullopt, tfWithdrawAll, temMALFORMED}, - {std::nullopt, - USD(0), - XRP(100), - std::nullopt, - tfWithdrawAll | tfLPToken, - temMALFORMED}, - {std::nullopt, - std::nullopt, - USD(100), - std::nullopt, - tfWithdrawAll, - temMALFORMED}, - {std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - tfWithdrawAll | tfOneAssetWithdrawAll, - temMALFORMED}, - {std::nullopt, - USD(100), - std::nullopt, - std::nullopt, - tfWithdrawAll, - temMALFORMED}, - {std::nullopt, - std::nullopt, - std::nullopt, - std::nullopt, - tfOneAssetWithdrawAll, - temMALFORMED}, - {1'000, std::nullopt, USD(100), std::nullopt, std::nullopt, temMALFORMED}, - {std::nullopt, - std::nullopt, - std::nullopt, - IOUAmount{250, 0}, - tfWithdrawAll, - temMALFORMED}, - {1'000, - std::nullopt, - std::nullopt, - IOUAmount{250, 0}, - std::nullopt, - temMALFORMED}, - {std::nullopt, - std::nullopt, - USD(100), - IOUAmount{250, 0}, - std::nullopt, - temMALFORMED}, - {std::nullopt, - XRP(100), - USD(100), - IOUAmount{250, 0}, - std::nullopt, - temMALFORMED}, - {1'000, XRP(100), USD(100), std::nullopt, std::nullopt, temMALFORMED}, - {std::nullopt, XRP(100), USD(100), std::nullopt, tfWithdrawAll, temMALFORMED}}; + NotTEC>> const invalidOptions = { + // tokens, asset1Out, asset2Out, EPrice, flags, ter + {std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + temMALFORMED}, + {std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + tfSingleAsset | tfTwoAsset, + temMALFORMED}, + {1'000, std::nullopt, std::nullopt, std::nullopt, tfWithdrawAll, temMALFORMED}, + {std::nullopt, + USD(0), + XRP(100), + std::nullopt, + tfWithdrawAll | tfLPToken, + temMALFORMED}, + {std::nullopt, std::nullopt, USD(100), std::nullopt, tfWithdrawAll, temMALFORMED}, + {std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + tfWithdrawAll | tfOneAssetWithdrawAll, + temMALFORMED}, + {std::nullopt, USD(100), std::nullopt, std::nullopt, tfWithdrawAll, temMALFORMED}, + {std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + tfOneAssetWithdrawAll, + temMALFORMED}, + {1'000, std::nullopt, USD(100), std::nullopt, std::nullopt, temMALFORMED}, + {std::nullopt, + std::nullopt, + std::nullopt, + IOUAmount{250, 0}, + tfWithdrawAll, + temMALFORMED}, + {1'000, std::nullopt, std::nullopt, IOUAmount{250, 0}, std::nullopt, temMALFORMED}, + {std::nullopt, + std::nullopt, + USD(100), + IOUAmount{250, 0}, + std::nullopt, + temMALFORMED}, + {std::nullopt, XRP(100), USD(100), IOUAmount{250, 0}, std::nullopt, temMALFORMED}, + {1'000, XRP(100), USD(100), std::nullopt, std::nullopt, temMALFORMED}, + {std::nullopt, XRP(100), USD(100), std::nullopt, tfWithdrawAll, temMALFORMED}}; for (auto const& it : invalidOptions) { ammAlice.withdraw( @@ -1918,7 +1856,7 @@ private: BEAST_EXPECT(ammAlice.expectLPTokens(carol, IOUAmount(beast::Zero()))); BEAST_EXPECT(expectHolding(env, carol, USD(30'000))); BEAST_EXPECT( - expectLedgerEntryRoot(env, carol, XRPAmount{30'000'000'000 - 2 * baseFee})); + expectLedgerEntryRoot(env, carol, XRPAmount{30'000'000'000 - (2 * baseFee)})); }); // Equal withdrawal by tokens 1000000, 10% @@ -1984,7 +1922,7 @@ private: BEAST_EXPECT(!env.le(keylet::ownerDir(ammAlice.ammAccount()))); // Can create AMM for the XRP/USD pair - AMM ammCarol(env, carol, XRP(10'000), USD(10'000)); + AMM const ammCarol(env, carol, XRP(10'000), USD(10'000)); BEAST_EXPECT( ammCarol.expectBalances(XRP(10'000), USD(10'000), IOUAmount{10'000'000, 0})); }); @@ -2732,13 +2670,13 @@ private: // 10th Interval after close, price for 1st interval. env(ammAlice.bid({.account = carol})); - env.close(seconds(10 * AUCTION_SLOT_INTERVAL_DURATION + 1)); + env.close(seconds((10 * AUCTION_SLOT_INTERVAL_DURATION) + 1)); BEAST_EXPECT(ammAlice.expectAuctionSlot(0, 10, IOUAmount{121'275, -3})); // 20th Interval (expired) after close, price for 10th interval. env(ammAlice.bid({.account = bob})); env.close( - seconds(AUCTION_SLOT_TIME_INTERVALS * AUCTION_SLOT_INTERVAL_DURATION + 1)); + seconds((AUCTION_SLOT_TIME_INTERVALS * AUCTION_SLOT_INTERVAL_DURATION) + 1)); BEAST_EXPECT(ammAlice.expectAuctionSlot(0, std::nullopt, IOUAmount{127'33875, -5})); // 0 Interval. @@ -3147,12 +3085,12 @@ private: fund(env, gw, {alice, bob}, XRP(2'000), {USD(2'000)}); AMM amm(env, gw, XRP(1'000), USD(1'010), false, 1'000); - Json::Value tx = amm.bid({.account = alice, .bidMin = 500}); + Json::Value const tx = amm.bid({.account = alice, .bidMin = 500}); { auto jtx = env.jt(tx, seq(1), fee(baseFee)); env.app().config().features.erase(featureAMM); - PreflightContext pfCtx( + PreflightContext const pfCtx( env.app(), *jtx.stx, env.current()->rules(), tapNONE, env.journal); auto pf = Transactor::invokePreflight(pfCtx); BEAST_EXPECT(pf == temDISABLED); @@ -3163,7 +3101,7 @@ private: auto jtx = env.jt(tx, seq(1), fee(baseFee)); jtx.jv["TxnSignature"] = "deadbeef"; jtx.stx = env.ust(jtx); - PreflightContext pfCtx( + PreflightContext const pfCtx( env.app(), *jtx.stx, env.current()->rules(), tapNONE, env.journal); auto pf = Transactor::invokePreflight(pfCtx); BEAST_EXPECT(!isTesSuccess(pf)); @@ -3174,7 +3112,7 @@ private: jtx.jv["Asset2"]["currency"] = "XRP"; jtx.jv["Asset2"].removeMember("issuer"); jtx.stx = env.ust(jtx); - PreflightContext pfCtx( + PreflightContext const pfCtx( env.app(), *jtx.stx, env.current()->rules(), tapNONE, env.journal); auto pf = Transactor::invokePreflight(pfCtx); BEAST_EXPECT(pf == temBAD_AMM_TOKENS); @@ -3198,7 +3136,7 @@ private: Env env(*this); fund(env, gw, {alice, carol}, XRP(1'000), {USD(100)}); // XRP balance is below reserve - AMM ammAlice(env, acct, XRP(10), USD(10)); + AMM const ammAlice(env, acct, XRP(10), USD(10)); // Pay below reserve env(pay(carol, ammAlice.ammAccount(), XRP(10)), ter(tecNO_PERMISSION)); // Pay above reserve @@ -3210,7 +3148,7 @@ private: Env env(*this); fund(env, gw, {alice, carol}, XRP(10'000'000), {USD(10'000)}); // XRP balance is above reserve - AMM ammAlice(env, acct, XRP(1'000'000), USD(100)); + AMM const ammAlice(env, acct, XRP(1'000'000), USD(100)); // Pay below reserve env(pay(carol, ammAlice.ammAccount(), XRP(10)), ter(tecNO_PERMISSION)); // Pay above reserve @@ -3635,7 +3573,7 @@ private: env.close(); env(offer(bob, XRP(50), USD(150)), txflags(tfPassive)); env.close(); - AMM ammAlice(env, alice, XRP(1'000), USD(1'050)); + AMM const ammAlice(env, alice, XRP(1'000), USD(1'050)); env(pay(alice, carol, USD(200)), sendmax(XRP(200)), txflags(tfPartialPayment)); env.close(); BEAST_EXPECT(ammAlice.expectBalances(XRP(1'050), USD(1'000), ammAlice.tokens())); @@ -3962,13 +3900,13 @@ private: XRP(100'000), {EUR(50'000), BTC(50'000), ETH(50'000), USD(50'000)}); fund(env, gw, {carol, bob}, XRP(1'000), {USD(200)}, Fund::Acct); - AMM xrp_eur(env, alice, XRP(10'100), EUR(10'000)); - AMM eur_btc(env, alice, EUR(10'000), BTC(10'200)); - AMM btc_usd(env, alice, BTC(10'100), USD(10'000)); - AMM xrp_usd(env, alice, XRP(10'150), USD(10'200)); - AMM xrp_eth(env, alice, XRP(10'000), ETH(10'100)); - AMM eth_eur(env, alice, ETH(10'900), EUR(11'000)); - AMM eur_usd(env, alice, EUR(10'100), USD(10'000)); + AMM const xrp_eur(env, alice, XRP(10'100), EUR(10'000)); + AMM const eur_btc(env, alice, EUR(10'000), BTC(10'200)); + AMM const btc_usd(env, alice, BTC(10'100), USD(10'000)); + AMM const xrp_usd(env, alice, XRP(10'150), USD(10'200)); + AMM const xrp_eth(env, alice, XRP(10'000), ETH(10'100)); + AMM const eth_eur(env, alice, ETH(10'900), EUR(11'000)); + AMM const eur_usd(env, alice, EUR(10'100), USD(10'000)); env(pay(bob, carol, USD(100)), path(~EUR, ~BTC, ~USD), path(~USD), @@ -4043,11 +3981,11 @@ private: XRP(40'000), {EUR(50'000), BTC(50'000), ETH(50'000), USD(50'000)}); fund(env, gw, {carol, bob}, XRP(1000), {USD(200)}, Fund::Acct); - AMM xrp_eur(env, alice, XRP(10'100), EUR(10'000)); - AMM eur_btc(env, alice, EUR(10'000), BTC(10'200)); - AMM btc_usd(env, alice, BTC(10'100), USD(10'000)); - AMM xrp_eth(env, alice, XRP(10'000), ETH(10'100)); - AMM eth_eur(env, alice, ETH(10'900), EUR(11'000)); + AMM const xrp_eur(env, alice, XRP(10'100), EUR(10'000)); + AMM const eur_btc(env, alice, EUR(10'000), BTC(10'200)); + AMM const btc_usd(env, alice, BTC(10'100), USD(10'000)); + AMM const xrp_eth(env, alice, XRP(10'000), ETH(10'100)); + AMM const eth_eur(env, alice, ETH(10'900), EUR(11'000)); env(pay(bob, carol, USD(100)), path(~EUR, ~BTC, ~USD), path(~ETH, ~EUR, ~BTC, ~USD), @@ -4111,7 +4049,7 @@ private: fund(env, gw, {bob}, {EUR(400)}, Fund::IOUOnly); env(trust(alice, EUR(200))); for (int i = 0; i < 30; ++i) - env(offer(alice, EUR(1.0 + 0.01 * i), XRP(1))); + env(offer(alice, EUR(1.0 + (0.01 * i)), XRP(1))); // This is worse quality offer than 30 offers above. // It will not be consumed because of AMM offers limit. env(offer(alice, EUR(140), XRP(100))); @@ -4151,7 +4089,7 @@ private: fund(env, gw, {bob}, {EUR(400)}, Fund::IOUOnly); env(trust(alice, EUR(200))); for (int i = 0; i < 29; ++i) - env(offer(alice, EUR(1.0 + 0.01 * i), XRP(1))); + env(offer(alice, EUR(1.0 + (0.01 * i)), XRP(1))); // This is worse quality offer than 30 offers above. // It will not be consumed because of AMM offers limit. env(offer(alice, EUR(140), XRP(100))); @@ -4188,7 +4126,7 @@ private: Env env(*this, features); fund(env, gw, {alice, carol, bob}, XRP(30'000), {USD(30'000)}); env(offer(bob, XRP(100), USD(100.001))); - AMM ammAlice(env, alice, XRP(10'000), USD(10'100)); + AMM const ammAlice(env, alice, XRP(10'000), USD(10'100)); env(offer(carol, USD(100), XRP(100))); if (!features[fixAMMv1_1]) { @@ -4268,7 +4206,7 @@ private: env(ammAlice.bid({.account = carol, .bidMin = 100})); BEAST_EXPECT(ammAlice.expectLPTokens(carol, IOUAmount{4'999'900})); BEAST_EXPECT(ammAlice.expectAuctionSlot(0, 0, IOUAmount{100})); - BEAST_EXPECT(accountBalance(env, carol) == std::to_string(22500000000 - 4 * baseFee)); + BEAST_EXPECT(accountBalance(env, carol) == std::to_string(22500000000 - (4 * baseFee))); priceXRP = ammAssetOut( STAmount{XRPAmount{10'000'000'000}}, STAmount{token1, 9'999'900}, @@ -4276,7 +4214,7 @@ private: 0); // Carol withdraws ammAlice.withdrawAll(carol, XRP(0)); - BEAST_EXPECT(accountBalance(env, carol) == std::to_string(29999949999 - 5 * baseFee)); + BEAST_EXPECT(accountBalance(env, carol) == std::to_string(29999949999 - (5 * baseFee))); BEAST_EXPECT(ammAlice.expectBalances( XRPAmount{10'000'000'000} - priceXRP, USD(10'000), IOUAmount{5'000'000})); BEAST_EXPECT(ammAlice.expectLPTokens(alice, IOUAmount{5'000'000})); @@ -4413,7 +4351,7 @@ private: env.trust(TSTB(10'000), C); env(pay(A, C, TSTA(10'000))); env(pay(B, C, TSTB(10'000))); - AMM amm(env, C, TSTA(5'000), TSTB(5'000)); + AMM const amm(env, C, TSTA(5'000), TSTB(5'000)); auto const ammIss = Issue(TSTA.currency, amm.ammAccount()); // Can TrustSet only for AMM LP tokens @@ -4463,7 +4401,7 @@ private: std::string lp2TakerPays; // Execute with AMM first prep( - [&](Env& env) { AMM amm(env, LP1, TST(25), XRP(250)); }, + [&](Env& env) { AMM const amm(env, LP1, TST(25), XRP(250)); }, [&](Env& env) { lp2TSTBalance = getAccountLines(env, LP2, TST)["lines"][0u]["balance"].asString(); auto const offer = getAccountOffers(env, LP2)["offers"][0u]; @@ -4767,7 +4705,7 @@ private: Account const ed("ed"); fund(env, gw, {alice, bob, carol, ed}, XRP(1'000), {USD(2'000), EUR(2'000)}); env(offer(carol, EUR(5), USD(5))); - AMM ammAlice(env, alice, USD(1'005), EUR(1'000)); + AMM const ammAlice(env, alice, USD(1'005), EUR(1'000)); env(pay(bob, ed, USD(10)), path(~USD), sendmax(EUR(15)), txflags(tfNoRippleDirect)); BEAST_EXPECT(expectHolding(env, ed, USD(2'010))); if (!features[fixAMMv1_1]) @@ -4795,7 +4733,7 @@ private: fund(env, gw, {alice, bob, carol, ed}, XRP(1'000), {USD(2'000), EUR(2'000)}); env(offer(carol, EUR(5), USD(5))); // Set 0.25% fee - AMM ammAlice(env, alice, USD(1'005), EUR(1'000), false, 250); + AMM const ammAlice(env, alice, USD(1'005), EUR(1'000), false, 250); env(pay(bob, ed, USD(10)), path(~USD), sendmax(EUR(15)), txflags(tfNoRippleDirect)); BEAST_EXPECT(expectHolding(env, ed, USD(2'010))); if (!features[fixAMMv1_1]) @@ -4828,7 +4766,7 @@ private: fund(env, gw, {alice, bob, carol, ed}, XRP(1'000), {USD(2'000), EUR(2'000)}); env(offer(carol, EUR(10), USD(10))); // Set 1% fee - AMM ammAlice(env, alice, USD(1'005), EUR(1'000), false, 1'000); + AMM const ammAlice(env, alice, USD(1'005), EUR(1'000), false, 1'000); env(pay(bob, ed, USD(10)), path(~USD), sendmax(EUR(15)), txflags(tfNoRippleDirect)); BEAST_EXPECT(expectHolding(env, ed, USD(2'010))); BEAST_EXPECT(expectHolding(env, bob, EUR(1'990))); @@ -4846,7 +4784,7 @@ private: fund(env, gw, {alice, bob, carol, ed}, XRP(1'000), {USD(2'000), EUR(2'000)}); env(offer(carol, EUR(9), USD(9))); // Set 1% fee - AMM ammAlice(env, alice, USD(1'005), EUR(1'000), false, 1'000); + AMM const ammAlice(env, alice, USD(1'005), EUR(1'000), false, 1'000); env(pay(bob, ed, USD(10)), path(~USD), sendmax(EUR(15)), txflags(tfNoRippleDirect)); BEAST_EXPECT(expectHolding(env, ed, USD(2'010))); BEAST_EXPECT(expectHolding(env, bob, STAmount{EUR, UINT64_C(1'989'993923296712), -12})); @@ -5040,7 +4978,7 @@ private: // 30,000 initial - (deposit+withdraw) * 10 BEAST_EXPECT( accountBalance(env, carol) == - std::to_string(30'000'000'000 - 20 * baseFee)); + std::to_string(30'000'000'000 - (20 * baseFee))); BEAST_EXPECT(accountBalance(env, ed) == xrpBalance); BEAST_EXPECT(accountBalance(env, paul) == xrpBalance); BEAST_EXPECT(accountBalance(env, natalie) == xrpBalance); @@ -5064,7 +5002,7 @@ private: BEAST_EXPECT(accountBalance(env, dan) == xrpBalanceText); BEAST_EXPECT( accountBalance(env, carol) == - std::to_string(30'000'000'000 - 20 * baseFee - 10)); + std::to_string(30'000'000'000 - (20 * baseFee) - 10)); BEAST_EXPECT(accountBalance(env, ed) == (xrpBalance + drops(2)).getText()); BEAST_EXPECT(accountBalance(env, paul) == (xrpBalance + drops(3)).getText()); BEAST_EXPECT(accountBalance(env, natalie) == (xrpBalance + drops(5)).getText()); @@ -5155,7 +5093,7 @@ private: all); fund(env, gw, {alice}, XRP(20'000), {USD(10'000)}); AMM amm(env, gw, XRP(10'000), USD(10'000)); - for (auto i = 0; i < maxDeletableAMMTrustLines * 2 + 10; ++i) + for (auto i = 0; i < (maxDeletableAMMTrustLines * 2) + 10; ++i) { Account const a{std::to_string(i)}; env.fund(XRP(1'000), a); @@ -5187,7 +5125,7 @@ private: Env env(*this); env.fund(XRP(2'000), gw); env.fund(XRP(2'000), alice); - AMM amm(env, gw, XRP(1'000), USD(1'000)); + AMM const amm(env, gw, XRP(1'000), USD(1'000)); env(fset(gw, asfAllowTrustLineClawback), ter(tecOWNERS)); } @@ -5737,7 +5675,7 @@ private: auto const xrpIouAmounts10_100 = TAmounts{XRPAmount{10}, IOUAmount{100}}; auto const iouXrpAmounts10_100 = TAmounts{IOUAmount{10}, XRPAmount{100}}; // clang-format off - std::vector> tests = { + std::vector> const tests = { //Pool In , Pool Out, Quality , Fee, Status {"0.001519763260828713", "1558701", Quality{5414253689393440221}, 1000, FailShouldSucceed}, {"0.01099814367603737", "1892611", Quality{5482264816516900274}, 1000, FailShouldSucceed}, @@ -5797,14 +5735,14 @@ private: }; // clang-format on - boost::regex rx("^\\d+$"); + boost::regex const rx("^\\d+$"); boost::smatch match; // tests that succeed should have the same amounts pre-fix and post-fix - std::vector> successAmounts; - Env env(*this, features, std::make_unique(&logs)); + std::vector> const successAmounts; + Env const env(*this, features, std::make_unique(&logs)); auto rules = env.current()->rules(); - CurrentTransactionRulesGuard rg(rules); - NumberMantissaScaleGuard sg(MantissaRange::small); + CurrentTransactionRulesGuard const rg(rules); + NumberMantissaScaleGuard const sg(MantissaRange::small); for (auto const& t : tests) { @@ -5923,7 +5861,7 @@ private: using namespace jtx; testAMM([&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .flags = tfSingleAsset, .err = ter(temMALFORMED), }; @@ -5931,7 +5869,7 @@ private: }); testAMM([&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .flags = tfOneAssetLPToken, .err = ter(temMALFORMED), }; @@ -5939,7 +5877,7 @@ private: }); testAMM([&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .flags = tfLimitLPToken, .err = ter(temMALFORMED), }; @@ -5947,7 +5885,7 @@ private: }); testAMM([&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .asset1Out = XRP(100), .asset2Out = XRP(100), .err = ter(temBAD_AMM_TOKENS), @@ -5956,7 +5894,7 @@ private: }); testAMM([&](AMM& ammAlice, Env& env) { - WithdrawArg args{ + WithdrawArg const args{ .asset1Out = XRP(100), .asset2Out = BAD(100), .err = ter(temBAD_CURRENCY), @@ -6234,7 +6172,7 @@ private: env(pay(bitstamp, trader, usdBIT(100'000))); env.close(); - AMM amm{env, trader, usdGH(input.poolUsdGH), usdBIT(input.poolUsdBIT)}; + AMM const amm{env, trader, usdGH(input.poolUsdGH), usdBIT(input.poolUsdBIT)}; env.close(); IOUAmount const preSwapLPTokenBalance = amm.getLPTokensBalance(); @@ -6343,7 +6281,7 @@ private: env(offer(alice, XRP(1), USD(0.01))); env.close(); - AMM amm(env, gw, XRP(200'000), USD(100'000)); + AMM const amm(env, gw, XRP(200'000), USD(100'000)); // The offer doesn't cross AMM in pre-amendment code // It crosses AMM in post-amendment code @@ -6376,7 +6314,7 @@ private: // There is no blocking offer // env(offer(alice, XRP(1), USD(0.01))); - AMM amm(env, gw, XRP(200'000), USD(100'000)); + AMM const amm(env, gw, XRP(200'000), USD(100'000)); // The offer crosses AMM env(offer(carol, USD(0.49), XRP(1))); @@ -6398,7 +6336,7 @@ private: // It crosses AMM in post-amendment code env(offer(bob, USD(1), XRPAmount(500))); env.close(); - AMM amm(env, alice, XRP(1'000), USD(500)); + AMM const amm(env, alice, XRP(1'000), USD(500)); env(offer(carol, XRP(100), USD(55))); env.close(); if (!features[fixAMMv1_1]) @@ -6428,7 +6366,7 @@ private: Env env(*this, features); fund(env, gw, {alice, carol, bob}, XRP(10'000), {USD(1'000)}); - AMM amm(env, alice, XRP(1'000), USD(500)); + AMM const amm(env, alice, XRP(1'000), USD(500)); env(offer(carol, XRP(100), USD(55))); env.close(); BEAST_EXPECT(amm.expectBalances( @@ -6561,12 +6499,12 @@ private: // clawback-enabled issuer if (!features[featureAMMClawback]) { - AMM amm(env, gw, XRP(100), USD(100), ter(tecNO_PERMISSION)); - AMM amm1(env, alice, USD(100), XRP(100), ter(tecNO_PERMISSION)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tecNO_PERMISSION)); + AMM const amm1(env, alice, USD(100), XRP(100), ter(tecNO_PERMISSION)); env(fclear(gw, asfAllowTrustLineClawback)); env.close(); // Can't be cleared - AMM amm2(env, gw, XRP(100), USD(100), ter(tecNO_PERMISSION)); + AMM const amm2(env, gw, XRP(100), USD(100), ter(tecNO_PERMISSION)); } // If featureAMMClawback is enabled, AMMCreate is allowed for // clawback-enabled issuer. Clawback from the AMM Account is not @@ -6575,8 +6513,8 @@ private: // AMMClawback transaction to claw back from AMM Account. else { - AMM amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); - AMM amm1(env, alice, USD(100), XRP(200), ter(tecDUPLICATE)); + AMM const amm(env, gw, XRP(100), USD(100), ter(tesSUCCESS)); + AMM const amm1(env, alice, USD(100), XRP(200), ter(tecDUPLICATE)); // Construct the amount being clawed back using AMM account. // By doing this, we make the clawback transaction's Amount field's @@ -6588,7 +6526,7 @@ private: // is confusing. auto const error = features[featureSingleAssetVault] ? ter{tecPSEUDO_ACCOUNT} : ter{tecAMM_ACCOUNT}; - Issue usd(USD.issue().currency, amm.ammAccount()); + Issue const usd(USD.issue().currency, amm.ammAccount()); auto amount = amountFromString(usd, "10"); env(claw(gw, amount), error); } @@ -6712,8 +6650,8 @@ private: env(pay(gw, alice, USD(10'000))); env.close(); - STAmount amount = XRP(10'000); - STAmount amount2 = USD(10'000); + STAmount const amount = XRP(10'000); + STAmount const amount2 = USD(10'000); auto const keylet = keylet::amm(amount.issue(), amount2.issue()); for (int i = 0; i < 256; ++i) { @@ -6725,7 +6663,7 @@ private: sig(autofill)); } - AMM ammAlice( + AMM const ammAlice( env, alice, amount, @@ -6747,7 +6685,7 @@ private: STAmount xrpBalance{XRPAmount(692'614'492'126)}; STAmount xpmBalance{XPM, UINT64_C(18'610'359'80246901), -8}; STAmount amount{XPM, UINT64_C(6'566'496939465400), -12}; - std::uint16_t tfee = 941; + std::uint16_t const tfee = 941; auto test = [&](auto&& cb, std::uint16_t tfee_) { Env env(*this, features); @@ -6758,7 +6696,7 @@ private: AMM amm(env, gw, xrpBalance, xpmBalance, CreateArg{.tfee = tfee_}); // AMM LPToken balance required to replicate single deposit failure - STAmount lptAMMBalance{amm.lptIssue(), UINT64_C(3'234'987'266'485968), -6}; + STAmount const lptAMMBalance{amm.lptIssue(), UINT64_C(3'234'987'266'485968), -6}; auto const burn = IOUAmount{amm.getLPTokensBalance() - lptAMMBalance}; // burn tokens to get to the required AMM state env(amm.bid(BidArg{.account = gw, .bidMin = burn, .bidMax = burn})); @@ -6793,8 +6731,8 @@ private: { auto const [amount, amount2, lptBalance] = amm.balances(GBP, EUR); - NumberMantissaScaleGuard sg(MantissaRange::small); - NumberRoundModeGuard g(env.enabled(fixAMMv1_3) ? Number::upward : Number::getround()); + NumberMantissaScaleGuard const sg(MantissaRange::small); + NumberRoundModeGuard const g(env.enabled(fixAMMv1_3) ? Number::upward : Number::getround()); auto const res = root2(amount * amount2); if (shouldFail) diff --git a/src/test/app/AccountDelete_test.cpp b/src/test/app/AccountDelete_test.cpp index 91780800e9..4382fb27c7 100644 --- a/src/test/app/AccountDelete_test.cpp +++ b/src/test/app/AccountDelete_test.cpp @@ -452,7 +452,7 @@ public: // Verify the existence of the expected ledger entries. Keylet const aliceOwnerDirKey{keylet::ownerDir(alice.id())}; { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(closed->exists(keylet::account(alice.id()))); BEAST_EXPECT(closed->exists(aliceOwnerDirKey)); @@ -486,7 +486,7 @@ public: // Verify that alice's account root is gone as well as her directory // nodes and all of her offers. { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(!closed->exists(keylet::account(alice.id()))); BEAST_EXPECT(!closed->exists(aliceOwnerDirKey)); @@ -539,7 +539,7 @@ public: env(acctdelete(gw, alice), fee(acctDelFee), ter(tecHAS_OBLIGATIONS)); env.close(); { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(closed->exists(keylet::account(alice.id()))); BEAST_EXPECT(closed->exists(keylet::account(gw.id()))); } @@ -590,7 +590,7 @@ public: env(acctdelete(alice, env.master), fee(XRP(1)), ter(telINSUF_FEE_P)); env.close(); { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(closed->exists(keylet::account(alice.id()))); BEAST_EXPECT(env.balance(env.master) == masterBalance); } @@ -617,7 +617,7 @@ public: env.require(owners(bob, 250)); { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(closed->exists(keylet::account(bob.id()))); for (std::uint32_t i = 0; i < 250; ++i) { @@ -636,7 +636,7 @@ public: verifyDeliveredAmount(env, bobOldBalance - acctDelFee); env.close(); { - std::shared_ptr closed{env.closed()}; + std::shared_ptr const closed{env.closed()}; BEAST_EXPECT(!closed->exists(keylet::account(bob.id()))); for (std::uint32_t i = 0; i < 250; ++i) { diff --git a/src/test/app/AccountSet_test.cpp b/src/test/app/AccountSet_test.cpp index 7af917a0b9..246f18c445 100644 --- a/src/test/app/AccountSet_test.cpp +++ b/src/test/app/AccountSet_test.cpp @@ -195,7 +195,7 @@ public: std::size_t const maxLength = 256; for (std::size_t len = maxLength - 1; len <= maxLength + 1; ++len) { - std::string domain2 = std::string(len - domain.length() - 1, 'a') + "." + domain; + std::string const domain2 = std::string(len - domain.length() - 1, 'a') + "." + domain; BEAST_EXPECT(domain2.length() == len); @@ -373,7 +373,7 @@ public: // // Two out-of-bound values are currently in the ledger (March 2020) // They are 4.0 and 4.294967295. So those are the values we test. - for (double transferRate : {4.0, 4.294967295}) + for (double const transferRate : {4.0, 4.294967295}) { Env env(*this); env.fund(XRP(10000), gw, alice, bob); @@ -403,7 +403,7 @@ public: // Note that we're bypassing almost all of the ledger's safety // checks with this modify() call. If you call close() between // here and the end of the test all the effort will be lost. - env.app().openLedger().modify([&gw, transferRate](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&gw, transferRate](OpenView& view, beast::Journal j) { // Get the account root we want to hijack. auto const sle = view.read(keylet::account(gw.id())); if (!sle) @@ -552,7 +552,7 @@ public: auto stx = std::make_shared(*jtx.stx); stx->at(sfSigningPubKey) = makeSlice(std::string("badkey")); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, *stx, tapNONE, j); BEAST_EXPECT(result.ter == temBAD_SIGNATURE); BEAST_EXPECT(!result.applied); diff --git a/src/test/app/AccountTxPaging_test.cpp b/src/test/app/AccountTxPaging_test.cpp index 5efe307812..1f2e909927 100644 --- a/src/test/app/AccountTxPaging_test.cpp +++ b/src/test/app/AccountTxPaging_test.cpp @@ -10,7 +10,7 @@ namespace xrpl { class AccountTxPaging_test : public beast::unit_test::suite { - bool + static bool checkTransaction(Json::Value const& tx, int sequence, int ledger) { return ( @@ -18,7 +18,7 @@ class AccountTxPaging_test : public beast::unit_test::suite tx[jss::tx][jss::ledger_index].asInt() == ledger); } - auto + static auto next( test::jtx::Env& env, test::jtx::Account const& account, @@ -47,9 +47,9 @@ class AccountTxPaging_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; env.fund(XRP(10000), A1, A2, A3); env.close(); diff --git a/src/test/app/AmendmentTable_test.cpp b/src/test/app/AmendmentTable_test.cpp index d8431e5696..007715f9d1 100644 --- a/src/test/app/AmendmentTable_test.cpp +++ b/src/test/app/AmendmentTable_test.cpp @@ -439,7 +439,7 @@ public: // Make a list of trusted validators. // Register the validators with AmendmentTable and return the list. - std::vector> + static std::vector> makeValidators(int num, std::unique_ptr const& table) { std::vector> ret; @@ -462,7 +462,7 @@ public: } // Execute a pretend consensus round for a flag ledger - void + static void doRound( Rules const& rules, AmendmentTable& table, @@ -1067,7 +1067,7 @@ public: // Since the local validator vote record expires after 24 hours, // with 23 hour flapping the amendment will go live. But with 25 // hour flapping the amendment will not go live. - for (int flapRateHours : {23, 25}) + for (int const flapRateHours : {23, 25}) { test::jtx::Env env{*this, feat}; auto const testAmendment = amendmentId("validatorFlapping"); diff --git a/src/test/app/Batch_test.cpp b/src/test/app/Batch_test.cpp index ec12fbb21f..f301b6d60f 100644 --- a/src/test/app/Batch_test.cpp +++ b/src/test/app/Batch_test.cpp @@ -35,7 +35,7 @@ class Batch_test : public beast::unit_test::suite std::string txHash; }; - Json::Value + static Json::Value getTxByIndex(Json::Value const& jrr, int const index) { for (auto const& txn : jrr[jss::result][jss::ledger][jss::transactions]) @@ -46,7 +46,7 @@ class Batch_test : public beast::unit_test::suite return {}; } - Json::Value + static Json::Value getLastLedger(jtx::Env& env) { Json::Value params; @@ -93,6 +93,7 @@ class Batch_test : public beast::unit_test::suite auto const ids = batchTxn.stx->getBatchTransactionIDs(); std::vector txIDs; + txIDs.reserve(ids.size()); for (auto const& id : ids) txIDs.push_back(strHex(id)); TxID const batchID = batchTxn.stx->getTransactionID(); @@ -125,7 +126,7 @@ class Batch_test : public beast::unit_test::suite return p; } - auto + static auto openLedgerFee(jtx::Env& env, XRPAmount const& batchFee) { using namespace jtx; @@ -959,7 +960,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -968,7 +969,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } @@ -1001,7 +1002,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1010,7 +1011,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } @@ -1043,7 +1044,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1052,7 +1053,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } @@ -1085,7 +1086,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1094,7 +1095,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } @@ -1127,7 +1128,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1136,7 +1137,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } @@ -1379,7 +1380,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(1)), aliceSeq), batch::inner(pay(alice, bob, XRP(1)), aliceSeq)); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, *jt.stx, tapNONE, j); BEAST_EXPECT(!result.applied && result.ter == temARRAY_TOO_LARGE); return result.applied; @@ -1422,7 +1423,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(5)), aliceSeq + 2), batch::sig(bob, bob, bob, bob, bob, bob, bob, bob, bob, bob)); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, *jt.stx, tapNONE, j); BEAST_EXPECT(!result.applied && result.ter == temARRAY_TOO_LARGE); return result.applied; @@ -1462,7 +1463,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1494,7 +1495,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(9999)), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1523,7 +1524,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(trust(alice, USD(1000), tfSetfAuth), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1552,7 +1553,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(trust(alice, USD(1000), tfSetfAuth), 0, seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -1604,7 +1605,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(9999)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tecUNFUNDED_PAYMENT", txIDs[0], batchID}, {2, "Payment", "tecUNFUNDED_PAYMENT", txIDs[1], batchID}, @@ -1637,7 +1638,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tecUNFUNDED_PAYMENT", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1669,7 +1670,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, }; @@ -1700,7 +1701,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[1], batchID}, }; @@ -1731,7 +1732,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[1], batchID}, }; @@ -1768,7 +1769,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, dave, XRP(100)), seq + 6)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "OfferCreate", "tecKILLED", txIDs[0], batchID}, {2, "OfferCreate", "tecKILLED", txIDs[1], batchID}, @@ -1820,7 +1821,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tecUNFUNDED_PAYMENT", txIDs[0], batchID}, }; @@ -1851,7 +1852,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(4)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1886,7 +1887,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1920,7 +1921,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1953,7 +1954,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -1986,7 +1987,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, dave, XRP(100)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2037,7 +2038,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tecUNFUNDED_PAYMENT", txIDs[1], batchID}, @@ -2072,7 +2073,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 4)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2107,7 +2108,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2141,7 +2142,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(3)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2174,7 +2175,7 @@ class Batch_test : public beast::unit_test::suite offer(alice, alice["USD"](100), XRP(100), tfImmediateOrCancel), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2338,7 +2339,7 @@ class Batch_test : public beast::unit_test::suite // - has no `Signers` field // + has `tfInnerBatchTxn` flag { - STTx amendTx(ttAMENDMENT, [seq = env.closed()->header().seq + 1](auto& obj) { + STTx const amendTx(ttAMENDMENT, [seq = env.closed()->header().seq + 1](auto& obj) { obj.setAccountID(sfAccount, AccountID()); obj.setFieldH256(sfAmendment, fixBatchInnerSigs); obj.setFieldU32(sfLedgerSequence, seq); @@ -2396,7 +2397,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "AccountSet", "tesSUCCESS", txIDs[1], batchID}, @@ -2445,7 +2446,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(1)), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "AccountSet", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -2500,7 +2501,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "AccountDelete", "tesSUCCESS", txIDs[1], batchID}, @@ -2543,7 +2544,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "AccountDelete", "tecHAS_OBLIGATIONS", txIDs[1], batchID}, @@ -2584,7 +2585,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 3)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -2625,7 +2626,7 @@ class Batch_test : public beast::unit_test::suite // Just use an XRP asset PrettyAsset const asset{xrpIssue(), 1'000'000}; - Vault vault{env}; + Vault const vault{env}; auto const deposit = asset(50'000); auto const debtMaximumValue = asset(25'000).value(); @@ -2820,7 +2821,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "CheckCreate", "tesSUCCESS", txIDs[0], batchID}, {2, "CheckCash", "tesSUCCESS", txIDs[1], batchID}, @@ -2866,7 +2867,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "CheckCreate", "tecDST_TAG_NEEDED", txIDs[0], batchID}, {2, "CheckCash", "tecNO_ENTRY", txIDs[1], batchID}, @@ -2931,7 +2932,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "TicketCreate", "tesSUCCESS", txIDs[0], batchID}, {2, "CheckCreate", "tesSUCCESS", txIDs[1], batchID}, @@ -2991,7 +2992,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(alice, bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "CheckCreate", "tesSUCCESS", txIDs[0], batchID}, {2, "CheckCash", "tesSUCCESS", txIDs[1], batchID}, @@ -3025,7 +3026,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3043,7 +3044,7 @@ class Batch_test : public beast::unit_test::suite ticket::use(aliceTicketSeq)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3091,7 +3092,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), 0, aliceTicketSeq + 1)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3122,7 +3123,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3140,7 +3141,7 @@ class Batch_test : public beast::unit_test::suite ticket::use(aliceTicketSeq)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3201,7 +3202,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3212,7 +3213,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger contains noop txn - std::vector testCases = { + std::vector const testCases = { {0, "AccountSet", "tesSUCCESS", noopTxnID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -3245,7 +3246,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3256,7 +3257,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3284,7 +3285,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3295,7 +3296,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3326,7 +3327,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "AccountSet", "tesSUCCESS", noopTxnID, std::nullopt}, {1, "Batch", "tesSUCCESS", batchID, std::nullopt}, {2, "Payment", "tesSUCCESS", txIDs[0], batchID}, @@ -3338,7 +3339,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger contains no transactions - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3364,7 +3365,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3386,7 +3387,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3397,7 +3398,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3411,7 +3412,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3433,7 +3434,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3444,7 +3445,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3472,7 +3473,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3496,7 +3497,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "CheckCreate", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3508,7 +3509,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger is empty - std::vector testCases = {}; + std::vector const testCases = {}; validateClosedLedger(env, testCases); } } @@ -3519,7 +3520,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3545,7 +3546,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "CheckCreate", "tesSUCCESS", objTxnID, std::nullopt}, {1, "Batch", "tesSUCCESS", batchID, std::nullopt}, {2, "CheckCash", "tesSUCCESS", txIDs[0], batchID}, @@ -3566,7 +3567,7 @@ class Batch_test : public beast::unit_test::suite env.fund(XRP(10000), alice, bob); env.close(); - std::uint32_t aliceTicketSeq{env.seq(alice) + 1}; + std::uint32_t const aliceTicketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 10)); env.close(); @@ -3590,7 +3591,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "CheckCreate", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3627,7 +3628,7 @@ class Batch_test : public beast::unit_test::suite BEAST_EXPECT(isPseudoTx(stx)); BEAST_EXPECT(!passesLocalChecks(stx, reason)); BEAST_EXPECT(reason == "Cannot submit pseudo transactions."); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, stx, tapNONE, j); BEAST_EXPECT(!result.applied && result.ter == temINVALID_FLAG); return result.applied; @@ -3686,7 +3687,7 @@ class Batch_test : public beast::unit_test::suite env(payTxn2, ter(terPRE_SEQ)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Payment", "tesSUCCESS", payTxn1ID, std::nullopt}, {1, "Batch", "tesSUCCESS", batchID, std::nullopt}, {2, "Payment", "tesSUCCESS", txIDs[0], batchID}, @@ -3697,7 +3698,7 @@ class Batch_test : public beast::unit_test::suite env.close(); { // next ledger includes the payment txn - std::vector testCases = { + std::vector const testCases = { {0, "Payment", "tesSUCCESS", payTxn2ID, std::nullopt}, }; validateClosedLedger(env, testCases); @@ -3909,7 +3910,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -3958,7 +3959,7 @@ class Batch_test : public beast::unit_test::suite batch::sig(bob)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "Payment", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -4008,7 +4009,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(pay(alice, bob, XRP(2)), seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "AccountSet", "tesSUCCESS", txIDs[0], batchID}, {2, "Payment", "tesSUCCESS", txIDs[1], batchID}, @@ -4028,8 +4029,8 @@ class Batch_test : public beast::unit_test::suite // MPTokenIssuanceSet with granular permission { test::jtx::Env env{*this, features}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); @@ -4070,7 +4071,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(jv2, seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "MPTokenIssuanceSet", "tesSUCCESS", txIDs[0], batchID}, {2, "MPTokenIssuanceSet", "tesSUCCESS", txIDs[1], batchID}, @@ -4083,9 +4084,9 @@ class Batch_test : public beast::unit_test::suite // with granular permission { test::jtx::Env env{*this, features}; - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env(fset(gw, asfRequireAuth)); env.close(); @@ -4111,7 +4112,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(jv2, seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "TrustSet", "tesSUCCESS", txIDs[0], batchID}, {2, "TrustSet", "tesSUCCESS", txIDs[1], batchID}, @@ -4122,9 +4123,9 @@ class Batch_test : public beast::unit_test::suite // inner transaction not authorized by the delegating account. { test::jtx::Env env{*this, features}; - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env(fset(gw, asfRequireAuth)); env.close(); @@ -4151,7 +4152,7 @@ class Batch_test : public beast::unit_test::suite batch::inner(jv2, seq + 2)); env.close(); - std::vector testCases = { + std::vector const testCases = { {0, "Batch", "tesSUCCESS", batchID, std::nullopt}, {1, "TrustSet", "tesSUCCESS", txIDs[0], batchID}, }; diff --git a/src/test/app/Check_test.cpp b/src/test/app/Check_test.cpp index 671f8aab1a..1e5d90f650 100644 --- a/src/test/app/Check_test.cpp +++ b/src/test/app/Check_test.cpp @@ -1880,7 +1880,7 @@ class Check_test : public beast::unit_test::suite // Automatic trust line creation should fail if the check destination // can't afford the reserve for the trust line. { - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; // Fund gw1 with noripple (even though that's atypical for a // gateway) so it does not have any flags set. We'll set flags @@ -2000,7 +2000,7 @@ class Check_test : public beast::unit_test::suite { // No account root flags on any participant. // Automatic trust line from issuer to destination. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; BEAST_EXPECT((*env.le(gw1))[sfFlags] == 0); BEAST_EXPECT((*env.le(alice))[sfFlags] == 0); @@ -2053,7 +2053,7 @@ class Check_test : public beast::unit_test::suite // Transfer of assets using offers does not require rippling. // So bob's offer is successfully crossed which creates the // trust line. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; IOU const OF1 = gw1["OF1"]; env(offer(alice, XRP(97), OF1(97))); env.close(); @@ -2102,7 +2102,7 @@ class Check_test : public beast::unit_test::suite { // gw1 enables rippling. // Automatic trust line from issuer to non-issuer should still work. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; env(fset(gw1, asfDefaultRipple)); env.close(); @@ -2150,7 +2150,7 @@ class Check_test : public beast::unit_test::suite // to non-issuer should work. // Use offers to automatically create the trust line. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; IOU const OF2 = gw1["OF2"]; env(offer(alice, XRP(95), OF2(95))); env.close(); @@ -2191,7 +2191,7 @@ class Check_test : public beast::unit_test::suite // change any outcomes. // // Automatic trust line from issuer to non-issuer should still work. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; env(fset(gw1, asfDepositAuth)); env(fset(alice, asfDepositAuth)); env(fset(bob, asfDepositAuth)); @@ -2241,7 +2241,7 @@ class Check_test : public beast::unit_test::suite // automatic trust line creation. // Use offers to automatically create the trust line. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; IOU const OF3 = gw1["OF3"]; env(offer(alice, XRP(93), OF3(93))); env.close(); @@ -2278,7 +2278,7 @@ class Check_test : public beast::unit_test::suite { // Set lsfGlobalFreeze on gw1. That should stop any automatic // trust lines from being created. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; env(fset(gw1, asfGlobalFreeze)); env.close(); @@ -2320,7 +2320,7 @@ class Check_test : public beast::unit_test::suite // no automatic trust line creation between non-issuers. // Use offers to automatically create the trust line. - AccountOwns gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{*this, env, "gw1", 0}; IOU const OF4 = gw1["OF4"]; env(offer(alice, XRP(91), OF4(91)), ter(tecFROZEN)); env.close(); @@ -2370,7 +2370,7 @@ class Check_test : public beast::unit_test::suite // Use offers to automatically create the trust line. IOU const OF5 = gw2["OF5"]; - std::uint32_t gw2OfferSeq = {env.seq(gw2)}; + std::uint32_t const gw2OfferSeq = {env.seq(gw2)}; env(offer(gw2, XRP(92), OF5(92))); ++gw2.owners; env.close(); @@ -2423,7 +2423,7 @@ class Check_test : public beast::unit_test::suite // no automatic trust line creation between non-issuers. // Use offers to automatically create the trust line. - AccountOwns gw2{*this, env, "gw2", 0}; + AccountOwns const gw2{*this, env, "gw2", 0}; IOU const OF5 = gw2["OF5"]; env(offer(alice, XRP(91), OF5(91)), ter(tecUNFUNDED_OFFER)); env.close(); diff --git a/src/test/app/Clawback_test.cpp b/src/test/app/Clawback_test.cpp index d169e9e165..902acf3222 100644 --- a/src/test/app/Clawback_test.cpp +++ b/src/test/app/Clawback_test.cpp @@ -52,7 +52,7 @@ class Clawback_test : public beast::unit_test::suite // Also, asfAllowTrustLineClawback cannot be cleared. { Env env(*this, features); - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(1000), alice); env.close(); @@ -77,7 +77,7 @@ class Clawback_test : public beast::unit_test::suite // asfNoFreeze has been set { Env env(*this, features); - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(1000), alice); env.close(); @@ -103,8 +103,8 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -146,7 +146,7 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features - featureClawback); - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(1000), alice); env.close(); @@ -183,8 +183,8 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features - featureClawback); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -228,8 +228,8 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -310,8 +310,8 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; // bob's account is not funded and does not exist env.fund(XRP(1000), alice); @@ -332,9 +332,9 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; - Account cindy{"cindy"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const cindy{"cindy"}; env.fund(XRP(1000), alice, bob, cindy); env.close(); @@ -375,8 +375,8 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -445,8 +445,8 @@ class Clawback_test : public beast::unit_test::suite // Test that alice is able to successfully clawback tokens from bob Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -496,9 +496,9 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; - Account cindy{"cindy"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const cindy{"cindy"}; env.fund(XRP(1000), alice, bob, cindy); env.close(); @@ -554,9 +554,9 @@ class Clawback_test : public beast::unit_test::suite { Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; - Account cindy{"cindy"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const cindy{"cindy"}; env.fund(XRP(1000), alice, bob, cindy); env.close(); @@ -624,8 +624,8 @@ class Clawback_test : public beast::unit_test::suite // perspective is allowed to clawback Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -711,8 +711,8 @@ class Clawback_test : public beast::unit_test::suite // If clawback results the trustline to be default, // trustline should be automatically deleted Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -761,8 +761,8 @@ class Clawback_test : public beast::unit_test::suite // Claws back from frozen trustline // and the trustline should remain frozen Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -807,8 +807,8 @@ class Clawback_test : public beast::unit_test::suite // When alice tries to claw back an amount that is greater // than what bob holds, only the max available balance is clawed Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); @@ -859,8 +859,8 @@ class Clawback_test : public beast::unit_test::suite // Tests clawback with tickets Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), alice, bob); env.close(); diff --git a/src/test/app/Credentials_test.cpp b/src/test/app/Credentials_test.cpp index d23431f68e..db09bfc0ca 100644 --- a/src/test/app/Credentials_test.cpp +++ b/src/test/app/Credentials_test.cpp @@ -522,6 +522,7 @@ struct Credentials_test : public beast::unit_test::suite directory::adjustOwnerNode); BEAST_EXPECT(res1); + // NOLINTNEXTLINE(readability-suspicious-call-argument) auto const jv = credentials::create(issuer, subject, credType); env(jv, ter(tecDIR_FULL)); // Free one directory entry by using a ticket diff --git a/src/test/app/DNS_test.cpp b/src/test/app/DNS_test.cpp index 9b75e66b85..2273a77e09 100644 --- a/src/test/app/DNS_test.cpp +++ b/src/test/app/DNS_test.cpp @@ -62,7 +62,7 @@ public: { using boost::asio::ip::tcp; tcp::resolver resolver(env_.app().getIOContext()); - std::string port = pUrl_.port ? std::to_string(*pUrl_.port) : "443"; + std::string const port = pUrl_.port ? std::to_string(*pUrl_.port) : "443"; auto results = resolver.resolve(pUrl_.domain, port); auto it = results.begin(); auto end = results.end(); diff --git a/src/test/app/Delegate_test.cpp b/src/test/app/Delegate_test.cpp index 2618a95d0d..6c5698a227 100644 --- a/src/test/app/Delegate_test.cpp +++ b/src/test/app/Delegate_test.cpp @@ -16,9 +16,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env{*this, features}; - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000000), gw, alice, bob); env.close(); @@ -39,8 +39,8 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account gw{"gateway"}; - Account alice{"alice"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; env.fund(XRP(100000), gw, alice); env.close(); @@ -112,9 +112,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this, features); - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), gw, alice, bob); env.close(); @@ -203,8 +203,8 @@ class Delegate_test : public beast::unit_test::suite // reserve requirement not met { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; auto const txFee = env.current()->fees().base; env.fund(env.current()->fees().accountReserve(0) + txFee, alice); @@ -218,9 +218,9 @@ class Delegate_test : public beast::unit_test::suite // reserve recovered after deleting delegation object { Env env(*this); - Account bob{"bob"}; - Account alice{"alice"}; - Account carol{"carol"}; + Account const bob{"bob"}; + Account const alice{"alice"}; + Account const carol{"carol"}; auto const txFee = env.current()->fees().base; @@ -247,8 +247,8 @@ class Delegate_test : public beast::unit_test::suite // test reserve when sending transaction on behalf of other account { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(drops(env.current()->fees().accountReserve(1)), alice); env.fund(drops(env.current()->fees().accountReserve(2)), bob); @@ -274,37 +274,42 @@ class Delegate_test : public beast::unit_test::suite testcase("test fee"); using namespace jtx; - Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; - env.fund(XRP(10000), alice, carol); - env.fund(XRP(1000), bob); - env.close(); + // Common setup: fund alice, bob, carol with 1000 XRP. + auto setup = [&](Env& env) { + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; + env.fund(XRP(1000), alice, bob, carol); + env.close(); + return std::make_tuple(alice, bob, carol); + }; + // No fee deduction for terNO_DELEGATE_PERMISSION. { - auto aliceBalance = env.balance(alice); - auto bobBalance = env.balance(bob); - auto carolBalance = env.balance(carol); + Env env(*this); + auto [alice, bob, carol] = setup(env); - env(pay(alice, carol, XRP(100)), - fee(XRP(2000)), - delegate::as(bob), - ter(terNO_DELEGATE_PERMISSION)); + auto const aliceBalance = env.balance(alice); + auto const bobBalance = env.balance(bob); + auto const carolBalance = env.balance(carol); + + env(pay(alice, carol, XRP(100)), delegate::as(bob), ter(terNO_DELEGATE_PERMISSION)); env.close(); BEAST_EXPECT(env.balance(alice) == aliceBalance); BEAST_EXPECT(env.balance(bob) == bobBalance); BEAST_EXPECT(env.balance(carol) == carolBalance); } - env(delegate::set(alice, bob, {"Payment"})); - env.close(); - + // Delegate pays the fee successfully. { - // Delegate pays the fee - auto aliceBalance = env.balance(alice); - auto bobBalance = env.balance(bob); - auto carolBalance = env.balance(carol); + Env env(*this); + auto [alice, bob, carol] = setup(env); + env(delegate::set(alice, bob, {"Payment"})); + env.close(); + + auto const aliceBalance = env.balance(alice); + auto const bobBalance = env.balance(bob); + auto const carolBalance = env.balance(carol); auto const sendAmt = XRP(100); auto const feeAmt = XRP(10); @@ -315,11 +320,16 @@ class Delegate_test : public beast::unit_test::suite BEAST_EXPECT(env.balance(carol) == carolBalance + sendAmt); } + // Bob has insufficient balance to pay the fee, will get terINSUF_FEE_B. { - // insufficient balance to pay fee - auto aliceBalance = env.balance(alice); - auto bobBalance = env.balance(bob); - auto carolBalance = env.balance(carol); + Env env(*this); + auto [alice, bob, carol] = setup(env); + env(delegate::set(alice, bob, {"Payment"})); + env.close(); + + auto const aliceBalance = env.balance(alice); + auto const bobBalance = env.balance(bob); + auto const carolBalance = env.balance(carol); env(pay(alice, carol, XRP(100)), fee(XRP(2000)), @@ -331,22 +341,143 @@ class Delegate_test : public beast::unit_test::suite BEAST_EXPECT(env.balance(carol) == carolBalance); } + // The delegated account has enough balance to pay and delegator has enough reserve { - // fee is paid by Delegate - // on context reset (tec error) - auto aliceBalance = env.balance(alice); - auto bobBalance = env.balance(bob); - auto carolBalance = env.balance(carol); - auto const feeAmt = XRP(10); + // Common setup: fund accounts and grant Bob permission to pay on Alice's behalf. + // Alice is funded with exactly (paymentAmount + reserve + baseFee): baseFee covers + // the DelegateSet tx cost, leaving Alice with exactly (paymentAmount + reserve). + // highFee = reserve + baseFee, strictly greater than reserve, so that + // max(reserve, highFee) = highFee — making the direct payment check fail. + auto setup = [&](Env& env) { + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; - env(pay(alice, carol, XRP(20000)), - fee(feeAmt), - delegate::as(bob), - ter(tecUNFUNDED_PAYMENT)); + auto const baseFee = env.current()->fees().base; + auto const reserve = env.current()->fees().accountReserve(1); + auto const paymentAmount = XRP(1); + auto const highFee = reserve + baseFee; + BEAST_EXPECT(highFee > reserve); + + env.fund(paymentAmount + reserve + baseFee, alice); + env.fund(XRP(1000), bob); + env.fund(XRP(1000), carol); + env.close(); + + env(delegate::set(alice, bob, {"Payment"})); + env.close(); + + env.require(balance(alice, paymentAmount + reserve)); + + return std::make_tuple(alice, bob, carol, paymentAmount, highFee, reserve); + }; + + // Alice's balance (paymentAmount + reserve) is insufficient to cover both + // the payment and highFee directly. Even though fees are allowed to dip + // below reserve, when Alice pays the fee herself the required funds = + // paymentAmount + max(reserve, highFee) = paymentAmount + highFee + // (since highFee > reserve), which still exceeds her balance. + // tec: highFee is consumed from Alice's balance. + { + Env env(*this); + auto [alice, bob, carol, paymentAmount, highFee, reserve] = setup(env); + auto const aliceBalance = env.balance(alice); + auto const bobBalance = env.balance(bob); + auto const carolBalance = env.balance(carol); + + env(pay(alice, carol, paymentAmount), fee(highFee), ter(tecUNFUNDED_PAYMENT)); + + // tec consumes the fee from Alice; carol and bob are unaffected. + BEAST_EXPECT(env.balance(alice) == aliceBalance - highFee); + BEAST_EXPECT(env.balance(bob) == bobBalance); + BEAST_EXPECT(env.balance(carol) == carolBalance); + } + + // The payment succeeds because the delegated account pays the fee. + // Alice only needs (paymentAmount + reserve). + { + Env env(*this); + auto [alice, bob, carol, paymentAmount, highFee, reserve] = setup(env); + + auto const alicePrePay = env.balance(alice, XRP); + auto const bobPrePay = env.balance(bob, XRP); + auto const carolPrePay = env.balance(carol, XRP); + + env(pay(alice, carol, paymentAmount), delegate::as(bob), fee(highFee)); + env.close(); + + env.require(balance(alice, alicePrePay - paymentAmount)); + env.require(balance(bob, bobPrePay - highFee)); + env.require(balance(carol, carolPrePay + paymentAmount)); + } + } + + // Delegated account can pay the fee even if it dips below reserve. + { + Env env(*this); + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; + + auto const baseFee = env.current()->fees().base; + auto const baseReserve = env.current()->fees().accountReserve(0); + + env.fund(env.current()->fees().accountReserve(1) + baseFee + XRP(1), alice); + env.fund(baseReserve, bob); + env.fund(XRP(1000), carol); env.close(); - BEAST_EXPECT(env.balance(alice) == aliceBalance); - BEAST_EXPECT(env.balance(bob) == bobBalance - feeAmt); - BEAST_EXPECT(env.balance(carol) == carolBalance); + + env(delegate::set(alice, bob, {"Payment"})); + env.close(); + + auto const alicePreTx = env.balance(alice, XRP); + auto const bobPreTx = env.balance(bob, XRP); + + // After paying for this transaction, bob's balance will + // dip below the base reserve + env(pay(alice, carol, XRP(1)), delegate::as(bob)); + env.close(); + + // Bob's balance is now less than the base reserve. + BEAST_EXPECT(env.balance(bob, XRP) < baseReserve); + env.require(balance(bob, bobPreTx - drops(baseFee))); + + // Alice's balance only decreased by the 1.0 XRP she sent. + env.require(balance(alice, alicePreTx - XRP(1))); + } + + // The delegated account has enough balance for the fee, but delegator + // runs into tecUNFUNDED_PAYMENT. + { + Env env(*this); + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; + + auto const baseFee = env.current()->fees().base; + auto const reserve = env.current()->fees().accountReserve(1); + + // Alice is funded with (reserve + baseFee): after DelegateSet she has + // exactly 'reserve', which is insufficient to send XRP(10) while keeping + // reserve. Bob has plenty to pay the fee. + env.fund(reserve + baseFee, alice); + env.fund(XRP(1000), bob); + env.fund(XRP(1000), carol); + env.close(); + + env(delegate::set(alice, bob, {"Payment"})); + env.close(); + + auto const alicePrePay = env.balance(alice, XRP); + auto const bobPrePay = env.balance(bob, XRP); + auto const carolPrePay = env.balance(carol, XRP); + + // Bob pays the fee, but Alice has insufficient balance to send XRP(10). + env(pay(alice, carol, XRP(10)), delegate::as(bob), ter(tecUNFUNDED_PAYMENT)); + + env.require(balance(alice, alicePrePay)); + env.require(balance(bob, bobPrePay - drops(baseFee))); + env.require(balance(carol, carolPrePay)); } } @@ -357,9 +488,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(10000), alice, bob, carol); env.close(); @@ -410,8 +541,8 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); @@ -444,9 +575,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; XRPAmount const baseFee{env.current()->fees().base}; @@ -510,10 +641,10 @@ class Delegate_test : public beast::unit_test::suite // test PaymentMint and PaymentBurn { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account gw{"gateway"}; - Account gw2{"gateway2"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const gw{"gateway"}; + Account const gw2{"gateway2"}; auto const USD = gw["USD"]; auto const EUR = gw2["EUR"]; @@ -615,9 +746,9 @@ class Delegate_test : public beast::unit_test::suite // test PaymentMint won't affect Payment transaction level delegation. { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const gw{"gateway"}; auto const USD = gw["USD"]; env.fund(XRP(10000), alice); @@ -805,9 +936,9 @@ class Delegate_test : public beast::unit_test::suite // test TrustlineUnfreeze, TrustlineFreeze and TrustlineAuthorize { Env env(*this); - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env(fset(gw, asfRequireAuth)); env.close(); @@ -917,9 +1048,9 @@ class Delegate_test : public beast::unit_test::suite // test mix of transaction level delegation and granular delegation { Env env(*this); - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env(fset(gw, asfRequireAuth)); env.close(); @@ -962,9 +1093,9 @@ class Delegate_test : public beast::unit_test::suite // tfFullyCanonicalSig won't block delegated transaction { Env env(*this); - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env(fset(gw, asfRequireAuth)); env.close(); @@ -1210,8 +1341,8 @@ class Delegate_test : public beast::unit_test::suite // tfFullyCanonicalSig won't block delegated transaction { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), alice, bob); env.close(); @@ -1238,8 +1369,8 @@ class Delegate_test : public beast::unit_test::suite // test MPTokenIssuanceUnlock and MPTokenIssuanceLock permissions { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); @@ -1285,8 +1416,8 @@ class Delegate_test : public beast::unit_test::suite // test mix of granular and transaction level permission { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); @@ -1332,8 +1463,8 @@ class Delegate_test : public beast::unit_test::suite // tfFullyCanonicalSig won't block delegated transaction { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); @@ -1356,9 +1487,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(100000), alice, bob, carol); env.close(); @@ -1384,9 +1515,9 @@ class Delegate_test : public beast::unit_test::suite { Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(100000), alice, bob, carol); env.close(); @@ -1410,7 +1541,9 @@ class Delegate_test : public beast::unit_test::suite { Env env(*this); - Account alice{"alice"}, bob{"bob"}, carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(100000), alice, bob, carol); env.close(); @@ -1444,7 +1577,9 @@ class Delegate_test : public beast::unit_test::suite { Env env(*this); - Account alice{"alice"}, bob{"bob"}, carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(100000), alice, bob, carol); env.close(); @@ -1481,9 +1616,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; Account daria{"daria"}; Account edward{"edward"}; env.fund(XRP(100000), alice, bob, carol, daria, edward); @@ -1517,9 +1652,9 @@ class Delegate_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; Account daria = Account{"daria"}; Account edward = Account{"edward"}; Account fred = Account{"fred"}; @@ -1559,8 +1694,8 @@ class Delegate_test : public beast::unit_test::suite Env env(*this, features); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(100000), alice, bob); env.close(); diff --git a/src/test/app/DepositAuth_test.cpp b/src/test/app/DepositAuth_test.cpp index ad401499bc..7a8404aad8 100644 --- a/src/test/app/DepositAuth_test.cpp +++ b/src/test/app/DepositAuth_test.cpp @@ -304,9 +304,11 @@ struct DepositAuth_test : public beast::unit_test::suite auto const noRipplePrev = i & 0x1; auto const noRippleNext = i & 0x2; auto const withDepositAuth = i & 0x4; - testIssuer(testable_amendments(), noRipplePrev, noRippleNext, withDepositAuth); + testIssuer( + testable_amendments(), noRipplePrev != 0, noRippleNext != 0, withDepositAuth != 0); - testNonIssuer(testable_amendments(), noRipplePrev, noRippleNext, withDepositAuth); + testNonIssuer( + testable_amendments(), noRipplePrev != 0, noRippleNext != 0, withDepositAuth != 0); } } diff --git a/src/test/app/Discrepancy_test.cpp b/src/test/app/Discrepancy_test.cpp index 3f808b37d8..d8c14df64e 100644 --- a/src/test/app/Discrepancy_test.cpp +++ b/src/test/app/Discrepancy_test.cpp @@ -24,13 +24,13 @@ class Discrepancy_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; - Account A5{"A5"}; - Account A6{"A6"}; - Account A7{"A7"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; + Account const A5{"A5"}; + Account const A6{"A6"}; + Account const A7{"A7"}; env.fund(XRP(2000), A1); env.fund(XRP(1000), A2, A6, A7); @@ -68,7 +68,7 @@ class Discrepancy_test : public beast::unit_test::suite env(offer(A7, XRP(1233), A6["CNY"](25))); env.close(); - test::PathSet payPaths{ + test::PathSet const payPaths{ test::Path{A2["JPY"], A2}, test::Path{XRP, A2["JPY"], A2}, test::Path{A6, XRP, A2["JPY"], A2}}; @@ -84,7 +84,7 @@ class Discrepancy_test : public beast::unit_test::suite jrq2[jss::transaction] = env.tx()->getJson(JsonOptions::none)[jss::hash]; jrq2[jss::id] = 3; auto jrr = env.rpc("json", "tx", to_string(jrq2))[jss::result]; - uint64_t fee{jrr[jss::Fee].asUInt()}; + uint64_t const fee{jrr[jss::Fee].asUInt()}; auto meta = jrr[jss::meta]; uint64_t sumPrev{0}; uint64_t sumFinal{0}; diff --git a/src/test/app/EscrowToken_test.cpp b/src/test/app/EscrowToken_test.cpp index 280356c494..6e08c3eddf 100644 --- a/src/test/app/EscrowToken_test.cpp +++ b/src/test/app/EscrowToken_test.cpp @@ -35,7 +35,7 @@ struct EscrowToken_test : public beast::unit_test::suite return 0; } - jtx::PrettyAmount + static jtx::PrettyAmount issuerBalance(jtx::Env& env, jtx::Account const& account, Issue const& issue) { Json::Value params; @@ -49,7 +49,7 @@ struct EscrowToken_test : public beast::unit_test::suite return {amount, account.name()}; } - jtx::PrettyAmount + static jtx::PrettyAmount issuerEscrowed(jtx::Env& env, jtx::Account const& account, Issue const& issue) { Json::Value params; @@ -983,13 +983,13 @@ struct EscrowToken_test : public beast::unit_test::suite auto const aa = env.le(keylet::escrow(alice.id(), aseq)); BEAST_EXPECT(aa); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); } { - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); BEAST_EXPECT(std::find(iod.begin(), iod.end(), aa) != iod.end()); } @@ -1004,13 +1004,13 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(bb); { - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); } { - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 5); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) != iod.end()); } @@ -1022,15 +1022,15 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) != iod.end()); } @@ -1042,11 +1042,11 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) == iod.end()); } @@ -1085,20 +1085,20 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(bc); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 3); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 5); BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) != iod.end()); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) != iod.end()); @@ -1110,19 +1110,19 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(env.le(keylet::escrow(bob.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) == iod.end()); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) != iod.end()); @@ -1134,19 +1134,19 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(!env.le(keylet::escrow(bob.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) == iod.end()); BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) == iod.end()); @@ -1182,14 +1182,14 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(ag); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ag) != aod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); BEAST_EXPECT(std::find(iod.begin(), iod.end(), ag) != iod.end()); } @@ -1199,14 +1199,14 @@ struct EscrowToken_test : public beast::unit_test::suite { BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ag) == aod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 2); BEAST_EXPECT(std::find(iod.begin(), iod.end(), ag) == iod.end()); } @@ -1229,7 +1229,7 @@ struct EscrowToken_test : public beast::unit_test::suite bool negative; }; - std::array tests = {{ + std::array const tests = {{ // src > dst && src > issuer && dst no trustline {Account("alice2"), Account("bob0"), Account{"gw0"}, false, true}, // src < dst && src < issuer && dst no trustline @@ -1335,7 +1335,7 @@ struct EscrowToken_test : public beast::unit_test::suite env.close(); } - std::array gwDstTests = {{ + std::array const gwDstTests = {{ // src > dst && src > issuer && dst has trustline {Account("alice2"), Account{"gw0"}, true}, // src < dst && src < issuer && dst has trustline @@ -2518,11 +2518,11 @@ struct EscrowToken_test : public beast::unit_test::suite env.close(); auto const seq1 = env.seq(alice); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { Sandbox sb(&view, tapNONE); auto sleNew = std::make_shared(keylet::escrow(alice, seq1)); MPTIssue const mpt{MPTIssue{makeMptID(1, AccountID(0x4985601))}}; - STAmount amt(mpt, 10); + STAmount const amt(mpt, 10); sleNew->setAccountID(sfDestination, bob); sleNew->setFieldAmount(sfAmount, amt); sb.insert(sleNew); @@ -2745,11 +2745,11 @@ struct EscrowToken_test : public beast::unit_test::suite env.fund(XRP(10'000), alice, bob); auto const seq1 = env.seq(alice); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { Sandbox sb(&view, tapNONE); auto sleNew = std::make_shared(keylet::escrow(alice, seq1)); MPTIssue const mpt{MPTIssue{makeMptID(1, AccountID(0x4985601))}}; - STAmount amt(mpt, 10); + STAmount const amt(mpt, 10); sleNew->setAccountID(sfDestination, bob); sleNew->setFieldAmount(sfAmount, amt); sb.insert(sleNew); @@ -3100,13 +3100,13 @@ struct EscrowToken_test : public beast::unit_test::suite auto const aa = env.le(keylet::escrow(alice.id(), aseq)); BEAST_EXPECT(aa); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); } { - xrpl::Dir iod(*env.current(), keylet::ownerDir(gw.id())); + xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 1); BEAST_EXPECT(std::find(iod.begin(), iod.end(), aa) == iod.end()); } @@ -3121,7 +3121,7 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(bb); { - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); } @@ -3133,11 +3133,11 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); } @@ -3149,7 +3149,7 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); } @@ -3191,16 +3191,16 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(bc); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 3); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); } @@ -3211,16 +3211,16 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(env.le(keylet::escrow(bob.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); } @@ -3230,16 +3230,16 @@ struct EscrowToken_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(!env.le(keylet::escrow(bob.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bob.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); } } diff --git a/src/test/app/Escrow_test.cpp b/src/test/app/Escrow_test.cpp index 2e6ef718d6..05640cde01 100644 --- a/src/test/app/Escrow_test.cpp +++ b/src/test/app/Escrow_test.cpp @@ -1057,7 +1057,7 @@ struct Escrow_test : public beast::unit_test::suite Env env(*this, features); env.fund(XRP(5000), "alice", "bob"); - std::array cb = { + std::array const cb = { {0xA2, 0x2B, 0x80, 0x20, 0x42, 0x4A, 0x70, 0x49, 0x49, 0x52, 0x92, 0x67, 0xB6, 0x21, 0xB3, 0xD7, 0x91, 0x19, 0xD7, 0x29, 0xB2, 0x38, 0x2C, 0xED, 0x8B, 0x29, 0x6C, 0x3C, 0x02, 0x8F, 0xA9, 0x7D, 0x35, 0x0F, 0x6D, 0x07, @@ -1100,7 +1100,7 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT(aa); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); } @@ -1115,7 +1115,7 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT(bb); { - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); } @@ -1127,11 +1127,11 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); } @@ -1143,7 +1143,7 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT( (*env.meta())[sfTransactionResult] == static_cast(tesSUCCESS)); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 0); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); } @@ -1174,16 +1174,16 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT(bc); { - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); } @@ -1194,16 +1194,16 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(env.le(keylet::escrow(bruce.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); } @@ -1213,16 +1213,16 @@ struct Escrow_test : public beast::unit_test::suite BEAST_EXPECT(!env.le(keylet::escrow(alice.id(), aseq))); BEAST_EXPECT(!env.le(keylet::escrow(bruce.id(), bseq))); - xrpl::Dir aod(*env.current(), keylet::ownerDir(alice.id())); + xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); - xrpl::Dir bod(*env.current(), keylet::ownerDir(bruce.id())); + xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 0); BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); - xrpl::Dir cod(*env.current(), keylet::ownerDir(carol.id())); + xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 0); } } diff --git a/src/test/app/FeeVote_test.cpp b/src/test/app/FeeVote_test.cpp index f65a00530b..1635f078a5 100644 --- a/src/test/app/FeeVote_test.cpp +++ b/src/test/app/FeeVote_test.cpp @@ -1,6 +1,5 @@ #include -#include #include #include @@ -231,7 +230,7 @@ class FeeVote_test : public beast::unit_test::suite FeeSetup const defaultSetup; { // defaults - Section config; + Section const config; auto setup = setup_FeeVote(config); BEAST_EXPECT(setup.reference_fee == defaultSetup.reference_fee); BEAST_EXPECT(setup.account_reserve == defaultSetup.account_reserve); @@ -328,16 +327,17 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureXRPFees - featureSmartEscrow); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); // Create the next ledger to apply transaction to - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Test successful fee transaction with legacy fields - FeeSettingsFields fields{ + FeeSettingsFields const fields{ .baseFee = 10, .reserveBase = 200000, .reserveIncrement = 50000, @@ -357,14 +357,15 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); // Create the next ledger to apply transaction to - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); - FeeSettingsFields fields{ + FeeSettingsFields const fields{ .baseFeeDrops = XRPAmount{10}, .reserveBaseDrops = XRPAmount{200000}, .reserveIncrementDrops = XRPAmount{50000}}; @@ -446,12 +447,13 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureXRPFees - featureSmartEscrow); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); // Create the next ledger to apply transaction to - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Test transaction with missing required legacy fields auto invalidTx = createInvalidFeeTx(ledger->rules(), ledger->seq(), true, false, 1); @@ -467,12 +469,13 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); // Create the next ledger to apply transaction to - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Test transaction with missing required new fields auto invalidTx = createInvalidFeeTx(ledger->rules(), ledger->seq(), true, false, 3); @@ -513,10 +516,14 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); // Create the next ledger to apply transaction to - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); auto feeTx = createFeeTx( ledger->rules(), @@ -548,11 +555,15 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); - FeeSettingsFields fields1{ + FeeSettingsFields const fields1{ .baseFeeDrops = XRPAmount{10}, .reserveBaseDrops = XRPAmount{200000}, .reserveIncrementDrops = XRPAmount{50000}}; @@ -567,9 +578,9 @@ class FeeVote_test : public beast::unit_test::suite BEAST_EXPECT(verifyFeeObject(ledger, ledger->rules(), fields1)); // Apply second fee transaction with different values - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); - FeeSettingsFields fields2{ + FeeSettingsFields const fields2{ .baseFeeDrops = XRPAmount{20}, .reserveBaseDrops = XRPAmount{300000}, .reserveIncrementDrops = XRPAmount{75000}}; @@ -592,9 +603,13 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Test transaction with wrong ledger sequence auto feeTx = createFeeTx( @@ -619,11 +634,15 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); - FeeSettingsFields fields1{ + FeeSettingsFields const fields1{ .baseFeeDrops = XRPAmount{10}, .reserveBaseDrops = XRPAmount{200000}, .reserveIncrementDrops = XRPAmount{50000}}; @@ -637,10 +656,10 @@ class FeeVote_test : public beast::unit_test::suite BEAST_EXPECT(verifyFeeObject(ledger, ledger->rules(), fields1)); - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Apply partial update (only some fields) - FeeSettingsFields fields2{ + FeeSettingsFields const fields2{ .baseFeeDrops = XRPAmount{20}, .reserveBaseDrops = XRPAmount{200000}}; auto feeTx2 = createFeeTx(ledger->rules(), ledger->seq(), fields2); @@ -661,9 +680,13 @@ class FeeVote_test : public beast::unit_test::suite jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); // Test invalid transaction with non-zero account - this should fail // validation @@ -695,11 +718,12 @@ class FeeVote_test : public beast::unit_test::suite // Test with XRPFees enabled { Env env(*this, testable_amendments() - featureSmartEscrow); - auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote")); + auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote")); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); @@ -707,7 +731,7 @@ class FeeVote_test : public beast::unit_test::suite auto pub = derivePublicKey(KeyType::secp256k1, sec); auto val = std::make_shared( - env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) { + env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) { v.setFieldU32(sfLedgerSequence, 12345); }); @@ -724,11 +748,12 @@ class FeeVote_test : public beast::unit_test::suite // Test with XRPFees disabled (legacy format) { Env env(*this, testable_amendments() - featureXRPFees - featureSmartEscrow); - auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote")); + auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote")); auto ledger = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); @@ -736,7 +761,7 @@ class FeeVote_test : public beast::unit_test::suite auto pub = derivePublicKey(KeyType::secp256k1, sec); auto val = std::make_shared( - env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) { + env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) { v.setFieldU32(sfLedgerSequence, 12345); }); @@ -769,15 +794,19 @@ class FeeVote_test : public beast::unit_test::suite BEAST_EXPECT(env.current()->fees().reserve == XRPAmount{200'000'000}); BEAST_EXPECT(env.current()->fees().increment == XRPAmount{50'000'000}); - auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote")); + auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote")); auto ledger = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); // doVoting requires a flag ledger (every 256th ledger) // We need to create a ledger at sequence 256 to make it a flag ledger for (int i = 0; i < 256 - 1; ++i) { - ledger = std::make_shared(*ledger, env.app().timeKeeper().closeTime()); + ledger = std::make_shared(*ledger, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(ledger->isFlagLedger()); @@ -790,14 +819,14 @@ class FeeVote_test : public beast::unit_test::suite auto pub = derivePublicKey(KeyType::secp256k1, sec); auto val = std::make_shared( - env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [&](STValidation& v) { + env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [&](STValidation& v) { v.setFieldU32(sfLedgerSequence, ledger->seq()); // Vote for different fees than current v.setFieldAmount(sfBaseFeeDrops, XRPAmount{setup.reference_fee}); v.setFieldAmount(sfReserveBaseDrops, XRPAmount{setup.account_reserve}); v.setFieldAmount(sfReserveIncrementDrops, XRPAmount{setup.owner_reserve}); }); - if (i % 2) + if ((i % 2) != 0) val->setTrusted(); validations.push_back(val); } diff --git a/src/test/app/FixNFTokenPageLinks_test.cpp b/src/test/app/FixNFTokenPageLinks_test.cpp index 8022c52a5d..25366534cd 100644 --- a/src/test/app/FixNFTokenPageLinks_test.cpp +++ b/src/test/app/FixNFTokenPageLinks_test.cpp @@ -62,7 +62,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // 0, 3, 2, 5, 4, 7... // in sets of 16 NFTs we can get each page to be fully // populated. - std::uint32_t const intTaxon = (i / 16) + (i & 0b10000 ? 2 : 0); + std::uint32_t const intTaxon = (i / 16) + (((i & 0b10000) != 0u) ? 2 : 0); uint32_t const extTaxon = internalTaxon(owner, intTaxon); nfts.push_back(token::getNextID(env, owner, extTaxon, tfTransferable)); env(token::mint(owner, extTaxon), txflags(tfTransferable)); diff --git a/src/test/app/Flow_test.cpp b/src/test/app/Flow_test.cpp index 1e9514f756..0bc5bd1727 100644 --- a/src/test/app/Flow_test.cpp +++ b/src/test/app/Flow_test.cpp @@ -241,7 +241,7 @@ struct Flow_test : public beast::unit_test::suite env.require(balance(bob, USDA(10))); env(pay(bob, carol, USDA(5)), sendmax(USDA(10))); auto const effectiveQ = carolAliceQIn > 100 ? 1.0 : carolAliceQIn / 100.0; - env.require(balance(bob, USDA(10.0 - 5.0 / effectiveQ))); + env.require(balance(bob, USDA(10.0 - (5.0 / effectiveQ)))); } // bob -> alice -> carol; bobAliceQOut varies. @@ -435,9 +435,9 @@ struct Flow_test : public beast::unit_test::suite BEAST_EXPECT(isOffer(env, bob, BTC(60), EUR(50))); BEAST_EXPECT(isOffer(env, carol, BTC(1000), EUR(1))); - auto flowJournal = env.app().logs().journal("Flow"); + auto flowJournal = env.app().getJournal("Flow"); auto const flowResult = [&] { - STAmount deliver(USD(51)); + STAmount const deliver(USD(51)); STAmount smax(BTC(61)); PaymentSandbox sb(env.current().get(), tapNONE); STPathSet paths; @@ -450,10 +450,10 @@ struct Flow_test : public beast::unit_test::suite }; { // BTC -> USD - STPath p1({IPE(USD.issue())}); + STPath const p1({IPE(USD.issue())}); paths.push_back(p1); // BTC -> EUR -> USD - STPath p2({IPE(EUR.issue()), IPE(USD.issue())}); + STPath const p2({IPE(EUR.issue()), IPE(USD.issue())}); paths.push_back(p2); } @@ -474,7 +474,7 @@ struct Flow_test : public beast::unit_test::suite }(); BEAST_EXPECT(flowResult.removableOffers.size() == 1); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { if (flowResult.removableOffers.empty()) return false; Sandbox sb(&view, tapNONE); @@ -876,8 +876,10 @@ struct Flow_test : public beast::unit_test::suite env.close(); env(trust(bob, USD(20))); - STAmount tinyAmt1{USD.issue(), 9000000000000000ll, -17, false, STAmount::unchecked{}}; - STAmount tinyAmt3{USD.issue(), 9000000000000003ll, -17, false, STAmount::unchecked{}}; + STAmount const tinyAmt1{ + USD.issue(), 9000000000000000ll, -17, false, STAmount::unchecked{}}; + STAmount const tinyAmt3{ + USD.issue(), 9000000000000003ll, -17, false, STAmount::unchecked{}}; env(offer(gw, drops(9000000000), tinyAmt3)); env(pay(alice, bob, tinyAmt1), @@ -900,8 +902,10 @@ struct Flow_test : public beast::unit_test::suite env.close(); env(trust(alice, USD(20))); - STAmount tinyAmt1{USD.issue(), 9000000000000000ll, -17, false, STAmount::unchecked{}}; - STAmount tinyAmt3{USD.issue(), 9000000000000003ll, -17, false, STAmount::unchecked{}}; + STAmount const tinyAmt1{ + USD.issue(), 9000000000000000ll, -17, false, STAmount::unchecked{}}; + STAmount const tinyAmt3{ + USD.issue(), 9000000000000003ll, -17, false, STAmount::unchecked{}}; env(pay(gw, alice, tinyAmt1)); diff --git a/src/test/app/Freeze_test.cpp b/src/test/app/Freeze_test.cpp index 6f89163c04..ed5ee47578 100644 --- a/src/test/app/Freeze_test.cpp +++ b/src/test/app/Freeze_test.cpp @@ -19,9 +19,9 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const G1{"G1"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(1000), G1, alice, bob); env.close(); @@ -168,8 +168,8 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; + Account const G1{"G1"}; + Account const A1{"A1"}; env.fund(XRP(10000), G1, A1); env.close(); @@ -259,8 +259,8 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; + Account const G1{"G1"}; + Account const A1{"A1"}; env.fund(XRP(10000), G1, A1); env.close(); @@ -308,8 +308,8 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; + Account const G1{"G1"}; + Account const A1{"A1"}; env.fund(XRP(10000), G1, A1); env.close(); @@ -347,11 +347,11 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; env.fund(XRP(12000), G1); env.fund(XRP(1000), A1); @@ -497,10 +497,10 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account frozenAcc{"A2"}; - Account deepFrozenAcc{"A3"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const frozenAcc{"A2"}; + Account const deepFrozenAcc{"A3"}; env.fund(XRP(12000), G1); env.fund(XRP(1000), A1); @@ -608,10 +608,10 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; + Account const G1{"G1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; env.fund(XRP(1000), G1, A3, A4); env.fund(XRP(2000), A2); @@ -705,10 +705,10 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2, A3); @@ -935,9 +935,9 @@ class Freeze_test : public beast::unit_test::suite using path = test::jtx::path; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -1161,9 +1161,9 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -1283,9 +1283,9 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -1578,9 +1578,9 @@ class Freeze_test : public beast::unit_test::suite using path = test::jtx::path; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -1593,7 +1593,7 @@ class Freeze_test : public beast::unit_test::suite env(pay(G1, A2, USD(1000))); env.close(); - AMM ammG1(env, G1, XRP(1'000), USD(1'000)); + AMM const ammG1(env, G1, XRP(1'000), USD(1'000)); env.close(); // Testing basic payment using AMM when freezing one of the trust lines. @@ -1668,9 +1668,9 @@ class Freeze_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -1829,7 +1829,7 @@ class Freeze_test : public beast::unit_test::suite // Testing brokered offer acceptance if (features[featureDeepFreeze] && features[fixEnforceNFTokenTrustlineV2]) { - Account broker{"broker"}; + Account const broker{"broker"}; env.fund(XRP(10000), broker); env.close(); env(trust(G1, broker["USD"](1000), tfSetFreeze | tfSetDeepFreeze)); @@ -1855,7 +1855,7 @@ class Freeze_test : public beast::unit_test::suite // Testing transfer fee if (features[featureDeepFreeze] && features[fixEnforceNFTokenTrustlineV2]) { - Account minter{"minter"}; + Account const minter{"minter"}; env.fund(XRP(10000), minter); env.close(); env(trust(G1, minter["USD"](1000))); @@ -1907,13 +1907,13 @@ class Freeze_test : public beast::unit_test::suite } // Helper function that returns the index of the next check on account - uint256 + static uint256 getCheckIndex(AccountID const& account, std::uint32_t uSequence) { return keylet::check(account, uSequence).key; } - uint256 + static uint256 createNFTSellOffer( test::jtx::Env& env, test::jtx::Account const& account, diff --git a/src/test/app/HashRouter_test.cpp b/src/test/app/HashRouter_test.cpp index 58bace3ef2..e53515e421 100644 --- a/src/test/app/HashRouter_test.cpp +++ b/src/test/app/HashRouter_test.cpp @@ -10,7 +10,7 @@ namespace test { class HashRouter_test : public beast::unit_test::suite { - HashRouter::Setup + static HashRouter::Setup getSetup(std::chrono::seconds hold, std::chrono::seconds relay) { HashRouter::Setup setup; @@ -27,9 +27,9 @@ class HashRouter_test : public beast::unit_test::suite TestStopwatch stopwatch; HashRouter router(getSetup(2s, 1s), stopwatch); - HashRouterFlags key1(HashRouterFlags::PRIVATE1); - HashRouterFlags key2(HashRouterFlags::PRIVATE2); - HashRouterFlags key3(HashRouterFlags::PRIVATE3); + HashRouterFlags const key1(HashRouterFlags::PRIVATE1); + HashRouterFlags const key2(HashRouterFlags::PRIVATE2); + HashRouterFlags const key3(HashRouterFlags::PRIVATE3); auto const ukey1 = uint256{static_cast(key1)}; auto const ukey2 = uint256{static_cast(key2)}; @@ -69,10 +69,10 @@ class HashRouter_test : public beast::unit_test::suite TestStopwatch stopwatch; HashRouter router(getSetup(2s, 1s), stopwatch); - HashRouterFlags key1(HashRouterFlags::PRIVATE1); - HashRouterFlags key2(HashRouterFlags::PRIVATE2); - HashRouterFlags key3(HashRouterFlags::PRIVATE3); - HashRouterFlags key4(HashRouterFlags::PRIVATE4); + HashRouterFlags const key1(HashRouterFlags::PRIVATE1); + HashRouterFlags const key2(HashRouterFlags::PRIVATE2); + HashRouterFlags const key3(HashRouterFlags::PRIVATE3); + HashRouterFlags const key4(HashRouterFlags::PRIVATE4); auto const ukey1 = uint256{static_cast(key1)}; auto const ukey2 = uint256{static_cast(key2)}; @@ -242,7 +242,7 @@ class HashRouter_test : public beast::unit_test::suite TestStopwatch stopwatch; HashRouter router(getSetup(5s, 1s), stopwatch); uint256 const key(1); - HashRouter::PeerShortID peer = 1; + HashRouter::PeerShortID const peer = 1; HashRouterFlags flags = HashRouterFlags::UNDEFINED; BEAST_EXPECT(router.shouldProcess(key, peer, flags, 1s)); @@ -259,7 +259,7 @@ class HashRouter_test : public beast::unit_test::suite using namespace std::chrono_literals; { - Config cfg; + Config const cfg; // default auto const setup = setup_HashRouter(cfg); BEAST_EXPECT(setup.holdTime == 300s); @@ -298,7 +298,7 @@ class HashRouter_test : public beast::unit_test::suite } catch (std::exception const& e) { - std::string expected = + std::string const expected = "HashRouter relay time must be less than or equal to hold " "time"; BEAST_EXPECT(e.what() == expected); @@ -317,7 +317,7 @@ class HashRouter_test : public beast::unit_test::suite } catch (std::exception const& e) { - std::string expected = + std::string const expected = "HashRouter hold time must be at least 12 seconds (the " "approximate validation time for three " "ledgers)."; @@ -337,7 +337,7 @@ class HashRouter_test : public beast::unit_test::suite } catch (std::exception const& e) { - std::string expected = + std::string const expected = "HashRouter relay time must be at least 8 seconds (the " "approximate validation time for two ledgers)."; BEAST_EXPECT(e.what() == expected); @@ -365,9 +365,9 @@ class HashRouter_test : public beast::unit_test::suite using HF = HashRouterFlags; using UHF = std::underlying_type_t; - HF f1 = HF::BAD; - HF f2 = HF::SAVED; - HF combined = f1 | f2; + HF const f1 = HF::BAD; + HF const f2 = HF::SAVED; + HF const combined = f1 | f2; BEAST_EXPECT(static_cast(combined) == (static_cast(f1) | static_cast(f2))); @@ -375,7 +375,7 @@ class HashRouter_test : public beast::unit_test::suite temp |= f2; BEAST_EXPECT(temp == combined); - HF intersect = combined & f1; + HF const intersect = combined & f1; BEAST_EXPECT(intersect == f1); HF temp2 = combined; diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index a64031bd36..e77c3ded0c 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -117,8 +117,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); if (BEAST_EXPECT(result.has_value())) + { BEAST_EXPECT( result.value() == env.current()->parentCloseTime().time_since_epoch().count()); + } } } @@ -301,9 +303,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const credentialIds = hfs.getTxField(sfCredentialIDs); if (BEAST_EXPECT(!credentialIds.has_value())) + { BEAST_EXPECTS( credentialIds.error() == HostFunctionError::NOT_LEAF_FIELD, std::to_string(HfErrorToInt(credentialIds.error()))); + } auto const nonField = hfs.getTxField(sfInvalid); if (BEAST_EXPECT(!nonField.has_value())) @@ -583,9 +587,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for non-existent base field expectError( @@ -729,9 +735,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for non-existent base field expectError( @@ -770,9 +778,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, std::to_string(static_cast(result.error()))); + } } } @@ -873,9 +883,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(slot, locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Error: base field not found @@ -1062,8 +1074,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const arrLen = hfs.getLedgerObjArrayLen(1, sfSignerEntries); if (BEAST_EXPECT(arrLen.has_value())) + { // Should return 2 for sfSignerEntries BEAST_EXPECT(arrLen.value() == 2); + } } { auto const arrLen = hfs.getLedgerObjArrayLen(0, sfSignerEntries); @@ -1123,9 +1137,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for sfMemos @@ -1173,9 +1189,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for sfSignerEntries @@ -1203,9 +1221,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, std::to_string(static_cast(result.error()))); + } } } @@ -1249,9 +1269,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Error: non-array field diff --git a/src/test/app/Invariants_test.cpp b/src/test/app/Invariants_test.cpp index 8372bb340b..ef0624b481 100644 --- a/src/test/app/Invariants_test.cpp +++ b/src/test/app/Invariants_test.cpp @@ -127,7 +127,7 @@ class Invariants_test : public beast::unit_test::suite OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kWarning}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac{env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; BEAST_EXPECT(precheck(A1, A2, ac)); @@ -845,7 +845,7 @@ class Invariants_test : public beast::unit_test::suite auto sleNew = std::make_shared(keylet::escrow(A1, (*sle)[sfSequence] + 2)); Issue const usd{Currency(0x5553440000000000), AccountID(0x4985601)}; - STAmount amt(usd, -1); + STAmount const amt(usd, -1); sleNew->setFieldAmount(sfAmount, amt); ac.view().insert(sleNew); return true; @@ -862,7 +862,7 @@ class Invariants_test : public beast::unit_test::suite auto sleNew = std::make_shared(keylet::escrow(A1, (*sle)[sfSequence] + 2)); Issue const bad{badCurrency(), AccountID(0x4985601)}; - STAmount amt(bad, 1); + STAmount const amt(bad, 1); sleNew->setFieldAmount(sfAmount, amt); ac.view().insert(sleNew); return true; @@ -879,7 +879,7 @@ class Invariants_test : public beast::unit_test::suite auto sleNew = std::make_shared(keylet::escrow(A1, (*sle)[sfSequence] + 2)); MPTIssue const mpt{MPTIssue{makeMptID(1, AccountID(0x4985601))}}; - STAmount amt(mpt, -1); + STAmount const amt(mpt, -1); sleNew->setFieldAmount(sfAmount, amt); ac.view().insert(sleNew); return true; @@ -1026,8 +1026,7 @@ class Invariants_test : public beast::unit_test::suite auto const sleNew = std::make_shared(acctKeylet); sleNew->setFieldU32(sfSequence, 0); sleNew->setFieldH256(sfAMMID, uint256(1)); - sleNew->setFieldU32( - sfFlags, lsfDisableMaster | lsfDefaultRipple | lsfDefaultRipple); + sleNew->setFieldU32(sfFlags, lsfDisableMaster | lsfDefaultRipple); ac.view().insert(sleNew); return true; }, @@ -1193,7 +1192,7 @@ class Invariants_test : public beast::unit_test::suite STArray nfTokens = makeNFTokenIDs(1); auto nftPage = std::make_shared(keylet::nftpage( keylet::nftpage_max(A1), ++(nfTokens[0].getFieldH256(sfNFTokenID)))); - nftPage->setFieldArray(sfNFTokens, std::move(nfTokens)); + nftPage->setFieldArray(sfNFTokens, nfTokens); nftPage->setFieldH256(sfNextPageMin, keylet::nftpage_max(A2).key); ac.view().insert(nftPage); @@ -1206,7 +1205,7 @@ class Invariants_test : public beast::unit_test::suite STArray nfTokens = makeNFTokenIDs(2); auto nftPage = std::make_shared(keylet::nftpage( keylet::nftpage_max(A1), (nfTokens[1].getFieldH256(sfNFTokenID)))); - nftPage->setFieldArray(sfNFTokens, std::move(nfTokens)); + nftPage->setFieldArray(sfNFTokens, nfTokens); ac.view().insert(nftPage); return true; @@ -1227,7 +1226,7 @@ class Invariants_test : public beast::unit_test::suite sle->setAccountID(sfOwner, A1); sle->setFieldU32(sfSequence, seq); - if (numCreds) + if (numCreds != 0u) { // This array is sorted naturally, but if you willing to change this // behavior don't forget to use credentials::makeSorted @@ -1253,8 +1252,8 @@ class Invariants_test : public beast::unit_test::suite using namespace test::jtx; bool const fixPDEnabled = features[fixPermissionedDomainInvariant]; - std::initializer_list badTers = {tecINVARIANT_FAILED, tecINVARIANT_FAILED}; - std::initializer_list failTers = {tecINVARIANT_FAILED, tefINVARIANT_FAILED}; + std::initializer_list const badTers = {tecINVARIANT_FAILED, tecINVARIANT_FAILED}; + std::initializer_list const failTers = {tecINVARIANT_FAILED, tefINVARIANT_FAILED}; testcase << "PermissionedDomain" + std::string(fixPDEnabled ? " fix" : ""); @@ -1338,7 +1337,7 @@ class Invariants_test : public beast::unit_test::suite // update PD with empty rules { - STArray credentials(sfAcceptedCredentials, 2); + STArray const credentials(sfAcceptedCredentials, 2); slePd->setFieldArray(sfAcceptedCredentials, credentials); ac.view().update(slePd); } @@ -1438,15 +1437,16 @@ class Invariants_test : public beast::unit_test::suite STTx{ttPERMISSIONED_DOMAIN_SET, [](STObject&) {}}, fixPDEnabled ? failTers : badTers); - std::initializer_list goodTers = {tesSUCCESS, tesSUCCESS}; + std::initializer_list const goodTers = {tesSUCCESS, tesSUCCESS}; - std::vector badMoreThan1{ + std::vector const badMoreThan1{ {"transaction affected more than 1 permissioned domain entry."}}; - std::vector emptyV; - std::vector badNoDomains{{"no domain objects affected by"}}; - std::vector badNotDeleted{{"domain object modified, but not deleted by "}}; - std::vector badDeleted{{"domain object deleted by"}}; - std::vector badTx{ + std::vector const emptyV; + std::vector const badNoDomains{{"no domain objects affected by"}}; + std::vector const badNotDeleted{ + {"domain object modified, but not deleted by "}}; + std::vector const badDeleted{{"domain object deleted by"}}; + std::vector const badTx{ {"domain object(s) affected by an unauthorized transaction."}}; { @@ -1596,11 +1596,11 @@ class Invariants_test : public beast::unit_test::suite using namespace jtx; AccountID pseudoAccountID; - Preclose createPseudo = [&, this](Account const& a, Account const& b, Env& env) { + Preclose const createPseudo = [&, this](Account const& a, Account const& b, Env& env) { PrettyAsset const xrpAsset{xrpIssue(), 1'000'000}; // Create vault - Vault vault{env}; + Vault const vault{env}; auto [tx, vKeylet] = vault.create({.owner = a, .asset = xrpAsset}); env(tx); env.close(); @@ -1724,7 +1724,7 @@ class Invariants_test : public beast::unit_test::suite std::uint32_t const seq = env.seq(A1); env(pdomain::setTx(A1, credentials)); - uint256 key = pdomain::getNewDomain(env.meta()); + uint256 const key = pdomain::getNewDomain(env.meta()); // std::cout << "PD, acc: " << A1.id() << ", seq: " << seq << ", k: " << // key << std::endl; @@ -1942,7 +1942,7 @@ class Invariants_test : public beast::unit_test::suite // Create vault uint256 vaultID; - Vault vault{env}; + Vault const vault{env}; auto [tx, vKeylet] = vault.create({.owner = a, .asset = asset}); env(tx); BEAST_EXPECT(env.le(vKeylet)); @@ -1967,7 +1967,7 @@ class Invariants_test : public beast::unit_test::suite // Initialize with a placeholder value because there's no default ctor Keylet loanBrokerKeylet = keylet::amendments(); - Preclose createLoanBroker = [&, this](Account const& a, Account const& b, Env& env) { + Preclose const createLoanBroker = [&, this](Account const& a, Account const& b, Env& env) { PrettyAsset const xrpAsset{xrpIssue(), 1'000'000}; loanBrokerKeylet = this->createLoanBroker(a, env, xrpAsset); @@ -2047,38 +2047,38 @@ class Invariants_test : public beast::unit_test::suite // Initialize with a placeholder value because there's no default // ctor Keylet loanBrokerKeylet = keylet::amendments(); - Preclose createLoanBroker = [&, this]( - Account const& alice, Account const& issuer, Env& env) { - PrettyAsset const asset = [&]() { - switch (assetType) - { - case Asset::IOU: { - PrettyAsset const iouAsset = issuer["IOU"]; - env(trust(alice, iouAsset(1000))); - env(pay(issuer, alice, iouAsset(1000))); - env.close(); - return iouAsset; - } + Preclose const createLoanBroker = + [&, this](Account const& alice, Account const& issuer, Env& env) { + PrettyAsset const asset = [&]() { + switch (assetType) + { + case Asset::IOU: { + PrettyAsset const iouAsset = issuer["IOU"]; + env(trust(alice, iouAsset(1000))); + env(pay(issuer, alice, iouAsset(1000))); + env.close(); + return iouAsset; + } - case Asset::MPT: { - MPTTester mptt{env, issuer, mptInitNoFund}; - mptt.create( - {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); - PrettyAsset const mptAsset = mptt.issuanceID(); - mptt.authorize({.account = alice}); - env(pay(issuer, alice, mptAsset(1000))); - env.close(); - return mptAsset; - } + case Asset::MPT: { + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create( + {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); + PrettyAsset const mptAsset = mptt.issuanceID(); + mptt.authorize({.account = alice}); + env(pay(issuer, alice, mptAsset(1000))); + env.close(); + return mptAsset; + } - case Asset::XRP: - default: - return PrettyAsset{xrpIssue(), 1'000'000}; - } - }(); - loanBrokerKeylet = this->createLoanBroker(alice, env, asset); - return BEAST_EXPECT(env.le(loanBrokerKeylet)); - }; + case Asset::XRP: + default: + return PrettyAsset{xrpIssue(), 1'000'000}; + } + }(); + loanBrokerKeylet = this->createLoanBroker(alice, env, asset); + return BEAST_EXPECT(env.le(loanBrokerKeylet)); + }; // Ensure the test scenarios are set up completely. The test cases // will need to recompute any of these values it needs for itself @@ -2393,7 +2393,7 @@ class Invariants_test : public beast::unit_test::suite Account A4{"A4"}; auto const precloseXrp = [&](Account const& A1, Account const& A2, Env& env) -> bool { env.fund(XRP(1000), A3, A4); - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); env(vault.deposit({.depositor = A1, .id = keylet.key, .amount = XRP(10)})); @@ -2417,7 +2417,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DELETE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2437,7 +2437,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttPAYMENT, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2457,7 +2457,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttPAYMENT, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2493,7 +2493,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_SET, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2522,7 +2522,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DELETE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; { auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); @@ -2568,7 +2568,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DELETE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2594,7 +2594,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DELETE, [](STObject&) {}}, {tecINVARIANT_FAILED, tefINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); env(vault.deposit({.depositor = A1, .id = keylet.key, .amount = XRP(10)})); @@ -2630,7 +2630,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2643,7 +2643,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DEPOSIT, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2656,7 +2656,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_WITHDRAW, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2669,7 +2669,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CLAWBACK, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2682,7 +2682,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_DELETE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2708,7 +2708,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_SET, [](STObject&) {}}, {tecINVARIANT_FAILED, tefINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, _] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2730,7 +2730,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_WITHDRAW, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); env(vault.deposit({.depositor = A1, .id = keylet.key, .amount = XRP(10)})); @@ -2970,7 +2970,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -2996,7 +2996,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -3023,7 +3023,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -3051,7 +3051,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -3075,7 +3075,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -3103,7 +3103,7 @@ class Invariants_test : public beast::unit_test::suite STTx{ttVAULT_CREATE, [](STObject&) {}}, {tecINVARIANT_FAILED, tecINVARIANT_FAILED}, [&](Account const& A1, Account const& A2, Env& env) { - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = xrpIssue()}); env(tx); return true; @@ -3658,7 +3658,7 @@ class Invariants_test : public beast::unit_test::suite } auto const mptID = makeMptID(env.seq(A3) - 1, A3); - Asset asset = MPTIssue(mptID); + Asset const asset = MPTIssue(mptID); // Authorize A1 A2 A4 { Json::Value jv; @@ -3681,7 +3681,7 @@ class Invariants_test : public beast::unit_test::suite env.close(); } - Vault vault{env}; + Vault const vault{env}; auto [tx, keylet] = vault.create({.owner = A1, .asset = asset}); env(tx); env(vault.deposit({.depositor = A1, .id = keylet.key, .amount = asset(10)})); diff --git a/src/test/app/LedgerHistory_test.cpp b/src/test/app/LedgerHistory_test.cpp index 93ab4a6210..453c424251 100644 --- a/src/test/app/LedgerHistory_test.cpp +++ b/src/test/app/LedgerHistory_test.cpp @@ -38,7 +38,8 @@ public: assert(!stx); return std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{}, env.app().getNodeFamily()); } @@ -137,17 +138,17 @@ public: Env env{*this, envconfig(), std::make_unique(msg, &found)}; LedgerHistory lh{beast::insight::NullCollector::New(), env.app()}; - Account alice{"A1"}; - Account bob{"A2"}; + Account const alice{"A1"}; + Account const bob{"A2"}; env.fund(XRP(1000), alice, bob); env.close(); auto const ledgerBase = env.app().getLedgerMaster().getClosedLedger(); - JTx txAlice = env.jt(noop(alice)); + JTx const txAlice = env.jt(noop(alice)); auto const ledgerA = makeLedger(ledgerBase, env, lh, 4s, txAlice.stx); - JTx txBob = env.jt(noop(bob)); + JTx const txBob = env.jt(noop(bob)); auto const ledgerB = makeLedger(ledgerBase, env, lh, 4s, txBob.stx); lh.builtLedger(ledgerA, txAlice.stx->getTransactionID(), {}); diff --git a/src/test/app/LedgerLoad_test.cpp b/src/test/app/LedgerLoad_test.cpp index 46c372923e..1df41671fe 100644 --- a/src/test/app/LedgerLoad_test.cpp +++ b/src/test/app/LedgerLoad_test.cpp @@ -109,7 +109,7 @@ class LedgerLoad_test : public beast::unit_test::suite // create a new env with the ledger file specified for startup Env env( *this, - envconfig(ledgerConfig, sd.dbPath, sd.ledgerFile, StartUpType::LOAD_FILE, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, sd.ledgerFile, StartUpType::LoadFile, std::nullopt), nullptr, beast::severities::kDisabled); auto jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -127,19 +127,19 @@ class LedgerLoad_test : public beast::unit_test::suite // empty path except([&] { - Env env( + Env const env( *this, - envconfig(ledgerConfig, sd.dbPath, "", StartUpType::LOAD_FILE, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, "", StartUpType::LoadFile, std::nullopt), nullptr, beast::severities::kDisabled); }); // file does not exist except([&] { - Env env( + Env const env( *this, envconfig( - ledgerConfig, sd.dbPath, "badfile.json", StartUpType::LOAD_FILE, std::nullopt), + ledgerConfig, sd.dbPath, "badfile.json", StartUpType::LoadFile, std::nullopt), nullptr, beast::severities::kDisabled); }); @@ -158,13 +158,13 @@ class LedgerLoad_test : public beast::unit_test::suite return; except([&] { - Env env( + Env const env( *this, envconfig( ledgerConfig, sd.dbPath, ledgerFileCorrupt.string(), - StartUpType::LOAD_FILE, + StartUpType::LoadFile, std::nullopt), nullptr, beast::severities::kDisabled); @@ -182,7 +182,7 @@ class LedgerLoad_test : public beast::unit_test::suite boost::erase_all(ledgerHash, "\""); Env env( *this, - envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::LOAD, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::Load, std::nullopt), nullptr, beast::severities::kDisabled); auto jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -203,7 +203,7 @@ class LedgerLoad_test : public beast::unit_test::suite boost::erase_all(ledgerHash, "\""); Env env( *this, - envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::REPLAY, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::Replay, std::nullopt), nullptr, beast::severities::kDisabled); auto const jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -229,7 +229,7 @@ class LedgerLoad_test : public beast::unit_test::suite boost::erase_all(ledgerHash, "\""); Env env( *this, - envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::REPLAY, sd.trapTxHash), + envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::Replay, sd.trapTxHash), nullptr, beast::severities::kDisabled); auto const jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -257,9 +257,9 @@ class LedgerLoad_test : public beast::unit_test::suite { // will throw an exception, because we cannot load a ledger for // replay when trapTxHash is set to an invalid transaction - Env env( + Env const env( *this, - envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::REPLAY, ~sd.trapTxHash), + envconfig(ledgerConfig, sd.dbPath, ledgerHash, StartUpType::Replay, ~sd.trapTxHash), nullptr, beast::severities::kDisabled); BEAST_EXPECT(false); @@ -283,7 +283,7 @@ class LedgerLoad_test : public beast::unit_test::suite // create a new env with the ledger "latest" specified for startup Env env( *this, - envconfig(ledgerConfig, sd.dbPath, "latest", StartUpType::LOAD, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, "latest", StartUpType::Load, std::nullopt), nullptr, beast::severities::kDisabled); auto jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -301,7 +301,7 @@ class LedgerLoad_test : public beast::unit_test::suite // create a new env with specific ledger index at startup Env env( *this, - envconfig(ledgerConfig, sd.dbPath, "43", StartUpType::LOAD, std::nullopt), + envconfig(ledgerConfig, sd.dbPath, "43", StartUpType::Load, std::nullopt), nullptr, beast::severities::kDisabled); auto jrb = env.rpc("ledger", "current", "full")[jss::result]; @@ -314,7 +314,7 @@ public: void run() override { - beast::temp_dir td; + beast::temp_dir const td; auto sd = setupLedger(td); // test cases diff --git a/src/test/app/LedgerMaster_test.cpp b/src/test/app/LedgerMaster_test.cpp index b48579043e..7a8904dbd7 100644 --- a/src/test/app/LedgerMaster_test.cpp +++ b/src/test/app/LedgerMaster_test.cpp @@ -8,7 +8,7 @@ namespace test { class LedgerMaster_test : public beast::unit_test::suite { - std::unique_ptr + static std::unique_ptr makeNetworkConfig(uint32_t networkID) { using namespace jtx; @@ -51,14 +51,14 @@ class LedgerMaster_test : public beast::unit_test::suite // test invalid range { - std::uint32_t ledgerSeq = -1; - std::uint32_t txnIndex = 0; + std::uint32_t const ledgerSeq = -1; + std::uint32_t const txnIndex = 0; auto result = env.app().getLedgerMaster().txnIdFromIndex(ledgerSeq, txnIndex); BEAST_EXPECT(!result); } // test not in ledger { - uint32_t txnIndex = metas[0]->getFieldU32(sfTransactionIndex); + uint32_t const txnIndex = metas[0]->getFieldU32(sfTransactionIndex); auto result = env.app().getLedgerMaster().txnIdFromIndex(0, txnIndex); BEAST_EXPECT(!result); } @@ -69,13 +69,13 @@ class LedgerMaster_test : public beast::unit_test::suite } // ended without result { - uint32_t txnIndex = metas[0]->getFieldU32(sfTransactionIndex); + uint32_t const txnIndex = metas[0]->getFieldU32(sfTransactionIndex); auto result = env.app().getLedgerMaster().txnIdFromIndex(endLegSeq + 1, txnIndex); BEAST_EXPECT(!result); } // success (first tx) { - uint32_t txnIndex = metas[0]->getFieldU32(sfTransactionIndex); + uint32_t const txnIndex = metas[0]->getFieldU32(sfTransactionIndex); auto result = env.app().getLedgerMaster().txnIdFromIndex(startLegSeq, txnIndex); BEAST_EXPECT( // NOLINTNEXTLINE(bugprone-unchecked-optional-access) @@ -86,7 +86,7 @@ class LedgerMaster_test : public beast::unit_test::suite } // success (second tx) { - uint32_t txnIndex = metas[1]->getFieldU32(sfTransactionIndex); + uint32_t const txnIndex = metas[1]->getFieldU32(sfTransactionIndex); auto result = env.app().getLedgerMaster().txnIdFromIndex(startLegSeq + 1, txnIndex); BEAST_EXPECT( // NOLINTNEXTLINE(bugprone-unchecked-optional-access) diff --git a/src/test/app/LedgerReplay_test.cpp b/src/test/app/LedgerReplay_test.cpp index 54c12b465a..b30dce4756 100644 --- a/src/test/app/LedgerReplay_test.cpp +++ b/src/test/app/LedgerReplay_test.cpp @@ -232,9 +232,7 @@ public: bool supportsFeature(ProtocolFeature f) const override { - if (f == ProtocolFeature::LedgerReplay && ledgerReplayEnabled_) - return true; - return false; + return f == ProtocolFeature::LedgerReplay && ledgerReplayEnabled_; } std::optional publisherListSequence(PublicKey const&) const override @@ -248,7 +246,7 @@ public: uint256 const& getClosedLedgerHash() const override { - static uint256 hash{}; + static uint256 const hash{}; return hash; } bool @@ -363,7 +361,7 @@ struct TestPeerSet : public PeerSet dropRate = 100; } - if ((rand() % 100 + 1) <= dropRate) + if (((rand() % 100) + 1) <= dropRate) return; switch (type) @@ -400,7 +398,7 @@ struct TestPeerSet : public PeerSet std::set const& getPeerIds() const override { - static std::set emptyPeers; + static std::set const emptyPeers; return emptyPeers; } @@ -466,7 +464,7 @@ struct LedgerServer assert(param.initLedgers > 0); createAccounts(param.initAccounts); createLedgerHistory(); - app.logs().threshold(beast::severities::kWarning); + app.getLogs().threshold(beast::severities::kWarning); } /** @@ -607,7 +605,7 @@ public: bool waitForLedgers(uint256 const& finishLedgerHash, int totalReplay) { - int totalRound = 100; + int const totalRound = 100; for (int i = 0; i < totalRound; ++i) { if (haveLedgers(finishLedgerHash, totalReplay)) @@ -621,12 +619,12 @@ public: bool waitForDone() { - int totalRound = 100; + int const totalRound = 100; for (int i = 0; i < totalRound; ++i) { bool allDone = true; { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); for (auto const& t : replayer.tasks_) { if (!t->finished()) @@ -647,14 +645,14 @@ public: std::vector> getTasks() { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); return replayer.tasks_; } std::shared_ptr findTask(uint256 const& hash, int totalReplay) { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); auto i = std::find_if(replayer.tasks_.begin(), replayer.tasks_.end(), [&](auto const& t) { return t->parameter_.finishHash_ == hash && t->parameter_.totalLedgers_ == totalReplay; }); @@ -666,21 +664,21 @@ public: std::size_t countDeltas() { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); return replayer.deltas_.size(); } std::size_t countSkipLists() { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); return replayer.skipLists_.size(); } bool countsAsExpected(std::size_t tasks, std::size_t skipLists, std::size_t deltas) { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); return replayer.tasks_.size() == tasks && replayer.skipLists_.size() == skipLists && replayer.deltas_.size() == deltas; } @@ -688,7 +686,7 @@ public: std::shared_ptr findSkipListAcquire(uint256 const& hash) { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); auto i = replayer.skipLists_.find(hash); if (i == replayer.skipLists_.end()) return {}; @@ -698,7 +696,7 @@ public: std::shared_ptr findLedgerDeltaAcquire(uint256 const& hash) { - std::unique_lock lock(replayer.mtx_); + std::unique_lock const lock(replayer.mtx_); auto i = replayer.deltas_.find(hash); if (i == replayer.deltas_.end()) return {}; @@ -752,9 +750,7 @@ public: auto t = findTask(hash, totalReplay); if (!t) { - if (taskExpect == TaskStatus::NotExist) - return true; - return false; + return taskExpect == TaskStatus::NotExist; } return asExpected(t, taskExpect, skiplistExpect, deltaExpects); @@ -771,9 +767,7 @@ public: auto t = findTask(hash, totalReplay); if (!t) { - if (taskExpect == TaskStatus::NotExist) - return true; - return false; + return taskExpect == TaskStatus::NotExist; } return asExpected(t, taskExpect, skiplistExpect, deltaExpects); @@ -809,8 +803,8 @@ logAll( LedgerReplayClient& client, beast::severities::Severity level = Severity::kTrace) { - server.app.logs().threshold(level); - client.app.logs().threshold(level); + server.app.getLogs().threshold(level); + client.app.getLogs().threshold(level); } // logAll(net.server, net.client); @@ -974,6 +968,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite auto makeSkipList = [](int count) -> std::vector { std::vector sList; + sList.reserve(count); for (int i = 0; i < count; ++i) sList.emplace_back(i); return sList; @@ -1022,13 +1017,13 @@ struct LedgerReplayer_test : public beast::unit_test::suite { testcase("config test"); { - Config c; + Config const c; BEAST_EXPECT(c.LEDGER_REPLAY == false); } { Config c; - std::string toLoad(R"rippleConfig( + std::string const toLoad(R"rippleConfig( [ledger_replay] 1 )rippleConfig"); @@ -1038,7 +1033,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite { Config c; - std::string toLoad = (R"rippleConfig( + std::string const toLoad = (R"rippleConfig( [ledger_replay] 0 )rippleConfig"); @@ -1056,20 +1051,18 @@ struct LedgerReplayer_test : public beast::unit_test::suite http_request_type http_request; http_request.version(request.version()); http_request.base() = request.base(); - bool serverResult = peerFeatureEnabled(http_request, FEATURE_LEDGER_REPLAY, server); + bool const serverResult = + peerFeatureEnabled(http_request, FEATURE_LEDGER_REPLAY, server); if (serverResult != expecting) return false; - beast::IP::Address addr = boost::asio::ip::make_address("172.1.1.100"); + beast::IP::Address const addr = boost::asio::ip::make_address("172.1.1.100"); jtx::Env serverEnv(*this); serverEnv.app().config().LEDGER_REPLAY = server; auto http_resp = xrpl::makeResponse( true, http_request, addr, addr, uint256{1}, 1, {1, 0}, serverEnv.app()); auto const clientResult = peerFeatureEnabled(http_resp, FEATURE_LEDGER_REPLAY, client); - if (clientResult != expecting) - return false; - - return true; + return clientResult == expecting; }; BEAST_EXPECT(handshake(false, false, false)); @@ -1089,7 +1082,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite NetworkOfTwo net(*this, {totalReplay + 1}, psBhvr, ilBhvr, peerFeature); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; for (int i = 0; i < totalReplay; ++i) { BEAST_EXPECT(l); @@ -1106,7 +1099,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); - std::vector deltaStatuses(totalReplay - 1, TaskStatus::Completed); + std::vector const deltaStatuses(totalReplay - 1, TaskStatus::Completed); BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay, TaskStatus::Completed, TaskStatus::Completed, deltaStatuses)); @@ -1127,10 +1120,10 @@ struct LedgerReplayer_test : public beast::unit_test::suite PeerFeature::None); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); - std::vector deltaStatuses(totalReplay - 1, TaskStatus::Completed); + std::vector const deltaStatuses(totalReplay - 1, TaskStatus::Completed); BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay, TaskStatus::Completed, TaskStatus::Completed, deltaStatuses)); @@ -1184,7 +1177,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite // feed client with start ledger since InboundLedgers drops all auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; for (int i = 0; i < totalReplay - 1; ++i) { l = net.server.ledgerMaster.getLedgerByHash(l->header().parentHash); @@ -1193,7 +1186,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); - std::vector deltaStatuses(totalReplay - 1, TaskStatus::Completed); + std::vector const deltaStatuses(totalReplay - 1, TaskStatus::Completed); BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay, TaskStatus::Completed, TaskStatus::Completed, deltaStatuses)); BEAST_EXPECT(net.client.waitForLedgers(finalHash, totalReplay)); @@ -1207,7 +1200,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testStop() { testcase("stop before timeout"); - int totalReplay = 3; + int const totalReplay = 3; NetworkOfTwo net( *this, {totalReplay + 1}, @@ -1216,10 +1209,10 @@ struct LedgerReplayer_test : public beast::unit_test::suite PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); - std::vector deltaStatuses; + std::vector const deltaStatuses; BEAST_EXPECT(net.client.checkStatus( finalHash, totalReplay, TaskStatus::NotDone, TaskStatus::NotDone, deltaStatuses)); @@ -1232,7 +1225,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testSkipListBadReply() { testcase("SkipListAcquire bad reply"); - int totalReplay = 3; + int const totalReplay = 3; NetworkOfTwo net( *this, {totalReplay + 1 + 1}, @@ -1241,7 +1234,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); auto skipList = net.client.findSkipListAcquire(finalHash); @@ -1250,7 +1243,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite auto item = make_shamapitem(uint256(12345), Slice(payload, sizeof(payload))); skipList->processData(l->seq(), item); - std::vector deltaStatuses; + std::vector const deltaStatuses; BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay, TaskStatus::Failed, TaskStatus::Failed, deltaStatuses)); @@ -1265,7 +1258,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testLedgerDeltaBadReply() { testcase("LedgerDeltaAcquire bad reply"); - int totalReplay = 3; + int const totalReplay = 3; NetworkOfTwo net( *this, {totalReplay + 1}, @@ -1274,7 +1267,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.ledgerMaster.storeLedger(l); net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); @@ -1298,15 +1291,15 @@ struct LedgerReplayer_test : public beast::unit_test::suite testLedgerReplayOverlap() { testcase("Overlap tasks"); - int totalReplay = 5; + int const totalReplay = 5; NetworkOfTwo net( *this, - {totalReplay * 3 + 1}, + {(totalReplay * 3) + 1}, PeerSetBehavior::Good, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); std::vector deltaStatuses(totalReplay - 1, TaskStatus::Completed); BEAST_EXPECT(net.client.waitAndCheckStatus( @@ -1348,11 +1341,11 @@ struct LedgerReplayer_test : public beast::unit_test::suite TaskStatus::Completed, deltaStatuses)); // deltaStatuses no change BEAST_EXPECT(net.client.waitForLedgers(finalHash_moreEarly, totalReplay)); - BEAST_EXPECT(net.client.countsAsExpected(4, 3, 2 * (totalReplay - 1) + 2)); + BEAST_EXPECT(net.client.countsAsExpected(4, 3, (2 * (totalReplay - 1)) + 2)); // cover net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay * 3); - deltaStatuses = std::vector(totalReplay * 3 - 1, TaskStatus::Completed); + deltaStatuses = std::vector((totalReplay * 3) - 1, TaskStatus::Completed); BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay * 3, @@ -1360,7 +1353,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite TaskStatus::Completed, deltaStatuses)); // deltaStatuses changed BEAST_EXPECT(net.client.waitForLedgers(finalHash, totalReplay * 3)); - BEAST_EXPECT(net.client.countsAsExpected(5, 3, totalReplay * 3 - 1)); + BEAST_EXPECT(net.client.countsAsExpected(5, 3, (totalReplay * 3) - 1)); // sweep net.client.replayer.sweep(); @@ -1396,7 +1389,7 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite testSkipListTimeout() { testcase("SkipListAcquire timeout"); - int totalReplay = 3; + int const totalReplay = 3; NetworkOfTwo net( *this, {totalReplay + 1}, @@ -1405,10 +1398,10 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); - std::vector deltaStatuses; + std::vector const deltaStatuses; BEAST_EXPECT(net.client.waitAndCheckStatus( finalHash, totalReplay, TaskStatus::Failed, TaskStatus::Failed, deltaStatuses)); @@ -1422,7 +1415,7 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite testLedgerDeltaTimeout() { testcase("LedgerDeltaAcquire timeout"); - int totalReplay = 3; + int const totalReplay = 3; NetworkOfTwo net( *this, {totalReplay + 1}, @@ -1431,7 +1424,7 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite PeerFeature::LedgerReplayEnabled); auto l = net.server.ledgerMaster.getClosedLedger(); - uint256 finalHash = l->header().hash; + uint256 const finalHash = l->header().hash; net.client.ledgerMaster.storeLedger(l); net.client.replayer.replay(InboundLedger::Reason::GENERIC, finalHash, totalReplay); @@ -1460,11 +1453,11 @@ struct LedgerReplayerLong_test : public beast::unit_test::suite run() override { testcase("Acquire 1000 ledgers"); - int totalReplay = 250; - int rounds = 4; + int const totalReplay = 250; + int const rounds = 4; NetworkOfTwo net( *this, - {totalReplay * rounds + 1}, + {(totalReplay * rounds) + 1}, PeerSetBehavior::Good, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1487,7 +1480,7 @@ struct LedgerReplayerLong_test : public beast::unit_test::suite InboundLedger::Reason::GENERIC, finishHashes[i], totalReplay); } - std::vector deltaStatuses(totalReplay - 1, TaskStatus::Completed); + std::vector const deltaStatuses(totalReplay - 1, TaskStatus::Completed); for (int i = 0; i < rounds; ++i) { BEAST_EXPECT(net.client.waitAndCheckStatus( diff --git a/src/test/app/LendingHelpers_test.cpp b/src/test/app/LendingHelpers_test.cpp index 24661c18fb..56db553583 100644 --- a/src/test/app/LendingHelpers_test.cpp +++ b/src/test/app/LendingHelpers_test.cpp @@ -593,7 +593,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; @@ -680,7 +680,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; @@ -773,7 +773,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; @@ -872,7 +872,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; @@ -979,7 +979,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; @@ -1086,7 +1086,7 @@ class LendingHelpers_test : public beast::unit_test::suite using namespace jtx; using namespace xrpl::detail; - Env env{*this}; + Env const env{*this}; Account const issuer{"issuer"}; PrettyAsset const asset = issuer["USD"]; std::int32_t const loanScale = -5; diff --git a/src/test/app/LoadFeeTrack_test.cpp b/src/test/app/LoadFeeTrack_test.cpp index fed76288ef..68ebcc70a1 100644 --- a/src/test/app/LoadFeeTrack_test.cpp +++ b/src/test/app/LoadFeeTrack_test.cpp @@ -13,7 +13,7 @@ public: run() override { Config d; // get a default configuration object - LoadFeeTrack l; + LoadFeeTrack const l; { Fees const fees = [&]() { Fees f; diff --git a/src/test/app/LoanBroker_test.cpp b/src/test/app/LoanBroker_test.cpp index 361f70209f..f7222aa61a 100644 --- a/src/test/app/LoanBroker_test.cpp +++ b/src/test/app/LoanBroker_test.cpp @@ -31,7 +31,7 @@ class LoanBroker_test : public beast::unit_test::suite // Try to create a vault PrettyAsset const asset{xrpIssue(), 1'000'000}; - Vault vault{env}; + Vault const vault{env}; auto const [tx, keylet] = vault.create({.owner = alice, .asset = asset}); env(tx, ter(goodVault ? ter(tesSUCCESS) : ter(temDISABLED))); env.close(); @@ -493,14 +493,14 @@ class LoanBroker_test : public beast::unit_test::suite // MPT. That'll require three corresponding SAVs. Env env(*this, all); - Account issuer{"issuer"}; + Account const issuer{"issuer"}; // For simplicity, alice will be the sole actor for the vault & brokers. Account alice{"alice"}; // Evan will attempt to be naughty Account evan{"evan"}; // Bystander doesn't have anything to do with the SAV or Broker, or any // of the relevant tokens - Account bystander{"bystander"}; + Account const bystander{"bystander"}; Vault vault{env}; // Fund the accounts and trust lines with the same amount so that tests @@ -807,7 +807,7 @@ class LoanBroker_test : public beast::unit_test::suite Account const issuer{"issuer"}; Account const alice{"alice"}; Env env(*this); - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(100'000), issuer, alice); env.close(); @@ -1070,7 +1070,7 @@ class LoanBroker_test : public beast::unit_test::suite env(jtx, ter(temINVALID)); // holder == beast::zero - STAmount bad(Issue{USD.currency, beast::zero}, 100); + STAmount const bad(Issue{USD.currency, beast::zero}, 100); jtx.jv[sfAmount] = bad.getJson(); jtx.stx = env.ust(jtx); Serializer s; @@ -1091,7 +1091,7 @@ class LoanBroker_test : public beast::unit_test::suite // MPTCanClawback is not set testLoanBroker( [&](Env& env, Account const& issuer, Account const& alice) -> MPT { - MPTTester mpt({.env = env, .issuer = issuer, .holders = {alice}}); + MPTTester const mpt({.env = env, .issuer = issuer, .holders = {alice}}); return mpt; }, CoverClawback); @@ -1171,7 +1171,7 @@ class LoanBroker_test : public beast::unit_test::suite // Create a Vault owned by alice with an XRP asset PrettyAsset const asset{xrpIssue(), 1}; - Vault vault{env}; + Vault const vault{env}; auto const [createTx, vaultKeylet] = vault.create({.owner = alice, .asset = asset}); env(createTx); env.close(); @@ -1193,7 +1193,7 @@ class LoanBroker_test : public beast::unit_test::suite // vault SLE OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kWarning}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac{env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; if (auto sleBroker = ac.view().peek(keylet::loanbroker(brokerKeylet.key))) @@ -1207,7 +1207,7 @@ class LoanBroker_test : public beast::unit_test::suite // Invoke preclaim against the mutated (ApplyView) view; triggers // nullptr deref - PreclaimContext pctx{env.app(), ac.view(), tesSUCCESS, tx, tapNONE, jlog}; + PreclaimContext const pctx{env.app(), ac.view(), tesSUCCESS, tx, tapNONE, jlog}; (void)LoanBrokerCoverDeposit::preclaim(pctx); } @@ -1326,7 +1326,7 @@ class LoanBroker_test : public beast::unit_test::suite Account const issuer{"issuer"}; Account const alice{"alice"}; Env env(*this); - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(100'000), issuer, alice); env.close(); @@ -1348,7 +1348,7 @@ class LoanBroker_test : public beast::unit_test::suite env(tx); env.close(); auto const le = env.le(vaultKeylet); - VaultInfo vaultInfo = [&]() { + VaultInfo const vaultInfo = [&]() { if (BEAST_EXPECT(le)) return VaultInfo{asset, vaultKeylet.key, le->at(sfAccount)}; return VaultInfo{asset, {}, {}}; @@ -1438,7 +1438,7 @@ class LoanBroker_test : public beast::unit_test::suite auto const [token, deposit, err] = getToken(env); - Vault vault(env); + Vault const vault(env); auto const [tx, keylet] = vault.create({.owner = broker, .asset = token.asset()}); env(tx); env.close(); @@ -1466,7 +1466,7 @@ class LoanBroker_test : public beast::unit_test::suite std::optional, // max amount std::uint64_t, // deposit amount TER>> // expected error - mptTests = { + const mptTests = { // issuer can issue up to 2'000 tokens {2'000, 4'000, 1'000, tesSUCCESS}, // issuer can issue 500 tokens (250 VaultDeposit + @@ -1509,7 +1509,7 @@ class LoanBroker_test : public beast::unit_test::suite env.fund(XRP(20'000), issuer, lender, borrower); auto const IOU = issuer["IOU"]; - Vault vault{env}; + Vault const vault{env}; auto [tx, vaultKeylet] = vault.create({.owner = lender, .asset = IOU.asset()}); env(tx); env.close(); @@ -1597,7 +1597,7 @@ class LoanBroker_test : public beast::unit_test::suite env(pay(issuer, broker, token(2'000))); env.close(); - Vault vault(env); + Vault const vault(env); auto const [tx, keylet] = vault.create({.owner = broker, .asset = token.asset()}); env(tx); env.close(); @@ -1718,7 +1718,7 @@ class LoanBroker_test : public beast::unit_test::suite auto const& token = *maybeToken; - Vault vault(env); + Vault const vault(env); auto const [tx, keylet] = vault.create({.owner = broker, .asset = token.asset()}); env(tx); env.close(); diff --git a/src/test/app/Loan_test.cpp b/src/test/app/Loan_test.cpp index 171e2eddb5..a63d31f030 100644 --- a/src/test/app/Loan_test.cpp +++ b/src/test/app/Loan_test.cpp @@ -87,7 +87,7 @@ protected: Number maxCoveredLoanValue(Number const& currentDebt) const { - NumberRoundModeGuard mg(Number::downward); + NumberRoundModeGuard const mg(Number::downward); auto debtLimit = coverDeposit * tenthBipsPerUnity.value() / coverRateMin.value(); return debtLimit - currentDebt; @@ -388,7 +388,7 @@ protected: if (auto vaultSle = env.le(keylet::vault(brokerSle->at(sfVaultID))); env.test.BEAST_EXPECT(vaultSle)) { - if ((flags & lsfLoanImpaired) && !(flags & lsfLoanDefault)) + if (((flags & lsfLoanImpaired) != 0u) && ((flags & lsfLoanDefault) == 0u)) { env.test.BEAST_EXPECT( vaultSle->at(sfLossUnrealized) == @@ -429,7 +429,7 @@ protected: { using namespace jtx; - Vault vault{env}; + Vault const vault{env}; auto const deposit = asset(params.vaultDeposit); auto const debtMaximumValue = asset(params.debtMax).value(); @@ -520,7 +520,7 @@ protected: : std::max(broker.vaultScale(env), state.principalOutstanding.exponent()))); BEAST_EXPECT(state.paymentInterval == 600); { - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); BEAST_EXPECT( state.totalValue == roundToAsset( @@ -746,7 +746,7 @@ protected: return std::make_tuple(broker, loanKeylet, pseudoAcct); } - void + static void topUpBorrower( jtx::Env& env, BrokerInfo const& broker, @@ -1149,7 +1149,7 @@ protected: auto loanKeylet = std::get(*loanResult); auto pseudoAcct = std::get(*loanResult); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); makeLoanPayments( env, @@ -1439,7 +1439,7 @@ protected: // Either the borrower or the lender can delete the loan. Alternate // between who does it across tests. static unsigned deleteCounter = 0; - auto const deleter = ++deleteCounter % 2 ? lender : borrower; + auto const deleter = ((++deleteCounter % 2) != 0u) ? lender : borrower; env(del(deleter, keylet.key)); env.close(); @@ -1468,7 +1468,7 @@ protected: } } - std::string + static std::string getCurrencyLabel(Asset const& asset) { if (asset.native()) @@ -1539,7 +1539,7 @@ protected: auto const pseudoAcct = [&]() { auto const brokerSle = env.le(keylet::loanbroker(broker.brokerID)); if (!BEAST_EXPECT(brokerSle)) - return lender; + return Account{lender}; auto const brokerPseudo = brokerSle->at(sfAccount); return Account("Broker pseudo-account", brokerPseudo); }(); @@ -1809,9 +1809,9 @@ protected: if (!BEAST_EXPECT(vaultSle)) { // This will be wrong, but the test has failed anyway. - return lender; + return Account{lender}; } - auto const vaultPseudo = Account("Vault pseudo-account", vaultSle->at(sfAccount)); + auto vaultPseudo = Account("Vault pseudo-account", vaultSle->at(sfAccount)); return vaultPseudo; }(); @@ -1822,7 +1822,7 @@ protected: std::function, TER> { // Freeze / lock the asset - std::function empty; + std::function const empty; if (broker.asset.native()) { // XRP can't be frozen @@ -1943,7 +1943,7 @@ protected: ? 0 : std::max( broker.vaultScale(env), state.principalOutstanding.exponent()))); - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); auto const defaultAmount = roundToAsset( broker.asset, std::min( @@ -2149,7 +2149,7 @@ protected: state.totalValue = 0; state.managementFeeOutstanding = 0; state.previousPaymentDate = - state.nextPaymentDate + state.paymentInterval * (numPayments - 1); + state.nextPaymentDate + (state.paymentInterval * (numPayments - 1)); state.nextPaymentDate = 0; verifyLoanStatus(state); @@ -2235,7 +2235,7 @@ protected: // service fee is 2 auto const startingPayments = state.paymentRemaining; STAmount const payoffAmount = [&]() { - NumberRoundModeGuard mg(Number::upward); + NumberRoundModeGuard const mg(Number::upward); auto const rawPayoff = startingPayments * (state.periodicPayment + broker.asset(2).value()); STAmount payoffAmount{broker.asset, rawPayoff}; @@ -2835,7 +2835,7 @@ protected: {.flags = tfMPTCanTransfer | tfMPTCanLock | (args.requireAuth ? tfMPTRequireAuth : none)}); env.close(); - PrettyAsset mptAsset = mptt.issuanceID(); + PrettyAsset const mptAsset = mptt.issuanceID(); mptt.authorize({.account = lender}); mptt.authorize({.account = borrower}); env.close(); @@ -2875,6 +2875,7 @@ protected: // Create vaults and loan brokers std::array const assets{mptAsset, iouAsset}; std::vector brokers; + brokers.reserve(assets.size()); for (auto const& asset : assets) { brokers.emplace_back(createVaultAndBroker(env, asset, lender)); @@ -2961,7 +2962,7 @@ protected: CaseArgs{.requireAuth = true}); auto const [acctReserve, incReserve] = [this]() -> std::pair { - Env env{*this, testable_amendments()}; + Env const env{*this, testable_amendments()}; return { env.current()->fees().accountReserve(0).drops() / DROPS_PER_XRP.drops(), env.current()->fees().increment.drops() / DROPS_PER_XRP.drops()}; @@ -2983,7 +2984,7 @@ protected: BEAST_EXPECT(sleMPT1 == nullptr); // Burn some XRP - env(noop(borrower), fee(XRP(acctReserve * 2 + incReserve * 2))); + env(noop(borrower), fee(XRP((acctReserve * 2) + (incReserve * 2)))); env.close(); // Cannot create loan, not enough reserve to create MPToken @@ -3007,7 +3008,7 @@ protected: BEAST_EXPECT(sleMPT2 != nullptr); }, {}, - CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1}); + CaseArgs{.initialXRP = (acctReserve * 2) + (incReserve * 8) + 1}); testCase( {}, @@ -3029,7 +3030,7 @@ protected: BEAST_EXPECT(sleLine1 == nullptr); // Burn some XRP - env(noop(borrower), fee(XRP(acctReserve * 2 + incReserve * 2))); + env(noop(borrower), fee(XRP((acctReserve * 2) + (incReserve * 2)))); env.close(); // Cannot create loan, not enough reserve to create trust line @@ -3052,7 +3053,7 @@ protected: auto const sleLine2 = env.le(trustline); BEAST_EXPECT(sleLine2 != nullptr); }, - CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1}); + CaseArgs{.initialXRP = (acctReserve * 2) + (incReserve * 8) + 1}); testCase( [&, this](Env& env, BrokerInfo const& broker, MPTTester& mptt) { @@ -3102,7 +3103,7 @@ protected: BEAST_EXPECT(sleMPT3 != nullptr); }, {}, - CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1}); + CaseArgs{.initialXRP = (acctReserve * 2) + (incReserve * 8) + 1}); testCase( {}, @@ -3152,7 +3153,7 @@ protected: auto const sleLine3 = env.le(trustline); BEAST_EXPECT(sleLine3 != nullptr); }, - CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1}); + CaseArgs{.initialXRP = (acctReserve * 2) + (incReserve * 8) + 1}); testCase( [&, this](Env& env, BrokerInfo const& broker, MPTTester& mptt) { @@ -3246,7 +3247,7 @@ protected: jtx::Account const alice{"alice"}; jtx::Account const bella{"bella"}; auto const msigSetup = [&](Env& env, Account const& account) { - Json::Value tx1 = signers(account, 2, {{alice, 1}, {bella, 1}}); + Json::Value const tx1 = signers(account, 2, {{alice, 1}, {bella, 1}}); env(tx1); env.close(); }; @@ -3313,7 +3314,7 @@ protected: [&, this](Env& env, BrokerInfo const& broker, auto&) { using namespace loan; Number const principalRequest = broker.asset(1'000).value(); - Vault vault{env}; + Vault const vault{env}; auto tx = vault.set({.owner = lender, .id = broker.vaultID}); tx[sfAssetsMaximum] = BrokerParameters::defaults().vaultDeposit; env(tx); @@ -3333,7 +3334,7 @@ protected: [&, this](Env& env, BrokerInfo const& broker, auto&) { using namespace loan; Number const principalRequest = broker.asset(1'000).value(); - Vault vault{env}; + Vault const vault{env}; auto tx = vault.set({.owner = lender, .id = broker.vaultID}); tx[sfAssetsMaximum] = BrokerParameters::defaults().vaultDeposit + broker.asset(1).number(); @@ -3408,6 +3409,7 @@ protected: // Create vaults and loan brokers std::vector brokers; + brokers.reserve(assets.size()); for (auto const& asset : assets) { brokers.emplace_back(createVaultAndBroker( @@ -3599,13 +3601,13 @@ protected: Account const lender{"lender"}; Account const borrower{"borrower"}; - BrokerParameters brokerParams; + BrokerParameters const brokerParams; env.fund(XRP(brokerParams.vaultDeposit * 100), lender, borrower); env.close(); PrettyAsset const xrpAsset{xrpIssue(), 1'000'000}; - BrokerInfo broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; + BrokerInfo const broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; using namespace loan; @@ -3662,13 +3664,13 @@ protected: Account const issuer{"issuer"}; Account const lender{"lender"}; - BrokerParameters brokerParams{.debtMax = 0}; + BrokerParameters const brokerParams{.debtMax = 0}; env.fund(XRP(brokerParams.vaultDeposit * 100), issuer, noripple(lender)); env.close(); PrettyAsset const xrpAsset{xrpIssue(), 1'000'000}; - BrokerInfo broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; + BrokerInfo const broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; if (auto const brokerSle = env.le(keylet::loanbroker(broker.brokerID)); BEAST_EXPECT(brokerSle)) @@ -3710,12 +3712,12 @@ protected: Account const lender{"lender"}; Account const borrower{"borrower"}; - BrokerParameters brokerParams; + BrokerParameters const brokerParams; env.fund(XRP(brokerParams.vaultDeposit * 100), issuer, lender, borrower); env.close(); PrettyAsset const xrpAsset{xrpIssue(), 1'000'000}; - BrokerInfo broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; + BrokerInfo const broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)}; using namespace loan; @@ -3784,9 +3786,9 @@ protected: Account const alice{"alice"}; std::string const borrowerPass = "borrower"; - Account borrower{borrowerPass, KeyType::ed25519}; + Account const borrower{borrowerPass, KeyType::ed25519}; auto const lenderPass = "lender"; - Account lender{lenderPass, KeyType::ed25519}; + Account const lender{lenderPass, KeyType::ed25519}; env.fund(XRP(1'000'000), alice, lender, borrower); env.close(); @@ -4167,7 +4169,8 @@ protected: env.fund(XRP(1'000), issuer, lender); std::int64_t constexpr issuerBalance = 10'000'000; - MPTTester asset({.env = env, .issuer = issuer, .holders = {lender}, .pay = issuerBalance}); + MPTTester const asset( + {.env = env, .issuer = issuer, .holders = {lender}, .pay = issuerBalance}); BrokerParameters const brokerParams{ .debtMax = 200, @@ -4317,7 +4320,7 @@ protected: env.fund(XRP(1'000), lender, issuer, borrower); env(trust(lender, IOU(10'000'000))); env(pay(issuer, lender, IOU(5'000'000))); - BrokerInfo brokerInfo{createVaultAndBroker(env, issuer["IOU"], lender)}; + BrokerInfo const brokerInfo{createVaultAndBroker(env, issuer["IOU"], lender)}; auto const loanSetFee = fee(env.current()->fees().base * 2); Number const debtMaximumRequest = brokerInfo.asset(1'000).value(); @@ -4379,7 +4382,7 @@ protected: // can it happen? the signature is checked before transactor // executes - JTx tx = env.jt( + JTx const tx = env.jt( set(borrower, brokerInfo.brokerID, debtMaximumRequest), sig(sfCounterpartySignature, lender), loanSetFee); @@ -4468,7 +4471,7 @@ protected: env(pay(issuer, borrower, mptAsset(1'000))); env.close(); - BrokerInfo broker{createVaultAndBroker(env, mptAsset, lender)}; + BrokerInfo const broker{createVaultAndBroker(env, mptAsset, lender)}; using namespace loan; @@ -4566,12 +4569,12 @@ protected: auto const pseudoAcct = [&]() { auto const brokerSle = env.le(keylet::loanbroker(broker.brokerID)); if (!BEAST_EXPECT(brokerSle)) - return lender; + return Account{lender}; auto const brokerPseudo = brokerSle->at(sfAccount); return Account("Broker pseudo-account", brokerPseudo); }(); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, keylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, keylet); auto const originalState = getCurrentState(env, broker, keylet); verifyLoanStatus(originalState); @@ -4622,7 +4625,7 @@ protected: env(payIssuerTx); env.close(); - BrokerInfo broker{createVaultAndBroker(env, iouAsset, lender)}; + BrokerInfo const broker{createVaultAndBroker(env, iouAsset, lender)}; using namespace loan; @@ -4684,7 +4687,7 @@ protected: env(pay(issuer, borrower, iouAsset(1'000))); env.close(); - BrokerInfo broker{createVaultAndBroker(env, iouAsset, lender)}; + BrokerInfo const broker{createVaultAndBroker(env, iouAsset, lender)}; using namespace loan; @@ -4766,7 +4769,7 @@ protected: env(payIssuerTx); env.close(); - BrokerInfo broker{createVaultAndBroker(env, iouAsset, lender)}; + BrokerInfo const broker{createVaultAndBroker(env, iouAsset, lender)}; using namespace loan; @@ -4865,7 +4868,7 @@ protected: env(payIssuerTx); env.close(); - BrokerInfo broker{createVaultAndBroker(env, iouAsset, lender)}; + BrokerInfo const broker{createVaultAndBroker(env, iouAsset, lender)}; { auto const coverDepositValue = broker.asset(broker.params.coverDeposit * 10).value(); env(loanBroker::coverDeposit(lender, broker.brokerID, coverDepositValue)); @@ -5153,7 +5156,7 @@ protected: // pay all but the last payment { - NumberRoundModeGuard mg{Number::upward}; + NumberRoundModeGuard const mg{Number::upward}; Number const payment = beforeState.periodicPayment * (total - 1); XRPAmount const payFee{baseFee * ((total - 1) / loanPaymentsPerFeeIncrement + 1)}; STAmount const paymentAmount = @@ -5257,7 +5260,7 @@ protected: env(pay(issuer, alice, asset(100))); env.close(); - Vault vault{env}; + Vault const vault{env}; auto const [createTx, vaultKeylet] = vault.create({.owner = alice, .asset = asset}); env(createTx); env.close(); @@ -5593,7 +5596,7 @@ protected: env.close(); PrettyAsset const asset{xrpIssue(), 1'000'000}; - BrokerParameters brokerParams{}; + BrokerParameters const brokerParams{}; auto const broker = createVaultAndBroker(env, asset, lender, brokerParams); // Create a 3-payment loan so full-payment path is enabled after 1 @@ -5790,10 +5793,10 @@ protected: Env env(*this, all); // Setup: Create accounts - Account issuer{"issuer"}; - Account lender{"lender"}; - Account borrower{"borrower"}; - Account victim{"victim"}; + Account const issuer{"issuer"}; + Account const lender{"lender"}; + Account const borrower{"borrower"}; + Account const victim{"victim"}; env.fund(XRP(1'000'000'00), issuer, lender, borrower, victim); env.close(); @@ -5808,7 +5811,7 @@ protected: env(pay(issuer, victim, asset(50000))); env.close(); - BrokerParameters brokerParams{ + BrokerParameters const brokerParams{ .vaultDeposit = 10000, .debtMax = Number{0}, .coverRateMin = TenthBips32{1000}, @@ -5836,8 +5839,8 @@ protected: { auto const vaultSle = env.le(vaultKeylet); - Number assetsTotal = vaultSle->at(sfAssetsTotal); - Number assetsAvail = vaultSle->at(sfAssetsAvailable); + Number const assetsTotal = vaultSle->at(sfAssetsTotal); + Number const assetsAvail = vaultSle->at(sfAssetsAvailable); log << "Before loan creation:" << std::endl; log << " AssetsTotal: " << assetsTotal << std::endl; @@ -5869,8 +5872,8 @@ protected: { auto const vaultSle = env.le(vaultKeylet); - Number assetsTotal = vaultSle->at(sfAssetsTotal); - Number assetsAvail = vaultSle->at(sfAssetsAvailable); + Number const assetsTotal = vaultSle->at(sfAssetsTotal); + Number const assetsAvail = vaultSle->at(sfAssetsAvailable); log << "After loan creation:" << std::endl; log << " AssetsTotal: " << assetsTotal << std::endl; @@ -5907,8 +5910,8 @@ protected: // Step 8: Verify phantom assets created { auto const vaultSle2 = env.le(vaultKeylet); - Number assetsTotal2 = vaultSle2->at(sfAssetsTotal); - Number assetsAvail2 = vaultSle2->at(sfAssetsAvailable); + Number const assetsTotal2 = vaultSle2->at(sfAssetsTotal); + Number const assetsAvail2 = vaultSle2->at(sfAssetsAvailable); log << "After default:" << std::endl; log << " AssetsTotal: " << assetsTotal2 << std::endl; @@ -6031,7 +6034,7 @@ protected: auto loanKeylet = std::get(*loanResult); auto pseudoAcct = std::get(*loanResult); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); if (auto const brokerSle = env.le(broker.brokerKeylet()); BEAST_EXPECT(brokerSle)) { @@ -6075,7 +6078,7 @@ protected: auto const txfee = fee(XRP(100)); Env env(*this); - Vault vault(env); + Vault const vault(env); env.fund(XRP(10'000), lender, issuer, borrower, depositor); env.close(); @@ -6135,7 +6138,7 @@ protected: env.close(); // Vault with XRP asset - Vault vault{env}; + Vault const vault{env}; auto [vaultCreate, vaultKeylet] = vault.create({.owner = lender, .asset = xrpIssue()}); env(vaultCreate); env.close(); @@ -6237,7 +6240,7 @@ protected: auto loanKeylet = std::get(*loanResult); auto pseudoAcct = std::get(*loanResult); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); makeLoanPayments( env, @@ -6264,7 +6267,7 @@ protected: auto testLoanAsset = [&](auto&& getMaxDebt, auto const& borrower) { Env env(*this); - Vault vault(env); + Vault const vault(env); if (borrower == broker) { @@ -6357,7 +6360,7 @@ protected: borrowerAcct); testLoanAsset( [&](Env& env) -> STAmount { - MPTTester mpt( + MPTTester const mpt( {.env = env, .issuer = issuer, .holders = {broker, depositor}, @@ -6401,7 +6404,7 @@ protected: auto loanKeylet = std::get(*loanResult); auto pseudoAcct = std::get(*loanResult); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); makeLoanPayments( env, @@ -6457,7 +6460,7 @@ protected: auto loanKeylet = std::get(*loanResult); auto pseudoAcct = std::get(*loanResult); - VerifyLoanStatus verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); + VerifyLoanStatus const verifyLoanStatus(env, broker, pseudoAcct, loanKeylet); auto const state = getCurrentState(env, broker, loanKeylet); @@ -6468,7 +6471,7 @@ protected: tfLoanOverpayment)); env.close(); - PaymentParameters paymentParams{ + PaymentParameters const paymentParams{ .showStepBalances = false, .validateBalances = true, }; @@ -7075,20 +7078,20 @@ protected: Account const borrower("borrower"); // Determine all the random parameters at once - AssetType assetType = static_cast(assetDist(engine_)); + AssetType const assetType = static_cast(assetDist(engine_)); auto const principalRequest = principalDist(engine_); - TenthBips16 managementFeeRate{managementFeeRateDist(engine_)}; + TenthBips16 const managementFeeRate{managementFeeRateDist(engine_)}; auto const serviceFee = serviceFeeDist(engine_); TenthBips32 interest{interestRateDist(engine_)}; auto const payTotal = paymentTotalDist(engine_); auto const payInterval = paymentIntervalDist(engine_); - BrokerParameters brokerParams{ + BrokerParameters const brokerParams{ .vaultDeposit = principalRequest * 10, .debtMax = 0, .coverRateMin = TenthBips32{0}, .managementFeeRate = managementFeeRate}; - LoanParameters loanParams{ + LoanParameters const loanParams{ .account = lender, .counter = borrower, .principalRequest = principalRequest, @@ -7106,7 +7109,7 @@ public: run() override { auto const numIterations = [s = arg()]() -> int { - int defaultNum = 5; + int const defaultNum = 5; if (s.empty()) return defaultNum; try diff --git a/src/test/app/MPToken_test.cpp b/src/test/app/MPToken_test.cpp index 5a90a3a71e..81fcec4b7a 100644 --- a/src/test/app/MPToken_test.cpp +++ b/src/test/app/MPToken_test.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -827,7 +828,7 @@ class MPToken_test : public beast::unit_test::suite env.fund(XRP(1'000), alice); env.fund(XRP(1'000), bob); - STAmount mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; + STAmount const mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; env(pay(alice, bob, mpt), ter(temDISABLED)); } @@ -841,7 +842,7 @@ class MPToken_test : public beast::unit_test::suite env.fund(XRP(1'000), alice); env.fund(XRP(1'000), carol); - STAmount mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; + STAmount const mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; Json::Value jv; jv[jss::secret] = alice.name(); @@ -1457,7 +1458,7 @@ class MPToken_test : public beast::unit_test::suite { Env env{*this, features}; env.fund(XRP(1'000), alice, bob); - STAmount mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; + STAmount const mpt{MPTIssue{makeMptID(1, alice)}, UINT64_C(100)}; Json::Value jv; jv[jss::secret] = alice.name(); jv[jss::tx_json] = pay(alice, bob, mpt); @@ -1805,7 +1806,7 @@ class MPToken_test : public beast::unit_test::suite Account const alice("alice"); auto const USD = alice["USD"]; Account const carol("carol"); - MPTIssue issue(makeMptID(1, alice)); + MPTIssue const issue(makeMptID(1, alice)); STAmount mpt{issue, UINT64_C(100)}; auto const jvb = bridge(alice, USD, alice, USD); for (auto const& feature : {features, features - featureMPTokensV1}) @@ -2876,7 +2877,7 @@ class MPToken_test : public beast::unit_test::suite mptAlice.create( {.metadata = "test", .ownerCount = 1, .mutableFlags = tmfMPTCanMutateMetadata}); - std::vector metadatas = { + std::vector const metadatas = { "mutate metadata", "mutate metadata 2", "mutate metadata 3", @@ -3272,6 +3273,123 @@ class MPToken_test : public beast::unit_test::suite mptAlice.claw(alice, bob, 1, tecNO_PERMISSION); } + void + testMultiSendMaximumAmount(FeatureBitset features) + { + // Verify that rippleSendMultiMPT correctly enforces MaximumAmount + // when the issuer sends to multiple receivers. Pre-fixSecurity3_1_3, + // a stale view.read() snapshot caused per-iteration checks to miss + // aggregate overflows. Post-fix, a running total is used instead. + testcase("Multi-send MaximumAmount enforcement"); + + using namespace test::jtx; + + Account const issuer("issuer"); + Account const alice("alice"); + Account const bob("bob"); + + std::uint64_t constexpr maxAmt = 150; + Env env{*this, features}; + + MPTTester mptt(env, issuer, {.holders = {alice, bob}}); + mptt.create({.maxAmt = maxAmt, .ownerCount = 1, .flags = tfMPTCanTransfer}); + mptt.authorize({.account = alice}); + mptt.authorize({.account = bob}); + + Asset const asset{MPTIssue{mptt.issuanceID()}}; + + // Each test case creates a fresh ApplyView and calls + // accountSendMulti from the issuer to the given receivers. + auto const runTest = [&](MultiplePaymentDestinations const& receivers, + TER expectedTer, + std::optional expectedOutstanding, + std::string const& label) { + ApplyViewImpl av(&*env.current(), tapNONE); + auto const ter = + accountSendMulti(av, issuer.id(), asset, receivers, env.app().getJournal("View")); + BEAST_EXPECTS(ter == expectedTer, label); + + // Only verify OutstandingAmount on success — on error the + // view may contain partial state and must be discarded. + if (expectedOutstanding) + { + auto const sle = av.peek(keylet::mptIssuance(mptt.issuanceID())); + if (!BEAST_EXPECT(sle)) + return; + BEAST_EXPECTS(sle->getFieldU64(sfOutstandingAmount) == *expectedOutstanding, label); + } + }; + + using R = MultiplePaymentDestinations; + + // Post-amendment: aggregate check with running total + runTest( + R{{alice.id(), 100}, {bob.id(), 100}}, + tecPATH_DRY, + std::nullopt, + "aggregate exceeds max"); + + runTest(R{{alice.id(), 75}, {bob.id(), 75}}, tesSUCCESS, maxAmt, "aggregate at boundary"); + + runTest(R{{alice.id(), 50}, {bob.id(), 50}}, tesSUCCESS, 100, "aggregate within limit"); + + runTest( + R{{alice.id(), 150}, {bob.id(), 0}}, + tesSUCCESS, + maxAmt, + "one receiver at max, other zero"); + + runTest( + R{{alice.id(), 151}, {bob.id(), 0}}, + tecPATH_DRY, + std::nullopt, + "one receiver exceeds max, other zero"); + + // Issue 50 tokens so outstandingAmount is nonzero, then verify + // the third condition: outstandingAmount > maximumAmount - sendAmount - totalSendAmount + mptt.pay(issuer, alice, 50); + env.close(); + + // maxAmt=150, outstanding=50, so 100 more available + runTest( + R{{alice.id(), 50}, {bob.id(), 50}}, + tesSUCCESS, + maxAmt, + "nonzero outstanding, aggregate at boundary"); + + runTest( + R{{alice.id(), 50}, {bob.id(), 51}}, + tecPATH_DRY, + std::nullopt, + "nonzero outstanding, aggregate exceeds max"); + + runTest( + R{{alice.id(), 100}, {bob.id(), 0}}, + tesSUCCESS, + maxAmt, + "nonzero outstanding, single send at remaining capacity"); + + runTest( + R{{alice.id(), 101}, {bob.id(), 0}}, + tecPATH_DRY, + std::nullopt, + "nonzero outstanding, single send exceeds remaining capacity"); + + // Pre-amendment: the stale per-iteration check allows each + // individual send (100 <= 150) even though the aggregate (200) + // exceeds MaximumAmount. Preserved for ledger replay. + { + // KNOWN BUG (pre-fixSecurity3_1_3): preserved for ledger replay only + env.disableFeature(fixSecurity3_1_3); + runTest( + R{{alice.id(), 100}, {bob.id(), 100}}, + tesSUCCESS, + 250, + "pre-amendment allows over-send"); + env.enableFeature(fixSecurity3_1_3); + } + } + public: void run() override @@ -3279,6 +3397,7 @@ public: using namespace test::jtx; FeatureBitset const all{testable_amendments()}; + testMultiSendMaximumAmount(all); // MPTokenIssuanceCreate testCreateValidation(all - featureSingleAssetVault); testCreateValidation(all - featurePermissionedDomains); diff --git a/src/test/app/Manifest_test.cpp b/src/test/app/Manifest_test.cpp index 609b7bdb89..c2f789e80c 100644 --- a/src/test/app/Manifest_test.cpp +++ b/src/test/app/Manifest_test.cpp @@ -87,7 +87,7 @@ public: } } - std::string + static std::string makeManifestString( PublicKey const& pk, SecretKey const& sk, @@ -147,9 +147,8 @@ public: Serializer s; st.add(s); - // m is non-const so it can be moved from - std::string m(static_cast(s.data()), s.size()); - if (auto r = deserializeManifest(std::move(m))) + std::string const m(static_cast(s.data()), s.size()); + if (auto r = deserializeManifest(m)) return std::move(*r); Throw("Could not create a revocation manifest"); return *deserializeManifest(std::string{}); // Silence compiler warning. @@ -182,15 +181,14 @@ public: Serializer s; st.add(s); - std::string m(static_cast(s.data()), - s.size()); // non-const so can be moved - if (auto r = deserializeManifest(std::move(m))) + std::string const m(static_cast(s.data()), s.size()); + if (auto r = deserializeManifest(m)) return std::move(*r); Throw("Could not create a manifest"); return *deserializeManifest(std::string{}); // Silence compiler warning. } - Manifest + static Manifest clone(Manifest const& m) { Manifest m2(m.serialized, m.masterKey, m.signingKey, m.sequence, m.domain); @@ -251,7 +249,9 @@ public: { // save should store all trusted master keys to db std::vector s1; - std::vector keys; + std::vector const keys; + s1.reserve(inManifests.size()); + for (auto const& man : inManifests) s1.push_back(toBase58(TokenType::NodePublic, man->masterKey)); unl->load({}, s1, keys); @@ -603,12 +603,12 @@ public: BEAST_EXPECT(!deserializeManifest(toString(st))); } { // invalid manifest (domain too long) - std::string s(254, 'a'); + std::string const s(254, 'a'); auto const st = buildManifestObject(++sequence, s + ".example.com"); BEAST_EXPECT(!deserializeManifest(toString(st))); } { // invalid manifest (domain component too long) - std::string s(72, 'a'); + std::string const s(72, 'a'); auto const st = buildManifestObject(++sequence, s + ".example.com"); BEAST_EXPECT(!deserializeManifest(toString(st))); } diff --git a/src/test/app/MultiSign_test.cpp b/src/test/app/MultiSign_test.cpp index f96bfba2d2..7a5a49ca9b 100644 --- a/src/test/app/MultiSign_test.cpp +++ b/src/test/app/MultiSign_test.cpp @@ -63,7 +63,7 @@ public: { // Attach a signer list to alice. Should fail. - Json::Value signersList = signers(alice, 1, {{bogie, 1}}); + Json::Value const signersList = signers(alice, 1, {{bogie, 1}}); env(signersList, ter(tecINSUFFICIENT_RESERVE)); env.close(); env.require(owners(alice, 0)); @@ -81,7 +81,7 @@ public: env(pay(env.master, alice, fee - drops(1))); // Replace with the biggest possible signer list. Should fail. - Json::Value bigSigners = signers( + Json::Value const bigSigners = signers( alice, 1, {{bogie, 1}, @@ -163,25 +163,20 @@ public: {spook, 1}}), ter(temBAD_QUORUM)); - // clang-format off // Make a signer list that's too big. Should fail. Account const spare("spare", KeyType::secp256k1); env(signers( alice, 1, - std::vector{{bogie, 1}, {demon, 1}, {ghost, 1}, - {haunt, 1}, {jinni, 1}, {phase, 1}, - {shade, 1}, {spook, 1}, {spare, 1}, - {acc10, 1}, {acc11, 1}, {acc12, 1}, - {acc13, 1}, {acc14, 1}, {acc15, 1}, - {acc16, 1}, {acc17, 1}, {acc18, 1}, - {acc19, 1}, {acc20, 1}, {acc21, 1}, - {acc22, 1}, {acc23, 1}, {acc24, 1}, - {acc25, 1}, {acc26, 1}, {acc27, 1}, - {acc28, 1}, {acc29, 1}, {acc30, 1}, - {acc31, 1}, {acc32, 1}, {acc33, 1}}), + std::vector{ + {bogie, 1}, {demon, 1}, {ghost, 1}, {haunt, 1}, {jinni, 1}, {phase, 1}, + {shade, 1}, {spook, 1}, {spare, 1}, {acc10, 1}, {acc11, 1}, {acc12, 1}, + {acc13, 1}, {acc14, 1}, {acc15, 1}, {acc16, 1}, {acc17, 1}, {acc18, 1}, + {acc19, 1}, {acc20, 1}, {acc21, 1}, {acc22, 1}, {acc23, 1}, {acc24, 1}, + {acc25, 1}, {acc26, 1}, {acc27, 1}, {acc28, 1}, {acc29, 1}, {acc30, 1}, + {acc31, 1}, {acc32, 1}, {acc33, 1}, + }), ter(temMALFORMED)); - // clang-format on env.close(); env.require(owners(alice, 0)); } @@ -1017,7 +1012,7 @@ public: auto const baseFee = env.current()->fees().base; { // Single-sign, but leave an empty SigningPubKey. - JTx tx = env.jt(noop(alice), sig(alice)); + JTx const tx = env.jt(noop(alice), sig(alice)); STTx local = *(tx.stx); local.setFieldVL(sfSigningPubKey, Blob()); // Empty SigningPubKey auto const info = submitSTTx(local); @@ -1027,7 +1022,7 @@ public: } { // Single-sign, but invalidate the signature. - JTx tx = env.jt(noop(alice), sig(alice)); + JTx const tx = env.jt(noop(alice), sig(alice)); STTx local = *(tx.stx); // Flip some bits in the signature. auto badSig = local.getFieldVL(sfTxnSignature); @@ -1041,7 +1036,7 @@ public: } { // Single-sign, but invalidate the sequence number. - JTx tx = env.jt(noop(alice), sig(alice)); + JTx const tx = env.jt(noop(alice), sig(alice)); STTx local = *(tx.stx); // Flip some bits in the signature. auto seq = local.getFieldU32(sfSequence); @@ -1054,7 +1049,7 @@ public: } { // Multisign, but leave a nonempty sfSigningPubKey. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); STTx local = *(tx.stx); local[sfSigningPubKey] = alice.pk(); // Insert sfSigningPubKey auto const info = submitSTTx(local); @@ -1064,7 +1059,7 @@ public: } { // Both multi- and single-sign with an empty SigningPubKey. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); STTx local = *(tx.stx); local.sign(alice.pk(), alice.sk()); local.setFieldVL(sfSigningPubKey, Blob()); // Empty SigningPubKey @@ -1075,7 +1070,7 @@ public: } { // Multisign but invalidate one of the signatures. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); STTx local = *(tx.stx); // Flip some bits in the signature. auto& signer = local.peekFieldArray(sfSigners).back(); @@ -1090,7 +1085,7 @@ public: } { // Multisign with an empty signers array should fail. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie)); STTx local = *(tx.stx); local.peekFieldArray(sfSigners).clear(); // Empty Signers array. auto const info = submitSTTx(local); @@ -1099,7 +1094,7 @@ public: "fails local checks: Invalid Signers array size."); } { - JTx tx = env.jt( + JTx const tx = env.jt( noop(alice), fee(2 * baseFee), @@ -1137,7 +1132,7 @@ public: bogie, bogie, bogie)); - STTx local = *(tx.stx); + STTx const local = *(tx.stx); auto const info = submitSTTx(local); BEAST_EXPECT( info[jss::result][jss::error_exception] == @@ -1145,8 +1140,8 @@ public: } { // The account owner may not multisign for themselves. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(alice)); - STTx local = *(tx.stx); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(alice)); + STTx const local = *(tx.stx); auto const info = submitSTTx(local); BEAST_EXPECT( info[jss::result][jss::error_exception] == @@ -1154,8 +1149,8 @@ public: } { // No duplicate multisignatures allowed. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie, bogie)); - STTx local = *(tx.stx); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie, bogie)); + STTx const local = *(tx.stx); auto const info = submitSTTx(local); BEAST_EXPECT( info[jss::result][jss::error_exception] == @@ -1163,7 +1158,7 @@ public: } { // Multisignatures must be submitted in sorted order. - JTx tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie, demon)); + JTx const tx = env.jt(noop(alice), fee(2 * baseFee), msig(bogie, demon)); STTx local = *(tx.stx); // Unsort the Signers array. auto& signers = local.peekFieldArray(sfSigners); diff --git a/src/test/app/NFTokenAuth_test.cpp b/src/test/app/NFTokenAuth_test.cpp index b973530f41..0e3fb24305 100644 --- a/src/test/app/NFTokenAuth_test.cpp +++ b/src/test/app/NFTokenAuth_test.cpp @@ -6,7 +6,7 @@ namespace xrpl { class NFTokenAuth_test : public beast::unit_test::suite { - auto + static auto mintAndOfferNFT( test::jtx::Env& env, test::jtx::Account const& account, @@ -33,9 +33,9 @@ public: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -88,7 +88,7 @@ public: Env env(*this, features); Account G1{"G1"}; Account A1{"A1"}; - Account A2{"A2"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -110,7 +110,7 @@ public: view.rawInsert(sleA1); return true; }; - env.app().openLedger().modify(unauthTrustline); + env.app().getOpenLedger().modify(unauthTrustline); if (features[fixEnforceNFTokenTrustlineV2]) { @@ -134,7 +134,7 @@ public: Env env(*this, features); Account G1{"G1"}; Account A1{"A1"}; - Account A2{"A2"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -173,7 +173,7 @@ public: view.rawInsert(sleA1); return true; }; - env.app().openLedger().modify(unauthTrustline); + env.app().getOpenLedger().modify(unauthTrustline); if (features[fixEnforceNFTokenTrustlineV2]) { // test: check that offer can't be accepted even with balance @@ -190,9 +190,9 @@ public: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -267,7 +267,7 @@ public: Env env(*this, features); Account G1{"G1"}; Account A1{"A1"}; - Account A2{"A2"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2); @@ -293,7 +293,7 @@ public: view.rawInsert(sleA1); return true; }; - env.app().openLedger().modify(unauthTrustline); + env.app().getOpenLedger().modify(unauthTrustline); if (features[fixEnforceNFTokenTrustlineV2]) { env(token::acceptSellOffer(A1, sellIdx), ter(tecNO_AUTH)); @@ -307,10 +307,10 @@ public: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; - Account broker{"broker"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const broker{"broker"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2, broker); @@ -375,8 +375,8 @@ public: Env env(*this, features); Account G1{"G1"}; Account A1{"A1"}; - Account A2{"A2"}; - Account broker{"broker"}; + Account const A2{"A2"}; + Account const broker{"broker"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2, broker); @@ -412,7 +412,7 @@ public: view.rawInsert(sleA1); return true; }; - env.app().openLedger().modify(unauthTrustline); + env.app().getOpenLedger().modify(unauthTrustline); if (features[fixEnforceNFTokenTrustlineV2]) { @@ -433,10 +433,10 @@ public: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account A1{"A1"}; - Account A2{"A2"}; - Account broker{"broker"}; + Account const G1{"G1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const broker{"broker"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, A1, A2, broker); @@ -507,10 +507,10 @@ public: using namespace test::jtx; Env env(*this, features); - Account G1{"G1"}; - Account minter{"minter"}; - Account A1{"A1"}; - Account A2{"A2"}; + Account const G1{"G1"}; + Account const minter{"minter"}; + Account const A1{"A1"}; + Account const A2{"A2"}; auto const USD{G1["USD"]}; env.fund(XRP(10000), G1, minter, A1, A2); diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index 25f5a0f880..cd0df42c03 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -23,7 +23,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Helper function that returns new nft id for an account and create // specified number of sell offers - uint256 + static uint256 createNftAndOffers( test::jtx::Env& env, test::jtx::Account const& owner, @@ -59,7 +59,7 @@ class NFTokenBurn_test : public beast::unit_test::suite noisy = true, }; - void + static void printNFTPages(test::jtx::Env& env, Volume vol) { Json::Value jvParams; @@ -85,7 +85,7 @@ class NFTokenBurn_test : public beast::unit_test::suite if (state[i].isMember(sfNFTokens.jsonName) && state[i][sfNFTokens.jsonName].isArray()) { - std::uint32_t tokenCount = state[i][sfNFTokens.jsonName].size(); + std::uint32_t const tokenCount = state[i][sfNFTokens.jsonName].size(); std::cout << tokenCount << " NFtokens in page " << state[i][jss::index].asString() << std::endl; @@ -201,7 +201,7 @@ class NFTokenBurn_test : public beast::unit_test::suite { // We do the same work on alice and minter, so make a lambda. auto xferNFT = [&env, &becky](AcctStat& acct, auto& iter) { - uint256 offerIndex = keylet::nftoffer(acct.acct, env.seq(acct.acct)).key; + uint256 const offerIndex = keylet::nftoffer(acct.acct, env.seq(acct.acct)).key; env(token::createOffer(acct, *iter, XRP(0)), txflags(tfSellNFToken)); env.close(); env(token::acceptSellOffer(becky, offerIndex)); @@ -225,7 +225,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Next we'll create offers for all of those NFTs. This calls for // another lambda. auto addOffers = [&env](AcctStat& owner, AcctStat& other1, AcctStat& other2) { - for (uint256 nft : owner.nfts) + for (uint256 const nft : owner.nfts) { // Create sell offers for owner. env(token::createOffer(owner, nft, drops(1)), @@ -277,7 +277,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Decide which of the accounts should burn the nft. If the // owner is becky then any of the three accounts can burn. // Otherwise either alice or minter can burn. - AcctStat& burner = [&]() -> AcctStat& { + AcctStat const& burner = [&]() -> AcctStat& { if (owner.acct == becky.acct) return *(stats[acctDist(engine)]); return mintDist(engine) ? alice : minter; @@ -398,7 +398,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Generate three packed pages. Then burn the tokens in order from // first to last. This exercises specific cases where coalescing // pages is not possible. - std::vector nfts = genPackedTokens(); + std::vector const nfts = genPackedTokens(); BEAST_EXPECT(nftCount(env, alice) == 96); BEAST_EXPECT(ownerCount(env, alice) == 3); @@ -736,9 +736,9 @@ class NFTokenBurn_test : public beast::unit_test::suite // Create an ApplyContext we can use to run the invariant // checks. These variables must outlive the ApplyContext. OpenView ov{*env.current()}; - STTx tx{ttACCOUNT_SET, [](STObject&) {}}; + STTx const tx{ttACCOUNT_SET, [](STObject&) {}}; test::StreamSink sink{beast::severities::kWarning}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac{ env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; @@ -769,9 +769,9 @@ class NFTokenBurn_test : public beast::unit_test::suite // Create an ApplyContext we can use to run the invariant // checks. These variables must outlive the ApplyContext. OpenView ov{*env.current()}; - STTx tx{ttACCOUNT_SET, [](STObject&) {}}; + STTx const tx{ttACCOUNT_SET, [](STObject&) {}}; test::StreamSink sink{beast::severities::kWarning}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac{ env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; @@ -1114,7 +1114,7 @@ class NFTokenBurn_test : public beast::unit_test::suite env.close(); // minter sells the last 32 NFTs back to alice. - for (uint256 nftID : last32NFTs) + for (uint256 const nftID : last32NFTs) { // minter creates an offer for the NFToken. uint256 const minterOfferIndex = keylet::nftoffer(minter, env.seq(minter)).key; diff --git a/src/test/app/NFTokenDir_test.cpp b/src/test/app/NFTokenDir_test.cpp index 73698f1f89..78765cb6c0 100644 --- a/src/test/app/NFTokenDir_test.cpp +++ b/src/test/app/NFTokenDir_test.cpp @@ -20,7 +20,7 @@ class NFTokenDir_test : public beast::unit_test::suite noisy = true, }; - void + static void printNFTPages(test::jtx::Env& env, Volume vol) { Json::Value jvParams; @@ -46,7 +46,7 @@ class NFTokenDir_test : public beast::unit_test::suite if (state[i].isMember(sfNFTokens.jsonName) && state[i][sfNFTokens.jsonName].isArray()) { - std::uint32_t tokenCount = state[i][sfNFTokens.jsonName].size(); + std::uint32_t const tokenCount = state[i][sfNFTokens.jsonName].size(); std::cout << tokenCount << " NFtokens in page " << state[i][jss::index].asString() << std::endl; @@ -104,7 +104,7 @@ class NFTokenDir_test : public beast::unit_test::suite nftIDs.reserve(nftCount); for (int i = 0; i < nftCount; ++i) { - std::uint32_t taxon = toUInt32(nft::cipheredTaxon(i, nft::toTaxon(0))); + std::uint32_t const taxon = toUInt32(nft::cipheredTaxon(i, nft::toTaxon(0))); nftIDs.emplace_back(token::getNextID(env, issuer, taxon, tfTransferable)); env(token::mint(issuer, taxon), txflags(tfTransferable)); env.close(); @@ -160,7 +160,7 @@ class NFTokenDir_test : public beast::unit_test::suite // Create accounts for all of the seeds and fund those accounts. std::vector accounts; accounts.reserve(seeds.size()); - for (std::string_view seed : seeds) + for (std::string_view const seed : seeds) { Account const& account = accounts.emplace_back(Account::base58Seed, std::string(seed)); @@ -364,7 +364,7 @@ class NFTokenDir_test : public beast::unit_test::suite // Create accounts for all of the seeds and fund those accounts. std::vector accounts; accounts.reserve(seeds.size()); - for (std::string_view seed : seeds) + for (std::string_view const seed : seeds) { Account const& account = accounts.emplace_back(Account::base58Seed, std::string(seed)); @@ -595,7 +595,7 @@ class NFTokenDir_test : public beast::unit_test::suite // Create accounts for all of the seeds and fund those accounts. std::vector accounts; accounts.reserve(seeds.size()); - for (std::string_view seed : seeds) + for (std::string_view const seed : seeds) { Account const& account = accounts.emplace_back(Account::base58Seed, std::string(seed)); env.fund(XRP(10000), account); @@ -758,7 +758,7 @@ class NFTokenDir_test : public beast::unit_test::suite // Create accounts for all of the seeds and fund those accounts. std::vector accounts; accounts.reserve(seeds.size()); - for (std::string_view seed : seeds) + for (std::string_view const seed : seeds) { Account const& account = accounts.emplace_back(Account::base58Seed, std::string(seed)); env.fund(XRP(10000), account); @@ -783,7 +783,7 @@ class NFTokenDir_test : public beast::unit_test::suite for (Account const& account : accounts) { // Mint the NFT. Tweak the taxon so zero is always stored. - std::uint32_t taxon = toUInt32(nft::cipheredTaxon(i, nft::toTaxon(0))); + std::uint32_t const taxon = toUInt32(nft::cipheredTaxon(i, nft::toTaxon(0))); uint256 const& nftID = nftIDsByPage[i].emplace_back( token::getNextID(env, account, taxon, tfTransferable)); @@ -831,7 +831,7 @@ class NFTokenDir_test : public beast::unit_test::suite // buyer accepts all of the offers that won't cause an overflow. // Fill the center and outsides first to exercise different boundary // cases. - for (int i : std::initializer_list{3, 6, 0, 1, 2, 5, 4}) + for (int const i : std::initializer_list{3, 6, 0, 1, 2, 5, 4}) { for (uint256 const& offer : offers[i]) { diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index ba61830758..0d391147a8 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -53,7 +53,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite } // Helper function returns the close time of the parent ledger. - std::uint32_t + static std::uint32_t lastClose(test::jtx::Env& env) { return env.current()->header().parentCloseTime.time_since_epoch().count(); @@ -243,7 +243,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite { env(token::burn(alice, token::getID(env, alice, 0, seq++))); env.close(); - checkAliceOwnerMintedBurned((33 - seq) ? 1 : 0, 33, seq, __LINE__); + checkAliceOwnerMintedBurned(((33 - seq) != 0u) ? 1 : 0, 33, seq, __LINE__); } // alice burns a non-existent NFT. @@ -352,7 +352,8 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite { env(token::burn(minter, token::getID(env, alice, 0, nftSeq++))); env.close(); - checkMintersOwnerMintedBurned(0, 66, nftSeq, (65 - seq) ? 1 : 0, 0, 0, __LINE__); + checkMintersOwnerMintedBurned( + 0, 66, nftSeq, ((65 - seq) != 0u) ? 1 : 0, 0, 0, __LINE__); } // minter has one more NFT to burn. Should take her owner count to @@ -398,7 +399,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // Note that we're bypassing almost all of the ledger's safety // checks with this modify() call. If you call close() between // here and the end of the test all the effort will be lost. - env.app().openLedger().modify([&alice](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&alice](OpenView& view, beast::Journal j) { // Get the account root we want to hijack. auto const sle = view.read(keylet::account(alice.id())); if (!sle) @@ -579,7 +580,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); BEAST_EXPECT(ownerCount(env, alice) == 1); - uint256 nftNoXferID = token::getNextID(env, alice, 0); + uint256 const nftNoXferID = token::getNextID(env, alice, 0); env(token::mint(alice, 0)); env.close(); BEAST_EXPECT(ownerCount(env, alice) == 1); @@ -848,7 +849,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // List of tokens to delete is too long. { - std::vector offers(maxTokenOfferCancelCount + 1, buyerOfferIndex); + std::vector const offers(maxTokenOfferCancelCount + 1, buyerOfferIndex); env(token::cancelOffer(buyer, offers), ter(temMALFORMED)); env.close(); @@ -935,7 +936,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); BEAST_EXPECT(ownerCount(env, alice) == aliceCount); - uint256 nftNoXferID = token::getNextID(env, alice, 0); + uint256 const nftNoXferID = token::getNextID(env, alice, 0); env(token::mint(alice, 0)); env.close(); BEAST_EXPECT(ownerCount(env, alice) == aliceCount); @@ -1514,7 +1515,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // An nft without flagCreateTrustLines but with a non-zero transfer // fee will not allow creating offers that use IOUs for payment. - for (std::uint32_t xferFee : {0, 1}) + for (std::uint32_t const xferFee : {0, 1}) { uint256 const nftNoAutoTrustID{ token::getNextID(env, alice, 0u, tfTransferable, xferFee)}; @@ -1529,7 +1530,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); // becky attempts to sell the nft for AUD. - TER const createOfferTER = xferFee ? TER(tecNO_LINE) : TER(tesSUCCESS); + TER const createOfferTER = (xferFee != 0u) ? TER(tecNO_LINE) : TER(tesSUCCESS); uint256 const beckyOfferIndex = keylet::nftoffer(becky, env.seq(becky)).key; env(token::createOffer(becky, nftNoAutoTrustID, gwAUD(100)), txflags(tfSellNFToken), @@ -1551,7 +1552,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // An nft with flagCreateTrustLines but with a non-zero transfer // fee allows transfers using IOUs for payment. { - std::uint16_t transferFee = 10000; // 10% + std::uint16_t const transferFee = 10000; // 10% uint256 const nftAutoTrustID{ token::getNextID(env, alice, 0u, tfTransferable | tfTrustLine, transferFee)}; @@ -1605,7 +1606,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // Now that alice has trust lines preestablished, an nft without // flagCreateTrustLines will work for preestablished trust lines. { - std::uint16_t transferFee = 5000; // 5% + std::uint16_t const transferFee = 5000; // 5% uint256 const nftNoAutoTrustID{ token::getNextID(env, alice, 0u, tfTransferable, transferFee)}; env(token::mint(alice, 0u), token::xferFee(transferFee), txflags(tfTransferable)); @@ -2260,7 +2261,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); // Here is the smallest expressible gwXAU amount. - STAmount tinyXAU(gwXAU.issue(), STAmount::cMinValue, STAmount::cMinOffset); + STAmount const tinyXAU(gwXAU.issue(), STAmount::cMinValue, STAmount::cMinOffset); // minter buys the nft for tinyXAU. Since the transfer involves // alice there should be no transfer fee. @@ -3701,7 +3702,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite int line) { for (Account const& acct : accounts) { - if (std::uint32_t ownerCount = test::jtx::ownerCount(env, acct); + if (std::uint32_t const ownerCount = test::jtx::ownerCount(env, acct); ownerCount != 1) { std::stringstream ss; @@ -4532,7 +4533,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite }; // There are no sell offers. - checkOffers("nft_sell_offers", 0, false, __LINE__); + checkOffers("nft_sell_offers", 0, 0, __LINE__); // A lambda that generates sell offers. STAmount sellPrice = XRP(0); @@ -6595,7 +6596,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); // issuer creates two NFTs: one with and one without AutoTrustLine. - std::uint16_t xferFee = 5000; // 5% + std::uint16_t const xferFee = 5000; // 5% uint256 const nftAutoTrustID{ token::getNextID(env, issuer, 0u, tfTransferable | tfTrustLine, xferFee)}; env(token::mint(issuer, 0u), @@ -6751,7 +6752,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.close(); // issuer creates two NFTs: one with and one without AutoTrustLine. - std::uint16_t xferFee = 5000; // 5% + std::uint16_t const xferFee = 5000; // 5% uint256 const nftAutoTrustID{ token::getNextID(env, issuer, 0u, tfTransferable | tfTrustLine, xferFee)}; env(token::mint(issuer, 0u), diff --git a/src/test/app/NetworkID_test.cpp b/src/test/app/NetworkID_test.cpp index a37f8342e1..17245f7ee5 100644 --- a/src/test/app/NetworkID_test.cpp +++ b/src/test/app/NetworkID_test.cpp @@ -18,7 +18,7 @@ public: testNetworkID(); } - std::unique_ptr + static std::unique_ptr makeNetworkConfig(uint32_t networkID) { using namespace jtx; diff --git a/src/test/app/Offer_test.cpp b/src/test/app/Offer_test.cpp index 62edc844c7..66e84360ef 100644 --- a/src/test/app/Offer_test.cpp +++ b/src/test/app/Offer_test.cpp @@ -11,13 +11,13 @@ namespace test { class OfferBaseUtil_test : public beast::unit_test::suite { - XRPAmount + static XRPAmount reserve(jtx::Env& env, std::uint32_t count) { return env.current()->fees().accountReserve(count); } - std::uint32_t + static std::uint32_t lastClose(jtx::Env& env) { return env.current()->header().parentCloseTime.time_since_epoch().count(); @@ -93,7 +93,7 @@ public: // Offers for the good quality path env(offer(carol, BTC(1), USD(100))); - PathSet paths(Path(XRP, USD), Path(USD)); + PathSet const paths(Path(XRP, USD), Path(USD)); env(pay(alice, bob, USD(100)), json(paths.json()), @@ -419,7 +419,7 @@ public: auto const EUR = gw["EUR"]; auto tinyAmount = [&](IOU const& iou) -> PrettyAmount { - STAmount amt( + STAmount const amt( iou.issue(), /*mantissa*/ 1, /*exponent*/ -81); @@ -863,7 +863,7 @@ public: auto const aliceOffers = offersOnAccount(env, alice); BEAST_EXPECT(aliceOffers.size() == 1); - for (auto offerPtr : aliceOffers) + for (auto const& offerPtr : aliceOffers) { auto const& offer = *offerPtr; BEAST_EXPECT(offer[sfTakerGets] == XRP(2000)); @@ -878,7 +878,7 @@ public: auto const bobOffers = offersOnAccount(env, bob); BEAST_EXPECT(bobOffers.size() == 1); - for (auto offerPtr : bobOffers) + for (auto const& offerPtr : bobOffers) { auto const& offer = *offerPtr; BEAST_EXPECT(offer[sfTakerGets] == USD(1000)); @@ -927,7 +927,7 @@ public: auto const bobOffers = offersOnAccount(env, "bob"); BEAST_EXPECT(bobOffers.size() == 1); - for (auto offerPtr : bobOffers) + for (auto const& offerPtr : bobOffers) { auto const& offer = *offerPtr; BEAST_EXPECT(offer[sfTakerGets] == USD(499.5)); @@ -2253,7 +2253,7 @@ public: // The gateway optionally creates an offer that would be crossed. auto const book = t.bookAmount; - if (book) + if (book != 0) env(offer(gw, XRP(book), USD(book))); env.close(); std::uint32_t const gwOfferSeq = env.seq(gw) - 1; @@ -2285,7 +2285,7 @@ public: auto acctOffers = offersOnAccount(env, acct); BEAST_EXPECT(acctOffers.size() == t.offers); - if (!acctOffers.empty() && t.offers) + if (!acctOffers.empty() && (t.offers != 0)) { auto const& acctOffer = *(acctOffers.front()); @@ -2296,7 +2296,7 @@ public: if (t.preTrust == noPreTrust) { - if (t.balanceUsd.value().signum()) + if (t.balanceUsd.value().signum() != 0) { // Verify the correct contents of the trustline verifyDefaultTrustline(env, acct, t.balanceUsd); @@ -2773,7 +2773,7 @@ public: env.require(offers(acct, t.offers)); env.require(owners(acct, t.owners)); - if (t.offers) + if (t.offers != 0) { auto const acctOffers = offersOnAccount(env, acct); if (!acctOffers.empty()) @@ -3875,10 +3875,10 @@ public: // clang-format off TestData const tests[]{ // btcStart --------------------- actor[0] --------------------- -------------------- actor[1] ------------------- - {0, 0, 1, BTC(20), {{"ann", 0, drops(3900000'000000 - 4 * baseFee), BTC(20.0), USD(3000)}, {"abe", 0, drops(4100000'000000 - 3 * baseFee), BTC( 0), USD(750)}}}, // no BTC xfer fee - {0, 1, 0, BTC(20), {{"bev", 0, drops(4100000'000000 - 4 * baseFee), BTC( 7.5), USD(2000)}, {"bob", 0, drops(3900000'000000 - 3 * baseFee), BTC(10), USD( 0)}}}, // no USD xfer fee - {0, 0, 0, BTC(20), {{"cam", 0, drops(4000000'000000 - 5 * baseFee), BTC(20.0), USD(2000)} }}, // no xfer fee - {0, 1, 0, BTC( 5), {{"deb", 1, drops(4040000'000000 - 4 * baseFee), BTC( 0.0), USD(2000)}, {"dan", 1, drops(3960000'000000 - 3 * baseFee), BTC( 4), USD( 0)}}}, // no USD xfer fee + {0, 0, 1, BTC(20), {{"ann", 0, drops(3900000'000000 - (4 * baseFee)), BTC(20.0), USD(3000)}, {"abe", 0, drops(4100000'000000 - (3 * baseFee)), BTC( 0), USD(750)}}}, // no BTC xfer fee + {0, 1, 0, BTC(20), {{"bev", 0, drops(4100000'000000 - (4 * baseFee)), BTC( 7.5), USD(2000)}, {"bob", 0, drops(3900000'000000 - (3 * baseFee)), BTC(10), USD( 0)}}}, // no USD xfer fee + {0, 0, 0, BTC(20), {{"cam", 0, drops(4000000'000000 - (5 * baseFee)), BTC(20.0), USD(2000)} }}, // no xfer fee + {0, 1, 0, BTC( 5), {{"deb", 1, drops(4040000'000000 - (4 * baseFee)), BTC( 0.0), USD(2000)}, {"dan", 1, drops(3960000'000000 - (3 * baseFee)), BTC( 4), USD( 0)}}}, // no USD xfer fee }; // clang-format on @@ -4026,8 +4026,8 @@ public: // clang-format off TestData const tests[]{ // btcStart ------------------- actor[0] -------------------- ------------------- actor[1] -------------------- - {0, 0, 1, BTC(5), {{"gay", 1, drops(3950000'000000 - 4 * baseFee), BTC(5), USD(2500)}, {"gar", 1, drops(4050000'000000 - 3 * baseFee), BTC(0), USD(1375)}}}, // no BTC xfer fee - {0, 0, 0, BTC(5), {{"hye", 2, drops(4000000'000000 - 5 * baseFee), BTC(5), USD(2000)} }} // no xfer fee + {0, 0, 1, BTC(5), {{"gay", 1, drops(3950000'000000 - (4 * baseFee)), BTC(5), USD(2500)}, {"gar", 1, drops(4050000'000000 - (3 * baseFee)), BTC(0), USD(1375)}}}, // no BTC xfer fee + {0, 0, 0, BTC(5), {{"hye", 2, drops(4000000'000000 - (5 * baseFee)), BTC(5), USD(2000)} }} // no xfer fee }; // clang-format on diff --git a/src/test/app/Oracle_test.cpp b/src/test/app/Oracle_test.cpp index 9da0ee3a31..83b658ac41 100644 --- a/src/test/app/Oracle_test.cpp +++ b/src/test/app/Oracle_test.cpp @@ -23,7 +23,7 @@ private: Env env(*this); Account const bad("bad"); env.memoize(bad); - Oracle oracle( + Oracle const oracle( env, {.owner = bad, .seq = seq(1), @@ -35,7 +35,7 @@ private: { Env env(*this); env.fund(env.current()->fees().accountReserve(0), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .fee = static_cast(env.current()->fees().base.drops()), @@ -302,7 +302,7 @@ private: Env env(*this); auto const baseFee = static_cast(env.current()->fees().base.drops()); env.fund(XRP(1'000), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .series = {{"USD", "USD", 740, 1}}, @@ -315,7 +315,7 @@ private: Env env(*this); auto const baseFee = static_cast(env.current()->fees().base.drops()); env.fund(XRP(1'000), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .series = {{"USD", "BTC", 740, maxPriceScale + 1}}, @@ -354,7 +354,7 @@ private: Env env(*this); env.fund(XRP(1'000), owner); Oracle oracle(env, {.owner = owner, .fee = -1, .err = ter(temBAD_FEE)}); - Oracle oracle1( + Oracle const oracle1( env, {.owner = owner, .fee = static_cast(env.current()->fees().base.drops())}); oracle.set(UpdateArg{.owner = owner, .fee = -1, .err = ter(temBAD_FEE)}); } @@ -371,7 +371,7 @@ private: auto const baseFee = static_cast(env.current()->fees().base.drops()); env.fund(XRP(1'000), owner); auto const count = ownerCount(env, owner); - Oracle oracle(env, {.owner = owner, .series = series, .fee = baseFee}); + Oracle const oracle(env, {.owner = owner, .series = series, .fee = baseFee}); BEAST_EXPECT(oracle.exists()); BEAST_EXPECT(ownerCount(env, owner) == (count + adj)); auto const entry = oracle.ledgerEntry(); @@ -506,9 +506,9 @@ private: auto const acctDelFee{drops(env.current()->fees().increment)}; env.fund(XRP(1'000), owner); env.fund(XRP(1'000), alice); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .series = {{"XRP", "USD", 740, 1}}, .fee = baseFee}); - Oracle oracle1( + Oracle const oracle1( env, {.owner = owner, .documentID = 2, @@ -764,7 +764,7 @@ private: env.fund(XRP(1'000), owner); { - Oracle oracle(env, {.owner = owner, .fee = baseFee, .err = ter(temDISABLED)}); + Oracle const oracle(env, {.owner = owner, .fee = baseFee, .err = ter(temDISABLED)}); } { diff --git a/src/test/app/OversizeMeta_test.cpp b/src/test/app/OversizeMeta_test.cpp index 3831e45a78..d6305bedb6 100644 --- a/src/test/app/OversizeMeta_test.cpp +++ b/src/test/app/OversizeMeta_test.cpp @@ -9,7 +9,7 @@ namespace test { class PlumpBook_test : public beast::unit_test::suite { public: - void + static void createOffers(jtx::Env& env, jtx::IOU const& iou, std::size_t n) { using namespace jtx; @@ -64,7 +64,7 @@ BEAST_DEFINE_TESTSUITE(ThinBook, app, xrpl); class OversizeMeta_test : public beast::unit_test::suite { public: - void + static void createOffers(jtx::Env& env, jtx::IOU const& iou, std::size_t n) { using namespace jtx; @@ -130,7 +130,7 @@ public: return lo; } - void + static void createOffers(jtx::Env& env, jtx::IOU const& iou, std::size_t n) { using namespace jtx; diff --git a/src/test/app/Path_test.cpp b/src/test/app/Path_test.cpp index 9315370809..841847d183 100644 --- a/src/test/app/Path_test.cpp +++ b/src/test/app/Path_test.cpp @@ -39,7 +39,7 @@ rpf(jtx::Account const& src, jtx::Account const& dst, std::uint32_t num_src) { auto& sc = (jv[jss::source_currencies] = Json::arrayValue); Json::Value j = Json::objectValue; - while (num_src--) + while ((num_src--) != 0u) { j[jss::currency] = std::to_string(num_src + 100); sc.append(j); @@ -100,7 +100,7 @@ public: void signal() { - std::lock_guard lk(mutex_); + std::lock_guard const lk(mutex_); signaled_ = true; cv_.notify_all(); } @@ -959,13 +959,13 @@ public: (domainEnabled ? " w/ " : " w/o ") + "domain"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account G3{"G3"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const G3{"G3"}; + Account const M1{"M1"}; env.fund(XRP(100000), A1); env.fund(XRP(10000), A2); @@ -1060,10 +1060,10 @@ public: "domain"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account G3{"G3"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const G3{"G3"}; + Account const M1{"M1"}; env.fund(XRP(1000), A1, A2, G3); env.fund(XRP(11000), M1); @@ -1120,11 +1120,11 @@ public: (domainEnabled ? " w/ " : " w/o ") + "domain"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account G1BS{"G1BS"}; - Account G2SW{"G2SW"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const G1BS{"G1BS"}; + Account const G2SW{"G2SW"}; + Account const M1{"M1"}; env.fund(XRP(1000), G1BS, G2SW, A1, A2); env.fund(XRP(11000), M1); @@ -1206,16 +1206,16 @@ public: (domainEnabled ? " w/ " : " w/o ") + "domain"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account G3{"G3"}; - Account G4{"G4"}; - Account M1{"M1"}; - Account M2{"M2"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const G3{"G3"}; + Account const G4{"G4"}; + Account const M1{"M1"}; + Account const M2{"M2"}; env.fund(XRP(1000), A1, A2, A3, G1, G2, G3, G4); env.fund(XRP(10000), A4); @@ -1349,12 +1349,12 @@ public: (domainEnabled ? " w/ " : " w/o ") + "domain"); using namespace jtx; Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account M1{"M1"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const M1{"M1"}; env.fund(XRP(11000), M1); env.fund(XRP(1000), A1, A2, A3, G1, G2); @@ -1539,16 +1539,16 @@ public: // lambda param that creates different types of offers auto testPathfind = [&](auto func, bool const domainEnabled = false) { Env env = pathTestEnv(); - Account A1{"A1"}; - Account A2{"A2"}; - Account A3{"A3"}; - Account A4{"A4"}; - Account G1{"G1"}; - Account G2{"G2"}; - Account G3{"G3"}; - Account G4{"G4"}; - Account M1{"M1"}; - Account M2{"M2"}; + Account const A1{"A1"}; + Account const A2{"A2"}; + Account const A3{"A3"}; + Account const A4{"A4"}; + Account const G1{"G1"}; + Account const G2{"G2"}; + Account const G3{"G3"}; + Account const G4{"G4"}; + Account const M1{"M1"}; + Account const M2{"M2"}; env.fund(XRP(1000), A1, A2, A3, G1, G2, G3, G4); env.fund(XRP(10000), A4); @@ -1815,9 +1815,9 @@ public: testcase("AMM not used in domain path"); using namespace jtx; Env env = pathTestEnv(); - PermissionedDEX permDex(env); + PermissionedDEX const permDex(env); auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] = permDex; - AMM amm(env, alice, XRP(10), USD(50)); + AMM const amm(env, alice, XRP(10), USD(50)); STPathSet st; STAmount sa, da; diff --git a/src/test/app/PayChan_test.cpp b/src/test/app/PayChan_test.cpp index 5322349797..768031c3af 100644 --- a/src/test/app/PayChan_test.cpp +++ b/src/test/app/PayChan_test.cpp @@ -1096,7 +1096,7 @@ struct PayChan_test : public beast::unit_test::suite { auto leftToFind = bobsB58; auto const numFull = bobs.size() / limit; - auto const numNonFull = bobs.size() % limit ? 1 : 0; + auto const numNonFull = ((bobs.size() % limit) != 0u) ? 1 : 0; Json::Value marker = Json::nullValue; @@ -1122,7 +1122,7 @@ struct PayChan_test : public beast::unit_test::suite testIt(expectMarker, limit); } - if (numNonFull) + if (numNonFull != 0) { testIt(false, bobs.size() % limit); } @@ -1504,7 +1504,7 @@ struct PayChan_test : public beast::unit_test::suite auto const settleDelay = 3600s; auto const channelFunds = XRP(1000); - std::optional cancelAfter; + std::optional const cancelAfter; { auto const chan = to_string(channel(alice, bob, env.seq(alice))); diff --git a/src/test/app/PayStrand_test.cpp b/src/test/app/PayStrand_test.cpp index 70444637bf..222bc2ed07 100644 --- a/src/test/app/PayStrand_test.cpp +++ b/src/test/app/PayStrand_test.cpp @@ -176,7 +176,7 @@ class ElementComboIter bool has(SB s) const { - return state_ & (1 << safe_cast(s)); + return (state_ & (1 << safe_cast(s))) != 0; } bool @@ -212,7 +212,7 @@ public: valid() const { return (allowCompound_ || !(has(SB::acc) && hasAny({SB::cur, SB::iss}))) && - (!hasAny({SB::prevAcc, SB::prevCur, SB::prevIss}) || prev_) && + (!hasAny({SB::prevAcc, SB::prevCur, SB::prevIss}) || (prev_ != nullptr)) && (!hasAny({SB::rootAcc, SB::sameAccIss, SB::existingAcc, SB::prevAcc}) || has(SB::acc)) && (!hasAny({SB::rootIss, SB::sameAccIss, SB::existingIss, SB::prevIss}) || @@ -559,7 +559,7 @@ struct ExistingElementPool result.reserve(resultSize); while (outer.next()) { - StateGuard og{*this}; + StateGuard const og{*this}; outerResult = prefix; outer.emplace_into( outerResult, accF, issF, currencyF, existingAcc, existingCur, existingIss); @@ -567,7 +567,7 @@ struct ExistingElementPool ElementComboIter inner(prevInner); while (inner.next()) { - StateGuard ig{*this}; + StateGuard const ig{*this}; result = outerResult; inner.emplace_into( result, accF, issF, currencyF, existingAcc, existingCur, existingIss); @@ -623,7 +623,7 @@ struct PayStrand_test : public beast::unit_test::suite OfferCrossing::no, ammContext, std::nullopt, - env.app().logs().journal("Flow")); + env.app().getJournal("Flow")); BEAST_EXPECT(ter == expTer); if (sizeof...(expSteps) != 0) BEAST_EXPECT(equal(strand, std::forward(expSteps)...)); @@ -650,7 +650,7 @@ struct PayStrand_test : public beast::unit_test::suite OfferCrossing::no, ammContext, std::nullopt, - env.app().logs().journal("Flow")); + env.app().getJournal("Flow")); (void)_; BEAST_EXPECT(isTesSuccess(ter)); } @@ -668,7 +668,7 @@ struct PayStrand_test : public beast::unit_test::suite OfferCrossing::no, ammContext, std::nullopt, - env.app().logs().journal("Flow")); + env.app().getJournal("Flow")); (void)_; BEAST_EXPECT(isTesSuccess(ter)); } @@ -765,7 +765,7 @@ struct PayStrand_test : public beast::unit_test::suite { // The root account can't be the src or dst - auto flowJournal = env.app().logs().journal("Flow"); + auto flowJournal = env.app().getJournal("Flow"); { // The root account can't be the dst auto r = toStrand( @@ -936,7 +936,7 @@ struct PayStrand_test : public beast::unit_test::suite OfferCrossing::no, ammContext, std::nullopt, - env.app().logs().journal("Flow")); + env.app().getJournal("Flow")); BEAST_EXPECT(isTesSuccess(ter)); BEAST_EXPECT(equal(strand, D{alice, gw, usdC})); } @@ -964,7 +964,7 @@ struct PayStrand_test : public beast::unit_test::suite OfferCrossing::no, ammContext, std::nullopt, - env.app().logs().journal("Flow")); + env.app().getJournal("Flow")); BEAST_EXPECT(isTesSuccess(ter)); BEAST_EXPECT(equal( strand, D{alice, gw, usdC}, B{USD.issue(), xrpIssue(), std::nullopt}, XRPS{bob})); @@ -1006,7 +1006,7 @@ struct PayStrand_test : public beast::unit_test::suite return result; }(); - PathSet paths(p); + PathSet const paths(p); env(pay(alice, alice, EUR(1)), json(paths.json()), @@ -1125,12 +1125,12 @@ struct PayStrand_test : public beast::unit_test::suite Env env(*this, features); env.fund(XRP(10000), alice, bob, gw); - STAmount sendMax{USD.issue(), 100, 1}; - STAmount noAccountAmount{Issue{USD.currency, noAccount()}, 100, 1}; - STAmount deliver; + STAmount const sendMax{USD.issue(), 100, 1}; + STAmount const noAccountAmount{Issue{USD.currency, noAccount()}, 100, 1}; + STAmount const deliver; AccountID const srcAcc = alice.id(); - AccountID dstAcc = bob.id(); - STPathSet pathSet; + AccountID const dstAcc = bob.id(); + STPathSet const pathSet; ::xrpl::path::RippleCalc::Input inputs; inputs.defaultPathsAllowed = true; try @@ -1145,7 +1145,7 @@ struct PayStrand_test : public beast::unit_test::suite noAccount(), pathSet, std::nullopt, - env.app().logs(), + env.app(), &inputs); BEAST_EXPECT(r.result() == temBAD_PATH); } @@ -1158,7 +1158,7 @@ struct PayStrand_test : public beast::unit_test::suite srcAcc, pathSet, std::nullopt, - env.app().logs(), + env.app(), &inputs); BEAST_EXPECT(r.result() == temBAD_PATH); } @@ -1171,7 +1171,7 @@ struct PayStrand_test : public beast::unit_test::suite srcAcc, pathSet, std::nullopt, - env.app().logs(), + env.app(), &inputs); BEAST_EXPECT(r.result() == temBAD_PATH); } @@ -1184,7 +1184,7 @@ struct PayStrand_test : public beast::unit_test::suite srcAcc, pathSet, std::nullopt, - env.app().logs(), + env.app(), &inputs); BEAST_EXPECT(r.result() == temBAD_PATH); } diff --git a/src/test/app/PermissionedDEX_test.cpp b/src/test/app/PermissionedDEX_test.cpp index 2817bc0502..58a041ff56 100644 --- a/src/test/app/PermissionedDEX_test.cpp +++ b/src/test/app/PermissionedDEX_test.cpp @@ -34,13 +34,13 @@ using namespace jtx; class PermissionedDEX_test : public beast::unit_test::suite { - [[nodiscard]] bool + [[nodiscard]] static bool offerExists(Env const& env, Account const& account, std::uint32_t offerSeq) { return static_cast(env.le(keylet::offer(account.id(), offerSeq))); } - [[nodiscard]] bool + [[nodiscard]] static bool checkOffer( Env const& env, Account const& account, @@ -120,13 +120,13 @@ class PermissionedDEX_test : public beast::unit_test::suite return true; } - uint256 + static uint256 getBookDirKey(Book const& book, STAmount const& takerPays, STAmount const& takerGets) { return keylet::quality(keylet::book(book), getRate(takerGets, takerPays)).key; } - std::optional + static std::optional getDefaultOfferDirKey(Env const& env, Account const& account, std::uint32_t offerSeq) { if (auto const sle = env.le(keylet::offer(account.id(), offerSeq))) @@ -135,7 +135,7 @@ class PermissionedDEX_test : public beast::unit_test::suite return {}; } - [[nodiscard]] bool + [[nodiscard]] static bool checkDirectorySize(Env const& env, uint256 directory, std::uint32_t dirSize) { std::optional pageIndex{0}; @@ -151,7 +151,7 @@ class PermissionedDEX_test : public beast::unit_test::suite pageIndex = (*page)[~sfIndexNext]; dirCnt += (*page)[sfIndexes].size(); - } while (pageIndex.value_or(0)); + } while (pageIndex.value_or(0) != 0u); return dirCnt == dirSize; } @@ -183,7 +183,7 @@ class PermissionedDEX_test : public beast::unit_test::suite PermissionedDEX(env); // create devin account who is not part of the domain - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); env.trust(USD(1000), devin); @@ -216,7 +216,7 @@ class PermissionedDEX_test : public beast::unit_test::suite PermissionedDEX(env); // create devin account who is not part of the domain - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); env.trust(USD(1000), devin); @@ -402,7 +402,7 @@ class PermissionedDEX_test : public beast::unit_test::suite env.close(); // create devin account who is not part of the domain - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); env.trust(USD(1000), devin); @@ -448,7 +448,7 @@ class PermissionedDEX_test : public beast::unit_test::suite env.close(); // create devin account who is not part of the domain - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); env.trust(USD(1000), devin); @@ -642,7 +642,7 @@ class PermissionedDEX_test : public beast::unit_test::suite // Fund devin and create USD trustline Account badDomainOwner("badDomainOwner"); - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), badDomainOwner, devin); env.close(); env.trust(USD(1000), devin); @@ -651,7 +651,7 @@ class PermissionedDEX_test : public beast::unit_test::suite env.close(); auto const badCredType = "badCred"; - pdomain::Credentials credentials{{badDomainOwner, badCredType}}; + pdomain::Credentials const credentials{{badDomainOwner, badCredType}}; env(pdomain::setTx(badDomainOwner, credentials)); auto objects = pdomain::getObjects(badDomainOwner, env); @@ -698,7 +698,7 @@ class PermissionedDEX_test : public beast::unit_test::suite env.close(); // fund devin but don't create a USD trustline with gateway - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); @@ -721,7 +721,7 @@ class PermissionedDEX_test : public beast::unit_test::suite PermissionedDEX(env); // create devin account who is not part of the domain - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), devin); env.close(); env.trust(USD(1000), devin); @@ -920,7 +920,7 @@ class PermissionedDEX_test : public beast::unit_test::suite Env env(*this, features); auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] = PermissionedDEX(env); - AMM amm(env, alice, XRP(10), USD(50)); + AMM const amm(env, alice, XRP(10), USD(50)); // a domain payment isn't able to consume AMM env(pay(bob, carol, USD(5)), @@ -1164,12 +1164,12 @@ class PermissionedDEX_test : public beast::unit_test::suite // Fund accounts Account badDomainOwner("badDomainOwner"); - Account devin("devin"); + Account const devin("devin"); env.fund(XRP(1000), badDomainOwner, devin); env.close(); auto const badCredType = "badCred"; - pdomain::Credentials credentials{{badDomainOwner, badCredType}}; + pdomain::Credentials const credentials{{badDomainOwner, badCredType}}; env(pdomain::setTx(badDomainOwner, credentials)); auto objects = pdomain::getObjects(badDomainOwner, env); @@ -1297,8 +1297,8 @@ class PermissionedDEX_test : public beast::unit_test::suite std::vector offerSeqs; offerSeqs.reserve(100); - Book domainBook{Issue(XRP), Issue(USD), domainID}; - Book openBook{Issue(XRP), Issue(USD), std::nullopt}; + Book const domainBook{Issue(XRP), Issue(USD), domainID}; + Book const openBook{Issue(XRP), Issue(USD), std::nullopt}; auto const domainDir = getBookDirKey(domainBook, XRP(10), USD(10)); auto const openDir = getBookDirKey(openBook, XRP(10), USD(10)); diff --git a/src/test/app/PermissionedDomains_test.cpp b/src/test/app/PermissionedDomains_test.cpp index c4bbd80e74..c4bde9831a 100644 --- a/src/test/app/PermissionedDomains_test.cpp +++ b/src/test/app/PermissionedDomains_test.cpp @@ -49,7 +49,7 @@ class PermissionedDomains_test : public beast::unit_test::suite Account const alice("alice"); Env env(*this, features); env.fund(XRP(1000), alice); - pdomain::Credentials credentials{{alice, "first credential"}}; + pdomain::Credentials const credentials{{alice, "first credential"}}; env(pdomain::setTx(alice, credentials)); BEAST_EXPECT(env.ownerCount(alice) == 1); auto objects = pdomain::getObjects(alice, env); @@ -71,7 +71,7 @@ class PermissionedDomains_test : public beast::unit_test::suite Account const alice("alice"); Env env(*this, amendments); env.fund(XRP(1000), alice); - pdomain::Credentials credentials{{alice, "first credential"}}; + pdomain::Credentials const credentials{{alice, "first credential"}}; env(pdomain::setTx(alice, credentials), ter(temDISABLED)); } @@ -83,7 +83,7 @@ class PermissionedDomains_test : public beast::unit_test::suite Account const alice("alice"); Env env(*this, withoutFeature_); env.fund(XRP(1000), alice); - pdomain::Credentials credentials{{alice, "first credential"}}; + pdomain::Credentials const credentials{{alice, "first credential"}}; env(pdomain::setTx(alice, credentials), ter(temDISABLED)); env(pdomain::deleteTx(alice, uint256(75)), ter(temDISABLED)); } @@ -391,7 +391,7 @@ class PermissionedDomains_test : public beast::unit_test::suite constexpr std::size_t deleteDelta = 255; { // Close enough ledgers to make it potentially deletable if empty. - std::size_t ownerSeq = env.seq(alice[0]); + std::size_t const ownerSeq = env.seq(alice[0]); while (deleteDelta + ownerSeq > env.current()->seq()) env.close(); env(acctdelete(alice[0], alice[2]), fee(acctDelFee), ter(tecHAS_OBLIGATIONS)); @@ -402,7 +402,7 @@ class PermissionedDomains_test : public beast::unit_test::suite for (auto const& objs : pdomain::getObjects(alice[0], env)) env(pdomain::deleteTx(alice[0], objs.first)); env.close(); - std::size_t ownerSeq = env.seq(alice[0]); + std::size_t const ownerSeq = env.seq(alice[0]); while (deleteDelta + ownerSeq > env.current()->seq()) env.close(); env(acctdelete(alice[0], alice[2]), fee(acctDelFee)); @@ -420,7 +420,7 @@ class PermissionedDomains_test : public beast::unit_test::suite env.fund(XRP(1000), alice); auto const setFee(drops(env.current()->fees().increment)); - pdomain::Credentials credentials{{alice, "first credential"}}; + pdomain::Credentials const credentials{{alice, "first credential"}}; env(pdomain::setTx(alice, credentials)); env.close(); @@ -484,7 +484,7 @@ class PermissionedDomains_test : public beast::unit_test::suite BEAST_EXPECT(env.ownerCount(alice) == 0); // alice does not have enough XRP to cover the reserve. - pdomain::Credentials credentials{{alice, "first credential"}}; + pdomain::Credentials const credentials{{alice, "first credential"}}; env(pdomain::setTx(alice, credentials), ter(tecINSUFFICIENT_RESERVE)); BEAST_EXPECT(env.ownerCount(alice) == 0); BEAST_EXPECT(pdomain::getObjects(alice, env).empty()); diff --git a/src/test/app/PseudoTx_test.cpp b/src/test/app/PseudoTx_test.cpp index e61430903b..297504abf5 100644 --- a/src/test/app/PseudoTx_test.cpp +++ b/src/test/app/PseudoTx_test.cpp @@ -11,7 +11,7 @@ namespace test { struct PseudoTx_test : public beast::unit_test::suite { - std::vector + static std::vector getPseudoTxs(Rules const& rules, std::uint32_t seq) { std::vector res; @@ -49,7 +49,7 @@ struct PseudoTx_test : public beast::unit_test::suite return res; } - std::vector + static std::vector getRealTxs() { std::vector res; @@ -76,7 +76,7 @@ struct PseudoTx_test : public beast::unit_test::suite BEAST_EXPECT(isPseudoTx(stx)); BEAST_EXPECT(!passesLocalChecks(stx, reason)); BEAST_EXPECT(reason == "Cannot submit pseudo transactions."); - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, stx, tapNONE, j); BEAST_EXPECT(!result.applied && result.ter == temINVALID); return result.applied; diff --git a/src/test/app/RCLValidations_test.cpp b/src/test/app/RCLValidations_test.cpp index a7941ea64f..32267cbf45 100644 --- a/src/test/app/RCLValidations_test.cpp +++ b/src/test/app/RCLValidations_test.cpp @@ -1,10 +1,10 @@ #include #include -#include #include #include +#include namespace xrpl { namespace test { @@ -55,13 +55,17 @@ class RCLValidations_test : public beast::unit_test::suite std::vector> history; jtx::Env env(*this); - Config config; + Config const config; auto prev = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); history.push_back(prev); - for (auto i = 0; i < (2 * maxAncestors + 1); ++i) + for (auto i = 0; i < ((2 * maxAncestors) + 1); ++i) { - auto next = std::make_shared(*prev, env.app().timeKeeper().closeTime()); + auto next = std::make_shared(*prev, env.app().getTimeKeeper().closeTime()); next->updateSkipList(); history.push_back(next); prev = next; @@ -78,7 +82,7 @@ class RCLValidations_test : public beast::unit_test::suite bool forceHash = true; while (altHistory.size() < history.size()) { - auto next = std::make_shared(*prev, env.app().timeKeeper().closeTime()); + auto next = std::make_shared(*prev, env.app().getTimeKeeper().closeTime()); // Force a different hash on the first iteration next->updateSkipList(); BEAST_EXPECT(next->read(keylet::fees())); @@ -96,7 +100,7 @@ class RCLValidations_test : public beast::unit_test::suite // Empty ledger { - RCLValidatedLedger a{RCLValidatedLedger::MakeGenesis{}}; + RCLValidatedLedger const a{RCLValidatedLedger::MakeGenesis{}}; BEAST_EXPECT(a.seq() == Seq{0}); BEAST_EXPECT(a[Seq{0}] == ID{0}); BEAST_EXPECT(a.minSeq() == Seq{0}); @@ -104,8 +108,8 @@ class RCLValidations_test : public beast::unit_test::suite // Full history ledgers { - std::shared_ptr ledger = history.back(); - RCLValidatedLedger a{ledger, env.journal}; + std::shared_ptr const ledger = history.back(); + RCLValidatedLedger const a{ledger, env.journal}; BEAST_EXPECT(a.seq() == ledger->header().seq); BEAST_EXPECT(a.minSeq() == a.seq() - maxAncestors); // Ensure the ancestral 256 ledgers have proper ID @@ -126,21 +130,21 @@ class RCLValidations_test : public beast::unit_test::suite // Empty with non-empty { - RCLValidatedLedger a{RCLValidatedLedger::MakeGenesis{}}; + RCLValidatedLedger const a{RCLValidatedLedger::MakeGenesis{}}; - for (auto ledger : {history.back(), history[maxAncestors - 1]}) + for (auto const& ledger : {history.back(), history[maxAncestors - 1]}) { - RCLValidatedLedger b{ledger, env.journal}; + RCLValidatedLedger const b{ledger, env.journal}; BEAST_EXPECT(mismatch(a, b) == 1); BEAST_EXPECT(mismatch(b, a) == 1); } } // Same chains, different seqs { - RCLValidatedLedger a{history.back(), env.journal}; + RCLValidatedLedger const a{history.back(), env.journal}; for (Seq s = a.seq(); s > 0; s--) { - RCLValidatedLedger b{history[s - 1], env.journal}; + RCLValidatedLedger const b{history[s - 1], env.journal}; if (s >= a.minSeq()) { BEAST_EXPECT(mismatch(a, b) == b.seq() + 1); @@ -158,8 +162,8 @@ class RCLValidations_test : public beast::unit_test::suite // Alt history diverged at history.size()/2 for (Seq s = 1; s < history.size(); ++s) { - RCLValidatedLedger a{history[s - 1], env.journal}; - RCLValidatedLedger b{altHistory[s - 1], env.journal}; + RCLValidatedLedger const a{history[s - 1], env.journal}; + RCLValidatedLedger const b{altHistory[s - 1], env.journal}; BEAST_EXPECT(a.seq() == b.seq()); if (s <= diverge) @@ -179,10 +183,10 @@ class RCLValidations_test : public beast::unit_test::suite // Different chains, different seqs { // Compare around the divergence point - RCLValidatedLedger a{history[diverge], env.journal}; + RCLValidatedLedger const a{history[diverge], env.journal}; for (Seq offset = diverge / 2; offset < 3 * diverge / 2; ++offset) { - RCLValidatedLedger b{altHistory[offset - 1], env.journal}; + RCLValidatedLedger const b{altHistory[offset - 1], env.journal}; if (offset <= diverge) { BEAST_EXPECT(mismatch(a, b) == b.seq() + 1); @@ -217,13 +221,17 @@ class RCLValidations_test : public beast::unit_test::suite // Generate a chain of 256 + 10 ledgers jtx::Env env(*this); auto& j = env.journal; - Config config; + Config const config; auto prev = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); history.push_back(prev); for (auto i = 0; i < (maxAncestors + 10); ++i) { - auto next = std::make_shared(*prev, env.app().timeKeeper().closeTime()); + auto next = std::make_shared(*prev, env.app().getTimeKeeper().closeTime()); next->updateSkipList(); history.push_back(next); prev = next; diff --git a/src/test/app/ReducedOffer_test.cpp b/src/test/app/ReducedOffer_test.cpp index d0cf1b5324..b19999fecd 100644 --- a/src/test/app/ReducedOffer_test.cpp +++ b/src/test/app/ReducedOffer_test.cpp @@ -160,12 +160,12 @@ public: mantissaReduce <= 5'000'000'000ull; mantissaReduce += 20'000'000ull) { - STAmount aliceUSD{ + STAmount const aliceUSD{ bobOffer.out.issue(), bobOffer.out.mantissa() - mantissaReduce, bobOffer.out.exponent()}; - STAmount aliceXRP{bobOffer.in.issue(), bobOffer.in.mantissa() - 1}; - Amounts aliceOffer{aliceUSD, aliceXRP}; + STAmount const aliceXRP{bobOffer.in.issue(), bobOffer.in.mantissa() - 1}; + Amounts const aliceOffer{aliceUSD, aliceXRP}; blockedCount += exerciseOfferPair(aliceOffer, bobOffer); } @@ -292,12 +292,12 @@ public: mantissaReduce <= 4'000'000'000ull; mantissaReduce += 20'000'000ull) { - STAmount bobUSD{ + STAmount const bobUSD{ aliceOffer.out.issue(), aliceOffer.out.mantissa() - mantissaReduce, aliceOffer.out.exponent()}; - STAmount bobXRP{aliceOffer.in.issue(), aliceOffer.in.mantissa() - 1}; - Amounts bobOffer{bobUSD, bobXRP}; + STAmount const bobXRP{aliceOffer.in.issue(), aliceOffer.in.mantissa() - 1}; + Amounts const bobOffer{bobUSD, bobXRP}; blockedCount += exerciseOfferPair(aliceOffer, bobOffer); } @@ -445,7 +445,7 @@ public: // Examine the aftermath of alice's offer. { bool const bobOfferGone = !offerInLedger(env, bob, bobOfferSeq); - STAmount aliceBalanceUSD = env.balance(alice, USD); + STAmount const aliceBalanceUSD = env.balance(alice, USD); #if 0 std::cout << "bob initial: " << initialBobUSD @@ -491,7 +491,7 @@ public: } } - Amounts + static Amounts jsonOfferToAmounts(Json::Value const& json) { STAmount const in = amountFromJson(sfTakerPays, json[sfTakerPays.jsonName]); @@ -580,7 +580,7 @@ public: { Json::Value aliceOffer = ledgerEntryOffer(env, alice, aliceOfferSeq); - Amounts aliceReducedOffer = jsonOfferToAmounts(aliceOffer[jss::node]); + Amounts const aliceReducedOffer = jsonOfferToAmounts(aliceOffer[jss::node]); BEAST_EXPECT(aliceReducedOffer.in < aliceInitialOffer.in); BEAST_EXPECT(aliceReducedOffer.out < aliceInitialOffer.out); diff --git a/src/test/app/Regression_test.cpp b/src/test/app/Regression_test.cpp index d7535d5578..59ab0e427d 100644 --- a/src/test/app/Regression_test.cpp +++ b/src/test/app/Regression_test.cpp @@ -45,14 +45,18 @@ struct Regression_test : public beast::unit_test::suite // be reproduced against an open ledger. Make a local // closed ledger and work with it directly. auto closed = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); auto expectedDrops = INITIAL_XRP; BEAST_EXPECT(closed->header().drops == expectedDrops); auto const aliceXRP = 400; auto const aliceAmount = XRP(aliceXRP); - auto next = std::make_shared(*closed, env.app().timeKeeper().closeTime()); + auto next = std::make_shared(*closed, env.app().getTimeKeeper().closeTime()); { // Fund alice auto const jt = env.jt(pay(env.master, "alice", aliceAmount)); @@ -109,7 +113,8 @@ struct Regression_test : public beast::unit_test::suite auto test256r1key = [&env](Account const& acct) { auto const baseFee = env.current()->fees().base; std::uint32_t const acctSeq = env.seq(acct); - Json::Value jsonNoop = env.json(noop(acct), fee(baseFee), seq(acctSeq), sig(acct)); + Json::Value const jsonNoop = + env.json(noop(acct), fee(baseFee), seq(acctSeq), sig(acct)); JTx jt = env.jt(jsonNoop); jt.fill_sig = false; @@ -233,8 +238,8 @@ struct Regression_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Account alice("alice"); - Account bob("bob"); + Account const alice("alice"); + Account const bob("bob"); env.fund(XRP(10'000), alice, bob); env.close(); @@ -269,7 +274,7 @@ struct Regression_test : public beast::unit_test::suite if (BEAST_EXPECT(bob_index.isNonZero()) && BEAST_EXPECT(digest.has_value())) { - auto& cache = env.app().cachedSLEs(); + auto& cache = env.app().getCachedSLEs(); cache.del(*digest, false); // NOLINT(bugprone-unchecked-optional-access) auto const beforeCounts = mapCounts(CountedObjects::getInstance().getCounts(0)); diff --git a/src/test/app/SHAMapStore_test.cpp b/src/test/app/SHAMapStore_test.cpp index d7d3e281f4..73cbf1c617 100644 --- a/src/test/app/SHAMapStore_test.cpp +++ b/src/test/app/SHAMapStore_test.cpp @@ -34,7 +34,7 @@ class SHAMapStore_test : public beast::unit_test::suite return cfg; } - bool + static bool goodLedger(jtx::Env& env, Json::Value const& json, std::string ledgerID, bool checkDB = false) { auto good = json.isMember(jss::result) && !RPC::contains_error(json[jss::result]) && @@ -73,7 +73,7 @@ class SHAMapStore_test : public beast::unit_test::suite outTxHash == ledger[jss::transaction_hash].asString(); } - bool + static bool bad(Json::Value const& json, error_code_i error = rpcLGR_NOT_FOUND) { return json.isMember(jss::result) && RPC::contains_error(json[jss::result]) && @@ -346,9 +346,9 @@ public: BEAST_EXPECT(lastRotated == store.getLastRotated()); // This does not kick off a cleanup - canDelete = env.rpc("can_delete", std::to_string(ledgerSeq + deleteInterval / 2)); + canDelete = env.rpc("can_delete", std::to_string(ledgerSeq + (deleteInterval / 2))); BEAST_EXPECT(!RPC::contains_error(canDelete[jss::result])); - BEAST_EXPECT(canDelete[jss::result][jss::can_delete] == ledgerSeq + deleteInterval / 2); + BEAST_EXPECT(canDelete[jss::result][jss::can_delete] == ledgerSeq + (deleteInterval / 2)); store.rendezvous(); @@ -481,7 +481,7 @@ public: section, megabytes(env.app().config().getValueFor(SizedItem::burstSize, std::nullopt)), scheduler, - env.app().logs().journal("NodeStoreTest"))}; + env.app().getJournal("NodeStoreTest"))}; backend->open(); return backend; } @@ -514,7 +514,7 @@ public: std::move(writableBackend), std::move(archiveBackend), nscfg, - env.app().logs().journal("NodeStoreTest")); + env.app().getJournal("NodeStoreTest")); ///////////////////////////////////////////////////////////// // Check basic functionality diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index ec3d77803c..0e74cd6283 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/test/app/TheoreticalQuality_test.cpp b/src/test/app/TheoreticalQuality_test.cpp index b4f6f3697d..d7e0882c3b 100644 --- a/src/test/app/TheoreticalQuality_test.cpp +++ b/src/test/app/TheoreticalQuality_test.cpp @@ -199,7 +199,7 @@ class TheoreticalQuality_test : public beast::unit_test::suite prettyQuality(Quality const& q) { std::stringstream sstr; - STAmount rate = q.rate(); + STAmount const rate = q.rate(); sstr << rate << " (" << q << ")"; return sstr.str(); }; @@ -220,7 +220,7 @@ class TheoreticalQuality_test : public beast::unit_test::suite std::shared_ptr closed, std::optional const& expectedQ = {}) { - PaymentSandbox sb(closed.get(), tapNONE); + PaymentSandbox const sb(closed.get(), tapNONE); AMMContext ammContext(rcp.srcAccount, false); auto const sendMaxIssue = [&rcp]() -> std::optional { @@ -229,7 +229,7 @@ class TheoreticalQuality_test : public beast::unit_test::suite return std::nullopt; }(); - beast::Journal dummyJ{beast::Journal::getNullSink()}; + beast::Journal const dummyJ{beast::Journal::getNullSink()}; auto sr = toStrands( sb, @@ -295,8 +295,6 @@ public: { testcase("Direct Step"); - // clang-format off - // Set up a payment through four accounts: alice -> bob -> carol -> dan // For each relevant trust line on the path, there are three things that can vary: // 1) input quality @@ -305,8 +303,6 @@ public: // For each account, there is one thing that can vary: // 1) transfer rate - // clang-format on - using namespace jtx; auto const currency = to_currency("USD"); @@ -370,7 +366,7 @@ public: // Accounts are set up, make the payment IOU const iou{accounts.back(), currency}; - RippleCalcTestParams rcp{env.json( + RippleCalcTestParams const rcp{env.json( pay(accounts.front(), accounts.back(), iou(paymentAmount)), accountsPath, txflags(tfNoRippleDirect))}; @@ -385,14 +381,12 @@ public: testcase("Book Step"); using namespace jtx; - // clang-format off + // Setup a payment through an offer: + // alice (USD/bob) -> bob -> (USD/bob)|(EUR/carol) -> carol -> dan + // For each relevant trust line, vary input quality, output quality, debt direction. For + // each account, vary transfer rate. - // Setup a payment through an offer: alice (USD/bob) -> bob -> (USD/bob)|(EUR/carol) -> carol -> dan - // For each relevant trust line, vary input quality, output quality, debt direction. - // For each account, vary transfer rate. - // The USD/bob|EUR/carol offer owner is "Oscar" - - // clang-format on + // The USD/bob|EUR/carol offer owner is "Oscar". int const numTestIterations = reqNumIterations.value_or(100); @@ -419,7 +413,7 @@ public: auto const USDB = bob["USD"]; auto const EURC = carol["EUR"]; constexpr std::size_t const numAccounts = 5; - std::array accounts{{alice, bob, carol, dan, oscar}}; + std::array const accounts{{alice, bob, carol, dan, oscar}}; // sendmax should be in USDB and delivered amount should be in EURC // normalized path should be: @@ -451,7 +445,7 @@ public: // Accounts are set up, make the payment IOU const srcIOU{bob, usdCurrency}; IOU const dstIOU{carol, eurCurrency}; - RippleCalcTestParams rcp{env.json( + RippleCalcTestParams const rcp{env.json( pay(alice, dan, dstIOU(paymentAmount)), sendmax(srcIOU(100 * paymentAmount)), bookPath, diff --git a/src/test/app/Ticket_test.cpp b/src/test/app/Ticket_test.cpp index 7d300f61ca..7f96caa05f 100644 --- a/src/test/app/Ticket_test.cpp +++ b/src/test/app/Ticket_test.cpp @@ -378,7 +378,7 @@ class Ticket_test : public beast::unit_test::suite { // Create tickets on a non-existent account. Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.memoize(alice); env(ticket::create(alice, 1), json(jss::Sequence, 1), ter(terNO_ACCOUNT)); @@ -387,11 +387,11 @@ class Ticket_test : public beast::unit_test::suite // Exceed the threshold where tickets can no longer be // added to an account. Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(100000), alice); - std::uint32_t ticketSeq{env.seq(alice) + 1}; + std::uint32_t const ticketSeq{env.seq(alice) + 1}; env(ticket::create(alice, 250)); checkTicketCreateMeta(env); env.close(); @@ -424,12 +424,12 @@ class Ticket_test : public beast::unit_test::suite { // Explore exceeding the ticket threshold from another angle. Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(100000), alice); env.close(); - std::uint32_t ticketSeq_AB{env.seq(alice) + 1}; + std::uint32_t const ticketSeq_AB{env.seq(alice) + 1}; env(ticket::create(alice, 2)); checkTicketCreateMeta(env); env.close(); @@ -462,7 +462,7 @@ class Ticket_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; // Fund alice not quite enough to make the reserve for a Ticket. env.fund(env.current()->fees().accountReserve(1) - drops(1), alice); @@ -515,7 +515,7 @@ class Ticket_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(10000), alice); env.close(); @@ -611,14 +611,14 @@ class Ticket_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(10000), alice); env.close(); // Lambda that returns the hash of the most recent transaction. auto getTxID = [&env, this]() -> uint256 { - std::shared_ptr tx{env.tx()}; + std::shared_ptr const tx{env.tx()}; if (!BEAST_EXPECTS(tx, "Transaction not found")) Throw("Invalid transaction ID"); @@ -689,7 +689,7 @@ class Ticket_test : public beast::unit_test::suite BEAST_EXPECT(txErrCode == rpcSUCCESS); if (auto txPtr = std::get_if(&maybeTx)) { - std::shared_ptr& tx = txPtr->first; + std::shared_ptr const& tx = txPtr->first; BEAST_EXPECT(tx->getLedger() == ledgerSeq); std::shared_ptr const& sttx = tx->getSTransaction(); BEAST_EXPECT((*sttx)[sfSequence] == txSeq); @@ -726,7 +726,7 @@ class Ticket_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(10000), alice); env.close(); @@ -812,7 +812,7 @@ class Ticket_test : public beast::unit_test::suite testcase("Fix both Seq and Ticket"); Env env{*this, testable_amendments()}; - Account alice{"alice"}; + Account const alice{"alice"}; env.fund(XRP(10000), alice); env.close(); diff --git a/src/test/app/Transaction_ordering_test.cpp b/src/test/app/Transaction_ordering_test.cpp index f7d431fc90..c50fbf4e56 100644 --- a/src/test/app/Transaction_ordering_test.cpp +++ b/src/test/app/Transaction_ordering_test.cpp @@ -95,14 +95,16 @@ struct Transaction_ordering_test : public beast::unit_test::suite env.fund(XRP(1000), noripple(alice)); auto const aliceSequence = env.seq(alice); + static constexpr auto kSIZE = 5; std::vector tx; - for (auto i = 0; i < 5; ++i) + tx.reserve(kSIZE); + for (auto i = 0; i < kSIZE; ++i) { tx.emplace_back(env.jt(noop(alice), seq(aliceSequence + i), last_ledger_seq(7))); } - for (auto i = 1; i < 5; ++i) + for (auto i = 1; i < kSIZE; ++i) { env(tx[i], ter(terPRE_SEQ)); BEAST_EXPECT(env.seq(alice) == aliceSequence); @@ -110,11 +112,11 @@ struct Transaction_ordering_test : public beast::unit_test::suite env(tx[0]); env.app().getJobQueue().rendezvous(); - BEAST_EXPECT(env.seq(alice) == aliceSequence + 5); + BEAST_EXPECT(env.seq(alice) == aliceSequence + kSIZE); env.close(); - for (auto i = 0; i < 5; ++i) + for (auto i = 0; i < kSIZE; ++i) { auto const result = env.rpc("tx", to_string(tx[i].stx->getTransactionID())); BEAST_EXPECT(result["result"]["meta"]["TransactionResult"] == "tesSUCCESS"); diff --git a/src/test/app/TrustAndBalance_test.cpp b/src/test/app/TrustAndBalance_test.cpp index 3a2aa8e7c9..a71ddb140e 100644 --- a/src/test/app/TrustAndBalance_test.cpp +++ b/src/test/app/TrustAndBalance_test.cpp @@ -28,7 +28,7 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account alice{"alice"}; + Account const alice{"alice"}; env(trust(env.master, alice["USD"](100)), ter(tecNO_DST)); } @@ -40,9 +40,9 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env.close(); @@ -112,8 +112,8 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), alice, bob); env.close(); @@ -156,9 +156,9 @@ class TrustAndBalance_test : public beast::unit_test::suite Env env{*this, features}; auto wsc = test::makeWSClient(env.app().config()); - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env.close(); @@ -229,9 +229,9 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env.close(); @@ -276,9 +276,9 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account gw{"gateway"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gateway"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), gw, alice, bob); env.close(); @@ -319,11 +319,11 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account gw{"gateway"}; - Account amazon{"amazon"}; - Account alice{"alice"}; - Account bob{"bob"}; - Account carol{"carol"}; + Account const gw{"gateway"}; + Account const amazon{"amazon"}; + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const carol{"carol"}; env.fund(XRP(10000), gw, amazon, alice, bob, carol); env.close(); @@ -379,7 +379,7 @@ class TrustAndBalance_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, features}; - Account alice{"alice"}; + Account const alice{"alice"}; auto wsc = test::makeWSClient(env.app().config()); env.fund(XRP(10000), alice); diff --git a/src/test/app/TrustSet_test.cpp b/src/test/app/TrustSet_test.cpp index 51828fa544..d359ba1f26 100644 --- a/src/test/app/TrustSet_test.cpp +++ b/src/test/app/TrustSet_test.cpp @@ -260,7 +260,7 @@ public: env.close(); } - Json::Value + static Json::Value trust_explicit_amt(jtx::Account const& a, STAmount const& amt) { Json::Value jv; @@ -287,7 +287,7 @@ public: for (std::uint64_t badFlag = 1u; badFlag <= std::numeric_limits::max(); badFlag *= 2) { - if (badFlag & tfTrustSetMask) + if ((badFlag & tfTrustSetMask) != 0u) { env(trust(alice, gw["USD"](100), static_cast(badFlag)), ter(temINVALID_FLAG)); diff --git a/src/test/app/TxQ_test.cpp b/src/test/app/TxQ_test.cpp index 59db7e0d5d..6f13f9d419 100644 --- a/src/test/app/TxQ_test.cpp +++ b/src/test/app/TxQ_test.cpp @@ -24,7 +24,7 @@ class TxQPosNegFlows_test : public beast::unit_test::suite static constexpr FeeLevel64 baseFeeLevel{256}; static constexpr FeeLevel64 minEscalationFeeLevel = baseFeeLevel * 500; - void + static void fillQueue(jtx::Env& env, jtx::Account const& account) { auto metrics = env.app().getTxQ().getMetrics(*env.current()); @@ -32,7 +32,7 @@ class TxQPosNegFlows_test : public beast::unit_test::suite env(noop(account)); } - auto + static auto openLedgerCost(jtx::Env& env) { using namespace jtx; @@ -52,7 +52,7 @@ class TxQPosNegFlows_test : public beast::unit_test::suite // Get a fee level of a transaction made by an account // This fee level is used to ensure we can place transaction into TxQ - auto + static auto txFeeLevelByAccount(jtx::Env& env, jtx::Account const& account) { using namespace jtx; @@ -65,7 +65,7 @@ class TxQPosNegFlows_test : public beast::unit_test::suite // Calculating expected median fee level based on known fee levels of median // transaction levels. - auto + static auto calcMedFeeLevel(FeeLevel64 const feeLevel1, FeeLevel64 const feeLevel2) { FeeLevel64 const expectedMedFeeLevel = (feeLevel1 + feeLevel2 + FeeLevel64{1}) / 2; @@ -73,7 +73,7 @@ class TxQPosNegFlows_test : public beast::unit_test::suite return std::max(expectedMedFeeLevel, minEscalationFeeLevel).fee(); } - auto + static auto calcMedFeeLevel(FeeLevel64 const feeLevel) { return calcMedFeeLevel(feeLevel, feeLevel); @@ -261,9 +261,7 @@ public: env(noop(alice), fee(baseFee * 2.0), queued); // Queue is full now. - // clang-format off checkMetrics(*this, env, 6, 6, 4, 3, txFeeLevelByAccount(env, daria) + 1); - // clang-format on // Try to add another transaction with the default (low) fee, // it should fail because the queue is full. env(noop(charlie), ter(telCAN_NOT_QUEUE_FULL)); @@ -274,18 +272,22 @@ public: env(noop(charlie), fee(baseFee * 10), queued); // Queue is still full, of course, but the min fee has gone up - // clang-format off checkMetrics(*this, env, 6, 6, 4, 3, txFeeLevelByAccount(env, elmo) + 1); - // clang-format on // Close out the ledger, the transactions are accepted, the // queue is cleared, then the localTxs are retried. At this // point, daria's transaction that was dropped from the queue // is put back in. Neat. env.close(); - // clang-format off - checkMetrics(*this, env, 2, 8, 5, 4, baseFeeLevel.fee(), calcMedFeeLevel(FeeLevel64{baseFeeLevel.fee() * largeFeeMultiplier})); - // clang-format on + checkMetrics( + *this, + env, + 2, + 8, + 5, + 4, + baseFeeLevel.fee(), + calcMedFeeLevel(FeeLevel64{baseFeeLevel.fee() * largeFeeMultiplier})); env.close(); checkMetrics(*this, env, 0, 10, 2, 5); @@ -498,7 +500,7 @@ public: // We haven't yet shown that ticket-based transactions can be added // to the queue in any order. We should do that... - std::uint32_t tkt250 = tkt1 + 249; + std::uint32_t const tkt250 = tkt1 + 249; env(noop(alice), ticket::use(tkt250 - 0), fee(baseFee * 3.0), queued); env(noop(alice), ticket::use(tkt1 + 14), fee(baseFee * 2.9), queued); env(noop(alice), ticket::use(tkt250 - 1), fee(baseFee * 2.8), queued); @@ -551,16 +553,16 @@ public: // The lowest fee ticket is baseFee * 2.1, trying to replace it env(noop(alice), ticket::use(tkt1 + 18), - fee(baseFee * 2.1 * 1.25 - 1), + fee((baseFee * 2.1 * 1.25) - 1), ter(telCAN_NOT_QUEUE_FEE)); - env(noop(alice), ticket::use(tkt1 + 18), fee(baseFee * 2.1 * 1.25 + 1), queued); + env(noop(alice), ticket::use(tkt1 + 18), fee((baseFee * 2.1 * 1.25) + 1), queued); // New lowest fee ticket is baseFee * 2.2 env(noop(alice), ticket::use(tkt250 - 4), - fee(baseFee * 2.2 * 1.25 - 1), + fee((baseFee * 2.2 * 1.25) - 1), ter(telCAN_NOT_QUEUE_FEE)); - env(noop(alice), ticket::use(tkt250 - 4), fee(baseFee * 2.2 * 1.25 + 1), queued); + env(noop(alice), ticket::use(tkt250 - 4), fee((baseFee * 2.2 * 1.25) + 1), queued); env.close(); env.require(owners(alice, 227), tickets(alice, 227)); @@ -750,15 +752,13 @@ public: env.close(); // alice's transaction is still hanging around - // clang-format off - checkMetrics(*this, env, 1, 8, 5, 4, baseFeeLevel.fee(), baseFeeLevel.fee() * largeFeeMultiplier); - // clang-format on + checkMetrics( + *this, env, 1, 8, 5, 4, baseFeeLevel.fee(), baseFeeLevel.fee() * largeFeeMultiplier); BEAST_EXPECT(env.seq(alice) == 3); constexpr auto anotherLargeFeeMultiplier = 800; auto const anotherLargeFee = baseFee * anotherLargeFeeMultiplier; // Keep alice's transaction waiting. - // clang-format off env(noop(bob), fee(anotherLargeFee), queued); env(noop(charlie), fee(anotherLargeFee), queued); env(noop(daria), fee(anotherLargeFee), queued); @@ -766,24 +766,36 @@ public: env(noop(edgar), fee(anotherLargeFee), queued); env(noop(felicia), fee(anotherLargeFee - 1), queued); env(noop(felicia), fee(anotherLargeFee - 1), seq(env.seq(felicia) + 1), queued); - checkMetrics(*this, env, 8, 8, 5, 4, baseFeeLevel.fee() + 1, baseFeeLevel.fee() * largeFeeMultiplier); - // clang-format on + checkMetrics( + *this, + env, + 8, + 8, + 5, + 4, + baseFeeLevel.fee() + 1, + baseFeeLevel.fee() * largeFeeMultiplier); env.close(); // alice's transaction expired without getting // into the ledger, so her transaction is gone, // though one of felicia's is still in the queue. - // clang-format off - checkMetrics(*this, env, 1, 10, 6, 5, baseFeeLevel.fee(), baseFeeLevel.fee() * largeFeeMultiplier); - // clang-format on + checkMetrics( + *this, env, 1, 10, 6, 5, baseFeeLevel.fee(), baseFeeLevel.fee() * largeFeeMultiplier); BEAST_EXPECT(env.seq(alice) == 3); BEAST_EXPECT(env.seq(felicia) == 7); env.close(); // And now the queue is empty - // clang-format off - checkMetrics(*this, env, 0, 12, 1, 6, baseFeeLevel.fee(), baseFeeLevel.fee() * anotherLargeFeeMultiplier); - // clang-format on + checkMetrics( + *this, + env, + 0, + 12, + 1, + 6, + baseFeeLevel.fee(), + baseFeeLevel.fee() * anotherLargeFeeMultiplier); BEAST_EXPECT(env.seq(alice) == 3); BEAST_EXPECT(env.seq(felicia) == 8); } @@ -857,9 +869,7 @@ public: feeCarol = (feeCarol + 1) * 125 / 100; ++seqCarol; } - // clang-format off - checkMetrics(*this, env, 6, 6, 4, 3, baseFeeLevel.fee() * aliceFeeMultiplier + 1); - // clang-format on + checkMetrics(*this, env, 6, 6, 4, 3, (baseFeeLevel.fee() * aliceFeeMultiplier) + 1); // Carol submits high enough to beat Bob's average fee which kicks // out Bob's queued transaction. However Bob's transaction stays @@ -950,7 +960,7 @@ public: Env::ParsedResult parsed; - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const result = xrpl::apply(env.app(), view, *jt.stx, tapNONE, env.journal); parsed.ter = result.ter; return result.applied; @@ -1505,14 +1515,12 @@ public: env.close(); // If not for the maximum, the per ledger would be 11. - // clang-format off checkMetrics(*this, env, 0, 10, 0, 5, baseFeeLevel.fee(), calcMedFeeLevel(medFeeLevel)); - // clang-format on } try { - Env env( + Env const env( *this, makeConfig( {{"minimum_txn_in_ledger", "200"}, @@ -1533,7 +1541,7 @@ public: } try { - Env env( + Env const env( *this, makeConfig( {{"minimum_txn_in_ledger", "200"}, @@ -1554,7 +1562,7 @@ public: } try { - Env env( + Env const env( *this, makeConfig( {{"minimum_txn_in_ledger", "2"}, @@ -2632,7 +2640,7 @@ public: // Start by procuring tickets for alice to use to keep her queue full // without affecting the sequence gap that will appear later. - env(ticket::create(alice, 11), seq(aliceSeq + 0), fee(baseFee * 20 + 1), ter(terQUEUED)); + env(ticket::create(alice, 11), seq(aliceSeq + 0), fee((baseFee * 20) + 1), ter(terQUEUED)); env(noop(alice), seq(aliceSeq + 11), last_ledger_seq(11), ter(terQUEUED)); env(noop(alice), seq(aliceSeq + 12), last_ledger_seq(11), ter(terQUEUED)); env(noop(alice), seq(aliceSeq + 13), last_ledger_seq(11), ter(terQUEUED)); @@ -3379,6 +3387,7 @@ public: BEAST_EXPECT(jv[jss::status] == "success"); } + // NOLINTNEXTLINE(misc-const-correctness) Account a{"a"}, b{"b"}, c{"c"}, d{"d"}, e{"e"}, f{"f"}, g{"g"}, h{"h"}, i{"i"}; // Fund the first few accounts at non escalated fee @@ -3520,7 +3529,8 @@ public: } auto const den = (metrics.txPerLedger * metrics.txPerLedger); - FeeLevel64 feeLevel = (metrics.medFeeLevel * totalFactor + FeeLevel64{den - 1}) / den; + FeeLevel64 const feeLevel = + (metrics.medFeeLevel * totalFactor + FeeLevel64{den - 1}) / den; auto result = toDrops(feeLevel, env.current()->fees().base).drops(); @@ -3873,7 +3883,7 @@ public: // (This requires calling directly into the open ledger, // which won't work if unit tests are separated to only // be callable via RPC.) - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const tx = env.jt(noop(alice), seq(aliceSeq), fee(openLedgerCost(env))); auto const result = xrpl::apply(env.app(), view, *tx.stx, tapUNLIMITED, j); BEAST_EXPECT(isTesSuccess(result.ter) && result.applied); @@ -3941,7 +3951,7 @@ public: // (This requires calling directly into the open ledger, // which won't work if unit tests are separated to only // be callable via RPC.) - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { auto const tx = env.jt(noop(alice), ticket::use(tktSeq0 + 1), fee(openLedgerCost(env))); auto const result = xrpl::apply(env.app(), view, *tx.stx, tapUNLIMITED, j); BEAST_EXPECT(isTesSuccess(result.ter) && result.applied); @@ -4083,7 +4093,7 @@ public: // Use fees to guarantee order int txFee{static_cast(baseFee * 9)}; auto prepareFee = [&](uint64_t multiplier) { - return fee(txFee - multiplier * baseFee / 10); + return fee(txFee - (multiplier * baseFee / 10)); }; uint64_t multiplier = 0; diff --git a/src/test/app/ValidatorKeys_test.cpp b/src/test/app/ValidatorKeys_test.cpp index 9efe318662..3be6fcd028 100644 --- a/src/test/app/ValidatorKeys_test.cpp +++ b/src/test/app/ValidatorKeys_test.cpp @@ -59,7 +59,7 @@ public: // We're only using Env for its Journal. That Journal gives better // coverage in unit tests. test::jtx::Env env{*this, test::jtx::envconfig(), nullptr, beast::severities::kDisabled}; - beast::Journal journal{env.app().journal("ValidatorKeys_test")}; + beast::Journal const journal{env.app().getJournal("ValidatorKeys_test")}; // Keys/ID when using [validation_seed] SecretKey const seedSecretKey = @@ -82,8 +82,8 @@ public: { // No config -> no key but valid - Config c; - ValidatorKeys k{c, journal}; + Config const c; + ValidatorKeys const k{c, journal}; BEAST_EXPECT(!k.keys); BEAST_EXPECT(k.manifest.empty()); BEAST_EXPECT(!k.configInvalid()); @@ -109,7 +109,7 @@ public: Config c; c.section(SECTION_VALIDATION_SEED).append("badseed"); - ValidatorKeys k{c, journal}; + ValidatorKeys const k{c, journal}; BEAST_EXPECT(k.configInvalid()); BEAST_EXPECT(!k.keys); BEAST_EXPECT(k.manifest.empty()); @@ -134,7 +134,7 @@ public: // invalid validator token Config c; c.section(SECTION_VALIDATOR_TOKEN).append("badtoken"); - ValidatorKeys k{c, journal}; + ValidatorKeys const k{c, journal}; BEAST_EXPECT(k.configInvalid()); BEAST_EXPECT(!k.keys); BEAST_EXPECT(k.manifest.empty()); @@ -145,7 +145,7 @@ public: Config c; c.section(SECTION_VALIDATION_SEED).append(seed); c.section(SECTION_VALIDATOR_TOKEN).append(tokenBlob); - ValidatorKeys k{c, journal}; + ValidatorKeys const k{c, journal}; BEAST_EXPECT(k.configInvalid()); BEAST_EXPECT(!k.keys); @@ -156,7 +156,7 @@ public: // Token manifest and private key must match Config c; c.section(SECTION_VALIDATOR_TOKEN).append(invalidTokenBlob); - ValidatorKeys k{c, journal}; + ValidatorKeys const k{c, journal}; BEAST_EXPECT(k.configInvalid()); BEAST_EXPECT(!k.keys); diff --git a/src/test/app/ValidatorList_test.cpp b/src/test/app/ValidatorList_test.cpp index 32e899ad95..74b208e5e2 100644 --- a/src/test/app/ValidatorList_test.cpp +++ b/src/test/app/ValidatorList_test.cpp @@ -98,7 +98,7 @@ private: masterPublic, secret, signingKeys.first, signingKeys.second, 1))}; } - std::string + static std::string makeList( std::vector const& validators, std::size_t sequence, @@ -122,7 +122,7 @@ private: return base64_encode(data); } - std::string + static std::string signList(std::string const& blob, std::pair const& keys) { auto const data = base64_decode(blob); @@ -272,7 +272,7 @@ private: auto const masterNode1 = randomMasterKey(); auto const masterNode2 = randomMasterKey(); - std::vector cfgMasterKeys( + std::vector const cfgMasterKeys( {format(masterNode1), format(masterNode2, " Comment")}); BEAST_EXPECT(trustedKeys->load({}, cfgMasterKeys, emptyCfgPublishers)); BEAST_EXPECT(trustedKeys->listed(masterNode1)); @@ -362,7 +362,8 @@ private: // load should reject validator list signing keys with invalid // encoding - std::vector keys({randomMasterKey(), randomMasterKey(), randomMasterKey()}); + std::vector const keys( + {randomMasterKey(), randomMasterKey(), randomMasterKey()}); badPublishers.clear(); for (auto const& key : keys) badPublishers.push_back(toBase58(TokenType::NodePublic, key)); @@ -373,13 +374,14 @@ private: // load should accept valid validator list publisher keys std::vector cfgPublishers; + cfgPublishers.reserve(keys.size()); for (auto const& key : keys) cfgPublishers.push_back(strHex(key)); BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers)); for (auto const& key : keys) BEAST_EXPECT(trustedKeys->trustedPublisher(key)); - BEAST_EXPECT(trustedKeys->getListThreshold() == keys.size() / 2 + 1); + BEAST_EXPECT(trustedKeys->getListThreshold() == (keys.size() / 2) + 1); } { ManifestCache manifests; @@ -390,9 +392,10 @@ private: app.config().legacy("database_path"), env.journal); - std::vector keys( + std::vector const keys( {randomMasterKey(), randomMasterKey(), randomMasterKey(), randomMasterKey()}); std::vector cfgPublishers; + cfgPublishers.reserve(keys.size()); for (auto const& key : keys) cfgPublishers.push_back(strHex(key)); @@ -431,7 +434,7 @@ private: auto legitKey1 = randomMasterKey(); auto legitKey2 = randomMasterKey(); - std::vector cfgPublishers = { + std::vector const cfgPublishers = { strHex(pubRevokedPublic), strHex(legitKey1), strHex(legitKey2)}; BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers)); @@ -469,7 +472,8 @@ private: // this one is not revoked (and not in the manifest cache at all.) auto legitKey = randomMasterKey(); - std::vector cfgPublishers = {strHex(pubRevokedPublic), strHex(legitKey)}; + std::vector const cfgPublishers = { + strHex(pubRevokedPublic), strHex(legitKey)}; BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers, std::size_t(2))); BEAST_EXPECT(!trustedKeys->trustedPublisher(pubRevokedPublic)); @@ -534,7 +538,7 @@ private: auto trustedKeys = std::make_unique( manifests, manifests, - env.app().timeKeeper(), + env.app().getTimeKeeper(), app.config().legacy("database_path"), env.journal); @@ -561,10 +565,10 @@ private: auto const manifest1 = base64_encode(makeManifestString( publisherPublic, publisherSecret, pubSigningKeys1.first, pubSigningKeys1.second, 1)); - std::vector cfgKeys1({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublisherKeys({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; - BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgKeys1)); + BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublisherKeys)); std::map> const lists = []() { auto constexpr listSize = 20; @@ -813,7 +817,7 @@ private: {}, effective6 + 1s, env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); expectUntrusted(lists.at(3)); @@ -831,7 +835,7 @@ private: {}, effective8 + 1s, env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); expectUntrusted(lists.at(6)); @@ -896,7 +900,7 @@ private: auto trustedKeys = std::make_unique( manifests, manifests, - env.app().timeKeeper(), + env.app().getTimeKeeper(), app.config().legacy("database_path"), env.journal); @@ -907,10 +911,10 @@ private: auto const manifest = base64_encode(makeManifestString( publisherPublic, publisherSecret, pubSigningKeys1.first, pubSigningKeys1.second, 1)); - std::vector cfgKeys1({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublisherKeys({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; - BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgKeys1)); + BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublisherKeys)); std::vector const list = []() { auto constexpr listSize = 20; @@ -1031,7 +1035,7 @@ private: app.config().legacy("database_path"), env.journal); - std::vector cfgPublishersOuter; + std::vector const cfgPublishersOuter; hash_set activeValidatorsOuter; std::size_t const maxKeys = 40; @@ -1062,7 +1066,7 @@ private: activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); for (auto const& val : unseenValidators) @@ -1088,7 +1092,7 @@ private: activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.added.empty()); BEAST_EXPECT(changes.removed.empty()); @@ -1099,7 +1103,7 @@ private: auto const masterPrivate = randomSecretKey(); auto const masterPublic = derivePublicKey(KeyType::ed25519, masterPrivate); - std::vector cfgKeys({toBase58(TokenType::NodePublic, masterPublic)}); + std::vector const cfgKeys({toBase58(TokenType::NodePublic, masterPublic)}); BEAST_EXPECT(trustedKeysOuter->load({}, cfgKeys, cfgPublishersOuter)); @@ -1112,7 +1116,7 @@ private: activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.added == asNodeIDs({masterPublic})); BEAST_EXPECT(changes.removed.empty()); @@ -1173,7 +1177,7 @@ private: activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed == asNodeIDs({masterPublic})); BEAST_EXPECT(changes.added.empty()); @@ -1199,16 +1203,16 @@ private: auto const publisherSecret = randomSecretKey(); auto const publisherPublic = derivePublicKey(KeyType::ed25519, publisherSecret); - std::vector cfgPublishers({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublishers({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers)); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added.empty()); @@ -1225,22 +1229,22 @@ private: env.journal); auto const masterPrivate = randomSecretKey(); auto const masterPublic = derivePublicKey(KeyType::ed25519, masterPrivate); - std::vector cfgKeys({toBase58(TokenType::NodePublic, masterPublic)}); + std::vector const cfgKeys({toBase58(TokenType::NodePublic, masterPublic)}); auto const publisher1Secret = randomSecretKey(); auto const publisher1Public = derivePublicKey(KeyType::ed25519, publisher1Secret); auto const publisher2Secret = randomSecretKey(); auto const publisher2Public = derivePublicKey(KeyType::ed25519, publisher2Secret); - std::vector cfgPublishers( + std::vector const cfgPublishers( {strHex(publisher1Public), strHex(publisher2Public)}); BEAST_EXPECT(trustedKeys->load({}, cfgKeys, cfgPublishers, std::size_t(2))); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidatorsOuter, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added.size() == 1); @@ -1259,7 +1263,7 @@ private: env.journal, minQuorum); - std::size_t n = 10; + std::size_t const n = 10; std::vector cfgKeys; cfgKeys.reserve(n); hash_set expectedTrusted; @@ -1287,7 +1291,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added == expectedTrusted); @@ -1299,7 +1303,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added.empty()); @@ -1310,11 +1314,11 @@ private: auto trustedKeys = std::make_unique( manifestsOuter, manifestsOuter, - env.app().timeKeeper(), + env.app().getTimeKeeper(), app.config().legacy("database_path"), env.journal); - std::vector emptyCfgKeys; + std::vector const emptyCfgKeys; auto const publisherKeys = randomKeyPair(KeyType::secp256k1); auto const pubSigningKeys = randomKeyPair(KeyType::secp256k1); auto const manifest = base64_encode(makeManifestString( @@ -1324,9 +1328,9 @@ private: pubSigningKeys.second, 1)); - std::vector cfgKeys({strHex(publisherKeys.first)}); + std::vector const cfgPublisherKeys({strHex(publisherKeys.first)}); - BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgKeys)); + BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublisherKeys)); std::vector list({randomValidator(), randomValidator()}); hash_set activeValidators( @@ -1349,7 +1353,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added == activeValidators); @@ -1365,7 +1369,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed == activeValidators); BEAST_EXPECT(changes.added.empty()); @@ -1390,7 +1394,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT( @@ -1413,7 +1417,7 @@ private: app.config().legacy("database_path"), env.journal); - std::vector cfgPublishers; + std::vector const cfgPublishers; hash_set activeValidators; hash_set activeKeys; @@ -1427,11 +1431,11 @@ private: activeValidators.emplace(calcNodeID(valKey)); activeKeys.emplace(valKey); BEAST_EXPECT(trustedKeys->load({}, cfgKeys, cfgPublishers)); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); BEAST_EXPECT(changes.added == asNodeIDs({valKey})); @@ -1450,7 +1454,7 @@ private: env.journal); auto const localKey = randomNode(); - std::vector cfgPublishers; + std::vector const cfgPublishers; hash_set activeValidators; hash_set activeKeys; std::vector cfgKeys{toBase58(TokenType::NodePublic, localKey)}; @@ -1464,11 +1468,11 @@ private: activeKeys.emplace(valKey); BEAST_EXPECT(trustedKeys->load(localKey, cfgKeys, cfgPublishers)); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(changes.removed.empty()); if (cfgKeys.size() > 2) @@ -1530,8 +1534,8 @@ private: pubSigningKeys.second, 1)); - std::vector cfgPublishers({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublishers({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; // Threshold of 1 will result in a union of all the lists BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers, std::size_t(1))); @@ -1540,7 +1544,7 @@ private: auto const sequence = 1; using namespace std::chrono_literals; NetClock::time_point const validUntil = env.timeKeeper().now() + 3600s; - std::vector localKeys{locals[i].first, locals[i].second}; + std::vector const localKeys{locals[i].first, locals[i].second}; auto const blob = makeList(localKeys, sequence, validUntil.time_since_epoch().count()); auto const sig = signList(blob, pubSigningKeys); @@ -1556,11 +1560,11 @@ private: addPublishedList(i); BEAST_EXPECT(trustedKeys->getListThreshold() == 1); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(valKeys.size() * 0.8f)); @@ -1622,8 +1626,8 @@ private: pubSigningKeys.second, 1)); - std::vector cfgPublishers({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublishers({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers)); @@ -1653,7 +1657,7 @@ private: { validUntil2 = validUntil; } - std::vector localKeys{locals[i].first, locals[i].second}; + std::vector const localKeys{locals[i].first, locals[i].second}; auto const blob = makeList(localKeys, sequence, validUntil.time_since_epoch().count()); auto const sig = signList(blob, pubSigningKeys); @@ -1675,7 +1679,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil((valKeys.size() - 3) * 0.8f)); @@ -1706,7 +1710,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil((valKeys.size() - 6) * 0.8f)); @@ -1739,7 +1743,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::numeric_limits::max()); @@ -1795,7 +1799,7 @@ private: BEAST_EXPECT(trustedKeys->expires() == std::nullopt); // Config listed keys have maximum expiry - PublicKey localCfgListed = randomNode(); + PublicKey const localCfgListed = randomNode(); trustedKeys->load({}, {toStr(localCfgListed)}, {}); BEAST_EXPECT( trustedKeys->expires() && @@ -1809,7 +1813,7 @@ private: auto trustedKeys = std::make_unique( manifests, manifests, - env.app().timeKeeper(), + env.app().getTimeKeeper(), app.config().legacy("database_path"), env.journal); @@ -1839,8 +1843,8 @@ private: pubSigningKeys.second, 1)); - std::vector cfgPublishers({strHex(publisherPublic)}); - std::vector emptyCfgKeys; + std::vector const cfgPublishers({strHex(publisherPublic)}); + std::vector const emptyCfgKeys; BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers)); @@ -1872,7 +1876,7 @@ private: // Configure two publishers and prepare 2 lists PreparedList prep1 = addPublishedList(); env.timeKeeper().set(env.timeKeeper().now() + 200s); - PreparedList prep2 = addPublishedList(); + PreparedList const prep2 = addPublishedList(); // Initially, no list has been published, so no known expiration BEAST_EXPECT(trustedKeys->expires() == std::nullopt); @@ -1907,7 +1911,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT( trustedKeys->expires() && @@ -1924,7 +1928,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT( trustedKeys->expires() && @@ -1953,7 +1957,7 @@ private: env.journal, minimumQuorum); - std::vector cfgPublishers; + std::vector const cfgPublishers; std::vector cfgKeys; hash_set activeValidators; cfgKeys.reserve(vlSize); @@ -1969,7 +1973,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); if (minimumQuorum == trustedKeys->quorum() || trustedKeys->quorum() == std::ceil(cfgKeys.size() * 0.8f)) @@ -1993,10 +1997,10 @@ private: */ { - hash_set activeValidators; + hash_set const activeValidators; //== Combinations == - std::array unlSizes = {34, 35, 39, 60}; - std::array nUnlPercent = {0, 20, 30, 50}; + std::array const unlSizes = {34, 35, 39, 60}; + std::array const nUnlPercent = {0, 20, 30, 50}; for (auto us : unlSizes) { for (auto np : nUnlPercent) @@ -2005,7 +2009,7 @@ private: BEAST_EXPECT(validators); if (validators) { - std::uint32_t nUnlSize = us * np / 100; + std::uint32_t const nUnlSize = us * np / 100; auto unl = validators->getTrustedMasterKeys(); hash_set nUnl; auto it = unl.begin(); @@ -2019,7 +2023,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT( validators->quorum() == @@ -2063,7 +2067,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); return validators->quorum() == quorum; } @@ -2080,12 +2084,12 @@ private: // 18 auto nUnl = validators->getNegativeUNL(); BEAST_EXPECT(nUnl.size() == 12); - std::size_t ss = 33; + std::size_t const ss = 33; std::vector data(ss, 0); data[0] = 0xED; for (int i = 0; i < 6; ++i) { - Slice s(data.data(), ss); + Slice const s(data.data(), ss); data[1]++; nUnl.emplace(s); } @@ -2094,7 +2098,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(validators->quorum() == 39); } @@ -2121,7 +2125,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(validators->quorum() == 30); hash_set nUnl; @@ -2136,7 +2140,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(validators->quorum() == 30); } @@ -2165,7 +2169,7 @@ private: BEAST_EXPECT(global != sha512Half(signature, blobVector, version)); { - std::map blobMap{{99, blobVector[0]}}; + std::map const blobMap{{99, blobVector[0]}}; BEAST_EXPECT(global == sha512Half(manifest, blobMap, version)); BEAST_EXPECT(global != sha512Half(blob, blobMap, version)); } @@ -2629,7 +2633,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2650,7 +2654,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -2688,7 +2692,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2708,7 +2712,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().empty()); @@ -2753,7 +2757,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2773,7 +2777,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -2822,7 +2826,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2843,7 +2847,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -2889,7 +2893,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2909,7 +2913,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -2956,7 +2960,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -2976,7 +2980,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().empty()); @@ -3021,7 +3025,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3042,7 +3046,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3080,7 +3084,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3101,7 +3105,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3139,7 +3143,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3159,7 +3163,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3195,7 +3199,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3215,7 +3219,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3260,7 +3264,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3281,7 +3285,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3327,7 +3331,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3347,7 +3351,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3394,7 +3398,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3414,7 +3418,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().empty()); @@ -3453,7 +3457,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3474,7 +3478,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3514,7 +3518,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3535,7 +3539,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3576,7 +3580,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3596,7 +3600,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().empty()); @@ -3637,7 +3641,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3658,7 +3662,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3696,11 +3700,11 @@ private: for (auto const& p : publishers) BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey)); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3734,11 +3738,11 @@ private: for (auto const& p : publishers) BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey)); - TrustChanges changes = trustedKeys->updateTrusted( + TrustChanges const changes = trustedKeys->updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3784,7 +3788,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3805,7 +3809,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); @@ -3853,7 +3857,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == std::ceil(keysTotal * 0.8f)); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == keysTotal); @@ -3873,7 +3877,7 @@ private: activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled); BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1); diff --git a/src/test/app/ValidatorSite_test.cpp b/src/test/app/ValidatorSite_test.cpp index c47c93c426..004c59609c 100644 --- a/src/test/app/ValidatorSite_test.cpp +++ b/src/test/app/ValidatorSite_test.cpp @@ -53,11 +53,11 @@ private: auto trustedSites = std::make_unique(env.app(), env.journal); // load should accept empty sites list - std::vector emptyCfgSites; + std::vector const emptyCfgSites; BEAST_EXPECT(trustedSites->load(emptyCfgSites)); // load should accept valid validator site uris - std::vector cfgSites( + std::vector const cfgSites( {"http://ripple.com/", "http://ripple.com/validators", "http://ripple.com:8080/validators", @@ -139,13 +139,13 @@ private: p->legacy("database_path", good.subdir().string()); return p; }()); - auto& trustedKeys = env.app().validators(); + auto& trustedKeys = env.app().getValidators(); env.timeKeeper().set(env.timeKeeper().now() + 30s); test::StreamSink sink; beast::Journal journal{sink}; - std::vector emptyCfgKeys; + std::vector const emptyCfgKeys; struct publisher { publisher(FetchListConfig const& c) : cfg{c} @@ -181,7 +181,7 @@ private: {{effective2, expires2}}, cfg.ssl, cfg.serverVersion); - std::string pubHex = strHex(item.server->publisherPublic()); + std::string const pubHex = strHex(item.server->publisherPublic()); cfgPublishers.push_back(pubHex); if (item.cfg.failFetch) @@ -240,7 +240,7 @@ private: sink.messages().str()); } - if (u.cfg.expectedRefreshMin) + if (u.cfg.expectedRefreshMin != 0) { BEAST_EXPECTS( myStatus[jss::refresh_interval_min].asInt() == u.cfg.expectedRefreshMin, @@ -298,6 +298,7 @@ private: auto sites = std::make_unique(env.app(), journal); std::vector uris; + uris.reserve(servers.size()); for (auto const& u : servers) uris.push_back(u.uri); sites->load(uris); @@ -336,11 +337,12 @@ private: }; { // Create a file with a real validator list - detail::FileDirGuard good(*this, "test_val", "vl.txt", detail::realValidatorContents()); + detail::FileDirGuard const good( + *this, "test_val", "vl.txt", detail::realValidatorContents()); // Create a file with arbitrary content - detail::FileDirGuard hello(*this, "test_val", "helloworld.txt", "Hello, world!"); + detail::FileDirGuard const hello(*this, "test_val", "helloworld.txt", "Hello, world!"); // Create a file with malformed Json - detail::FileDirGuard json( + detail::FileDirGuard const json( *this, "test_val", "json.txt", R"json({ "version": 2, "extra" : "value" })json"); auto const goodPath = fullPath(good); auto const helloPath = fullPath(hello); @@ -361,7 +363,7 @@ public: { testConfigLoad(); - detail::DirGuard good(*this, "test_fetch"); + detail::DirGuard const good(*this, "test_fetch"); for (auto ssl : {true, false}) { // fetch single site diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 27a8d3b2e0..823cf7aafd 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -90,8 +90,8 @@ class Vault_test : public beast::unit_test::suite env.memoize(vaultAccount); // Several 3rd party accounts which cannot receive funds - Account alice{"alice"}; - Account erin{"erin"}; // not authorized by issuer + Account const alice{"alice"}; + Account const erin{"erin"}; // not authorized by issuer env.fund(XRP(1000), alice, erin); env(fset(alice, asfDepositAuth)); env.close(); @@ -514,14 +514,14 @@ class Vault_test : public beast::unit_test::suite env.require(flags(issuer, asfAllowTrustLineClawback)); env.require(flags(issuer, asfRequireAuth)); - PrettyAsset asset = setup(env); + PrettyAsset const asset = setup(env); testSequence(prefix, env, vault, asset); }; testCases("XRP", [&](Env& env) -> PrettyAsset { return {xrpIssue(), 1'000'000}; }); testCases("IOU", [&](Env& env) -> Asset { - PrettyAsset asset = issuer["IOU"]; + PrettyAsset const asset = issuer["IOU"]; env(trust(owner, asset(1000))); env(trust(depositor, asset(1000))); env(trust(charlie, asset(1000))); @@ -538,7 +538,7 @@ class Vault_test : public beast::unit_test::suite testCases("MPT", [&](Env& env) -> Asset { MPTTester mptt{env, issuer, mptInitNoFund}; mptt.create({.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); - PrettyAsset asset = mptt.issuanceID(); + PrettyAsset const asset = mptt.issuanceID(); mptt.authorize({.account = depositor}); mptt.authorize({.account = charlie}); mptt.authorize({.account = dave}); @@ -567,8 +567,8 @@ class Vault_test : public beast::unit_test::suite Vault& vault)> test, CaseArgs args = {}) { Env env{*this, args.features}; - Account issuer{"issuer"}; - Account owner{"owner"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; Vault vault{env}; env.fund(XRP(1000), issuer, owner); env.close(); @@ -577,7 +577,7 @@ class Vault_test : public beast::unit_test::suite env(fset(issuer, asfRequireAuth)); env.close(); - PrettyAsset asset = issuer["IOU"]; + PrettyAsset const asset = issuer["IOU"]; env(trust(owner, asset(1000))); env(trust(issuer, asset(0), owner, tfSetfAuth)); env(pay(issuer, owner, asset(1000))); @@ -1081,13 +1081,13 @@ class Vault_test : public beast::unit_test::suite Asset const& asset, Vault& vault)> test) { Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; - Account depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; env.fund(XRP(1000), issuer, owner, depositor); env.close(); Vault vault{env}; - Asset asset = xrpIssue(); + Asset const asset = xrpIssue(); test(env, issuer, owner, depositor, asset, vault); }; @@ -1246,13 +1246,13 @@ class Vault_test : public beast::unit_test::suite testcase("IOU fail because MPT is disabled"); Env env{ *this, (testable_amendments() - featureMPTokensV1) | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; env.fund(XRP(1000), issuer, owner); env.close(); - Vault vault{env}; - Asset asset = issuer["IOU"].asset(); + Vault const vault{env}; + Asset const asset = issuer["IOU"].asset(); auto [tx, keylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(temDISABLED)); @@ -1262,15 +1262,15 @@ class Vault_test : public beast::unit_test::suite { testcase("IOU fail create frozen"); Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; env.fund(XRP(1000), issuer, owner); env.close(); env(fset(issuer, asfGlobalFreeze)); env.close(); - Vault vault{env}; - Asset asset = issuer["IOU"].asset(); + Vault const vault{env}; + Asset const asset = issuer["IOU"].asset(); auto [tx, keylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(tecFROZEN)); @@ -1280,15 +1280,15 @@ class Vault_test : public beast::unit_test::suite { testcase("IOU fail create no ripling"); Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; env.fund(XRP(1000), issuer, owner); env.close(); env(fclear(issuer, asfDefaultRipple)); env.close(); - Vault vault{env}; - Asset asset = issuer["IOU"].asset(); + Vault const vault{env}; + Asset const asset = issuer["IOU"].asset(); auto [tx, keylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(terNO_RIPPLE)); env.close(); @@ -1297,13 +1297,13 @@ class Vault_test : public beast::unit_test::suite { testcase("IOU no issuer"); Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; env.fund(XRP(1000), owner); env.close(); - Vault vault{env}; - Asset asset = issuer["IOU"].asset(); + Vault const vault{env}; + Asset const asset = issuer["IOU"].asset(); { auto [tx, keylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(terNO_ACCOUNT)); @@ -1329,7 +1329,7 @@ class Vault_test : public beast::unit_test::suite return defXRP; return a + XRP(1000); } - auto const defIOU = STAmount{a.issue(), 30000}; + auto defIOU = STAmount{a.issue(), 30000}; if (a <= defIOU) return defIOU; return a + STAmount{a.issue(), 1000}; @@ -1351,12 +1351,12 @@ class Vault_test : public beast::unit_test::suite fund(env, gw, {alice, carol}, toFund2, {toFund1}, Fund::All); } - AMM ammAlice(env, alice, asset1, asset2, CreateArg{.log = false, .tfee = 0}); + AMM const ammAlice(env, alice, asset1, asset2, CreateArg{.log = false, .tfee = 0}); Account const owner{"owner"}; env.fund(XRP(1000000), owner); - Vault vault{env}; + Vault const vault{env}; auto [tx, k] = vault.create({.owner = owner, .asset = ammAlice.lptIssue()}); env(tx, ter{tecWRONG_ASSET}); env.close(); @@ -1377,16 +1377,16 @@ class Vault_test : public beast::unit_test::suite Asset const& asset, Vault& vault)> test) { Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; - Account depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; env.fund(XRP(1000), issuer, owner, depositor); env.close(); Vault vault{env}; MPTTester mptt{env, issuer, mptInitNoFund}; // Locked because that is the default flag. mptt.create(); - Asset asset = mptt.issuanceID(); + Asset const asset = mptt.issuanceID(); test(env, issuer, owner, depositor, asset, vault); }; @@ -1436,14 +1436,14 @@ class Vault_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; - Account depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; env.fund(XRP(1000), issuer, owner, depositor); env.close(); - Vault vault{env}; - PrettyAsset asset = issuer["IOU"]; + Vault const vault{env}; + PrettyAsset const asset = issuer["IOU"]; env.trust(asset(1000), owner); env(pay(issuer, owner, asset(100))); env.trust(asset(1000), depositor); @@ -1480,7 +1480,7 @@ class Vault_test : public beast::unit_test::suite }(); auto const MptID = makeMptID(1, vaultAccount); - Asset shares = MptID; + Asset const shares = MptID; { testcase("nontransferable shares cannot be moved"); @@ -1563,7 +1563,7 @@ class Vault_test : public beast::unit_test::suite (args.enableClawback ? tfMPTCanClawback : none) | (args.requireAuth ? tfMPTRequireAuth : none), .mutableFlags = tmfMPTCanMutateCanTransfer}); - PrettyAsset asset = mptt.issuanceID(); + PrettyAsset const asset = mptt.issuanceID(); mptt.authorize({.account = owner}); mptt.authorize({.account = depositor}); if (args.requireAuth) @@ -1654,10 +1654,10 @@ class Vault_test : public beast::unit_test::suite // accounts for the issued shares. auto v = env.le(keylet); BEAST_EXPECT(v); - MPTID share = (*v)[sfShareMPTID]; + MPTID const share = (*v)[sfShareMPTID]; auto issuance = env.le(keylet::mptIssuance(share)); BEAST_EXPECT(issuance); - Number outstandingShares = issuance->at(sfOutstandingAmount); + Number const outstandingShares = issuance->at(sfOutstandingAmount); BEAST_EXPECT(outstandingShares == 100); mptt.set({.account = issuer, .flags = tfMPTLock}); @@ -1761,7 +1761,7 @@ class Vault_test : public beast::unit_test::suite { // Set destination to 3rd party without MPToken - Account charlie{"charlie"}; + Account const charlie{"charlie"}; env.fund(XRP(1000), charlie); env.close(); @@ -1838,7 +1838,7 @@ class Vault_test : public beast::unit_test::suite {.requireAuth = false}); auto const [acctReserve, incReserve] = [this]() -> std::pair { - Env env{*this, testable_amendments()}; + Env const env{*this, testable_amendments()}; return { env.current()->fees().accountReserve(0).drops() / DROPS_PER_XRP.drops(), env.current()->fees().increment.drops() / DROPS_PER_XRP.drops()}; @@ -1898,7 +1898,7 @@ class Vault_test : public beast::unit_test::suite env.close(); } }, - {.requireAuth = false, .initialXRP = acctReserve + incReserve * 4 + 1}); + {.requireAuth = false, .initialXRP = acctReserve + (incReserve * 4) + 1}); testCase([this]( Env& env, @@ -1975,7 +1975,7 @@ class Vault_test : public beast::unit_test::suite auto const vault = env.le(keylet); return vault->at(sfShareMPTID); }(keylet); - PrettyAsset shares = MPTIssue(issuanceId); + PrettyAsset const shares = MPTIssue(issuanceId); { // owner has MPToken for shares they did not explicitly create @@ -2177,14 +2177,14 @@ class Vault_test : public beast::unit_test::suite Account issuer{"issuer"}; env.fund(XRP(1000000), owner, issuer); env.close(); - Vault vault{env}; + Vault const vault{env}; MPTTester mptt{env, issuer, mptInitNoFund}; mptt.create( {.flags = tfMPTCanTransfer | tfMPTCanLock | lsfMPTCanClawback | tfMPTRequireAuth}); mptt.authorize({.account = owner}); mptt.authorize({.account = issuer, .holder = owner}); - PrettyAsset asset = mptt.issuanceID(); + PrettyAsset const asset = mptt.issuanceID(); env(pay(issuer, owner, asset(100))); auto [tx1, k1] = vault.create({.owner = owner, .asset = asset}); env(tx1); @@ -2650,7 +2650,7 @@ class Vault_test : public beast::unit_test::suite } { - PrettyAsset shares = issuanceId(keylet); + PrettyAsset const shares = issuanceId(keylet); auto tx1 = vault.deposit({.depositor = owner, .id = keylet.key, .amount = asset(100)}); env(tx1); @@ -2745,7 +2745,7 @@ class Vault_test : public beast::unit_test::suite env(vault.withdraw( {.depositor = owner, .id = keylet.key, - .amount = asset(Number(1000 + 37 * 5, -1))})); + .amount = asset(Number(1000 + (37 * 5), -1))})); { BEAST_EXPECT(env.balance(owner, asset) == startingOwnerBalance.value()); @@ -2761,7 +2761,7 @@ class Vault_test : public beast::unit_test::suite {.initialIOU = Number(11875, -2)}); auto const [acctReserve, incReserve] = [this]() -> std::pair { - Env env{*this, testable_amendments()}; + Env const env{*this, testable_amendments()}; return { env.current()->fees().accountReserve(0).drops() / DROPS_PER_XRP.drops(), env.current()->fees().increment.drops() / DROPS_PER_XRP.drops()}; @@ -2808,7 +2808,7 @@ class Vault_test : public beast::unit_test::suite env(tx); env.close(); }, - CaseArgs{.initialXRP = acctReserve + incReserve * 4 + 1}); + CaseArgs{.initialXRP = acctReserve + (incReserve * 4) + 1}); testCase( [&, this]( @@ -2843,7 +2843,7 @@ class Vault_test : public beast::unit_test::suite env(tx); env.close(); }, - CaseArgs{.initialXRP = acctReserve + incReserve * 4 + 1}); + CaseArgs{.initialXRP = acctReserve + (incReserve * 4) + 1}); testCase([&, this]( Env& env, @@ -2950,22 +2950,22 @@ class Vault_test : public beast::unit_test::suite testcase("private vault"); Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account issuer{"issuer"}; - Account owner{"owner"}; - Account depositor{"depositor"}; - Account charlie{"charlie"}; - Account pdOwner{"pdOwner"}; - Account credIssuer1{"credIssuer1"}; - Account credIssuer2{"credIssuer2"}; + Account const issuer{"issuer"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const charlie{"charlie"}; + Account const pdOwner{"pdOwner"}; + Account const credIssuer1{"credIssuer1"}; + Account const credIssuer2{"credIssuer2"}; std::string const credType = "credential"; - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(1000), issuer, owner, depositor, charlie, pdOwner, credIssuer1, credIssuer2); env.close(); env(fset(issuer, asfAllowTrustLineClawback)); env.close(); env.require(flags(issuer, asfAllowTrustLineClawback)); - PrettyAsset asset = issuer["IOU"]; + PrettyAsset const asset = issuer["IOU"]; env.trust(asset(1000), owner); env(pay(issuer, owner, asset(500))); env.trust(asset(1000), depositor); @@ -3198,15 +3198,15 @@ class Vault_test : public beast::unit_test::suite testcase("private XRP vault"); Env env{*this, testable_amendments() | featureSingleAssetVault}; - Account owner{"owner"}; - Account depositor{"depositor"}; - Account alice{"charlie"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const alice{"charlie"}; std::string const credType = "credential"; - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(100000), owner, depositor, alice); env.close(); - PrettyAsset asset = xrpIssue(); + PrettyAsset const asset = xrpIssue(); auto [tx, keylet] = vault.create({.owner = owner, .asset = asset, .flags = tfVaultPrivate}); env(tx); env.close(); @@ -3219,7 +3219,7 @@ class Vault_test : public beast::unit_test::suite }(); BEAST_EXPECT(env.le(keylet::account(vaultAccount))); BEAST_EXPECT(env.le(keylet::mptIssuance(issuanceId))); - PrettyAsset shares{issuanceId}; + PrettyAsset const shares{issuanceId}; { testcase("private XRP vault owner can deposit"); @@ -3296,7 +3296,7 @@ class Vault_test : public beast::unit_test::suite testcase("fail pseudo-account allocation"); Env env{*this, testable_amendments() | featureSingleAssetVault}; Account const owner{"owner"}; - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(1000), owner); auto const keylet = keylet::vault(owner.id(), env.seq(owner)); @@ -3362,27 +3362,28 @@ class Vault_test : public beast::unit_test::suite auto const vault = env.le(keylet); return {Account("vault", vault->at(sfAccount)), vault->at(sfShareMPTID)}; }(keylet); - MPTIssue shares(issuanceId); + MPTIssue const shares(issuanceId); env.memoize(vaultAccount); auto const peek = [keylet, &env, this](std::function fn) -> bool { - return env.app().openLedger().modify([&](OpenView& view, beast::Journal j) -> bool { - Sandbox sb(&view, tapNONE); - auto vault = sb.peek(keylet::vault(keylet.key)); - if (!BEAST_EXPECT(vault != nullptr)) + return env.app().getOpenLedger().modify( + [&](OpenView& view, beast::Journal j) -> bool { + Sandbox sb(&view, tapNONE); + auto vault = sb.peek(keylet::vault(keylet.key)); + if (!BEAST_EXPECT(vault != nullptr)) + return false; + auto shares = sb.peek(keylet::mptIssuance(vault->at(sfShareMPTID))); + if (!BEAST_EXPECT(shares != nullptr)) + return false; + if (fn(*vault, *shares)) + { + sb.update(vault); + sb.update(shares); + sb.apply(view); + return true; + } return false; - auto shares = sb.peek(keylet::mptIssuance(vault->at(sfShareMPTID))); - if (!BEAST_EXPECT(shares != nullptr)) - return false; - if (fn(*vault, *shares)) - { - sb.update(vault); - sb.update(shares); - sb.apply(view); - return true; - } - return false; - }); + }); }; test( @@ -4112,11 +4113,11 @@ class Vault_test : public beast::unit_test::suite Env env{*this, testable_amendments() | featureSingleAssetVault}; Account const owner{"owner"}; Account const issuer{"issuer"}; - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(1000), issuer, owner); env.close(); - PrettyAsset asset = issuer["IOU"]; + PrettyAsset const asset = issuer["IOU"]; env.trust(asset(1000), owner); env(pay(issuer, owner, asset(200))); env.close(); @@ -4544,7 +4545,7 @@ class Vault_test : public beast::unit_test::suite auto const setupVault = [&](PrettyAsset const& asset, Account const& owner, Account const& depositor) -> std::pair { - Vault vault{env}; + Vault const vault{env}; auto const& [tx, vaultKeylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(tesSUCCESS)); @@ -4553,7 +4554,7 @@ class Vault_test : public beast::unit_test::suite auto const& vaultSle = env.le(vaultKeylet); BEAST_EXPECT(vaultSle != nullptr); - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.deposit( {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), @@ -4650,7 +4651,7 @@ class Vault_test : public beast::unit_test::suite BEAST_EXPECT(vaultSle != nullptr); if (!vaultSle) return; - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ .issuer = owner, .id = vaultKeylet.key, @@ -4686,7 +4687,7 @@ class Vault_test : public beast::unit_test::suite BEAST_EXPECT(vaultSle != nullptr); if (!vaultSle) return; - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ .issuer = owner, .id = vaultKeylet.key, @@ -4703,7 +4704,7 @@ class Vault_test : public beast::unit_test::suite BEAST_EXPECT(vaultSle != nullptr); if (!vaultSle) return; - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ .issuer = owner, .id = vaultKeylet.key, @@ -4720,7 +4721,7 @@ class Vault_test : public beast::unit_test::suite auto const& vaultSle = env.le(vaultKeylet); if (BEAST_EXPECT(vaultSle != nullptr)) return; - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ .issuer = owner, .id = vaultKeylet.key, @@ -4742,18 +4743,18 @@ class Vault_test : public beast::unit_test::suite Account owner{"alice"}; Account depositor{"bob"}; - Account issuer{"issuer"}; + Account const issuer{"issuer"}; env.fund(XRP(10000), issuer, owner, depositor); env.close(); // Test XRP - PrettyAsset xrp = xrpIssue(); + PrettyAsset const xrp = xrpIssue(); testCase(xrp, "XRP", owner, depositor); testCase(xrp, "XRP (depositor is owner)", owner, owner); // Test IOU - PrettyAsset IOU = issuer["IOU"]; + PrettyAsset const IOU = issuer["IOU"]; env(fset(issuer, asfAllowTrustLineClawback)); env.close(); @@ -4768,7 +4769,7 @@ class Vault_test : public beast::unit_test::suite // Test MPT MPTTester mptt{env, issuer, mptInitNoFund}; mptt.create({.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); - PrettyAsset MPT = mptt.issuanceID(); + PrettyAsset const MPT = mptt.issuanceID(); mptt.authorize({.account = owner}); mptt.authorize({.account = depositor}); env(pay(issuer, owner, MPT(1000))); @@ -4790,7 +4791,7 @@ class Vault_test : public beast::unit_test::suite Account const& owner, Account const& depositor, Account const& issuer) -> std::pair { - Vault vault{env}; + Vault const vault{env}; auto const& [tx, vaultKeylet] = vault.create({.owner = owner, .asset = asset}); env(tx, ter(tesSUCCESS)); @@ -4839,8 +4840,8 @@ class Vault_test : public beast::unit_test::suite "VaultClawback (asset) - " + prefix + " clawback for different asset fails"); auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); - Account issuer2{"issuer2"}; - PrettyAsset asset2 = issuer2["FOO"]; + Account const issuer2{"issuer2"}; + PrettyAsset const asset2 = issuer2["FOO"]; env(vault.clawback({ .issuer = issuer, .id = vaultKeylet.key, @@ -4901,7 +4902,7 @@ class Vault_test : public beast::unit_test::suite BEAST_EXPECT(vaultSle != nullptr); if (!vaultSle) return; - Asset share = vaultSle->at(sfShareMPTID); + Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ .issuer = issuer, @@ -4958,17 +4959,17 @@ class Vault_test : public beast::unit_test::suite Account owner{"alice"}; Account depositor{"bob"}; - Account issuer{"issuer"}; + Account const issuer{"issuer"}; env.fund(XRP(10000), issuer, owner, depositor); env.close(); // Test XRP - PrettyAsset xrp = xrpIssue(); + PrettyAsset const xrp = xrpIssue(); testCase(xrp, "XRP", owner, depositor, issuer); // Test IOU - PrettyAsset IOU = issuer["IOU"]; + PrettyAsset const IOU = issuer["IOU"]; env(fset(issuer, asfAllowTrustLineClawback)); env.close(); env.trust(IOU(1000), owner); @@ -4981,7 +4982,7 @@ class Vault_test : public beast::unit_test::suite // Test MPT MPTTester mptt{env, issuer, mptInitNoFund}; mptt.create({.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); - PrettyAsset MPT = mptt.issuanceID(); + PrettyAsset const MPT = mptt.issuanceID(); mptt.authorize({.account = owner}); mptt.authorize({.account = depositor}); env(pay(issuer, depositor, MPT(1000))); @@ -5000,7 +5001,7 @@ class Vault_test : public beast::unit_test::suite Account const owner{"owner"}; Account const issuer{"issuer"}; - Vault vault{env}; + Vault const vault{env}; env.fund(XRP(1'000'000), issuer, owner); env.close(); @@ -5115,7 +5116,7 @@ class Vault_test : public beast::unit_test::suite testcase("Assets Maximum: IOU"); // Almost anything goes with IOUs - PrettyAsset iouAsset = issuer["IOU"]; + PrettyAsset const iouAsset = issuer["IOU"]; env.trust(iouAsset(1000), owner); env(pay(issuer, owner, iouAsset(200))); env.close(); @@ -5230,6 +5231,102 @@ class Vault_test : public beast::unit_test::suite } } + // Reproduction: canWithdraw IOU limit check bypassed when + // withdrawal amount is specified in shares (MPT) rather than in assets. + void + testBug6_LimitBypassWithShares() + { + using namespace test::jtx; + testcase("Bug6 - limit bypass with share-denominated withdrawal"); + + auto const allAmendments = testable_amendments() | featureSingleAssetVault; + + for (auto const& features : {allAmendments, allAmendments - fixSecurity3_1_3}) + { + bool const withFix = features[fixSecurity3_1_3]; + + Env env{*this, features}; + Account const owner{"owner"}; + Account const issuer{"issuer"}; + Account const depositor{"depositor"}; + Account const charlie{"charlie"}; + Vault const vault{env}; + + env.fund(XRP(1000), issuer, owner, depositor, charlie); + env(fset(issuer, asfAllowTrustLineClawback)); + env.close(); + + PrettyAsset const asset = issuer["IOU"]; + env.trust(asset(1000), owner); + env.trust(asset(1000), depositor); + env(pay(issuer, owner, asset(200))); + env(pay(issuer, depositor, asset(200))); + env.close(); + + // Charlie gets a LOW trustline limit of 5 + env.trust(asset(5), charlie); + env.close(); + + auto const [tx, keylet] = vault.create({.owner = owner, .asset = asset}); + env(tx); + env.close(); + + auto const depositTx = + vault.deposit({.depositor = depositor, .id = keylet.key, .amount = asset(100)}); + env(depositTx); + env.close(); + + // Get the share MPT info + auto const vaultSle = env.le(keylet); + if (!BEAST_EXPECT(vaultSle)) + return; + auto const mptIssuanceID = vaultSle->at(sfShareMPTID); + MPTIssue const shares(mptIssuanceID); + PrettyAsset const share(shares); + + // CONTROL: Withdraw 10 IOU (asset-denominated) to charlie. + // Charlie's limit is 5, so this should be rejected with tecNO_LINE + // regardless of the amendment. + { + auto withdrawTx = + vault.withdraw({.depositor = depositor, .id = keylet.key, .amount = asset(10)}); + withdrawTx[sfDestination] = charlie.human(); + env(withdrawTx, ter{tecNO_LINE}); + env.close(); + } + auto const charlieBalanceBefore = env.balance(charlie, asset.raw().get()); + + // Withdraw the equivalent amount in shares to charlie. + // Post-fix: rejected (tecNO_LINE) because the share amount is + // converted to assets and the trustline limit is checked. + // Pre-fix: succeeds (tesSUCCESS) because the limit check was + // skipped for share-denominated withdrawals. + { + auto withdrawTx = vault.withdraw( + {.depositor = depositor, + .id = keylet.key, + .amount = STAmount(share, 10'000'000)}); + withdrawTx[sfDestination] = charlie.human(); + env(withdrawTx, ter{withFix ? TER{tecNO_LINE} : TER{tesSUCCESS}}); + env.close(); + + auto const charlieBalanceAfter = env.balance(charlie, asset.raw().get()); + if (withFix) + { + // Post-fix: charlie's balance is unchanged — the withdrawal + // was correctly rejected despite being share-denominated. + BEAST_EXPECT(charlieBalanceAfter == charlieBalanceBefore); + } + else + { + // Pre-fix: charlie received the assets, bypassing the + // trustline limit. + BEAST_EXPECT(charlieBalanceAfter > charlieBalanceBefore); + } + } + } + } + public: void run() override @@ -5250,6 +5347,7 @@ public: testVaultClawbackBurnShares(); testVaultClawbackAssets(); testAssetsMaximum(); + testBug6_LimitBypassWithShares(); } }; diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 041b73f0ca..93add98f3a 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -25,7 +25,7 @@ Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return nullptr; } -std::vector const +std::vector hexToBytes(std::string const& hex) { auto const ws = boost::algorithm::unhex(hex); @@ -62,7 +62,7 @@ uleb128(IT&& it) do { - if (shift > sizeof(std::uint64_t) * 8 - 7) + if (shift > (sizeof(std::uint64_t) * 8) - 7) return {0, 0}; byte = *it++; val |= (byte & 0x7F) << shift; @@ -100,7 +100,7 @@ getSection(Bytes const& module, std::uint8_t n) return {0, 0}; auto [sz, cnt] = uleb128(module.cbegin() + pos); - if (!cnt) + if (cnt == 0u) return {0, 0}; if (pos + cnt + sz > module.size()) return {0, 0}; @@ -123,10 +123,8 @@ runFinishFunction(std::string const& code) { return std::optional(re->result); } - else - { - return std::nullopt; - } + + return std::nullopt; } struct Wasm_test : public beast::unit_test::suite diff --git a/src/test/app/XChain_test.cpp b/src/test/app/XChain_test.cpp index b90ff49a84..abaeccb4ff 100644 --- a/src/test/app/XChain_test.cpp +++ b/src/test/app/XChain_test.cpp @@ -130,7 +130,7 @@ struct SEnv std::shared_ptr bridge(Json::Value const& jvb) { - STXChainBridge b(jvb); + STXChainBridge const b(jvb); auto tryGet = [&](STXChainBridge::ChainType ct) -> std::shared_ptr { if (auto r = env_.le(keylet::bridge(b, ct))) @@ -180,7 +180,7 @@ struct XEnv : public jtx::XChainBridgeObjects, public SEnv XEnv(T& s, bool side = false) : SEnv(s, jtx::envconfig(), features) { using namespace jtx; - STAmount xrp_funds{XRP(10000)}; + STAmount const xrp_funds{XRP(10000)}; if (!side) { @@ -359,7 +359,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj try { exceptionPresent = false; - [[maybe_unused]] STXChainBridge testBridge1(jBridge); + [[maybe_unused]] STXChainBridge const testBridge1(jBridge); } catch (std::exception& ec) { @@ -372,7 +372,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { exceptionPresent = false; jBridge["Extra"] = 1; - [[maybe_unused]] STXChainBridge testBridge2(jBridge); + [[maybe_unused]] STXChainBridge const testBridge2(jBridge); } catch ([[maybe_unused]] std::exception& ec) { @@ -385,7 +385,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj void testXChainCreateBridge() { - XRPAmount res1 = reserve(1); + XRPAmount const res1 = reserve(1); using namespace jtx; testcase("Create Bridge"); @@ -807,12 +807,12 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj auto const& expected = expected_result[test_result.size()]; mcEnv.tx(create_bridge(a, bridge(a, ia, b, ib)), ter(TER::fromInt(expected.first))); - TER mcTER = mcEnv.env_.ter(); + TER const mcTER = mcEnv.env_.ter(); scEnv.tx(create_bridge(b, bridge(a, ia, b, ib)), ter(TER::fromInt(expected.second))); - TER scTER = scEnv.env_.ter(); + TER const scTER = scEnv.env_.ter(); - bool pass = isTesSuccess(mcTER) && isTesSuccess(scTER); + bool const pass = isTesSuccess(mcTER) && isTesSuccess(scTER); test_result.emplace_back(mcTER, scTER, pass); }; @@ -1155,8 +1155,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj testXChainCreateClaimID() { using namespace jtx; - XRPAmount res1 = reserve(1); - XRPAmount tx_fee = txFee(); + XRPAmount const res1 = reserve(1); + XRPAmount const tx_fee = txFee(); testcase("Create ClaimID"); @@ -1173,7 +1173,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { XEnv xenv(*this, true); - Balance scAlice_bal(xenv, scAlice); + Balance const scAlice_bal(xenv, scAlice); xenv.tx(create_bridge(Account::master, jvb)) .tx(xchain_create_claim_id(scAlice, jvb, reward, mcAlice)) @@ -1240,8 +1240,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj testXChainCommit() { using namespace jtx; - XRPAmount res0 = reserve(0); - XRPAmount tx_fee = txFee(); + XRPAmount const res0 = reserve(0); + XRPAmount const tx_fee = txFee(); testcase("Commit"); @@ -1252,7 +1252,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { XEnv xenv(*this); - Balance alice_bal(xenv, mcAlice); + Balance const alice_bal(xenv, mcAlice); auto const amt = XRP(1000); xenv.tx(create_bridge(mcDoor, jvb)) @@ -1260,7 +1260,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(xchain_commit(mcAlice, jvb, 1, amt, scBob)) .close(); - STAmount claim_cost = amt; + STAmount const claim_cost = amt; BEAST_EXPECT(alice_bal.diff() == -(claim_cost + tx_fee)); } @@ -1369,7 +1369,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj using namespace jtx; testcase("Add Attestation"); - XRPAmount res0 = reserve(0); + XRPAmount const res0 = reserve(0); XRPAmount tx_fee = txFee(); auto multiTtxFee = [&](std::uint32_t m) -> STAmount { @@ -1457,7 +1457,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj std::uint32_t const quorum_7 = 7; std::vector const signers_ = [] { constexpr int numSigners = 4; - std::uint32_t weights[] = {1, 2, 4, 4}; + std::uint32_t const weights[] = {1, 2, 4, 4}; std::vector result; result.reserve(numSigners); @@ -1515,7 +1515,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj std::uint32_t const quorum_7 = 7; std::vector const signers_ = [] { constexpr int numSigners = 4; - std::uint32_t weights[] = {1, 2, 4, 4}; + std::uint32_t const weights[] = {1, 2, 4, 4}; std::vector result; result.reserve(numSigners); @@ -1575,7 +1575,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj std::uint32_t const quorum_7 = 7; std::vector const signers_ = [] { constexpr int numSigners = 4; - std::uint32_t weights[] = {1, 2, 4, 4}; + std::uint32_t const weights[] = {1, 2, 4, 4}; std::vector result; result.reserve(numSigners); @@ -1634,7 +1634,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj std::uint32_t const quorum_7 = 7; std::vector const signers_ = [] { constexpr int numSigners = 4; - std::uint32_t weights[] = {1, 2, 4, 4}; + std::uint32_t const weights[] = {1, 2, 4, 4}; std::vector result; result.reserve(numSigners); @@ -1697,8 +1697,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj auto const amt_plus_reward = amt + reward; { - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv.tx(create_bridge(mcDoor, jvb, reward, XRP(20))) .close() @@ -1719,8 +1719,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // send first batch of account create attest for all 3 // account create - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(1, amt, scuAlice, 2)) .multiTx(att_create_acct_vec(3, amt, scuCarol, 2)) @@ -1740,8 +1740,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // complete attestations for 2nd account create => should // not complete - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(2, amt, scuBob, 3, 2)).close(); @@ -1756,8 +1756,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // complete attestations for 3rd account create => should // not complete - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(3, amt, scuCarol, 3, 2)).close(); @@ -1772,8 +1772,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // complete attestations for 1st account create => account // should be created - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(1, amt, scuAlice, 3, 1)).close(); @@ -1791,8 +1791,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // resend attestations for 3rd account create => still // should not complete - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(3, amt, scuCarol, 3, 2)).close(); @@ -1808,8 +1808,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // resend attestations for 2nd account create => account // should be created - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(2, amt, scuBob, 1)).close(); @@ -1824,8 +1824,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { // resend attestations for 3rc account create => account // should be created - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(3, amt, scuCarol, 1)).close(); @@ -1850,8 +1850,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, reward, XRP(20))).close(); { - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv.tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, amt, reward)) .close(); @@ -1864,8 +1864,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(jtx::signers(Account::master, quorum, signers)) .close(); - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); scEnv.multiTx(att_create_acct_vec(1, amt, scuAlice, 2)).close(); BEAST_EXPECT(!!scEnv.caClaimID(jvb, 1)); // claim id present @@ -1892,8 +1892,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, reward, XRP(20))).close(); { - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv.tx(sidechain_xchain_account_create(mcCarol, jvb, scAlice, amt, reward)) .close(); @@ -1906,9 +1906,9 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(jtx::signers(Account::master, quorum, signers)) .close(); - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); - Balance alice(scEnv, scAlice); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); + Balance const alice(scEnv, scAlice); scEnv.multiTx(att_create_acct_vec(1, amt, scAlice, 2)).close(); BEAST_EXPECT(!!scEnv.caClaimID(jvb, 1)); // claim id present @@ -1935,8 +1935,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, reward, XRP(20))).close(); { - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv.tx(sidechain_xchain_account_create(mcCarol, jvb, scAlice, amt, reward)) .close(); @@ -1950,9 +1950,9 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(fset("scAlice", asfDepositAuth)) // set deposit auth .close(); - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); - Balance alice(scEnv, scAlice); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); + Balance const alice(scEnv, scAlice); scEnv.multiTx(att_create_acct_vec(1, amt, scAlice, 2)).close(); BEAST_EXPECT(!!scEnv.caClaimID(jvb, 1)); // claim id present @@ -1979,8 +1979,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj auto const amt_plus_reward = amt + reward; { - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv.tx(create_bridge(mcDoor, jvb, reward, XRP(20))) .close() @@ -2002,8 +2002,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .close(); { - Balance attester(scEnv, scAttester); - Balance door(scEnv, Account::master); + Balance const attester(scEnv, scAttester); + Balance const door(scEnv, Account::master); auto const bad_amt = XRP(10); std::uint32_t txCount = 0; @@ -2290,16 +2290,16 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj XEnv mcEnv(*this); XEnv scEnv(*this, true); - XRPAmount tx_fee = mcEnv.txFee(); + XRPAmount const tx_fee = mcEnv.txFee(); - Account a{"a"}; - Account doorA{"doorA"}; + Account const a{"a"}; + Account const doorA{"doorA"}; - STAmount funds{XRP(10000)}; + STAmount const funds{XRP(10000)}; mcEnv.fund(funds, a); mcEnv.fund(funds, doorA); - Account ua{"ua"}; // unfunded account we want to create + Account const ua{"ua"}; // unfunded account we want to create BridgeDef xrp_b{ doorA, @@ -2317,8 +2317,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj auto const amt = XRP(777); auto const amt_plus_reward = amt + xrp_b.reward; { - Balance bal_doorA(mcEnv, doorA); - Balance bal_a(mcEnv, a); + Balance const bal_doorA(mcEnv, doorA); + Balance const bal_a(mcEnv, a); mcEnv.tx(sidechain_xchain_account_create(a, xrp_b.jvb, ua, amt, xrp_b.reward)).close(); @@ -2360,8 +2360,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj { using namespace jtx; - XRPAmount res0 = reserve(0); - XRPAmount tx_fee = txFee(); + XRPAmount const res0 = reserve(0); + XRPAmount const tx_fee = txFee(); testcase("Claim"); @@ -2436,7 +2436,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj BalanceTransfer transfer( scEnv, Account::master, scBob, scAlice, &payees[0], 1, withClaim); - jtx::signer master_signer(Account::master); + jtx::signer const master_signer(Account::master); scEnv .tx(claim_attestation( scAttester, @@ -2481,7 +2481,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj BalanceTransfer transfer( scEnv, Account::master, scBob, scAlice, &payees[0], 1, withClaim); - jtx::signer master_signer(payees[0]); + jtx::signer const master_signer(payees[0]); scEnv .tx(claim_attestation( scAttester, @@ -2861,7 +2861,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj XEnv scEnv(*this, true); mcEnv.tx(create_bridge(mcDoor, jvb)).close(); - STAmount huge_reward{XRP(20000)}; + STAmount const huge_reward{XRP(20000)}; BEAST_EXPECT(huge_reward > scEnv.balance(scAlice)); scEnv.tx(create_bridge(Account::master, jvb, huge_reward)) @@ -3009,7 +3009,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // the transfer failed, but check that we can still use the // claimID with a different account - Balance scCarol_bal(scEnv, scCarol); + Balance const scCarol_bal(scEnv, scCarol); scEnv.tx(xchain_claim(scAlice, jvb, claimID, amt, scCarol)).close(); BEAST_EXPECT(scCarol_bal.diff() == amt); @@ -3026,7 +3026,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(fset("scBob", 0, asfDepositAuth)) // clear deposit auth .close(); - Balance scBob_bal(scEnv, scBob); + Balance const scBob_bal(scEnv, scBob); scEnv.tx(txns.back()).close(); BEAST_EXPECT(scBob_bal.diff() == amt); } @@ -3078,7 +3078,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // the transfer failed, but check that we can still use the // claimID with a different account - Balance scCarol_bal(scEnv, scCarol); + Balance const scCarol_bal(scEnv, scCarol); scEnv.tx(xchain_claim(scAlice, jvb, claimID, amt, scCarol)).close(); BEAST_EXPECT(scCarol_bal.diff() == amt); @@ -3095,7 +3095,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(fset("scBob", 0, asfRequireDest)) // clear dest tag .close(); - Balance scBob_bal(scEnv, scBob); + Balance const scBob_bal(scEnv, scBob); scEnv.tx(txns.back()).close(); BEAST_EXPECT(scBob_bal.diff() == amt); @@ -3126,7 +3126,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // we should be able to submit the attestations, but the transfer // should not occur because dest account has deposit auth set - Balance scBob_bal(scEnv, scBob); + Balance const scBob_bal(scEnv, scBob); scEnv.multiTx(claim_attestations( scAttester, jvb, mcAlice, amt, payees, true, claimID, dst, signers)); @@ -3134,7 +3134,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // Check that check that we still can use the claimID to transfer // the amount to a different account - Balance scCarol_bal(scEnv, scCarol); + Balance const scCarol_bal(scEnv, scCarol); scEnv.tx(xchain_claim(scAlice, jvb, claimID, amt, scCarol)).close(); BEAST_EXPECT(scCarol_bal.diff() == amt); @@ -3213,7 +3213,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj &payees[0], UT_XCHAIN_DEFAULT_QUORUM, withClaim); - Balance scAlice_bal(scEnv, scAlice); + Balance const scAlice_bal(scEnv, scAlice); scEnv.multiTx(claim_attestations( scAttester, jvb, mcAlice, amt, payees, true, claimID, dst, signers)); @@ -3261,7 +3261,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj &payees[0], UT_XCHAIN_DEFAULT_QUORUM, withClaim); - Balance scAlice_bal(scEnv, scAlice); + Balance const scAlice_bal(scEnv, scAlice); scEnv.multiTx(claim_attestations( scAttester, jvb, mcAlice, amt, payees, true, claimID, dst, signers)); STAmount claim_cost = tiny_reward; @@ -3350,7 +3350,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(xchain_commit(mcAlice, jvb, claimID, amt, dst)).close(); // balance of last signer should not change (has deposit auth) - Balance last_signer(scEnv, unpaid); + Balance const last_signer(scEnv, unpaid); // make sure all signers except the last one get the // split_reward @@ -3414,7 +3414,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj using namespace jtx; testcase("Bridge Create Account"); - XRPAmount tx_fee = txFee(); + XRPAmount const tx_fee = txFee(); // coverage test: transferHelper() - dst == src { @@ -3427,7 +3427,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj .tx(jtx::signers(Account::master, quorum, signers)) .close(); - Balance door(scEnv, Account::master); + Balance const door(scEnv, Account::master); // scEnv.tx(att_create_acct_batch1(1, amt, // Account::master)).close(); @@ -3451,8 +3451,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); - Balance carol(mcEnv, mcCarol); + Balance const door(mcEnv, mcDoor); + Balance const carol(mcEnv, mcCarol); mcEnv .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(19), reward), @@ -3469,7 +3469,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(20), reward), @@ -3487,7 +3487,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv.disableFeature(featureXChainBridge) .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(20), reward), @@ -3503,7 +3503,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(-20), reward), @@ -3519,7 +3519,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(20), XRP(-1)), @@ -3535,7 +3535,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv .tx(sidechain_xchain_account_create(mcDoor, jvb, scuAlice, XRP(20), XRP(1)), @@ -3551,7 +3551,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj mcEnv.tx(create_bridge(mcDoor, jvb, XRP(1), XRP(20))).close(); - Balance door(mcEnv, mcDoor); + Balance const door(mcEnv, mcDoor); mcEnv .tx(sidechain_xchain_account_create(mcCarol, jvb, scuAlice, XRP(20), XRP(2)), @@ -3566,8 +3566,8 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj testFeeDipsIntoReserve() { using namespace jtx; - XRPAmount res0 = reserve(0); - XRPAmount tx_fee = txFee(); + XRPAmount const res0 = reserve(0); + XRPAmount const tx_fee = txFee(); testcase("Fee dips into reserve"); @@ -3660,7 +3660,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // Create a bridge and add an attestation with a bad public key XEnv scEnv(*this, true); std::uint32_t const claimID = 1; - std::optional dst{scBob}; + std::optional const dst{scBob}; auto const amt = XRP(1000); scEnv.tx(create_bridge(Account::master, jvb)) .tx(jtx::signers(Account::master, quorum, signers)) @@ -3689,7 +3689,7 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj // public key XEnv scEnv(*this, true); std::uint32_t const createCount = 1; - Account dst{scBob}; + Account const dst{scBob}; auto const amt = XRP(1000); auto const rewardAmt = XRP(1); scEnv.tx(create_bridge(Account::master, jvb)) @@ -3789,8 +3789,8 @@ private: bool verify(ENV& env, jtx::Account const& acct) const { - STAmount diff{env.balance(acct) - startAmount}; - bool check = diff == expectedDiff; + STAmount const diff{env.balance(acct) - startAmount}; + bool const check = diff == expectedDiff; return check; } }; @@ -3856,7 +3856,7 @@ private: auto& c = counters[bridge]; auto& create_claims = claims.create_claims[c.claim_count]; auto num_attns = create_claims.size(); - if (num_attns) + if (num_attns != 0u) { c.num_create_attn_sent += sendCreateAttestations(i, bridge, create_claims); @@ -4093,7 +4093,7 @@ private: size_t i = 0; for (i = 0; i < num_signers; ++i) { - size_t signer_idx = (rnd + i) % num_signers; + size_t const signer_idx = (rnd + i) % num_signers; if (!(cr.attested[signer_idx])) { @@ -4251,7 +4251,7 @@ private: // check all signers, but start at a random one for (size_t i = 0; i < num_signers; ++i) { - size_t signer_idx = (rnd + i) % num_signers; + size_t const signer_idx = (rnd + i) % num_signers; if (!(xfer.attested[signer_idx])) { // enqueue one attestation for this signer @@ -4275,7 +4275,7 @@ private: } // return true if quorum was reached, false otherwise - bool quorum = + bool const quorum = std::count(xfer.attested.begin(), xfer.attested.end(), true) >= bridge_.quorum; if (quorum && xfer.with_claim == WithClaim::no) { @@ -4380,7 +4380,7 @@ public: for (auto it = sm_.begin(); it != sm_.end();) { auto vis = [&](auto& sm) { - uint32_t rnd = distrib(gen); + uint32_t const rnd = distrib(gen); return sm.advance(time, rnd); }; auto& [t, sm] = *it; @@ -4446,14 +4446,14 @@ public: for (auto& acct : a) { - STAmount amt{XRP(100000)}; + STAmount const amt{XRP(100000)}; mcEnv.fund(amt, acct); scEnv.fund(amt, acct); } - Account USDLocking{"USDLocking"}; - IOU usdLocking{USDLocking["USD"]}; - IOU usdIssuing{doorUSDIssuing["USD"]}; + Account const USDLocking{"USDLocking"}; + IOU const usdLocking{USDLocking["USD"]}; + IOU const usdIssuing{doorUSDIssuing["USD"]}; mcEnv.fund(XRP(100000), USDLocking); mcEnv.close(); diff --git a/src/test/app/tx/apply_test.cpp b/src/test/app/tx/apply_test.cpp index 10b0544f49..6d3efea5f3 100644 --- a/src/test/app/tx/apply_test.cpp +++ b/src/test/app/tx/apply_test.cpp @@ -37,7 +37,7 @@ public: { test::jtx::Env fully_canonical(*this, test::jtx::testable_amendments()); - Validity valid = + Validity const valid = checkValidity( fully_canonical.app().getHashRouter(), tx, fully_canonical.current()->rules()) .first; diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 67e16c5cec..918bbb5f09 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -7,6 +7,7 @@ use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; use xrpl_std::core::locator::Locator; +use xrpl_std::core::types::blob::DEFAULT_BLOB_SIZE; use xrpl_std::core::types::issue::Issue; use xrpl_std::core::types::issue::XrpIssue; use xrpl_std::core::types::keylets; @@ -15,6 +16,7 @@ use xrpl_std::host; use xrpl_std::host::error_codes; use xrpl_std::host::trace::{trace, trace_num as trace_number}; use xrpl_std::sfield; +use xrpl_std::types::XRPL_CONTRACT_DATA_SIZE; mod host_bindings_loose; include!("host_bindings_loose.rs"); @@ -340,7 +342,7 @@ pub extern "C" fn finish() -> i32 { error_codes::INVALID_PARAMS, "get_tx_nested_array_len_neg_len", ); - let long_len = 4 * 1024 + 1; + let long_len = DEFAULT_BLOB_SIZE + 1; check_result( unsafe { host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, long_len as i32) @@ -705,8 +707,9 @@ pub extern "C" fn finish() -> i32 { error_codes::DATA_FIELD_TOO_LARGE, "get_ledger_obj_nested_array_len_too_big_slice", ); + let too_big_data_len = XRPL_CONTRACT_DATA_SIZE + 1; check_result( - unsafe { host::update_data(locator.as_ptr(), long_len) }, + unsafe { host::update_data(locator.as_ptr(), too_big_data_len) }, error_codes::DATA_FIELD_TOO_LARGE, "update_data_too_big_slice", ); diff --git a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp new file mode 100644 index 0000000000..6ade5fea14 --- /dev/null +++ b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp @@ -0,0 +1,2238 @@ +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const functions5kHex = + "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" + "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" + "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" + "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" + "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" + "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" + "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" + "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" + "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" + "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" + "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" + "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" + "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" + "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" + "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" + "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" + "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" + "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" + "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" + "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" + "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" + "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" + "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" + "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" + "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" + "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" + "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" + "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" + "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" + "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" + "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" + "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" + "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" + "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" + "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" + "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" + "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" + "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" + "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" + "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" + "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" + "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" + "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" + "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" + "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" + "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" + "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" + "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" + "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" + "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" + "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" + "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" + "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" + "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" + "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" + "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" + "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" + "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" + "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" + "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" + "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" + "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" + "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" + "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" + "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" + "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" + "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" + "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" + "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" + "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" + "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" + "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" + "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" + "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" + "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" + "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" + "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" + "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" + "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" + "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" + "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" + "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" + "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" + "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" + "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" + "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" + "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" + "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" + "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" + "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" + "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" + "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" + "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" + "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" + "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" + "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" + "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" + "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" + "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" + "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" + "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" + "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" + "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" + "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" + "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" + "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" + "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" + "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" + "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" + "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" + "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" + "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" + "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" + "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" + "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" + "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" + "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" + "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" + "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" + "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" + "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" + "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" + "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" + "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" + "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" + "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" + "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" + "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" + "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" + "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" + "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" + "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" + "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" + "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" + "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" + "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" + "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" + "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" + "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" + "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" + "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" + "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" + "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" + "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" + "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" + "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" + "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" + "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" + "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" + "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" + "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" + "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" + "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" + "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" + "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" + "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" + "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" + "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" + "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" + "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" + "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" + "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" + "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" + "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" + "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" + "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" + "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" + "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" + "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" + "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" + "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" + "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" + "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" + "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" + "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" + "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" + "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" + "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" + "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" + "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" + "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" + "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" + "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" + "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" + "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" + "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" + "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" + "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" + "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" + "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" + "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" + "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" + "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" + "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" + "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" + "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" + "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" + "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" + "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" + "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" + "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" + "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" + "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" + "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" + "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" + "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" + "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" + "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" + "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" + "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" + "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" + "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" + "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" + "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" + "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" + "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" + "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" + "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" + "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" + "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" + "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" + "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" + "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" + "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" + "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" + "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" + "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" + "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" + "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" + "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" + "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" + "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" + "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" + "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" + "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" + "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" + "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" + "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" + "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" + "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" + "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" + "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" + "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" + "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" + "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" + "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" + "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" + "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" + "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" + "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" + "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" + "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" + "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" + "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" + "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" + "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" + "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" + "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" + "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" + "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" + "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" + "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" + "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" + "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" + "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" + "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" + "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" + "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" + "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" + "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" + "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" + "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" + "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" + "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" + "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" + "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" + "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" + "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" + "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" + "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" + "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" + "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" + "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" + "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" + "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" + "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" + "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" + "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" + "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" + "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" + "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" + "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" + "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" + "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" + "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" + "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" + "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" + "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" + "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" + "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" + "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" + "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" + "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" + "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" + "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" + "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" + "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" + "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" + "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" + "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" + "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" + "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" + "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" + "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" + "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" + "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" + "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" + "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" + "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" + "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" + "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" + "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" + "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" + "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" + "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" + "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" + "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" + "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" + "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" + "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" + "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" + "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" + "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" + "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" + "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" + "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" + "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" + "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" + "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" + "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" + "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" + "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" + "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" + "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" + "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" + "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" + "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" + "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" + "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" + "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" + "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" + "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" + "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" + "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" + "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" + "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" + "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" + "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" + "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" + "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" + "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" + "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" + "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" + "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" + "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" + "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" + "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" + "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" + "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" + "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" + "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" + "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" + "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" + "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" + "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" + "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" + "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" + "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" + "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" + "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" + "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" + "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" + "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" + "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" + "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" + "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" + "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" + "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" + "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" + "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" + "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" + "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" + "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" + "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" + "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" + "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" + "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" + "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" + "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" + "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" + "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" + "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" + "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" + "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" + "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" + "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" + "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" + "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" + "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" + "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" + "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" + "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" + "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" + "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" + "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" + "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" + "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" + "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" + "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" + "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" + "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" + "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" + "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" + "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" + "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" + "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" + "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" + "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" + "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" + "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" + "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" + "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" + "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" + "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" + "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" + "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" + "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" + "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" + "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" + "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" + "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" + "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" + "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" + "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" + "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" + "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" + "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" + "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" + "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" + "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" + "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" + "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" + "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" + "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" + "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" + "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" + "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" + "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" + "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" + "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" + "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" + "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" + "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" + "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" + "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" + "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" + "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" + "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" + "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" + "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" + "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" + "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" + "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" + "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" + "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" + "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" + "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" + "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" + "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" + "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" + "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" + "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" + "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" + "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" + "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" + "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" + "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" + "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" + "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" + "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" + "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" + "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" + "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" + "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" + "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" + "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" + "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" + "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" + "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" + "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" + "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" + "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" + "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" + "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" + "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" + "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" + "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" + "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" + "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" + "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" + "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" + "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" + "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" + "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" + "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" + "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" + "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" + "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" + "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" + "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" + "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" + "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" + "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" + "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" + "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" + "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" + "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" + "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" + "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" + "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" + "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" + "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" + "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" + "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" + "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" + "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" + "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" + "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" + "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" + "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" + "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" + "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" + "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" + "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" + "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" + "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" + "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" + "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" + "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" + "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" + "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" + "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" + "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" + "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" + "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" + "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" + "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" + "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" + "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" + "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" + "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" + "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" + "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" + "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" + "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" + "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" + "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" + "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" + "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" + "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" + "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" + "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" + "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" + "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" + "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" + "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" + "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" + "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" + "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" + "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" + "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" + "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" + "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" + "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" + "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" + "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" + "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" + "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" + "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" + "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" + "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" + "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" + "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" + "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" + "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" + "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" + "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" + "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" + "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" + "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" + "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" + "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" + "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" + "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" + "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" + "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" + "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" + "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" + "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" + "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" + "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" + "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" + "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" + "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" + "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" + "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" + "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" + "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" + "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" + "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" + "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" + "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" + "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" + "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" + "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" + "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" + "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" + "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" + "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" + "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" + "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" + "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" + "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" + "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" + "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" + "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" + "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" + "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" + "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" + "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" + "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" + "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" + "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" + "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" + "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" + "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" + "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" + "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" + "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" + "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" + "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" + "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" + "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" + "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" + "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" + "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" + "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" + "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" + "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" + "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" + "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" + "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" + "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" + "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" + "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" + "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" + "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" + "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" + "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" + "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" + "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" + "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" + "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" + "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" + "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" + "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" + "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" + "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" + "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" + "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" + "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" + "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" + "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" + "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" + "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" + "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" + "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" + "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" + "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" + "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" + "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" + "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" + "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" + "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" + "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" + "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" + "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" + "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" + "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" + "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" + "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" + "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" + "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" + "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" + "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" + "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" + "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" + "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" + "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" + "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" + "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" + "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" + "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" + "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" + "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" + "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" + "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" + "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" + "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" + "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" + "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" + "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" + "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" + "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" + "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" + "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" + "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" + "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" + "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" + "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" + "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" + "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" + "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" + "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" + "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" + "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" + "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" + "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" + "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" + "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" + "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" + "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" + "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" + "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" + "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" + "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" + "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" + "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" + "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" + "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" + "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" + "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" + "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" + "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" + "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" + "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" + "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" + "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" + "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" + "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" + "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" + "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" + "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" + "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" + "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" + "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" + "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" + "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" + "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" + "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" + "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" + "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" + "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" + "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" + "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" + "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" + "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" + "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" + "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" + "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" + "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" + "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" + "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" + "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" + "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" + "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" + "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" + "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" + "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" + "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" + "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" + "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" + "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" + "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" + "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" + "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" + "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" + "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" + "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" + "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" + "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" + "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" + "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" + "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" + "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" + "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" + "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" + "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" + "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" + "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" + "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" + "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" + "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" + "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" + "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" + "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" + "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" + "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" + "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" + "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" + "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" + "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" + "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" + "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" + "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" + "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" + "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" + "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" + "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" + "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" + "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" + "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" + "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" + "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" + "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" + "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" + "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" + "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" + "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" + "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" + "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" + "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" + "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" + "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" + "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" + "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" + "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" + "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" + "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" + "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" + "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" + "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" + "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" + "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" + "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" + "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" + "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" + "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" + "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" + "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" + "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" + "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" + "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" + "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" + "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" + "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" + "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" + "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" + "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" + "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" + "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" + "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" + "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" + "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" + "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" + "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" + "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" + "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" + "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" + "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" + "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" + "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" + "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" + "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" + "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" + "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" + "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" + "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" + "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" + "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" + "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" + "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" + "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" + "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" + "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" + "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" + "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" + "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" + "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" + "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" + "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" + "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" + "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" + "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" + "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" + "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" + "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" + "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" + "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" + "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" + "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" + "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" + "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" + "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" + "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" + "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" + "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" + "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" + "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" + "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" + "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" + "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" + "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" + "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" + "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" + "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" + "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" + "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" + "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" + "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" + "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" + "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" + "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" + "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" + "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" + "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" + "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" + "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" + "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" + "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" + "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" + "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" + "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" + "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" + "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" + "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" + "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" + "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" + "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" + "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" + "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" + "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" + "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" + "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" + "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" + "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" + "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" + "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" + "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" + "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" + "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" + "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" + "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" + "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" + "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" + "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" + "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" + "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" + "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" + "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" + "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" + "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" + "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" + "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" + "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" + "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" + "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" + "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" + "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" + "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" + "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" + "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" + "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" + "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" + "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" + "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" + "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" + "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" + "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" + "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" + "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" + "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" + "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" + "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" + "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" + "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" + "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" + "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" + "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" + "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" + "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" + "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" + "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" + "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" + "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" + "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" + "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" + "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" + "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" + "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" + "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" + "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" + "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" + "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" + "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" + "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" + "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" + "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" + "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" + "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" + "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" + "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" + "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" + "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" + "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" + "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" + "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" + "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" + "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" + "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" + "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" + "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" + "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" + "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" + "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" + "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" + "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" + "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" + "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" + "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" + "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" + "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" + "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" + "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" + "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" + "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" + "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" + "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" + "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" + "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" + "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" + "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" + "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" + "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" + "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" + "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" + "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" + "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" + "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" + "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" + "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" + "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" + "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" + "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" + "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" + "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" + "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" + "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" + "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" + "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" + "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" + "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" + "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" + "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" + "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" + "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" + "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" + "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" + "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" + "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" + "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" + "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" + "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" + "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" + "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" + "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" + "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" + "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" + "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" + "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" + "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" + "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" + "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" + "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" + "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" + "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" + "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" + "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" + "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" + "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" + "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" + "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" + "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" + "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" + "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" + "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" + "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" + "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" + "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" + "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" + "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" + "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" + "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" + "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" + "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" + "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" + "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" + "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" + "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" + "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" + "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" + "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" + "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" + "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" + "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" + "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" + "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" + "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" + "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" + "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" + "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" + "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" + "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" + "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" + "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" + "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" + "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" + "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" + "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" + "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" + "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" + "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" + "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" + "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" + "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" + "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" + "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" + "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" + "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" + "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" + "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" + "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" + "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" + "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" + "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" + "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" + "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" + "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" + "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" + "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" + "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" + "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" + "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" + "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" + "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" + "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" + "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" + "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" + "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" + "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" + "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" + "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" + "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" + "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" + "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" + "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" + "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" + "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" + "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" + "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" + "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" + "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" + "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" + "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" + "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" + "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" + "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" + "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" + "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" + "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" + "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" + "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" + "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" + "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" + "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" + "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" + "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" + "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" + "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" + "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" + "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" + "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" + "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" + "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" + "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" + "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" + "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" + "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" + "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" + "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" + "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" + "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" + "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" + "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" + "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" + "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" + "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" + "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" + "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" + "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" + "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" + "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" + "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" + "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" + "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" + "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" + "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" + "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" + "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" + "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" + "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" + "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" + "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" + "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" + "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" + "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" + "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" + "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" + "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" + "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" + "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" + "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" + "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" + "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" + "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" + "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" + "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" + "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" + "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" + "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" + "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" + "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" + "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" + "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" + "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" + "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" + "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" + "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" + "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" + "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" + "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" + "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" + "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" + "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" + "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" + "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" + "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" + "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" + "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" + "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" + "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" + "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" + "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" + "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" + "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b"; diff --git a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp new file mode 100644 index 0000000000..fe3b11a7a8 --- /dev/null +++ b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp @@ -0,0 +1,2126 @@ +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const locals10kHex = + "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" + "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" + "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" + "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" + "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" + "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" + "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" + "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" + "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" + "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" + "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" + "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" + "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" + "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" + "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" + "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" + "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" + "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" + "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" + "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" + "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" + "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" + "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" + "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" + "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" + "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" + "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" + "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" + "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" + "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" + "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" + "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" + "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" + "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" + "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" + "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" + "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" + "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" + "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" + "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" + "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" + "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" + "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" + "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" + "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" + "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" + "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" + "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" + "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" + "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" + "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" + "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" + "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" + "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" + "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" + "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" + "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" + "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" + "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" + "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" + "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" + "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" + "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" + "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" + "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" + "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" + "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" + "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" + "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" + "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" + "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" + "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" + "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" + "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" + "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" + "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" + "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" + "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" + "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" + "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" + "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" + "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" + "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" + "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" + "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" + "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" + "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" + "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" + "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" + "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" + "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" + "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" + "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" + "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" + "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" + "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" + "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" + "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" + "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" + "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" + "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" + "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" + "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" + "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" + "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" + "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" + "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" + "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" + "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" + "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" + "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" + "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" + "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" + "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" + "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" + "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" + "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" + "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" + "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" + "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" + "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" + "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" + "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" + "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" + "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" + "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" + "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" + "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" + "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" + "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" + "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" + "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" + "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" + "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" + "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" + "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" + "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" + "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" + "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" + "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" + "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" + "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" + "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" + "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" + "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" + "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" + "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" + "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" + "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" + "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" + "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" + "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" + "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" + "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" + "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" + "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" + "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" + "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" + "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" + "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" + "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" + "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" + "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" + "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" + "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" + "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" + "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" + "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" + "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" + "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" + "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" + "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" + "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" + "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" + "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" + "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" + "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" + "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" + "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" + "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" + "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" + "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" + "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" + "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" + "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" + "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" + "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" + "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" + "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" + "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" + "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" + "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" + "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" + "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" + "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" + "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" + "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" + "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" + "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" + "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" + "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" + "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" + "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" + "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" + "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" + "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" + "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" + "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" + "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" + "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" + "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" + "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" + "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" + "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" + "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" + "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" + "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" + "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" + "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" + "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" + "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" + "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" + "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" + "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" + "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" + "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" + "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" + "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" + "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" + "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" + "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" + "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" + "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" + "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" + "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" + "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" + "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" + "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" + "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" + "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" + "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" + "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" + "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" + "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" + "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" + "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" + "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" + "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" + "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" + "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" + "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" + "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" + "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" + "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" + "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" + "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" + "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" + "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" + "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" + "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" + "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" + "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" + "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" + "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" + "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" + "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" + "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" + "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" + "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" + "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" + "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" + "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" + "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" + "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" + "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" + "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" + "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" + "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" + "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" + "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" + "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" + "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" + "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" + "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" + "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" + "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" + "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" + "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" + "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" + "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" + "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" + "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" + "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" + "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" + "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" + "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" + "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" + "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" + "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" + "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" + "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" + "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" + "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" + "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" + "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" + "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" + "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" + "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" + "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" + "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" + "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" + "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" + "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" + "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" + "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" + "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" + "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" + "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" + "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" + "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" + "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" + "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" + "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" + "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" + "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" + "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" + "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" + "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" + "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" + "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" + "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" + "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" + "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" + "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" + "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" + "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" + "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" + "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" + "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" + "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" + "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" + "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" + "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" + "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" + "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" + "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" + "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" + "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" + "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" + "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" + "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" + "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" + "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" + "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" + "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" + "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" + "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" + "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" + "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" + "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" + "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" + "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" + "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" + "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" + "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" + "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" + "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" + "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" + "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" + "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" + "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" + "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" + "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" + "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" + "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" + "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" + "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" + "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" + "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" + "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" + "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" + "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" + "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" + "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" + "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" + "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" + "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" + "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" + "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" + "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" + "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" + "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" + "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" + "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" + "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" + "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" + "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" + "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" + "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" + "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" + "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" + "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" + "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" + "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" + "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" + "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" + "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" + "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" + "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" + "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" + "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" + "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" + "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" + "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" + "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" + "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" + "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" + "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" + "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" + "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" + "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" + "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" + "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" + "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" + "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" + "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" + "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" + "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" + "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" + "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" + "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" + "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" + "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" + "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" + "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" + "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" + "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" + "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" + "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" + "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" + "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" + "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" + "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" + "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" + "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" + "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" + "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" + "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" + "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" + "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" + "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" + "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" + "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" + "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" + "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" + "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" + "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" + "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" + "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" + "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" + "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" + "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" + "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" + "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" + "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" + "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" + "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" + "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" + "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" + "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" + "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" + "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" + "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" + "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" + "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" + "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" + "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" + "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" + "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" + "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" + "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" + "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" + "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" + "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" + "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" + "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" + "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" + "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" + "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" + "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" + "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" + "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" + "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" + "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" + "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" + "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" + "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" + "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" + "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" + "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" + "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" + "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" + "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" + "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" + "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" + "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" + "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" + "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" + "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" + "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" + "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" + "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" + "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" + "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" + "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" + "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" + "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" + "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" + "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" + "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" + "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" + "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" + "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" + "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" + "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" + "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" + "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" + "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" + "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" + "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" + "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" + "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" + "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" + "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" + "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" + "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" + "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" + "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" + "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" + "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" + "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" + "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" + "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" + "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" + "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" + "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" + "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" + "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" + "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" + "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" + "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" + "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" + "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" + "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" + "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" + "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" + "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" + "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" + "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" + "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" + "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" + "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" + "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" + "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" + "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" + "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" + "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" + "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" + "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" + "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" + "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" + "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" + "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" + "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" + "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" + "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" + "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" + "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" + "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" + "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" + "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" + "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" + "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" + "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" + "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" + "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" + "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" + "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" + "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" + "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" + "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" + "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" + "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" + "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" + "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" + "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" + "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" + "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" + "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" + "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" + "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" + "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" + "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" + "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" + "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" + "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" + "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" + "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" + "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" + "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" + "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" + "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" + "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" + "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" + "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" + "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" + "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" + "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" + "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" + "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" + "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" + "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" + "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" + "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" + "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" + "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" + "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" + "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" + "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" + "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" + "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" + "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" + "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" + "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" + "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" + "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" + "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" + "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" + "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" + "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" + "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" + "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" + "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" + "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" + "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" + "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" + "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" + "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" + "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" + "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" + "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" + "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" + "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" + "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" + "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" + "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" + "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" + "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" + "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" + "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" + "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" + "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" + "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" + "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" + "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" + "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" + "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" + "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" + "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" + "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" + "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" + "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" + "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" + "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" + "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" + "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" + "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" + "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" + "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" + "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" + "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" + "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" + "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" + "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" + "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" + "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" + "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" + "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" + "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" + "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" + "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" + "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" + "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" + "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" + "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" + "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" + "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" + "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" + "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" + "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" + "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" + "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" + "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" + "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" + "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" + "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" + "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" + "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" + "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" + "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" + "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" + "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" + "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" + "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" + "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" + "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" + "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" + "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" + "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" + "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" + "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" + "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" + "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" + "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" + "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" + "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" + "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" + "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" + "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" + "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" + "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" + "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" + "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" + "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" + "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" + "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" + "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" + "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" + "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" + "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" + "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" + "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" + "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" + "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" + "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" + "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" + "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" + "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" + "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" + "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" + "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" + "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" + "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" + "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" + "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" + "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" + "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" + "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" + "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" + "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" + "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" + "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" + "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" + "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" + "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" + "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" + "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" + "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" + "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" + "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" + "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" + "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" + "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" + "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" + "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" + "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" + "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" + "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" + "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" + "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" + "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" + "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" + "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" + "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" + "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" + "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" + "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" + "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" + "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" + "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" + "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" + "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" + "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" + "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" + "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" + "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" + "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" + "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" + "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" + "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" + "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" + "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" + "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" + "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" + "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" + "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" + "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" + "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" + "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" + "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" + "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" + "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" + "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" + "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" + "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" + "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" + "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" + "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" + "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" + "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" + "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" + "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" + "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" + "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" + "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" + "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" + "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" + "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" + "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" + "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" + "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" + "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" + "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" + "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" + "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" + "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" + "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" + "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" + "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" + "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" + "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" + "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" + "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" + "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" + "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" + "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" + "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" + "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" + "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" + "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" + "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" + "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" + "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" + "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" + "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" + "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" + "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" + "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" + "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" + "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" + "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" + "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" + "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" + "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" + "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" + "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" + "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" + "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" + "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" + "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" + "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" + "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" + "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" + "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" + "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" + "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" + "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" + "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" + "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" + "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" + "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" + "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" + "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" + "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" + "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" + "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" + "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" + "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" + "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" + "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" + "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" + "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" + "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" + "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" + "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" + "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" + "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" + "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" + "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" + "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" + "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" + "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" + "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" + "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" + "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" + "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" + "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" + "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" + "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" + "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" + "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" + "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" + "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" + "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" + "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" + "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" + "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" + "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" + "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" + "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" + "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" + "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" + "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" + "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" + "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" + "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" + "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" + "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" + "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" + "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" + "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" + "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" + "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" + "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" + "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" + "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" + "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" + "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" + "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" + "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" + "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" + "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" + "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" + "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" + "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" + "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" + "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" + "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" + "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" + "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" + "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" + "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" + "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" + "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" + "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" + "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" + "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" + "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" + "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" + "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" + "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" + "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" + "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" + "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" + "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" + "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" + "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" + "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" + "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" + "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" + "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" + "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" + "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" + "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" + "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" + "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" + "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" + "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" + "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" + "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" + "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" + "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" + "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" + "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" + "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" + "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" + "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" + "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" + "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" + "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" + "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" + "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" + "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" + "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" + "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" + "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" + "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" + "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" + "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" + "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" + "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" + "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" + "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" + "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" + "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" + "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" + "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" + "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" + "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" + "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" + "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" + "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" + "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" + "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" + "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" + "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" + "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" + "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" + "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" + "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" + "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" + "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" + "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" + "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" + "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" + "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" + "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" + "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" + "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" + "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" + "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" + "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" + "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" + "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" + "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" + "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" + "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" + "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" + "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" + "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" + "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" + "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" + "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" + "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" + "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" + "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" + "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" + "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" + "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" + "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" + "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" + "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" + "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" + "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" + "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" + "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" + "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" + "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" + "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" + "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" + "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" + "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" + "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" + "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" + "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" + "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" + "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" + "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" + "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" + "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" + "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" + "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" + "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" + "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" + "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" + "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" + "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" + "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" + "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" + "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" + "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" + "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" + "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" + "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" + "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" + "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" + "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" + "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" + "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" + "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" + "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" + "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" + "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" + "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" + "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" + "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" + "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" + "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" + "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" + "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" + "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" + "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" + "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" + "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" + "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" + "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" + "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" + "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" + "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" + "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" + "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" + "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" + "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" + "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" + "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" + "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" + "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" + "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" + "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" + "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" + "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" + "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" + "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" + "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" + "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" + "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" + "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" + "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" + "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" + "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" + "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" + "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" + "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" + "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" + "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" + "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" + "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" + "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" + "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" + "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" + "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" + "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" + "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" + "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" + "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" + "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" + "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" + "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" + "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" + "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" + "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" + "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" + "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" + "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" + "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" + "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" + "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" + "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" + "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" + "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" + "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" + "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" + "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" + "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" + "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" + "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" + "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" + "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" + "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" + "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" + "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" + "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" + "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" + "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" + "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" + "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" + "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" + "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" + "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" + "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" + "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" + "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" + "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" + "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" + "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" + "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" + "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" + "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" + "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" + "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" + "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" + "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" + "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" + "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" + "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" + "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" + "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" + "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" + "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" + "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" + "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" + "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" + "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" + "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" + "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" + "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" + "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" + "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" + "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" + "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" + "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" + "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" + "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" + "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" + "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" + "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" + "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" + "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" + "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" + "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" + "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" + "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" + "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" + "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" + "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" + "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" + "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" + "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" + "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" + "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" + "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" + "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" + "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" + "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" + "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" + "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" + "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" + "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" + "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" + "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" + "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" + "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" + "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" + "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" + "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" + "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" + "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" + "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" + "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" + "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" + "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" + "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" + "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" + "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" + "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" + "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" + "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" + "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" + "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" + "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" + "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" + "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" + "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" + "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" + "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" + "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" + "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" + "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" + "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" + "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" + "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" + "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" + "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" + "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" + "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" + "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" + "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" + "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" + "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" + "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" + "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" + "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" + "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" + "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" + "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" + "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" + "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" + "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" + "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" + "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" + "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" + "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" + "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" + "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" + "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" + "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" + "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" + "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" + "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" + "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" + "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" + "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" + "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" + "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" + "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" + "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" + "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" + "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" + "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" + "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" + "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" + "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" + "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" + "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" + "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" + "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" + "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" + "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" + "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" + "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" + "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" + "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" + "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" + "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" + "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" + "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" + "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" + "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" + "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" + "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" + "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" + "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" + "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" + "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" + "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" + "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" + "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" + "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" + "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" + "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" + "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" + "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" + "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" + "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" + "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" + "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" + "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" + "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" + "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" + "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" + "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" + "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" + "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" + "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" + "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" + "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" + "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" + "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" + "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" + "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" + "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" + "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" + "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" + "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" + "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" + "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" + "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" + "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" + "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" + "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" + "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" + "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" + "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" + "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" + "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" + "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" + "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" + "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" + "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" + "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" + "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" + "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" + "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" + "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" + "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" + "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" + "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" + "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" + "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" + "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" + "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" + "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" + "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" + "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" + "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" + "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" + "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" + "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" + "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" + "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" + "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" + "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" + "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" + "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" + "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" + "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" + "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" + "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" + "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" + "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" + "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" + "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" + "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" + "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" + "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" + "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" + "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" + "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" + "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" + "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" + "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" + "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" + "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" + "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" + "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" + "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" + "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" + "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" + "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" + "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" + "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" + "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" + "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" + "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" + "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" + "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" + "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" + "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" + "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" + "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" + "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" + "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" + "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" + "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" + "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" + "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" + "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" + "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" + "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" + "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" + "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" + "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" + "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" + "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" + "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" + "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" + "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" + "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" + "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" + "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" + "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" + "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" + "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" + "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" + "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" + "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" + "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" + "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" + "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" + "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" + "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" + "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" + "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" + "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" + "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" + "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" + "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" + "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" + "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" + "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" + "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" + "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" + "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" + "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" + "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" + "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" + "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" + "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" + "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" + "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" + "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" + "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" + "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" + "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" + "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" + "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" + "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" + "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" + "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" + "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" + "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" + "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" + "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" + "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" + "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" + "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" + "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" + "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" + "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" + "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" + "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" + "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" + "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" + "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" + "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" + "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" + "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" + "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" + "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" + "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" + "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" + "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" + "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" + "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" + "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" + "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" + "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" + "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" + "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" + "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" + "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" + "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" + "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" + "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" + "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" + "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" + "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" + "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" + "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" + "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" + "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" + "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" + "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" + "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" + "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" + "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" + "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" + "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" + "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" + "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" + "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" + "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" + "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" + "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" + "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" + "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" + "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" + "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" + "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" + "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" + "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" + "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" + "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" + "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" + "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" + "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" + "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" + "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" + "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" + "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" + "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" + "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" + "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" + "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" + "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" + "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" + "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" + "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" + "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" + "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" + "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" + "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" + "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" + "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" + "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" + "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" + "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" + "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" + "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" + "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" + "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" + "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" + "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" + "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" + "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" + "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" + "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" + "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" + "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" + "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" + "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" + "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" + "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" + "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" + "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" + "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" + "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" + "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" + "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" + "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" + "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" + "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" + "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" + "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" + "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" + "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" + "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" + "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" + "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" + "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" + "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" + "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" + "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" + "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" + "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" + "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" + "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" + "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" + "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" + "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" + "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" + "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" + "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" + "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" + "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" + "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" + "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" + "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" + "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" + "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" + "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" + "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" + "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" + "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" + "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" + "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" + "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" + "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" + "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" + "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" + "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" + "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" + "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" + "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" + "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" + "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" + "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" + "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" + "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" + "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" + "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" + "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" + "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" + "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" + "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" + "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" + "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" + "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" + "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" + "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" + "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" + "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" + "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" + "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" + "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" + "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" + "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" + "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" + "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" + "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" + "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" + "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" + "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" + "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" + "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" + "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" + "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" + "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" + "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" + "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" + "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" + "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" + "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" + "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" + "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" + "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" + "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" + "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" + "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" + "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" + "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" + "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" + "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" + "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" + "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" + "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" + "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" + "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" + "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" + "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" + "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" + "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" + "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" + "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" + "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" + "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" + "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" + "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" + "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" + "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" + "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" + "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" + "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" + "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" + "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" + "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" + "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" + "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" + "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" + "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" + "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" + "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" + "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" + "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" + "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" + "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" + "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" + "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" + "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" + "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" + "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" + "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" + "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" + "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" + "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" + "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" + "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" + "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" + "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" + "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" + "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" + "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" + "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" + "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" + "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" + "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" + "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" + "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" + "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" + "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" + "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" + "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" + "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" + "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" + "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" + "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" + "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" + "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" + "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" + "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" + "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" + "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" + "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" + "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" + "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" + "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" + "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" + "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" + "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" + "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" + "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" + "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" + "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" + "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" + "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" + "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" + "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" + "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" + "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" + "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" + "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" + "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" + "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" + "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" + "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" + "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" + "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" + "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" + "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" + "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" + "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" + "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" + "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" + "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" + "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" + "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" + "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" + "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" + "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" + "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" + "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" + "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" + "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" + "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" + "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" + "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" + "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" + "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" + "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" + "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" + "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" + "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" + "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" + "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" + "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" + "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" + "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" + "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" + "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" + "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" + "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" + "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" + "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" + "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" + "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" + "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" + "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" + "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" + "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" + "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" + "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" + "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" + "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" + "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" + "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" + "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" + "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" + "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" + "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" + "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" + "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" + "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" + "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" + "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" + "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" + "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" + "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" + "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" + "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" + "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" + "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" + "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" + "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" + "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" + "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" + "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" + "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" + "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" + "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" + "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" + "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" + "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" + "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" + "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" + "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" + "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" + "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" + "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" + "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" + "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" + "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" + "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" + "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" + "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" + "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" + "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" + "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" + "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" + "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" + "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" + "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" + "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" + "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" + "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" + "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" + "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" + "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" + "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" + "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" + "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" + "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" + "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" + "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" + "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" + "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" + "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" + "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" + "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" + "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" + "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" + "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" + "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" + "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" + "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" + "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" + "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" + "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" + "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" + "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" + "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" + "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" + "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" + "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" + "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" + "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" + "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" + "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" + "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" + "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" + "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" + "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" + "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" + "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" + "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" + "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" + "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" + "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" + "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" + "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" + "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" + "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" + "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" + "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" + "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" + "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" + "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" + "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" + "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" + "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" + "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" + "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" + "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" + "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" + "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" + "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" + "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" + "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" + "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" + "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" + "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" + "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" + "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" + "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" + "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" + "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" + "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" + "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" + "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" + "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" + "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" + "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" + "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" + "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" + "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" + "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" + "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" + "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" + "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" + "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" + "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" + "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" + "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" + "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" + "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" + "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" + "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" + "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" + "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" + "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" + "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" + "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" + "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" + "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" + "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" + "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" + "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" + "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" + "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" + "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" + "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" + "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" + "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" + "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" + "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" + "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" + "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" + "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" + "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" + "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" + "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" + "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" + "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" + "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" + "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" + "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" + "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" + "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" + "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" + "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" + "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" + "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" + "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" + "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" + "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" + "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" + "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" + "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" + "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" + "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" + "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" + "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" + "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" + "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" + "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" + "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" + "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" + "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" + "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" + "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" + "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" + "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" + "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" + "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" + "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" + "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" + "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" + "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" + "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" + "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" + "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" + "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" + "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" + "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" + "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" + "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" + "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" + "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" + "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" + "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" + "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" + "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" + "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" + "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" + "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" + "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" + "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" + "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" + "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" + "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" + "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" + "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" + "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" + "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" + "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" + "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" + "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" + "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" + "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" + "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" + "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" + "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" + "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" + "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" + "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" + "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" + "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" + "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" + "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" + "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" + "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" + "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" + "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" + "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" + "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" + "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" + "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" + "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" + "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" + "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" + "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" + "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" + "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" + "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" + "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" + "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" + "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" + "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" + "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" + "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" + "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" + "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" + "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" + "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" + "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" + "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" + "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" + "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" + "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" + "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" + "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" + "8f4e208f4e0b"; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 7dcd5c4ea1..861df4a3ff 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -470,7 +470,7 @@ extern std::string const codecovTestsWasmHex = "9583c0004108101f4100419d83c0004111103c417f41041004417141ae83c000411e103c200041003602e801200141" "7f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141031004417d41e58ec00041" "24103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f103c" - "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241812010124174" + "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241810810124174" "41a984c0004120103c200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020" "05420037030020034200370300200042003703e8012004411420064108200141201020417341ac8fc0004118103c20" "0842003703002005420037030020034200370300200042003703e8012004411420044114200141201020417141c48f" @@ -492,17 +492,17 @@ extern std::string const codecovTestsWasmHex = "09411841a7a1c00041142001410210234171418392c000410e103c200620002802a001422a1001417341d685c00041" "11103c200041003b01e8014102200141021007416f419192c000411b103c200041003b01e801410220014102100a41" "6f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c0004123103c4102100f416f41cc" - "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418120" - "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418120" - "20014102100c417441fa92c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c" - "200041003b01e8014101200241812020014102100e417441cc93c0004129103c20024181201012417441f686c00041" - "25103c200241812010134174419b87c0004135103c410120024181201014417441d087c000412d103c200241812010" - "15417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82c0004109103c" - "41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" - "410b41af82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593" - "c0004121103c200041003b01e80141a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c20" - "0041003b01e80120044114200441142002418120200141021024417441ae94c000411f103c200041003b01e8012009" - "41812020044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" + "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418108" + "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418108" + "20014102100c417441fa92c0004121103c200041003b01e801200241810820014102100d4174419b93c0004131103c" + "200041003b01e8014101200241810820014102100e417441cc93c0004129103c20024181081012417441f686c00041" + "25103c200241810810134174419b87c0004135103c410120024181081014417441d087c000412d103c200241812010" + "15417441fd87c0004119103c41e782c00041810841a482c000410b41af82c000410e1017417441bd82c0004109103c" + "41e782c000410d41a482c00041810841af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" + "410b41af82c0004181081017417441bd82c0004109103c200041003b01e8012002418108200141021016417441f593" + "c0004121103c200041003b01e80141a7a1c00041810841a7a1c00041142001410210234174419694c0004118103c20" + "0041003b01e80120044114200441142002418108200141021024417441ae94c000411f103c200041003b01e8012009" + "41810820044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" "88c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810264173" "41a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a" "220641081027417341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e80120" @@ -551,9 +551,9 @@ extern std::string const codecovTestsWasmHex = "41021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0004123103c41e796ab" "dd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac000" "411d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f41" - "7341f98ac0004117103c200220002802a001200241812041001000417441908bc000410e103c200241812042011001" - "4174419e8bc0004112103c41e782c000418120200641081026417441b08bc000411b103c41e782c000418120200441" - "14101e417441cb8bc0004116103c41e782c000418120419583c0004108101f417441e18bc0004115103c41e782c000" + "7341f98ac0004117103c200220002802a001200241810841001000417441908bc000410e103c200241810842011001" + "4174419e8bc0004112103c41e782c000418108200641081026417441b08bc000411b103c41e782c000418108200441" + "14101e417441cb8bc0004116103c41e782c000418108419583c0004108101f417441e18bc0004115103c41e782c000" "410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004411420034102" "102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c41014100" "20044114101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1b" @@ -1302,4364 +1302,6 @@ extern std::string const thousand1ParamsHex = "623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const locals10kHex = - "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" - "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" - "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" - "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" - "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" - "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" - "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" - "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" - "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" - "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" - "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" - "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" - "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" - "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" - "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" - "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" - "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" - "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" - "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" - "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" - "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" - "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" - "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" - "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" - "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" - "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" - "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" - "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" - "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" - "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" - "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" - "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" - "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" - "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" - "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" - "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" - "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" - "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" - "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" - "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" - "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" - "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" - "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" - "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" - "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" - "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" - "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" - "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" - "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" - "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" - "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" - "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" - "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" - "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" - "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" - "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" - "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" - "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" - "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" - "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" - "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" - "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" - "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" - "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" - "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" - "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" - "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" - "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" - "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" - "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" - "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" - "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" - "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" - "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" - "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" - "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" - "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" - "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" - "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" - "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" - "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" - "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" - "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" - "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" - "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" - "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" - "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" - "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" - "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" - "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" - "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" - "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" - "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" - "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" - "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" - "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" - "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" - "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" - "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" - "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" - "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" - "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" - "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" - "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" - "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" - "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" - "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" - "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" - "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" - "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" - "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" - "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" - "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" - "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" - "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" - "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" - "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" - "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" - "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" - "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" - "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" - "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" - "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" - "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" - "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" - "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" - "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" - "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" - "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" - "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" - "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" - "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" - "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" - "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" - "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" - "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" - "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" - "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" - "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" - "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" - "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" - "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" - "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" - "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" - "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" - "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" - "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" - "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" - "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" - "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" - "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" - "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" - "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" - "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" - "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" - "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" - "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" - "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" - "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" - "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" - "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" - "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" - "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" - "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" - "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" - "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" - "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" - "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" - "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" - "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" - "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" - "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" - "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" - "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" - "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" - "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" - "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" - "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" - "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" - "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" - "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" - "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" - "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" - "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" - "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" - "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" - "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" - "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" - "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" - "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" - "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" - "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" - "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" - "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" - "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" - "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" - "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" - "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" - "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" - "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" - "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" - "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" - "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" - "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" - "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" - "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" - "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" - "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" - "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" - "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" - "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" - "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" - "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" - "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" - "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" - "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" - "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" - "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" - "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" - "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" - "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" - "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" - "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" - "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" - "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" - "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" - "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" - "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" - "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" - "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" - "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" - "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" - "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" - "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" - "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" - "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" - "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" - "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" - "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" - "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" - "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" - "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" - "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" - "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" - "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" - "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" - "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" - "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" - "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" - "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" - "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" - "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" - "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" - "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" - "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" - "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" - "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" - "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" - "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" - "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" - "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" - "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" - "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" - "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" - "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" - "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" - "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" - "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" - "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" - "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" - "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" - "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" - "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" - "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" - "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" - "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" - "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" - "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" - "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" - "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" - "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" - "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" - "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" - "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" - "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" - "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" - "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" - "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" - "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" - "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" - "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" - "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" - "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" - "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" - "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" - "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" - "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" - "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" - "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" - "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" - "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" - "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" - "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" - "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" - "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" - "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" - "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" - "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" - "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" - "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" - "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" - "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" - "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" - "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" - "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" - "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" - "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" - "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" - "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" - "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" - "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" - "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" - "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" - "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" - "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" - "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" - "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" - "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" - "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" - "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" - "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" - "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" - "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" - "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" - "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" - "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" - "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" - "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" - "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" - "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" - "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" - "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" - "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" - "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" - "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" - "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" - "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" - "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" - "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" - "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" - "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" - "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" - "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" - "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" - "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" - "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" - "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" - "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" - "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" - "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" - "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" - "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" - "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" - "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" - "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" - "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" - "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" - "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" - "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" - "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" - "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" - "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" - "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" - "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" - "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" - "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" - "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" - "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" - "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" - "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" - "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" - "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" - "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" - "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" - "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" - "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" - "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" - "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" - "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" - "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" - "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" - "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" - "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" - "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" - "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" - "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" - "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" - "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" - "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" - "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" - "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" - "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" - "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" - "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" - "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" - "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" - "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" - "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" - "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" - "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" - "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" - "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" - "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" - "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" - "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" - "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" - "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" - "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" - "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" - "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" - "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" - "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" - "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" - "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" - "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" - "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" - "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" - "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" - "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" - "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" - "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" - "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" - "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" - "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" - "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" - "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" - "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" - "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" - "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" - "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" - "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" - "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" - "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" - "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" - "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" - "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" - "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" - "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" - "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" - "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" - "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" - "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" - "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" - "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" - "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" - "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" - "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" - "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" - "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" - "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" - "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" - "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" - "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" - "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" - "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" - "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" - "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" - "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" - "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" - "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" - "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" - "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" - "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" - "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" - "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" - "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" - "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" - "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" - "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" - "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" - "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" - "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" - "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" - "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" - "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" - "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" - "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" - "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" - "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" - "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" - "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" - "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" - "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" - "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" - "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" - "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" - "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" - "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" - "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" - "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" - "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" - "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" - "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" - "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" - "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" - "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" - "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" - "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" - "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" - "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" - "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" - "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" - "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" - "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" - "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" - "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" - "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" - "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" - "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" - "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" - "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" - "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" - "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" - "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" - "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" - "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" - "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" - "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" - "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" - "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" - "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" - "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" - "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" - "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" - "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" - "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" - "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" - "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" - "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" - "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" - "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" - "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" - "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" - "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" - "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" - "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" - "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" - "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" - "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" - "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" - "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" - "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" - "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" - "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" - "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" - "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" - "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" - "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" - "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" - "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" - "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" - "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" - "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" - "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" - "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" - "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" - "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" - "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" - "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" - "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" - "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" - "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" - "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" - "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" - "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" - "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" - "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" - "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" - "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" - "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" - "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" - "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" - "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" - "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" - "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" - "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" - "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" - "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" - "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" - "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" - "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" - "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" - "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" - "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" - "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" - "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" - "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" - "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" - "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" - "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" - "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" - "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" - "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" - "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" - "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" - "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" - "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" - "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" - "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" - "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" - "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" - "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" - "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" - "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" - "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" - "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" - "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" - "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" - "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" - "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" - "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" - "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" - "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" - "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" - "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" - "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" - "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" - "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" - "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" - "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" - "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" - "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" - "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" - "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" - "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" - "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" - "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" - "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" - "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" - "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" - "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" - "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" - "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" - "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" - "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" - "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" - "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" - "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" - "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" - "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" - "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" - "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" - "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" - "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" - "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" - "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" - "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" - "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" - "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" - "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" - "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" - "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" - "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" - "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" - "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" - "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" - "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" - "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" - "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" - "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" - "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" - "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" - "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" - "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" - "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" - "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" - "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" - "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" - "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" - "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" - "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" - "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" - "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" - "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" - "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" - "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" - "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" - "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" - "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" - "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" - "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" - "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" - "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" - "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" - "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" - "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" - "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" - "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" - "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" - "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" - "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" - "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" - "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" - "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" - "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" - "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" - "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" - "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" - "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" - "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" - "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" - "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" - "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" - "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" - "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" - "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" - "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" - "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" - "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" - "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" - "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" - "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" - "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" - "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" - "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" - "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" - "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" - "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" - "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" - "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" - "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" - "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" - "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" - "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" - "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" - "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" - "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" - "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" - "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" - "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" - "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" - "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" - "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" - "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" - "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" - "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" - "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" - "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" - "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" - "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" - "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" - "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" - "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" - "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" - "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" - "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" - "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" - "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" - "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" - "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" - "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" - "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" - "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" - "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" - "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" - "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" - "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" - "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" - "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" - "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" - "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" - "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" - "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" - "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" - "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" - "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" - "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" - "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" - "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" - "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" - "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" - "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" - "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" - "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" - "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" - "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" - "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" - "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" - "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" - "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" - "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" - "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" - "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" - "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" - "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" - "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" - "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" - "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" - "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" - "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" - "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" - "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" - "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" - "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" - "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" - "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" - "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" - "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" - "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" - "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" - "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" - "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" - "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" - "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" - "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" - "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" - "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" - "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" - "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" - "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" - "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" - "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" - "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" - "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" - "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" - "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" - "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" - "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" - "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" - "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" - "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" - "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" - "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" - "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" - "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" - "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" - "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" - "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" - "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" - "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" - "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" - "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" - "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" - "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" - "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" - "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" - "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" - "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" - "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" - "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" - "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" - "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" - "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" - "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" - "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" - "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" - "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" - "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" - "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" - "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" - "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" - "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" - "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" - "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" - "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" - "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" - "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" - "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" - "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" - "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" - "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" - "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" - "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" - "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" - "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" - "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" - "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" - "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" - "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" - "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" - "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" - "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" - "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" - "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" - "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" - "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" - "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" - "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" - "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" - "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" - "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" - "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" - "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" - "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" - "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" - "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" - "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" - "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" - "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" - "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" - "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" - "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" - "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" - "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" - "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" - "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" - "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" - "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" - "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" - "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" - "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" - "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" - "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" - "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" - "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" - "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" - "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" - "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" - "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" - "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" - "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" - "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" - "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" - "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" - "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" - "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" - "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" - "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" - "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" - "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" - "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" - "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" - "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" - "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" - "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" - "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" - "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" - "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" - "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" - "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" - "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" - "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" - "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" - "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" - "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" - "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" - "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" - "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" - "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" - "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" - "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" - "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" - "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" - "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" - "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" - "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" - "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" - "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" - "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" - "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" - "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" - "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" - "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" - "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" - "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" - "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" - "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" - "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" - "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" - "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" - "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" - "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" - "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" - "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" - "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" - "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" - "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" - "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" - "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" - "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" - "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" - "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" - "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" - "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" - "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" - "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" - "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" - "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" - "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" - "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" - "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" - "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" - "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" - "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" - "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" - "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" - "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" - "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" - "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" - "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" - "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" - "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" - "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" - "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" - "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" - "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" - "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" - "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" - "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" - "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" - "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" - "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" - "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" - "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" - "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" - "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" - "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" - "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" - "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" - "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" - "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" - "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" - "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" - "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" - "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" - "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" - "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" - "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" - "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" - "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" - "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" - "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" - "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" - "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" - "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" - "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" - "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" - "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" - "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" - "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" - "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" - "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" - "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" - "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" - "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" - "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" - "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" - "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" - "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" - "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" - "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" - "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" - "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" - "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" - "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" - "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" - "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" - "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" - "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" - "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" - "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" - "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" - "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" - "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" - "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" - "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" - "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" - "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" - "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" - "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" - "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" - "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" - "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" - "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" - "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" - "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" - "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" - "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" - "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" - "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" - "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" - "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" - "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" - "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" - "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" - "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" - "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" - "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" - "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" - "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" - "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" - "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" - "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" - "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" - "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" - "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" - "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" - "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" - "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" - "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" - "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" - "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" - "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" - "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" - "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" - "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" - "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" - "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" - "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" - "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" - "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" - "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" - "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" - "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" - "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" - "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" - "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" - "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" - "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" - "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" - "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" - "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" - "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" - "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" - "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" - "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" - "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" - "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" - "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" - "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" - "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" - "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" - "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" - "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" - "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" - "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" - "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" - "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" - "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" - "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" - "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" - "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" - "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" - "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" - "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" - "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" - "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" - "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" - "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" - "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" - "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" - "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" - "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" - "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" - "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" - "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" - "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" - "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" - "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" - "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" - "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" - "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" - "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" - "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" - "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" - "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" - "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" - "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" - "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" - "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" - "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" - "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" - "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" - "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" - "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" - "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" - "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" - "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" - "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" - "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" - "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" - "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" - "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" - "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" - "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" - "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" - "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" - "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" - "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" - "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" - "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" - "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" - "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" - "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" - "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" - "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" - "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" - "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" - "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" - "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" - "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" - "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" - "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" - "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" - "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" - "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" - "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" - "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" - "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" - "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" - "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" - "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" - "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" - "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" - "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" - "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" - "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" - "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" - "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" - "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" - "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" - "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" - "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" - "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" - "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" - "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" - "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" - "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" - "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" - "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" - "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" - "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" - "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" - "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" - "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" - "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" - "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" - "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" - "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" - "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" - "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" - "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" - "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" - "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" - "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" - "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" - "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" - "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" - "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" - "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" - "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" - "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" - "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" - "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" - "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" - "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" - "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" - "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" - "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" - "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" - "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" - "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" - "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" - "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" - "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" - "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" - "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" - "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" - "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" - "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" - "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" - "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" - "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" - "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" - "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" - "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" - "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" - "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" - "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" - "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" - "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" - "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" - "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" - "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" - "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" - "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" - "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" - "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" - "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" - "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" - "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" - "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" - "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" - "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" - "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" - "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" - "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" - "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" - "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" - "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" - "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" - "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" - "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" - "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" - "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" - "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" - "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" - "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" - "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" - "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" - "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" - "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" - "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" - "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" - "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" - "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" - "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" - "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" - "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" - "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" - "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" - "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" - "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" - "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" - "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" - "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" - "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" - "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" - "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" - "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" - "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" - "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" - "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" - "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" - "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" - "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" - "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" - "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" - "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" - "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" - "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" - "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" - "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" - "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" - "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" - "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" - "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" - "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" - "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" - "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" - "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" - "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" - "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" - "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" - "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" - "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" - "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" - "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" - "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" - "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" - "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" - "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" - "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" - "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" - "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" - "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" - "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" - "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" - "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" - "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" - "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" - "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" - "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" - "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" - "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" - "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" - "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" - "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" - "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" - "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" - "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" - "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" - "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" - "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" - "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" - "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" - "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" - "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" - "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" - "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" - "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" - "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" - "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" - "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" - "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" - "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" - "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" - "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" - "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" - "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" - "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" - "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" - "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" - "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" - "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" - "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" - "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" - "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" - "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" - "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" - "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" - "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" - "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" - "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" - "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" - "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" - "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" - "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" - "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" - "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" - "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" - "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" - "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" - "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" - "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" - "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" - "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" - "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" - "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" - "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" - "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" - "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" - "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" - "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" - "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" - "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" - "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" - "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" - "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" - "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" - "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" - "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" - "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" - "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" - "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" - "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" - "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" - "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" - "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" - "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" - "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" - "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" - "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" - "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" - "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" - "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" - "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" - "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" - "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" - "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" - "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" - "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" - "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" - "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" - "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" - "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" - "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" - "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" - "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" - "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" - "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" - "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" - "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" - "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" - "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" - "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" - "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" - "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" - "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" - "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" - "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" - "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" - "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" - "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" - "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" - "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" - "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" - "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" - "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" - "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" - "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" - "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" - "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" - "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" - "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" - "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" - "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" - "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" - "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" - "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" - "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" - "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" - "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" - "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" - "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" - "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" - "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" - "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" - "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" - "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" - "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" - "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" - "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" - "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" - "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" - "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" - "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" - "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" - "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" - "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" - "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" - "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" - "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" - "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" - "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" - "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" - "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" - "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" - "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" - "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" - "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" - "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" - "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" - "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" - "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" - "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" - "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" - "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" - "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" - "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" - "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" - "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" - "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" - "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" - "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" - "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" - "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" - "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" - "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" - "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" - "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" - "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" - "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" - "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" - "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" - "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" - "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" - "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" - "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" - "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" - "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" - "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" - "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" - "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" - "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" - "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" - "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" - "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" - "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" - "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" - "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" - "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" - "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" - "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" - "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" - "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" - "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" - "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" - "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" - "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" - "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" - "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" - "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" - "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" - "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" - "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" - "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" - "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" - "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" - "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" - "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" - "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" - "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" - "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" - "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" - "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" - "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" - "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" - "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" - "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" - "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" - "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" - "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" - "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" - "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" - "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" - "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" - "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" - "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" - "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" - "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" - "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" - "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" - "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" - "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" - "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" - "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" - "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" - "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" - "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" - "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" - "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" - "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" - "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" - "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" - "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" - "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" - "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" - "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" - "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" - "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" - "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" - "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" - "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" - "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" - "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" - "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" - "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" - "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" - "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" - "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" - "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" - "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" - "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" - "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" - "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" - "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" - "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" - "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" - "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" - "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" - "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" - "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" - "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" - "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" - "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" - "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" - "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" - "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" - "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" - "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" - "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" - "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" - "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" - "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" - "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" - "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" - "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" - "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" - "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" - "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" - "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" - "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" - "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" - "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" - "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" - "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" - "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" - "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" - "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" - "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" - "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" - "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" - "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" - "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" - "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" - "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" - "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" - "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" - "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" - "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" - "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" - "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" - "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" - "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" - "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" - "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" - "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" - "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" - "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" - "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" - "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" - "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" - "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" - "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" - "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" - "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" - "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" - "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" - "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" - "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" - "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" - "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" - "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" - "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" - "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" - "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" - "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" - "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" - "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" - "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" - "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" - "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" - "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" - "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" - "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" - "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" - "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" - "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" - "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" - "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" - "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" - "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" - "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" - "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" - "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" - "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" - "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" - "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" - "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" - "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" - "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" - "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" - "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" - "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" - "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" - "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" - "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" - "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" - "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" - "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" - "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" - "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" - "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" - "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" - "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" - "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" - "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" - "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" - "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" - "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" - "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" - "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" - "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" - "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" - "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" - "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" - "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" - "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" - "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" - "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" - "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" - "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" - "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" - "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" - "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" - "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" - "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" - "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" - "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" - "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" - "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" - "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" - "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" - "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" - "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" - "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" - "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" - "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" - "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" - "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" - "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" - "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" - "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" - "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" - "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" - "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" - "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" - "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" - "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" - "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" - "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" - "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" - "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" - "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" - "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" - "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" - "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" - "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" - "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" - "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" - "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" - "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" - "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" - "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" - "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" - "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" - "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" - "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" - "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" - "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" - "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" - "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" - "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" - "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" - "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" - "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" - "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" - "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" - "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" - "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" - "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" - "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" - "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" - "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" - "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" - "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" - "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" - "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" - "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" - "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" - "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" - "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" - "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" - "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" - "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" - "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" - "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" - "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" - "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" - "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" - "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" - "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" - "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" - "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" - "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" - "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" - "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" - "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" - "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" - "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" - "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" - "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" - "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" - "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" - "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" - "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" - "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" - "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" - "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" - "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" - "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" - "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" - "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" - "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" - "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" - "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" - "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" - "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" - "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" - "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" - "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" - "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" - "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" - "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" - "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" - "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" - "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" - "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" - "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" - "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" - "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" - "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" - "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" - "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" - "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" - "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" - "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" - "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" - "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" - "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" - "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" - "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" - "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" - "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" - "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" - "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" - "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" - "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" - "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" - "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" - "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" - "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" - "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" - "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" - "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" - "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" - "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" - "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" - "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" - "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" - "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" - "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" - "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" - "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" - "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" - "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" - "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" - "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" - "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" - "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" - "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" - "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" - "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" - "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" - "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" - "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" - "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" - "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" - "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" - "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" - "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" - "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" - "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" - "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" - "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" - "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" - "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" - "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" - "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" - "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" - "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" - "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" - "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" - "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" - "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" - "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" - "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" - "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" - "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" - "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" - "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" - "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" - "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" - "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" - "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" - "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" - "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" - "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" - "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" - "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" - "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" - "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" - "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" - "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" - "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" - "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" - "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" - "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" - "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" - "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" - "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" - "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" - "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" - "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" - "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" - "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" - "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" - "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" - "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" - "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" - "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" - "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" - "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" - "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" - "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" - "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" - "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" - "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" - "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" - "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" - "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" - "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" - "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" - "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" - "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" - "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" - "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" - "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" - "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" - "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" - "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" - "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" - "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" - "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" - "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" - "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" - "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" - "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" - "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" - "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" - "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" - "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" - "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" - "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" - "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" - "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" - "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" - "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" - "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" - "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" - "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" - "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" - "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" - "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" - "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" - "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" - "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" - "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" - "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" - "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" - "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" - "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" - "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" - "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" - "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" - "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" - "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" - "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" - "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" - "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" - "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" - "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" - "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" - "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" - "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" - "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" - "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" - "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" - "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" - "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" - "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" - "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" - "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" - "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" - "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" - "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" - "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" - "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" - "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" - "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" - "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" - "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" - "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" - "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" - "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" - "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" - "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" - "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" - "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" - "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" - "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" - "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" - "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" - "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" - "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" - "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" - "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" - "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" - "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" - "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" - "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" - "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" - "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" - "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" - "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" - "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" - "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" - "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" - "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" - "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" - "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" - "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" - "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" - "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" - "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" - "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" - "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" - "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" - "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" - "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" - "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" - "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" - "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" - "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" - "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" - "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" - "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" - "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" - "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" - "8f4e208f4e0b"; - -extern std::string const functions5kHex = - "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" - "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" - "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" - "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" - "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" - "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" - "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" - "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" - "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" - "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" - "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" - "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" - "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" - "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" - "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" - "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" - "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" - "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" - "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" - "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" - "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" - "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" - "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" - "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" - "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" - "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" - "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" - "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" - "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" - "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" - "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" - "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" - "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" - "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" - "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" - "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" - "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" - "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" - "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" - "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" - "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" - "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" - "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" - "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" - "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" - "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" - "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" - "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" - "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" - "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" - "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" - "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" - "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" - "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" - "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" - "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" - "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" - "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" - "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" - "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" - "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" - "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" - "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" - "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" - "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" - "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" - "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" - "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" - "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" - "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" - "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" - "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" - "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" - "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" - "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" - "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" - "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" - "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" - "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" - "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" - "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" - "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" - "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" - "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" - "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" - "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" - "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" - "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" - "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" - "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" - "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" - "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" - "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" - "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" - "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" - "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" - "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" - "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" - "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" - "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" - "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" - "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" - "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" - "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" - "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" - "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" - "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" - "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" - "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" - "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" - "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" - "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" - "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" - "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" - "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" - "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" - "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" - "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" - "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" - "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" - "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" - "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" - "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" - "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" - "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" - "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" - "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" - "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" - "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" - "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" - "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" - "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" - "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" - "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" - "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" - "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" - "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" - "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" - "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" - "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" - "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" - "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" - "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" - "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" - "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" - "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" - "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" - "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" - "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" - "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" - "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" - "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" - "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" - "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" - "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" - "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" - "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" - "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" - "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" - "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" - "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" - "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" - "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" - "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" - "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" - "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" - "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" - "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" - "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" - "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" - "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" - "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" - "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" - "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" - "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" - "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" - "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" - "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" - "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" - "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" - "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" - "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" - "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" - "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" - "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" - "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" - "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" - "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" - "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" - "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" - "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" - "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" - "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" - "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" - "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" - "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" - "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" - "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" - "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" - "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" - "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" - "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" - "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" - "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" - "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" - "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" - "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" - "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" - "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" - "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" - "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" - "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" - "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" - "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" - "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" - "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" - "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" - "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" - "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" - "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" - "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" - "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" - "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" - "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" - "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" - "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" - "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" - "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" - "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" - "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" - "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" - "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" - "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" - "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" - "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" - "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" - "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" - "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" - "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" - "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" - "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" - "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" - "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" - "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" - "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" - "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" - "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" - "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" - "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" - "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" - "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" - "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" - "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" - "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" - "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" - "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" - "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" - "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" - "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" - "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" - "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" - "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" - "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" - "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" - "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" - "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" - "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" - "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" - "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" - "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" - "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" - "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" - "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" - "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" - "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" - "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" - "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" - "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" - "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" - "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" - "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" - "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" - "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" - "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" - "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" - "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" - "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" - "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" - "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" - "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" - "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" - "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" - "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" - "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" - "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" - "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" - "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" - "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" - "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" - "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" - "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" - "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" - "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" - "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" - "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" - "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" - "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" - "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" - "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" - "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" - "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" - "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" - "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" - "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" - "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" - "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" - "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" - "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" - "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" - "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" - "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" - "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" - "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" - "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" - "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" - "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" - "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" - "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" - "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" - "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" - "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" - "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" - "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" - "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" - "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" - "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" - "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" - "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" - "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" - "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" - "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" - "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" - "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" - "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" - "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" - "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" - "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" - "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" - "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" - "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" - "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" - "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" - "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" - "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" - "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" - "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" - "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" - "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" - "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" - "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" - "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" - "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" - "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" - "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" - "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" - "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" - "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" - "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" - "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" - "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" - "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" - "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" - "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" - "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" - "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" - "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" - "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" - "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" - "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" - "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" - "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" - "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" - "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" - "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" - "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" - "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" - "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" - "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" - "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" - "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" - "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" - "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" - "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" - "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" - "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" - "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" - "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" - "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" - "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" - "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" - "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" - "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" - "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" - "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" - "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" - "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" - "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" - "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" - "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" - "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" - "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" - "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" - "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" - "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" - "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" - "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" - "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" - "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" - "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" - "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" - "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" - "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" - "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" - "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" - "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" - "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" - "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" - "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" - "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" - "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" - "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" - "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" - "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" - "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" - "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" - "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" - "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" - "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" - "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" - "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" - "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" - "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" - "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" - "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" - "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" - "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" - "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" - "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" - "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" - "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" - "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" - "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" - "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" - "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" - "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" - "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" - "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" - "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" - "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" - "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" - "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" - "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" - "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" - "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" - "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" - "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" - "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" - "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" - "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" - "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" - "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" - "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" - "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" - "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" - "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" - "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" - "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" - "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" - "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" - "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" - "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" - "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" - "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" - "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" - "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" - "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" - "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" - "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" - "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" - "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" - "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" - "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" - "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" - "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" - "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" - "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" - "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" - "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" - "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" - "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" - "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" - "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" - "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" - "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" - "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" - "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" - "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" - "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" - "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" - "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" - "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" - "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" - "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" - "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" - "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" - "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" - "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" - "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" - "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" - "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" - "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" - "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" - "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" - "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" - "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" - "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" - "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" - "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" - "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" - "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" - "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" - "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" - "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" - "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" - "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" - "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" - "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" - "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" - "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" - "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" - "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" - "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" - "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" - "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" - "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" - "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" - "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" - "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" - "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" - "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" - "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" - "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" - "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" - "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" - "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" - "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" - "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" - "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" - "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" - "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" - "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" - "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" - "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" - "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" - "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" - "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" - "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" - "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" - "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" - "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" - "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" - "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" - "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" - "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" - "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" - "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" - "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" - "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" - "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" - "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" - "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" - "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" - "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" - "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" - "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" - "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" - "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" - "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" - "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" - "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" - "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" - "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" - "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" - "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" - "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" - "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" - "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" - "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" - "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" - "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" - "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" - "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" - "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" - "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" - "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" - "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" - "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" - "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" - "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" - "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" - "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" - "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" - "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" - "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" - "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" - "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" - "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" - "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" - "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" - "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" - "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" - "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" - "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" - "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" - "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" - "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" - "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" - "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" - "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" - "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" - "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" - "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" - "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" - "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" - "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" - "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" - "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" - "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" - "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" - "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" - "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" - "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" - "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" - "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" - "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" - "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" - "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" - "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" - "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" - "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" - "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" - "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" - "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" - "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" - "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" - "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" - "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" - "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" - "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" - "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" - "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" - "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" - "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" - "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" - "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" - "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" - "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" - "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" - "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" - "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" - "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" - "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" - "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" - "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" - "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" - "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" - "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" - "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" - "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" - "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" - "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" - "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" - "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" - "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" - "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" - "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" - "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" - "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" - "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" - "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" - "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" - "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" - "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" - "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" - "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" - "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" - "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" - "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" - "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" - "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" - "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" - "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" - "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" - "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" - "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" - "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" - "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" - "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" - "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" - "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" - "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" - "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" - "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" - "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" - "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" - "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" - "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" - "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" - "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" - "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" - "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" - "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" - "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" - "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" - "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" - "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" - "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" - "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" - "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" - "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" - "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" - "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" - "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" - "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" - "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" - "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" - "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" - "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" - "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" - "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" - "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" - "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" - "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" - "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" - "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" - "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" - "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" - "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" - "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" - "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" - "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" - "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" - "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" - "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" - "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" - "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" - "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" - "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" - "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" - "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" - "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" - "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" - "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" - "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" - "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" - "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" - "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" - "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" - "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" - "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" - "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" - "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" - "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" - "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" - "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" - "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" - "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" - "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" - "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" - "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" - "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" - "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" - "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" - "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" - "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" - "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" - "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" - "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" - "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" - "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" - "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" - "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" - "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" - "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" - "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" - "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" - "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" - "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" - "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" - "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" - "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" - "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" - "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" - "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" - "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" - "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" - "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" - "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" - "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" - "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" - "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" - "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" - "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" - "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" - "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" - "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" - "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" - "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" - "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" - "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" - "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" - "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" - "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" - "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" - "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" - "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" - "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" - "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" - "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" - "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" - "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" - "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" - "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" - "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" - "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" - "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" - "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" - "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" - "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" - "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" - "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" - "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" - "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" - "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" - "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" - "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" - "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" - "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" - "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" - "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" - "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" - "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" - "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" - "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" - "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" - "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" - "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" - "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" - "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" - "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" - "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" - "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" - "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" - "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" - "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" - "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" - "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" - "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" - "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" - "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" - "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" - "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" - "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" - "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" - "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" - "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" - "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" - "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" - "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" - "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" - "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" - "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" - "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" - "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" - "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" - "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" - "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" - "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" - "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" - "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" - "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" - "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" - "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" - "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" - "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" - "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" - "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" - "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" - "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" - "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" - "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" - "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" - "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" - "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" - "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" - "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" - "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" - "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" - "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" - "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" - "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" - "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" - "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" - "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" - "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" - "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" - "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" - "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" - "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" - "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" - "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" - "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" - "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" - "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" - "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" - "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" - "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" - "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" - "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" - "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" - "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" - "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" - "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" - "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" - "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" - "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" - "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" - "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" - "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" - "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" - "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" - "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" - "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" - "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" - "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" - "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" - "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" - "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" - "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" - "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" - "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" - "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" - "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" - "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" - "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" - "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" - "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" - "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" - "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" - "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" - "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" - "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" - "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" - "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" - "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" - "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" - "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" - "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" - "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" - "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" - "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" - "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" - "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" - "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" - "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" - "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" - "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" - "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" - "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" - "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" - "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" - "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" - "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" - "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" - "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" - "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" - "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" - "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" - "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" - "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" - "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" - "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" - "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" - "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" - "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" - "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" - "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" - "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" - "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" - "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" - "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" - "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" - "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" - "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" - "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" - "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" - "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" - "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" - "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" - "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" - "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" - "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" - "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" - "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" - "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" - "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" - "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" - "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" - "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" - "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" - "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" - "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" - "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" - "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" - "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" - "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" - "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" - "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" - "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" - "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" - "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" - "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" - "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" - "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" - "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" - "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" - "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" - "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" - "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" - "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" - "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" - "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" - "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" - "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" - "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" - "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" - "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" - "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" - "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" - "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" - "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" - "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" - "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" - "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" - "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" - "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" - "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" - "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" - "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" - "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" - "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" - "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" - "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" - "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" - "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" - "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" - "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" - "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" - "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" - "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" - "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" - "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" - "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" - "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" - "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" - "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" - "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" - "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" - "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" - "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" - "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" - "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" - "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" - "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" - "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" - "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" - "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" - "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" - "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" - "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" - "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" - "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" - "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" - "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" - "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" - "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" - "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" - "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" - "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" - "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" - "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" - "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" - "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" - "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" - "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" - "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" - "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" - "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" - "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" - "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" - "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" - "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" - "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" - "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" - "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" - "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" - "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" - "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" - "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" - "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" - "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" - "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" - "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" - "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" - "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" - "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" - "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" - "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" - "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" - "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" - "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" - "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" - "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" - "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" - "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" - "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" - "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" - "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" - "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" - "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" - "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" - "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" - "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" - "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" - "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" - "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" - "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" - "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" - "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" - "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" - "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" - "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" - "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" - "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" - "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" - "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" - "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" - "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" - "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" - "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" - "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" - "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" - "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" - "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" - "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" - "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" - "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" - "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" - "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" - "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" - "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" - "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" - "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" - "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" - "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" - "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" - "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" - "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" - "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" - "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" - "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" - "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" - "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" - "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" - "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" - "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" - "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" - "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" - "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" - "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" - "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" - "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" - "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" - "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" - "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" - "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" - "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" - "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" - "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" - "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" - "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" - "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" - "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" - "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" - "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" - "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" - "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" - "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" - "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" - "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" - "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" - "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" - "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" - "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" - "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" - "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" - "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" - "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" - "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" - "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" - "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" - "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" - "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" - "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" - "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" - "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" - "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" - "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" - "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" - "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" - "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" - "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" - "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" - "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" - "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" - "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" - "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" - "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" - "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" - "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" - "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" - "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" - "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" - "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" - "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" - "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" - "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" - "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" - "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" - "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" - "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" - "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" - "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" - "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" - "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" - "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" - "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" - "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" - "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" - "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" - "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" - "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" - "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" - "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" - "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" - "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" - "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" - "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" - "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" - "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" - "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" - "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" - "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" - "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" - "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b"; - extern std::string const opcReservedHex = "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" "10616c6c5f696e737472756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e0101010101" diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.wat b/src/test/app/wasm_fixtures/wat/functions_5k.wat deleted file mode 100644 index 819472726d..0000000000 --- a/src/test/app/wasm_fixtures/wat/functions_5k.wat +++ /dev/null @@ -1,45002 +0,0 @@ -(module - (func $test0000 (export "test0000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0001 (export "test0001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0002 (export "test0002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0003 (export "test0003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0004 (export "test0004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0005 (export "test0005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0006 (export "test0006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0007 (export "test0007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0008 (export "test0008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0009 (export "test0009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0010 (export "test0010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0011 (export "test0011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0012 (export "test0012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0013 (export "test0013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0014 (export "test0014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0015 (export "test0015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0016 (export "test0016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0017 (export "test0017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0018 (export "test0018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0019 (export "test0019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0020 (export "test0020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0021 (export "test0021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0022 (export "test0022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0023 (export "test0023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0024 (export "test0024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0025 (export "test0025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0026 (export "test0026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0027 (export "test0027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0028 (export "test0028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0029 (export "test0029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0030 (export "test0030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0031 (export "test0031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0032 (export "test0032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0033 (export "test0033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0034 (export "test0034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0035 (export "test0035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0036 (export "test0036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0037 (export "test0037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0038 (export "test0038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0039 (export "test0039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0040 (export "test0040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0041 (export "test0041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0042 (export "test0042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0043 (export "test0043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0044 (export "test0044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0045 (export "test0045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0046 (export "test0046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0047 (export "test0047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0048 (export "test0048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0049 (export "test0049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0050 (export "test0050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0051 (export "test0051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0052 (export "test0052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0053 (export "test0053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0054 (export "test0054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0055 (export "test0055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0056 (export "test0056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0057 (export "test0057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0058 (export "test0058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0059 (export "test0059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0060 (export "test0060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0061 (export "test0061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0062 (export "test0062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0063 (export "test0063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0064 (export "test0064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0065 (export "test0065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0066 (export "test0066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0067 (export "test0067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0068 (export "test0068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0069 (export "test0069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0070 (export "test0070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0071 (export "test0071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0072 (export "test0072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0073 (export "test0073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0074 (export "test0074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0075 (export "test0075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0076 (export "test0076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0077 (export "test0077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0078 (export "test0078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0079 (export "test0079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0080 (export "test0080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0081 (export "test0081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0082 (export "test0082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0083 (export "test0083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0084 (export "test0084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0085 (export "test0085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0086 (export "test0086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0087 (export "test0087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0088 (export "test0088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0089 (export "test0089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0090 (export "test0090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0091 (export "test0091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0092 (export "test0092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0093 (export "test0093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0094 (export "test0094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0095 (export "test0095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0096 (export "test0096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0097 (export "test0097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0098 (export "test0098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0099 (export "test0099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0100 (export "test0100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0101 (export "test0101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0102 (export "test0102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0103 (export "test0103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0104 (export "test0104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0105 (export "test0105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0106 (export "test0106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0107 (export "test0107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0108 (export "test0108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0109 (export "test0109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0110 (export "test0110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0111 (export "test0111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0112 (export "test0112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0113 (export "test0113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0114 (export "test0114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0115 (export "test0115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0116 (export "test0116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0117 (export "test0117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0118 (export "test0118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0119 (export "test0119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0120 (export "test0120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0121 (export "test0121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0122 (export "test0122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0123 (export "test0123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0124 (export "test0124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0125 (export "test0125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0126 (export "test0126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0127 (export "test0127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0128 (export "test0128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0129 (export "test0129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0130 (export "test0130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0131 (export "test0131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0132 (export "test0132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0133 (export "test0133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0134 (export "test0134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0135 (export "test0135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0136 (export "test0136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0137 (export "test0137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0138 (export "test0138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0139 (export "test0139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0140 (export "test0140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0141 (export "test0141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0142 (export "test0142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0143 (export "test0143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0144 (export "test0144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0145 (export "test0145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0146 (export "test0146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0147 (export "test0147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0148 (export "test0148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0149 (export "test0149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0150 (export "test0150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0151 (export "test0151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0152 (export "test0152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0153 (export "test0153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0154 (export "test0154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0155 (export "test0155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0156 (export "test0156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0157 (export "test0157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0158 (export "test0158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0159 (export "test0159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0160 (export "test0160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0161 (export "test0161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0162 (export "test0162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0163 (export "test0163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0164 (export "test0164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0165 (export "test0165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0166 (export "test0166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0167 (export "test0167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0168 (export "test0168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0169 (export "test0169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0170 (export "test0170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0171 (export "test0171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0172 (export "test0172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0173 (export "test0173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0174 (export "test0174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0175 (export "test0175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0176 (export "test0176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0177 (export "test0177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0178 (export "test0178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0179 (export "test0179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0180 (export "test0180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0181 (export "test0181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0182 (export "test0182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0183 (export "test0183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0184 (export "test0184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0185 (export "test0185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0186 (export "test0186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0187 (export "test0187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0188 (export "test0188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0189 (export "test0189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0190 (export "test0190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0191 (export "test0191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0192 (export "test0192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0193 (export "test0193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0194 (export "test0194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0195 (export "test0195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0196 (export "test0196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0197 (export "test0197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0198 (export "test0198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0199 (export "test0199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0200 (export "test0200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0201 (export "test0201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0202 (export "test0202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0203 (export "test0203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0204 (export "test0204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0205 (export "test0205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0206 (export "test0206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0207 (export "test0207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0208 (export "test0208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0209 (export "test0209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0210 (export "test0210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0211 (export "test0211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0212 (export "test0212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0213 (export "test0213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0214 (export "test0214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0215 (export "test0215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0216 (export "test0216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0217 (export "test0217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0218 (export "test0218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0219 (export "test0219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0220 (export "test0220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0221 (export "test0221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0222 (export "test0222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0223 (export "test0223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0224 (export "test0224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0225 (export "test0225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0226 (export "test0226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0227 (export "test0227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0228 (export "test0228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0229 (export "test0229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0230 (export "test0230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0231 (export "test0231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0232 (export "test0232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0233 (export "test0233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0234 (export "test0234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0235 (export "test0235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0236 (export "test0236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0237 (export "test0237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0238 (export "test0238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0239 (export "test0239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0240 (export "test0240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0241 (export "test0241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0242 (export "test0242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0243 (export "test0243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0244 (export "test0244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0245 (export "test0245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0246 (export "test0246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0247 (export "test0247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0248 (export "test0248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0249 (export "test0249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0250 (export "test0250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0251 (export "test0251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0252 (export "test0252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0253 (export "test0253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0254 (export "test0254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0255 (export "test0255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0256 (export "test0256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0257 (export "test0257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0258 (export "test0258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0259 (export "test0259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0260 (export "test0260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0261 (export "test0261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0262 (export "test0262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0263 (export "test0263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0264 (export "test0264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0265 (export "test0265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0266 (export "test0266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0267 (export "test0267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0268 (export "test0268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0269 (export "test0269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0270 (export "test0270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0271 (export "test0271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0272 (export "test0272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0273 (export "test0273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0274 (export "test0274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0275 (export "test0275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0276 (export "test0276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0277 (export "test0277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0278 (export "test0278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0279 (export "test0279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0280 (export "test0280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0281 (export "test0281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0282 (export "test0282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0283 (export "test0283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0284 (export "test0284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0285 (export "test0285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0286 (export "test0286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0287 (export "test0287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0288 (export "test0288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0289 (export "test0289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0290 (export "test0290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0291 (export "test0291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0292 (export "test0292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0293 (export "test0293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0294 (export "test0294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0295 (export "test0295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0296 (export "test0296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0297 (export "test0297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0298 (export "test0298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0299 (export "test0299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0300 (export "test0300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0301 (export "test0301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0302 (export "test0302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0303 (export "test0303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0304 (export "test0304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0305 (export "test0305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0306 (export "test0306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0307 (export "test0307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0308 (export "test0308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0309 (export "test0309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0310 (export "test0310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0311 (export "test0311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0312 (export "test0312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0313 (export "test0313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0314 (export "test0314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0315 (export "test0315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0316 (export "test0316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0317 (export "test0317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0318 (export "test0318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0319 (export "test0319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0320 (export "test0320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0321 (export "test0321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0322 (export "test0322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0323 (export "test0323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0324 (export "test0324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0325 (export "test0325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0326 (export "test0326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0327 (export "test0327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0328 (export "test0328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0329 (export "test0329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0330 (export "test0330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0331 (export "test0331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0332 (export "test0332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0333 (export "test0333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0334 (export "test0334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0335 (export "test0335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0336 (export "test0336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0337 (export "test0337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0338 (export "test0338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0339 (export "test0339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0340 (export "test0340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0341 (export "test0341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0342 (export "test0342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0343 (export "test0343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0344 (export "test0344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0345 (export "test0345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0346 (export "test0346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0347 (export "test0347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0348 (export "test0348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0349 (export "test0349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0350 (export "test0350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0351 (export "test0351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0352 (export "test0352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0353 (export "test0353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0354 (export "test0354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0355 (export "test0355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0356 (export "test0356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0357 (export "test0357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0358 (export "test0358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0359 (export "test0359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0360 (export "test0360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0361 (export "test0361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0362 (export "test0362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0363 (export "test0363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0364 (export "test0364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0365 (export "test0365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0366 (export "test0366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0367 (export "test0367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0368 (export "test0368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0369 (export "test0369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0370 (export "test0370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0371 (export "test0371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0372 (export "test0372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0373 (export "test0373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0374 (export "test0374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0375 (export "test0375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0376 (export "test0376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0377 (export "test0377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0378 (export "test0378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0379 (export "test0379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0380 (export "test0380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0381 (export "test0381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0382 (export "test0382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0383 (export "test0383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0384 (export "test0384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0385 (export "test0385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0386 (export "test0386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0387 (export "test0387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0388 (export "test0388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0389 (export "test0389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0390 (export "test0390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0391 (export "test0391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0392 (export "test0392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0393 (export "test0393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0394 (export "test0394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0395 (export "test0395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0396 (export "test0396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0397 (export "test0397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0398 (export "test0398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0399 (export "test0399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0400 (export "test0400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0401 (export "test0401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0402 (export "test0402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0403 (export "test0403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0404 (export "test0404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0405 (export "test0405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0406 (export "test0406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0407 (export "test0407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0408 (export "test0408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0409 (export "test0409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0410 (export "test0410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0411 (export "test0411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0412 (export "test0412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0413 (export "test0413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0414 (export "test0414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0415 (export "test0415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0416 (export "test0416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0417 (export "test0417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0418 (export "test0418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0419 (export "test0419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0420 (export "test0420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0421 (export "test0421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0422 (export "test0422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0423 (export "test0423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0424 (export "test0424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0425 (export "test0425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0426 (export "test0426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0427 (export "test0427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0428 (export "test0428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0429 (export "test0429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0430 (export "test0430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0431 (export "test0431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0432 (export "test0432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0433 (export "test0433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0434 (export "test0434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0435 (export "test0435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0436 (export "test0436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0437 (export "test0437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0438 (export "test0438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0439 (export "test0439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0440 (export "test0440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0441 (export "test0441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0442 (export "test0442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0443 (export "test0443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0444 (export "test0444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0445 (export "test0445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0446 (export "test0446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0447 (export "test0447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0448 (export "test0448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0449 (export "test0449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0450 (export "test0450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0451 (export "test0451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0452 (export "test0452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0453 (export "test0453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0454 (export "test0454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0455 (export "test0455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0456 (export "test0456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0457 (export "test0457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0458 (export "test0458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0459 (export "test0459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0460 (export "test0460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0461 (export "test0461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0462 (export "test0462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0463 (export "test0463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0464 (export "test0464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0465 (export "test0465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0466 (export "test0466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0467 (export "test0467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0468 (export "test0468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0469 (export "test0469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0470 (export "test0470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0471 (export "test0471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0472 (export "test0472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0473 (export "test0473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0474 (export "test0474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0475 (export "test0475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0476 (export "test0476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0477 (export "test0477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0478 (export "test0478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0479 (export "test0479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0480 (export "test0480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0481 (export "test0481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0482 (export "test0482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0483 (export "test0483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0484 (export "test0484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0485 (export "test0485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0486 (export "test0486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0487 (export "test0487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0488 (export "test0488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0489 (export "test0489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0490 (export "test0490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0491 (export "test0491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0492 (export "test0492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0493 (export "test0493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0494 (export "test0494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0495 (export "test0495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0496 (export "test0496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0497 (export "test0497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0498 (export "test0498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0499 (export "test0499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0500 (export "test0500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0501 (export "test0501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0502 (export "test0502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0503 (export "test0503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0504 (export "test0504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0505 (export "test0505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0506 (export "test0506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0507 (export "test0507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0508 (export "test0508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0509 (export "test0509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0510 (export "test0510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0511 (export "test0511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0512 (export "test0512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0513 (export "test0513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0514 (export "test0514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0515 (export "test0515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0516 (export "test0516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0517 (export "test0517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0518 (export "test0518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0519 (export "test0519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0520 (export "test0520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0521 (export "test0521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0522 (export "test0522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0523 (export "test0523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0524 (export "test0524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0525 (export "test0525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0526 (export "test0526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0527 (export "test0527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0528 (export "test0528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0529 (export "test0529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0530 (export "test0530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0531 (export "test0531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0532 (export "test0532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0533 (export "test0533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0534 (export "test0534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0535 (export "test0535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0536 (export "test0536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0537 (export "test0537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0538 (export "test0538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0539 (export "test0539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0540 (export "test0540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0541 (export "test0541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0542 (export "test0542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0543 (export "test0543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0544 (export "test0544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0545 (export "test0545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0546 (export "test0546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0547 (export "test0547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0548 (export "test0548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0549 (export "test0549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0550 (export "test0550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0551 (export "test0551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0552 (export "test0552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0553 (export "test0553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0554 (export "test0554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0555 (export "test0555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0556 (export "test0556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0557 (export "test0557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0558 (export "test0558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0559 (export "test0559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0560 (export "test0560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0561 (export "test0561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0562 (export "test0562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0563 (export "test0563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0564 (export "test0564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0565 (export "test0565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0566 (export "test0566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0567 (export "test0567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0568 (export "test0568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0569 (export "test0569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0570 (export "test0570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0571 (export "test0571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0572 (export "test0572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0573 (export "test0573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0574 (export "test0574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0575 (export "test0575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0576 (export "test0576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0577 (export "test0577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0578 (export "test0578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0579 (export "test0579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0580 (export "test0580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0581 (export "test0581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0582 (export "test0582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0583 (export "test0583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0584 (export "test0584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0585 (export "test0585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0586 (export "test0586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0587 (export "test0587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0588 (export "test0588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0589 (export "test0589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0590 (export "test0590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0591 (export "test0591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0592 (export "test0592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0593 (export "test0593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0594 (export "test0594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0595 (export "test0595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0596 (export "test0596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0597 (export "test0597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0598 (export "test0598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0599 (export "test0599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0600 (export "test0600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0601 (export "test0601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0602 (export "test0602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0603 (export "test0603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0604 (export "test0604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0605 (export "test0605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0606 (export "test0606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0607 (export "test0607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0608 (export "test0608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0609 (export "test0609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0610 (export "test0610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0611 (export "test0611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0612 (export "test0612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0613 (export "test0613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0614 (export "test0614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0615 (export "test0615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0616 (export "test0616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0617 (export "test0617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0618 (export "test0618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0619 (export "test0619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0620 (export "test0620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0621 (export "test0621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0622 (export "test0622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0623 (export "test0623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0624 (export "test0624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0625 (export "test0625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0626 (export "test0626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0627 (export "test0627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0628 (export "test0628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0629 (export "test0629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0630 (export "test0630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0631 (export "test0631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0632 (export "test0632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0633 (export "test0633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0634 (export "test0634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0635 (export "test0635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0636 (export "test0636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0637 (export "test0637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0638 (export "test0638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0639 (export "test0639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0640 (export "test0640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0641 (export "test0641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0642 (export "test0642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0643 (export "test0643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0644 (export "test0644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0645 (export "test0645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0646 (export "test0646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0647 (export "test0647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0648 (export "test0648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0649 (export "test0649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0650 (export "test0650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0651 (export "test0651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0652 (export "test0652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0653 (export "test0653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0654 (export "test0654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0655 (export "test0655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0656 (export "test0656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0657 (export "test0657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0658 (export "test0658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0659 (export "test0659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0660 (export "test0660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0661 (export "test0661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0662 (export "test0662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0663 (export "test0663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0664 (export "test0664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0665 (export "test0665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0666 (export "test0666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0667 (export "test0667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0668 (export "test0668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0669 (export "test0669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0670 (export "test0670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0671 (export "test0671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0672 (export "test0672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0673 (export "test0673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0674 (export "test0674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0675 (export "test0675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0676 (export "test0676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0677 (export "test0677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0678 (export "test0678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0679 (export "test0679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0680 (export "test0680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0681 (export "test0681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0682 (export "test0682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0683 (export "test0683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0684 (export "test0684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0685 (export "test0685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0686 (export "test0686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0687 (export "test0687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0688 (export "test0688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0689 (export "test0689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0690 (export "test0690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0691 (export "test0691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0692 (export "test0692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0693 (export "test0693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0694 (export "test0694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0695 (export "test0695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0696 (export "test0696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0697 (export "test0697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0698 (export "test0698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0699 (export "test0699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0700 (export "test0700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0701 (export "test0701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0702 (export "test0702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0703 (export "test0703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0704 (export "test0704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0705 (export "test0705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0706 (export "test0706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0707 (export "test0707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0708 (export "test0708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0709 (export "test0709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0710 (export "test0710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0711 (export "test0711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0712 (export "test0712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0713 (export "test0713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0714 (export "test0714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0715 (export "test0715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0716 (export "test0716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0717 (export "test0717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0718 (export "test0718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0719 (export "test0719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0720 (export "test0720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0721 (export "test0721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0722 (export "test0722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0723 (export "test0723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0724 (export "test0724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0725 (export "test0725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0726 (export "test0726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0727 (export "test0727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0728 (export "test0728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0729 (export "test0729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0730 (export "test0730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0731 (export "test0731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0732 (export "test0732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0733 (export "test0733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0734 (export "test0734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0735 (export "test0735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0736 (export "test0736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0737 (export "test0737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0738 (export "test0738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0739 (export "test0739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0740 (export "test0740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0741 (export "test0741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0742 (export "test0742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0743 (export "test0743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0744 (export "test0744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0745 (export "test0745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0746 (export "test0746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0747 (export "test0747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0748 (export "test0748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0749 (export "test0749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0750 (export "test0750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0751 (export "test0751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0752 (export "test0752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0753 (export "test0753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0754 (export "test0754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0755 (export "test0755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0756 (export "test0756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0757 (export "test0757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0758 (export "test0758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0759 (export "test0759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0760 (export "test0760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0761 (export "test0761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0762 (export "test0762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0763 (export "test0763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0764 (export "test0764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0765 (export "test0765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0766 (export "test0766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0767 (export "test0767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0768 (export "test0768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0769 (export "test0769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0770 (export "test0770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0771 (export "test0771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0772 (export "test0772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0773 (export "test0773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0774 (export "test0774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0775 (export "test0775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0776 (export "test0776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0777 (export "test0777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0778 (export "test0778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0779 (export "test0779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0780 (export "test0780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0781 (export "test0781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0782 (export "test0782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0783 (export "test0783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0784 (export "test0784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0785 (export "test0785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0786 (export "test0786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0787 (export "test0787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0788 (export "test0788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0789 (export "test0789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0790 (export "test0790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0791 (export "test0791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0792 (export "test0792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0793 (export "test0793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0794 (export "test0794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0795 (export "test0795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0796 (export "test0796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0797 (export "test0797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0798 (export "test0798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0799 (export "test0799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0800 (export "test0800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0801 (export "test0801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0802 (export "test0802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0803 (export "test0803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0804 (export "test0804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0805 (export "test0805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0806 (export "test0806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0807 (export "test0807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0808 (export "test0808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0809 (export "test0809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0810 (export "test0810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0811 (export "test0811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0812 (export "test0812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0813 (export "test0813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0814 (export "test0814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0815 (export "test0815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0816 (export "test0816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0817 (export "test0817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0818 (export "test0818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0819 (export "test0819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0820 (export "test0820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0821 (export "test0821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0822 (export "test0822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0823 (export "test0823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0824 (export "test0824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0825 (export "test0825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0826 (export "test0826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0827 (export "test0827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0828 (export "test0828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0829 (export "test0829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0830 (export "test0830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0831 (export "test0831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0832 (export "test0832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0833 (export "test0833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0834 (export "test0834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0835 (export "test0835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0836 (export "test0836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0837 (export "test0837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0838 (export "test0838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0839 (export "test0839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0840 (export "test0840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0841 (export "test0841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0842 (export "test0842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0843 (export "test0843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0844 (export "test0844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0845 (export "test0845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0846 (export "test0846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0847 (export "test0847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0848 (export "test0848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0849 (export "test0849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0850 (export "test0850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0851 (export "test0851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0852 (export "test0852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0853 (export "test0853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0854 (export "test0854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0855 (export "test0855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0856 (export "test0856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0857 (export "test0857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0858 (export "test0858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0859 (export "test0859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0860 (export "test0860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0861 (export "test0861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0862 (export "test0862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0863 (export "test0863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0864 (export "test0864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0865 (export "test0865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0866 (export "test0866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0867 (export "test0867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0868 (export "test0868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0869 (export "test0869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0870 (export "test0870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0871 (export "test0871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0872 (export "test0872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0873 (export "test0873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0874 (export "test0874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0875 (export "test0875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0876 (export "test0876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0877 (export "test0877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0878 (export "test0878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0879 (export "test0879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0880 (export "test0880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0881 (export "test0881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0882 (export "test0882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0883 (export "test0883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0884 (export "test0884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0885 (export "test0885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0886 (export "test0886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0887 (export "test0887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0888 (export "test0888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0889 (export "test0889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0890 (export "test0890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0891 (export "test0891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0892 (export "test0892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0893 (export "test0893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0894 (export "test0894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0895 (export "test0895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0896 (export "test0896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0897 (export "test0897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0898 (export "test0898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0899 (export "test0899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0900 (export "test0900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0901 (export "test0901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0902 (export "test0902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0903 (export "test0903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0904 (export "test0904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0905 (export "test0905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0906 (export "test0906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0907 (export "test0907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0908 (export "test0908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0909 (export "test0909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0910 (export "test0910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0911 (export "test0911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0912 (export "test0912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0913 (export "test0913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0914 (export "test0914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0915 (export "test0915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0916 (export "test0916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0917 (export "test0917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0918 (export "test0918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0919 (export "test0919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0920 (export "test0920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0921 (export "test0921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0922 (export "test0922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0923 (export "test0923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0924 (export "test0924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0925 (export "test0925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0926 (export "test0926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0927 (export "test0927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0928 (export "test0928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0929 (export "test0929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0930 (export "test0930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0931 (export "test0931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0932 (export "test0932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0933 (export "test0933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0934 (export "test0934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0935 (export "test0935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0936 (export "test0936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0937 (export "test0937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0938 (export "test0938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0939 (export "test0939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0940 (export "test0940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0941 (export "test0941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0942 (export "test0942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0943 (export "test0943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0944 (export "test0944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0945 (export "test0945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0946 (export "test0946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0947 (export "test0947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0948 (export "test0948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0949 (export "test0949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0950 (export "test0950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0951 (export "test0951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0952 (export "test0952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0953 (export "test0953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0954 (export "test0954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0955 (export "test0955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0956 (export "test0956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0957 (export "test0957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0958 (export "test0958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0959 (export "test0959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0960 (export "test0960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0961 (export "test0961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0962 (export "test0962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0963 (export "test0963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0964 (export "test0964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0965 (export "test0965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0966 (export "test0966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0967 (export "test0967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0968 (export "test0968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0969 (export "test0969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0970 (export "test0970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0971 (export "test0971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0972 (export "test0972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0973 (export "test0973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0974 (export "test0974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0975 (export "test0975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0976 (export "test0976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0977 (export "test0977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0978 (export "test0978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0979 (export "test0979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0980 (export "test0980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0981 (export "test0981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0982 (export "test0982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0983 (export "test0983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0984 (export "test0984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0985 (export "test0985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0986 (export "test0986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0987 (export "test0987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0988 (export "test0988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0989 (export "test0989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0990 (export "test0990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0991 (export "test0991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0992 (export "test0992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0993 (export "test0993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0994 (export "test0994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0995 (export "test0995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0996 (export "test0996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0997 (export "test0997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0998 (export "test0998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0999 (export "test0999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1000 (export "test1000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1001 (export "test1001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1002 (export "test1002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1003 (export "test1003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1004 (export "test1004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1005 (export "test1005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1006 (export "test1006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1007 (export "test1007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1008 (export "test1008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1009 (export "test1009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1010 (export "test1010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1011 (export "test1011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1012 (export "test1012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1013 (export "test1013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1014 (export "test1014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1015 (export "test1015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1016 (export "test1016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1017 (export "test1017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1018 (export "test1018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1019 (export "test1019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1020 (export "test1020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1021 (export "test1021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1022 (export "test1022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1023 (export "test1023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1024 (export "test1024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1025 (export "test1025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1026 (export "test1026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1027 (export "test1027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1028 (export "test1028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1029 (export "test1029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1030 (export "test1030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1031 (export "test1031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1032 (export "test1032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1033 (export "test1033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1034 (export "test1034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1035 (export "test1035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1036 (export "test1036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1037 (export "test1037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1038 (export "test1038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1039 (export "test1039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1040 (export "test1040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1041 (export "test1041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1042 (export "test1042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1043 (export "test1043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1044 (export "test1044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1045 (export "test1045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1046 (export "test1046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1047 (export "test1047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1048 (export "test1048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1049 (export "test1049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1050 (export "test1050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1051 (export "test1051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1052 (export "test1052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1053 (export "test1053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1054 (export "test1054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1055 (export "test1055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1056 (export "test1056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1057 (export "test1057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1058 (export "test1058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1059 (export "test1059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1060 (export "test1060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1061 (export "test1061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1062 (export "test1062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1063 (export "test1063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1064 (export "test1064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1065 (export "test1065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1066 (export "test1066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1067 (export "test1067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1068 (export "test1068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1069 (export "test1069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1070 (export "test1070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1071 (export "test1071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1072 (export "test1072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1073 (export "test1073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1074 (export "test1074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1075 (export "test1075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1076 (export "test1076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1077 (export "test1077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1078 (export "test1078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1079 (export "test1079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1080 (export "test1080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1081 (export "test1081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1082 (export "test1082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1083 (export "test1083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1084 (export "test1084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1085 (export "test1085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1086 (export "test1086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1087 (export "test1087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1088 (export "test1088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1089 (export "test1089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1090 (export "test1090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1091 (export "test1091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1092 (export "test1092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1093 (export "test1093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1094 (export "test1094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1095 (export "test1095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1096 (export "test1096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1097 (export "test1097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1098 (export "test1098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1099 (export "test1099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1100 (export "test1100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1101 (export "test1101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1102 (export "test1102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1103 (export "test1103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1104 (export "test1104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1105 (export "test1105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1106 (export "test1106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1107 (export "test1107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1108 (export "test1108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1109 (export "test1109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1110 (export "test1110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1111 (export "test1111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1112 (export "test1112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1113 (export "test1113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1114 (export "test1114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1115 (export "test1115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1116 (export "test1116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1117 (export "test1117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1118 (export "test1118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1119 (export "test1119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1120 (export "test1120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1121 (export "test1121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1122 (export "test1122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1123 (export "test1123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1124 (export "test1124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1125 (export "test1125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1126 (export "test1126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1127 (export "test1127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1128 (export "test1128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1129 (export "test1129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1130 (export "test1130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1131 (export "test1131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1132 (export "test1132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1133 (export "test1133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1134 (export "test1134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1135 (export "test1135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1136 (export "test1136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1137 (export "test1137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1138 (export "test1138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1139 (export "test1139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1140 (export "test1140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1141 (export "test1141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1142 (export "test1142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1143 (export "test1143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1144 (export "test1144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1145 (export "test1145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1146 (export "test1146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1147 (export "test1147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1148 (export "test1148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1149 (export "test1149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1150 (export "test1150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1151 (export "test1151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1152 (export "test1152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1153 (export "test1153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1154 (export "test1154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1155 (export "test1155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1156 (export "test1156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1157 (export "test1157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1158 (export "test1158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1159 (export "test1159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1160 (export "test1160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1161 (export "test1161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1162 (export "test1162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1163 (export "test1163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1164 (export "test1164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1165 (export "test1165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1166 (export "test1166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1167 (export "test1167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1168 (export "test1168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1169 (export "test1169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1170 (export "test1170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1171 (export "test1171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1172 (export "test1172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1173 (export "test1173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1174 (export "test1174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1175 (export "test1175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1176 (export "test1176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1177 (export "test1177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1178 (export "test1178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1179 (export "test1179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1180 (export "test1180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1181 (export "test1181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1182 (export "test1182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1183 (export "test1183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1184 (export "test1184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1185 (export "test1185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1186 (export "test1186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1187 (export "test1187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1188 (export "test1188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1189 (export "test1189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1190 (export "test1190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1191 (export "test1191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1192 (export "test1192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1193 (export "test1193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1194 (export "test1194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1195 (export "test1195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1196 (export "test1196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1197 (export "test1197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1198 (export "test1198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1199 (export "test1199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1200 (export "test1200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1201 (export "test1201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1202 (export "test1202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1203 (export "test1203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1204 (export "test1204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1205 (export "test1205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1206 (export "test1206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1207 (export "test1207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1208 (export "test1208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1209 (export "test1209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1210 (export "test1210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1211 (export "test1211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1212 (export "test1212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1213 (export "test1213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1214 (export "test1214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1215 (export "test1215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1216 (export "test1216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1217 (export "test1217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1218 (export "test1218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1219 (export "test1219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1220 (export "test1220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1221 (export "test1221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1222 (export "test1222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1223 (export "test1223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1224 (export "test1224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1225 (export "test1225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1226 (export "test1226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1227 (export "test1227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1228 (export "test1228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1229 (export "test1229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1230 (export "test1230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1231 (export "test1231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1232 (export "test1232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1233 (export "test1233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1234 (export "test1234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1235 (export "test1235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1236 (export "test1236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1237 (export "test1237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1238 (export "test1238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1239 (export "test1239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1240 (export "test1240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1241 (export "test1241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1242 (export "test1242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1243 (export "test1243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1244 (export "test1244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1245 (export "test1245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1246 (export "test1246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1247 (export "test1247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1248 (export "test1248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1249 (export "test1249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1250 (export "test1250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1251 (export "test1251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1252 (export "test1252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1253 (export "test1253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1254 (export "test1254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1255 (export "test1255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1256 (export "test1256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1257 (export "test1257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1258 (export "test1258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1259 (export "test1259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1260 (export "test1260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1261 (export "test1261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1262 (export "test1262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1263 (export "test1263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1264 (export "test1264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1265 (export "test1265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1266 (export "test1266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1267 (export "test1267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1268 (export "test1268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1269 (export "test1269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1270 (export "test1270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1271 (export "test1271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1272 (export "test1272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1273 (export "test1273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1274 (export "test1274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1275 (export "test1275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1276 (export "test1276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1277 (export "test1277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1278 (export "test1278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1279 (export "test1279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1280 (export "test1280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1281 (export "test1281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1282 (export "test1282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1283 (export "test1283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1284 (export "test1284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1285 (export "test1285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1286 (export "test1286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1287 (export "test1287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1288 (export "test1288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1289 (export "test1289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1290 (export "test1290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1291 (export "test1291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1292 (export "test1292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1293 (export "test1293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1294 (export "test1294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1295 (export "test1295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1296 (export "test1296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1297 (export "test1297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1298 (export "test1298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1299 (export "test1299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1300 (export "test1300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1301 (export "test1301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1302 (export "test1302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1303 (export "test1303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1304 (export "test1304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1305 (export "test1305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1306 (export "test1306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1307 (export "test1307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1308 (export "test1308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1309 (export "test1309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1310 (export "test1310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1311 (export "test1311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1312 (export "test1312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1313 (export "test1313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1314 (export "test1314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1315 (export "test1315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1316 (export "test1316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1317 (export "test1317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1318 (export "test1318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1319 (export "test1319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1320 (export "test1320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1321 (export "test1321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1322 (export "test1322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1323 (export "test1323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1324 (export "test1324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1325 (export "test1325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1326 (export "test1326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1327 (export "test1327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1328 (export "test1328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1329 (export "test1329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1330 (export "test1330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1331 (export "test1331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1332 (export "test1332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1333 (export "test1333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1334 (export "test1334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1335 (export "test1335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1336 (export "test1336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1337 (export "test1337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1338 (export "test1338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1339 (export "test1339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1340 (export "test1340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1341 (export "test1341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1342 (export "test1342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1343 (export "test1343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1344 (export "test1344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1345 (export "test1345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1346 (export "test1346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1347 (export "test1347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1348 (export "test1348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1349 (export "test1349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1350 (export "test1350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1351 (export "test1351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1352 (export "test1352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1353 (export "test1353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1354 (export "test1354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1355 (export "test1355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1356 (export "test1356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1357 (export "test1357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1358 (export "test1358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1359 (export "test1359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1360 (export "test1360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1361 (export "test1361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1362 (export "test1362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1363 (export "test1363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1364 (export "test1364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1365 (export "test1365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1366 (export "test1366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1367 (export "test1367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1368 (export "test1368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1369 (export "test1369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1370 (export "test1370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1371 (export "test1371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1372 (export "test1372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1373 (export "test1373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1374 (export "test1374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1375 (export "test1375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1376 (export "test1376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1377 (export "test1377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1378 (export "test1378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1379 (export "test1379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1380 (export "test1380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1381 (export "test1381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1382 (export "test1382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1383 (export "test1383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1384 (export "test1384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1385 (export "test1385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1386 (export "test1386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1387 (export "test1387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1388 (export "test1388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1389 (export "test1389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1390 (export "test1390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1391 (export "test1391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1392 (export "test1392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1393 (export "test1393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1394 (export "test1394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1395 (export "test1395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1396 (export "test1396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1397 (export "test1397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1398 (export "test1398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1399 (export "test1399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1400 (export "test1400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1401 (export "test1401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1402 (export "test1402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1403 (export "test1403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1404 (export "test1404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1405 (export "test1405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1406 (export "test1406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1407 (export "test1407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1408 (export "test1408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1409 (export "test1409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1410 (export "test1410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1411 (export "test1411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1412 (export "test1412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1413 (export "test1413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1414 (export "test1414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1415 (export "test1415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1416 (export "test1416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1417 (export "test1417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1418 (export "test1418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1419 (export "test1419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1420 (export "test1420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1421 (export "test1421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1422 (export "test1422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1423 (export "test1423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1424 (export "test1424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1425 (export "test1425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1426 (export "test1426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1427 (export "test1427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1428 (export "test1428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1429 (export "test1429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1430 (export "test1430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1431 (export "test1431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1432 (export "test1432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1433 (export "test1433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1434 (export "test1434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1435 (export "test1435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1436 (export "test1436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1437 (export "test1437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1438 (export "test1438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1439 (export "test1439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1440 (export "test1440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1441 (export "test1441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1442 (export "test1442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1443 (export "test1443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1444 (export "test1444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1445 (export "test1445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1446 (export "test1446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1447 (export "test1447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1448 (export "test1448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1449 (export "test1449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1450 (export "test1450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1451 (export "test1451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1452 (export "test1452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1453 (export "test1453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1454 (export "test1454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1455 (export "test1455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1456 (export "test1456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1457 (export "test1457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1458 (export "test1458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1459 (export "test1459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1460 (export "test1460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1461 (export "test1461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1462 (export "test1462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1463 (export "test1463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1464 (export "test1464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1465 (export "test1465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1466 (export "test1466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1467 (export "test1467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1468 (export "test1468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1469 (export "test1469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1470 (export "test1470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1471 (export "test1471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1472 (export "test1472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1473 (export "test1473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1474 (export "test1474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1475 (export "test1475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1476 (export "test1476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1477 (export "test1477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1478 (export "test1478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1479 (export "test1479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1480 (export "test1480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1481 (export "test1481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1482 (export "test1482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1483 (export "test1483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1484 (export "test1484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1485 (export "test1485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1486 (export "test1486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1487 (export "test1487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1488 (export "test1488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1489 (export "test1489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1490 (export "test1490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1491 (export "test1491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1492 (export "test1492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1493 (export "test1493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1494 (export "test1494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1495 (export "test1495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1496 (export "test1496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1497 (export "test1497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1498 (export "test1498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1499 (export "test1499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1500 (export "test1500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1501 (export "test1501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1502 (export "test1502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1503 (export "test1503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1504 (export "test1504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1505 (export "test1505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1506 (export "test1506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1507 (export "test1507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1508 (export "test1508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1509 (export "test1509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1510 (export "test1510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1511 (export "test1511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1512 (export "test1512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1513 (export "test1513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1514 (export "test1514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1515 (export "test1515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1516 (export "test1516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1517 (export "test1517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1518 (export "test1518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1519 (export "test1519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1520 (export "test1520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1521 (export "test1521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1522 (export "test1522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1523 (export "test1523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1524 (export "test1524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1525 (export "test1525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1526 (export "test1526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1527 (export "test1527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1528 (export "test1528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1529 (export "test1529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1530 (export "test1530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1531 (export "test1531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1532 (export "test1532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1533 (export "test1533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1534 (export "test1534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1535 (export "test1535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1536 (export "test1536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1537 (export "test1537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1538 (export "test1538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1539 (export "test1539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1540 (export "test1540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1541 (export "test1541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1542 (export "test1542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1543 (export "test1543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1544 (export "test1544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1545 (export "test1545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1546 (export "test1546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1547 (export "test1547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1548 (export "test1548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1549 (export "test1549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1550 (export "test1550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1551 (export "test1551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1552 (export "test1552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1553 (export "test1553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1554 (export "test1554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1555 (export "test1555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1556 (export "test1556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1557 (export "test1557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1558 (export "test1558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1559 (export "test1559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1560 (export "test1560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1561 (export "test1561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1562 (export "test1562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1563 (export "test1563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1564 (export "test1564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1565 (export "test1565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1566 (export "test1566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1567 (export "test1567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1568 (export "test1568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1569 (export "test1569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1570 (export "test1570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1571 (export "test1571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1572 (export "test1572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1573 (export "test1573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1574 (export "test1574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1575 (export "test1575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1576 (export "test1576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1577 (export "test1577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1578 (export "test1578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1579 (export "test1579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1580 (export "test1580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1581 (export "test1581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1582 (export "test1582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1583 (export "test1583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1584 (export "test1584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1585 (export "test1585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1586 (export "test1586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1587 (export "test1587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1588 (export "test1588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1589 (export "test1589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1590 (export "test1590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1591 (export "test1591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1592 (export "test1592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1593 (export "test1593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1594 (export "test1594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1595 (export "test1595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1596 (export "test1596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1597 (export "test1597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1598 (export "test1598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1599 (export "test1599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1600 (export "test1600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1601 (export "test1601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1602 (export "test1602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1603 (export "test1603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1604 (export "test1604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1605 (export "test1605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1606 (export "test1606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1607 (export "test1607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1608 (export "test1608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1609 (export "test1609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1610 (export "test1610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1611 (export "test1611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1612 (export "test1612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1613 (export "test1613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1614 (export "test1614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1615 (export "test1615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1616 (export "test1616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1617 (export "test1617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1618 (export "test1618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1619 (export "test1619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1620 (export "test1620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1621 (export "test1621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1622 (export "test1622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1623 (export "test1623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1624 (export "test1624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1625 (export "test1625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1626 (export "test1626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1627 (export "test1627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1628 (export "test1628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1629 (export "test1629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1630 (export "test1630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1631 (export "test1631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1632 (export "test1632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1633 (export "test1633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1634 (export "test1634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1635 (export "test1635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1636 (export "test1636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1637 (export "test1637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1638 (export "test1638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1639 (export "test1639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1640 (export "test1640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1641 (export "test1641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1642 (export "test1642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1643 (export "test1643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1644 (export "test1644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1645 (export "test1645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1646 (export "test1646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1647 (export "test1647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1648 (export "test1648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1649 (export "test1649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1650 (export "test1650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1651 (export "test1651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1652 (export "test1652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1653 (export "test1653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1654 (export "test1654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1655 (export "test1655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1656 (export "test1656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1657 (export "test1657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1658 (export "test1658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1659 (export "test1659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1660 (export "test1660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1661 (export "test1661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1662 (export "test1662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1663 (export "test1663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1664 (export "test1664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1665 (export "test1665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1666 (export "test1666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1667 (export "test1667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1668 (export "test1668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1669 (export "test1669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1670 (export "test1670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1671 (export "test1671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1672 (export "test1672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1673 (export "test1673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1674 (export "test1674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1675 (export "test1675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1676 (export "test1676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1677 (export "test1677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1678 (export "test1678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1679 (export "test1679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1680 (export "test1680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1681 (export "test1681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1682 (export "test1682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1683 (export "test1683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1684 (export "test1684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1685 (export "test1685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1686 (export "test1686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1687 (export "test1687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1688 (export "test1688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1689 (export "test1689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1690 (export "test1690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1691 (export "test1691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1692 (export "test1692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1693 (export "test1693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1694 (export "test1694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1695 (export "test1695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1696 (export "test1696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1697 (export "test1697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1698 (export "test1698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1699 (export "test1699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1700 (export "test1700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1701 (export "test1701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1702 (export "test1702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1703 (export "test1703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1704 (export "test1704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1705 (export "test1705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1706 (export "test1706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1707 (export "test1707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1708 (export "test1708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1709 (export "test1709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1710 (export "test1710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1711 (export "test1711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1712 (export "test1712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1713 (export "test1713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1714 (export "test1714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1715 (export "test1715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1716 (export "test1716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1717 (export "test1717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1718 (export "test1718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1719 (export "test1719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1720 (export "test1720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1721 (export "test1721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1722 (export "test1722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1723 (export "test1723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1724 (export "test1724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1725 (export "test1725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1726 (export "test1726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1727 (export "test1727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1728 (export "test1728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1729 (export "test1729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1730 (export "test1730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1731 (export "test1731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1732 (export "test1732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1733 (export "test1733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1734 (export "test1734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1735 (export "test1735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1736 (export "test1736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1737 (export "test1737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1738 (export "test1738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1739 (export "test1739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1740 (export "test1740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1741 (export "test1741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1742 (export "test1742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1743 (export "test1743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1744 (export "test1744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1745 (export "test1745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1746 (export "test1746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1747 (export "test1747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1748 (export "test1748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1749 (export "test1749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1750 (export "test1750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1751 (export "test1751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1752 (export "test1752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1753 (export "test1753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1754 (export "test1754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1755 (export "test1755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1756 (export "test1756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1757 (export "test1757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1758 (export "test1758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1759 (export "test1759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1760 (export "test1760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1761 (export "test1761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1762 (export "test1762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1763 (export "test1763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1764 (export "test1764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1765 (export "test1765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1766 (export "test1766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1767 (export "test1767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1768 (export "test1768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1769 (export "test1769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1770 (export "test1770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1771 (export "test1771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1772 (export "test1772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1773 (export "test1773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1774 (export "test1774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1775 (export "test1775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1776 (export "test1776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1777 (export "test1777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1778 (export "test1778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1779 (export "test1779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1780 (export "test1780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1781 (export "test1781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1782 (export "test1782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1783 (export "test1783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1784 (export "test1784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1785 (export "test1785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1786 (export "test1786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1787 (export "test1787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1788 (export "test1788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1789 (export "test1789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1790 (export "test1790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1791 (export "test1791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1792 (export "test1792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1793 (export "test1793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1794 (export "test1794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1795 (export "test1795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1796 (export "test1796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1797 (export "test1797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1798 (export "test1798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1799 (export "test1799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1800 (export "test1800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1801 (export "test1801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1802 (export "test1802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1803 (export "test1803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1804 (export "test1804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1805 (export "test1805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1806 (export "test1806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1807 (export "test1807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1808 (export "test1808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1809 (export "test1809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1810 (export "test1810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1811 (export "test1811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1812 (export "test1812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1813 (export "test1813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1814 (export "test1814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1815 (export "test1815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1816 (export "test1816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1817 (export "test1817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1818 (export "test1818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1819 (export "test1819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1820 (export "test1820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1821 (export "test1821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1822 (export "test1822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1823 (export "test1823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1824 (export "test1824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1825 (export "test1825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1826 (export "test1826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1827 (export "test1827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1828 (export "test1828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1829 (export "test1829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1830 (export "test1830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1831 (export "test1831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1832 (export "test1832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1833 (export "test1833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1834 (export "test1834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1835 (export "test1835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1836 (export "test1836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1837 (export "test1837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1838 (export "test1838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1839 (export "test1839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1840 (export "test1840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1841 (export "test1841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1842 (export "test1842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1843 (export "test1843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1844 (export "test1844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1845 (export "test1845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1846 (export "test1846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1847 (export "test1847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1848 (export "test1848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1849 (export "test1849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1850 (export "test1850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1851 (export "test1851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1852 (export "test1852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1853 (export "test1853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1854 (export "test1854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1855 (export "test1855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1856 (export "test1856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1857 (export "test1857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1858 (export "test1858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1859 (export "test1859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1860 (export "test1860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1861 (export "test1861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1862 (export "test1862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1863 (export "test1863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1864 (export "test1864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1865 (export "test1865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1866 (export "test1866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1867 (export "test1867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1868 (export "test1868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1869 (export "test1869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1870 (export "test1870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1871 (export "test1871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1872 (export "test1872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1873 (export "test1873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1874 (export "test1874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1875 (export "test1875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1876 (export "test1876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1877 (export "test1877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1878 (export "test1878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1879 (export "test1879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1880 (export "test1880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1881 (export "test1881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1882 (export "test1882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1883 (export "test1883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1884 (export "test1884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1885 (export "test1885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1886 (export "test1886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1887 (export "test1887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1888 (export "test1888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1889 (export "test1889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1890 (export "test1890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1891 (export "test1891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1892 (export "test1892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1893 (export "test1893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1894 (export "test1894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1895 (export "test1895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1896 (export "test1896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1897 (export "test1897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1898 (export "test1898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1899 (export "test1899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1900 (export "test1900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1901 (export "test1901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1902 (export "test1902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1903 (export "test1903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1904 (export "test1904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1905 (export "test1905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1906 (export "test1906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1907 (export "test1907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1908 (export "test1908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1909 (export "test1909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1910 (export "test1910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1911 (export "test1911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1912 (export "test1912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1913 (export "test1913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1914 (export "test1914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1915 (export "test1915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1916 (export "test1916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1917 (export "test1917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1918 (export "test1918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1919 (export "test1919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1920 (export "test1920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1921 (export "test1921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1922 (export "test1922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1923 (export "test1923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1924 (export "test1924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1925 (export "test1925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1926 (export "test1926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1927 (export "test1927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1928 (export "test1928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1929 (export "test1929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1930 (export "test1930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1931 (export "test1931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1932 (export "test1932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1933 (export "test1933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1934 (export "test1934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1935 (export "test1935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1936 (export "test1936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1937 (export "test1937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1938 (export "test1938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1939 (export "test1939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1940 (export "test1940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1941 (export "test1941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1942 (export "test1942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1943 (export "test1943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1944 (export "test1944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1945 (export "test1945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1946 (export "test1946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1947 (export "test1947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1948 (export "test1948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1949 (export "test1949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1950 (export "test1950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1951 (export "test1951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1952 (export "test1952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1953 (export "test1953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1954 (export "test1954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1955 (export "test1955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1956 (export "test1956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1957 (export "test1957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1958 (export "test1958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1959 (export "test1959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1960 (export "test1960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1961 (export "test1961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1962 (export "test1962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1963 (export "test1963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1964 (export "test1964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1965 (export "test1965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1966 (export "test1966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1967 (export "test1967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1968 (export "test1968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1969 (export "test1969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1970 (export "test1970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1971 (export "test1971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1972 (export "test1972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1973 (export "test1973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1974 (export "test1974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1975 (export "test1975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1976 (export "test1976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1977 (export "test1977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1978 (export "test1978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1979 (export "test1979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1980 (export "test1980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1981 (export "test1981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1982 (export "test1982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1983 (export "test1983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1984 (export "test1984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1985 (export "test1985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1986 (export "test1986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1987 (export "test1987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1988 (export "test1988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1989 (export "test1989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1990 (export "test1990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1991 (export "test1991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1992 (export "test1992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1993 (export "test1993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1994 (export "test1994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1995 (export "test1995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1996 (export "test1996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1997 (export "test1997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1998 (export "test1998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1999 (export "test1999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2000 (export "test2000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2001 (export "test2001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2002 (export "test2002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2003 (export "test2003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2004 (export "test2004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2005 (export "test2005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2006 (export "test2006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2007 (export "test2007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2008 (export "test2008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2009 (export "test2009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2010 (export "test2010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2011 (export "test2011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2012 (export "test2012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2013 (export "test2013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2014 (export "test2014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2015 (export "test2015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2016 (export "test2016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2017 (export "test2017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2018 (export "test2018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2019 (export "test2019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2020 (export "test2020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2021 (export "test2021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2022 (export "test2022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2023 (export "test2023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2024 (export "test2024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2025 (export "test2025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2026 (export "test2026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2027 (export "test2027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2028 (export "test2028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2029 (export "test2029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2030 (export "test2030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2031 (export "test2031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2032 (export "test2032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2033 (export "test2033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2034 (export "test2034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2035 (export "test2035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2036 (export "test2036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2037 (export "test2037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2038 (export "test2038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2039 (export "test2039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2040 (export "test2040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2041 (export "test2041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2042 (export "test2042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2043 (export "test2043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2044 (export "test2044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2045 (export "test2045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2046 (export "test2046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2047 (export "test2047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2048 (export "test2048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2049 (export "test2049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2050 (export "test2050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2051 (export "test2051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2052 (export "test2052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2053 (export "test2053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2054 (export "test2054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2055 (export "test2055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2056 (export "test2056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2057 (export "test2057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2058 (export "test2058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2059 (export "test2059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2060 (export "test2060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2061 (export "test2061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2062 (export "test2062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2063 (export "test2063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2064 (export "test2064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2065 (export "test2065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2066 (export "test2066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2067 (export "test2067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2068 (export "test2068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2069 (export "test2069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2070 (export "test2070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2071 (export "test2071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2072 (export "test2072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2073 (export "test2073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2074 (export "test2074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2075 (export "test2075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2076 (export "test2076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2077 (export "test2077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2078 (export "test2078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2079 (export "test2079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2080 (export "test2080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2081 (export "test2081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2082 (export "test2082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2083 (export "test2083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2084 (export "test2084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2085 (export "test2085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2086 (export "test2086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2087 (export "test2087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2088 (export "test2088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2089 (export "test2089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2090 (export "test2090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2091 (export "test2091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2092 (export "test2092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2093 (export "test2093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2094 (export "test2094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2095 (export "test2095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2096 (export "test2096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2097 (export "test2097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2098 (export "test2098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2099 (export "test2099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2100 (export "test2100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2101 (export "test2101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2102 (export "test2102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2103 (export "test2103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2104 (export "test2104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2105 (export "test2105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2106 (export "test2106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2107 (export "test2107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2108 (export "test2108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2109 (export "test2109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2110 (export "test2110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2111 (export "test2111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2112 (export "test2112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2113 (export "test2113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2114 (export "test2114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2115 (export "test2115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2116 (export "test2116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2117 (export "test2117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2118 (export "test2118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2119 (export "test2119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2120 (export "test2120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2121 (export "test2121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2122 (export "test2122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2123 (export "test2123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2124 (export "test2124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2125 (export "test2125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2126 (export "test2126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2127 (export "test2127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2128 (export "test2128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2129 (export "test2129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2130 (export "test2130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2131 (export "test2131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2132 (export "test2132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2133 (export "test2133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2134 (export "test2134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2135 (export "test2135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2136 (export "test2136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2137 (export "test2137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2138 (export "test2138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2139 (export "test2139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2140 (export "test2140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2141 (export "test2141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2142 (export "test2142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2143 (export "test2143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2144 (export "test2144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2145 (export "test2145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2146 (export "test2146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2147 (export "test2147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2148 (export "test2148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2149 (export "test2149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2150 (export "test2150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2151 (export "test2151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2152 (export "test2152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2153 (export "test2153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2154 (export "test2154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2155 (export "test2155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2156 (export "test2156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2157 (export "test2157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2158 (export "test2158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2159 (export "test2159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2160 (export "test2160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2161 (export "test2161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2162 (export "test2162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2163 (export "test2163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2164 (export "test2164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2165 (export "test2165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2166 (export "test2166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2167 (export "test2167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2168 (export "test2168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2169 (export "test2169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2170 (export "test2170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2171 (export "test2171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2172 (export "test2172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2173 (export "test2173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2174 (export "test2174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2175 (export "test2175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2176 (export "test2176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2177 (export "test2177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2178 (export "test2178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2179 (export "test2179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2180 (export "test2180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2181 (export "test2181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2182 (export "test2182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2183 (export "test2183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2184 (export "test2184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2185 (export "test2185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2186 (export "test2186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2187 (export "test2187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2188 (export "test2188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2189 (export "test2189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2190 (export "test2190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2191 (export "test2191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2192 (export "test2192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2193 (export "test2193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2194 (export "test2194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2195 (export "test2195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2196 (export "test2196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2197 (export "test2197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2198 (export "test2198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2199 (export "test2199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2200 (export "test2200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2201 (export "test2201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2202 (export "test2202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2203 (export "test2203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2204 (export "test2204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2205 (export "test2205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2206 (export "test2206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2207 (export "test2207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2208 (export "test2208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2209 (export "test2209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2210 (export "test2210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2211 (export "test2211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2212 (export "test2212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2213 (export "test2213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2214 (export "test2214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2215 (export "test2215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2216 (export "test2216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2217 (export "test2217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2218 (export "test2218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2219 (export "test2219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2220 (export "test2220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2221 (export "test2221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2222 (export "test2222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2223 (export "test2223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2224 (export "test2224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2225 (export "test2225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2226 (export "test2226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2227 (export "test2227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2228 (export "test2228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2229 (export "test2229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2230 (export "test2230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2231 (export "test2231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2232 (export "test2232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2233 (export "test2233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2234 (export "test2234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2235 (export "test2235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2236 (export "test2236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2237 (export "test2237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2238 (export "test2238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2239 (export "test2239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2240 (export "test2240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2241 (export "test2241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2242 (export "test2242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2243 (export "test2243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2244 (export "test2244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2245 (export "test2245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2246 (export "test2246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2247 (export "test2247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2248 (export "test2248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2249 (export "test2249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2250 (export "test2250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2251 (export "test2251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2252 (export "test2252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2253 (export "test2253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2254 (export "test2254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2255 (export "test2255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2256 (export "test2256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2257 (export "test2257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2258 (export "test2258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2259 (export "test2259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2260 (export "test2260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2261 (export "test2261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2262 (export "test2262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2263 (export "test2263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2264 (export "test2264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2265 (export "test2265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2266 (export "test2266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2267 (export "test2267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2268 (export "test2268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2269 (export "test2269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2270 (export "test2270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2271 (export "test2271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2272 (export "test2272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2273 (export "test2273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2274 (export "test2274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2275 (export "test2275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2276 (export "test2276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2277 (export "test2277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2278 (export "test2278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2279 (export "test2279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2280 (export "test2280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2281 (export "test2281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2282 (export "test2282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2283 (export "test2283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2284 (export "test2284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2285 (export "test2285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2286 (export "test2286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2287 (export "test2287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2288 (export "test2288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2289 (export "test2289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2290 (export "test2290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2291 (export "test2291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2292 (export "test2292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2293 (export "test2293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2294 (export "test2294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2295 (export "test2295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2296 (export "test2296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2297 (export "test2297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2298 (export "test2298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2299 (export "test2299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2300 (export "test2300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2301 (export "test2301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2302 (export "test2302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2303 (export "test2303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2304 (export "test2304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2305 (export "test2305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2306 (export "test2306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2307 (export "test2307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2308 (export "test2308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2309 (export "test2309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2310 (export "test2310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2311 (export "test2311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2312 (export "test2312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2313 (export "test2313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2314 (export "test2314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2315 (export "test2315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2316 (export "test2316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2317 (export "test2317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2318 (export "test2318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2319 (export "test2319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2320 (export "test2320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2321 (export "test2321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2322 (export "test2322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2323 (export "test2323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2324 (export "test2324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2325 (export "test2325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2326 (export "test2326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2327 (export "test2327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2328 (export "test2328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2329 (export "test2329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2330 (export "test2330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2331 (export "test2331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2332 (export "test2332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2333 (export "test2333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2334 (export "test2334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2335 (export "test2335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2336 (export "test2336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2337 (export "test2337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2338 (export "test2338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2339 (export "test2339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2340 (export "test2340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2341 (export "test2341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2342 (export "test2342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2343 (export "test2343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2344 (export "test2344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2345 (export "test2345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2346 (export "test2346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2347 (export "test2347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2348 (export "test2348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2349 (export "test2349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2350 (export "test2350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2351 (export "test2351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2352 (export "test2352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2353 (export "test2353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2354 (export "test2354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2355 (export "test2355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2356 (export "test2356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2357 (export "test2357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2358 (export "test2358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2359 (export "test2359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2360 (export "test2360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2361 (export "test2361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2362 (export "test2362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2363 (export "test2363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2364 (export "test2364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2365 (export "test2365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2366 (export "test2366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2367 (export "test2367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2368 (export "test2368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2369 (export "test2369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2370 (export "test2370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2371 (export "test2371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2372 (export "test2372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2373 (export "test2373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2374 (export "test2374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2375 (export "test2375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2376 (export "test2376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2377 (export "test2377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2378 (export "test2378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2379 (export "test2379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2380 (export "test2380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2381 (export "test2381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2382 (export "test2382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2383 (export "test2383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2384 (export "test2384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2385 (export "test2385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2386 (export "test2386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2387 (export "test2387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2388 (export "test2388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2389 (export "test2389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2390 (export "test2390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2391 (export "test2391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2392 (export "test2392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2393 (export "test2393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2394 (export "test2394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2395 (export "test2395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2396 (export "test2396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2397 (export "test2397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2398 (export "test2398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2399 (export "test2399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2400 (export "test2400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2401 (export "test2401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2402 (export "test2402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2403 (export "test2403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2404 (export "test2404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2405 (export "test2405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2406 (export "test2406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2407 (export "test2407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2408 (export "test2408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2409 (export "test2409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2410 (export "test2410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2411 (export "test2411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2412 (export "test2412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2413 (export "test2413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2414 (export "test2414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2415 (export "test2415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2416 (export "test2416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2417 (export "test2417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2418 (export "test2418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2419 (export "test2419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2420 (export "test2420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2421 (export "test2421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2422 (export "test2422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2423 (export "test2423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2424 (export "test2424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2425 (export "test2425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2426 (export "test2426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2427 (export "test2427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2428 (export "test2428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2429 (export "test2429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2430 (export "test2430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2431 (export "test2431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2432 (export "test2432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2433 (export "test2433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2434 (export "test2434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2435 (export "test2435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2436 (export "test2436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2437 (export "test2437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2438 (export "test2438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2439 (export "test2439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2440 (export "test2440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2441 (export "test2441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2442 (export "test2442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2443 (export "test2443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2444 (export "test2444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2445 (export "test2445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2446 (export "test2446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2447 (export "test2447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2448 (export "test2448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2449 (export "test2449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2450 (export "test2450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2451 (export "test2451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2452 (export "test2452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2453 (export "test2453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2454 (export "test2454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2455 (export "test2455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2456 (export "test2456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2457 (export "test2457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2458 (export "test2458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2459 (export "test2459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2460 (export "test2460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2461 (export "test2461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2462 (export "test2462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2463 (export "test2463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2464 (export "test2464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2465 (export "test2465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2466 (export "test2466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2467 (export "test2467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2468 (export "test2468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2469 (export "test2469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2470 (export "test2470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2471 (export "test2471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2472 (export "test2472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2473 (export "test2473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2474 (export "test2474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2475 (export "test2475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2476 (export "test2476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2477 (export "test2477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2478 (export "test2478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2479 (export "test2479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2480 (export "test2480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2481 (export "test2481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2482 (export "test2482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2483 (export "test2483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2484 (export "test2484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2485 (export "test2485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2486 (export "test2486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2487 (export "test2487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2488 (export "test2488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2489 (export "test2489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2490 (export "test2490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2491 (export "test2491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2492 (export "test2492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2493 (export "test2493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2494 (export "test2494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2495 (export "test2495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2496 (export "test2496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2497 (export "test2497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2498 (export "test2498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2499 (export "test2499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2500 (export "test2500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2501 (export "test2501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2502 (export "test2502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2503 (export "test2503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2504 (export "test2504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2505 (export "test2505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2506 (export "test2506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2507 (export "test2507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2508 (export "test2508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2509 (export "test2509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2510 (export "test2510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2511 (export "test2511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2512 (export "test2512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2513 (export "test2513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2514 (export "test2514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2515 (export "test2515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2516 (export "test2516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2517 (export "test2517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2518 (export "test2518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2519 (export "test2519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2520 (export "test2520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2521 (export "test2521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2522 (export "test2522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2523 (export "test2523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2524 (export "test2524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2525 (export "test2525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2526 (export "test2526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2527 (export "test2527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2528 (export "test2528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2529 (export "test2529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2530 (export "test2530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2531 (export "test2531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2532 (export "test2532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2533 (export "test2533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2534 (export "test2534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2535 (export "test2535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2536 (export "test2536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2537 (export "test2537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2538 (export "test2538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2539 (export "test2539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2540 (export "test2540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2541 (export "test2541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2542 (export "test2542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2543 (export "test2543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2544 (export "test2544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2545 (export "test2545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2546 (export "test2546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2547 (export "test2547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2548 (export "test2548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2549 (export "test2549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2550 (export "test2550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2551 (export "test2551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2552 (export "test2552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2553 (export "test2553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2554 (export "test2554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2555 (export "test2555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2556 (export "test2556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2557 (export "test2557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2558 (export "test2558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2559 (export "test2559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2560 (export "test2560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2561 (export "test2561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2562 (export "test2562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2563 (export "test2563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2564 (export "test2564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2565 (export "test2565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2566 (export "test2566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2567 (export "test2567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2568 (export "test2568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2569 (export "test2569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2570 (export "test2570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2571 (export "test2571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2572 (export "test2572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2573 (export "test2573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2574 (export "test2574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2575 (export "test2575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2576 (export "test2576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2577 (export "test2577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2578 (export "test2578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2579 (export "test2579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2580 (export "test2580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2581 (export "test2581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2582 (export "test2582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2583 (export "test2583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2584 (export "test2584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2585 (export "test2585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2586 (export "test2586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2587 (export "test2587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2588 (export "test2588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2589 (export "test2589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2590 (export "test2590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2591 (export "test2591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2592 (export "test2592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2593 (export "test2593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2594 (export "test2594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2595 (export "test2595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2596 (export "test2596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2597 (export "test2597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2598 (export "test2598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2599 (export "test2599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2600 (export "test2600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2601 (export "test2601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2602 (export "test2602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2603 (export "test2603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2604 (export "test2604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2605 (export "test2605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2606 (export "test2606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2607 (export "test2607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2608 (export "test2608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2609 (export "test2609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2610 (export "test2610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2611 (export "test2611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2612 (export "test2612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2613 (export "test2613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2614 (export "test2614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2615 (export "test2615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2616 (export "test2616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2617 (export "test2617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2618 (export "test2618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2619 (export "test2619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2620 (export "test2620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2621 (export "test2621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2622 (export "test2622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2623 (export "test2623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2624 (export "test2624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2625 (export "test2625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2626 (export "test2626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2627 (export "test2627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2628 (export "test2628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2629 (export "test2629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2630 (export "test2630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2631 (export "test2631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2632 (export "test2632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2633 (export "test2633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2634 (export "test2634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2635 (export "test2635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2636 (export "test2636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2637 (export "test2637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2638 (export "test2638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2639 (export "test2639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2640 (export "test2640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2641 (export "test2641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2642 (export "test2642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2643 (export "test2643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2644 (export "test2644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2645 (export "test2645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2646 (export "test2646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2647 (export "test2647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2648 (export "test2648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2649 (export "test2649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2650 (export "test2650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2651 (export "test2651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2652 (export "test2652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2653 (export "test2653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2654 (export "test2654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2655 (export "test2655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2656 (export "test2656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2657 (export "test2657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2658 (export "test2658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2659 (export "test2659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2660 (export "test2660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2661 (export "test2661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2662 (export "test2662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2663 (export "test2663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2664 (export "test2664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2665 (export "test2665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2666 (export "test2666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2667 (export "test2667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2668 (export "test2668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2669 (export "test2669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2670 (export "test2670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2671 (export "test2671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2672 (export "test2672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2673 (export "test2673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2674 (export "test2674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2675 (export "test2675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2676 (export "test2676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2677 (export "test2677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2678 (export "test2678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2679 (export "test2679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2680 (export "test2680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2681 (export "test2681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2682 (export "test2682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2683 (export "test2683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2684 (export "test2684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2685 (export "test2685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2686 (export "test2686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2687 (export "test2687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2688 (export "test2688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2689 (export "test2689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2690 (export "test2690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2691 (export "test2691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2692 (export "test2692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2693 (export "test2693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2694 (export "test2694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2695 (export "test2695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2696 (export "test2696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2697 (export "test2697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2698 (export "test2698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2699 (export "test2699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2700 (export "test2700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2701 (export "test2701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2702 (export "test2702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2703 (export "test2703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2704 (export "test2704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2705 (export "test2705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2706 (export "test2706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2707 (export "test2707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2708 (export "test2708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2709 (export "test2709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2710 (export "test2710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2711 (export "test2711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2712 (export "test2712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2713 (export "test2713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2714 (export "test2714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2715 (export "test2715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2716 (export "test2716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2717 (export "test2717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2718 (export "test2718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2719 (export "test2719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2720 (export "test2720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2721 (export "test2721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2722 (export "test2722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2723 (export "test2723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2724 (export "test2724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2725 (export "test2725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2726 (export "test2726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2727 (export "test2727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2728 (export "test2728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2729 (export "test2729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2730 (export "test2730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2731 (export "test2731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2732 (export "test2732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2733 (export "test2733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2734 (export "test2734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2735 (export "test2735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2736 (export "test2736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2737 (export "test2737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2738 (export "test2738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2739 (export "test2739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2740 (export "test2740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2741 (export "test2741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2742 (export "test2742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2743 (export "test2743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2744 (export "test2744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2745 (export "test2745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2746 (export "test2746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2747 (export "test2747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2748 (export "test2748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2749 (export "test2749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2750 (export "test2750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2751 (export "test2751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2752 (export "test2752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2753 (export "test2753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2754 (export "test2754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2755 (export "test2755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2756 (export "test2756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2757 (export "test2757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2758 (export "test2758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2759 (export "test2759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2760 (export "test2760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2761 (export "test2761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2762 (export "test2762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2763 (export "test2763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2764 (export "test2764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2765 (export "test2765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2766 (export "test2766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2767 (export "test2767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2768 (export "test2768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2769 (export "test2769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2770 (export "test2770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2771 (export "test2771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2772 (export "test2772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2773 (export "test2773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2774 (export "test2774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2775 (export "test2775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2776 (export "test2776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2777 (export "test2777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2778 (export "test2778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2779 (export "test2779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2780 (export "test2780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2781 (export "test2781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2782 (export "test2782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2783 (export "test2783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2784 (export "test2784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2785 (export "test2785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2786 (export "test2786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2787 (export "test2787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2788 (export "test2788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2789 (export "test2789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2790 (export "test2790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2791 (export "test2791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2792 (export "test2792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2793 (export "test2793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2794 (export "test2794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2795 (export "test2795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2796 (export "test2796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2797 (export "test2797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2798 (export "test2798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2799 (export "test2799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2800 (export "test2800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2801 (export "test2801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2802 (export "test2802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2803 (export "test2803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2804 (export "test2804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2805 (export "test2805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2806 (export "test2806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2807 (export "test2807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2808 (export "test2808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2809 (export "test2809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2810 (export "test2810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2811 (export "test2811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2812 (export "test2812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2813 (export "test2813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2814 (export "test2814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2815 (export "test2815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2816 (export "test2816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2817 (export "test2817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2818 (export "test2818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2819 (export "test2819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2820 (export "test2820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2821 (export "test2821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2822 (export "test2822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2823 (export "test2823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2824 (export "test2824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2825 (export "test2825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2826 (export "test2826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2827 (export "test2827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2828 (export "test2828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2829 (export "test2829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2830 (export "test2830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2831 (export "test2831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2832 (export "test2832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2833 (export "test2833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2834 (export "test2834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2835 (export "test2835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2836 (export "test2836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2837 (export "test2837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2838 (export "test2838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2839 (export "test2839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2840 (export "test2840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2841 (export "test2841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2842 (export "test2842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2843 (export "test2843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2844 (export "test2844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2845 (export "test2845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2846 (export "test2846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2847 (export "test2847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2848 (export "test2848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2849 (export "test2849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2850 (export "test2850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2851 (export "test2851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2852 (export "test2852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2853 (export "test2853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2854 (export "test2854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2855 (export "test2855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2856 (export "test2856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2857 (export "test2857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2858 (export "test2858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2859 (export "test2859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2860 (export "test2860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2861 (export "test2861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2862 (export "test2862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2863 (export "test2863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2864 (export "test2864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2865 (export "test2865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2866 (export "test2866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2867 (export "test2867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2868 (export "test2868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2869 (export "test2869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2870 (export "test2870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2871 (export "test2871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2872 (export "test2872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2873 (export "test2873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2874 (export "test2874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2875 (export "test2875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2876 (export "test2876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2877 (export "test2877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2878 (export "test2878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2879 (export "test2879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2880 (export "test2880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2881 (export "test2881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2882 (export "test2882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2883 (export "test2883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2884 (export "test2884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2885 (export "test2885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2886 (export "test2886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2887 (export "test2887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2888 (export "test2888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2889 (export "test2889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2890 (export "test2890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2891 (export "test2891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2892 (export "test2892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2893 (export "test2893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2894 (export "test2894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2895 (export "test2895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2896 (export "test2896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2897 (export "test2897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2898 (export "test2898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2899 (export "test2899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2900 (export "test2900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2901 (export "test2901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2902 (export "test2902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2903 (export "test2903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2904 (export "test2904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2905 (export "test2905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2906 (export "test2906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2907 (export "test2907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2908 (export "test2908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2909 (export "test2909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2910 (export "test2910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2911 (export "test2911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2912 (export "test2912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2913 (export "test2913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2914 (export "test2914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2915 (export "test2915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2916 (export "test2916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2917 (export "test2917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2918 (export "test2918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2919 (export "test2919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2920 (export "test2920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2921 (export "test2921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2922 (export "test2922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2923 (export "test2923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2924 (export "test2924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2925 (export "test2925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2926 (export "test2926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2927 (export "test2927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2928 (export "test2928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2929 (export "test2929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2930 (export "test2930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2931 (export "test2931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2932 (export "test2932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2933 (export "test2933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2934 (export "test2934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2935 (export "test2935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2936 (export "test2936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2937 (export "test2937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2938 (export "test2938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2939 (export "test2939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2940 (export "test2940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2941 (export "test2941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2942 (export "test2942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2943 (export "test2943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2944 (export "test2944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2945 (export "test2945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2946 (export "test2946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2947 (export "test2947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2948 (export "test2948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2949 (export "test2949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2950 (export "test2950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2951 (export "test2951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2952 (export "test2952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2953 (export "test2953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2954 (export "test2954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2955 (export "test2955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2956 (export "test2956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2957 (export "test2957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2958 (export "test2958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2959 (export "test2959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2960 (export "test2960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2961 (export "test2961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2962 (export "test2962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2963 (export "test2963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2964 (export "test2964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2965 (export "test2965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2966 (export "test2966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2967 (export "test2967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2968 (export "test2968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2969 (export "test2969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2970 (export "test2970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2971 (export "test2971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2972 (export "test2972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2973 (export "test2973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2974 (export "test2974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2975 (export "test2975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2976 (export "test2976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2977 (export "test2977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2978 (export "test2978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2979 (export "test2979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2980 (export "test2980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2981 (export "test2981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2982 (export "test2982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2983 (export "test2983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2984 (export "test2984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2985 (export "test2985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2986 (export "test2986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2987 (export "test2987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2988 (export "test2988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2989 (export "test2989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2990 (export "test2990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2991 (export "test2991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2992 (export "test2992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2993 (export "test2993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2994 (export "test2994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2995 (export "test2995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2996 (export "test2996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2997 (export "test2997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2998 (export "test2998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2999 (export "test2999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3000 (export "test3000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3001 (export "test3001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3002 (export "test3002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3003 (export "test3003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3004 (export "test3004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3005 (export "test3005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3006 (export "test3006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3007 (export "test3007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3008 (export "test3008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3009 (export "test3009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3010 (export "test3010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3011 (export "test3011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3012 (export "test3012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3013 (export "test3013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3014 (export "test3014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3015 (export "test3015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3016 (export "test3016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3017 (export "test3017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3018 (export "test3018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3019 (export "test3019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3020 (export "test3020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3021 (export "test3021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3022 (export "test3022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3023 (export "test3023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3024 (export "test3024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3025 (export "test3025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3026 (export "test3026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3027 (export "test3027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3028 (export "test3028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3029 (export "test3029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3030 (export "test3030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3031 (export "test3031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3032 (export "test3032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3033 (export "test3033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3034 (export "test3034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3035 (export "test3035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3036 (export "test3036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3037 (export "test3037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3038 (export "test3038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3039 (export "test3039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3040 (export "test3040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3041 (export "test3041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3042 (export "test3042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3043 (export "test3043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3044 (export "test3044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3045 (export "test3045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3046 (export "test3046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3047 (export "test3047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3048 (export "test3048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3049 (export "test3049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3050 (export "test3050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3051 (export "test3051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3052 (export "test3052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3053 (export "test3053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3054 (export "test3054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3055 (export "test3055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3056 (export "test3056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3057 (export "test3057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3058 (export "test3058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3059 (export "test3059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3060 (export "test3060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3061 (export "test3061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3062 (export "test3062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3063 (export "test3063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3064 (export "test3064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3065 (export "test3065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3066 (export "test3066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3067 (export "test3067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3068 (export "test3068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3069 (export "test3069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3070 (export "test3070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3071 (export "test3071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3072 (export "test3072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3073 (export "test3073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3074 (export "test3074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3075 (export "test3075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3076 (export "test3076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3077 (export "test3077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3078 (export "test3078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3079 (export "test3079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3080 (export "test3080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3081 (export "test3081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3082 (export "test3082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3083 (export "test3083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3084 (export "test3084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3085 (export "test3085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3086 (export "test3086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3087 (export "test3087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3088 (export "test3088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3089 (export "test3089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3090 (export "test3090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3091 (export "test3091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3092 (export "test3092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3093 (export "test3093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3094 (export "test3094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3095 (export "test3095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3096 (export "test3096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3097 (export "test3097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3098 (export "test3098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3099 (export "test3099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3100 (export "test3100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3101 (export "test3101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3102 (export "test3102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3103 (export "test3103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3104 (export "test3104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3105 (export "test3105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3106 (export "test3106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3107 (export "test3107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3108 (export "test3108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3109 (export "test3109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3110 (export "test3110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3111 (export "test3111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3112 (export "test3112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3113 (export "test3113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3114 (export "test3114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3115 (export "test3115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3116 (export "test3116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3117 (export "test3117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3118 (export "test3118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3119 (export "test3119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3120 (export "test3120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3121 (export "test3121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3122 (export "test3122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3123 (export "test3123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3124 (export "test3124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3125 (export "test3125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3126 (export "test3126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3127 (export "test3127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3128 (export "test3128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3129 (export "test3129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3130 (export "test3130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3131 (export "test3131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3132 (export "test3132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3133 (export "test3133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3134 (export "test3134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3135 (export "test3135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3136 (export "test3136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3137 (export "test3137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3138 (export "test3138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3139 (export "test3139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3140 (export "test3140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3141 (export "test3141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3142 (export "test3142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3143 (export "test3143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3144 (export "test3144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3145 (export "test3145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3146 (export "test3146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3147 (export "test3147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3148 (export "test3148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3149 (export "test3149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3150 (export "test3150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3151 (export "test3151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3152 (export "test3152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3153 (export "test3153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3154 (export "test3154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3155 (export "test3155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3156 (export "test3156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3157 (export "test3157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3158 (export "test3158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3159 (export "test3159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3160 (export "test3160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3161 (export "test3161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3162 (export "test3162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3163 (export "test3163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3164 (export "test3164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3165 (export "test3165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3166 (export "test3166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3167 (export "test3167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3168 (export "test3168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3169 (export "test3169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3170 (export "test3170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3171 (export "test3171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3172 (export "test3172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3173 (export "test3173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3174 (export "test3174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3175 (export "test3175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3176 (export "test3176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3177 (export "test3177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3178 (export "test3178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3179 (export "test3179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3180 (export "test3180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3181 (export "test3181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3182 (export "test3182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3183 (export "test3183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3184 (export "test3184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3185 (export "test3185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3186 (export "test3186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3187 (export "test3187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3188 (export "test3188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3189 (export "test3189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3190 (export "test3190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3191 (export "test3191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3192 (export "test3192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3193 (export "test3193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3194 (export "test3194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3195 (export "test3195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3196 (export "test3196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3197 (export "test3197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3198 (export "test3198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3199 (export "test3199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3200 (export "test3200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3201 (export "test3201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3202 (export "test3202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3203 (export "test3203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3204 (export "test3204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3205 (export "test3205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3206 (export "test3206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3207 (export "test3207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3208 (export "test3208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3209 (export "test3209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3210 (export "test3210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3211 (export "test3211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3212 (export "test3212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3213 (export "test3213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3214 (export "test3214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3215 (export "test3215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3216 (export "test3216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3217 (export "test3217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3218 (export "test3218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3219 (export "test3219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3220 (export "test3220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3221 (export "test3221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3222 (export "test3222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3223 (export "test3223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3224 (export "test3224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3225 (export "test3225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3226 (export "test3226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3227 (export "test3227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3228 (export "test3228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3229 (export "test3229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3230 (export "test3230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3231 (export "test3231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3232 (export "test3232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3233 (export "test3233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3234 (export "test3234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3235 (export "test3235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3236 (export "test3236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3237 (export "test3237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3238 (export "test3238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3239 (export "test3239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3240 (export "test3240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3241 (export "test3241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3242 (export "test3242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3243 (export "test3243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3244 (export "test3244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3245 (export "test3245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3246 (export "test3246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3247 (export "test3247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3248 (export "test3248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3249 (export "test3249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3250 (export "test3250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3251 (export "test3251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3252 (export "test3252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3253 (export "test3253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3254 (export "test3254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3255 (export "test3255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3256 (export "test3256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3257 (export "test3257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3258 (export "test3258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3259 (export "test3259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3260 (export "test3260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3261 (export "test3261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3262 (export "test3262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3263 (export "test3263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3264 (export "test3264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3265 (export "test3265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3266 (export "test3266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3267 (export "test3267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3268 (export "test3268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3269 (export "test3269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3270 (export "test3270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3271 (export "test3271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3272 (export "test3272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3273 (export "test3273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3274 (export "test3274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3275 (export "test3275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3276 (export "test3276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3277 (export "test3277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3278 (export "test3278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3279 (export "test3279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3280 (export "test3280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3281 (export "test3281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3282 (export "test3282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3283 (export "test3283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3284 (export "test3284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3285 (export "test3285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3286 (export "test3286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3287 (export "test3287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3288 (export "test3288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3289 (export "test3289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3290 (export "test3290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3291 (export "test3291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3292 (export "test3292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3293 (export "test3293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3294 (export "test3294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3295 (export "test3295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3296 (export "test3296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3297 (export "test3297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3298 (export "test3298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3299 (export "test3299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3300 (export "test3300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3301 (export "test3301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3302 (export "test3302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3303 (export "test3303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3304 (export "test3304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3305 (export "test3305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3306 (export "test3306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3307 (export "test3307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3308 (export "test3308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3309 (export "test3309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3310 (export "test3310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3311 (export "test3311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3312 (export "test3312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3313 (export "test3313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3314 (export "test3314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3315 (export "test3315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3316 (export "test3316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3317 (export "test3317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3318 (export "test3318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3319 (export "test3319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3320 (export "test3320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3321 (export "test3321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3322 (export "test3322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3323 (export "test3323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3324 (export "test3324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3325 (export "test3325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3326 (export "test3326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3327 (export "test3327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3328 (export "test3328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3329 (export "test3329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3330 (export "test3330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3331 (export "test3331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3332 (export "test3332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3333 (export "test3333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3334 (export "test3334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3335 (export "test3335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3336 (export "test3336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3337 (export "test3337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3338 (export "test3338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3339 (export "test3339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3340 (export "test3340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3341 (export "test3341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3342 (export "test3342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3343 (export "test3343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3344 (export "test3344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3345 (export "test3345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3346 (export "test3346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3347 (export "test3347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3348 (export "test3348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3349 (export "test3349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3350 (export "test3350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3351 (export "test3351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3352 (export "test3352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3353 (export "test3353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3354 (export "test3354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3355 (export "test3355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3356 (export "test3356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3357 (export "test3357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3358 (export "test3358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3359 (export "test3359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3360 (export "test3360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3361 (export "test3361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3362 (export "test3362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3363 (export "test3363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3364 (export "test3364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3365 (export "test3365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3366 (export "test3366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3367 (export "test3367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3368 (export "test3368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3369 (export "test3369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3370 (export "test3370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3371 (export "test3371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3372 (export "test3372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3373 (export "test3373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3374 (export "test3374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3375 (export "test3375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3376 (export "test3376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3377 (export "test3377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3378 (export "test3378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3379 (export "test3379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3380 (export "test3380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3381 (export "test3381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3382 (export "test3382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3383 (export "test3383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3384 (export "test3384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3385 (export "test3385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3386 (export "test3386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3387 (export "test3387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3388 (export "test3388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3389 (export "test3389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3390 (export "test3390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3391 (export "test3391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3392 (export "test3392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3393 (export "test3393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3394 (export "test3394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3395 (export "test3395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3396 (export "test3396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3397 (export "test3397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3398 (export "test3398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3399 (export "test3399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3400 (export "test3400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3401 (export "test3401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3402 (export "test3402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3403 (export "test3403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3404 (export "test3404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3405 (export "test3405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3406 (export "test3406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3407 (export "test3407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3408 (export "test3408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3409 (export "test3409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3410 (export "test3410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3411 (export "test3411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3412 (export "test3412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3413 (export "test3413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3414 (export "test3414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3415 (export "test3415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3416 (export "test3416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3417 (export "test3417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3418 (export "test3418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3419 (export "test3419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3420 (export "test3420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3421 (export "test3421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3422 (export "test3422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3423 (export "test3423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3424 (export "test3424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3425 (export "test3425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3426 (export "test3426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3427 (export "test3427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3428 (export "test3428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3429 (export "test3429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3430 (export "test3430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3431 (export "test3431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3432 (export "test3432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3433 (export "test3433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3434 (export "test3434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3435 (export "test3435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3436 (export "test3436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3437 (export "test3437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3438 (export "test3438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3439 (export "test3439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3440 (export "test3440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3441 (export "test3441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3442 (export "test3442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3443 (export "test3443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3444 (export "test3444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3445 (export "test3445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3446 (export "test3446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3447 (export "test3447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3448 (export "test3448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3449 (export "test3449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3450 (export "test3450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3451 (export "test3451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3452 (export "test3452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3453 (export "test3453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3454 (export "test3454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3455 (export "test3455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3456 (export "test3456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3457 (export "test3457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3458 (export "test3458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3459 (export "test3459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3460 (export "test3460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3461 (export "test3461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3462 (export "test3462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3463 (export "test3463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3464 (export "test3464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3465 (export "test3465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3466 (export "test3466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3467 (export "test3467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3468 (export "test3468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3469 (export "test3469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3470 (export "test3470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3471 (export "test3471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3472 (export "test3472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3473 (export "test3473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3474 (export "test3474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3475 (export "test3475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3476 (export "test3476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3477 (export "test3477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3478 (export "test3478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3479 (export "test3479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3480 (export "test3480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3481 (export "test3481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3482 (export "test3482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3483 (export "test3483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3484 (export "test3484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3485 (export "test3485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3486 (export "test3486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3487 (export "test3487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3488 (export "test3488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3489 (export "test3489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3490 (export "test3490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3491 (export "test3491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3492 (export "test3492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3493 (export "test3493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3494 (export "test3494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3495 (export "test3495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3496 (export "test3496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3497 (export "test3497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3498 (export "test3498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3499 (export "test3499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3500 (export "test3500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3501 (export "test3501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3502 (export "test3502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3503 (export "test3503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3504 (export "test3504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3505 (export "test3505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3506 (export "test3506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3507 (export "test3507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3508 (export "test3508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3509 (export "test3509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3510 (export "test3510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3511 (export "test3511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3512 (export "test3512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3513 (export "test3513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3514 (export "test3514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3515 (export "test3515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3516 (export "test3516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3517 (export "test3517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3518 (export "test3518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3519 (export "test3519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3520 (export "test3520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3521 (export "test3521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3522 (export "test3522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3523 (export "test3523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3524 (export "test3524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3525 (export "test3525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3526 (export "test3526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3527 (export "test3527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3528 (export "test3528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3529 (export "test3529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3530 (export "test3530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3531 (export "test3531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3532 (export "test3532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3533 (export "test3533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3534 (export "test3534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3535 (export "test3535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3536 (export "test3536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3537 (export "test3537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3538 (export "test3538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3539 (export "test3539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3540 (export "test3540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3541 (export "test3541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3542 (export "test3542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3543 (export "test3543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3544 (export "test3544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3545 (export "test3545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3546 (export "test3546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3547 (export "test3547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3548 (export "test3548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3549 (export "test3549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3550 (export "test3550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3551 (export "test3551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3552 (export "test3552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3553 (export "test3553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3554 (export "test3554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3555 (export "test3555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3556 (export "test3556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3557 (export "test3557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3558 (export "test3558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3559 (export "test3559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3560 (export "test3560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3561 (export "test3561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3562 (export "test3562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3563 (export "test3563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3564 (export "test3564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3565 (export "test3565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3566 (export "test3566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3567 (export "test3567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3568 (export "test3568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3569 (export "test3569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3570 (export "test3570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3571 (export "test3571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3572 (export "test3572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3573 (export "test3573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3574 (export "test3574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3575 (export "test3575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3576 (export "test3576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3577 (export "test3577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3578 (export "test3578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3579 (export "test3579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3580 (export "test3580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3581 (export "test3581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3582 (export "test3582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3583 (export "test3583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3584 (export "test3584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3585 (export "test3585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3586 (export "test3586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3587 (export "test3587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3588 (export "test3588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3589 (export "test3589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3590 (export "test3590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3591 (export "test3591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3592 (export "test3592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3593 (export "test3593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3594 (export "test3594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3595 (export "test3595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3596 (export "test3596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3597 (export "test3597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3598 (export "test3598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3599 (export "test3599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3600 (export "test3600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3601 (export "test3601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3602 (export "test3602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3603 (export "test3603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3604 (export "test3604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3605 (export "test3605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3606 (export "test3606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3607 (export "test3607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3608 (export "test3608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3609 (export "test3609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3610 (export "test3610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3611 (export "test3611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3612 (export "test3612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3613 (export "test3613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3614 (export "test3614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3615 (export "test3615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3616 (export "test3616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3617 (export "test3617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3618 (export "test3618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3619 (export "test3619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3620 (export "test3620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3621 (export "test3621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3622 (export "test3622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3623 (export "test3623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3624 (export "test3624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3625 (export "test3625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3626 (export "test3626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3627 (export "test3627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3628 (export "test3628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3629 (export "test3629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3630 (export "test3630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3631 (export "test3631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3632 (export "test3632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3633 (export "test3633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3634 (export "test3634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3635 (export "test3635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3636 (export "test3636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3637 (export "test3637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3638 (export "test3638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3639 (export "test3639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3640 (export "test3640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3641 (export "test3641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3642 (export "test3642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3643 (export "test3643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3644 (export "test3644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3645 (export "test3645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3646 (export "test3646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3647 (export "test3647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3648 (export "test3648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3649 (export "test3649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3650 (export "test3650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3651 (export "test3651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3652 (export "test3652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3653 (export "test3653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3654 (export "test3654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3655 (export "test3655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3656 (export "test3656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3657 (export "test3657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3658 (export "test3658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3659 (export "test3659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3660 (export "test3660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3661 (export "test3661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3662 (export "test3662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3663 (export "test3663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3664 (export "test3664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3665 (export "test3665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3666 (export "test3666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3667 (export "test3667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3668 (export "test3668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3669 (export "test3669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3670 (export "test3670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3671 (export "test3671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3672 (export "test3672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3673 (export "test3673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3674 (export "test3674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3675 (export "test3675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3676 (export "test3676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3677 (export "test3677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3678 (export "test3678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3679 (export "test3679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3680 (export "test3680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3681 (export "test3681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3682 (export "test3682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3683 (export "test3683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3684 (export "test3684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3685 (export "test3685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3686 (export "test3686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3687 (export "test3687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3688 (export "test3688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3689 (export "test3689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3690 (export "test3690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3691 (export "test3691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3692 (export "test3692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3693 (export "test3693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3694 (export "test3694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3695 (export "test3695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3696 (export "test3696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3697 (export "test3697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3698 (export "test3698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3699 (export "test3699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3700 (export "test3700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3701 (export "test3701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3702 (export "test3702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3703 (export "test3703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3704 (export "test3704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3705 (export "test3705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3706 (export "test3706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3707 (export "test3707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3708 (export "test3708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3709 (export "test3709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3710 (export "test3710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3711 (export "test3711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3712 (export "test3712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3713 (export "test3713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3714 (export "test3714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3715 (export "test3715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3716 (export "test3716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3717 (export "test3717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3718 (export "test3718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3719 (export "test3719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3720 (export "test3720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3721 (export "test3721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3722 (export "test3722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3723 (export "test3723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3724 (export "test3724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3725 (export "test3725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3726 (export "test3726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3727 (export "test3727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3728 (export "test3728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3729 (export "test3729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3730 (export "test3730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3731 (export "test3731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3732 (export "test3732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3733 (export "test3733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3734 (export "test3734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3735 (export "test3735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3736 (export "test3736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3737 (export "test3737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3738 (export "test3738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3739 (export "test3739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3740 (export "test3740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3741 (export "test3741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3742 (export "test3742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3743 (export "test3743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3744 (export "test3744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3745 (export "test3745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3746 (export "test3746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3747 (export "test3747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3748 (export "test3748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3749 (export "test3749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3750 (export "test3750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3751 (export "test3751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3752 (export "test3752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3753 (export "test3753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3754 (export "test3754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3755 (export "test3755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3756 (export "test3756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3757 (export "test3757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3758 (export "test3758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3759 (export "test3759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3760 (export "test3760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3761 (export "test3761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3762 (export "test3762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3763 (export "test3763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3764 (export "test3764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3765 (export "test3765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3766 (export "test3766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3767 (export "test3767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3768 (export "test3768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3769 (export "test3769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3770 (export "test3770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3771 (export "test3771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3772 (export "test3772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3773 (export "test3773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3774 (export "test3774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3775 (export "test3775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3776 (export "test3776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3777 (export "test3777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3778 (export "test3778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3779 (export "test3779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3780 (export "test3780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3781 (export "test3781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3782 (export "test3782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3783 (export "test3783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3784 (export "test3784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3785 (export "test3785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3786 (export "test3786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3787 (export "test3787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3788 (export "test3788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3789 (export "test3789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3790 (export "test3790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3791 (export "test3791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3792 (export "test3792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3793 (export "test3793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3794 (export "test3794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3795 (export "test3795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3796 (export "test3796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3797 (export "test3797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3798 (export "test3798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3799 (export "test3799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3800 (export "test3800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3801 (export "test3801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3802 (export "test3802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3803 (export "test3803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3804 (export "test3804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3805 (export "test3805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3806 (export "test3806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3807 (export "test3807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3808 (export "test3808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3809 (export "test3809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3810 (export "test3810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3811 (export "test3811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3812 (export "test3812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3813 (export "test3813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3814 (export "test3814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3815 (export "test3815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3816 (export "test3816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3817 (export "test3817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3818 (export "test3818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3819 (export "test3819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3820 (export "test3820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3821 (export "test3821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3822 (export "test3822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3823 (export "test3823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3824 (export "test3824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3825 (export "test3825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3826 (export "test3826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3827 (export "test3827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3828 (export "test3828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3829 (export "test3829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3830 (export "test3830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3831 (export "test3831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3832 (export "test3832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3833 (export "test3833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3834 (export "test3834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3835 (export "test3835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3836 (export "test3836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3837 (export "test3837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3838 (export "test3838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3839 (export "test3839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3840 (export "test3840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3841 (export "test3841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3842 (export "test3842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3843 (export "test3843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3844 (export "test3844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3845 (export "test3845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3846 (export "test3846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3847 (export "test3847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3848 (export "test3848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3849 (export "test3849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3850 (export "test3850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3851 (export "test3851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3852 (export "test3852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3853 (export "test3853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3854 (export "test3854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3855 (export "test3855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3856 (export "test3856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3857 (export "test3857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3858 (export "test3858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3859 (export "test3859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3860 (export "test3860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3861 (export "test3861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3862 (export "test3862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3863 (export "test3863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3864 (export "test3864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3865 (export "test3865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3866 (export "test3866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3867 (export "test3867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3868 (export "test3868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3869 (export "test3869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3870 (export "test3870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3871 (export "test3871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3872 (export "test3872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3873 (export "test3873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3874 (export "test3874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3875 (export "test3875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3876 (export "test3876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3877 (export "test3877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3878 (export "test3878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3879 (export "test3879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3880 (export "test3880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3881 (export "test3881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3882 (export "test3882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3883 (export "test3883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3884 (export "test3884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3885 (export "test3885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3886 (export "test3886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3887 (export "test3887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3888 (export "test3888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3889 (export "test3889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3890 (export "test3890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3891 (export "test3891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3892 (export "test3892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3893 (export "test3893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3894 (export "test3894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3895 (export "test3895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3896 (export "test3896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3897 (export "test3897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3898 (export "test3898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3899 (export "test3899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3900 (export "test3900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3901 (export "test3901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3902 (export "test3902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3903 (export "test3903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3904 (export "test3904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3905 (export "test3905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3906 (export "test3906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3907 (export "test3907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3908 (export "test3908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3909 (export "test3909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3910 (export "test3910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3911 (export "test3911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3912 (export "test3912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3913 (export "test3913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3914 (export "test3914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3915 (export "test3915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3916 (export "test3916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3917 (export "test3917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3918 (export "test3918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3919 (export "test3919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3920 (export "test3920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3921 (export "test3921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3922 (export "test3922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3923 (export "test3923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3924 (export "test3924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3925 (export "test3925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3926 (export "test3926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3927 (export "test3927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3928 (export "test3928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3929 (export "test3929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3930 (export "test3930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3931 (export "test3931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3932 (export "test3932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3933 (export "test3933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3934 (export "test3934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3935 (export "test3935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3936 (export "test3936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3937 (export "test3937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3938 (export "test3938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3939 (export "test3939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3940 (export "test3940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3941 (export "test3941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3942 (export "test3942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3943 (export "test3943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3944 (export "test3944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3945 (export "test3945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3946 (export "test3946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3947 (export "test3947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3948 (export "test3948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3949 (export "test3949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3950 (export "test3950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3951 (export "test3951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3952 (export "test3952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3953 (export "test3953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3954 (export "test3954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3955 (export "test3955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3956 (export "test3956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3957 (export "test3957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3958 (export "test3958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3959 (export "test3959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3960 (export "test3960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3961 (export "test3961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3962 (export "test3962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3963 (export "test3963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3964 (export "test3964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3965 (export "test3965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3966 (export "test3966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3967 (export "test3967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3968 (export "test3968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3969 (export "test3969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3970 (export "test3970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3971 (export "test3971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3972 (export "test3972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3973 (export "test3973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3974 (export "test3974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3975 (export "test3975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3976 (export "test3976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3977 (export "test3977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3978 (export "test3978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3979 (export "test3979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3980 (export "test3980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3981 (export "test3981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3982 (export "test3982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3983 (export "test3983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3984 (export "test3984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3985 (export "test3985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3986 (export "test3986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3987 (export "test3987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3988 (export "test3988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3989 (export "test3989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3990 (export "test3990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3991 (export "test3991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3992 (export "test3992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3993 (export "test3993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3994 (export "test3994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3995 (export "test3995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3996 (export "test3996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3997 (export "test3997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3998 (export "test3998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3999 (export "test3999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4000 (export "test4000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4001 (export "test4001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4002 (export "test4002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4003 (export "test4003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4004 (export "test4004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4005 (export "test4005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4006 (export "test4006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4007 (export "test4007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4008 (export "test4008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4009 (export "test4009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4010 (export "test4010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4011 (export "test4011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4012 (export "test4012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4013 (export "test4013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4014 (export "test4014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4015 (export "test4015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4016 (export "test4016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4017 (export "test4017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4018 (export "test4018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4019 (export "test4019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4020 (export "test4020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4021 (export "test4021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4022 (export "test4022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4023 (export "test4023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4024 (export "test4024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4025 (export "test4025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4026 (export "test4026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4027 (export "test4027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4028 (export "test4028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4029 (export "test4029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4030 (export "test4030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4031 (export "test4031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4032 (export "test4032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4033 (export "test4033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4034 (export "test4034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4035 (export "test4035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4036 (export "test4036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4037 (export "test4037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4038 (export "test4038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4039 (export "test4039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4040 (export "test4040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4041 (export "test4041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4042 (export "test4042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4043 (export "test4043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4044 (export "test4044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4045 (export "test4045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4046 (export "test4046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4047 (export "test4047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4048 (export "test4048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4049 (export "test4049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4050 (export "test4050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4051 (export "test4051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4052 (export "test4052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4053 (export "test4053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4054 (export "test4054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4055 (export "test4055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4056 (export "test4056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4057 (export "test4057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4058 (export "test4058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4059 (export "test4059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4060 (export "test4060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4061 (export "test4061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4062 (export "test4062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4063 (export "test4063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4064 (export "test4064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4065 (export "test4065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4066 (export "test4066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4067 (export "test4067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4068 (export "test4068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4069 (export "test4069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4070 (export "test4070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4071 (export "test4071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4072 (export "test4072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4073 (export "test4073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4074 (export "test4074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4075 (export "test4075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4076 (export "test4076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4077 (export "test4077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4078 (export "test4078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4079 (export "test4079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4080 (export "test4080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4081 (export "test4081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4082 (export "test4082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4083 (export "test4083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4084 (export "test4084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4085 (export "test4085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4086 (export "test4086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4087 (export "test4087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4088 (export "test4088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4089 (export "test4089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4090 (export "test4090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4091 (export "test4091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4092 (export "test4092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4093 (export "test4093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4094 (export "test4094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4095 (export "test4095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4096 (export "test4096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4097 (export "test4097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4098 (export "test4098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4099 (export "test4099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4100 (export "test4100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4101 (export "test4101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4102 (export "test4102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4103 (export "test4103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4104 (export "test4104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4105 (export "test4105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4106 (export "test4106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4107 (export "test4107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4108 (export "test4108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4109 (export "test4109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4110 (export "test4110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4111 (export "test4111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4112 (export "test4112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4113 (export "test4113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4114 (export "test4114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4115 (export "test4115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4116 (export "test4116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4117 (export "test4117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4118 (export "test4118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4119 (export "test4119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4120 (export "test4120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4121 (export "test4121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4122 (export "test4122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4123 (export "test4123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4124 (export "test4124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4125 (export "test4125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4126 (export "test4126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4127 (export "test4127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4128 (export "test4128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4129 (export "test4129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4130 (export "test4130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4131 (export "test4131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4132 (export "test4132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4133 (export "test4133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4134 (export "test4134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4135 (export "test4135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4136 (export "test4136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4137 (export "test4137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4138 (export "test4138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4139 (export "test4139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4140 (export "test4140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4141 (export "test4141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4142 (export "test4142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4143 (export "test4143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4144 (export "test4144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4145 (export "test4145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4146 (export "test4146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4147 (export "test4147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4148 (export "test4148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4149 (export "test4149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4150 (export "test4150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4151 (export "test4151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4152 (export "test4152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4153 (export "test4153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4154 (export "test4154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4155 (export "test4155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4156 (export "test4156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4157 (export "test4157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4158 (export "test4158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4159 (export "test4159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4160 (export "test4160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4161 (export "test4161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4162 (export "test4162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4163 (export "test4163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4164 (export "test4164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4165 (export "test4165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4166 (export "test4166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4167 (export "test4167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4168 (export "test4168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4169 (export "test4169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4170 (export "test4170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4171 (export "test4171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4172 (export "test4172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4173 (export "test4173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4174 (export "test4174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4175 (export "test4175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4176 (export "test4176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4177 (export "test4177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4178 (export "test4178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4179 (export "test4179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4180 (export "test4180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4181 (export "test4181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4182 (export "test4182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4183 (export "test4183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4184 (export "test4184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4185 (export "test4185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4186 (export "test4186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4187 (export "test4187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4188 (export "test4188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4189 (export "test4189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4190 (export "test4190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4191 (export "test4191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4192 (export "test4192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4193 (export "test4193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4194 (export "test4194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4195 (export "test4195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4196 (export "test4196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4197 (export "test4197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4198 (export "test4198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4199 (export "test4199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4200 (export "test4200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4201 (export "test4201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4202 (export "test4202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4203 (export "test4203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4204 (export "test4204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4205 (export "test4205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4206 (export "test4206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4207 (export "test4207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4208 (export "test4208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4209 (export "test4209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4210 (export "test4210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4211 (export "test4211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4212 (export "test4212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4213 (export "test4213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4214 (export "test4214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4215 (export "test4215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4216 (export "test4216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4217 (export "test4217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4218 (export "test4218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4219 (export "test4219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4220 (export "test4220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4221 (export "test4221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4222 (export "test4222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4223 (export "test4223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4224 (export "test4224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4225 (export "test4225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4226 (export "test4226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4227 (export "test4227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4228 (export "test4228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4229 (export "test4229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4230 (export "test4230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4231 (export "test4231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4232 (export "test4232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4233 (export "test4233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4234 (export "test4234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4235 (export "test4235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4236 (export "test4236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4237 (export "test4237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4238 (export "test4238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4239 (export "test4239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4240 (export "test4240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4241 (export "test4241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4242 (export "test4242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4243 (export "test4243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4244 (export "test4244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4245 (export "test4245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4246 (export "test4246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4247 (export "test4247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4248 (export "test4248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4249 (export "test4249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4250 (export "test4250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4251 (export "test4251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4252 (export "test4252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4253 (export "test4253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4254 (export "test4254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4255 (export "test4255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4256 (export "test4256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4257 (export "test4257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4258 (export "test4258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4259 (export "test4259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4260 (export "test4260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4261 (export "test4261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4262 (export "test4262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4263 (export "test4263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4264 (export "test4264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4265 (export "test4265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4266 (export "test4266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4267 (export "test4267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4268 (export "test4268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4269 (export "test4269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4270 (export "test4270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4271 (export "test4271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4272 (export "test4272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4273 (export "test4273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4274 (export "test4274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4275 (export "test4275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4276 (export "test4276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4277 (export "test4277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4278 (export "test4278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4279 (export "test4279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4280 (export "test4280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4281 (export "test4281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4282 (export "test4282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4283 (export "test4283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4284 (export "test4284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4285 (export "test4285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4286 (export "test4286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4287 (export "test4287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4288 (export "test4288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4289 (export "test4289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4290 (export "test4290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4291 (export "test4291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4292 (export "test4292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4293 (export "test4293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4294 (export "test4294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4295 (export "test4295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4296 (export "test4296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4297 (export "test4297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4298 (export "test4298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4299 (export "test4299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4300 (export "test4300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4301 (export "test4301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4302 (export "test4302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4303 (export "test4303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4304 (export "test4304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4305 (export "test4305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4306 (export "test4306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4307 (export "test4307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4308 (export "test4308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4309 (export "test4309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4310 (export "test4310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4311 (export "test4311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4312 (export "test4312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4313 (export "test4313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4314 (export "test4314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4315 (export "test4315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4316 (export "test4316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4317 (export "test4317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4318 (export "test4318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4319 (export "test4319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4320 (export "test4320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4321 (export "test4321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4322 (export "test4322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4323 (export "test4323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4324 (export "test4324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4325 (export "test4325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4326 (export "test4326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4327 (export "test4327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4328 (export "test4328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4329 (export "test4329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4330 (export "test4330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4331 (export "test4331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4332 (export "test4332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4333 (export "test4333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4334 (export "test4334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4335 (export "test4335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4336 (export "test4336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4337 (export "test4337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4338 (export "test4338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4339 (export "test4339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4340 (export "test4340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4341 (export "test4341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4342 (export "test4342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4343 (export "test4343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4344 (export "test4344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4345 (export "test4345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4346 (export "test4346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4347 (export "test4347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4348 (export "test4348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4349 (export "test4349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4350 (export "test4350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4351 (export "test4351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4352 (export "test4352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4353 (export "test4353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4354 (export "test4354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4355 (export "test4355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4356 (export "test4356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4357 (export "test4357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4358 (export "test4358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4359 (export "test4359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4360 (export "test4360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4361 (export "test4361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4362 (export "test4362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4363 (export "test4363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4364 (export "test4364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4365 (export "test4365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4366 (export "test4366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4367 (export "test4367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4368 (export "test4368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4369 (export "test4369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4370 (export "test4370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4371 (export "test4371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4372 (export "test4372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4373 (export "test4373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4374 (export "test4374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4375 (export "test4375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4376 (export "test4376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4377 (export "test4377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4378 (export "test4378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4379 (export "test4379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4380 (export "test4380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4381 (export "test4381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4382 (export "test4382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4383 (export "test4383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4384 (export "test4384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4385 (export "test4385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4386 (export "test4386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4387 (export "test4387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4388 (export "test4388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4389 (export "test4389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4390 (export "test4390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4391 (export "test4391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4392 (export "test4392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4393 (export "test4393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4394 (export "test4394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4395 (export "test4395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4396 (export "test4396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4397 (export "test4397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4398 (export "test4398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4399 (export "test4399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4400 (export "test4400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4401 (export "test4401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4402 (export "test4402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4403 (export "test4403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4404 (export "test4404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4405 (export "test4405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4406 (export "test4406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4407 (export "test4407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4408 (export "test4408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4409 (export "test4409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4410 (export "test4410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4411 (export "test4411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4412 (export "test4412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4413 (export "test4413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4414 (export "test4414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4415 (export "test4415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4416 (export "test4416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4417 (export "test4417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4418 (export "test4418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4419 (export "test4419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4420 (export "test4420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4421 (export "test4421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4422 (export "test4422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4423 (export "test4423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4424 (export "test4424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4425 (export "test4425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4426 (export "test4426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4427 (export "test4427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4428 (export "test4428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4429 (export "test4429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4430 (export "test4430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4431 (export "test4431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4432 (export "test4432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4433 (export "test4433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4434 (export "test4434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4435 (export "test4435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4436 (export "test4436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4437 (export "test4437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4438 (export "test4438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4439 (export "test4439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4440 (export "test4440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4441 (export "test4441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4442 (export "test4442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4443 (export "test4443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4444 (export "test4444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4445 (export "test4445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4446 (export "test4446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4447 (export "test4447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4448 (export "test4448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4449 (export "test4449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4450 (export "test4450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4451 (export "test4451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4452 (export "test4452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4453 (export "test4453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4454 (export "test4454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4455 (export "test4455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4456 (export "test4456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4457 (export "test4457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4458 (export "test4458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4459 (export "test4459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4460 (export "test4460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4461 (export "test4461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4462 (export "test4462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4463 (export "test4463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4464 (export "test4464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4465 (export "test4465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4466 (export "test4466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4467 (export "test4467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4468 (export "test4468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4469 (export "test4469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4470 (export "test4470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4471 (export "test4471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4472 (export "test4472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4473 (export "test4473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4474 (export "test4474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4475 (export "test4475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4476 (export "test4476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4477 (export "test4477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4478 (export "test4478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4479 (export "test4479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4480 (export "test4480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4481 (export "test4481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4482 (export "test4482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4483 (export "test4483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4484 (export "test4484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4485 (export "test4485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4486 (export "test4486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4487 (export "test4487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4488 (export "test4488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4489 (export "test4489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4490 (export "test4490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4491 (export "test4491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4492 (export "test4492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4493 (export "test4493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4494 (export "test4494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4495 (export "test4495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4496 (export "test4496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4497 (export "test4497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4498 (export "test4498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4499 (export "test4499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4500 (export "test4500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4501 (export "test4501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4502 (export "test4502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4503 (export "test4503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4504 (export "test4504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4505 (export "test4505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4506 (export "test4506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4507 (export "test4507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4508 (export "test4508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4509 (export "test4509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4510 (export "test4510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4511 (export "test4511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4512 (export "test4512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4513 (export "test4513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4514 (export "test4514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4515 (export "test4515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4516 (export "test4516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4517 (export "test4517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4518 (export "test4518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4519 (export "test4519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4520 (export "test4520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4521 (export "test4521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4522 (export "test4522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4523 (export "test4523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4524 (export "test4524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4525 (export "test4525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4526 (export "test4526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4527 (export "test4527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4528 (export "test4528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4529 (export "test4529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4530 (export "test4530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4531 (export "test4531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4532 (export "test4532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4533 (export "test4533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4534 (export "test4534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4535 (export "test4535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4536 (export "test4536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4537 (export "test4537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4538 (export "test4538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4539 (export "test4539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4540 (export "test4540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4541 (export "test4541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4542 (export "test4542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4543 (export "test4543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4544 (export "test4544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4545 (export "test4545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4546 (export "test4546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4547 (export "test4547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4548 (export "test4548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4549 (export "test4549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4550 (export "test4550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4551 (export "test4551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4552 (export "test4552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4553 (export "test4553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4554 (export "test4554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4555 (export "test4555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4556 (export "test4556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4557 (export "test4557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4558 (export "test4558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4559 (export "test4559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4560 (export "test4560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4561 (export "test4561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4562 (export "test4562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4563 (export "test4563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4564 (export "test4564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4565 (export "test4565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4566 (export "test4566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4567 (export "test4567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4568 (export "test4568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4569 (export "test4569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4570 (export "test4570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4571 (export "test4571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4572 (export "test4572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4573 (export "test4573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4574 (export "test4574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4575 (export "test4575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4576 (export "test4576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4577 (export "test4577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4578 (export "test4578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4579 (export "test4579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4580 (export "test4580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4581 (export "test4581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4582 (export "test4582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4583 (export "test4583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4584 (export "test4584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4585 (export "test4585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4586 (export "test4586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4587 (export "test4587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4588 (export "test4588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4589 (export "test4589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4590 (export "test4590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4591 (export "test4591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4592 (export "test4592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4593 (export "test4593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4594 (export "test4594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4595 (export "test4595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4596 (export "test4596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4597 (export "test4597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4598 (export "test4598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4599 (export "test4599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4600 (export "test4600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4601 (export "test4601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4602 (export "test4602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4603 (export "test4603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4604 (export "test4604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4605 (export "test4605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4606 (export "test4606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4607 (export "test4607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4608 (export "test4608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4609 (export "test4609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4610 (export "test4610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4611 (export "test4611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4612 (export "test4612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4613 (export "test4613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4614 (export "test4614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4615 (export "test4615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4616 (export "test4616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4617 (export "test4617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4618 (export "test4618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4619 (export "test4619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4620 (export "test4620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4621 (export "test4621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4622 (export "test4622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4623 (export "test4623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4624 (export "test4624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4625 (export "test4625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4626 (export "test4626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4627 (export "test4627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4628 (export "test4628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4629 (export "test4629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4630 (export "test4630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4631 (export "test4631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4632 (export "test4632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4633 (export "test4633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4634 (export "test4634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4635 (export "test4635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4636 (export "test4636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4637 (export "test4637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4638 (export "test4638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4639 (export "test4639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4640 (export "test4640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4641 (export "test4641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4642 (export "test4642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4643 (export "test4643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4644 (export "test4644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4645 (export "test4645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4646 (export "test4646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4647 (export "test4647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4648 (export "test4648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4649 (export "test4649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4650 (export "test4650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4651 (export "test4651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4652 (export "test4652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4653 (export "test4653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4654 (export "test4654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4655 (export "test4655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4656 (export "test4656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4657 (export "test4657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4658 (export "test4658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4659 (export "test4659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4660 (export "test4660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4661 (export "test4661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4662 (export "test4662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4663 (export "test4663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4664 (export "test4664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4665 (export "test4665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4666 (export "test4666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4667 (export "test4667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4668 (export "test4668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4669 (export "test4669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4670 (export "test4670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4671 (export "test4671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4672 (export "test4672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4673 (export "test4673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4674 (export "test4674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4675 (export "test4675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4676 (export "test4676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4677 (export "test4677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4678 (export "test4678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4679 (export "test4679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4680 (export "test4680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4681 (export "test4681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4682 (export "test4682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4683 (export "test4683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4684 (export "test4684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4685 (export "test4685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4686 (export "test4686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4687 (export "test4687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4688 (export "test4688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4689 (export "test4689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4690 (export "test4690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4691 (export "test4691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4692 (export "test4692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4693 (export "test4693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4694 (export "test4694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4695 (export "test4695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4696 (export "test4696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4697 (export "test4697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4698 (export "test4698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4699 (export "test4699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4700 (export "test4700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4701 (export "test4701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4702 (export "test4702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4703 (export "test4703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4704 (export "test4704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4705 (export "test4705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4706 (export "test4706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4707 (export "test4707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4708 (export "test4708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4709 (export "test4709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4710 (export "test4710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4711 (export "test4711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4712 (export "test4712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4713 (export "test4713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4714 (export "test4714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4715 (export "test4715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4716 (export "test4716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4717 (export "test4717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4718 (export "test4718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4719 (export "test4719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4720 (export "test4720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4721 (export "test4721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4722 (export "test4722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4723 (export "test4723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4724 (export "test4724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4725 (export "test4725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4726 (export "test4726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4727 (export "test4727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4728 (export "test4728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4729 (export "test4729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4730 (export "test4730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4731 (export "test4731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4732 (export "test4732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4733 (export "test4733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4734 (export "test4734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4735 (export "test4735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4736 (export "test4736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4737 (export "test4737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4738 (export "test4738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4739 (export "test4739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4740 (export "test4740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4741 (export "test4741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4742 (export "test4742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4743 (export "test4743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4744 (export "test4744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4745 (export "test4745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4746 (export "test4746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4747 (export "test4747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4748 (export "test4748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4749 (export "test4749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4750 (export "test4750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4751 (export "test4751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4752 (export "test4752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4753 (export "test4753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4754 (export "test4754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4755 (export "test4755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4756 (export "test4756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4757 (export "test4757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4758 (export "test4758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4759 (export "test4759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4760 (export "test4760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4761 (export "test4761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4762 (export "test4762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4763 (export "test4763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4764 (export "test4764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4765 (export "test4765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4766 (export "test4766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4767 (export "test4767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4768 (export "test4768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4769 (export "test4769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4770 (export "test4770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4771 (export "test4771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4772 (export "test4772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4773 (export "test4773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4774 (export "test4774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4775 (export "test4775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4776 (export "test4776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4777 (export "test4777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4778 (export "test4778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4779 (export "test4779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4780 (export "test4780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4781 (export "test4781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4782 (export "test4782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4783 (export "test4783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4784 (export "test4784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4785 (export "test4785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4786 (export "test4786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4787 (export "test4787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4788 (export "test4788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4789 (export "test4789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4790 (export "test4790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4791 (export "test4791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4792 (export "test4792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4793 (export "test4793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4794 (export "test4794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4795 (export "test4795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4796 (export "test4796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4797 (export "test4797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4798 (export "test4798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4799 (export "test4799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4800 (export "test4800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4801 (export "test4801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4802 (export "test4802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4803 (export "test4803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4804 (export "test4804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4805 (export "test4805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4806 (export "test4806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4807 (export "test4807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4808 (export "test4808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4809 (export "test4809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4810 (export "test4810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4811 (export "test4811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4812 (export "test4812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4813 (export "test4813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4814 (export "test4814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4815 (export "test4815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4816 (export "test4816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4817 (export "test4817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4818 (export "test4818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4819 (export "test4819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4820 (export "test4820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4821 (export "test4821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4822 (export "test4822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4823 (export "test4823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4824 (export "test4824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4825 (export "test4825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4826 (export "test4826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4827 (export "test4827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4828 (export "test4828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4829 (export "test4829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4830 (export "test4830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4831 (export "test4831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4832 (export "test4832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4833 (export "test4833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4834 (export "test4834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4835 (export "test4835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4836 (export "test4836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4837 (export "test4837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4838 (export "test4838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4839 (export "test4839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4840 (export "test4840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4841 (export "test4841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4842 (export "test4842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4843 (export "test4843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4844 (export "test4844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4845 (export "test4845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4846 (export "test4846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4847 (export "test4847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4848 (export "test4848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4849 (export "test4849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4850 (export "test4850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4851 (export "test4851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4852 (export "test4852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4853 (export "test4853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4854 (export "test4854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4855 (export "test4855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4856 (export "test4856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4857 (export "test4857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4858 (export "test4858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4859 (export "test4859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4860 (export "test4860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4861 (export "test4861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4862 (export "test4862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4863 (export "test4863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4864 (export "test4864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4865 (export "test4865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4866 (export "test4866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4867 (export "test4867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4868 (export "test4868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4869 (export "test4869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4870 (export "test4870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4871 (export "test4871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4872 (export "test4872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4873 (export "test4873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4874 (export "test4874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4875 (export "test4875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4876 (export "test4876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4877 (export "test4877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4878 (export "test4878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4879 (export "test4879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4880 (export "test4880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4881 (export "test4881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4882 (export "test4882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4883 (export "test4883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4884 (export "test4884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4885 (export "test4885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4886 (export "test4886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4887 (export "test4887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4888 (export "test4888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4889 (export "test4889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4890 (export "test4890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4891 (export "test4891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4892 (export "test4892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4893 (export "test4893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4894 (export "test4894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4895 (export "test4895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4896 (export "test4896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4897 (export "test4897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4898 (export "test4898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4899 (export "test4899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4900 (export "test4900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4901 (export "test4901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4902 (export "test4902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4903 (export "test4903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4904 (export "test4904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4905 (export "test4905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4906 (export "test4906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4907 (export "test4907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4908 (export "test4908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4909 (export "test4909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4910 (export "test4910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4911 (export "test4911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4912 (export "test4912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4913 (export "test4913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4914 (export "test4914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4915 (export "test4915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4916 (export "test4916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4917 (export "test4917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4918 (export "test4918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4919 (export "test4919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4920 (export "test4920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4921 (export "test4921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4922 (export "test4922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4923 (export "test4923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4924 (export "test4924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4925 (export "test4925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4926 (export "test4926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4927 (export "test4927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4928 (export "test4928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4929 (export "test4929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4930 (export "test4930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4931 (export "test4931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4932 (export "test4932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4933 (export "test4933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4934 (export "test4934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4935 (export "test4935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4936 (export "test4936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4937 (export "test4937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4938 (export "test4938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4939 (export "test4939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4940 (export "test4940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4941 (export "test4941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4942 (export "test4942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4943 (export "test4943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4944 (export "test4944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4945 (export "test4945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4946 (export "test4946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4947 (export "test4947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4948 (export "test4948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4949 (export "test4949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4950 (export "test4950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4951 (export "test4951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4952 (export "test4952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4953 (export "test4953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4954 (export "test4954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4955 (export "test4955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4956 (export "test4956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4957 (export "test4957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4958 (export "test4958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4959 (export "test4959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4960 (export "test4960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4961 (export "test4961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4962 (export "test4962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4963 (export "test4963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4964 (export "test4964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4965 (export "test4965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4966 (export "test4966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4967 (export "test4967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4968 (export "test4968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4969 (export "test4969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4970 (export "test4970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4971 (export "test4971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4972 (export "test4972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4973 (export "test4973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4974 (export "test4974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4975 (export "test4975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4976 (export "test4976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4977 (export "test4977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4978 (export "test4978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4979 (export "test4979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4980 (export "test4980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4981 (export "test4981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4982 (export "test4982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4983 (export "test4983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4984 (export "test4984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4985 (export "test4985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4986 (export "test4986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4987 (export "test4987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4988 (export "test4988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4989 (export "test4989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4990 (export "test4990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4991 (export "test4991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4992 (export "test4992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4993 (export "test4993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4994 (export "test4994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4995 (export "test4995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4996 (export "test4996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4997 (export "test4997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4998 (export "test4998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4999 (export "test4999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) -) diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.zip b/src/test/app/wasm_fixtures/wat/functions_5k.zip new file mode 100644 index 0000000000..e261760545 Binary files /dev/null and b/src/test/app/wasm_fixtures/wat/functions_5k.zip differ diff --git a/src/test/app/wasm_fixtures/wat/locals_10k.wat b/src/test/app/wasm_fixtures/wat/locals_10k.wat deleted file mode 100644 index 6cd6d4baf4..0000000000 --- a/src/test/app/wasm_fixtures/wat/locals_10k.wat +++ /dev/null @@ -1,50000 +0,0 @@ -(module - (func $test (export "test") - (param $p0 i32) - (param $p1 i32) - (result i32) - (local $l2 i32) - (local $l3 i32) - (local $l4 i32) - (local $l5 i32) - (local $l6 i32) - (local $l7 i32) - (local $l8 i32) - (local $l9 i32) - (local $l10 i32) - (local $l11 i32) - (local $l12 i32) - (local $l13 i32) - (local $l14 i32) - (local $l15 i32) - (local $l16 i32) - (local $l17 i32) - (local $l18 i32) - (local $l19 i32) - (local $l20 i32) - (local $l21 i32) - (local $l22 i32) - (local $l23 i32) - (local $l24 i32) - (local $l25 i32) - (local $l26 i32) - (local $l27 i32) - (local $l28 i32) - (local $l29 i32) - (local $l30 i32) - (local $l31 i32) - (local $l32 i32) - (local $l33 i32) - (local $l34 i32) - (local $l35 i32) - (local $l36 i32) - (local $l37 i32) - (local $l38 i32) - (local $l39 i32) - (local $l40 i32) - (local $l41 i32) - (local $l42 i32) - (local $l43 i32) - (local $l44 i32) - (local $l45 i32) - (local $l46 i32) - (local $l47 i32) - (local $l48 i32) - (local $l49 i32) - (local $l50 i32) - (local $l51 i32) - (local $l52 i32) - (local $l53 i32) - (local $l54 i32) - (local $l55 i32) - (local $l56 i32) - (local $l57 i32) - (local $l58 i32) - (local $l59 i32) - (local $l60 i32) - (local $l61 i32) - (local $l62 i32) - (local $l63 i32) - (local $l64 i32) - (local $l65 i32) - (local $l66 i32) - (local $l67 i32) - (local $l68 i32) - (local $l69 i32) - (local $l70 i32) - (local $l71 i32) - (local $l72 i32) - (local $l73 i32) - (local $l74 i32) - (local $l75 i32) - (local $l76 i32) - (local $l77 i32) - (local $l78 i32) - (local $l79 i32) - (local $l80 i32) - (local $l81 i32) - (local $l82 i32) - (local $l83 i32) - (local $l84 i32) - (local $l85 i32) - (local $l86 i32) - (local $l87 i32) - (local $l88 i32) - (local $l89 i32) - (local $l90 i32) - (local $l91 i32) - (local $l92 i32) - (local $l93 i32) - (local $l94 i32) - (local $l95 i32) - (local $l96 i32) - (local $l97 i32) - (local $l98 i32) - (local $l99 i32) - (local $l100 i32) - (local $l101 i32) - (local $l102 i32) - (local $l103 i32) - (local $l104 i32) - (local $l105 i32) - (local $l106 i32) - (local $l107 i32) - (local $l108 i32) - (local $l109 i32) - (local $l110 i32) - (local $l111 i32) - (local $l112 i32) - (local $l113 i32) - (local $l114 i32) - (local $l115 i32) - (local $l116 i32) - (local $l117 i32) - (local $l118 i32) - (local $l119 i32) - (local $l120 i32) - (local $l121 i32) - (local $l122 i32) - (local $l123 i32) - (local $l124 i32) - (local $l125 i32) - (local $l126 i32) - (local $l127 i32) - (local $l128 i32) - (local $l129 i32) - (local $l130 i32) - (local $l131 i32) - (local $l132 i32) - (local $l133 i32) - (local $l134 i32) - (local $l135 i32) - (local $l136 i32) - (local $l137 i32) - (local $l138 i32) - (local $l139 i32) - (local $l140 i32) - (local $l141 i32) - (local $l142 i32) - (local $l143 i32) - (local $l144 i32) - (local $l145 i32) - (local $l146 i32) - (local $l147 i32) - (local $l148 i32) - (local $l149 i32) - (local $l150 i32) - (local $l151 i32) - (local $l152 i32) - (local $l153 i32) - (local $l154 i32) - (local $l155 i32) - (local $l156 i32) - (local $l157 i32) - (local $l158 i32) - (local $l159 i32) - (local $l160 i32) - (local $l161 i32) - (local $l162 i32) - (local $l163 i32) - (local $l164 i32) - (local $l165 i32) - (local $l166 i32) - (local $l167 i32) - (local $l168 i32) - (local $l169 i32) - (local $l170 i32) - (local $l171 i32) - (local $l172 i32) - (local $l173 i32) - (local $l174 i32) - (local $l175 i32) - (local $l176 i32) - (local $l177 i32) - (local $l178 i32) - (local $l179 i32) - (local $l180 i32) - (local $l181 i32) - (local $l182 i32) - (local $l183 i32) - (local $l184 i32) - (local $l185 i32) - (local $l186 i32) - (local $l187 i32) - (local $l188 i32) - (local $l189 i32) - (local $l190 i32) - (local $l191 i32) - (local $l192 i32) - (local $l193 i32) - (local $l194 i32) - (local $l195 i32) - (local $l196 i32) - (local $l197 i32) - (local $l198 i32) - (local $l199 i32) - (local $l200 i32) - (local $l201 i32) - (local $l202 i32) - (local $l203 i32) - (local $l204 i32) - (local $l205 i32) - (local $l206 i32) - (local $l207 i32) - (local $l208 i32) - (local $l209 i32) - (local $l210 i32) - (local $l211 i32) - (local $l212 i32) - (local $l213 i32) - (local $l214 i32) - (local $l215 i32) - (local $l216 i32) - (local $l217 i32) - (local $l218 i32) - (local $l219 i32) - (local $l220 i32) - (local $l221 i32) - (local $l222 i32) - (local $l223 i32) - (local $l224 i32) - (local $l225 i32) - (local $l226 i32) - (local $l227 i32) - (local $l228 i32) - (local $l229 i32) - (local $l230 i32) - (local $l231 i32) - (local $l232 i32) - (local $l233 i32) - (local $l234 i32) - (local $l235 i32) - (local $l236 i32) - (local $l237 i32) - (local $l238 i32) - (local $l239 i32) - (local $l240 i32) - (local $l241 i32) - (local $l242 i32) - (local $l243 i32) - (local $l244 i32) - (local $l245 i32) - (local $l246 i32) - (local $l247 i32) - (local $l248 i32) - (local $l249 i32) - (local $l250 i32) - (local $l251 i32) - (local $l252 i32) - (local $l253 i32) - (local $l254 i32) - (local $l255 i32) - (local $l256 i32) - (local $l257 i32) - (local $l258 i32) - (local $l259 i32) - (local $l260 i32) - (local $l261 i32) - (local $l262 i32) - (local $l263 i32) - (local $l264 i32) - (local $l265 i32) - (local $l266 i32) - (local $l267 i32) - (local $l268 i32) - (local $l269 i32) - (local $l270 i32) - (local $l271 i32) - (local $l272 i32) - (local $l273 i32) - (local $l274 i32) - (local $l275 i32) - (local $l276 i32) - (local $l277 i32) - (local $l278 i32) - (local $l279 i32) - (local $l280 i32) - (local $l281 i32) - (local $l282 i32) - (local $l283 i32) - (local $l284 i32) - (local $l285 i32) - (local $l286 i32) - (local $l287 i32) - (local $l288 i32) - (local $l289 i32) - (local $l290 i32) - (local $l291 i32) - (local $l292 i32) - (local $l293 i32) - (local $l294 i32) - (local $l295 i32) - (local $l296 i32) - (local $l297 i32) - (local $l298 i32) - (local $l299 i32) - (local $l300 i32) - (local $l301 i32) - (local $l302 i32) - (local $l303 i32) - (local $l304 i32) - (local $l305 i32) - (local $l306 i32) - (local $l307 i32) - (local $l308 i32) - (local $l309 i32) - (local $l310 i32) - (local $l311 i32) - (local $l312 i32) - (local $l313 i32) - (local $l314 i32) - (local $l315 i32) - (local $l316 i32) - (local $l317 i32) - (local $l318 i32) - (local $l319 i32) - (local $l320 i32) - (local $l321 i32) - (local $l322 i32) - (local $l323 i32) - (local $l324 i32) - (local $l325 i32) - (local $l326 i32) - (local $l327 i32) - (local $l328 i32) - (local $l329 i32) - (local $l330 i32) - (local $l331 i32) - (local $l332 i32) - (local $l333 i32) - (local $l334 i32) - (local $l335 i32) - (local $l336 i32) - (local $l337 i32) - (local $l338 i32) - (local $l339 i32) - (local $l340 i32) - (local $l341 i32) - (local $l342 i32) - (local $l343 i32) - (local $l344 i32) - (local $l345 i32) - (local $l346 i32) - (local $l347 i32) - (local $l348 i32) - (local $l349 i32) - (local $l350 i32) - (local $l351 i32) - (local $l352 i32) - (local $l353 i32) - (local $l354 i32) - (local $l355 i32) - (local $l356 i32) - (local $l357 i32) - (local $l358 i32) - (local $l359 i32) - (local $l360 i32) - (local $l361 i32) - (local $l362 i32) - (local $l363 i32) - (local $l364 i32) - (local $l365 i32) - (local $l366 i32) - (local $l367 i32) - (local $l368 i32) - (local $l369 i32) - (local $l370 i32) - (local $l371 i32) - (local $l372 i32) - (local $l373 i32) - (local $l374 i32) - (local $l375 i32) - (local $l376 i32) - (local $l377 i32) - (local $l378 i32) - (local $l379 i32) - (local $l380 i32) - (local $l381 i32) - (local $l382 i32) - (local $l383 i32) - (local $l384 i32) - (local $l385 i32) - (local $l386 i32) - (local $l387 i32) - (local $l388 i32) - (local $l389 i32) - (local $l390 i32) - (local $l391 i32) - (local $l392 i32) - (local $l393 i32) - (local $l394 i32) - (local $l395 i32) - (local $l396 i32) - (local $l397 i32) - (local $l398 i32) - (local $l399 i32) - (local $l400 i32) - (local $l401 i32) - (local $l402 i32) - (local $l403 i32) - (local $l404 i32) - (local $l405 i32) - (local $l406 i32) - (local $l407 i32) - (local $l408 i32) - (local $l409 i32) - (local $l410 i32) - (local $l411 i32) - (local $l412 i32) - (local $l413 i32) - (local $l414 i32) - (local $l415 i32) - (local $l416 i32) - (local $l417 i32) - (local $l418 i32) - (local $l419 i32) - (local $l420 i32) - (local $l421 i32) - (local $l422 i32) - (local $l423 i32) - (local $l424 i32) - (local $l425 i32) - (local $l426 i32) - (local $l427 i32) - (local $l428 i32) - (local $l429 i32) - (local $l430 i32) - (local $l431 i32) - (local $l432 i32) - (local $l433 i32) - (local $l434 i32) - (local $l435 i32) - (local $l436 i32) - (local $l437 i32) - (local $l438 i32) - (local $l439 i32) - (local $l440 i32) - (local $l441 i32) - (local $l442 i32) - (local $l443 i32) - (local $l444 i32) - (local $l445 i32) - (local $l446 i32) - (local $l447 i32) - (local $l448 i32) - (local $l449 i32) - (local $l450 i32) - (local $l451 i32) - (local $l452 i32) - (local $l453 i32) - (local $l454 i32) - (local $l455 i32) - (local $l456 i32) - (local $l457 i32) - (local $l458 i32) - (local $l459 i32) - (local $l460 i32) - (local $l461 i32) - (local $l462 i32) - (local $l463 i32) - (local $l464 i32) - (local $l465 i32) - (local $l466 i32) - (local $l467 i32) - (local $l468 i32) - (local $l469 i32) - (local $l470 i32) - (local $l471 i32) - (local $l472 i32) - (local $l473 i32) - (local $l474 i32) - (local $l475 i32) - (local $l476 i32) - (local $l477 i32) - (local $l478 i32) - (local $l479 i32) - (local $l480 i32) - (local $l481 i32) - (local $l482 i32) - (local $l483 i32) - (local $l484 i32) - (local $l485 i32) - (local $l486 i32) - (local $l487 i32) - (local $l488 i32) - (local $l489 i32) - (local $l490 i32) - (local $l491 i32) - (local $l492 i32) - (local $l493 i32) - (local $l494 i32) - (local $l495 i32) - (local $l496 i32) - (local $l497 i32) - (local $l498 i32) - (local $l499 i32) - (local $l500 i32) - (local $l501 i32) - (local $l502 i32) - (local $l503 i32) - (local $l504 i32) - (local $l505 i32) - (local $l506 i32) - (local $l507 i32) - (local $l508 i32) - (local $l509 i32) - (local $l510 i32) - (local $l511 i32) - (local $l512 i32) - (local $l513 i32) - (local $l514 i32) - (local $l515 i32) - (local $l516 i32) - (local $l517 i32) - (local $l518 i32) - (local $l519 i32) - (local $l520 i32) - (local $l521 i32) - (local $l522 i32) - (local $l523 i32) - (local $l524 i32) - (local $l525 i32) - (local $l526 i32) - (local $l527 i32) - (local $l528 i32) - (local $l529 i32) - (local $l530 i32) - (local $l531 i32) - (local $l532 i32) - (local $l533 i32) - (local $l534 i32) - (local $l535 i32) - (local $l536 i32) - (local $l537 i32) - (local $l538 i32) - (local $l539 i32) - (local $l540 i32) - (local $l541 i32) - (local $l542 i32) - (local $l543 i32) - (local $l544 i32) - (local $l545 i32) - (local $l546 i32) - (local $l547 i32) - (local $l548 i32) - (local $l549 i32) - (local $l550 i32) - (local $l551 i32) - (local $l552 i32) - (local $l553 i32) - (local $l554 i32) - (local $l555 i32) - (local $l556 i32) - (local $l557 i32) - (local $l558 i32) - (local $l559 i32) - (local $l560 i32) - (local $l561 i32) - (local $l562 i32) - (local $l563 i32) - (local $l564 i32) - (local $l565 i32) - (local $l566 i32) - (local $l567 i32) - (local $l568 i32) - (local $l569 i32) - (local $l570 i32) - (local $l571 i32) - (local $l572 i32) - (local $l573 i32) - (local $l574 i32) - (local $l575 i32) - (local $l576 i32) - (local $l577 i32) - (local $l578 i32) - (local $l579 i32) - (local $l580 i32) - (local $l581 i32) - (local $l582 i32) - (local $l583 i32) - (local $l584 i32) - (local $l585 i32) - (local $l586 i32) - (local $l587 i32) - (local $l588 i32) - (local $l589 i32) - (local $l590 i32) - (local $l591 i32) - (local $l592 i32) - (local $l593 i32) - (local $l594 i32) - (local $l595 i32) - (local $l596 i32) - (local $l597 i32) - (local $l598 i32) - (local $l599 i32) - (local $l600 i32) - (local $l601 i32) - (local $l602 i32) - (local $l603 i32) - (local $l604 i32) - (local $l605 i32) - (local $l606 i32) - (local $l607 i32) - (local $l608 i32) - (local $l609 i32) - (local $l610 i32) - (local $l611 i32) - (local $l612 i32) - (local $l613 i32) - (local $l614 i32) - (local $l615 i32) - (local $l616 i32) - (local $l617 i32) - (local $l618 i32) - (local $l619 i32) - (local $l620 i32) - (local $l621 i32) - (local $l622 i32) - (local $l623 i32) - (local $l624 i32) - (local $l625 i32) - (local $l626 i32) - (local $l627 i32) - (local $l628 i32) - (local $l629 i32) - (local $l630 i32) - (local $l631 i32) - (local $l632 i32) - (local $l633 i32) - (local $l634 i32) - (local $l635 i32) - (local $l636 i32) - (local $l637 i32) - (local $l638 i32) - (local $l639 i32) - (local $l640 i32) - (local $l641 i32) - (local $l642 i32) - (local $l643 i32) - (local $l644 i32) - (local $l645 i32) - (local $l646 i32) - (local $l647 i32) - (local $l648 i32) - (local $l649 i32) - (local $l650 i32) - (local $l651 i32) - (local $l652 i32) - (local $l653 i32) - (local $l654 i32) - (local $l655 i32) - (local $l656 i32) - (local $l657 i32) - (local $l658 i32) - (local $l659 i32) - (local $l660 i32) - (local $l661 i32) - (local $l662 i32) - (local $l663 i32) - (local $l664 i32) - (local $l665 i32) - (local $l666 i32) - (local $l667 i32) - (local $l668 i32) - (local $l669 i32) - (local $l670 i32) - (local $l671 i32) - (local $l672 i32) - (local $l673 i32) - (local $l674 i32) - (local $l675 i32) - (local $l676 i32) - (local $l677 i32) - (local $l678 i32) - (local $l679 i32) - (local $l680 i32) - (local $l681 i32) - (local $l682 i32) - (local $l683 i32) - (local $l684 i32) - (local $l685 i32) - (local $l686 i32) - (local $l687 i32) - (local $l688 i32) - (local $l689 i32) - (local $l690 i32) - (local $l691 i32) - (local $l692 i32) - (local $l693 i32) - (local $l694 i32) - (local $l695 i32) - (local $l696 i32) - (local $l697 i32) - (local $l698 i32) - (local $l699 i32) - (local $l700 i32) - (local $l701 i32) - (local $l702 i32) - (local $l703 i32) - (local $l704 i32) - (local $l705 i32) - (local $l706 i32) - (local $l707 i32) - (local $l708 i32) - (local $l709 i32) - (local $l710 i32) - (local $l711 i32) - (local $l712 i32) - (local $l713 i32) - (local $l714 i32) - (local $l715 i32) - (local $l716 i32) - (local $l717 i32) - (local $l718 i32) - (local $l719 i32) - (local $l720 i32) - (local $l721 i32) - (local $l722 i32) - (local $l723 i32) - (local $l724 i32) - (local $l725 i32) - (local $l726 i32) - (local $l727 i32) - (local $l728 i32) - (local $l729 i32) - (local $l730 i32) - (local $l731 i32) - (local $l732 i32) - (local $l733 i32) - (local $l734 i32) - (local $l735 i32) - (local $l736 i32) - (local $l737 i32) - (local $l738 i32) - (local $l739 i32) - (local $l740 i32) - (local $l741 i32) - (local $l742 i32) - (local $l743 i32) - (local $l744 i32) - (local $l745 i32) - (local $l746 i32) - (local $l747 i32) - (local $l748 i32) - (local $l749 i32) - (local $l750 i32) - (local $l751 i32) - (local $l752 i32) - (local $l753 i32) - (local $l754 i32) - (local $l755 i32) - (local $l756 i32) - (local $l757 i32) - (local $l758 i32) - (local $l759 i32) - (local $l760 i32) - (local $l761 i32) - (local $l762 i32) - (local $l763 i32) - (local $l764 i32) - (local $l765 i32) - (local $l766 i32) - (local $l767 i32) - (local $l768 i32) - (local $l769 i32) - (local $l770 i32) - (local $l771 i32) - (local $l772 i32) - (local $l773 i32) - (local $l774 i32) - (local $l775 i32) - (local $l776 i32) - (local $l777 i32) - (local $l778 i32) - (local $l779 i32) - (local $l780 i32) - (local $l781 i32) - (local $l782 i32) - (local $l783 i32) - (local $l784 i32) - (local $l785 i32) - (local $l786 i32) - (local $l787 i32) - (local $l788 i32) - (local $l789 i32) - (local $l790 i32) - (local $l791 i32) - (local $l792 i32) - (local $l793 i32) - (local $l794 i32) - (local $l795 i32) - (local $l796 i32) - (local $l797 i32) - (local $l798 i32) - (local $l799 i32) - (local $l800 i32) - (local $l801 i32) - (local $l802 i32) - (local $l803 i32) - (local $l804 i32) - (local $l805 i32) - (local $l806 i32) - (local $l807 i32) - (local $l808 i32) - (local $l809 i32) - (local $l810 i32) - (local $l811 i32) - (local $l812 i32) - (local $l813 i32) - (local $l814 i32) - (local $l815 i32) - (local $l816 i32) - (local $l817 i32) - (local $l818 i32) - (local $l819 i32) - (local $l820 i32) - (local $l821 i32) - (local $l822 i32) - (local $l823 i32) - (local $l824 i32) - (local $l825 i32) - (local $l826 i32) - (local $l827 i32) - (local $l828 i32) - (local $l829 i32) - (local $l830 i32) - (local $l831 i32) - (local $l832 i32) - (local $l833 i32) - (local $l834 i32) - (local $l835 i32) - (local $l836 i32) - (local $l837 i32) - (local $l838 i32) - (local $l839 i32) - (local $l840 i32) - (local $l841 i32) - (local $l842 i32) - (local $l843 i32) - (local $l844 i32) - (local $l845 i32) - (local $l846 i32) - (local $l847 i32) - (local $l848 i32) - (local $l849 i32) - (local $l850 i32) - (local $l851 i32) - (local $l852 i32) - (local $l853 i32) - (local $l854 i32) - (local $l855 i32) - (local $l856 i32) - (local $l857 i32) - (local $l858 i32) - (local $l859 i32) - (local $l860 i32) - (local $l861 i32) - (local $l862 i32) - (local $l863 i32) - (local $l864 i32) - (local $l865 i32) - (local $l866 i32) - (local $l867 i32) - (local $l868 i32) - (local $l869 i32) - (local $l870 i32) - (local $l871 i32) - (local $l872 i32) - (local $l873 i32) - (local $l874 i32) - (local $l875 i32) - (local $l876 i32) - (local $l877 i32) - (local $l878 i32) - (local $l879 i32) - (local $l880 i32) - (local $l881 i32) - (local $l882 i32) - (local $l883 i32) - (local $l884 i32) - (local $l885 i32) - (local $l886 i32) - (local $l887 i32) - (local $l888 i32) - (local $l889 i32) - (local $l890 i32) - (local $l891 i32) - (local $l892 i32) - (local $l893 i32) - (local $l894 i32) - (local $l895 i32) - (local $l896 i32) - (local $l897 i32) - (local $l898 i32) - (local $l899 i32) - (local $l900 i32) - (local $l901 i32) - (local $l902 i32) - (local $l903 i32) - (local $l904 i32) - (local $l905 i32) - (local $l906 i32) - (local $l907 i32) - (local $l908 i32) - (local $l909 i32) - (local $l910 i32) - (local $l911 i32) - (local $l912 i32) - (local $l913 i32) - (local $l914 i32) - (local $l915 i32) - (local $l916 i32) - (local $l917 i32) - (local $l918 i32) - (local $l919 i32) - (local $l920 i32) - (local $l921 i32) - (local $l922 i32) - (local $l923 i32) - (local $l924 i32) - (local $l925 i32) - (local $l926 i32) - (local $l927 i32) - (local $l928 i32) - (local $l929 i32) - (local $l930 i32) - (local $l931 i32) - (local $l932 i32) - (local $l933 i32) - (local $l934 i32) - (local $l935 i32) - (local $l936 i32) - (local $l937 i32) - (local $l938 i32) - (local $l939 i32) - (local $l940 i32) - (local $l941 i32) - (local $l942 i32) - (local $l943 i32) - (local $l944 i32) - (local $l945 i32) - (local $l946 i32) - (local $l947 i32) - (local $l948 i32) - (local $l949 i32) - (local $l950 i32) - (local $l951 i32) - (local $l952 i32) - (local $l953 i32) - (local $l954 i32) - (local $l955 i32) - (local $l956 i32) - (local $l957 i32) - (local $l958 i32) - (local $l959 i32) - (local $l960 i32) - (local $l961 i32) - (local $l962 i32) - (local $l963 i32) - (local $l964 i32) - (local $l965 i32) - (local $l966 i32) - (local $l967 i32) - (local $l968 i32) - (local $l969 i32) - (local $l970 i32) - (local $l971 i32) - (local $l972 i32) - (local $l973 i32) - (local $l974 i32) - (local $l975 i32) - (local $l976 i32) - (local $l977 i32) - (local $l978 i32) - (local $l979 i32) - (local $l980 i32) - (local $l981 i32) - (local $l982 i32) - (local $l983 i32) - (local $l984 i32) - (local $l985 i32) - (local $l986 i32) - (local $l987 i32) - (local $l988 i32) - (local $l989 i32) - (local $l990 i32) - (local $l991 i32) - (local $l992 i32) - (local $l993 i32) - (local $l994 i32) - (local $l995 i32) - (local $l996 i32) - (local $l997 i32) - (local $l998 i32) - (local $l999 i32) - (local $l1000 i32) - (local $l1001 i32) - (local $l1002 i32) - (local $l1003 i32) - (local $l1004 i32) - (local $l1005 i32) - (local $l1006 i32) - (local $l1007 i32) - (local $l1008 i32) - (local $l1009 i32) - (local $l1010 i32) - (local $l1011 i32) - (local $l1012 i32) - (local $l1013 i32) - (local $l1014 i32) - (local $l1015 i32) - (local $l1016 i32) - (local $l1017 i32) - (local $l1018 i32) - (local $l1019 i32) - (local $l1020 i32) - (local $l1021 i32) - (local $l1022 i32) - (local $l1023 i32) - (local $l1024 i32) - (local $l1025 i32) - (local $l1026 i32) - (local $l1027 i32) - (local $l1028 i32) - (local $l1029 i32) - (local $l1030 i32) - (local $l1031 i32) - (local $l1032 i32) - (local $l1033 i32) - (local $l1034 i32) - (local $l1035 i32) - (local $l1036 i32) - (local $l1037 i32) - (local $l1038 i32) - (local $l1039 i32) - (local $l1040 i32) - (local $l1041 i32) - (local $l1042 i32) - (local $l1043 i32) - (local $l1044 i32) - (local $l1045 i32) - (local $l1046 i32) - (local $l1047 i32) - (local $l1048 i32) - (local $l1049 i32) - (local $l1050 i32) - (local $l1051 i32) - (local $l1052 i32) - (local $l1053 i32) - (local $l1054 i32) - (local $l1055 i32) - (local $l1056 i32) - (local $l1057 i32) - (local $l1058 i32) - (local $l1059 i32) - (local $l1060 i32) - (local $l1061 i32) - (local $l1062 i32) - (local $l1063 i32) - (local $l1064 i32) - (local $l1065 i32) - (local $l1066 i32) - (local $l1067 i32) - (local $l1068 i32) - (local $l1069 i32) - (local $l1070 i32) - (local $l1071 i32) - (local $l1072 i32) - (local $l1073 i32) - (local $l1074 i32) - (local $l1075 i32) - (local $l1076 i32) - (local $l1077 i32) - (local $l1078 i32) - (local $l1079 i32) - (local $l1080 i32) - (local $l1081 i32) - (local $l1082 i32) - (local $l1083 i32) - (local $l1084 i32) - (local $l1085 i32) - (local $l1086 i32) - (local $l1087 i32) - (local $l1088 i32) - (local $l1089 i32) - (local $l1090 i32) - (local $l1091 i32) - (local $l1092 i32) - (local $l1093 i32) - (local $l1094 i32) - (local $l1095 i32) - (local $l1096 i32) - (local $l1097 i32) - (local $l1098 i32) - (local $l1099 i32) - (local $l1100 i32) - (local $l1101 i32) - (local $l1102 i32) - (local $l1103 i32) - (local $l1104 i32) - (local $l1105 i32) - (local $l1106 i32) - (local $l1107 i32) - (local $l1108 i32) - (local $l1109 i32) - (local $l1110 i32) - (local $l1111 i32) - (local $l1112 i32) - (local $l1113 i32) - (local $l1114 i32) - (local $l1115 i32) - (local $l1116 i32) - (local $l1117 i32) - (local $l1118 i32) - (local $l1119 i32) - (local $l1120 i32) - (local $l1121 i32) - (local $l1122 i32) - (local $l1123 i32) - (local $l1124 i32) - (local $l1125 i32) - (local $l1126 i32) - (local $l1127 i32) - (local $l1128 i32) - (local $l1129 i32) - (local $l1130 i32) - (local $l1131 i32) - (local $l1132 i32) - (local $l1133 i32) - (local $l1134 i32) - (local $l1135 i32) - (local $l1136 i32) - (local $l1137 i32) - (local $l1138 i32) - (local $l1139 i32) - (local $l1140 i32) - (local $l1141 i32) - (local $l1142 i32) - (local $l1143 i32) - (local $l1144 i32) - (local $l1145 i32) - (local $l1146 i32) - (local $l1147 i32) - (local $l1148 i32) - (local $l1149 i32) - (local $l1150 i32) - (local $l1151 i32) - (local $l1152 i32) - (local $l1153 i32) - (local $l1154 i32) - (local $l1155 i32) - (local $l1156 i32) - (local $l1157 i32) - (local $l1158 i32) - (local $l1159 i32) - (local $l1160 i32) - (local $l1161 i32) - (local $l1162 i32) - (local $l1163 i32) - (local $l1164 i32) - (local $l1165 i32) - (local $l1166 i32) - (local $l1167 i32) - (local $l1168 i32) - (local $l1169 i32) - (local $l1170 i32) - (local $l1171 i32) - (local $l1172 i32) - (local $l1173 i32) - (local $l1174 i32) - (local $l1175 i32) - (local $l1176 i32) - (local $l1177 i32) - (local $l1178 i32) - (local $l1179 i32) - (local $l1180 i32) - (local $l1181 i32) - (local $l1182 i32) - (local $l1183 i32) - (local $l1184 i32) - (local $l1185 i32) - (local $l1186 i32) - (local $l1187 i32) - (local $l1188 i32) - (local $l1189 i32) - (local $l1190 i32) - (local $l1191 i32) - (local $l1192 i32) - (local $l1193 i32) - (local $l1194 i32) - (local $l1195 i32) - (local $l1196 i32) - (local $l1197 i32) - (local $l1198 i32) - (local $l1199 i32) - (local $l1200 i32) - (local $l1201 i32) - (local $l1202 i32) - (local $l1203 i32) - (local $l1204 i32) - (local $l1205 i32) - (local $l1206 i32) - (local $l1207 i32) - (local $l1208 i32) - (local $l1209 i32) - (local $l1210 i32) - (local $l1211 i32) - (local $l1212 i32) - (local $l1213 i32) - (local $l1214 i32) - (local $l1215 i32) - (local $l1216 i32) - (local $l1217 i32) - (local $l1218 i32) - (local $l1219 i32) - (local $l1220 i32) - (local $l1221 i32) - (local $l1222 i32) - (local $l1223 i32) - (local $l1224 i32) - (local $l1225 i32) - (local $l1226 i32) - (local $l1227 i32) - (local $l1228 i32) - (local $l1229 i32) - (local $l1230 i32) - (local $l1231 i32) - (local $l1232 i32) - (local $l1233 i32) - (local $l1234 i32) - (local $l1235 i32) - (local $l1236 i32) - (local $l1237 i32) - (local $l1238 i32) - (local $l1239 i32) - (local $l1240 i32) - (local $l1241 i32) - (local $l1242 i32) - (local $l1243 i32) - (local $l1244 i32) - (local $l1245 i32) - (local $l1246 i32) - (local $l1247 i32) - (local $l1248 i32) - (local $l1249 i32) - (local $l1250 i32) - (local $l1251 i32) - (local $l1252 i32) - (local $l1253 i32) - (local $l1254 i32) - (local $l1255 i32) - (local $l1256 i32) - (local $l1257 i32) - (local $l1258 i32) - (local $l1259 i32) - (local $l1260 i32) - (local $l1261 i32) - (local $l1262 i32) - (local $l1263 i32) - (local $l1264 i32) - (local $l1265 i32) - (local $l1266 i32) - (local $l1267 i32) - (local $l1268 i32) - (local $l1269 i32) - (local $l1270 i32) - (local $l1271 i32) - (local $l1272 i32) - (local $l1273 i32) - (local $l1274 i32) - (local $l1275 i32) - (local $l1276 i32) - (local $l1277 i32) - (local $l1278 i32) - (local $l1279 i32) - (local $l1280 i32) - (local $l1281 i32) - (local $l1282 i32) - (local $l1283 i32) - (local $l1284 i32) - (local $l1285 i32) - (local $l1286 i32) - (local $l1287 i32) - (local $l1288 i32) - (local $l1289 i32) - (local $l1290 i32) - (local $l1291 i32) - (local $l1292 i32) - (local $l1293 i32) - (local $l1294 i32) - (local $l1295 i32) - (local $l1296 i32) - (local $l1297 i32) - (local $l1298 i32) - (local $l1299 i32) - (local $l1300 i32) - (local $l1301 i32) - (local $l1302 i32) - (local $l1303 i32) - (local $l1304 i32) - (local $l1305 i32) - (local $l1306 i32) - (local $l1307 i32) - (local $l1308 i32) - (local $l1309 i32) - (local $l1310 i32) - (local $l1311 i32) - (local $l1312 i32) - (local $l1313 i32) - (local $l1314 i32) - (local $l1315 i32) - (local $l1316 i32) - (local $l1317 i32) - (local $l1318 i32) - (local $l1319 i32) - (local $l1320 i32) - (local $l1321 i32) - (local $l1322 i32) - (local $l1323 i32) - (local $l1324 i32) - (local $l1325 i32) - (local $l1326 i32) - (local $l1327 i32) - (local $l1328 i32) - (local $l1329 i32) - (local $l1330 i32) - (local $l1331 i32) - (local $l1332 i32) - (local $l1333 i32) - (local $l1334 i32) - (local $l1335 i32) - (local $l1336 i32) - (local $l1337 i32) - (local $l1338 i32) - (local $l1339 i32) - (local $l1340 i32) - (local $l1341 i32) - (local $l1342 i32) - (local $l1343 i32) - (local $l1344 i32) - (local $l1345 i32) - (local $l1346 i32) - (local $l1347 i32) - (local $l1348 i32) - (local $l1349 i32) - (local $l1350 i32) - (local $l1351 i32) - (local $l1352 i32) - (local $l1353 i32) - (local $l1354 i32) - (local $l1355 i32) - (local $l1356 i32) - (local $l1357 i32) - (local $l1358 i32) - (local $l1359 i32) - (local $l1360 i32) - (local $l1361 i32) - (local $l1362 i32) - (local $l1363 i32) - (local $l1364 i32) - (local $l1365 i32) - (local $l1366 i32) - (local $l1367 i32) - (local $l1368 i32) - (local $l1369 i32) - (local $l1370 i32) - (local $l1371 i32) - (local $l1372 i32) - (local $l1373 i32) - (local $l1374 i32) - (local $l1375 i32) - (local $l1376 i32) - (local $l1377 i32) - (local $l1378 i32) - (local $l1379 i32) - (local $l1380 i32) - (local $l1381 i32) - (local $l1382 i32) - (local $l1383 i32) - (local $l1384 i32) - (local $l1385 i32) - (local $l1386 i32) - (local $l1387 i32) - (local $l1388 i32) - (local $l1389 i32) - (local $l1390 i32) - (local $l1391 i32) - (local $l1392 i32) - (local $l1393 i32) - (local $l1394 i32) - (local $l1395 i32) - (local $l1396 i32) - (local $l1397 i32) - (local $l1398 i32) - (local $l1399 i32) - (local $l1400 i32) - (local $l1401 i32) - (local $l1402 i32) - (local $l1403 i32) - (local $l1404 i32) - (local $l1405 i32) - (local $l1406 i32) - (local $l1407 i32) - (local $l1408 i32) - (local $l1409 i32) - (local $l1410 i32) - (local $l1411 i32) - (local $l1412 i32) - (local $l1413 i32) - (local $l1414 i32) - (local $l1415 i32) - (local $l1416 i32) - (local $l1417 i32) - (local $l1418 i32) - (local $l1419 i32) - (local $l1420 i32) - (local $l1421 i32) - (local $l1422 i32) - (local $l1423 i32) - (local $l1424 i32) - (local $l1425 i32) - (local $l1426 i32) - (local $l1427 i32) - (local $l1428 i32) - (local $l1429 i32) - (local $l1430 i32) - (local $l1431 i32) - (local $l1432 i32) - (local $l1433 i32) - (local $l1434 i32) - (local $l1435 i32) - (local $l1436 i32) - (local $l1437 i32) - (local $l1438 i32) - (local $l1439 i32) - (local $l1440 i32) - (local $l1441 i32) - (local $l1442 i32) - (local $l1443 i32) - (local $l1444 i32) - (local $l1445 i32) - (local $l1446 i32) - (local $l1447 i32) - (local $l1448 i32) - (local $l1449 i32) - (local $l1450 i32) - (local $l1451 i32) - (local $l1452 i32) - (local $l1453 i32) - (local $l1454 i32) - (local $l1455 i32) - (local $l1456 i32) - (local $l1457 i32) - (local $l1458 i32) - (local $l1459 i32) - (local $l1460 i32) - (local $l1461 i32) - (local $l1462 i32) - (local $l1463 i32) - (local $l1464 i32) - (local $l1465 i32) - (local $l1466 i32) - (local $l1467 i32) - (local $l1468 i32) - (local $l1469 i32) - (local $l1470 i32) - (local $l1471 i32) - (local $l1472 i32) - (local $l1473 i32) - (local $l1474 i32) - (local $l1475 i32) - (local $l1476 i32) - (local $l1477 i32) - (local $l1478 i32) - (local $l1479 i32) - (local $l1480 i32) - (local $l1481 i32) - (local $l1482 i32) - (local $l1483 i32) - (local $l1484 i32) - (local $l1485 i32) - (local $l1486 i32) - (local $l1487 i32) - (local $l1488 i32) - (local $l1489 i32) - (local $l1490 i32) - (local $l1491 i32) - (local $l1492 i32) - (local $l1493 i32) - (local $l1494 i32) - (local $l1495 i32) - (local $l1496 i32) - (local $l1497 i32) - (local $l1498 i32) - (local $l1499 i32) - (local $l1500 i32) - (local $l1501 i32) - (local $l1502 i32) - (local $l1503 i32) - (local $l1504 i32) - (local $l1505 i32) - (local $l1506 i32) - (local $l1507 i32) - (local $l1508 i32) - (local $l1509 i32) - (local $l1510 i32) - (local $l1511 i32) - (local $l1512 i32) - (local $l1513 i32) - (local $l1514 i32) - (local $l1515 i32) - (local $l1516 i32) - (local $l1517 i32) - (local $l1518 i32) - (local $l1519 i32) - (local $l1520 i32) - (local $l1521 i32) - (local $l1522 i32) - (local $l1523 i32) - (local $l1524 i32) - (local $l1525 i32) - (local $l1526 i32) - (local $l1527 i32) - (local $l1528 i32) - (local $l1529 i32) - (local $l1530 i32) - (local $l1531 i32) - (local $l1532 i32) - (local $l1533 i32) - (local $l1534 i32) - (local $l1535 i32) - (local $l1536 i32) - (local $l1537 i32) - (local $l1538 i32) - (local $l1539 i32) - (local $l1540 i32) - (local $l1541 i32) - (local $l1542 i32) - (local $l1543 i32) - (local $l1544 i32) - (local $l1545 i32) - (local $l1546 i32) - (local $l1547 i32) - (local $l1548 i32) - (local $l1549 i32) - (local $l1550 i32) - (local $l1551 i32) - (local $l1552 i32) - (local $l1553 i32) - (local $l1554 i32) - (local $l1555 i32) - (local $l1556 i32) - (local $l1557 i32) - (local $l1558 i32) - (local $l1559 i32) - (local $l1560 i32) - (local $l1561 i32) - (local $l1562 i32) - (local $l1563 i32) - (local $l1564 i32) - (local $l1565 i32) - (local $l1566 i32) - (local $l1567 i32) - (local $l1568 i32) - (local $l1569 i32) - (local $l1570 i32) - (local $l1571 i32) - (local $l1572 i32) - (local $l1573 i32) - (local $l1574 i32) - (local $l1575 i32) - (local $l1576 i32) - (local $l1577 i32) - (local $l1578 i32) - (local $l1579 i32) - (local $l1580 i32) - (local $l1581 i32) - (local $l1582 i32) - (local $l1583 i32) - (local $l1584 i32) - (local $l1585 i32) - (local $l1586 i32) - (local $l1587 i32) - (local $l1588 i32) - (local $l1589 i32) - (local $l1590 i32) - (local $l1591 i32) - (local $l1592 i32) - (local $l1593 i32) - (local $l1594 i32) - (local $l1595 i32) - (local $l1596 i32) - (local $l1597 i32) - (local $l1598 i32) - (local $l1599 i32) - (local $l1600 i32) - (local $l1601 i32) - (local $l1602 i32) - (local $l1603 i32) - (local $l1604 i32) - (local $l1605 i32) - (local $l1606 i32) - (local $l1607 i32) - (local $l1608 i32) - (local $l1609 i32) - (local $l1610 i32) - (local $l1611 i32) - (local $l1612 i32) - (local $l1613 i32) - (local $l1614 i32) - (local $l1615 i32) - (local $l1616 i32) - (local $l1617 i32) - (local $l1618 i32) - (local $l1619 i32) - (local $l1620 i32) - (local $l1621 i32) - (local $l1622 i32) - (local $l1623 i32) - (local $l1624 i32) - (local $l1625 i32) - (local $l1626 i32) - (local $l1627 i32) - (local $l1628 i32) - (local $l1629 i32) - (local $l1630 i32) - (local $l1631 i32) - (local $l1632 i32) - (local $l1633 i32) - (local $l1634 i32) - (local $l1635 i32) - (local $l1636 i32) - (local $l1637 i32) - (local $l1638 i32) - (local $l1639 i32) - (local $l1640 i32) - (local $l1641 i32) - (local $l1642 i32) - (local $l1643 i32) - (local $l1644 i32) - (local $l1645 i32) - (local $l1646 i32) - (local $l1647 i32) - (local $l1648 i32) - (local $l1649 i32) - (local $l1650 i32) - (local $l1651 i32) - (local $l1652 i32) - (local $l1653 i32) - (local $l1654 i32) - (local $l1655 i32) - (local $l1656 i32) - (local $l1657 i32) - (local $l1658 i32) - (local $l1659 i32) - (local $l1660 i32) - (local $l1661 i32) - (local $l1662 i32) - (local $l1663 i32) - (local $l1664 i32) - (local $l1665 i32) - (local $l1666 i32) - (local $l1667 i32) - (local $l1668 i32) - (local $l1669 i32) - (local $l1670 i32) - (local $l1671 i32) - (local $l1672 i32) - (local $l1673 i32) - (local $l1674 i32) - (local $l1675 i32) - (local $l1676 i32) - (local $l1677 i32) - (local $l1678 i32) - (local $l1679 i32) - (local $l1680 i32) - (local $l1681 i32) - (local $l1682 i32) - (local $l1683 i32) - (local $l1684 i32) - (local $l1685 i32) - (local $l1686 i32) - (local $l1687 i32) - (local $l1688 i32) - (local $l1689 i32) - (local $l1690 i32) - (local $l1691 i32) - (local $l1692 i32) - (local $l1693 i32) - (local $l1694 i32) - (local $l1695 i32) - (local $l1696 i32) - (local $l1697 i32) - (local $l1698 i32) - (local $l1699 i32) - (local $l1700 i32) - (local $l1701 i32) - (local $l1702 i32) - (local $l1703 i32) - (local $l1704 i32) - (local $l1705 i32) - (local $l1706 i32) - (local $l1707 i32) - (local $l1708 i32) - (local $l1709 i32) - (local $l1710 i32) - (local $l1711 i32) - (local $l1712 i32) - (local $l1713 i32) - (local $l1714 i32) - (local $l1715 i32) - (local $l1716 i32) - (local $l1717 i32) - (local $l1718 i32) - (local $l1719 i32) - (local $l1720 i32) - (local $l1721 i32) - (local $l1722 i32) - (local $l1723 i32) - (local $l1724 i32) - (local $l1725 i32) - (local $l1726 i32) - (local $l1727 i32) - (local $l1728 i32) - (local $l1729 i32) - (local $l1730 i32) - (local $l1731 i32) - (local $l1732 i32) - (local $l1733 i32) - (local $l1734 i32) - (local $l1735 i32) - (local $l1736 i32) - (local $l1737 i32) - (local $l1738 i32) - (local $l1739 i32) - (local $l1740 i32) - (local $l1741 i32) - (local $l1742 i32) - (local $l1743 i32) - (local $l1744 i32) - (local $l1745 i32) - (local $l1746 i32) - (local $l1747 i32) - (local $l1748 i32) - (local $l1749 i32) - (local $l1750 i32) - (local $l1751 i32) - (local $l1752 i32) - (local $l1753 i32) - (local $l1754 i32) - (local $l1755 i32) - (local $l1756 i32) - (local $l1757 i32) - (local $l1758 i32) - (local $l1759 i32) - (local $l1760 i32) - (local $l1761 i32) - (local $l1762 i32) - (local $l1763 i32) - (local $l1764 i32) - (local $l1765 i32) - (local $l1766 i32) - (local $l1767 i32) - (local $l1768 i32) - (local $l1769 i32) - (local $l1770 i32) - (local $l1771 i32) - (local $l1772 i32) - (local $l1773 i32) - (local $l1774 i32) - (local $l1775 i32) - (local $l1776 i32) - (local $l1777 i32) - (local $l1778 i32) - (local $l1779 i32) - (local $l1780 i32) - (local $l1781 i32) - (local $l1782 i32) - (local $l1783 i32) - (local $l1784 i32) - (local $l1785 i32) - (local $l1786 i32) - (local $l1787 i32) - (local $l1788 i32) - (local $l1789 i32) - (local $l1790 i32) - (local $l1791 i32) - (local $l1792 i32) - (local $l1793 i32) - (local $l1794 i32) - (local $l1795 i32) - (local $l1796 i32) - (local $l1797 i32) - (local $l1798 i32) - (local $l1799 i32) - (local $l1800 i32) - (local $l1801 i32) - (local $l1802 i32) - (local $l1803 i32) - (local $l1804 i32) - (local $l1805 i32) - (local $l1806 i32) - (local $l1807 i32) - (local $l1808 i32) - (local $l1809 i32) - (local $l1810 i32) - (local $l1811 i32) - (local $l1812 i32) - (local $l1813 i32) - (local $l1814 i32) - (local $l1815 i32) - (local $l1816 i32) - (local $l1817 i32) - (local $l1818 i32) - (local $l1819 i32) - (local $l1820 i32) - (local $l1821 i32) - (local $l1822 i32) - (local $l1823 i32) - (local $l1824 i32) - (local $l1825 i32) - (local $l1826 i32) - (local $l1827 i32) - (local $l1828 i32) - (local $l1829 i32) - (local $l1830 i32) - (local $l1831 i32) - (local $l1832 i32) - (local $l1833 i32) - (local $l1834 i32) - (local $l1835 i32) - (local $l1836 i32) - (local $l1837 i32) - (local $l1838 i32) - (local $l1839 i32) - (local $l1840 i32) - (local $l1841 i32) - (local $l1842 i32) - (local $l1843 i32) - (local $l1844 i32) - (local $l1845 i32) - (local $l1846 i32) - (local $l1847 i32) - (local $l1848 i32) - (local $l1849 i32) - (local $l1850 i32) - (local $l1851 i32) - (local $l1852 i32) - (local $l1853 i32) - (local $l1854 i32) - (local $l1855 i32) - (local $l1856 i32) - (local $l1857 i32) - (local $l1858 i32) - (local $l1859 i32) - (local $l1860 i32) - (local $l1861 i32) - (local $l1862 i32) - (local $l1863 i32) - (local $l1864 i32) - (local $l1865 i32) - (local $l1866 i32) - (local $l1867 i32) - (local $l1868 i32) - (local $l1869 i32) - (local $l1870 i32) - (local $l1871 i32) - (local $l1872 i32) - (local $l1873 i32) - (local $l1874 i32) - (local $l1875 i32) - (local $l1876 i32) - (local $l1877 i32) - (local $l1878 i32) - (local $l1879 i32) - (local $l1880 i32) - (local $l1881 i32) - (local $l1882 i32) - (local $l1883 i32) - (local $l1884 i32) - (local $l1885 i32) - (local $l1886 i32) - (local $l1887 i32) - (local $l1888 i32) - (local $l1889 i32) - (local $l1890 i32) - (local $l1891 i32) - (local $l1892 i32) - (local $l1893 i32) - (local $l1894 i32) - (local $l1895 i32) - (local $l1896 i32) - (local $l1897 i32) - (local $l1898 i32) - (local $l1899 i32) - (local $l1900 i32) - (local $l1901 i32) - (local $l1902 i32) - (local $l1903 i32) - (local $l1904 i32) - (local $l1905 i32) - (local $l1906 i32) - (local $l1907 i32) - (local $l1908 i32) - (local $l1909 i32) - (local $l1910 i32) - (local $l1911 i32) - (local $l1912 i32) - (local $l1913 i32) - (local $l1914 i32) - (local $l1915 i32) - (local $l1916 i32) - (local $l1917 i32) - (local $l1918 i32) - (local $l1919 i32) - (local $l1920 i32) - (local $l1921 i32) - (local $l1922 i32) - (local $l1923 i32) - (local $l1924 i32) - (local $l1925 i32) - (local $l1926 i32) - (local $l1927 i32) - (local $l1928 i32) - (local $l1929 i32) - (local $l1930 i32) - (local $l1931 i32) - (local $l1932 i32) - (local $l1933 i32) - (local $l1934 i32) - (local $l1935 i32) - (local $l1936 i32) - (local $l1937 i32) - (local $l1938 i32) - (local $l1939 i32) - (local $l1940 i32) - (local $l1941 i32) - (local $l1942 i32) - (local $l1943 i32) - (local $l1944 i32) - (local $l1945 i32) - (local $l1946 i32) - (local $l1947 i32) - (local $l1948 i32) - (local $l1949 i32) - (local $l1950 i32) - (local $l1951 i32) - (local $l1952 i32) - (local $l1953 i32) - (local $l1954 i32) - (local $l1955 i32) - (local $l1956 i32) - (local $l1957 i32) - (local $l1958 i32) - (local $l1959 i32) - (local $l1960 i32) - (local $l1961 i32) - (local $l1962 i32) - (local $l1963 i32) - (local $l1964 i32) - (local $l1965 i32) - (local $l1966 i32) - (local $l1967 i32) - (local $l1968 i32) - (local $l1969 i32) - (local $l1970 i32) - (local $l1971 i32) - (local $l1972 i32) - (local $l1973 i32) - (local $l1974 i32) - (local $l1975 i32) - (local $l1976 i32) - (local $l1977 i32) - (local $l1978 i32) - (local $l1979 i32) - (local $l1980 i32) - (local $l1981 i32) - (local $l1982 i32) - (local $l1983 i32) - (local $l1984 i32) - (local $l1985 i32) - (local $l1986 i32) - (local $l1987 i32) - (local $l1988 i32) - (local $l1989 i32) - (local $l1990 i32) - (local $l1991 i32) - (local $l1992 i32) - (local $l1993 i32) - (local $l1994 i32) - (local $l1995 i32) - (local $l1996 i32) - (local $l1997 i32) - (local $l1998 i32) - (local $l1999 i32) - (local $l2000 i32) - (local $l2001 i32) - (local $l2002 i32) - (local $l2003 i32) - (local $l2004 i32) - (local $l2005 i32) - (local $l2006 i32) - (local $l2007 i32) - (local $l2008 i32) - (local $l2009 i32) - (local $l2010 i32) - (local $l2011 i32) - (local $l2012 i32) - (local $l2013 i32) - (local $l2014 i32) - (local $l2015 i32) - (local $l2016 i32) - (local $l2017 i32) - (local $l2018 i32) - (local $l2019 i32) - (local $l2020 i32) - (local $l2021 i32) - (local $l2022 i32) - (local $l2023 i32) - (local $l2024 i32) - (local $l2025 i32) - (local $l2026 i32) - (local $l2027 i32) - (local $l2028 i32) - (local $l2029 i32) - (local $l2030 i32) - (local $l2031 i32) - (local $l2032 i32) - (local $l2033 i32) - (local $l2034 i32) - (local $l2035 i32) - (local $l2036 i32) - (local $l2037 i32) - (local $l2038 i32) - (local $l2039 i32) - (local $l2040 i32) - (local $l2041 i32) - (local $l2042 i32) - (local $l2043 i32) - (local $l2044 i32) - (local $l2045 i32) - (local $l2046 i32) - (local $l2047 i32) - (local $l2048 i32) - (local $l2049 i32) - (local $l2050 i32) - (local $l2051 i32) - (local $l2052 i32) - (local $l2053 i32) - (local $l2054 i32) - (local $l2055 i32) - (local $l2056 i32) - (local $l2057 i32) - (local $l2058 i32) - (local $l2059 i32) - (local $l2060 i32) - (local $l2061 i32) - (local $l2062 i32) - (local $l2063 i32) - (local $l2064 i32) - (local $l2065 i32) - (local $l2066 i32) - (local $l2067 i32) - (local $l2068 i32) - (local $l2069 i32) - (local $l2070 i32) - (local $l2071 i32) - (local $l2072 i32) - (local $l2073 i32) - (local $l2074 i32) - (local $l2075 i32) - (local $l2076 i32) - (local $l2077 i32) - (local $l2078 i32) - (local $l2079 i32) - (local $l2080 i32) - (local $l2081 i32) - (local $l2082 i32) - (local $l2083 i32) - (local $l2084 i32) - (local $l2085 i32) - (local $l2086 i32) - (local $l2087 i32) - (local $l2088 i32) - (local $l2089 i32) - (local $l2090 i32) - (local $l2091 i32) - (local $l2092 i32) - (local $l2093 i32) - (local $l2094 i32) - (local $l2095 i32) - (local $l2096 i32) - (local $l2097 i32) - (local $l2098 i32) - (local $l2099 i32) - (local $l2100 i32) - (local $l2101 i32) - (local $l2102 i32) - (local $l2103 i32) - (local $l2104 i32) - (local $l2105 i32) - (local $l2106 i32) - (local $l2107 i32) - (local $l2108 i32) - (local $l2109 i32) - (local $l2110 i32) - (local $l2111 i32) - (local $l2112 i32) - (local $l2113 i32) - (local $l2114 i32) - (local $l2115 i32) - (local $l2116 i32) - (local $l2117 i32) - (local $l2118 i32) - (local $l2119 i32) - (local $l2120 i32) - (local $l2121 i32) - (local $l2122 i32) - (local $l2123 i32) - (local $l2124 i32) - (local $l2125 i32) - (local $l2126 i32) - (local $l2127 i32) - (local $l2128 i32) - (local $l2129 i32) - (local $l2130 i32) - (local $l2131 i32) - (local $l2132 i32) - (local $l2133 i32) - (local $l2134 i32) - (local $l2135 i32) - (local $l2136 i32) - (local $l2137 i32) - (local $l2138 i32) - (local $l2139 i32) - (local $l2140 i32) - (local $l2141 i32) - (local $l2142 i32) - (local $l2143 i32) - (local $l2144 i32) - (local $l2145 i32) - (local $l2146 i32) - (local $l2147 i32) - (local $l2148 i32) - (local $l2149 i32) - (local $l2150 i32) - (local $l2151 i32) - (local $l2152 i32) - (local $l2153 i32) - (local $l2154 i32) - (local $l2155 i32) - (local $l2156 i32) - (local $l2157 i32) - (local $l2158 i32) - (local $l2159 i32) - (local $l2160 i32) - (local $l2161 i32) - (local $l2162 i32) - (local $l2163 i32) - (local $l2164 i32) - (local $l2165 i32) - (local $l2166 i32) - (local $l2167 i32) - (local $l2168 i32) - (local $l2169 i32) - (local $l2170 i32) - (local $l2171 i32) - (local $l2172 i32) - (local $l2173 i32) - (local $l2174 i32) - (local $l2175 i32) - (local $l2176 i32) - (local $l2177 i32) - (local $l2178 i32) - (local $l2179 i32) - (local $l2180 i32) - (local $l2181 i32) - (local $l2182 i32) - (local $l2183 i32) - (local $l2184 i32) - (local $l2185 i32) - (local $l2186 i32) - (local $l2187 i32) - (local $l2188 i32) - (local $l2189 i32) - (local $l2190 i32) - (local $l2191 i32) - (local $l2192 i32) - (local $l2193 i32) - (local $l2194 i32) - (local $l2195 i32) - (local $l2196 i32) - (local $l2197 i32) - (local $l2198 i32) - (local $l2199 i32) - (local $l2200 i32) - (local $l2201 i32) - (local $l2202 i32) - (local $l2203 i32) - (local $l2204 i32) - (local $l2205 i32) - (local $l2206 i32) - (local $l2207 i32) - (local $l2208 i32) - (local $l2209 i32) - (local $l2210 i32) - (local $l2211 i32) - (local $l2212 i32) - (local $l2213 i32) - (local $l2214 i32) - (local $l2215 i32) - (local $l2216 i32) - (local $l2217 i32) - (local $l2218 i32) - (local $l2219 i32) - (local $l2220 i32) - (local $l2221 i32) - (local $l2222 i32) - (local $l2223 i32) - (local $l2224 i32) - (local $l2225 i32) - (local $l2226 i32) - (local $l2227 i32) - (local $l2228 i32) - (local $l2229 i32) - (local $l2230 i32) - (local $l2231 i32) - (local $l2232 i32) - (local $l2233 i32) - (local $l2234 i32) - (local $l2235 i32) - (local $l2236 i32) - (local $l2237 i32) - (local $l2238 i32) - (local $l2239 i32) - (local $l2240 i32) - (local $l2241 i32) - (local $l2242 i32) - (local $l2243 i32) - (local $l2244 i32) - (local $l2245 i32) - (local $l2246 i32) - (local $l2247 i32) - (local $l2248 i32) - (local $l2249 i32) - (local $l2250 i32) - (local $l2251 i32) - (local $l2252 i32) - (local $l2253 i32) - (local $l2254 i32) - (local $l2255 i32) - (local $l2256 i32) - (local $l2257 i32) - (local $l2258 i32) - (local $l2259 i32) - (local $l2260 i32) - (local $l2261 i32) - (local $l2262 i32) - (local $l2263 i32) - (local $l2264 i32) - (local $l2265 i32) - (local $l2266 i32) - (local $l2267 i32) - (local $l2268 i32) - (local $l2269 i32) - (local $l2270 i32) - (local $l2271 i32) - (local $l2272 i32) - (local $l2273 i32) - (local $l2274 i32) - (local $l2275 i32) - (local $l2276 i32) - (local $l2277 i32) - (local $l2278 i32) - (local $l2279 i32) - (local $l2280 i32) - (local $l2281 i32) - (local $l2282 i32) - (local $l2283 i32) - (local $l2284 i32) - (local $l2285 i32) - (local $l2286 i32) - (local $l2287 i32) - (local $l2288 i32) - (local $l2289 i32) - (local $l2290 i32) - (local $l2291 i32) - (local $l2292 i32) - (local $l2293 i32) - (local $l2294 i32) - (local $l2295 i32) - (local $l2296 i32) - (local $l2297 i32) - (local $l2298 i32) - (local $l2299 i32) - (local $l2300 i32) - (local $l2301 i32) - (local $l2302 i32) - (local $l2303 i32) - (local $l2304 i32) - (local $l2305 i32) - (local $l2306 i32) - (local $l2307 i32) - (local $l2308 i32) - (local $l2309 i32) - (local $l2310 i32) - (local $l2311 i32) - (local $l2312 i32) - (local $l2313 i32) - (local $l2314 i32) - (local $l2315 i32) - (local $l2316 i32) - (local $l2317 i32) - (local $l2318 i32) - (local $l2319 i32) - (local $l2320 i32) - (local $l2321 i32) - (local $l2322 i32) - (local $l2323 i32) - (local $l2324 i32) - (local $l2325 i32) - (local $l2326 i32) - (local $l2327 i32) - (local $l2328 i32) - (local $l2329 i32) - (local $l2330 i32) - (local $l2331 i32) - (local $l2332 i32) - (local $l2333 i32) - (local $l2334 i32) - (local $l2335 i32) - (local $l2336 i32) - (local $l2337 i32) - (local $l2338 i32) - (local $l2339 i32) - (local $l2340 i32) - (local $l2341 i32) - (local $l2342 i32) - (local $l2343 i32) - (local $l2344 i32) - (local $l2345 i32) - (local $l2346 i32) - (local $l2347 i32) - (local $l2348 i32) - (local $l2349 i32) - (local $l2350 i32) - (local $l2351 i32) - (local $l2352 i32) - (local $l2353 i32) - (local $l2354 i32) - (local $l2355 i32) - (local $l2356 i32) - (local $l2357 i32) - (local $l2358 i32) - (local $l2359 i32) - (local $l2360 i32) - (local $l2361 i32) - (local $l2362 i32) - (local $l2363 i32) - (local $l2364 i32) - (local $l2365 i32) - (local $l2366 i32) - (local $l2367 i32) - (local $l2368 i32) - (local $l2369 i32) - (local $l2370 i32) - (local $l2371 i32) - (local $l2372 i32) - (local $l2373 i32) - (local $l2374 i32) - (local $l2375 i32) - (local $l2376 i32) - (local $l2377 i32) - (local $l2378 i32) - (local $l2379 i32) - (local $l2380 i32) - (local $l2381 i32) - (local $l2382 i32) - (local $l2383 i32) - (local $l2384 i32) - (local $l2385 i32) - (local $l2386 i32) - (local $l2387 i32) - (local $l2388 i32) - (local $l2389 i32) - (local $l2390 i32) - (local $l2391 i32) - (local $l2392 i32) - (local $l2393 i32) - (local $l2394 i32) - (local $l2395 i32) - (local $l2396 i32) - (local $l2397 i32) - (local $l2398 i32) - (local $l2399 i32) - (local $l2400 i32) - (local $l2401 i32) - (local $l2402 i32) - (local $l2403 i32) - (local $l2404 i32) - (local $l2405 i32) - (local $l2406 i32) - (local $l2407 i32) - (local $l2408 i32) - (local $l2409 i32) - (local $l2410 i32) - (local $l2411 i32) - (local $l2412 i32) - (local $l2413 i32) - (local $l2414 i32) - (local $l2415 i32) - (local $l2416 i32) - (local $l2417 i32) - (local $l2418 i32) - (local $l2419 i32) - (local $l2420 i32) - (local $l2421 i32) - (local $l2422 i32) - (local $l2423 i32) - (local $l2424 i32) - (local $l2425 i32) - (local $l2426 i32) - (local $l2427 i32) - (local $l2428 i32) - (local $l2429 i32) - (local $l2430 i32) - (local $l2431 i32) - (local $l2432 i32) - (local $l2433 i32) - (local $l2434 i32) - (local $l2435 i32) - (local $l2436 i32) - (local $l2437 i32) - (local $l2438 i32) - (local $l2439 i32) - (local $l2440 i32) - (local $l2441 i32) - (local $l2442 i32) - (local $l2443 i32) - (local $l2444 i32) - (local $l2445 i32) - (local $l2446 i32) - (local $l2447 i32) - (local $l2448 i32) - (local $l2449 i32) - (local $l2450 i32) - (local $l2451 i32) - (local $l2452 i32) - (local $l2453 i32) - (local $l2454 i32) - (local $l2455 i32) - (local $l2456 i32) - (local $l2457 i32) - (local $l2458 i32) - (local $l2459 i32) - (local $l2460 i32) - (local $l2461 i32) - (local $l2462 i32) - (local $l2463 i32) - (local $l2464 i32) - (local $l2465 i32) - (local $l2466 i32) - (local $l2467 i32) - (local $l2468 i32) - (local $l2469 i32) - (local $l2470 i32) - (local $l2471 i32) - (local $l2472 i32) - (local $l2473 i32) - (local $l2474 i32) - (local $l2475 i32) - (local $l2476 i32) - (local $l2477 i32) - (local $l2478 i32) - (local $l2479 i32) - (local $l2480 i32) - (local $l2481 i32) - (local $l2482 i32) - (local $l2483 i32) - (local $l2484 i32) - (local $l2485 i32) - (local $l2486 i32) - (local $l2487 i32) - (local $l2488 i32) - (local $l2489 i32) - (local $l2490 i32) - (local $l2491 i32) - (local $l2492 i32) - (local $l2493 i32) - (local $l2494 i32) - (local $l2495 i32) - (local $l2496 i32) - (local $l2497 i32) - (local $l2498 i32) - (local $l2499 i32) - (local $l2500 i32) - (local $l2501 i32) - (local $l2502 i32) - (local $l2503 i32) - (local $l2504 i32) - (local $l2505 i32) - (local $l2506 i32) - (local $l2507 i32) - (local $l2508 i32) - (local $l2509 i32) - (local $l2510 i32) - (local $l2511 i32) - (local $l2512 i32) - (local $l2513 i32) - (local $l2514 i32) - (local $l2515 i32) - (local $l2516 i32) - (local $l2517 i32) - (local $l2518 i32) - (local $l2519 i32) - (local $l2520 i32) - (local $l2521 i32) - (local $l2522 i32) - (local $l2523 i32) - (local $l2524 i32) - (local $l2525 i32) - (local $l2526 i32) - (local $l2527 i32) - (local $l2528 i32) - (local $l2529 i32) - (local $l2530 i32) - (local $l2531 i32) - (local $l2532 i32) - (local $l2533 i32) - (local $l2534 i32) - (local $l2535 i32) - (local $l2536 i32) - (local $l2537 i32) - (local $l2538 i32) - (local $l2539 i32) - (local $l2540 i32) - (local $l2541 i32) - (local $l2542 i32) - (local $l2543 i32) - (local $l2544 i32) - (local $l2545 i32) - (local $l2546 i32) - (local $l2547 i32) - (local $l2548 i32) - (local $l2549 i32) - (local $l2550 i32) - (local $l2551 i32) - (local $l2552 i32) - (local $l2553 i32) - (local $l2554 i32) - (local $l2555 i32) - (local $l2556 i32) - (local $l2557 i32) - (local $l2558 i32) - (local $l2559 i32) - (local $l2560 i32) - (local $l2561 i32) - (local $l2562 i32) - (local $l2563 i32) - (local $l2564 i32) - (local $l2565 i32) - (local $l2566 i32) - (local $l2567 i32) - (local $l2568 i32) - (local $l2569 i32) - (local $l2570 i32) - (local $l2571 i32) - (local $l2572 i32) - (local $l2573 i32) - (local $l2574 i32) - (local $l2575 i32) - (local $l2576 i32) - (local $l2577 i32) - (local $l2578 i32) - (local $l2579 i32) - (local $l2580 i32) - (local $l2581 i32) - (local $l2582 i32) - (local $l2583 i32) - (local $l2584 i32) - (local $l2585 i32) - (local $l2586 i32) - (local $l2587 i32) - (local $l2588 i32) - (local $l2589 i32) - (local $l2590 i32) - (local $l2591 i32) - (local $l2592 i32) - (local $l2593 i32) - (local $l2594 i32) - (local $l2595 i32) - (local $l2596 i32) - (local $l2597 i32) - (local $l2598 i32) - (local $l2599 i32) - (local $l2600 i32) - (local $l2601 i32) - (local $l2602 i32) - (local $l2603 i32) - (local $l2604 i32) - (local $l2605 i32) - (local $l2606 i32) - (local $l2607 i32) - (local $l2608 i32) - (local $l2609 i32) - (local $l2610 i32) - (local $l2611 i32) - (local $l2612 i32) - (local $l2613 i32) - (local $l2614 i32) - (local $l2615 i32) - (local $l2616 i32) - (local $l2617 i32) - (local $l2618 i32) - (local $l2619 i32) - (local $l2620 i32) - (local $l2621 i32) - (local $l2622 i32) - (local $l2623 i32) - (local $l2624 i32) - (local $l2625 i32) - (local $l2626 i32) - (local $l2627 i32) - (local $l2628 i32) - (local $l2629 i32) - (local $l2630 i32) - (local $l2631 i32) - (local $l2632 i32) - (local $l2633 i32) - (local $l2634 i32) - (local $l2635 i32) - (local $l2636 i32) - (local $l2637 i32) - (local $l2638 i32) - (local $l2639 i32) - (local $l2640 i32) - (local $l2641 i32) - (local $l2642 i32) - (local $l2643 i32) - (local $l2644 i32) - (local $l2645 i32) - (local $l2646 i32) - (local $l2647 i32) - (local $l2648 i32) - (local $l2649 i32) - (local $l2650 i32) - (local $l2651 i32) - (local $l2652 i32) - (local $l2653 i32) - (local $l2654 i32) - (local $l2655 i32) - (local $l2656 i32) - (local $l2657 i32) - (local $l2658 i32) - (local $l2659 i32) - (local $l2660 i32) - (local $l2661 i32) - (local $l2662 i32) - (local $l2663 i32) - (local $l2664 i32) - (local $l2665 i32) - (local $l2666 i32) - (local $l2667 i32) - (local $l2668 i32) - (local $l2669 i32) - (local $l2670 i32) - (local $l2671 i32) - (local $l2672 i32) - (local $l2673 i32) - (local $l2674 i32) - (local $l2675 i32) - (local $l2676 i32) - (local $l2677 i32) - (local $l2678 i32) - (local $l2679 i32) - (local $l2680 i32) - (local $l2681 i32) - (local $l2682 i32) - (local $l2683 i32) - (local $l2684 i32) - (local $l2685 i32) - (local $l2686 i32) - (local $l2687 i32) - (local $l2688 i32) - (local $l2689 i32) - (local $l2690 i32) - (local $l2691 i32) - (local $l2692 i32) - (local $l2693 i32) - (local $l2694 i32) - (local $l2695 i32) - (local $l2696 i32) - (local $l2697 i32) - (local $l2698 i32) - (local $l2699 i32) - (local $l2700 i32) - (local $l2701 i32) - (local $l2702 i32) - (local $l2703 i32) - (local $l2704 i32) - (local $l2705 i32) - (local $l2706 i32) - (local $l2707 i32) - (local $l2708 i32) - (local $l2709 i32) - (local $l2710 i32) - (local $l2711 i32) - (local $l2712 i32) - (local $l2713 i32) - (local $l2714 i32) - (local $l2715 i32) - (local $l2716 i32) - (local $l2717 i32) - (local $l2718 i32) - (local $l2719 i32) - (local $l2720 i32) - (local $l2721 i32) - (local $l2722 i32) - (local $l2723 i32) - (local $l2724 i32) - (local $l2725 i32) - (local $l2726 i32) - (local $l2727 i32) - (local $l2728 i32) - (local $l2729 i32) - (local $l2730 i32) - (local $l2731 i32) - (local $l2732 i32) - (local $l2733 i32) - (local $l2734 i32) - (local $l2735 i32) - (local $l2736 i32) - (local $l2737 i32) - (local $l2738 i32) - (local $l2739 i32) - (local $l2740 i32) - (local $l2741 i32) - (local $l2742 i32) - (local $l2743 i32) - (local $l2744 i32) - (local $l2745 i32) - (local $l2746 i32) - (local $l2747 i32) - (local $l2748 i32) - (local $l2749 i32) - (local $l2750 i32) - (local $l2751 i32) - (local $l2752 i32) - (local $l2753 i32) - (local $l2754 i32) - (local $l2755 i32) - (local $l2756 i32) - (local $l2757 i32) - (local $l2758 i32) - (local $l2759 i32) - (local $l2760 i32) - (local $l2761 i32) - (local $l2762 i32) - (local $l2763 i32) - (local $l2764 i32) - (local $l2765 i32) - (local $l2766 i32) - (local $l2767 i32) - (local $l2768 i32) - (local $l2769 i32) - (local $l2770 i32) - (local $l2771 i32) - (local $l2772 i32) - (local $l2773 i32) - (local $l2774 i32) - (local $l2775 i32) - (local $l2776 i32) - (local $l2777 i32) - (local $l2778 i32) - (local $l2779 i32) - (local $l2780 i32) - (local $l2781 i32) - (local $l2782 i32) - (local $l2783 i32) - (local $l2784 i32) - (local $l2785 i32) - (local $l2786 i32) - (local $l2787 i32) - (local $l2788 i32) - (local $l2789 i32) - (local $l2790 i32) - (local $l2791 i32) - (local $l2792 i32) - (local $l2793 i32) - (local $l2794 i32) - (local $l2795 i32) - (local $l2796 i32) - (local $l2797 i32) - (local $l2798 i32) - (local $l2799 i32) - (local $l2800 i32) - (local $l2801 i32) - (local $l2802 i32) - (local $l2803 i32) - (local $l2804 i32) - (local $l2805 i32) - (local $l2806 i32) - (local $l2807 i32) - (local $l2808 i32) - (local $l2809 i32) - (local $l2810 i32) - (local $l2811 i32) - (local $l2812 i32) - (local $l2813 i32) - (local $l2814 i32) - (local $l2815 i32) - (local $l2816 i32) - (local $l2817 i32) - (local $l2818 i32) - (local $l2819 i32) - (local $l2820 i32) - (local $l2821 i32) - (local $l2822 i32) - (local $l2823 i32) - (local $l2824 i32) - (local $l2825 i32) - (local $l2826 i32) - (local $l2827 i32) - (local $l2828 i32) - (local $l2829 i32) - (local $l2830 i32) - (local $l2831 i32) - (local $l2832 i32) - (local $l2833 i32) - (local $l2834 i32) - (local $l2835 i32) - (local $l2836 i32) - (local $l2837 i32) - (local $l2838 i32) - (local $l2839 i32) - (local $l2840 i32) - (local $l2841 i32) - (local $l2842 i32) - (local $l2843 i32) - (local $l2844 i32) - (local $l2845 i32) - (local $l2846 i32) - (local $l2847 i32) - (local $l2848 i32) - (local $l2849 i32) - (local $l2850 i32) - (local $l2851 i32) - (local $l2852 i32) - (local $l2853 i32) - (local $l2854 i32) - (local $l2855 i32) - (local $l2856 i32) - (local $l2857 i32) - (local $l2858 i32) - (local $l2859 i32) - (local $l2860 i32) - (local $l2861 i32) - (local $l2862 i32) - (local $l2863 i32) - (local $l2864 i32) - (local $l2865 i32) - (local $l2866 i32) - (local $l2867 i32) - (local $l2868 i32) - (local $l2869 i32) - (local $l2870 i32) - (local $l2871 i32) - (local $l2872 i32) - (local $l2873 i32) - (local $l2874 i32) - (local $l2875 i32) - (local $l2876 i32) - (local $l2877 i32) - (local $l2878 i32) - (local $l2879 i32) - (local $l2880 i32) - (local $l2881 i32) - (local $l2882 i32) - (local $l2883 i32) - (local $l2884 i32) - (local $l2885 i32) - (local $l2886 i32) - (local $l2887 i32) - (local $l2888 i32) - (local $l2889 i32) - (local $l2890 i32) - (local $l2891 i32) - (local $l2892 i32) - (local $l2893 i32) - (local $l2894 i32) - (local $l2895 i32) - (local $l2896 i32) - (local $l2897 i32) - (local $l2898 i32) - (local $l2899 i32) - (local $l2900 i32) - (local $l2901 i32) - (local $l2902 i32) - (local $l2903 i32) - (local $l2904 i32) - (local $l2905 i32) - (local $l2906 i32) - (local $l2907 i32) - (local $l2908 i32) - (local $l2909 i32) - (local $l2910 i32) - (local $l2911 i32) - (local $l2912 i32) - (local $l2913 i32) - (local $l2914 i32) - (local $l2915 i32) - (local $l2916 i32) - (local $l2917 i32) - (local $l2918 i32) - (local $l2919 i32) - (local $l2920 i32) - (local $l2921 i32) - (local $l2922 i32) - (local $l2923 i32) - (local $l2924 i32) - (local $l2925 i32) - (local $l2926 i32) - (local $l2927 i32) - (local $l2928 i32) - (local $l2929 i32) - (local $l2930 i32) - (local $l2931 i32) - (local $l2932 i32) - (local $l2933 i32) - (local $l2934 i32) - (local $l2935 i32) - (local $l2936 i32) - (local $l2937 i32) - (local $l2938 i32) - (local $l2939 i32) - (local $l2940 i32) - (local $l2941 i32) - (local $l2942 i32) - (local $l2943 i32) - (local $l2944 i32) - (local $l2945 i32) - (local $l2946 i32) - (local $l2947 i32) - (local $l2948 i32) - (local $l2949 i32) - (local $l2950 i32) - (local $l2951 i32) - (local $l2952 i32) - (local $l2953 i32) - (local $l2954 i32) - (local $l2955 i32) - (local $l2956 i32) - (local $l2957 i32) - (local $l2958 i32) - (local $l2959 i32) - (local $l2960 i32) - (local $l2961 i32) - (local $l2962 i32) - (local $l2963 i32) - (local $l2964 i32) - (local $l2965 i32) - (local $l2966 i32) - (local $l2967 i32) - (local $l2968 i32) - (local $l2969 i32) - (local $l2970 i32) - (local $l2971 i32) - (local $l2972 i32) - (local $l2973 i32) - (local $l2974 i32) - (local $l2975 i32) - (local $l2976 i32) - (local $l2977 i32) - (local $l2978 i32) - (local $l2979 i32) - (local $l2980 i32) - (local $l2981 i32) - (local $l2982 i32) - (local $l2983 i32) - (local $l2984 i32) - (local $l2985 i32) - (local $l2986 i32) - (local $l2987 i32) - (local $l2988 i32) - (local $l2989 i32) - (local $l2990 i32) - (local $l2991 i32) - (local $l2992 i32) - (local $l2993 i32) - (local $l2994 i32) - (local $l2995 i32) - (local $l2996 i32) - (local $l2997 i32) - (local $l2998 i32) - (local $l2999 i32) - (local $l3000 i32) - (local $l3001 i32) - (local $l3002 i32) - (local $l3003 i32) - (local $l3004 i32) - (local $l3005 i32) - (local $l3006 i32) - (local $l3007 i32) - (local $l3008 i32) - (local $l3009 i32) - (local $l3010 i32) - (local $l3011 i32) - (local $l3012 i32) - (local $l3013 i32) - (local $l3014 i32) - (local $l3015 i32) - (local $l3016 i32) - (local $l3017 i32) - (local $l3018 i32) - (local $l3019 i32) - (local $l3020 i32) - (local $l3021 i32) - (local $l3022 i32) - (local $l3023 i32) - (local $l3024 i32) - (local $l3025 i32) - (local $l3026 i32) - (local $l3027 i32) - (local $l3028 i32) - (local $l3029 i32) - (local $l3030 i32) - (local $l3031 i32) - (local $l3032 i32) - (local $l3033 i32) - (local $l3034 i32) - (local $l3035 i32) - (local $l3036 i32) - (local $l3037 i32) - (local $l3038 i32) - (local $l3039 i32) - (local $l3040 i32) - (local $l3041 i32) - (local $l3042 i32) - (local $l3043 i32) - (local $l3044 i32) - (local $l3045 i32) - (local $l3046 i32) - (local $l3047 i32) - (local $l3048 i32) - (local $l3049 i32) - (local $l3050 i32) - (local $l3051 i32) - (local $l3052 i32) - (local $l3053 i32) - (local $l3054 i32) - (local $l3055 i32) - (local $l3056 i32) - (local $l3057 i32) - (local $l3058 i32) - (local $l3059 i32) - (local $l3060 i32) - (local $l3061 i32) - (local $l3062 i32) - (local $l3063 i32) - (local $l3064 i32) - (local $l3065 i32) - (local $l3066 i32) - (local $l3067 i32) - (local $l3068 i32) - (local $l3069 i32) - (local $l3070 i32) - (local $l3071 i32) - (local $l3072 i32) - (local $l3073 i32) - (local $l3074 i32) - (local $l3075 i32) - (local $l3076 i32) - (local $l3077 i32) - (local $l3078 i32) - (local $l3079 i32) - (local $l3080 i32) - (local $l3081 i32) - (local $l3082 i32) - (local $l3083 i32) - (local $l3084 i32) - (local $l3085 i32) - (local $l3086 i32) - (local $l3087 i32) - (local $l3088 i32) - (local $l3089 i32) - (local $l3090 i32) - (local $l3091 i32) - (local $l3092 i32) - (local $l3093 i32) - (local $l3094 i32) - (local $l3095 i32) - (local $l3096 i32) - (local $l3097 i32) - (local $l3098 i32) - (local $l3099 i32) - (local $l3100 i32) - (local $l3101 i32) - (local $l3102 i32) - (local $l3103 i32) - (local $l3104 i32) - (local $l3105 i32) - (local $l3106 i32) - (local $l3107 i32) - (local $l3108 i32) - (local $l3109 i32) - (local $l3110 i32) - (local $l3111 i32) - (local $l3112 i32) - (local $l3113 i32) - (local $l3114 i32) - (local $l3115 i32) - (local $l3116 i32) - (local $l3117 i32) - (local $l3118 i32) - (local $l3119 i32) - (local $l3120 i32) - (local $l3121 i32) - (local $l3122 i32) - (local $l3123 i32) - (local $l3124 i32) - (local $l3125 i32) - (local $l3126 i32) - (local $l3127 i32) - (local $l3128 i32) - (local $l3129 i32) - (local $l3130 i32) - (local $l3131 i32) - (local $l3132 i32) - (local $l3133 i32) - (local $l3134 i32) - (local $l3135 i32) - (local $l3136 i32) - (local $l3137 i32) - (local $l3138 i32) - (local $l3139 i32) - (local $l3140 i32) - (local $l3141 i32) - (local $l3142 i32) - (local $l3143 i32) - (local $l3144 i32) - (local $l3145 i32) - (local $l3146 i32) - (local $l3147 i32) - (local $l3148 i32) - (local $l3149 i32) - (local $l3150 i32) - (local $l3151 i32) - (local $l3152 i32) - (local $l3153 i32) - (local $l3154 i32) - (local $l3155 i32) - (local $l3156 i32) - (local $l3157 i32) - (local $l3158 i32) - (local $l3159 i32) - (local $l3160 i32) - (local $l3161 i32) - (local $l3162 i32) - (local $l3163 i32) - (local $l3164 i32) - (local $l3165 i32) - (local $l3166 i32) - (local $l3167 i32) - (local $l3168 i32) - (local $l3169 i32) - (local $l3170 i32) - (local $l3171 i32) - (local $l3172 i32) - (local $l3173 i32) - (local $l3174 i32) - (local $l3175 i32) - (local $l3176 i32) - (local $l3177 i32) - (local $l3178 i32) - (local $l3179 i32) - (local $l3180 i32) - (local $l3181 i32) - (local $l3182 i32) - (local $l3183 i32) - (local $l3184 i32) - (local $l3185 i32) - (local $l3186 i32) - (local $l3187 i32) - (local $l3188 i32) - (local $l3189 i32) - (local $l3190 i32) - (local $l3191 i32) - (local $l3192 i32) - (local $l3193 i32) - (local $l3194 i32) - (local $l3195 i32) - (local $l3196 i32) - (local $l3197 i32) - (local $l3198 i32) - (local $l3199 i32) - (local $l3200 i32) - (local $l3201 i32) - (local $l3202 i32) - (local $l3203 i32) - (local $l3204 i32) - (local $l3205 i32) - (local $l3206 i32) - (local $l3207 i32) - (local $l3208 i32) - (local $l3209 i32) - (local $l3210 i32) - (local $l3211 i32) - (local $l3212 i32) - (local $l3213 i32) - (local $l3214 i32) - (local $l3215 i32) - (local $l3216 i32) - (local $l3217 i32) - (local $l3218 i32) - (local $l3219 i32) - (local $l3220 i32) - (local $l3221 i32) - (local $l3222 i32) - (local $l3223 i32) - (local $l3224 i32) - (local $l3225 i32) - (local $l3226 i32) - (local $l3227 i32) - (local $l3228 i32) - (local $l3229 i32) - (local $l3230 i32) - (local $l3231 i32) - (local $l3232 i32) - (local $l3233 i32) - (local $l3234 i32) - (local $l3235 i32) - (local $l3236 i32) - (local $l3237 i32) - (local $l3238 i32) - (local $l3239 i32) - (local $l3240 i32) - (local $l3241 i32) - (local $l3242 i32) - (local $l3243 i32) - (local $l3244 i32) - (local $l3245 i32) - (local $l3246 i32) - (local $l3247 i32) - (local $l3248 i32) - (local $l3249 i32) - (local $l3250 i32) - (local $l3251 i32) - (local $l3252 i32) - (local $l3253 i32) - (local $l3254 i32) - (local $l3255 i32) - (local $l3256 i32) - (local $l3257 i32) - (local $l3258 i32) - (local $l3259 i32) - (local $l3260 i32) - (local $l3261 i32) - (local $l3262 i32) - (local $l3263 i32) - (local $l3264 i32) - (local $l3265 i32) - (local $l3266 i32) - (local $l3267 i32) - (local $l3268 i32) - (local $l3269 i32) - (local $l3270 i32) - (local $l3271 i32) - (local $l3272 i32) - (local $l3273 i32) - (local $l3274 i32) - (local $l3275 i32) - (local $l3276 i32) - (local $l3277 i32) - (local $l3278 i32) - (local $l3279 i32) - (local $l3280 i32) - (local $l3281 i32) - (local $l3282 i32) - (local $l3283 i32) - (local $l3284 i32) - (local $l3285 i32) - (local $l3286 i32) - (local $l3287 i32) - (local $l3288 i32) - (local $l3289 i32) - (local $l3290 i32) - (local $l3291 i32) - (local $l3292 i32) - (local $l3293 i32) - (local $l3294 i32) - (local $l3295 i32) - (local $l3296 i32) - (local $l3297 i32) - (local $l3298 i32) - (local $l3299 i32) - (local $l3300 i32) - (local $l3301 i32) - (local $l3302 i32) - (local $l3303 i32) - (local $l3304 i32) - (local $l3305 i32) - (local $l3306 i32) - (local $l3307 i32) - (local $l3308 i32) - (local $l3309 i32) - (local $l3310 i32) - (local $l3311 i32) - (local $l3312 i32) - (local $l3313 i32) - (local $l3314 i32) - (local $l3315 i32) - (local $l3316 i32) - (local $l3317 i32) - (local $l3318 i32) - (local $l3319 i32) - (local $l3320 i32) - (local $l3321 i32) - (local $l3322 i32) - (local $l3323 i32) - (local $l3324 i32) - (local $l3325 i32) - (local $l3326 i32) - (local $l3327 i32) - (local $l3328 i32) - (local $l3329 i32) - (local $l3330 i32) - (local $l3331 i32) - (local $l3332 i32) - (local $l3333 i32) - (local $l3334 i32) - (local $l3335 i32) - (local $l3336 i32) - (local $l3337 i32) - (local $l3338 i32) - (local $l3339 i32) - (local $l3340 i32) - (local $l3341 i32) - (local $l3342 i32) - (local $l3343 i32) - (local $l3344 i32) - (local $l3345 i32) - (local $l3346 i32) - (local $l3347 i32) - (local $l3348 i32) - (local $l3349 i32) - (local $l3350 i32) - (local $l3351 i32) - (local $l3352 i32) - (local $l3353 i32) - (local $l3354 i32) - (local $l3355 i32) - (local $l3356 i32) - (local $l3357 i32) - (local $l3358 i32) - (local $l3359 i32) - (local $l3360 i32) - (local $l3361 i32) - (local $l3362 i32) - (local $l3363 i32) - (local $l3364 i32) - (local $l3365 i32) - (local $l3366 i32) - (local $l3367 i32) - (local $l3368 i32) - (local $l3369 i32) - (local $l3370 i32) - (local $l3371 i32) - (local $l3372 i32) - (local $l3373 i32) - (local $l3374 i32) - (local $l3375 i32) - (local $l3376 i32) - (local $l3377 i32) - (local $l3378 i32) - (local $l3379 i32) - (local $l3380 i32) - (local $l3381 i32) - (local $l3382 i32) - (local $l3383 i32) - (local $l3384 i32) - (local $l3385 i32) - (local $l3386 i32) - (local $l3387 i32) - (local $l3388 i32) - (local $l3389 i32) - (local $l3390 i32) - (local $l3391 i32) - (local $l3392 i32) - (local $l3393 i32) - (local $l3394 i32) - (local $l3395 i32) - (local $l3396 i32) - (local $l3397 i32) - (local $l3398 i32) - (local $l3399 i32) - (local $l3400 i32) - (local $l3401 i32) - (local $l3402 i32) - (local $l3403 i32) - (local $l3404 i32) - (local $l3405 i32) - (local $l3406 i32) - (local $l3407 i32) - (local $l3408 i32) - (local $l3409 i32) - (local $l3410 i32) - (local $l3411 i32) - (local $l3412 i32) - (local $l3413 i32) - (local $l3414 i32) - (local $l3415 i32) - (local $l3416 i32) - (local $l3417 i32) - (local $l3418 i32) - (local $l3419 i32) - (local $l3420 i32) - (local $l3421 i32) - (local $l3422 i32) - (local $l3423 i32) - (local $l3424 i32) - (local $l3425 i32) - (local $l3426 i32) - (local $l3427 i32) - (local $l3428 i32) - (local $l3429 i32) - (local $l3430 i32) - (local $l3431 i32) - (local $l3432 i32) - (local $l3433 i32) - (local $l3434 i32) - (local $l3435 i32) - (local $l3436 i32) - (local $l3437 i32) - (local $l3438 i32) - (local $l3439 i32) - (local $l3440 i32) - (local $l3441 i32) - (local $l3442 i32) - (local $l3443 i32) - (local $l3444 i32) - (local $l3445 i32) - (local $l3446 i32) - (local $l3447 i32) - (local $l3448 i32) - (local $l3449 i32) - (local $l3450 i32) - (local $l3451 i32) - (local $l3452 i32) - (local $l3453 i32) - (local $l3454 i32) - (local $l3455 i32) - (local $l3456 i32) - (local $l3457 i32) - (local $l3458 i32) - (local $l3459 i32) - (local $l3460 i32) - (local $l3461 i32) - (local $l3462 i32) - (local $l3463 i32) - (local $l3464 i32) - (local $l3465 i32) - (local $l3466 i32) - (local $l3467 i32) - (local $l3468 i32) - (local $l3469 i32) - (local $l3470 i32) - (local $l3471 i32) - (local $l3472 i32) - (local $l3473 i32) - (local $l3474 i32) - (local $l3475 i32) - (local $l3476 i32) - (local $l3477 i32) - (local $l3478 i32) - (local $l3479 i32) - (local $l3480 i32) - (local $l3481 i32) - (local $l3482 i32) - (local $l3483 i32) - (local $l3484 i32) - (local $l3485 i32) - (local $l3486 i32) - (local $l3487 i32) - (local $l3488 i32) - (local $l3489 i32) - (local $l3490 i32) - (local $l3491 i32) - (local $l3492 i32) - (local $l3493 i32) - (local $l3494 i32) - (local $l3495 i32) - (local $l3496 i32) - (local $l3497 i32) - (local $l3498 i32) - (local $l3499 i32) - (local $l3500 i32) - (local $l3501 i32) - (local $l3502 i32) - (local $l3503 i32) - (local $l3504 i32) - (local $l3505 i32) - (local $l3506 i32) - (local $l3507 i32) - (local $l3508 i32) - (local $l3509 i32) - (local $l3510 i32) - (local $l3511 i32) - (local $l3512 i32) - (local $l3513 i32) - (local $l3514 i32) - (local $l3515 i32) - (local $l3516 i32) - (local $l3517 i32) - (local $l3518 i32) - (local $l3519 i32) - (local $l3520 i32) - (local $l3521 i32) - (local $l3522 i32) - (local $l3523 i32) - (local $l3524 i32) - (local $l3525 i32) - (local $l3526 i32) - (local $l3527 i32) - (local $l3528 i32) - (local $l3529 i32) - (local $l3530 i32) - (local $l3531 i32) - (local $l3532 i32) - (local $l3533 i32) - (local $l3534 i32) - (local $l3535 i32) - (local $l3536 i32) - (local $l3537 i32) - (local $l3538 i32) - (local $l3539 i32) - (local $l3540 i32) - (local $l3541 i32) - (local $l3542 i32) - (local $l3543 i32) - (local $l3544 i32) - (local $l3545 i32) - (local $l3546 i32) - (local $l3547 i32) - (local $l3548 i32) - (local $l3549 i32) - (local $l3550 i32) - (local $l3551 i32) - (local $l3552 i32) - (local $l3553 i32) - (local $l3554 i32) - (local $l3555 i32) - (local $l3556 i32) - (local $l3557 i32) - (local $l3558 i32) - (local $l3559 i32) - (local $l3560 i32) - (local $l3561 i32) - (local $l3562 i32) - (local $l3563 i32) - (local $l3564 i32) - (local $l3565 i32) - (local $l3566 i32) - (local $l3567 i32) - (local $l3568 i32) - (local $l3569 i32) - (local $l3570 i32) - (local $l3571 i32) - (local $l3572 i32) - (local $l3573 i32) - (local $l3574 i32) - (local $l3575 i32) - (local $l3576 i32) - (local $l3577 i32) - (local $l3578 i32) - (local $l3579 i32) - (local $l3580 i32) - (local $l3581 i32) - (local $l3582 i32) - (local $l3583 i32) - (local $l3584 i32) - (local $l3585 i32) - (local $l3586 i32) - (local $l3587 i32) - (local $l3588 i32) - (local $l3589 i32) - (local $l3590 i32) - (local $l3591 i32) - (local $l3592 i32) - (local $l3593 i32) - (local $l3594 i32) - (local $l3595 i32) - (local $l3596 i32) - (local $l3597 i32) - (local $l3598 i32) - (local $l3599 i32) - (local $l3600 i32) - (local $l3601 i32) - (local $l3602 i32) - (local $l3603 i32) - (local $l3604 i32) - (local $l3605 i32) - (local $l3606 i32) - (local $l3607 i32) - (local $l3608 i32) - (local $l3609 i32) - (local $l3610 i32) - (local $l3611 i32) - (local $l3612 i32) - (local $l3613 i32) - (local $l3614 i32) - (local $l3615 i32) - (local $l3616 i32) - (local $l3617 i32) - (local $l3618 i32) - (local $l3619 i32) - (local $l3620 i32) - (local $l3621 i32) - (local $l3622 i32) - (local $l3623 i32) - (local $l3624 i32) - (local $l3625 i32) - (local $l3626 i32) - (local $l3627 i32) - (local $l3628 i32) - (local $l3629 i32) - (local $l3630 i32) - (local $l3631 i32) - (local $l3632 i32) - (local $l3633 i32) - (local $l3634 i32) - (local $l3635 i32) - (local $l3636 i32) - (local $l3637 i32) - (local $l3638 i32) - (local $l3639 i32) - (local $l3640 i32) - (local $l3641 i32) - (local $l3642 i32) - (local $l3643 i32) - (local $l3644 i32) - (local $l3645 i32) - (local $l3646 i32) - (local $l3647 i32) - (local $l3648 i32) - (local $l3649 i32) - (local $l3650 i32) - (local $l3651 i32) - (local $l3652 i32) - (local $l3653 i32) - (local $l3654 i32) - (local $l3655 i32) - (local $l3656 i32) - (local $l3657 i32) - (local $l3658 i32) - (local $l3659 i32) - (local $l3660 i32) - (local $l3661 i32) - (local $l3662 i32) - (local $l3663 i32) - (local $l3664 i32) - (local $l3665 i32) - (local $l3666 i32) - (local $l3667 i32) - (local $l3668 i32) - (local $l3669 i32) - (local $l3670 i32) - (local $l3671 i32) - (local $l3672 i32) - (local $l3673 i32) - (local $l3674 i32) - (local $l3675 i32) - (local $l3676 i32) - (local $l3677 i32) - (local $l3678 i32) - (local $l3679 i32) - (local $l3680 i32) - (local $l3681 i32) - (local $l3682 i32) - (local $l3683 i32) - (local $l3684 i32) - (local $l3685 i32) - (local $l3686 i32) - (local $l3687 i32) - (local $l3688 i32) - (local $l3689 i32) - (local $l3690 i32) - (local $l3691 i32) - (local $l3692 i32) - (local $l3693 i32) - (local $l3694 i32) - (local $l3695 i32) - (local $l3696 i32) - (local $l3697 i32) - (local $l3698 i32) - (local $l3699 i32) - (local $l3700 i32) - (local $l3701 i32) - (local $l3702 i32) - (local $l3703 i32) - (local $l3704 i32) - (local $l3705 i32) - (local $l3706 i32) - (local $l3707 i32) - (local $l3708 i32) - (local $l3709 i32) - (local $l3710 i32) - (local $l3711 i32) - (local $l3712 i32) - (local $l3713 i32) - (local $l3714 i32) - (local $l3715 i32) - (local $l3716 i32) - (local $l3717 i32) - (local $l3718 i32) - (local $l3719 i32) - (local $l3720 i32) - (local $l3721 i32) - (local $l3722 i32) - (local $l3723 i32) - (local $l3724 i32) - (local $l3725 i32) - (local $l3726 i32) - (local $l3727 i32) - (local $l3728 i32) - (local $l3729 i32) - (local $l3730 i32) - (local $l3731 i32) - (local $l3732 i32) - (local $l3733 i32) - (local $l3734 i32) - (local $l3735 i32) - (local $l3736 i32) - (local $l3737 i32) - (local $l3738 i32) - (local $l3739 i32) - (local $l3740 i32) - (local $l3741 i32) - (local $l3742 i32) - (local $l3743 i32) - (local $l3744 i32) - (local $l3745 i32) - (local $l3746 i32) - (local $l3747 i32) - (local $l3748 i32) - (local $l3749 i32) - (local $l3750 i32) - (local $l3751 i32) - (local $l3752 i32) - (local $l3753 i32) - (local $l3754 i32) - (local $l3755 i32) - (local $l3756 i32) - (local $l3757 i32) - (local $l3758 i32) - (local $l3759 i32) - (local $l3760 i32) - (local $l3761 i32) - (local $l3762 i32) - (local $l3763 i32) - (local $l3764 i32) - (local $l3765 i32) - (local $l3766 i32) - (local $l3767 i32) - (local $l3768 i32) - (local $l3769 i32) - (local $l3770 i32) - (local $l3771 i32) - (local $l3772 i32) - (local $l3773 i32) - (local $l3774 i32) - (local $l3775 i32) - (local $l3776 i32) - (local $l3777 i32) - (local $l3778 i32) - (local $l3779 i32) - (local $l3780 i32) - (local $l3781 i32) - (local $l3782 i32) - (local $l3783 i32) - (local $l3784 i32) - (local $l3785 i32) - (local $l3786 i32) - (local $l3787 i32) - (local $l3788 i32) - (local $l3789 i32) - (local $l3790 i32) - (local $l3791 i32) - (local $l3792 i32) - (local $l3793 i32) - (local $l3794 i32) - (local $l3795 i32) - (local $l3796 i32) - (local $l3797 i32) - (local $l3798 i32) - (local $l3799 i32) - (local $l3800 i32) - (local $l3801 i32) - (local $l3802 i32) - (local $l3803 i32) - (local $l3804 i32) - (local $l3805 i32) - (local $l3806 i32) - (local $l3807 i32) - (local $l3808 i32) - (local $l3809 i32) - (local $l3810 i32) - (local $l3811 i32) - (local $l3812 i32) - (local $l3813 i32) - (local $l3814 i32) - (local $l3815 i32) - (local $l3816 i32) - (local $l3817 i32) - (local $l3818 i32) - (local $l3819 i32) - (local $l3820 i32) - (local $l3821 i32) - (local $l3822 i32) - (local $l3823 i32) - (local $l3824 i32) - (local $l3825 i32) - (local $l3826 i32) - (local $l3827 i32) - (local $l3828 i32) - (local $l3829 i32) - (local $l3830 i32) - (local $l3831 i32) - (local $l3832 i32) - (local $l3833 i32) - (local $l3834 i32) - (local $l3835 i32) - (local $l3836 i32) - (local $l3837 i32) - (local $l3838 i32) - (local $l3839 i32) - (local $l3840 i32) - (local $l3841 i32) - (local $l3842 i32) - (local $l3843 i32) - (local $l3844 i32) - (local $l3845 i32) - (local $l3846 i32) - (local $l3847 i32) - (local $l3848 i32) - (local $l3849 i32) - (local $l3850 i32) - (local $l3851 i32) - (local $l3852 i32) - (local $l3853 i32) - (local $l3854 i32) - (local $l3855 i32) - (local $l3856 i32) - (local $l3857 i32) - (local $l3858 i32) - (local $l3859 i32) - (local $l3860 i32) - (local $l3861 i32) - (local $l3862 i32) - (local $l3863 i32) - (local $l3864 i32) - (local $l3865 i32) - (local $l3866 i32) - (local $l3867 i32) - (local $l3868 i32) - (local $l3869 i32) - (local $l3870 i32) - (local $l3871 i32) - (local $l3872 i32) - (local $l3873 i32) - (local $l3874 i32) - (local $l3875 i32) - (local $l3876 i32) - (local $l3877 i32) - (local $l3878 i32) - (local $l3879 i32) - (local $l3880 i32) - (local $l3881 i32) - (local $l3882 i32) - (local $l3883 i32) - (local $l3884 i32) - (local $l3885 i32) - (local $l3886 i32) - (local $l3887 i32) - (local $l3888 i32) - (local $l3889 i32) - (local $l3890 i32) - (local $l3891 i32) - (local $l3892 i32) - (local $l3893 i32) - (local $l3894 i32) - (local $l3895 i32) - (local $l3896 i32) - (local $l3897 i32) - (local $l3898 i32) - (local $l3899 i32) - (local $l3900 i32) - (local $l3901 i32) - (local $l3902 i32) - (local $l3903 i32) - (local $l3904 i32) - (local $l3905 i32) - (local $l3906 i32) - (local $l3907 i32) - (local $l3908 i32) - (local $l3909 i32) - (local $l3910 i32) - (local $l3911 i32) - (local $l3912 i32) - (local $l3913 i32) - (local $l3914 i32) - (local $l3915 i32) - (local $l3916 i32) - (local $l3917 i32) - (local $l3918 i32) - (local $l3919 i32) - (local $l3920 i32) - (local $l3921 i32) - (local $l3922 i32) - (local $l3923 i32) - (local $l3924 i32) - (local $l3925 i32) - (local $l3926 i32) - (local $l3927 i32) - (local $l3928 i32) - (local $l3929 i32) - (local $l3930 i32) - (local $l3931 i32) - (local $l3932 i32) - (local $l3933 i32) - (local $l3934 i32) - (local $l3935 i32) - (local $l3936 i32) - (local $l3937 i32) - (local $l3938 i32) - (local $l3939 i32) - (local $l3940 i32) - (local $l3941 i32) - (local $l3942 i32) - (local $l3943 i32) - (local $l3944 i32) - (local $l3945 i32) - (local $l3946 i32) - (local $l3947 i32) - (local $l3948 i32) - (local $l3949 i32) - (local $l3950 i32) - (local $l3951 i32) - (local $l3952 i32) - (local $l3953 i32) - (local $l3954 i32) - (local $l3955 i32) - (local $l3956 i32) - (local $l3957 i32) - (local $l3958 i32) - (local $l3959 i32) - (local $l3960 i32) - (local $l3961 i32) - (local $l3962 i32) - (local $l3963 i32) - (local $l3964 i32) - (local $l3965 i32) - (local $l3966 i32) - (local $l3967 i32) - (local $l3968 i32) - (local $l3969 i32) - (local $l3970 i32) - (local $l3971 i32) - (local $l3972 i32) - (local $l3973 i32) - (local $l3974 i32) - (local $l3975 i32) - (local $l3976 i32) - (local $l3977 i32) - (local $l3978 i32) - (local $l3979 i32) - (local $l3980 i32) - (local $l3981 i32) - (local $l3982 i32) - (local $l3983 i32) - (local $l3984 i32) - (local $l3985 i32) - (local $l3986 i32) - (local $l3987 i32) - (local $l3988 i32) - (local $l3989 i32) - (local $l3990 i32) - (local $l3991 i32) - (local $l3992 i32) - (local $l3993 i32) - (local $l3994 i32) - (local $l3995 i32) - (local $l3996 i32) - (local $l3997 i32) - (local $l3998 i32) - (local $l3999 i32) - (local $l4000 i32) - (local $l4001 i32) - (local $l4002 i32) - (local $l4003 i32) - (local $l4004 i32) - (local $l4005 i32) - (local $l4006 i32) - (local $l4007 i32) - (local $l4008 i32) - (local $l4009 i32) - (local $l4010 i32) - (local $l4011 i32) - (local $l4012 i32) - (local $l4013 i32) - (local $l4014 i32) - (local $l4015 i32) - (local $l4016 i32) - (local $l4017 i32) - (local $l4018 i32) - (local $l4019 i32) - (local $l4020 i32) - (local $l4021 i32) - (local $l4022 i32) - (local $l4023 i32) - (local $l4024 i32) - (local $l4025 i32) - (local $l4026 i32) - (local $l4027 i32) - (local $l4028 i32) - (local $l4029 i32) - (local $l4030 i32) - (local $l4031 i32) - (local $l4032 i32) - (local $l4033 i32) - (local $l4034 i32) - (local $l4035 i32) - (local $l4036 i32) - (local $l4037 i32) - (local $l4038 i32) - (local $l4039 i32) - (local $l4040 i32) - (local $l4041 i32) - (local $l4042 i32) - (local $l4043 i32) - (local $l4044 i32) - (local $l4045 i32) - (local $l4046 i32) - (local $l4047 i32) - (local $l4048 i32) - (local $l4049 i32) - (local $l4050 i32) - (local $l4051 i32) - (local $l4052 i32) - (local $l4053 i32) - (local $l4054 i32) - (local $l4055 i32) - (local $l4056 i32) - (local $l4057 i32) - (local $l4058 i32) - (local $l4059 i32) - (local $l4060 i32) - (local $l4061 i32) - (local $l4062 i32) - (local $l4063 i32) - (local $l4064 i32) - (local $l4065 i32) - (local $l4066 i32) - (local $l4067 i32) - (local $l4068 i32) - (local $l4069 i32) - (local $l4070 i32) - (local $l4071 i32) - (local $l4072 i32) - (local $l4073 i32) - (local $l4074 i32) - (local $l4075 i32) - (local $l4076 i32) - (local $l4077 i32) - (local $l4078 i32) - (local $l4079 i32) - (local $l4080 i32) - (local $l4081 i32) - (local $l4082 i32) - (local $l4083 i32) - (local $l4084 i32) - (local $l4085 i32) - (local $l4086 i32) - (local $l4087 i32) - (local $l4088 i32) - (local $l4089 i32) - (local $l4090 i32) - (local $l4091 i32) - (local $l4092 i32) - (local $l4093 i32) - (local $l4094 i32) - (local $l4095 i32) - (local $l4096 i32) - (local $l4097 i32) - (local $l4098 i32) - (local $l4099 i32) - (local $l4100 i32) - (local $l4101 i32) - (local $l4102 i32) - (local $l4103 i32) - (local $l4104 i32) - (local $l4105 i32) - (local $l4106 i32) - (local $l4107 i32) - (local $l4108 i32) - (local $l4109 i32) - (local $l4110 i32) - (local $l4111 i32) - (local $l4112 i32) - (local $l4113 i32) - (local $l4114 i32) - (local $l4115 i32) - (local $l4116 i32) - (local $l4117 i32) - (local $l4118 i32) - (local $l4119 i32) - (local $l4120 i32) - (local $l4121 i32) - (local $l4122 i32) - (local $l4123 i32) - (local $l4124 i32) - (local $l4125 i32) - (local $l4126 i32) - (local $l4127 i32) - (local $l4128 i32) - (local $l4129 i32) - (local $l4130 i32) - (local $l4131 i32) - (local $l4132 i32) - (local $l4133 i32) - (local $l4134 i32) - (local $l4135 i32) - (local $l4136 i32) - (local $l4137 i32) - (local $l4138 i32) - (local $l4139 i32) - (local $l4140 i32) - (local $l4141 i32) - (local $l4142 i32) - (local $l4143 i32) - (local $l4144 i32) - (local $l4145 i32) - (local $l4146 i32) - (local $l4147 i32) - (local $l4148 i32) - (local $l4149 i32) - (local $l4150 i32) - (local $l4151 i32) - (local $l4152 i32) - (local $l4153 i32) - (local $l4154 i32) - (local $l4155 i32) - (local $l4156 i32) - (local $l4157 i32) - (local $l4158 i32) - (local $l4159 i32) - (local $l4160 i32) - (local $l4161 i32) - (local $l4162 i32) - (local $l4163 i32) - (local $l4164 i32) - (local $l4165 i32) - (local $l4166 i32) - (local $l4167 i32) - (local $l4168 i32) - (local $l4169 i32) - (local $l4170 i32) - (local $l4171 i32) - (local $l4172 i32) - (local $l4173 i32) - (local $l4174 i32) - (local $l4175 i32) - (local $l4176 i32) - (local $l4177 i32) - (local $l4178 i32) - (local $l4179 i32) - (local $l4180 i32) - (local $l4181 i32) - (local $l4182 i32) - (local $l4183 i32) - (local $l4184 i32) - (local $l4185 i32) - (local $l4186 i32) - (local $l4187 i32) - (local $l4188 i32) - (local $l4189 i32) - (local $l4190 i32) - (local $l4191 i32) - (local $l4192 i32) - (local $l4193 i32) - (local $l4194 i32) - (local $l4195 i32) - (local $l4196 i32) - (local $l4197 i32) - (local $l4198 i32) - (local $l4199 i32) - (local $l4200 i32) - (local $l4201 i32) - (local $l4202 i32) - (local $l4203 i32) - (local $l4204 i32) - (local $l4205 i32) - (local $l4206 i32) - (local $l4207 i32) - (local $l4208 i32) - (local $l4209 i32) - (local $l4210 i32) - (local $l4211 i32) - (local $l4212 i32) - (local $l4213 i32) - (local $l4214 i32) - (local $l4215 i32) - (local $l4216 i32) - (local $l4217 i32) - (local $l4218 i32) - (local $l4219 i32) - (local $l4220 i32) - (local $l4221 i32) - (local $l4222 i32) - (local $l4223 i32) - (local $l4224 i32) - (local $l4225 i32) - (local $l4226 i32) - (local $l4227 i32) - (local $l4228 i32) - (local $l4229 i32) - (local $l4230 i32) - (local $l4231 i32) - (local $l4232 i32) - (local $l4233 i32) - (local $l4234 i32) - (local $l4235 i32) - (local $l4236 i32) - (local $l4237 i32) - (local $l4238 i32) - (local $l4239 i32) - (local $l4240 i32) - (local $l4241 i32) - (local $l4242 i32) - (local $l4243 i32) - (local $l4244 i32) - (local $l4245 i32) - (local $l4246 i32) - (local $l4247 i32) - (local $l4248 i32) - (local $l4249 i32) - (local $l4250 i32) - (local $l4251 i32) - (local $l4252 i32) - (local $l4253 i32) - (local $l4254 i32) - (local $l4255 i32) - (local $l4256 i32) - (local $l4257 i32) - (local $l4258 i32) - (local $l4259 i32) - (local $l4260 i32) - (local $l4261 i32) - (local $l4262 i32) - (local $l4263 i32) - (local $l4264 i32) - (local $l4265 i32) - (local $l4266 i32) - (local $l4267 i32) - (local $l4268 i32) - (local $l4269 i32) - (local $l4270 i32) - (local $l4271 i32) - (local $l4272 i32) - (local $l4273 i32) - (local $l4274 i32) - (local $l4275 i32) - (local $l4276 i32) - (local $l4277 i32) - (local $l4278 i32) - (local $l4279 i32) - (local $l4280 i32) - (local $l4281 i32) - (local $l4282 i32) - (local $l4283 i32) - (local $l4284 i32) - (local $l4285 i32) - (local $l4286 i32) - (local $l4287 i32) - (local $l4288 i32) - (local $l4289 i32) - (local $l4290 i32) - (local $l4291 i32) - (local $l4292 i32) - (local $l4293 i32) - (local $l4294 i32) - (local $l4295 i32) - (local $l4296 i32) - (local $l4297 i32) - (local $l4298 i32) - (local $l4299 i32) - (local $l4300 i32) - (local $l4301 i32) - (local $l4302 i32) - (local $l4303 i32) - (local $l4304 i32) - (local $l4305 i32) - (local $l4306 i32) - (local $l4307 i32) - (local $l4308 i32) - (local $l4309 i32) - (local $l4310 i32) - (local $l4311 i32) - (local $l4312 i32) - (local $l4313 i32) - (local $l4314 i32) - (local $l4315 i32) - (local $l4316 i32) - (local $l4317 i32) - (local $l4318 i32) - (local $l4319 i32) - (local $l4320 i32) - (local $l4321 i32) - (local $l4322 i32) - (local $l4323 i32) - (local $l4324 i32) - (local $l4325 i32) - (local $l4326 i32) - (local $l4327 i32) - (local $l4328 i32) - (local $l4329 i32) - (local $l4330 i32) - (local $l4331 i32) - (local $l4332 i32) - (local $l4333 i32) - (local $l4334 i32) - (local $l4335 i32) - (local $l4336 i32) - (local $l4337 i32) - (local $l4338 i32) - (local $l4339 i32) - (local $l4340 i32) - (local $l4341 i32) - (local $l4342 i32) - (local $l4343 i32) - (local $l4344 i32) - (local $l4345 i32) - (local $l4346 i32) - (local $l4347 i32) - (local $l4348 i32) - (local $l4349 i32) - (local $l4350 i32) - (local $l4351 i32) - (local $l4352 i32) - (local $l4353 i32) - (local $l4354 i32) - (local $l4355 i32) - (local $l4356 i32) - (local $l4357 i32) - (local $l4358 i32) - (local $l4359 i32) - (local $l4360 i32) - (local $l4361 i32) - (local $l4362 i32) - (local $l4363 i32) - (local $l4364 i32) - (local $l4365 i32) - (local $l4366 i32) - (local $l4367 i32) - (local $l4368 i32) - (local $l4369 i32) - (local $l4370 i32) - (local $l4371 i32) - (local $l4372 i32) - (local $l4373 i32) - (local $l4374 i32) - (local $l4375 i32) - (local $l4376 i32) - (local $l4377 i32) - (local $l4378 i32) - (local $l4379 i32) - (local $l4380 i32) - (local $l4381 i32) - (local $l4382 i32) - (local $l4383 i32) - (local $l4384 i32) - (local $l4385 i32) - (local $l4386 i32) - (local $l4387 i32) - (local $l4388 i32) - (local $l4389 i32) - (local $l4390 i32) - (local $l4391 i32) - (local $l4392 i32) - (local $l4393 i32) - (local $l4394 i32) - (local $l4395 i32) - (local $l4396 i32) - (local $l4397 i32) - (local $l4398 i32) - (local $l4399 i32) - (local $l4400 i32) - (local $l4401 i32) - (local $l4402 i32) - (local $l4403 i32) - (local $l4404 i32) - (local $l4405 i32) - (local $l4406 i32) - (local $l4407 i32) - (local $l4408 i32) - (local $l4409 i32) - (local $l4410 i32) - (local $l4411 i32) - (local $l4412 i32) - (local $l4413 i32) - (local $l4414 i32) - (local $l4415 i32) - (local $l4416 i32) - (local $l4417 i32) - (local $l4418 i32) - (local $l4419 i32) - (local $l4420 i32) - (local $l4421 i32) - (local $l4422 i32) - (local $l4423 i32) - (local $l4424 i32) - (local $l4425 i32) - (local $l4426 i32) - (local $l4427 i32) - (local $l4428 i32) - (local $l4429 i32) - (local $l4430 i32) - (local $l4431 i32) - (local $l4432 i32) - (local $l4433 i32) - (local $l4434 i32) - (local $l4435 i32) - (local $l4436 i32) - (local $l4437 i32) - (local $l4438 i32) - (local $l4439 i32) - (local $l4440 i32) - (local $l4441 i32) - (local $l4442 i32) - (local $l4443 i32) - (local $l4444 i32) - (local $l4445 i32) - (local $l4446 i32) - (local $l4447 i32) - (local $l4448 i32) - (local $l4449 i32) - (local $l4450 i32) - (local $l4451 i32) - (local $l4452 i32) - (local $l4453 i32) - (local $l4454 i32) - (local $l4455 i32) - (local $l4456 i32) - (local $l4457 i32) - (local $l4458 i32) - (local $l4459 i32) - (local $l4460 i32) - (local $l4461 i32) - (local $l4462 i32) - (local $l4463 i32) - (local $l4464 i32) - (local $l4465 i32) - (local $l4466 i32) - (local $l4467 i32) - (local $l4468 i32) - (local $l4469 i32) - (local $l4470 i32) - (local $l4471 i32) - (local $l4472 i32) - (local $l4473 i32) - (local $l4474 i32) - (local $l4475 i32) - (local $l4476 i32) - (local $l4477 i32) - (local $l4478 i32) - (local $l4479 i32) - (local $l4480 i32) - (local $l4481 i32) - (local $l4482 i32) - (local $l4483 i32) - (local $l4484 i32) - (local $l4485 i32) - (local $l4486 i32) - (local $l4487 i32) - (local $l4488 i32) - (local $l4489 i32) - (local $l4490 i32) - (local $l4491 i32) - (local $l4492 i32) - (local $l4493 i32) - (local $l4494 i32) - (local $l4495 i32) - (local $l4496 i32) - (local $l4497 i32) - (local $l4498 i32) - (local $l4499 i32) - (local $l4500 i32) - (local $l4501 i32) - (local $l4502 i32) - (local $l4503 i32) - (local $l4504 i32) - (local $l4505 i32) - (local $l4506 i32) - (local $l4507 i32) - (local $l4508 i32) - (local $l4509 i32) - (local $l4510 i32) - (local $l4511 i32) - (local $l4512 i32) - (local $l4513 i32) - (local $l4514 i32) - (local $l4515 i32) - (local $l4516 i32) - (local $l4517 i32) - (local $l4518 i32) - (local $l4519 i32) - (local $l4520 i32) - (local $l4521 i32) - (local $l4522 i32) - (local $l4523 i32) - (local $l4524 i32) - (local $l4525 i32) - (local $l4526 i32) - (local $l4527 i32) - (local $l4528 i32) - (local $l4529 i32) - (local $l4530 i32) - (local $l4531 i32) - (local $l4532 i32) - (local $l4533 i32) - (local $l4534 i32) - (local $l4535 i32) - (local $l4536 i32) - (local $l4537 i32) - (local $l4538 i32) - (local $l4539 i32) - (local $l4540 i32) - (local $l4541 i32) - (local $l4542 i32) - (local $l4543 i32) - (local $l4544 i32) - (local $l4545 i32) - (local $l4546 i32) - (local $l4547 i32) - (local $l4548 i32) - (local $l4549 i32) - (local $l4550 i32) - (local $l4551 i32) - (local $l4552 i32) - (local $l4553 i32) - (local $l4554 i32) - (local $l4555 i32) - (local $l4556 i32) - (local $l4557 i32) - (local $l4558 i32) - (local $l4559 i32) - (local $l4560 i32) - (local $l4561 i32) - (local $l4562 i32) - (local $l4563 i32) - (local $l4564 i32) - (local $l4565 i32) - (local $l4566 i32) - (local $l4567 i32) - (local $l4568 i32) - (local $l4569 i32) - (local $l4570 i32) - (local $l4571 i32) - (local $l4572 i32) - (local $l4573 i32) - (local $l4574 i32) - (local $l4575 i32) - (local $l4576 i32) - (local $l4577 i32) - (local $l4578 i32) - (local $l4579 i32) - (local $l4580 i32) - (local $l4581 i32) - (local $l4582 i32) - (local $l4583 i32) - (local $l4584 i32) - (local $l4585 i32) - (local $l4586 i32) - (local $l4587 i32) - (local $l4588 i32) - (local $l4589 i32) - (local $l4590 i32) - (local $l4591 i32) - (local $l4592 i32) - (local $l4593 i32) - (local $l4594 i32) - (local $l4595 i32) - (local $l4596 i32) - (local $l4597 i32) - (local $l4598 i32) - (local $l4599 i32) - (local $l4600 i32) - (local $l4601 i32) - (local $l4602 i32) - (local $l4603 i32) - (local $l4604 i32) - (local $l4605 i32) - (local $l4606 i32) - (local $l4607 i32) - (local $l4608 i32) - (local $l4609 i32) - (local $l4610 i32) - (local $l4611 i32) - (local $l4612 i32) - (local $l4613 i32) - (local $l4614 i32) - (local $l4615 i32) - (local $l4616 i32) - (local $l4617 i32) - (local $l4618 i32) - (local $l4619 i32) - (local $l4620 i32) - (local $l4621 i32) - (local $l4622 i32) - (local $l4623 i32) - (local $l4624 i32) - (local $l4625 i32) - (local $l4626 i32) - (local $l4627 i32) - (local $l4628 i32) - (local $l4629 i32) - (local $l4630 i32) - (local $l4631 i32) - (local $l4632 i32) - (local $l4633 i32) - (local $l4634 i32) - (local $l4635 i32) - (local $l4636 i32) - (local $l4637 i32) - (local $l4638 i32) - (local $l4639 i32) - (local $l4640 i32) - (local $l4641 i32) - (local $l4642 i32) - (local $l4643 i32) - (local $l4644 i32) - (local $l4645 i32) - (local $l4646 i32) - (local $l4647 i32) - (local $l4648 i32) - (local $l4649 i32) - (local $l4650 i32) - (local $l4651 i32) - (local $l4652 i32) - (local $l4653 i32) - (local $l4654 i32) - (local $l4655 i32) - (local $l4656 i32) - (local $l4657 i32) - (local $l4658 i32) - (local $l4659 i32) - (local $l4660 i32) - (local $l4661 i32) - (local $l4662 i32) - (local $l4663 i32) - (local $l4664 i32) - (local $l4665 i32) - (local $l4666 i32) - (local $l4667 i32) - (local $l4668 i32) - (local $l4669 i32) - (local $l4670 i32) - (local $l4671 i32) - (local $l4672 i32) - (local $l4673 i32) - (local $l4674 i32) - (local $l4675 i32) - (local $l4676 i32) - (local $l4677 i32) - (local $l4678 i32) - (local $l4679 i32) - (local $l4680 i32) - (local $l4681 i32) - (local $l4682 i32) - (local $l4683 i32) - (local $l4684 i32) - (local $l4685 i32) - (local $l4686 i32) - (local $l4687 i32) - (local $l4688 i32) - (local $l4689 i32) - (local $l4690 i32) - (local $l4691 i32) - (local $l4692 i32) - (local $l4693 i32) - (local $l4694 i32) - (local $l4695 i32) - (local $l4696 i32) - (local $l4697 i32) - (local $l4698 i32) - (local $l4699 i32) - (local $l4700 i32) - (local $l4701 i32) - (local $l4702 i32) - (local $l4703 i32) - (local $l4704 i32) - (local $l4705 i32) - (local $l4706 i32) - (local $l4707 i32) - (local $l4708 i32) - (local $l4709 i32) - (local $l4710 i32) - (local $l4711 i32) - (local $l4712 i32) - (local $l4713 i32) - (local $l4714 i32) - (local $l4715 i32) - (local $l4716 i32) - (local $l4717 i32) - (local $l4718 i32) - (local $l4719 i32) - (local $l4720 i32) - (local $l4721 i32) - (local $l4722 i32) - (local $l4723 i32) - (local $l4724 i32) - (local $l4725 i32) - (local $l4726 i32) - (local $l4727 i32) - (local $l4728 i32) - (local $l4729 i32) - (local $l4730 i32) - (local $l4731 i32) - (local $l4732 i32) - (local $l4733 i32) - (local $l4734 i32) - (local $l4735 i32) - (local $l4736 i32) - (local $l4737 i32) - (local $l4738 i32) - (local $l4739 i32) - (local $l4740 i32) - (local $l4741 i32) - (local $l4742 i32) - (local $l4743 i32) - (local $l4744 i32) - (local $l4745 i32) - (local $l4746 i32) - (local $l4747 i32) - (local $l4748 i32) - (local $l4749 i32) - (local $l4750 i32) - (local $l4751 i32) - (local $l4752 i32) - (local $l4753 i32) - (local $l4754 i32) - (local $l4755 i32) - (local $l4756 i32) - (local $l4757 i32) - (local $l4758 i32) - (local $l4759 i32) - (local $l4760 i32) - (local $l4761 i32) - (local $l4762 i32) - (local $l4763 i32) - (local $l4764 i32) - (local $l4765 i32) - (local $l4766 i32) - (local $l4767 i32) - (local $l4768 i32) - (local $l4769 i32) - (local $l4770 i32) - (local $l4771 i32) - (local $l4772 i32) - (local $l4773 i32) - (local $l4774 i32) - (local $l4775 i32) - (local $l4776 i32) - (local $l4777 i32) - (local $l4778 i32) - (local $l4779 i32) - (local $l4780 i32) - (local $l4781 i32) - (local $l4782 i32) - (local $l4783 i32) - (local $l4784 i32) - (local $l4785 i32) - (local $l4786 i32) - (local $l4787 i32) - (local $l4788 i32) - (local $l4789 i32) - (local $l4790 i32) - (local $l4791 i32) - (local $l4792 i32) - (local $l4793 i32) - (local $l4794 i32) - (local $l4795 i32) - (local $l4796 i32) - (local $l4797 i32) - (local $l4798 i32) - (local $l4799 i32) - (local $l4800 i32) - (local $l4801 i32) - (local $l4802 i32) - (local $l4803 i32) - (local $l4804 i32) - (local $l4805 i32) - (local $l4806 i32) - (local $l4807 i32) - (local $l4808 i32) - (local $l4809 i32) - (local $l4810 i32) - (local $l4811 i32) - (local $l4812 i32) - (local $l4813 i32) - (local $l4814 i32) - (local $l4815 i32) - (local $l4816 i32) - (local $l4817 i32) - (local $l4818 i32) - (local $l4819 i32) - (local $l4820 i32) - (local $l4821 i32) - (local $l4822 i32) - (local $l4823 i32) - (local $l4824 i32) - (local $l4825 i32) - (local $l4826 i32) - (local $l4827 i32) - (local $l4828 i32) - (local $l4829 i32) - (local $l4830 i32) - (local $l4831 i32) - (local $l4832 i32) - (local $l4833 i32) - (local $l4834 i32) - (local $l4835 i32) - (local $l4836 i32) - (local $l4837 i32) - (local $l4838 i32) - (local $l4839 i32) - (local $l4840 i32) - (local $l4841 i32) - (local $l4842 i32) - (local $l4843 i32) - (local $l4844 i32) - (local $l4845 i32) - (local $l4846 i32) - (local $l4847 i32) - (local $l4848 i32) - (local $l4849 i32) - (local $l4850 i32) - (local $l4851 i32) - (local $l4852 i32) - (local $l4853 i32) - (local $l4854 i32) - (local $l4855 i32) - (local $l4856 i32) - (local $l4857 i32) - (local $l4858 i32) - (local $l4859 i32) - (local $l4860 i32) - (local $l4861 i32) - (local $l4862 i32) - (local $l4863 i32) - (local $l4864 i32) - (local $l4865 i32) - (local $l4866 i32) - (local $l4867 i32) - (local $l4868 i32) - (local $l4869 i32) - (local $l4870 i32) - (local $l4871 i32) - (local $l4872 i32) - (local $l4873 i32) - (local $l4874 i32) - (local $l4875 i32) - (local $l4876 i32) - (local $l4877 i32) - (local $l4878 i32) - (local $l4879 i32) - (local $l4880 i32) - (local $l4881 i32) - (local $l4882 i32) - (local $l4883 i32) - (local $l4884 i32) - (local $l4885 i32) - (local $l4886 i32) - (local $l4887 i32) - (local $l4888 i32) - (local $l4889 i32) - (local $l4890 i32) - (local $l4891 i32) - (local $l4892 i32) - (local $l4893 i32) - (local $l4894 i32) - (local $l4895 i32) - (local $l4896 i32) - (local $l4897 i32) - (local $l4898 i32) - (local $l4899 i32) - (local $l4900 i32) - (local $l4901 i32) - (local $l4902 i32) - (local $l4903 i32) - (local $l4904 i32) - (local $l4905 i32) - (local $l4906 i32) - (local $l4907 i32) - (local $l4908 i32) - (local $l4909 i32) - (local $l4910 i32) - (local $l4911 i32) - (local $l4912 i32) - (local $l4913 i32) - (local $l4914 i32) - (local $l4915 i32) - (local $l4916 i32) - (local $l4917 i32) - (local $l4918 i32) - (local $l4919 i32) - (local $l4920 i32) - (local $l4921 i32) - (local $l4922 i32) - (local $l4923 i32) - (local $l4924 i32) - (local $l4925 i32) - (local $l4926 i32) - (local $l4927 i32) - (local $l4928 i32) - (local $l4929 i32) - (local $l4930 i32) - (local $l4931 i32) - (local $l4932 i32) - (local $l4933 i32) - (local $l4934 i32) - (local $l4935 i32) - (local $l4936 i32) - (local $l4937 i32) - (local $l4938 i32) - (local $l4939 i32) - (local $l4940 i32) - (local $l4941 i32) - (local $l4942 i32) - (local $l4943 i32) - (local $l4944 i32) - (local $l4945 i32) - (local $l4946 i32) - (local $l4947 i32) - (local $l4948 i32) - (local $l4949 i32) - (local $l4950 i32) - (local $l4951 i32) - (local $l4952 i32) - (local $l4953 i32) - (local $l4954 i32) - (local $l4955 i32) - (local $l4956 i32) - (local $l4957 i32) - (local $l4958 i32) - (local $l4959 i32) - (local $l4960 i32) - (local $l4961 i32) - (local $l4962 i32) - (local $l4963 i32) - (local $l4964 i32) - (local $l4965 i32) - (local $l4966 i32) - (local $l4967 i32) - (local $l4968 i32) - (local $l4969 i32) - (local $l4970 i32) - (local $l4971 i32) - (local $l4972 i32) - (local $l4973 i32) - (local $l4974 i32) - (local $l4975 i32) - (local $l4976 i32) - (local $l4977 i32) - (local $l4978 i32) - (local $l4979 i32) - (local $l4980 i32) - (local $l4981 i32) - (local $l4982 i32) - (local $l4983 i32) - (local $l4984 i32) - (local $l4985 i32) - (local $l4986 i32) - (local $l4987 i32) - (local $l4988 i32) - (local $l4989 i32) - (local $l4990 i32) - (local $l4991 i32) - (local $l4992 i32) - (local $l4993 i32) - (local $l4994 i32) - (local $l4995 i32) - (local $l4996 i32) - (local $l4997 i32) - (local $l4998 i32) - (local $l4999 i32) - (local $l5000 i32) - (local $l5001 i32) - (local $l5002 i32) - (local $l5003 i32) - (local $l5004 i32) - (local $l5005 i32) - (local $l5006 i32) - (local $l5007 i32) - (local $l5008 i32) - (local $l5009 i32) - (local $l5010 i32) - (local $l5011 i32) - (local $l5012 i32) - (local $l5013 i32) - (local $l5014 i32) - (local $l5015 i32) - (local $l5016 i32) - (local $l5017 i32) - (local $l5018 i32) - (local $l5019 i32) - (local $l5020 i32) - (local $l5021 i32) - (local $l5022 i32) - (local $l5023 i32) - (local $l5024 i32) - (local $l5025 i32) - (local $l5026 i32) - (local $l5027 i32) - (local $l5028 i32) - (local $l5029 i32) - (local $l5030 i32) - (local $l5031 i32) - (local $l5032 i32) - (local $l5033 i32) - (local $l5034 i32) - (local $l5035 i32) - (local $l5036 i32) - (local $l5037 i32) - (local $l5038 i32) - (local $l5039 i32) - (local $l5040 i32) - (local $l5041 i32) - (local $l5042 i32) - (local $l5043 i32) - (local $l5044 i32) - (local $l5045 i32) - (local $l5046 i32) - (local $l5047 i32) - (local $l5048 i32) - (local $l5049 i32) - (local $l5050 i32) - (local $l5051 i32) - (local $l5052 i32) - (local $l5053 i32) - (local $l5054 i32) - (local $l5055 i32) - (local $l5056 i32) - (local $l5057 i32) - (local $l5058 i32) - (local $l5059 i32) - (local $l5060 i32) - (local $l5061 i32) - (local $l5062 i32) - (local $l5063 i32) - (local $l5064 i32) - (local $l5065 i32) - (local $l5066 i32) - (local $l5067 i32) - (local $l5068 i32) - (local $l5069 i32) - (local $l5070 i32) - (local $l5071 i32) - (local $l5072 i32) - (local $l5073 i32) - (local $l5074 i32) - (local $l5075 i32) - (local $l5076 i32) - (local $l5077 i32) - (local $l5078 i32) - (local $l5079 i32) - (local $l5080 i32) - (local $l5081 i32) - (local $l5082 i32) - (local $l5083 i32) - (local $l5084 i32) - (local $l5085 i32) - (local $l5086 i32) - (local $l5087 i32) - (local $l5088 i32) - (local $l5089 i32) - (local $l5090 i32) - (local $l5091 i32) - (local $l5092 i32) - (local $l5093 i32) - (local $l5094 i32) - (local $l5095 i32) - (local $l5096 i32) - (local $l5097 i32) - (local $l5098 i32) - (local $l5099 i32) - (local $l5100 i32) - (local $l5101 i32) - (local $l5102 i32) - (local $l5103 i32) - (local $l5104 i32) - (local $l5105 i32) - (local $l5106 i32) - (local $l5107 i32) - (local $l5108 i32) - (local $l5109 i32) - (local $l5110 i32) - (local $l5111 i32) - (local $l5112 i32) - (local $l5113 i32) - (local $l5114 i32) - (local $l5115 i32) - (local $l5116 i32) - (local $l5117 i32) - (local $l5118 i32) - (local $l5119 i32) - (local $l5120 i32) - (local $l5121 i32) - (local $l5122 i32) - (local $l5123 i32) - (local $l5124 i32) - (local $l5125 i32) - (local $l5126 i32) - (local $l5127 i32) - (local $l5128 i32) - (local $l5129 i32) - (local $l5130 i32) - (local $l5131 i32) - (local $l5132 i32) - (local $l5133 i32) - (local $l5134 i32) - (local $l5135 i32) - (local $l5136 i32) - (local $l5137 i32) - (local $l5138 i32) - (local $l5139 i32) - (local $l5140 i32) - (local $l5141 i32) - (local $l5142 i32) - (local $l5143 i32) - (local $l5144 i32) - (local $l5145 i32) - (local $l5146 i32) - (local $l5147 i32) - (local $l5148 i32) - (local $l5149 i32) - (local $l5150 i32) - (local $l5151 i32) - (local $l5152 i32) - (local $l5153 i32) - (local $l5154 i32) - (local $l5155 i32) - (local $l5156 i32) - (local $l5157 i32) - (local $l5158 i32) - (local $l5159 i32) - (local $l5160 i32) - (local $l5161 i32) - (local $l5162 i32) - (local $l5163 i32) - (local $l5164 i32) - (local $l5165 i32) - (local $l5166 i32) - (local $l5167 i32) - (local $l5168 i32) - (local $l5169 i32) - (local $l5170 i32) - (local $l5171 i32) - (local $l5172 i32) - (local $l5173 i32) - (local $l5174 i32) - (local $l5175 i32) - (local $l5176 i32) - (local $l5177 i32) - (local $l5178 i32) - (local $l5179 i32) - (local $l5180 i32) - (local $l5181 i32) - (local $l5182 i32) - (local $l5183 i32) - (local $l5184 i32) - (local $l5185 i32) - (local $l5186 i32) - (local $l5187 i32) - (local $l5188 i32) - (local $l5189 i32) - (local $l5190 i32) - (local $l5191 i32) - (local $l5192 i32) - (local $l5193 i32) - (local $l5194 i32) - (local $l5195 i32) - (local $l5196 i32) - (local $l5197 i32) - (local $l5198 i32) - (local $l5199 i32) - (local $l5200 i32) - (local $l5201 i32) - (local $l5202 i32) - (local $l5203 i32) - (local $l5204 i32) - (local $l5205 i32) - (local $l5206 i32) - (local $l5207 i32) - (local $l5208 i32) - (local $l5209 i32) - (local $l5210 i32) - (local $l5211 i32) - (local $l5212 i32) - (local $l5213 i32) - (local $l5214 i32) - (local $l5215 i32) - (local $l5216 i32) - (local $l5217 i32) - (local $l5218 i32) - (local $l5219 i32) - (local $l5220 i32) - (local $l5221 i32) - (local $l5222 i32) - (local $l5223 i32) - (local $l5224 i32) - (local $l5225 i32) - (local $l5226 i32) - (local $l5227 i32) - (local $l5228 i32) - (local $l5229 i32) - (local $l5230 i32) - (local $l5231 i32) - (local $l5232 i32) - (local $l5233 i32) - (local $l5234 i32) - (local $l5235 i32) - (local $l5236 i32) - (local $l5237 i32) - (local $l5238 i32) - (local $l5239 i32) - (local $l5240 i32) - (local $l5241 i32) - (local $l5242 i32) - (local $l5243 i32) - (local $l5244 i32) - (local $l5245 i32) - (local $l5246 i32) - (local $l5247 i32) - (local $l5248 i32) - (local $l5249 i32) - (local $l5250 i32) - (local $l5251 i32) - (local $l5252 i32) - (local $l5253 i32) - (local $l5254 i32) - (local $l5255 i32) - (local $l5256 i32) - (local $l5257 i32) - (local $l5258 i32) - (local $l5259 i32) - (local $l5260 i32) - (local $l5261 i32) - (local $l5262 i32) - (local $l5263 i32) - (local $l5264 i32) - (local $l5265 i32) - (local $l5266 i32) - (local $l5267 i32) - (local $l5268 i32) - (local $l5269 i32) - (local $l5270 i32) - (local $l5271 i32) - (local $l5272 i32) - (local $l5273 i32) - (local $l5274 i32) - (local $l5275 i32) - (local $l5276 i32) - (local $l5277 i32) - (local $l5278 i32) - (local $l5279 i32) - (local $l5280 i32) - (local $l5281 i32) - (local $l5282 i32) - (local $l5283 i32) - (local $l5284 i32) - (local $l5285 i32) - (local $l5286 i32) - (local $l5287 i32) - (local $l5288 i32) - (local $l5289 i32) - (local $l5290 i32) - (local $l5291 i32) - (local $l5292 i32) - (local $l5293 i32) - (local $l5294 i32) - (local $l5295 i32) - (local $l5296 i32) - (local $l5297 i32) - (local $l5298 i32) - (local $l5299 i32) - (local $l5300 i32) - (local $l5301 i32) - (local $l5302 i32) - (local $l5303 i32) - (local $l5304 i32) - (local $l5305 i32) - (local $l5306 i32) - (local $l5307 i32) - (local $l5308 i32) - (local $l5309 i32) - (local $l5310 i32) - (local $l5311 i32) - (local $l5312 i32) - (local $l5313 i32) - (local $l5314 i32) - (local $l5315 i32) - (local $l5316 i32) - (local $l5317 i32) - (local $l5318 i32) - (local $l5319 i32) - (local $l5320 i32) - (local $l5321 i32) - (local $l5322 i32) - (local $l5323 i32) - (local $l5324 i32) - (local $l5325 i32) - (local $l5326 i32) - (local $l5327 i32) - (local $l5328 i32) - (local $l5329 i32) - (local $l5330 i32) - (local $l5331 i32) - (local $l5332 i32) - (local $l5333 i32) - (local $l5334 i32) - (local $l5335 i32) - (local $l5336 i32) - (local $l5337 i32) - (local $l5338 i32) - (local $l5339 i32) - (local $l5340 i32) - (local $l5341 i32) - (local $l5342 i32) - (local $l5343 i32) - (local $l5344 i32) - (local $l5345 i32) - (local $l5346 i32) - (local $l5347 i32) - (local $l5348 i32) - (local $l5349 i32) - (local $l5350 i32) - (local $l5351 i32) - (local $l5352 i32) - (local $l5353 i32) - (local $l5354 i32) - (local $l5355 i32) - (local $l5356 i32) - (local $l5357 i32) - (local $l5358 i32) - (local $l5359 i32) - (local $l5360 i32) - (local $l5361 i32) - (local $l5362 i32) - (local $l5363 i32) - (local $l5364 i32) - (local $l5365 i32) - (local $l5366 i32) - (local $l5367 i32) - (local $l5368 i32) - (local $l5369 i32) - (local $l5370 i32) - (local $l5371 i32) - (local $l5372 i32) - (local $l5373 i32) - (local $l5374 i32) - (local $l5375 i32) - (local $l5376 i32) - (local $l5377 i32) - (local $l5378 i32) - (local $l5379 i32) - (local $l5380 i32) - (local $l5381 i32) - (local $l5382 i32) - (local $l5383 i32) - (local $l5384 i32) - (local $l5385 i32) - (local $l5386 i32) - (local $l5387 i32) - (local $l5388 i32) - (local $l5389 i32) - (local $l5390 i32) - (local $l5391 i32) - (local $l5392 i32) - (local $l5393 i32) - (local $l5394 i32) - (local $l5395 i32) - (local $l5396 i32) - (local $l5397 i32) - (local $l5398 i32) - (local $l5399 i32) - (local $l5400 i32) - (local $l5401 i32) - (local $l5402 i32) - (local $l5403 i32) - (local $l5404 i32) - (local $l5405 i32) - (local $l5406 i32) - (local $l5407 i32) - (local $l5408 i32) - (local $l5409 i32) - (local $l5410 i32) - (local $l5411 i32) - (local $l5412 i32) - (local $l5413 i32) - (local $l5414 i32) - (local $l5415 i32) - (local $l5416 i32) - (local $l5417 i32) - (local $l5418 i32) - (local $l5419 i32) - (local $l5420 i32) - (local $l5421 i32) - (local $l5422 i32) - (local $l5423 i32) - (local $l5424 i32) - (local $l5425 i32) - (local $l5426 i32) - (local $l5427 i32) - (local $l5428 i32) - (local $l5429 i32) - (local $l5430 i32) - (local $l5431 i32) - (local $l5432 i32) - (local $l5433 i32) - (local $l5434 i32) - (local $l5435 i32) - (local $l5436 i32) - (local $l5437 i32) - (local $l5438 i32) - (local $l5439 i32) - (local $l5440 i32) - (local $l5441 i32) - (local $l5442 i32) - (local $l5443 i32) - (local $l5444 i32) - (local $l5445 i32) - (local $l5446 i32) - (local $l5447 i32) - (local $l5448 i32) - (local $l5449 i32) - (local $l5450 i32) - (local $l5451 i32) - (local $l5452 i32) - (local $l5453 i32) - (local $l5454 i32) - (local $l5455 i32) - (local $l5456 i32) - (local $l5457 i32) - (local $l5458 i32) - (local $l5459 i32) - (local $l5460 i32) - (local $l5461 i32) - (local $l5462 i32) - (local $l5463 i32) - (local $l5464 i32) - (local $l5465 i32) - (local $l5466 i32) - (local $l5467 i32) - (local $l5468 i32) - (local $l5469 i32) - (local $l5470 i32) - (local $l5471 i32) - (local $l5472 i32) - (local $l5473 i32) - (local $l5474 i32) - (local $l5475 i32) - (local $l5476 i32) - (local $l5477 i32) - (local $l5478 i32) - (local $l5479 i32) - (local $l5480 i32) - (local $l5481 i32) - (local $l5482 i32) - (local $l5483 i32) - (local $l5484 i32) - (local $l5485 i32) - (local $l5486 i32) - (local $l5487 i32) - (local $l5488 i32) - (local $l5489 i32) - (local $l5490 i32) - (local $l5491 i32) - (local $l5492 i32) - (local $l5493 i32) - (local $l5494 i32) - (local $l5495 i32) - (local $l5496 i32) - (local $l5497 i32) - (local $l5498 i32) - (local $l5499 i32) - (local $l5500 i32) - (local $l5501 i32) - (local $l5502 i32) - (local $l5503 i32) - (local $l5504 i32) - (local $l5505 i32) - (local $l5506 i32) - (local $l5507 i32) - (local $l5508 i32) - (local $l5509 i32) - (local $l5510 i32) - (local $l5511 i32) - (local $l5512 i32) - (local $l5513 i32) - (local $l5514 i32) - (local $l5515 i32) - (local $l5516 i32) - (local $l5517 i32) - (local $l5518 i32) - (local $l5519 i32) - (local $l5520 i32) - (local $l5521 i32) - (local $l5522 i32) - (local $l5523 i32) - (local $l5524 i32) - (local $l5525 i32) - (local $l5526 i32) - (local $l5527 i32) - (local $l5528 i32) - (local $l5529 i32) - (local $l5530 i32) - (local $l5531 i32) - (local $l5532 i32) - (local $l5533 i32) - (local $l5534 i32) - (local $l5535 i32) - (local $l5536 i32) - (local $l5537 i32) - (local $l5538 i32) - (local $l5539 i32) - (local $l5540 i32) - (local $l5541 i32) - (local $l5542 i32) - (local $l5543 i32) - (local $l5544 i32) - (local $l5545 i32) - (local $l5546 i32) - (local $l5547 i32) - (local $l5548 i32) - (local $l5549 i32) - (local $l5550 i32) - (local $l5551 i32) - (local $l5552 i32) - (local $l5553 i32) - (local $l5554 i32) - (local $l5555 i32) - (local $l5556 i32) - (local $l5557 i32) - (local $l5558 i32) - (local $l5559 i32) - (local $l5560 i32) - (local $l5561 i32) - (local $l5562 i32) - (local $l5563 i32) - (local $l5564 i32) - (local $l5565 i32) - (local $l5566 i32) - (local $l5567 i32) - (local $l5568 i32) - (local $l5569 i32) - (local $l5570 i32) - (local $l5571 i32) - (local $l5572 i32) - (local $l5573 i32) - (local $l5574 i32) - (local $l5575 i32) - (local $l5576 i32) - (local $l5577 i32) - (local $l5578 i32) - (local $l5579 i32) - (local $l5580 i32) - (local $l5581 i32) - (local $l5582 i32) - (local $l5583 i32) - (local $l5584 i32) - (local $l5585 i32) - (local $l5586 i32) - (local $l5587 i32) - (local $l5588 i32) - (local $l5589 i32) - (local $l5590 i32) - (local $l5591 i32) - (local $l5592 i32) - (local $l5593 i32) - (local $l5594 i32) - (local $l5595 i32) - (local $l5596 i32) - (local $l5597 i32) - (local $l5598 i32) - (local $l5599 i32) - (local $l5600 i32) - (local $l5601 i32) - (local $l5602 i32) - (local $l5603 i32) - (local $l5604 i32) - (local $l5605 i32) - (local $l5606 i32) - (local $l5607 i32) - (local $l5608 i32) - (local $l5609 i32) - (local $l5610 i32) - (local $l5611 i32) - (local $l5612 i32) - (local $l5613 i32) - (local $l5614 i32) - (local $l5615 i32) - (local $l5616 i32) - (local $l5617 i32) - (local $l5618 i32) - (local $l5619 i32) - (local $l5620 i32) - (local $l5621 i32) - (local $l5622 i32) - (local $l5623 i32) - (local $l5624 i32) - (local $l5625 i32) - (local $l5626 i32) - (local $l5627 i32) - (local $l5628 i32) - (local $l5629 i32) - (local $l5630 i32) - (local $l5631 i32) - (local $l5632 i32) - (local $l5633 i32) - (local $l5634 i32) - (local $l5635 i32) - (local $l5636 i32) - (local $l5637 i32) - (local $l5638 i32) - (local $l5639 i32) - (local $l5640 i32) - (local $l5641 i32) - (local $l5642 i32) - (local $l5643 i32) - (local $l5644 i32) - (local $l5645 i32) - (local $l5646 i32) - (local $l5647 i32) - (local $l5648 i32) - (local $l5649 i32) - (local $l5650 i32) - (local $l5651 i32) - (local $l5652 i32) - (local $l5653 i32) - (local $l5654 i32) - (local $l5655 i32) - (local $l5656 i32) - (local $l5657 i32) - (local $l5658 i32) - (local $l5659 i32) - (local $l5660 i32) - (local $l5661 i32) - (local $l5662 i32) - (local $l5663 i32) - (local $l5664 i32) - (local $l5665 i32) - (local $l5666 i32) - (local $l5667 i32) - (local $l5668 i32) - (local $l5669 i32) - (local $l5670 i32) - (local $l5671 i32) - (local $l5672 i32) - (local $l5673 i32) - (local $l5674 i32) - (local $l5675 i32) - (local $l5676 i32) - (local $l5677 i32) - (local $l5678 i32) - (local $l5679 i32) - (local $l5680 i32) - (local $l5681 i32) - (local $l5682 i32) - (local $l5683 i32) - (local $l5684 i32) - (local $l5685 i32) - (local $l5686 i32) - (local $l5687 i32) - (local $l5688 i32) - (local $l5689 i32) - (local $l5690 i32) - (local $l5691 i32) - (local $l5692 i32) - (local $l5693 i32) - (local $l5694 i32) - (local $l5695 i32) - (local $l5696 i32) - (local $l5697 i32) - (local $l5698 i32) - (local $l5699 i32) - (local $l5700 i32) - (local $l5701 i32) - (local $l5702 i32) - (local $l5703 i32) - (local $l5704 i32) - (local $l5705 i32) - (local $l5706 i32) - (local $l5707 i32) - (local $l5708 i32) - (local $l5709 i32) - (local $l5710 i32) - (local $l5711 i32) - (local $l5712 i32) - (local $l5713 i32) - (local $l5714 i32) - (local $l5715 i32) - (local $l5716 i32) - (local $l5717 i32) - (local $l5718 i32) - (local $l5719 i32) - (local $l5720 i32) - (local $l5721 i32) - (local $l5722 i32) - (local $l5723 i32) - (local $l5724 i32) - (local $l5725 i32) - (local $l5726 i32) - (local $l5727 i32) - (local $l5728 i32) - (local $l5729 i32) - (local $l5730 i32) - (local $l5731 i32) - (local $l5732 i32) - (local $l5733 i32) - (local $l5734 i32) - (local $l5735 i32) - (local $l5736 i32) - (local $l5737 i32) - (local $l5738 i32) - (local $l5739 i32) - (local $l5740 i32) - (local $l5741 i32) - (local $l5742 i32) - (local $l5743 i32) - (local $l5744 i32) - (local $l5745 i32) - (local $l5746 i32) - (local $l5747 i32) - (local $l5748 i32) - (local $l5749 i32) - (local $l5750 i32) - (local $l5751 i32) - (local $l5752 i32) - (local $l5753 i32) - (local $l5754 i32) - (local $l5755 i32) - (local $l5756 i32) - (local $l5757 i32) - (local $l5758 i32) - (local $l5759 i32) - (local $l5760 i32) - (local $l5761 i32) - (local $l5762 i32) - (local $l5763 i32) - (local $l5764 i32) - (local $l5765 i32) - (local $l5766 i32) - (local $l5767 i32) - (local $l5768 i32) - (local $l5769 i32) - (local $l5770 i32) - (local $l5771 i32) - (local $l5772 i32) - (local $l5773 i32) - (local $l5774 i32) - (local $l5775 i32) - (local $l5776 i32) - (local $l5777 i32) - (local $l5778 i32) - (local $l5779 i32) - (local $l5780 i32) - (local $l5781 i32) - (local $l5782 i32) - (local $l5783 i32) - (local $l5784 i32) - (local $l5785 i32) - (local $l5786 i32) - (local $l5787 i32) - (local $l5788 i32) - (local $l5789 i32) - (local $l5790 i32) - (local $l5791 i32) - (local $l5792 i32) - (local $l5793 i32) - (local $l5794 i32) - (local $l5795 i32) - (local $l5796 i32) - (local $l5797 i32) - (local $l5798 i32) - (local $l5799 i32) - (local $l5800 i32) - (local $l5801 i32) - (local $l5802 i32) - (local $l5803 i32) - (local $l5804 i32) - (local $l5805 i32) - (local $l5806 i32) - (local $l5807 i32) - (local $l5808 i32) - (local $l5809 i32) - (local $l5810 i32) - (local $l5811 i32) - (local $l5812 i32) - (local $l5813 i32) - (local $l5814 i32) - (local $l5815 i32) - (local $l5816 i32) - (local $l5817 i32) - (local $l5818 i32) - (local $l5819 i32) - (local $l5820 i32) - (local $l5821 i32) - (local $l5822 i32) - (local $l5823 i32) - (local $l5824 i32) - (local $l5825 i32) - (local $l5826 i32) - (local $l5827 i32) - (local $l5828 i32) - (local $l5829 i32) - (local $l5830 i32) - (local $l5831 i32) - (local $l5832 i32) - (local $l5833 i32) - (local $l5834 i32) - (local $l5835 i32) - (local $l5836 i32) - (local $l5837 i32) - (local $l5838 i32) - (local $l5839 i32) - (local $l5840 i32) - (local $l5841 i32) - (local $l5842 i32) - (local $l5843 i32) - (local $l5844 i32) - (local $l5845 i32) - (local $l5846 i32) - (local $l5847 i32) - (local $l5848 i32) - (local $l5849 i32) - (local $l5850 i32) - (local $l5851 i32) - (local $l5852 i32) - (local $l5853 i32) - (local $l5854 i32) - (local $l5855 i32) - (local $l5856 i32) - (local $l5857 i32) - (local $l5858 i32) - (local $l5859 i32) - (local $l5860 i32) - (local $l5861 i32) - (local $l5862 i32) - (local $l5863 i32) - (local $l5864 i32) - (local $l5865 i32) - (local $l5866 i32) - (local $l5867 i32) - (local $l5868 i32) - (local $l5869 i32) - (local $l5870 i32) - (local $l5871 i32) - (local $l5872 i32) - (local $l5873 i32) - (local $l5874 i32) - (local $l5875 i32) - (local $l5876 i32) - (local $l5877 i32) - (local $l5878 i32) - (local $l5879 i32) - (local $l5880 i32) - (local $l5881 i32) - (local $l5882 i32) - (local $l5883 i32) - (local $l5884 i32) - (local $l5885 i32) - (local $l5886 i32) - (local $l5887 i32) - (local $l5888 i32) - (local $l5889 i32) - (local $l5890 i32) - (local $l5891 i32) - (local $l5892 i32) - (local $l5893 i32) - (local $l5894 i32) - (local $l5895 i32) - (local $l5896 i32) - (local $l5897 i32) - (local $l5898 i32) - (local $l5899 i32) - (local $l5900 i32) - (local $l5901 i32) - (local $l5902 i32) - (local $l5903 i32) - (local $l5904 i32) - (local $l5905 i32) - (local $l5906 i32) - (local $l5907 i32) - (local $l5908 i32) - (local $l5909 i32) - (local $l5910 i32) - (local $l5911 i32) - (local $l5912 i32) - (local $l5913 i32) - (local $l5914 i32) - (local $l5915 i32) - (local $l5916 i32) - (local $l5917 i32) - (local $l5918 i32) - (local $l5919 i32) - (local $l5920 i32) - (local $l5921 i32) - (local $l5922 i32) - (local $l5923 i32) - (local $l5924 i32) - (local $l5925 i32) - (local $l5926 i32) - (local $l5927 i32) - (local $l5928 i32) - (local $l5929 i32) - (local $l5930 i32) - (local $l5931 i32) - (local $l5932 i32) - (local $l5933 i32) - (local $l5934 i32) - (local $l5935 i32) - (local $l5936 i32) - (local $l5937 i32) - (local $l5938 i32) - (local $l5939 i32) - (local $l5940 i32) - (local $l5941 i32) - (local $l5942 i32) - (local $l5943 i32) - (local $l5944 i32) - (local $l5945 i32) - (local $l5946 i32) - (local $l5947 i32) - (local $l5948 i32) - (local $l5949 i32) - (local $l5950 i32) - (local $l5951 i32) - (local $l5952 i32) - (local $l5953 i32) - (local $l5954 i32) - (local $l5955 i32) - (local $l5956 i32) - (local $l5957 i32) - (local $l5958 i32) - (local $l5959 i32) - (local $l5960 i32) - (local $l5961 i32) - (local $l5962 i32) - (local $l5963 i32) - (local $l5964 i32) - (local $l5965 i32) - (local $l5966 i32) - (local $l5967 i32) - (local $l5968 i32) - (local $l5969 i32) - (local $l5970 i32) - (local $l5971 i32) - (local $l5972 i32) - (local $l5973 i32) - (local $l5974 i32) - (local $l5975 i32) - (local $l5976 i32) - (local $l5977 i32) - (local $l5978 i32) - (local $l5979 i32) - (local $l5980 i32) - (local $l5981 i32) - (local $l5982 i32) - (local $l5983 i32) - (local $l5984 i32) - (local $l5985 i32) - (local $l5986 i32) - (local $l5987 i32) - (local $l5988 i32) - (local $l5989 i32) - (local $l5990 i32) - (local $l5991 i32) - (local $l5992 i32) - (local $l5993 i32) - (local $l5994 i32) - (local $l5995 i32) - (local $l5996 i32) - (local $l5997 i32) - (local $l5998 i32) - (local $l5999 i32) - (local $l6000 i32) - (local $l6001 i32) - (local $l6002 i32) - (local $l6003 i32) - (local $l6004 i32) - (local $l6005 i32) - (local $l6006 i32) - (local $l6007 i32) - (local $l6008 i32) - (local $l6009 i32) - (local $l6010 i32) - (local $l6011 i32) - (local $l6012 i32) - (local $l6013 i32) - (local $l6014 i32) - (local $l6015 i32) - (local $l6016 i32) - (local $l6017 i32) - (local $l6018 i32) - (local $l6019 i32) - (local $l6020 i32) - (local $l6021 i32) - (local $l6022 i32) - (local $l6023 i32) - (local $l6024 i32) - (local $l6025 i32) - (local $l6026 i32) - (local $l6027 i32) - (local $l6028 i32) - (local $l6029 i32) - (local $l6030 i32) - (local $l6031 i32) - (local $l6032 i32) - (local $l6033 i32) - (local $l6034 i32) - (local $l6035 i32) - (local $l6036 i32) - (local $l6037 i32) - (local $l6038 i32) - (local $l6039 i32) - (local $l6040 i32) - (local $l6041 i32) - (local $l6042 i32) - (local $l6043 i32) - (local $l6044 i32) - (local $l6045 i32) - (local $l6046 i32) - (local $l6047 i32) - (local $l6048 i32) - (local $l6049 i32) - (local $l6050 i32) - (local $l6051 i32) - (local $l6052 i32) - (local $l6053 i32) - (local $l6054 i32) - (local $l6055 i32) - (local $l6056 i32) - (local $l6057 i32) - (local $l6058 i32) - (local $l6059 i32) - (local $l6060 i32) - (local $l6061 i32) - (local $l6062 i32) - (local $l6063 i32) - (local $l6064 i32) - (local $l6065 i32) - (local $l6066 i32) - (local $l6067 i32) - (local $l6068 i32) - (local $l6069 i32) - (local $l6070 i32) - (local $l6071 i32) - (local $l6072 i32) - (local $l6073 i32) - (local $l6074 i32) - (local $l6075 i32) - (local $l6076 i32) - (local $l6077 i32) - (local $l6078 i32) - (local $l6079 i32) - (local $l6080 i32) - (local $l6081 i32) - (local $l6082 i32) - (local $l6083 i32) - (local $l6084 i32) - (local $l6085 i32) - (local $l6086 i32) - (local $l6087 i32) - (local $l6088 i32) - (local $l6089 i32) - (local $l6090 i32) - (local $l6091 i32) - (local $l6092 i32) - (local $l6093 i32) - (local $l6094 i32) - (local $l6095 i32) - (local $l6096 i32) - (local $l6097 i32) - (local $l6098 i32) - (local $l6099 i32) - (local $l6100 i32) - (local $l6101 i32) - (local $l6102 i32) - (local $l6103 i32) - (local $l6104 i32) - (local $l6105 i32) - (local $l6106 i32) - (local $l6107 i32) - (local $l6108 i32) - (local $l6109 i32) - (local $l6110 i32) - (local $l6111 i32) - (local $l6112 i32) - (local $l6113 i32) - (local $l6114 i32) - (local $l6115 i32) - (local $l6116 i32) - (local $l6117 i32) - (local $l6118 i32) - (local $l6119 i32) - (local $l6120 i32) - (local $l6121 i32) - (local $l6122 i32) - (local $l6123 i32) - (local $l6124 i32) - (local $l6125 i32) - (local $l6126 i32) - (local $l6127 i32) - (local $l6128 i32) - (local $l6129 i32) - (local $l6130 i32) - (local $l6131 i32) - (local $l6132 i32) - (local $l6133 i32) - (local $l6134 i32) - (local $l6135 i32) - (local $l6136 i32) - (local $l6137 i32) - (local $l6138 i32) - (local $l6139 i32) - (local $l6140 i32) - (local $l6141 i32) - (local $l6142 i32) - (local $l6143 i32) - (local $l6144 i32) - (local $l6145 i32) - (local $l6146 i32) - (local $l6147 i32) - (local $l6148 i32) - (local $l6149 i32) - (local $l6150 i32) - (local $l6151 i32) - (local $l6152 i32) - (local $l6153 i32) - (local $l6154 i32) - (local $l6155 i32) - (local $l6156 i32) - (local $l6157 i32) - (local $l6158 i32) - (local $l6159 i32) - (local $l6160 i32) - (local $l6161 i32) - (local $l6162 i32) - (local $l6163 i32) - (local $l6164 i32) - (local $l6165 i32) - (local $l6166 i32) - (local $l6167 i32) - (local $l6168 i32) - (local $l6169 i32) - (local $l6170 i32) - (local $l6171 i32) - (local $l6172 i32) - (local $l6173 i32) - (local $l6174 i32) - (local $l6175 i32) - (local $l6176 i32) - (local $l6177 i32) - (local $l6178 i32) - (local $l6179 i32) - (local $l6180 i32) - (local $l6181 i32) - (local $l6182 i32) - (local $l6183 i32) - (local $l6184 i32) - (local $l6185 i32) - (local $l6186 i32) - (local $l6187 i32) - (local $l6188 i32) - (local $l6189 i32) - (local $l6190 i32) - (local $l6191 i32) - (local $l6192 i32) - (local $l6193 i32) - (local $l6194 i32) - (local $l6195 i32) - (local $l6196 i32) - (local $l6197 i32) - (local $l6198 i32) - (local $l6199 i32) - (local $l6200 i32) - (local $l6201 i32) - (local $l6202 i32) - (local $l6203 i32) - (local $l6204 i32) - (local $l6205 i32) - (local $l6206 i32) - (local $l6207 i32) - (local $l6208 i32) - (local $l6209 i32) - (local $l6210 i32) - (local $l6211 i32) - (local $l6212 i32) - (local $l6213 i32) - (local $l6214 i32) - (local $l6215 i32) - (local $l6216 i32) - (local $l6217 i32) - (local $l6218 i32) - (local $l6219 i32) - (local $l6220 i32) - (local $l6221 i32) - (local $l6222 i32) - (local $l6223 i32) - (local $l6224 i32) - (local $l6225 i32) - (local $l6226 i32) - (local $l6227 i32) - (local $l6228 i32) - (local $l6229 i32) - (local $l6230 i32) - (local $l6231 i32) - (local $l6232 i32) - (local $l6233 i32) - (local $l6234 i32) - (local $l6235 i32) - (local $l6236 i32) - (local $l6237 i32) - (local $l6238 i32) - (local $l6239 i32) - (local $l6240 i32) - (local $l6241 i32) - (local $l6242 i32) - (local $l6243 i32) - (local $l6244 i32) - (local $l6245 i32) - (local $l6246 i32) - (local $l6247 i32) - (local $l6248 i32) - (local $l6249 i32) - (local $l6250 i32) - (local $l6251 i32) - (local $l6252 i32) - (local $l6253 i32) - (local $l6254 i32) - (local $l6255 i32) - (local $l6256 i32) - (local $l6257 i32) - (local $l6258 i32) - (local $l6259 i32) - (local $l6260 i32) - (local $l6261 i32) - (local $l6262 i32) - (local $l6263 i32) - (local $l6264 i32) - (local $l6265 i32) - (local $l6266 i32) - (local $l6267 i32) - (local $l6268 i32) - (local $l6269 i32) - (local $l6270 i32) - (local $l6271 i32) - (local $l6272 i32) - (local $l6273 i32) - (local $l6274 i32) - (local $l6275 i32) - (local $l6276 i32) - (local $l6277 i32) - (local $l6278 i32) - (local $l6279 i32) - (local $l6280 i32) - (local $l6281 i32) - (local $l6282 i32) - (local $l6283 i32) - (local $l6284 i32) - (local $l6285 i32) - (local $l6286 i32) - (local $l6287 i32) - (local $l6288 i32) - (local $l6289 i32) - (local $l6290 i32) - (local $l6291 i32) - (local $l6292 i32) - (local $l6293 i32) - (local $l6294 i32) - (local $l6295 i32) - (local $l6296 i32) - (local $l6297 i32) - (local $l6298 i32) - (local $l6299 i32) - (local $l6300 i32) - (local $l6301 i32) - (local $l6302 i32) - (local $l6303 i32) - (local $l6304 i32) - (local $l6305 i32) - (local $l6306 i32) - (local $l6307 i32) - (local $l6308 i32) - (local $l6309 i32) - (local $l6310 i32) - (local $l6311 i32) - (local $l6312 i32) - (local $l6313 i32) - (local $l6314 i32) - (local $l6315 i32) - (local $l6316 i32) - (local $l6317 i32) - (local $l6318 i32) - (local $l6319 i32) - (local $l6320 i32) - (local $l6321 i32) - (local $l6322 i32) - (local $l6323 i32) - (local $l6324 i32) - (local $l6325 i32) - (local $l6326 i32) - (local $l6327 i32) - (local $l6328 i32) - (local $l6329 i32) - (local $l6330 i32) - (local $l6331 i32) - (local $l6332 i32) - (local $l6333 i32) - (local $l6334 i32) - (local $l6335 i32) - (local $l6336 i32) - (local $l6337 i32) - (local $l6338 i32) - (local $l6339 i32) - (local $l6340 i32) - (local $l6341 i32) - (local $l6342 i32) - (local $l6343 i32) - (local $l6344 i32) - (local $l6345 i32) - (local $l6346 i32) - (local $l6347 i32) - (local $l6348 i32) - (local $l6349 i32) - (local $l6350 i32) - (local $l6351 i32) - (local $l6352 i32) - (local $l6353 i32) - (local $l6354 i32) - (local $l6355 i32) - (local $l6356 i32) - (local $l6357 i32) - (local $l6358 i32) - (local $l6359 i32) - (local $l6360 i32) - (local $l6361 i32) - (local $l6362 i32) - (local $l6363 i32) - (local $l6364 i32) - (local $l6365 i32) - (local $l6366 i32) - (local $l6367 i32) - (local $l6368 i32) - (local $l6369 i32) - (local $l6370 i32) - (local $l6371 i32) - (local $l6372 i32) - (local $l6373 i32) - (local $l6374 i32) - (local $l6375 i32) - (local $l6376 i32) - (local $l6377 i32) - (local $l6378 i32) - (local $l6379 i32) - (local $l6380 i32) - (local $l6381 i32) - (local $l6382 i32) - (local $l6383 i32) - (local $l6384 i32) - (local $l6385 i32) - (local $l6386 i32) - (local $l6387 i32) - (local $l6388 i32) - (local $l6389 i32) - (local $l6390 i32) - (local $l6391 i32) - (local $l6392 i32) - (local $l6393 i32) - (local $l6394 i32) - (local $l6395 i32) - (local $l6396 i32) - (local $l6397 i32) - (local $l6398 i32) - (local $l6399 i32) - (local $l6400 i32) - (local $l6401 i32) - (local $l6402 i32) - (local $l6403 i32) - (local $l6404 i32) - (local $l6405 i32) - (local $l6406 i32) - (local $l6407 i32) - (local $l6408 i32) - (local $l6409 i32) - (local $l6410 i32) - (local $l6411 i32) - (local $l6412 i32) - (local $l6413 i32) - (local $l6414 i32) - (local $l6415 i32) - (local $l6416 i32) - (local $l6417 i32) - (local $l6418 i32) - (local $l6419 i32) - (local $l6420 i32) - (local $l6421 i32) - (local $l6422 i32) - (local $l6423 i32) - (local $l6424 i32) - (local $l6425 i32) - (local $l6426 i32) - (local $l6427 i32) - (local $l6428 i32) - (local $l6429 i32) - (local $l6430 i32) - (local $l6431 i32) - (local $l6432 i32) - (local $l6433 i32) - (local $l6434 i32) - (local $l6435 i32) - (local $l6436 i32) - (local $l6437 i32) - (local $l6438 i32) - (local $l6439 i32) - (local $l6440 i32) - (local $l6441 i32) - (local $l6442 i32) - (local $l6443 i32) - (local $l6444 i32) - (local $l6445 i32) - (local $l6446 i32) - (local $l6447 i32) - (local $l6448 i32) - (local $l6449 i32) - (local $l6450 i32) - (local $l6451 i32) - (local $l6452 i32) - (local $l6453 i32) - (local $l6454 i32) - (local $l6455 i32) - (local $l6456 i32) - (local $l6457 i32) - (local $l6458 i32) - (local $l6459 i32) - (local $l6460 i32) - (local $l6461 i32) - (local $l6462 i32) - (local $l6463 i32) - (local $l6464 i32) - (local $l6465 i32) - (local $l6466 i32) - (local $l6467 i32) - (local $l6468 i32) - (local $l6469 i32) - (local $l6470 i32) - (local $l6471 i32) - (local $l6472 i32) - (local $l6473 i32) - (local $l6474 i32) - (local $l6475 i32) - (local $l6476 i32) - (local $l6477 i32) - (local $l6478 i32) - (local $l6479 i32) - (local $l6480 i32) - (local $l6481 i32) - (local $l6482 i32) - (local $l6483 i32) - (local $l6484 i32) - (local $l6485 i32) - (local $l6486 i32) - (local $l6487 i32) - (local $l6488 i32) - (local $l6489 i32) - (local $l6490 i32) - (local $l6491 i32) - (local $l6492 i32) - (local $l6493 i32) - (local $l6494 i32) - (local $l6495 i32) - (local $l6496 i32) - (local $l6497 i32) - (local $l6498 i32) - (local $l6499 i32) - (local $l6500 i32) - (local $l6501 i32) - (local $l6502 i32) - (local $l6503 i32) - (local $l6504 i32) - (local $l6505 i32) - (local $l6506 i32) - (local $l6507 i32) - (local $l6508 i32) - (local $l6509 i32) - (local $l6510 i32) - (local $l6511 i32) - (local $l6512 i32) - (local $l6513 i32) - (local $l6514 i32) - (local $l6515 i32) - (local $l6516 i32) - (local $l6517 i32) - (local $l6518 i32) - (local $l6519 i32) - (local $l6520 i32) - (local $l6521 i32) - (local $l6522 i32) - (local $l6523 i32) - (local $l6524 i32) - (local $l6525 i32) - (local $l6526 i32) - (local $l6527 i32) - (local $l6528 i32) - (local $l6529 i32) - (local $l6530 i32) - (local $l6531 i32) - (local $l6532 i32) - (local $l6533 i32) - (local $l6534 i32) - (local $l6535 i32) - (local $l6536 i32) - (local $l6537 i32) - (local $l6538 i32) - (local $l6539 i32) - (local $l6540 i32) - (local $l6541 i32) - (local $l6542 i32) - (local $l6543 i32) - (local $l6544 i32) - (local $l6545 i32) - (local $l6546 i32) - (local $l6547 i32) - (local $l6548 i32) - (local $l6549 i32) - (local $l6550 i32) - (local $l6551 i32) - (local $l6552 i32) - (local $l6553 i32) - (local $l6554 i32) - (local $l6555 i32) - (local $l6556 i32) - (local $l6557 i32) - (local $l6558 i32) - (local $l6559 i32) - (local $l6560 i32) - (local $l6561 i32) - (local $l6562 i32) - (local $l6563 i32) - (local $l6564 i32) - (local $l6565 i32) - (local $l6566 i32) - (local $l6567 i32) - (local $l6568 i32) - (local $l6569 i32) - (local $l6570 i32) - (local $l6571 i32) - (local $l6572 i32) - (local $l6573 i32) - (local $l6574 i32) - (local $l6575 i32) - (local $l6576 i32) - (local $l6577 i32) - (local $l6578 i32) - (local $l6579 i32) - (local $l6580 i32) - (local $l6581 i32) - (local $l6582 i32) - (local $l6583 i32) - (local $l6584 i32) - (local $l6585 i32) - (local $l6586 i32) - (local $l6587 i32) - (local $l6588 i32) - (local $l6589 i32) - (local $l6590 i32) - (local $l6591 i32) - (local $l6592 i32) - (local $l6593 i32) - (local $l6594 i32) - (local $l6595 i32) - (local $l6596 i32) - (local $l6597 i32) - (local $l6598 i32) - (local $l6599 i32) - (local $l6600 i32) - (local $l6601 i32) - (local $l6602 i32) - (local $l6603 i32) - (local $l6604 i32) - (local $l6605 i32) - (local $l6606 i32) - (local $l6607 i32) - (local $l6608 i32) - (local $l6609 i32) - (local $l6610 i32) - (local $l6611 i32) - (local $l6612 i32) - (local $l6613 i32) - (local $l6614 i32) - (local $l6615 i32) - (local $l6616 i32) - (local $l6617 i32) - (local $l6618 i32) - (local $l6619 i32) - (local $l6620 i32) - (local $l6621 i32) - (local $l6622 i32) - (local $l6623 i32) - (local $l6624 i32) - (local $l6625 i32) - (local $l6626 i32) - (local $l6627 i32) - (local $l6628 i32) - (local $l6629 i32) - (local $l6630 i32) - (local $l6631 i32) - (local $l6632 i32) - (local $l6633 i32) - (local $l6634 i32) - (local $l6635 i32) - (local $l6636 i32) - (local $l6637 i32) - (local $l6638 i32) - (local $l6639 i32) - (local $l6640 i32) - (local $l6641 i32) - (local $l6642 i32) - (local $l6643 i32) - (local $l6644 i32) - (local $l6645 i32) - (local $l6646 i32) - (local $l6647 i32) - (local $l6648 i32) - (local $l6649 i32) - (local $l6650 i32) - (local $l6651 i32) - (local $l6652 i32) - (local $l6653 i32) - (local $l6654 i32) - (local $l6655 i32) - (local $l6656 i32) - (local $l6657 i32) - (local $l6658 i32) - (local $l6659 i32) - (local $l6660 i32) - (local $l6661 i32) - (local $l6662 i32) - (local $l6663 i32) - (local $l6664 i32) - (local $l6665 i32) - (local $l6666 i32) - (local $l6667 i32) - (local $l6668 i32) - (local $l6669 i32) - (local $l6670 i32) - (local $l6671 i32) - (local $l6672 i32) - (local $l6673 i32) - (local $l6674 i32) - (local $l6675 i32) - (local $l6676 i32) - (local $l6677 i32) - (local $l6678 i32) - (local $l6679 i32) - (local $l6680 i32) - (local $l6681 i32) - (local $l6682 i32) - (local $l6683 i32) - (local $l6684 i32) - (local $l6685 i32) - (local $l6686 i32) - (local $l6687 i32) - (local $l6688 i32) - (local $l6689 i32) - (local $l6690 i32) - (local $l6691 i32) - (local $l6692 i32) - (local $l6693 i32) - (local $l6694 i32) - (local $l6695 i32) - (local $l6696 i32) - (local $l6697 i32) - (local $l6698 i32) - (local $l6699 i32) - (local $l6700 i32) - (local $l6701 i32) - (local $l6702 i32) - (local $l6703 i32) - (local $l6704 i32) - (local $l6705 i32) - (local $l6706 i32) - (local $l6707 i32) - (local $l6708 i32) - (local $l6709 i32) - (local $l6710 i32) - (local $l6711 i32) - (local $l6712 i32) - (local $l6713 i32) - (local $l6714 i32) - (local $l6715 i32) - (local $l6716 i32) - (local $l6717 i32) - (local $l6718 i32) - (local $l6719 i32) - (local $l6720 i32) - (local $l6721 i32) - (local $l6722 i32) - (local $l6723 i32) - (local $l6724 i32) - (local $l6725 i32) - (local $l6726 i32) - (local $l6727 i32) - (local $l6728 i32) - (local $l6729 i32) - (local $l6730 i32) - (local $l6731 i32) - (local $l6732 i32) - (local $l6733 i32) - (local $l6734 i32) - (local $l6735 i32) - (local $l6736 i32) - (local $l6737 i32) - (local $l6738 i32) - (local $l6739 i32) - (local $l6740 i32) - (local $l6741 i32) - (local $l6742 i32) - (local $l6743 i32) - (local $l6744 i32) - (local $l6745 i32) - (local $l6746 i32) - (local $l6747 i32) - (local $l6748 i32) - (local $l6749 i32) - (local $l6750 i32) - (local $l6751 i32) - (local $l6752 i32) - (local $l6753 i32) - (local $l6754 i32) - (local $l6755 i32) - (local $l6756 i32) - (local $l6757 i32) - (local $l6758 i32) - (local $l6759 i32) - (local $l6760 i32) - (local $l6761 i32) - (local $l6762 i32) - (local $l6763 i32) - (local $l6764 i32) - (local $l6765 i32) - (local $l6766 i32) - (local $l6767 i32) - (local $l6768 i32) - (local $l6769 i32) - (local $l6770 i32) - (local $l6771 i32) - (local $l6772 i32) - (local $l6773 i32) - (local $l6774 i32) - (local $l6775 i32) - (local $l6776 i32) - (local $l6777 i32) - (local $l6778 i32) - (local $l6779 i32) - (local $l6780 i32) - (local $l6781 i32) - (local $l6782 i32) - (local $l6783 i32) - (local $l6784 i32) - (local $l6785 i32) - (local $l6786 i32) - (local $l6787 i32) - (local $l6788 i32) - (local $l6789 i32) - (local $l6790 i32) - (local $l6791 i32) - (local $l6792 i32) - (local $l6793 i32) - (local $l6794 i32) - (local $l6795 i32) - (local $l6796 i32) - (local $l6797 i32) - (local $l6798 i32) - (local $l6799 i32) - (local $l6800 i32) - (local $l6801 i32) - (local $l6802 i32) - (local $l6803 i32) - (local $l6804 i32) - (local $l6805 i32) - (local $l6806 i32) - (local $l6807 i32) - (local $l6808 i32) - (local $l6809 i32) - (local $l6810 i32) - (local $l6811 i32) - (local $l6812 i32) - (local $l6813 i32) - (local $l6814 i32) - (local $l6815 i32) - (local $l6816 i32) - (local $l6817 i32) - (local $l6818 i32) - (local $l6819 i32) - (local $l6820 i32) - (local $l6821 i32) - (local $l6822 i32) - (local $l6823 i32) - (local $l6824 i32) - (local $l6825 i32) - (local $l6826 i32) - (local $l6827 i32) - (local $l6828 i32) - (local $l6829 i32) - (local $l6830 i32) - (local $l6831 i32) - (local $l6832 i32) - (local $l6833 i32) - (local $l6834 i32) - (local $l6835 i32) - (local $l6836 i32) - (local $l6837 i32) - (local $l6838 i32) - (local $l6839 i32) - (local $l6840 i32) - (local $l6841 i32) - (local $l6842 i32) - (local $l6843 i32) - (local $l6844 i32) - (local $l6845 i32) - (local $l6846 i32) - (local $l6847 i32) - (local $l6848 i32) - (local $l6849 i32) - (local $l6850 i32) - (local $l6851 i32) - (local $l6852 i32) - (local $l6853 i32) - (local $l6854 i32) - (local $l6855 i32) - (local $l6856 i32) - (local $l6857 i32) - (local $l6858 i32) - (local $l6859 i32) - (local $l6860 i32) - (local $l6861 i32) - (local $l6862 i32) - (local $l6863 i32) - (local $l6864 i32) - (local $l6865 i32) - (local $l6866 i32) - (local $l6867 i32) - (local $l6868 i32) - (local $l6869 i32) - (local $l6870 i32) - (local $l6871 i32) - (local $l6872 i32) - (local $l6873 i32) - (local $l6874 i32) - (local $l6875 i32) - (local $l6876 i32) - (local $l6877 i32) - (local $l6878 i32) - (local $l6879 i32) - (local $l6880 i32) - (local $l6881 i32) - (local $l6882 i32) - (local $l6883 i32) - (local $l6884 i32) - (local $l6885 i32) - (local $l6886 i32) - (local $l6887 i32) - (local $l6888 i32) - (local $l6889 i32) - (local $l6890 i32) - (local $l6891 i32) - (local $l6892 i32) - (local $l6893 i32) - (local $l6894 i32) - (local $l6895 i32) - (local $l6896 i32) - (local $l6897 i32) - (local $l6898 i32) - (local $l6899 i32) - (local $l6900 i32) - (local $l6901 i32) - (local $l6902 i32) - (local $l6903 i32) - (local $l6904 i32) - (local $l6905 i32) - (local $l6906 i32) - (local $l6907 i32) - (local $l6908 i32) - (local $l6909 i32) - (local $l6910 i32) - (local $l6911 i32) - (local $l6912 i32) - (local $l6913 i32) - (local $l6914 i32) - (local $l6915 i32) - (local $l6916 i32) - (local $l6917 i32) - (local $l6918 i32) - (local $l6919 i32) - (local $l6920 i32) - (local $l6921 i32) - (local $l6922 i32) - (local $l6923 i32) - (local $l6924 i32) - (local $l6925 i32) - (local $l6926 i32) - (local $l6927 i32) - (local $l6928 i32) - (local $l6929 i32) - (local $l6930 i32) - (local $l6931 i32) - (local $l6932 i32) - (local $l6933 i32) - (local $l6934 i32) - (local $l6935 i32) - (local $l6936 i32) - (local $l6937 i32) - (local $l6938 i32) - (local $l6939 i32) - (local $l6940 i32) - (local $l6941 i32) - (local $l6942 i32) - (local $l6943 i32) - (local $l6944 i32) - (local $l6945 i32) - (local $l6946 i32) - (local $l6947 i32) - (local $l6948 i32) - (local $l6949 i32) - (local $l6950 i32) - (local $l6951 i32) - (local $l6952 i32) - (local $l6953 i32) - (local $l6954 i32) - (local $l6955 i32) - (local $l6956 i32) - (local $l6957 i32) - (local $l6958 i32) - (local $l6959 i32) - (local $l6960 i32) - (local $l6961 i32) - (local $l6962 i32) - (local $l6963 i32) - (local $l6964 i32) - (local $l6965 i32) - (local $l6966 i32) - (local $l6967 i32) - (local $l6968 i32) - (local $l6969 i32) - (local $l6970 i32) - (local $l6971 i32) - (local $l6972 i32) - (local $l6973 i32) - (local $l6974 i32) - (local $l6975 i32) - (local $l6976 i32) - (local $l6977 i32) - (local $l6978 i32) - (local $l6979 i32) - (local $l6980 i32) - (local $l6981 i32) - (local $l6982 i32) - (local $l6983 i32) - (local $l6984 i32) - (local $l6985 i32) - (local $l6986 i32) - (local $l6987 i32) - (local $l6988 i32) - (local $l6989 i32) - (local $l6990 i32) - (local $l6991 i32) - (local $l6992 i32) - (local $l6993 i32) - (local $l6994 i32) - (local $l6995 i32) - (local $l6996 i32) - (local $l6997 i32) - (local $l6998 i32) - (local $l6999 i32) - (local $l7000 i32) - (local $l7001 i32) - (local $l7002 i32) - (local $l7003 i32) - (local $l7004 i32) - (local $l7005 i32) - (local $l7006 i32) - (local $l7007 i32) - (local $l7008 i32) - (local $l7009 i32) - (local $l7010 i32) - (local $l7011 i32) - (local $l7012 i32) - (local $l7013 i32) - (local $l7014 i32) - (local $l7015 i32) - (local $l7016 i32) - (local $l7017 i32) - (local $l7018 i32) - (local $l7019 i32) - (local $l7020 i32) - (local $l7021 i32) - (local $l7022 i32) - (local $l7023 i32) - (local $l7024 i32) - (local $l7025 i32) - (local $l7026 i32) - (local $l7027 i32) - (local $l7028 i32) - (local $l7029 i32) - (local $l7030 i32) - (local $l7031 i32) - (local $l7032 i32) - (local $l7033 i32) - (local $l7034 i32) - (local $l7035 i32) - (local $l7036 i32) - (local $l7037 i32) - (local $l7038 i32) - (local $l7039 i32) - (local $l7040 i32) - (local $l7041 i32) - (local $l7042 i32) - (local $l7043 i32) - (local $l7044 i32) - (local $l7045 i32) - (local $l7046 i32) - (local $l7047 i32) - (local $l7048 i32) - (local $l7049 i32) - (local $l7050 i32) - (local $l7051 i32) - (local $l7052 i32) - (local $l7053 i32) - (local $l7054 i32) - (local $l7055 i32) - (local $l7056 i32) - (local $l7057 i32) - (local $l7058 i32) - (local $l7059 i32) - (local $l7060 i32) - (local $l7061 i32) - (local $l7062 i32) - (local $l7063 i32) - (local $l7064 i32) - (local $l7065 i32) - (local $l7066 i32) - (local $l7067 i32) - (local $l7068 i32) - (local $l7069 i32) - (local $l7070 i32) - (local $l7071 i32) - (local $l7072 i32) - (local $l7073 i32) - (local $l7074 i32) - (local $l7075 i32) - (local $l7076 i32) - (local $l7077 i32) - (local $l7078 i32) - (local $l7079 i32) - (local $l7080 i32) - (local $l7081 i32) - (local $l7082 i32) - (local $l7083 i32) - (local $l7084 i32) - (local $l7085 i32) - (local $l7086 i32) - (local $l7087 i32) - (local $l7088 i32) - (local $l7089 i32) - (local $l7090 i32) - (local $l7091 i32) - (local $l7092 i32) - (local $l7093 i32) - (local $l7094 i32) - (local $l7095 i32) - (local $l7096 i32) - (local $l7097 i32) - (local $l7098 i32) - (local $l7099 i32) - (local $l7100 i32) - (local $l7101 i32) - (local $l7102 i32) - (local $l7103 i32) - (local $l7104 i32) - (local $l7105 i32) - (local $l7106 i32) - (local $l7107 i32) - (local $l7108 i32) - (local $l7109 i32) - (local $l7110 i32) - (local $l7111 i32) - (local $l7112 i32) - (local $l7113 i32) - (local $l7114 i32) - (local $l7115 i32) - (local $l7116 i32) - (local $l7117 i32) - (local $l7118 i32) - (local $l7119 i32) - (local $l7120 i32) - (local $l7121 i32) - (local $l7122 i32) - (local $l7123 i32) - (local $l7124 i32) - (local $l7125 i32) - (local $l7126 i32) - (local $l7127 i32) - (local $l7128 i32) - (local $l7129 i32) - (local $l7130 i32) - (local $l7131 i32) - (local $l7132 i32) - (local $l7133 i32) - (local $l7134 i32) - (local $l7135 i32) - (local $l7136 i32) - (local $l7137 i32) - (local $l7138 i32) - (local $l7139 i32) - (local $l7140 i32) - (local $l7141 i32) - (local $l7142 i32) - (local $l7143 i32) - (local $l7144 i32) - (local $l7145 i32) - (local $l7146 i32) - (local $l7147 i32) - (local $l7148 i32) - (local $l7149 i32) - (local $l7150 i32) - (local $l7151 i32) - (local $l7152 i32) - (local $l7153 i32) - (local $l7154 i32) - (local $l7155 i32) - (local $l7156 i32) - (local $l7157 i32) - (local $l7158 i32) - (local $l7159 i32) - (local $l7160 i32) - (local $l7161 i32) - (local $l7162 i32) - (local $l7163 i32) - (local $l7164 i32) - (local $l7165 i32) - (local $l7166 i32) - (local $l7167 i32) - (local $l7168 i32) - (local $l7169 i32) - (local $l7170 i32) - (local $l7171 i32) - (local $l7172 i32) - (local $l7173 i32) - (local $l7174 i32) - (local $l7175 i32) - (local $l7176 i32) - (local $l7177 i32) - (local $l7178 i32) - (local $l7179 i32) - (local $l7180 i32) - (local $l7181 i32) - (local $l7182 i32) - (local $l7183 i32) - (local $l7184 i32) - (local $l7185 i32) - (local $l7186 i32) - (local $l7187 i32) - (local $l7188 i32) - (local $l7189 i32) - (local $l7190 i32) - (local $l7191 i32) - (local $l7192 i32) - (local $l7193 i32) - (local $l7194 i32) - (local $l7195 i32) - (local $l7196 i32) - (local $l7197 i32) - (local $l7198 i32) - (local $l7199 i32) - (local $l7200 i32) - (local $l7201 i32) - (local $l7202 i32) - (local $l7203 i32) - (local $l7204 i32) - (local $l7205 i32) - (local $l7206 i32) - (local $l7207 i32) - (local $l7208 i32) - (local $l7209 i32) - (local $l7210 i32) - (local $l7211 i32) - (local $l7212 i32) - (local $l7213 i32) - (local $l7214 i32) - (local $l7215 i32) - (local $l7216 i32) - (local $l7217 i32) - (local $l7218 i32) - (local $l7219 i32) - (local $l7220 i32) - (local $l7221 i32) - (local $l7222 i32) - (local $l7223 i32) - (local $l7224 i32) - (local $l7225 i32) - (local $l7226 i32) - (local $l7227 i32) - (local $l7228 i32) - (local $l7229 i32) - (local $l7230 i32) - (local $l7231 i32) - (local $l7232 i32) - (local $l7233 i32) - (local $l7234 i32) - (local $l7235 i32) - (local $l7236 i32) - (local $l7237 i32) - (local $l7238 i32) - (local $l7239 i32) - (local $l7240 i32) - (local $l7241 i32) - (local $l7242 i32) - (local $l7243 i32) - (local $l7244 i32) - (local $l7245 i32) - (local $l7246 i32) - (local $l7247 i32) - (local $l7248 i32) - (local $l7249 i32) - (local $l7250 i32) - (local $l7251 i32) - (local $l7252 i32) - (local $l7253 i32) - (local $l7254 i32) - (local $l7255 i32) - (local $l7256 i32) - (local $l7257 i32) - (local $l7258 i32) - (local $l7259 i32) - (local $l7260 i32) - (local $l7261 i32) - (local $l7262 i32) - (local $l7263 i32) - (local $l7264 i32) - (local $l7265 i32) - (local $l7266 i32) - (local $l7267 i32) - (local $l7268 i32) - (local $l7269 i32) - (local $l7270 i32) - (local $l7271 i32) - (local $l7272 i32) - (local $l7273 i32) - (local $l7274 i32) - (local $l7275 i32) - (local $l7276 i32) - (local $l7277 i32) - (local $l7278 i32) - (local $l7279 i32) - (local $l7280 i32) - (local $l7281 i32) - (local $l7282 i32) - (local $l7283 i32) - (local $l7284 i32) - (local $l7285 i32) - (local $l7286 i32) - (local $l7287 i32) - (local $l7288 i32) - (local $l7289 i32) - (local $l7290 i32) - (local $l7291 i32) - (local $l7292 i32) - (local $l7293 i32) - (local $l7294 i32) - (local $l7295 i32) - (local $l7296 i32) - (local $l7297 i32) - (local $l7298 i32) - (local $l7299 i32) - (local $l7300 i32) - (local $l7301 i32) - (local $l7302 i32) - (local $l7303 i32) - (local $l7304 i32) - (local $l7305 i32) - (local $l7306 i32) - (local $l7307 i32) - (local $l7308 i32) - (local $l7309 i32) - (local $l7310 i32) - (local $l7311 i32) - (local $l7312 i32) - (local $l7313 i32) - (local $l7314 i32) - (local $l7315 i32) - (local $l7316 i32) - (local $l7317 i32) - (local $l7318 i32) - (local $l7319 i32) - (local $l7320 i32) - (local $l7321 i32) - (local $l7322 i32) - (local $l7323 i32) - (local $l7324 i32) - (local $l7325 i32) - (local $l7326 i32) - (local $l7327 i32) - (local $l7328 i32) - (local $l7329 i32) - (local $l7330 i32) - (local $l7331 i32) - (local $l7332 i32) - (local $l7333 i32) - (local $l7334 i32) - (local $l7335 i32) - (local $l7336 i32) - (local $l7337 i32) - (local $l7338 i32) - (local $l7339 i32) - (local $l7340 i32) - (local $l7341 i32) - (local $l7342 i32) - (local $l7343 i32) - (local $l7344 i32) - (local $l7345 i32) - (local $l7346 i32) - (local $l7347 i32) - (local $l7348 i32) - (local $l7349 i32) - (local $l7350 i32) - (local $l7351 i32) - (local $l7352 i32) - (local $l7353 i32) - (local $l7354 i32) - (local $l7355 i32) - (local $l7356 i32) - (local $l7357 i32) - (local $l7358 i32) - (local $l7359 i32) - (local $l7360 i32) - (local $l7361 i32) - (local $l7362 i32) - (local $l7363 i32) - (local $l7364 i32) - (local $l7365 i32) - (local $l7366 i32) - (local $l7367 i32) - (local $l7368 i32) - (local $l7369 i32) - (local $l7370 i32) - (local $l7371 i32) - (local $l7372 i32) - (local $l7373 i32) - (local $l7374 i32) - (local $l7375 i32) - (local $l7376 i32) - (local $l7377 i32) - (local $l7378 i32) - (local $l7379 i32) - (local $l7380 i32) - (local $l7381 i32) - (local $l7382 i32) - (local $l7383 i32) - (local $l7384 i32) - (local $l7385 i32) - (local $l7386 i32) - (local $l7387 i32) - (local $l7388 i32) - (local $l7389 i32) - (local $l7390 i32) - (local $l7391 i32) - (local $l7392 i32) - (local $l7393 i32) - (local $l7394 i32) - (local $l7395 i32) - (local $l7396 i32) - (local $l7397 i32) - (local $l7398 i32) - (local $l7399 i32) - (local $l7400 i32) - (local $l7401 i32) - (local $l7402 i32) - (local $l7403 i32) - (local $l7404 i32) - (local $l7405 i32) - (local $l7406 i32) - (local $l7407 i32) - (local $l7408 i32) - (local $l7409 i32) - (local $l7410 i32) - (local $l7411 i32) - (local $l7412 i32) - (local $l7413 i32) - (local $l7414 i32) - (local $l7415 i32) - (local $l7416 i32) - (local $l7417 i32) - (local $l7418 i32) - (local $l7419 i32) - (local $l7420 i32) - (local $l7421 i32) - (local $l7422 i32) - (local $l7423 i32) - (local $l7424 i32) - (local $l7425 i32) - (local $l7426 i32) - (local $l7427 i32) - (local $l7428 i32) - (local $l7429 i32) - (local $l7430 i32) - (local $l7431 i32) - (local $l7432 i32) - (local $l7433 i32) - (local $l7434 i32) - (local $l7435 i32) - (local $l7436 i32) - (local $l7437 i32) - (local $l7438 i32) - (local $l7439 i32) - (local $l7440 i32) - (local $l7441 i32) - (local $l7442 i32) - (local $l7443 i32) - (local $l7444 i32) - (local $l7445 i32) - (local $l7446 i32) - (local $l7447 i32) - (local $l7448 i32) - (local $l7449 i32) - (local $l7450 i32) - (local $l7451 i32) - (local $l7452 i32) - (local $l7453 i32) - (local $l7454 i32) - (local $l7455 i32) - (local $l7456 i32) - (local $l7457 i32) - (local $l7458 i32) - (local $l7459 i32) - (local $l7460 i32) - (local $l7461 i32) - (local $l7462 i32) - (local $l7463 i32) - (local $l7464 i32) - (local $l7465 i32) - (local $l7466 i32) - (local $l7467 i32) - (local $l7468 i32) - (local $l7469 i32) - (local $l7470 i32) - (local $l7471 i32) - (local $l7472 i32) - (local $l7473 i32) - (local $l7474 i32) - (local $l7475 i32) - (local $l7476 i32) - (local $l7477 i32) - (local $l7478 i32) - (local $l7479 i32) - (local $l7480 i32) - (local $l7481 i32) - (local $l7482 i32) - (local $l7483 i32) - (local $l7484 i32) - (local $l7485 i32) - (local $l7486 i32) - (local $l7487 i32) - (local $l7488 i32) - (local $l7489 i32) - (local $l7490 i32) - (local $l7491 i32) - (local $l7492 i32) - (local $l7493 i32) - (local $l7494 i32) - (local $l7495 i32) - (local $l7496 i32) - (local $l7497 i32) - (local $l7498 i32) - (local $l7499 i32) - (local $l7500 i32) - (local $l7501 i32) - (local $l7502 i32) - (local $l7503 i32) - (local $l7504 i32) - (local $l7505 i32) - (local $l7506 i32) - (local $l7507 i32) - (local $l7508 i32) - (local $l7509 i32) - (local $l7510 i32) - (local $l7511 i32) - (local $l7512 i32) - (local $l7513 i32) - (local $l7514 i32) - (local $l7515 i32) - (local $l7516 i32) - (local $l7517 i32) - (local $l7518 i32) - (local $l7519 i32) - (local $l7520 i32) - (local $l7521 i32) - (local $l7522 i32) - (local $l7523 i32) - (local $l7524 i32) - (local $l7525 i32) - (local $l7526 i32) - (local $l7527 i32) - (local $l7528 i32) - (local $l7529 i32) - (local $l7530 i32) - (local $l7531 i32) - (local $l7532 i32) - (local $l7533 i32) - (local $l7534 i32) - (local $l7535 i32) - (local $l7536 i32) - (local $l7537 i32) - (local $l7538 i32) - (local $l7539 i32) - (local $l7540 i32) - (local $l7541 i32) - (local $l7542 i32) - (local $l7543 i32) - (local $l7544 i32) - (local $l7545 i32) - (local $l7546 i32) - (local $l7547 i32) - (local $l7548 i32) - (local $l7549 i32) - (local $l7550 i32) - (local $l7551 i32) - (local $l7552 i32) - (local $l7553 i32) - (local $l7554 i32) - (local $l7555 i32) - (local $l7556 i32) - (local $l7557 i32) - (local $l7558 i32) - (local $l7559 i32) - (local $l7560 i32) - (local $l7561 i32) - (local $l7562 i32) - (local $l7563 i32) - (local $l7564 i32) - (local $l7565 i32) - (local $l7566 i32) - (local $l7567 i32) - (local $l7568 i32) - (local $l7569 i32) - (local $l7570 i32) - (local $l7571 i32) - (local $l7572 i32) - (local $l7573 i32) - (local $l7574 i32) - (local $l7575 i32) - (local $l7576 i32) - (local $l7577 i32) - (local $l7578 i32) - (local $l7579 i32) - (local $l7580 i32) - (local $l7581 i32) - (local $l7582 i32) - (local $l7583 i32) - (local $l7584 i32) - (local $l7585 i32) - (local $l7586 i32) - (local $l7587 i32) - (local $l7588 i32) - (local $l7589 i32) - (local $l7590 i32) - (local $l7591 i32) - (local $l7592 i32) - (local $l7593 i32) - (local $l7594 i32) - (local $l7595 i32) - (local $l7596 i32) - (local $l7597 i32) - (local $l7598 i32) - (local $l7599 i32) - (local $l7600 i32) - (local $l7601 i32) - (local $l7602 i32) - (local $l7603 i32) - (local $l7604 i32) - (local $l7605 i32) - (local $l7606 i32) - (local $l7607 i32) - (local $l7608 i32) - (local $l7609 i32) - (local $l7610 i32) - (local $l7611 i32) - (local $l7612 i32) - (local $l7613 i32) - (local $l7614 i32) - (local $l7615 i32) - (local $l7616 i32) - (local $l7617 i32) - (local $l7618 i32) - (local $l7619 i32) - (local $l7620 i32) - (local $l7621 i32) - (local $l7622 i32) - (local $l7623 i32) - (local $l7624 i32) - (local $l7625 i32) - (local $l7626 i32) - (local $l7627 i32) - (local $l7628 i32) - (local $l7629 i32) - (local $l7630 i32) - (local $l7631 i32) - (local $l7632 i32) - (local $l7633 i32) - (local $l7634 i32) - (local $l7635 i32) - (local $l7636 i32) - (local $l7637 i32) - (local $l7638 i32) - (local $l7639 i32) - (local $l7640 i32) - (local $l7641 i32) - (local $l7642 i32) - (local $l7643 i32) - (local $l7644 i32) - (local $l7645 i32) - (local $l7646 i32) - (local $l7647 i32) - (local $l7648 i32) - (local $l7649 i32) - (local $l7650 i32) - (local $l7651 i32) - (local $l7652 i32) - (local $l7653 i32) - (local $l7654 i32) - (local $l7655 i32) - (local $l7656 i32) - (local $l7657 i32) - (local $l7658 i32) - (local $l7659 i32) - (local $l7660 i32) - (local $l7661 i32) - (local $l7662 i32) - (local $l7663 i32) - (local $l7664 i32) - (local $l7665 i32) - (local $l7666 i32) - (local $l7667 i32) - (local $l7668 i32) - (local $l7669 i32) - (local $l7670 i32) - (local $l7671 i32) - (local $l7672 i32) - (local $l7673 i32) - (local $l7674 i32) - (local $l7675 i32) - (local $l7676 i32) - (local $l7677 i32) - (local $l7678 i32) - (local $l7679 i32) - (local $l7680 i32) - (local $l7681 i32) - (local $l7682 i32) - (local $l7683 i32) - (local $l7684 i32) - (local $l7685 i32) - (local $l7686 i32) - (local $l7687 i32) - (local $l7688 i32) - (local $l7689 i32) - (local $l7690 i32) - (local $l7691 i32) - (local $l7692 i32) - (local $l7693 i32) - (local $l7694 i32) - (local $l7695 i32) - (local $l7696 i32) - (local $l7697 i32) - (local $l7698 i32) - (local $l7699 i32) - (local $l7700 i32) - (local $l7701 i32) - (local $l7702 i32) - (local $l7703 i32) - (local $l7704 i32) - (local $l7705 i32) - (local $l7706 i32) - (local $l7707 i32) - (local $l7708 i32) - (local $l7709 i32) - (local $l7710 i32) - (local $l7711 i32) - (local $l7712 i32) - (local $l7713 i32) - (local $l7714 i32) - (local $l7715 i32) - (local $l7716 i32) - (local $l7717 i32) - (local $l7718 i32) - (local $l7719 i32) - (local $l7720 i32) - (local $l7721 i32) - (local $l7722 i32) - (local $l7723 i32) - (local $l7724 i32) - (local $l7725 i32) - (local $l7726 i32) - (local $l7727 i32) - (local $l7728 i32) - (local $l7729 i32) - (local $l7730 i32) - (local $l7731 i32) - (local $l7732 i32) - (local $l7733 i32) - (local $l7734 i32) - (local $l7735 i32) - (local $l7736 i32) - (local $l7737 i32) - (local $l7738 i32) - (local $l7739 i32) - (local $l7740 i32) - (local $l7741 i32) - (local $l7742 i32) - (local $l7743 i32) - (local $l7744 i32) - (local $l7745 i32) - (local $l7746 i32) - (local $l7747 i32) - (local $l7748 i32) - (local $l7749 i32) - (local $l7750 i32) - (local $l7751 i32) - (local $l7752 i32) - (local $l7753 i32) - (local $l7754 i32) - (local $l7755 i32) - (local $l7756 i32) - (local $l7757 i32) - (local $l7758 i32) - (local $l7759 i32) - (local $l7760 i32) - (local $l7761 i32) - (local $l7762 i32) - (local $l7763 i32) - (local $l7764 i32) - (local $l7765 i32) - (local $l7766 i32) - (local $l7767 i32) - (local $l7768 i32) - (local $l7769 i32) - (local $l7770 i32) - (local $l7771 i32) - (local $l7772 i32) - (local $l7773 i32) - (local $l7774 i32) - (local $l7775 i32) - (local $l7776 i32) - (local $l7777 i32) - (local $l7778 i32) - (local $l7779 i32) - (local $l7780 i32) - (local $l7781 i32) - (local $l7782 i32) - (local $l7783 i32) - (local $l7784 i32) - (local $l7785 i32) - (local $l7786 i32) - (local $l7787 i32) - (local $l7788 i32) - (local $l7789 i32) - (local $l7790 i32) - (local $l7791 i32) - (local $l7792 i32) - (local $l7793 i32) - (local $l7794 i32) - (local $l7795 i32) - (local $l7796 i32) - (local $l7797 i32) - (local $l7798 i32) - (local $l7799 i32) - (local $l7800 i32) - (local $l7801 i32) - (local $l7802 i32) - (local $l7803 i32) - (local $l7804 i32) - (local $l7805 i32) - (local $l7806 i32) - (local $l7807 i32) - (local $l7808 i32) - (local $l7809 i32) - (local $l7810 i32) - (local $l7811 i32) - (local $l7812 i32) - (local $l7813 i32) - (local $l7814 i32) - (local $l7815 i32) - (local $l7816 i32) - (local $l7817 i32) - (local $l7818 i32) - (local $l7819 i32) - (local $l7820 i32) - (local $l7821 i32) - (local $l7822 i32) - (local $l7823 i32) - (local $l7824 i32) - (local $l7825 i32) - (local $l7826 i32) - (local $l7827 i32) - (local $l7828 i32) - (local $l7829 i32) - (local $l7830 i32) - (local $l7831 i32) - (local $l7832 i32) - (local $l7833 i32) - (local $l7834 i32) - (local $l7835 i32) - (local $l7836 i32) - (local $l7837 i32) - (local $l7838 i32) - (local $l7839 i32) - (local $l7840 i32) - (local $l7841 i32) - (local $l7842 i32) - (local $l7843 i32) - (local $l7844 i32) - (local $l7845 i32) - (local $l7846 i32) - (local $l7847 i32) - (local $l7848 i32) - (local $l7849 i32) - (local $l7850 i32) - (local $l7851 i32) - (local $l7852 i32) - (local $l7853 i32) - (local $l7854 i32) - (local $l7855 i32) - (local $l7856 i32) - (local $l7857 i32) - (local $l7858 i32) - (local $l7859 i32) - (local $l7860 i32) - (local $l7861 i32) - (local $l7862 i32) - (local $l7863 i32) - (local $l7864 i32) - (local $l7865 i32) - (local $l7866 i32) - (local $l7867 i32) - (local $l7868 i32) - (local $l7869 i32) - (local $l7870 i32) - (local $l7871 i32) - (local $l7872 i32) - (local $l7873 i32) - (local $l7874 i32) - (local $l7875 i32) - (local $l7876 i32) - (local $l7877 i32) - (local $l7878 i32) - (local $l7879 i32) - (local $l7880 i32) - (local $l7881 i32) - (local $l7882 i32) - (local $l7883 i32) - (local $l7884 i32) - (local $l7885 i32) - (local $l7886 i32) - (local $l7887 i32) - (local $l7888 i32) - (local $l7889 i32) - (local $l7890 i32) - (local $l7891 i32) - (local $l7892 i32) - (local $l7893 i32) - (local $l7894 i32) - (local $l7895 i32) - (local $l7896 i32) - (local $l7897 i32) - (local $l7898 i32) - (local $l7899 i32) - (local $l7900 i32) - (local $l7901 i32) - (local $l7902 i32) - (local $l7903 i32) - (local $l7904 i32) - (local $l7905 i32) - (local $l7906 i32) - (local $l7907 i32) - (local $l7908 i32) - (local $l7909 i32) - (local $l7910 i32) - (local $l7911 i32) - (local $l7912 i32) - (local $l7913 i32) - (local $l7914 i32) - (local $l7915 i32) - (local $l7916 i32) - (local $l7917 i32) - (local $l7918 i32) - (local $l7919 i32) - (local $l7920 i32) - (local $l7921 i32) - (local $l7922 i32) - (local $l7923 i32) - (local $l7924 i32) - (local $l7925 i32) - (local $l7926 i32) - (local $l7927 i32) - (local $l7928 i32) - (local $l7929 i32) - (local $l7930 i32) - (local $l7931 i32) - (local $l7932 i32) - (local $l7933 i32) - (local $l7934 i32) - (local $l7935 i32) - (local $l7936 i32) - (local $l7937 i32) - (local $l7938 i32) - (local $l7939 i32) - (local $l7940 i32) - (local $l7941 i32) - (local $l7942 i32) - (local $l7943 i32) - (local $l7944 i32) - (local $l7945 i32) - (local $l7946 i32) - (local $l7947 i32) - (local $l7948 i32) - (local $l7949 i32) - (local $l7950 i32) - (local $l7951 i32) - (local $l7952 i32) - (local $l7953 i32) - (local $l7954 i32) - (local $l7955 i32) - (local $l7956 i32) - (local $l7957 i32) - (local $l7958 i32) - (local $l7959 i32) - (local $l7960 i32) - (local $l7961 i32) - (local $l7962 i32) - (local $l7963 i32) - (local $l7964 i32) - (local $l7965 i32) - (local $l7966 i32) - (local $l7967 i32) - (local $l7968 i32) - (local $l7969 i32) - (local $l7970 i32) - (local $l7971 i32) - (local $l7972 i32) - (local $l7973 i32) - (local $l7974 i32) - (local $l7975 i32) - (local $l7976 i32) - (local $l7977 i32) - (local $l7978 i32) - (local $l7979 i32) - (local $l7980 i32) - (local $l7981 i32) - (local $l7982 i32) - (local $l7983 i32) - (local $l7984 i32) - (local $l7985 i32) - (local $l7986 i32) - (local $l7987 i32) - (local $l7988 i32) - (local $l7989 i32) - (local $l7990 i32) - (local $l7991 i32) - (local $l7992 i32) - (local $l7993 i32) - (local $l7994 i32) - (local $l7995 i32) - (local $l7996 i32) - (local $l7997 i32) - (local $l7998 i32) - (local $l7999 i32) - (local $l8000 i32) - (local $l8001 i32) - (local $l8002 i32) - (local $l8003 i32) - (local $l8004 i32) - (local $l8005 i32) - (local $l8006 i32) - (local $l8007 i32) - (local $l8008 i32) - (local $l8009 i32) - (local $l8010 i32) - (local $l8011 i32) - (local $l8012 i32) - (local $l8013 i32) - (local $l8014 i32) - (local $l8015 i32) - (local $l8016 i32) - (local $l8017 i32) - (local $l8018 i32) - (local $l8019 i32) - (local $l8020 i32) - (local $l8021 i32) - (local $l8022 i32) - (local $l8023 i32) - (local $l8024 i32) - (local $l8025 i32) - (local $l8026 i32) - (local $l8027 i32) - (local $l8028 i32) - (local $l8029 i32) - (local $l8030 i32) - (local $l8031 i32) - (local $l8032 i32) - (local $l8033 i32) - (local $l8034 i32) - (local $l8035 i32) - (local $l8036 i32) - (local $l8037 i32) - (local $l8038 i32) - (local $l8039 i32) - (local $l8040 i32) - (local $l8041 i32) - (local $l8042 i32) - (local $l8043 i32) - (local $l8044 i32) - (local $l8045 i32) - (local $l8046 i32) - (local $l8047 i32) - (local $l8048 i32) - (local $l8049 i32) - (local $l8050 i32) - (local $l8051 i32) - (local $l8052 i32) - (local $l8053 i32) - (local $l8054 i32) - (local $l8055 i32) - (local $l8056 i32) - (local $l8057 i32) - (local $l8058 i32) - (local $l8059 i32) - (local $l8060 i32) - (local $l8061 i32) - (local $l8062 i32) - (local $l8063 i32) - (local $l8064 i32) - (local $l8065 i32) - (local $l8066 i32) - (local $l8067 i32) - (local $l8068 i32) - (local $l8069 i32) - (local $l8070 i32) - (local $l8071 i32) - (local $l8072 i32) - (local $l8073 i32) - (local $l8074 i32) - (local $l8075 i32) - (local $l8076 i32) - (local $l8077 i32) - (local $l8078 i32) - (local $l8079 i32) - (local $l8080 i32) - (local $l8081 i32) - (local $l8082 i32) - (local $l8083 i32) - (local $l8084 i32) - (local $l8085 i32) - (local $l8086 i32) - (local $l8087 i32) - (local $l8088 i32) - (local $l8089 i32) - (local $l8090 i32) - (local $l8091 i32) - (local $l8092 i32) - (local $l8093 i32) - (local $l8094 i32) - (local $l8095 i32) - (local $l8096 i32) - (local $l8097 i32) - (local $l8098 i32) - (local $l8099 i32) - (local $l8100 i32) - (local $l8101 i32) - (local $l8102 i32) - (local $l8103 i32) - (local $l8104 i32) - (local $l8105 i32) - (local $l8106 i32) - (local $l8107 i32) - (local $l8108 i32) - (local $l8109 i32) - (local $l8110 i32) - (local $l8111 i32) - (local $l8112 i32) - (local $l8113 i32) - (local $l8114 i32) - (local $l8115 i32) - (local $l8116 i32) - (local $l8117 i32) - (local $l8118 i32) - (local $l8119 i32) - (local $l8120 i32) - (local $l8121 i32) - (local $l8122 i32) - (local $l8123 i32) - (local $l8124 i32) - (local $l8125 i32) - (local $l8126 i32) - (local $l8127 i32) - (local $l8128 i32) - (local $l8129 i32) - (local $l8130 i32) - (local $l8131 i32) - (local $l8132 i32) - (local $l8133 i32) - (local $l8134 i32) - (local $l8135 i32) - (local $l8136 i32) - (local $l8137 i32) - (local $l8138 i32) - (local $l8139 i32) - (local $l8140 i32) - (local $l8141 i32) - (local $l8142 i32) - (local $l8143 i32) - (local $l8144 i32) - (local $l8145 i32) - (local $l8146 i32) - (local $l8147 i32) - (local $l8148 i32) - (local $l8149 i32) - (local $l8150 i32) - (local $l8151 i32) - (local $l8152 i32) - (local $l8153 i32) - (local $l8154 i32) - (local $l8155 i32) - (local $l8156 i32) - (local $l8157 i32) - (local $l8158 i32) - (local $l8159 i32) - (local $l8160 i32) - (local $l8161 i32) - (local $l8162 i32) - (local $l8163 i32) - (local $l8164 i32) - (local $l8165 i32) - (local $l8166 i32) - (local $l8167 i32) - (local $l8168 i32) - (local $l8169 i32) - (local $l8170 i32) - (local $l8171 i32) - (local $l8172 i32) - (local $l8173 i32) - (local $l8174 i32) - (local $l8175 i32) - (local $l8176 i32) - (local $l8177 i32) - (local $l8178 i32) - (local $l8179 i32) - (local $l8180 i32) - (local $l8181 i32) - (local $l8182 i32) - (local $l8183 i32) - (local $l8184 i32) - (local $l8185 i32) - (local $l8186 i32) - (local $l8187 i32) - (local $l8188 i32) - (local $l8189 i32) - (local $l8190 i32) - (local $l8191 i32) - (local $l8192 i32) - (local $l8193 i32) - (local $l8194 i32) - (local $l8195 i32) - (local $l8196 i32) - (local $l8197 i32) - (local $l8198 i32) - (local $l8199 i32) - (local $l8200 i32) - (local $l8201 i32) - (local $l8202 i32) - (local $l8203 i32) - (local $l8204 i32) - (local $l8205 i32) - (local $l8206 i32) - (local $l8207 i32) - (local $l8208 i32) - (local $l8209 i32) - (local $l8210 i32) - (local $l8211 i32) - (local $l8212 i32) - (local $l8213 i32) - (local $l8214 i32) - (local $l8215 i32) - (local $l8216 i32) - (local $l8217 i32) - (local $l8218 i32) - (local $l8219 i32) - (local $l8220 i32) - (local $l8221 i32) - (local $l8222 i32) - (local $l8223 i32) - (local $l8224 i32) - (local $l8225 i32) - (local $l8226 i32) - (local $l8227 i32) - (local $l8228 i32) - (local $l8229 i32) - (local $l8230 i32) - (local $l8231 i32) - (local $l8232 i32) - (local $l8233 i32) - (local $l8234 i32) - (local $l8235 i32) - (local $l8236 i32) - (local $l8237 i32) - (local $l8238 i32) - (local $l8239 i32) - (local $l8240 i32) - (local $l8241 i32) - (local $l8242 i32) - (local $l8243 i32) - (local $l8244 i32) - (local $l8245 i32) - (local $l8246 i32) - (local $l8247 i32) - (local $l8248 i32) - (local $l8249 i32) - (local $l8250 i32) - (local $l8251 i32) - (local $l8252 i32) - (local $l8253 i32) - (local $l8254 i32) - (local $l8255 i32) - (local $l8256 i32) - (local $l8257 i32) - (local $l8258 i32) - (local $l8259 i32) - (local $l8260 i32) - (local $l8261 i32) - (local $l8262 i32) - (local $l8263 i32) - (local $l8264 i32) - (local $l8265 i32) - (local $l8266 i32) - (local $l8267 i32) - (local $l8268 i32) - (local $l8269 i32) - (local $l8270 i32) - (local $l8271 i32) - (local $l8272 i32) - (local $l8273 i32) - (local $l8274 i32) - (local $l8275 i32) - (local $l8276 i32) - (local $l8277 i32) - (local $l8278 i32) - (local $l8279 i32) - (local $l8280 i32) - (local $l8281 i32) - (local $l8282 i32) - (local $l8283 i32) - (local $l8284 i32) - (local $l8285 i32) - (local $l8286 i32) - (local $l8287 i32) - (local $l8288 i32) - (local $l8289 i32) - (local $l8290 i32) - (local $l8291 i32) - (local $l8292 i32) - (local $l8293 i32) - (local $l8294 i32) - (local $l8295 i32) - (local $l8296 i32) - (local $l8297 i32) - (local $l8298 i32) - (local $l8299 i32) - (local $l8300 i32) - (local $l8301 i32) - (local $l8302 i32) - (local $l8303 i32) - (local $l8304 i32) - (local $l8305 i32) - (local $l8306 i32) - (local $l8307 i32) - (local $l8308 i32) - (local $l8309 i32) - (local $l8310 i32) - (local $l8311 i32) - (local $l8312 i32) - (local $l8313 i32) - (local $l8314 i32) - (local $l8315 i32) - (local $l8316 i32) - (local $l8317 i32) - (local $l8318 i32) - (local $l8319 i32) - (local $l8320 i32) - (local $l8321 i32) - (local $l8322 i32) - (local $l8323 i32) - (local $l8324 i32) - (local $l8325 i32) - (local $l8326 i32) - (local $l8327 i32) - (local $l8328 i32) - (local $l8329 i32) - (local $l8330 i32) - (local $l8331 i32) - (local $l8332 i32) - (local $l8333 i32) - (local $l8334 i32) - (local $l8335 i32) - (local $l8336 i32) - (local $l8337 i32) - (local $l8338 i32) - (local $l8339 i32) - (local $l8340 i32) - (local $l8341 i32) - (local $l8342 i32) - (local $l8343 i32) - (local $l8344 i32) - (local $l8345 i32) - (local $l8346 i32) - (local $l8347 i32) - (local $l8348 i32) - (local $l8349 i32) - (local $l8350 i32) - (local $l8351 i32) - (local $l8352 i32) - (local $l8353 i32) - (local $l8354 i32) - (local $l8355 i32) - (local $l8356 i32) - (local $l8357 i32) - (local $l8358 i32) - (local $l8359 i32) - (local $l8360 i32) - (local $l8361 i32) - (local $l8362 i32) - (local $l8363 i32) - (local $l8364 i32) - (local $l8365 i32) - (local $l8366 i32) - (local $l8367 i32) - (local $l8368 i32) - (local $l8369 i32) - (local $l8370 i32) - (local $l8371 i32) - (local $l8372 i32) - (local $l8373 i32) - (local $l8374 i32) - (local $l8375 i32) - (local $l8376 i32) - (local $l8377 i32) - (local $l8378 i32) - (local $l8379 i32) - (local $l8380 i32) - (local $l8381 i32) - (local $l8382 i32) - (local $l8383 i32) - (local $l8384 i32) - (local $l8385 i32) - (local $l8386 i32) - (local $l8387 i32) - (local $l8388 i32) - (local $l8389 i32) - (local $l8390 i32) - (local $l8391 i32) - (local $l8392 i32) - (local $l8393 i32) - (local $l8394 i32) - (local $l8395 i32) - (local $l8396 i32) - (local $l8397 i32) - (local $l8398 i32) - (local $l8399 i32) - (local $l8400 i32) - (local $l8401 i32) - (local $l8402 i32) - (local $l8403 i32) - (local $l8404 i32) - (local $l8405 i32) - (local $l8406 i32) - (local $l8407 i32) - (local $l8408 i32) - (local $l8409 i32) - (local $l8410 i32) - (local $l8411 i32) - (local $l8412 i32) - (local $l8413 i32) - (local $l8414 i32) - (local $l8415 i32) - (local $l8416 i32) - (local $l8417 i32) - (local $l8418 i32) - (local $l8419 i32) - (local $l8420 i32) - (local $l8421 i32) - (local $l8422 i32) - (local $l8423 i32) - (local $l8424 i32) - (local $l8425 i32) - (local $l8426 i32) - (local $l8427 i32) - (local $l8428 i32) - (local $l8429 i32) - (local $l8430 i32) - (local $l8431 i32) - (local $l8432 i32) - (local $l8433 i32) - (local $l8434 i32) - (local $l8435 i32) - (local $l8436 i32) - (local $l8437 i32) - (local $l8438 i32) - (local $l8439 i32) - (local $l8440 i32) - (local $l8441 i32) - (local $l8442 i32) - (local $l8443 i32) - (local $l8444 i32) - (local $l8445 i32) - (local $l8446 i32) - (local $l8447 i32) - (local $l8448 i32) - (local $l8449 i32) - (local $l8450 i32) - (local $l8451 i32) - (local $l8452 i32) - (local $l8453 i32) - (local $l8454 i32) - (local $l8455 i32) - (local $l8456 i32) - (local $l8457 i32) - (local $l8458 i32) - (local $l8459 i32) - (local $l8460 i32) - (local $l8461 i32) - (local $l8462 i32) - (local $l8463 i32) - (local $l8464 i32) - (local $l8465 i32) - (local $l8466 i32) - (local $l8467 i32) - (local $l8468 i32) - (local $l8469 i32) - (local $l8470 i32) - (local $l8471 i32) - (local $l8472 i32) - (local $l8473 i32) - (local $l8474 i32) - (local $l8475 i32) - (local $l8476 i32) - (local $l8477 i32) - (local $l8478 i32) - (local $l8479 i32) - (local $l8480 i32) - (local $l8481 i32) - (local $l8482 i32) - (local $l8483 i32) - (local $l8484 i32) - (local $l8485 i32) - (local $l8486 i32) - (local $l8487 i32) - (local $l8488 i32) - (local $l8489 i32) - (local $l8490 i32) - (local $l8491 i32) - (local $l8492 i32) - (local $l8493 i32) - (local $l8494 i32) - (local $l8495 i32) - (local $l8496 i32) - (local $l8497 i32) - (local $l8498 i32) - (local $l8499 i32) - (local $l8500 i32) - (local $l8501 i32) - (local $l8502 i32) - (local $l8503 i32) - (local $l8504 i32) - (local $l8505 i32) - (local $l8506 i32) - (local $l8507 i32) - (local $l8508 i32) - (local $l8509 i32) - (local $l8510 i32) - (local $l8511 i32) - (local $l8512 i32) - (local $l8513 i32) - (local $l8514 i32) - (local $l8515 i32) - (local $l8516 i32) - (local $l8517 i32) - (local $l8518 i32) - (local $l8519 i32) - (local $l8520 i32) - (local $l8521 i32) - (local $l8522 i32) - (local $l8523 i32) - (local $l8524 i32) - (local $l8525 i32) - (local $l8526 i32) - (local $l8527 i32) - (local $l8528 i32) - (local $l8529 i32) - (local $l8530 i32) - (local $l8531 i32) - (local $l8532 i32) - (local $l8533 i32) - (local $l8534 i32) - (local $l8535 i32) - (local $l8536 i32) - (local $l8537 i32) - (local $l8538 i32) - (local $l8539 i32) - (local $l8540 i32) - (local $l8541 i32) - (local $l8542 i32) - (local $l8543 i32) - (local $l8544 i32) - (local $l8545 i32) - (local $l8546 i32) - (local $l8547 i32) - (local $l8548 i32) - (local $l8549 i32) - (local $l8550 i32) - (local $l8551 i32) - (local $l8552 i32) - (local $l8553 i32) - (local $l8554 i32) - (local $l8555 i32) - (local $l8556 i32) - (local $l8557 i32) - (local $l8558 i32) - (local $l8559 i32) - (local $l8560 i32) - (local $l8561 i32) - (local $l8562 i32) - (local $l8563 i32) - (local $l8564 i32) - (local $l8565 i32) - (local $l8566 i32) - (local $l8567 i32) - (local $l8568 i32) - (local $l8569 i32) - (local $l8570 i32) - (local $l8571 i32) - (local $l8572 i32) - (local $l8573 i32) - (local $l8574 i32) - (local $l8575 i32) - (local $l8576 i32) - (local $l8577 i32) - (local $l8578 i32) - (local $l8579 i32) - (local $l8580 i32) - (local $l8581 i32) - (local $l8582 i32) - (local $l8583 i32) - (local $l8584 i32) - (local $l8585 i32) - (local $l8586 i32) - (local $l8587 i32) - (local $l8588 i32) - (local $l8589 i32) - (local $l8590 i32) - (local $l8591 i32) - (local $l8592 i32) - (local $l8593 i32) - (local $l8594 i32) - (local $l8595 i32) - (local $l8596 i32) - (local $l8597 i32) - (local $l8598 i32) - (local $l8599 i32) - (local $l8600 i32) - (local $l8601 i32) - (local $l8602 i32) - (local $l8603 i32) - (local $l8604 i32) - (local $l8605 i32) - (local $l8606 i32) - (local $l8607 i32) - (local $l8608 i32) - (local $l8609 i32) - (local $l8610 i32) - (local $l8611 i32) - (local $l8612 i32) - (local $l8613 i32) - (local $l8614 i32) - (local $l8615 i32) - (local $l8616 i32) - (local $l8617 i32) - (local $l8618 i32) - (local $l8619 i32) - (local $l8620 i32) - (local $l8621 i32) - (local $l8622 i32) - (local $l8623 i32) - (local $l8624 i32) - (local $l8625 i32) - (local $l8626 i32) - (local $l8627 i32) - (local $l8628 i32) - (local $l8629 i32) - (local $l8630 i32) - (local $l8631 i32) - (local $l8632 i32) - (local $l8633 i32) - (local $l8634 i32) - (local $l8635 i32) - (local $l8636 i32) - (local $l8637 i32) - (local $l8638 i32) - (local $l8639 i32) - (local $l8640 i32) - (local $l8641 i32) - (local $l8642 i32) - (local $l8643 i32) - (local $l8644 i32) - (local $l8645 i32) - (local $l8646 i32) - (local $l8647 i32) - (local $l8648 i32) - (local $l8649 i32) - (local $l8650 i32) - (local $l8651 i32) - (local $l8652 i32) - (local $l8653 i32) - (local $l8654 i32) - (local $l8655 i32) - (local $l8656 i32) - (local $l8657 i32) - (local $l8658 i32) - (local $l8659 i32) - (local $l8660 i32) - (local $l8661 i32) - (local $l8662 i32) - (local $l8663 i32) - (local $l8664 i32) - (local $l8665 i32) - (local $l8666 i32) - (local $l8667 i32) - (local $l8668 i32) - (local $l8669 i32) - (local $l8670 i32) - (local $l8671 i32) - (local $l8672 i32) - (local $l8673 i32) - (local $l8674 i32) - (local $l8675 i32) - (local $l8676 i32) - (local $l8677 i32) - (local $l8678 i32) - (local $l8679 i32) - (local $l8680 i32) - (local $l8681 i32) - (local $l8682 i32) - (local $l8683 i32) - (local $l8684 i32) - (local $l8685 i32) - (local $l8686 i32) - (local $l8687 i32) - (local $l8688 i32) - (local $l8689 i32) - (local $l8690 i32) - (local $l8691 i32) - (local $l8692 i32) - (local $l8693 i32) - (local $l8694 i32) - (local $l8695 i32) - (local $l8696 i32) - (local $l8697 i32) - (local $l8698 i32) - (local $l8699 i32) - (local $l8700 i32) - (local $l8701 i32) - (local $l8702 i32) - (local $l8703 i32) - (local $l8704 i32) - (local $l8705 i32) - (local $l8706 i32) - (local $l8707 i32) - (local $l8708 i32) - (local $l8709 i32) - (local $l8710 i32) - (local $l8711 i32) - (local $l8712 i32) - (local $l8713 i32) - (local $l8714 i32) - (local $l8715 i32) - (local $l8716 i32) - (local $l8717 i32) - (local $l8718 i32) - (local $l8719 i32) - (local $l8720 i32) - (local $l8721 i32) - (local $l8722 i32) - (local $l8723 i32) - (local $l8724 i32) - (local $l8725 i32) - (local $l8726 i32) - (local $l8727 i32) - (local $l8728 i32) - (local $l8729 i32) - (local $l8730 i32) - (local $l8731 i32) - (local $l8732 i32) - (local $l8733 i32) - (local $l8734 i32) - (local $l8735 i32) - (local $l8736 i32) - (local $l8737 i32) - (local $l8738 i32) - (local $l8739 i32) - (local $l8740 i32) - (local $l8741 i32) - (local $l8742 i32) - (local $l8743 i32) - (local $l8744 i32) - (local $l8745 i32) - (local $l8746 i32) - (local $l8747 i32) - (local $l8748 i32) - (local $l8749 i32) - (local $l8750 i32) - (local $l8751 i32) - (local $l8752 i32) - (local $l8753 i32) - (local $l8754 i32) - (local $l8755 i32) - (local $l8756 i32) - (local $l8757 i32) - (local $l8758 i32) - (local $l8759 i32) - (local $l8760 i32) - (local $l8761 i32) - (local $l8762 i32) - (local $l8763 i32) - (local $l8764 i32) - (local $l8765 i32) - (local $l8766 i32) - (local $l8767 i32) - (local $l8768 i32) - (local $l8769 i32) - (local $l8770 i32) - (local $l8771 i32) - (local $l8772 i32) - (local $l8773 i32) - (local $l8774 i32) - (local $l8775 i32) - (local $l8776 i32) - (local $l8777 i32) - (local $l8778 i32) - (local $l8779 i32) - (local $l8780 i32) - (local $l8781 i32) - (local $l8782 i32) - (local $l8783 i32) - (local $l8784 i32) - (local $l8785 i32) - (local $l8786 i32) - (local $l8787 i32) - (local $l8788 i32) - (local $l8789 i32) - (local $l8790 i32) - (local $l8791 i32) - (local $l8792 i32) - (local $l8793 i32) - (local $l8794 i32) - (local $l8795 i32) - (local $l8796 i32) - (local $l8797 i32) - (local $l8798 i32) - (local $l8799 i32) - (local $l8800 i32) - (local $l8801 i32) - (local $l8802 i32) - (local $l8803 i32) - (local $l8804 i32) - (local $l8805 i32) - (local $l8806 i32) - (local $l8807 i32) - (local $l8808 i32) - (local $l8809 i32) - (local $l8810 i32) - (local $l8811 i32) - (local $l8812 i32) - (local $l8813 i32) - (local $l8814 i32) - (local $l8815 i32) - (local $l8816 i32) - (local $l8817 i32) - (local $l8818 i32) - (local $l8819 i32) - (local $l8820 i32) - (local $l8821 i32) - (local $l8822 i32) - (local $l8823 i32) - (local $l8824 i32) - (local $l8825 i32) - (local $l8826 i32) - (local $l8827 i32) - (local $l8828 i32) - (local $l8829 i32) - (local $l8830 i32) - (local $l8831 i32) - (local $l8832 i32) - (local $l8833 i32) - (local $l8834 i32) - (local $l8835 i32) - (local $l8836 i32) - (local $l8837 i32) - (local $l8838 i32) - (local $l8839 i32) - (local $l8840 i32) - (local $l8841 i32) - (local $l8842 i32) - (local $l8843 i32) - (local $l8844 i32) - (local $l8845 i32) - (local $l8846 i32) - (local $l8847 i32) - (local $l8848 i32) - (local $l8849 i32) - (local $l8850 i32) - (local $l8851 i32) - (local $l8852 i32) - (local $l8853 i32) - (local $l8854 i32) - (local $l8855 i32) - (local $l8856 i32) - (local $l8857 i32) - (local $l8858 i32) - (local $l8859 i32) - (local $l8860 i32) - (local $l8861 i32) - (local $l8862 i32) - (local $l8863 i32) - (local $l8864 i32) - (local $l8865 i32) - (local $l8866 i32) - (local $l8867 i32) - (local $l8868 i32) - (local $l8869 i32) - (local $l8870 i32) - (local $l8871 i32) - (local $l8872 i32) - (local $l8873 i32) - (local $l8874 i32) - (local $l8875 i32) - (local $l8876 i32) - (local $l8877 i32) - (local $l8878 i32) - (local $l8879 i32) - (local $l8880 i32) - (local $l8881 i32) - (local $l8882 i32) - (local $l8883 i32) - (local $l8884 i32) - (local $l8885 i32) - (local $l8886 i32) - (local $l8887 i32) - (local $l8888 i32) - (local $l8889 i32) - (local $l8890 i32) - (local $l8891 i32) - (local $l8892 i32) - (local $l8893 i32) - (local $l8894 i32) - (local $l8895 i32) - (local $l8896 i32) - (local $l8897 i32) - (local $l8898 i32) - (local $l8899 i32) - (local $l8900 i32) - (local $l8901 i32) - (local $l8902 i32) - (local $l8903 i32) - (local $l8904 i32) - (local $l8905 i32) - (local $l8906 i32) - (local $l8907 i32) - (local $l8908 i32) - (local $l8909 i32) - (local $l8910 i32) - (local $l8911 i32) - (local $l8912 i32) - (local $l8913 i32) - (local $l8914 i32) - (local $l8915 i32) - (local $l8916 i32) - (local $l8917 i32) - (local $l8918 i32) - (local $l8919 i32) - (local $l8920 i32) - (local $l8921 i32) - (local $l8922 i32) - (local $l8923 i32) - (local $l8924 i32) - (local $l8925 i32) - (local $l8926 i32) - (local $l8927 i32) - (local $l8928 i32) - (local $l8929 i32) - (local $l8930 i32) - (local $l8931 i32) - (local $l8932 i32) - (local $l8933 i32) - (local $l8934 i32) - (local $l8935 i32) - (local $l8936 i32) - (local $l8937 i32) - (local $l8938 i32) - (local $l8939 i32) - (local $l8940 i32) - (local $l8941 i32) - (local $l8942 i32) - (local $l8943 i32) - (local $l8944 i32) - (local $l8945 i32) - (local $l8946 i32) - (local $l8947 i32) - (local $l8948 i32) - (local $l8949 i32) - (local $l8950 i32) - (local $l8951 i32) - (local $l8952 i32) - (local $l8953 i32) - (local $l8954 i32) - (local $l8955 i32) - (local $l8956 i32) - (local $l8957 i32) - (local $l8958 i32) - (local $l8959 i32) - (local $l8960 i32) - (local $l8961 i32) - (local $l8962 i32) - (local $l8963 i32) - (local $l8964 i32) - (local $l8965 i32) - (local $l8966 i32) - (local $l8967 i32) - (local $l8968 i32) - (local $l8969 i32) - (local $l8970 i32) - (local $l8971 i32) - (local $l8972 i32) - (local $l8973 i32) - (local $l8974 i32) - (local $l8975 i32) - (local $l8976 i32) - (local $l8977 i32) - (local $l8978 i32) - (local $l8979 i32) - (local $l8980 i32) - (local $l8981 i32) - (local $l8982 i32) - (local $l8983 i32) - (local $l8984 i32) - (local $l8985 i32) - (local $l8986 i32) - (local $l8987 i32) - (local $l8988 i32) - (local $l8989 i32) - (local $l8990 i32) - (local $l8991 i32) - (local $l8992 i32) - (local $l8993 i32) - (local $l8994 i32) - (local $l8995 i32) - (local $l8996 i32) - (local $l8997 i32) - (local $l8998 i32) - (local $l8999 i32) - (local $l9000 i32) - (local $l9001 i32) - (local $l9002 i32) - (local $l9003 i32) - (local $l9004 i32) - (local $l9005 i32) - (local $l9006 i32) - (local $l9007 i32) - (local $l9008 i32) - (local $l9009 i32) - (local $l9010 i32) - (local $l9011 i32) - (local $l9012 i32) - (local $l9013 i32) - (local $l9014 i32) - (local $l9015 i32) - (local $l9016 i32) - (local $l9017 i32) - (local $l9018 i32) - (local $l9019 i32) - (local $l9020 i32) - (local $l9021 i32) - (local $l9022 i32) - (local $l9023 i32) - (local $l9024 i32) - (local $l9025 i32) - (local $l9026 i32) - (local $l9027 i32) - (local $l9028 i32) - (local $l9029 i32) - (local $l9030 i32) - (local $l9031 i32) - (local $l9032 i32) - (local $l9033 i32) - (local $l9034 i32) - (local $l9035 i32) - (local $l9036 i32) - (local $l9037 i32) - (local $l9038 i32) - (local $l9039 i32) - (local $l9040 i32) - (local $l9041 i32) - (local $l9042 i32) - (local $l9043 i32) - (local $l9044 i32) - (local $l9045 i32) - (local $l9046 i32) - (local $l9047 i32) - (local $l9048 i32) - (local $l9049 i32) - (local $l9050 i32) - (local $l9051 i32) - (local $l9052 i32) - (local $l9053 i32) - (local $l9054 i32) - (local $l9055 i32) - (local $l9056 i32) - (local $l9057 i32) - (local $l9058 i32) - (local $l9059 i32) - (local $l9060 i32) - (local $l9061 i32) - (local $l9062 i32) - (local $l9063 i32) - (local $l9064 i32) - (local $l9065 i32) - (local $l9066 i32) - (local $l9067 i32) - (local $l9068 i32) - (local $l9069 i32) - (local $l9070 i32) - (local $l9071 i32) - (local $l9072 i32) - (local $l9073 i32) - (local $l9074 i32) - (local $l9075 i32) - (local $l9076 i32) - (local $l9077 i32) - (local $l9078 i32) - (local $l9079 i32) - (local $l9080 i32) - (local $l9081 i32) - (local $l9082 i32) - (local $l9083 i32) - (local $l9084 i32) - (local $l9085 i32) - (local $l9086 i32) - (local $l9087 i32) - (local $l9088 i32) - (local $l9089 i32) - (local $l9090 i32) - (local $l9091 i32) - (local $l9092 i32) - (local $l9093 i32) - (local $l9094 i32) - (local $l9095 i32) - (local $l9096 i32) - (local $l9097 i32) - (local $l9098 i32) - (local $l9099 i32) - (local $l9100 i32) - (local $l9101 i32) - (local $l9102 i32) - (local $l9103 i32) - (local $l9104 i32) - (local $l9105 i32) - (local $l9106 i32) - (local $l9107 i32) - (local $l9108 i32) - (local $l9109 i32) - (local $l9110 i32) - (local $l9111 i32) - (local $l9112 i32) - (local $l9113 i32) - (local $l9114 i32) - (local $l9115 i32) - (local $l9116 i32) - (local $l9117 i32) - (local $l9118 i32) - (local $l9119 i32) - (local $l9120 i32) - (local $l9121 i32) - (local $l9122 i32) - (local $l9123 i32) - (local $l9124 i32) - (local $l9125 i32) - (local $l9126 i32) - (local $l9127 i32) - (local $l9128 i32) - (local $l9129 i32) - (local $l9130 i32) - (local $l9131 i32) - (local $l9132 i32) - (local $l9133 i32) - (local $l9134 i32) - (local $l9135 i32) - (local $l9136 i32) - (local $l9137 i32) - (local $l9138 i32) - (local $l9139 i32) - (local $l9140 i32) - (local $l9141 i32) - (local $l9142 i32) - (local $l9143 i32) - (local $l9144 i32) - (local $l9145 i32) - (local $l9146 i32) - (local $l9147 i32) - (local $l9148 i32) - (local $l9149 i32) - (local $l9150 i32) - (local $l9151 i32) - (local $l9152 i32) - (local $l9153 i32) - (local $l9154 i32) - (local $l9155 i32) - (local $l9156 i32) - (local $l9157 i32) - (local $l9158 i32) - (local $l9159 i32) - (local $l9160 i32) - (local $l9161 i32) - (local $l9162 i32) - (local $l9163 i32) - (local $l9164 i32) - (local $l9165 i32) - (local $l9166 i32) - (local $l9167 i32) - (local $l9168 i32) - (local $l9169 i32) - (local $l9170 i32) - (local $l9171 i32) - (local $l9172 i32) - (local $l9173 i32) - (local $l9174 i32) - (local $l9175 i32) - (local $l9176 i32) - (local $l9177 i32) - (local $l9178 i32) - (local $l9179 i32) - (local $l9180 i32) - (local $l9181 i32) - (local $l9182 i32) - (local $l9183 i32) - (local $l9184 i32) - (local $l9185 i32) - (local $l9186 i32) - (local $l9187 i32) - (local $l9188 i32) - (local $l9189 i32) - (local $l9190 i32) - (local $l9191 i32) - (local $l9192 i32) - (local $l9193 i32) - (local $l9194 i32) - (local $l9195 i32) - (local $l9196 i32) - (local $l9197 i32) - (local $l9198 i32) - (local $l9199 i32) - (local $l9200 i32) - (local $l9201 i32) - (local $l9202 i32) - (local $l9203 i32) - (local $l9204 i32) - (local $l9205 i32) - (local $l9206 i32) - (local $l9207 i32) - (local $l9208 i32) - (local $l9209 i32) - (local $l9210 i32) - (local $l9211 i32) - (local $l9212 i32) - (local $l9213 i32) - (local $l9214 i32) - (local $l9215 i32) - (local $l9216 i32) - (local $l9217 i32) - (local $l9218 i32) - (local $l9219 i32) - (local $l9220 i32) - (local $l9221 i32) - (local $l9222 i32) - (local $l9223 i32) - (local $l9224 i32) - (local $l9225 i32) - (local $l9226 i32) - (local $l9227 i32) - (local $l9228 i32) - (local $l9229 i32) - (local $l9230 i32) - (local $l9231 i32) - (local $l9232 i32) - (local $l9233 i32) - (local $l9234 i32) - (local $l9235 i32) - (local $l9236 i32) - (local $l9237 i32) - (local $l9238 i32) - (local $l9239 i32) - (local $l9240 i32) - (local $l9241 i32) - (local $l9242 i32) - (local $l9243 i32) - (local $l9244 i32) - (local $l9245 i32) - (local $l9246 i32) - (local $l9247 i32) - (local $l9248 i32) - (local $l9249 i32) - (local $l9250 i32) - (local $l9251 i32) - (local $l9252 i32) - (local $l9253 i32) - (local $l9254 i32) - (local $l9255 i32) - (local $l9256 i32) - (local $l9257 i32) - (local $l9258 i32) - (local $l9259 i32) - (local $l9260 i32) - (local $l9261 i32) - (local $l9262 i32) - (local $l9263 i32) - (local $l9264 i32) - (local $l9265 i32) - (local $l9266 i32) - (local $l9267 i32) - (local $l9268 i32) - (local $l9269 i32) - (local $l9270 i32) - (local $l9271 i32) - (local $l9272 i32) - (local $l9273 i32) - (local $l9274 i32) - (local $l9275 i32) - (local $l9276 i32) - (local $l9277 i32) - (local $l9278 i32) - (local $l9279 i32) - (local $l9280 i32) - (local $l9281 i32) - (local $l9282 i32) - (local $l9283 i32) - (local $l9284 i32) - (local $l9285 i32) - (local $l9286 i32) - (local $l9287 i32) - (local $l9288 i32) - (local $l9289 i32) - (local $l9290 i32) - (local $l9291 i32) - (local $l9292 i32) - (local $l9293 i32) - (local $l9294 i32) - (local $l9295 i32) - (local $l9296 i32) - (local $l9297 i32) - (local $l9298 i32) - (local $l9299 i32) - (local $l9300 i32) - (local $l9301 i32) - (local $l9302 i32) - (local $l9303 i32) - (local $l9304 i32) - (local $l9305 i32) - (local $l9306 i32) - (local $l9307 i32) - (local $l9308 i32) - (local $l9309 i32) - (local $l9310 i32) - (local $l9311 i32) - (local $l9312 i32) - (local $l9313 i32) - (local $l9314 i32) - (local $l9315 i32) - (local $l9316 i32) - (local $l9317 i32) - (local $l9318 i32) - (local $l9319 i32) - (local $l9320 i32) - (local $l9321 i32) - (local $l9322 i32) - (local $l9323 i32) - (local $l9324 i32) - (local $l9325 i32) - (local $l9326 i32) - (local $l9327 i32) - (local $l9328 i32) - (local $l9329 i32) - (local $l9330 i32) - (local $l9331 i32) - (local $l9332 i32) - (local $l9333 i32) - (local $l9334 i32) - (local $l9335 i32) - (local $l9336 i32) - (local $l9337 i32) - (local $l9338 i32) - (local $l9339 i32) - (local $l9340 i32) - (local $l9341 i32) - (local $l9342 i32) - (local $l9343 i32) - (local $l9344 i32) - (local $l9345 i32) - (local $l9346 i32) - (local $l9347 i32) - (local $l9348 i32) - (local $l9349 i32) - (local $l9350 i32) - (local $l9351 i32) - (local $l9352 i32) - (local $l9353 i32) - (local $l9354 i32) - (local $l9355 i32) - (local $l9356 i32) - (local $l9357 i32) - (local $l9358 i32) - (local $l9359 i32) - (local $l9360 i32) - (local $l9361 i32) - (local $l9362 i32) - (local $l9363 i32) - (local $l9364 i32) - (local $l9365 i32) - (local $l9366 i32) - (local $l9367 i32) - (local $l9368 i32) - (local $l9369 i32) - (local $l9370 i32) - (local $l9371 i32) - (local $l9372 i32) - (local $l9373 i32) - (local $l9374 i32) - (local $l9375 i32) - (local $l9376 i32) - (local $l9377 i32) - (local $l9378 i32) - (local $l9379 i32) - (local $l9380 i32) - (local $l9381 i32) - (local $l9382 i32) - (local $l9383 i32) - (local $l9384 i32) - (local $l9385 i32) - (local $l9386 i32) - (local $l9387 i32) - (local $l9388 i32) - (local $l9389 i32) - (local $l9390 i32) - (local $l9391 i32) - (local $l9392 i32) - (local $l9393 i32) - (local $l9394 i32) - (local $l9395 i32) - (local $l9396 i32) - (local $l9397 i32) - (local $l9398 i32) - (local $l9399 i32) - (local $l9400 i32) - (local $l9401 i32) - (local $l9402 i32) - (local $l9403 i32) - (local $l9404 i32) - (local $l9405 i32) - (local $l9406 i32) - (local $l9407 i32) - (local $l9408 i32) - (local $l9409 i32) - (local $l9410 i32) - (local $l9411 i32) - (local $l9412 i32) - (local $l9413 i32) - (local $l9414 i32) - (local $l9415 i32) - (local $l9416 i32) - (local $l9417 i32) - (local $l9418 i32) - (local $l9419 i32) - (local $l9420 i32) - (local $l9421 i32) - (local $l9422 i32) - (local $l9423 i32) - (local $l9424 i32) - (local $l9425 i32) - (local $l9426 i32) - (local $l9427 i32) - (local $l9428 i32) - (local $l9429 i32) - (local $l9430 i32) - (local $l9431 i32) - (local $l9432 i32) - (local $l9433 i32) - (local $l9434 i32) - (local $l9435 i32) - (local $l9436 i32) - (local $l9437 i32) - (local $l9438 i32) - (local $l9439 i32) - (local $l9440 i32) - (local $l9441 i32) - (local $l9442 i32) - (local $l9443 i32) - (local $l9444 i32) - (local $l9445 i32) - (local $l9446 i32) - (local $l9447 i32) - (local $l9448 i32) - (local $l9449 i32) - (local $l9450 i32) - (local $l9451 i32) - (local $l9452 i32) - (local $l9453 i32) - (local $l9454 i32) - (local $l9455 i32) - (local $l9456 i32) - (local $l9457 i32) - (local $l9458 i32) - (local $l9459 i32) - (local $l9460 i32) - (local $l9461 i32) - (local $l9462 i32) - (local $l9463 i32) - (local $l9464 i32) - (local $l9465 i32) - (local $l9466 i32) - (local $l9467 i32) - (local $l9468 i32) - (local $l9469 i32) - (local $l9470 i32) - (local $l9471 i32) - (local $l9472 i32) - (local $l9473 i32) - (local $l9474 i32) - (local $l9475 i32) - (local $l9476 i32) - (local $l9477 i32) - (local $l9478 i32) - (local $l9479 i32) - (local $l9480 i32) - (local $l9481 i32) - (local $l9482 i32) - (local $l9483 i32) - (local $l9484 i32) - (local $l9485 i32) - (local $l9486 i32) - (local $l9487 i32) - (local $l9488 i32) - (local $l9489 i32) - (local $l9490 i32) - (local $l9491 i32) - (local $l9492 i32) - (local $l9493 i32) - (local $l9494 i32) - (local $l9495 i32) - (local $l9496 i32) - (local $l9497 i32) - (local $l9498 i32) - (local $l9499 i32) - (local $l9500 i32) - (local $l9501 i32) - (local $l9502 i32) - (local $l9503 i32) - (local $l9504 i32) - (local $l9505 i32) - (local $l9506 i32) - (local $l9507 i32) - (local $l9508 i32) - (local $l9509 i32) - (local $l9510 i32) - (local $l9511 i32) - (local $l9512 i32) - (local $l9513 i32) - (local $l9514 i32) - (local $l9515 i32) - (local $l9516 i32) - (local $l9517 i32) - (local $l9518 i32) - (local $l9519 i32) - (local $l9520 i32) - (local $l9521 i32) - (local $l9522 i32) - (local $l9523 i32) - (local $l9524 i32) - (local $l9525 i32) - (local $l9526 i32) - (local $l9527 i32) - (local $l9528 i32) - (local $l9529 i32) - (local $l9530 i32) - (local $l9531 i32) - (local $l9532 i32) - (local $l9533 i32) - (local $l9534 i32) - (local $l9535 i32) - (local $l9536 i32) - (local $l9537 i32) - (local $l9538 i32) - (local $l9539 i32) - (local $l9540 i32) - (local $l9541 i32) - (local $l9542 i32) - (local $l9543 i32) - (local $l9544 i32) - (local $l9545 i32) - (local $l9546 i32) - (local $l9547 i32) - (local $l9548 i32) - (local $l9549 i32) - (local $l9550 i32) - (local $l9551 i32) - (local $l9552 i32) - (local $l9553 i32) - (local $l9554 i32) - (local $l9555 i32) - (local $l9556 i32) - (local $l9557 i32) - (local $l9558 i32) - (local $l9559 i32) - (local $l9560 i32) - (local $l9561 i32) - (local $l9562 i32) - (local $l9563 i32) - (local $l9564 i32) - (local $l9565 i32) - (local $l9566 i32) - (local $l9567 i32) - (local $l9568 i32) - (local $l9569 i32) - (local $l9570 i32) - (local $l9571 i32) - (local $l9572 i32) - (local $l9573 i32) - (local $l9574 i32) - (local $l9575 i32) - (local $l9576 i32) - (local $l9577 i32) - (local $l9578 i32) - (local $l9579 i32) - (local $l9580 i32) - (local $l9581 i32) - (local $l9582 i32) - (local $l9583 i32) - (local $l9584 i32) - (local $l9585 i32) - (local $l9586 i32) - (local $l9587 i32) - (local $l9588 i32) - (local $l9589 i32) - (local $l9590 i32) - (local $l9591 i32) - (local $l9592 i32) - (local $l9593 i32) - (local $l9594 i32) - (local $l9595 i32) - (local $l9596 i32) - (local $l9597 i32) - (local $l9598 i32) - (local $l9599 i32) - (local $l9600 i32) - (local $l9601 i32) - (local $l9602 i32) - (local $l9603 i32) - (local $l9604 i32) - (local $l9605 i32) - (local $l9606 i32) - (local $l9607 i32) - (local $l9608 i32) - (local $l9609 i32) - (local $l9610 i32) - (local $l9611 i32) - (local $l9612 i32) - (local $l9613 i32) - (local $l9614 i32) - (local $l9615 i32) - (local $l9616 i32) - (local $l9617 i32) - (local $l9618 i32) - (local $l9619 i32) - (local $l9620 i32) - (local $l9621 i32) - (local $l9622 i32) - (local $l9623 i32) - (local $l9624 i32) - (local $l9625 i32) - (local $l9626 i32) - (local $l9627 i32) - (local $l9628 i32) - (local $l9629 i32) - (local $l9630 i32) - (local $l9631 i32) - (local $l9632 i32) - (local $l9633 i32) - (local $l9634 i32) - (local $l9635 i32) - (local $l9636 i32) - (local $l9637 i32) - (local $l9638 i32) - (local $l9639 i32) - (local $l9640 i32) - (local $l9641 i32) - (local $l9642 i32) - (local $l9643 i32) - (local $l9644 i32) - (local $l9645 i32) - (local $l9646 i32) - (local $l9647 i32) - (local $l9648 i32) - (local $l9649 i32) - (local $l9650 i32) - (local $l9651 i32) - (local $l9652 i32) - (local $l9653 i32) - (local $l9654 i32) - (local $l9655 i32) - (local $l9656 i32) - (local $l9657 i32) - (local $l9658 i32) - (local $l9659 i32) - (local $l9660 i32) - (local $l9661 i32) - (local $l9662 i32) - (local $l9663 i32) - (local $l9664 i32) - (local $l9665 i32) - (local $l9666 i32) - (local $l9667 i32) - (local $l9668 i32) - (local $l9669 i32) - (local $l9670 i32) - (local $l9671 i32) - (local $l9672 i32) - (local $l9673 i32) - (local $l9674 i32) - (local $l9675 i32) - (local $l9676 i32) - (local $l9677 i32) - (local $l9678 i32) - (local $l9679 i32) - (local $l9680 i32) - (local $l9681 i32) - (local $l9682 i32) - (local $l9683 i32) - (local $l9684 i32) - (local $l9685 i32) - (local $l9686 i32) - (local $l9687 i32) - (local $l9688 i32) - (local $l9689 i32) - (local $l9690 i32) - (local $l9691 i32) - (local $l9692 i32) - (local $l9693 i32) - (local $l9694 i32) - (local $l9695 i32) - (local $l9696 i32) - (local $l9697 i32) - (local $l9698 i32) - (local $l9699 i32) - (local $l9700 i32) - (local $l9701 i32) - (local $l9702 i32) - (local $l9703 i32) - (local $l9704 i32) - (local $l9705 i32) - (local $l9706 i32) - (local $l9707 i32) - (local $l9708 i32) - (local $l9709 i32) - (local $l9710 i32) - (local $l9711 i32) - (local $l9712 i32) - (local $l9713 i32) - (local $l9714 i32) - (local $l9715 i32) - (local $l9716 i32) - (local $l9717 i32) - (local $l9718 i32) - (local $l9719 i32) - (local $l9720 i32) - (local $l9721 i32) - (local $l9722 i32) - (local $l9723 i32) - (local $l9724 i32) - (local $l9725 i32) - (local $l9726 i32) - (local $l9727 i32) - (local $l9728 i32) - (local $l9729 i32) - (local $l9730 i32) - (local $l9731 i32) - (local $l9732 i32) - (local $l9733 i32) - (local $l9734 i32) - (local $l9735 i32) - (local $l9736 i32) - (local $l9737 i32) - (local $l9738 i32) - (local $l9739 i32) - (local $l9740 i32) - (local $l9741 i32) - (local $l9742 i32) - (local $l9743 i32) - (local $l9744 i32) - (local $l9745 i32) - (local $l9746 i32) - (local $l9747 i32) - (local $l9748 i32) - (local $l9749 i32) - (local $l9750 i32) - (local $l9751 i32) - (local $l9752 i32) - (local $l9753 i32) - (local $l9754 i32) - (local $l9755 i32) - (local $l9756 i32) - (local $l9757 i32) - (local $l9758 i32) - (local $l9759 i32) - (local $l9760 i32) - (local $l9761 i32) - (local $l9762 i32) - (local $l9763 i32) - (local $l9764 i32) - (local $l9765 i32) - (local $l9766 i32) - (local $l9767 i32) - (local $l9768 i32) - (local $l9769 i32) - (local $l9770 i32) - (local $l9771 i32) - (local $l9772 i32) - (local $l9773 i32) - (local $l9774 i32) - (local $l9775 i32) - (local $l9776 i32) - (local $l9777 i32) - (local $l9778 i32) - (local $l9779 i32) - (local $l9780 i32) - (local $l9781 i32) - (local $l9782 i32) - (local $l9783 i32) - (local $l9784 i32) - (local $l9785 i32) - (local $l9786 i32) - (local $l9787 i32) - (local $l9788 i32) - (local $l9789 i32) - (local $l9790 i32) - (local $l9791 i32) - (local $l9792 i32) - (local $l9793 i32) - (local $l9794 i32) - (local $l9795 i32) - (local $l9796 i32) - (local $l9797 i32) - (local $l9798 i32) - (local $l9799 i32) - (local $l9800 i32) - (local $l9801 i32) - (local $l9802 i32) - (local $l9803 i32) - (local $l9804 i32) - (local $l9805 i32) - (local $l9806 i32) - (local $l9807 i32) - (local $l9808 i32) - (local $l9809 i32) - (local $l9810 i32) - (local $l9811 i32) - (local $l9812 i32) - (local $l9813 i32) - (local $l9814 i32) - (local $l9815 i32) - (local $l9816 i32) - (local $l9817 i32) - (local $l9818 i32) - (local $l9819 i32) - (local $l9820 i32) - (local $l9821 i32) - (local $l9822 i32) - (local $l9823 i32) - (local $l9824 i32) - (local $l9825 i32) - (local $l9826 i32) - (local $l9827 i32) - (local $l9828 i32) - (local $l9829 i32) - (local $l9830 i32) - (local $l9831 i32) - (local $l9832 i32) - (local $l9833 i32) - (local $l9834 i32) - (local $l9835 i32) - (local $l9836 i32) - (local $l9837 i32) - (local $l9838 i32) - (local $l9839 i32) - (local $l9840 i32) - (local $l9841 i32) - (local $l9842 i32) - (local $l9843 i32) - (local $l9844 i32) - (local $l9845 i32) - (local $l9846 i32) - (local $l9847 i32) - (local $l9848 i32) - (local $l9849 i32) - (local $l9850 i32) - (local $l9851 i32) - (local $l9852 i32) - (local $l9853 i32) - (local $l9854 i32) - (local $l9855 i32) - (local $l9856 i32) - (local $l9857 i32) - (local $l9858 i32) - (local $l9859 i32) - (local $l9860 i32) - (local $l9861 i32) - (local $l9862 i32) - (local $l9863 i32) - (local $l9864 i32) - (local $l9865 i32) - (local $l9866 i32) - (local $l9867 i32) - (local $l9868 i32) - (local $l9869 i32) - (local $l9870 i32) - (local $l9871 i32) - (local $l9872 i32) - (local $l9873 i32) - (local $l9874 i32) - (local $l9875 i32) - (local $l9876 i32) - (local $l9877 i32) - (local $l9878 i32) - (local $l9879 i32) - (local $l9880 i32) - (local $l9881 i32) - (local $l9882 i32) - (local $l9883 i32) - (local $l9884 i32) - (local $l9885 i32) - (local $l9886 i32) - (local $l9887 i32) - (local $l9888 i32) - (local $l9889 i32) - (local $l9890 i32) - (local $l9891 i32) - (local $l9892 i32) - (local $l9893 i32) - (local $l9894 i32) - (local $l9895 i32) - (local $l9896 i32) - (local $l9897 i32) - (local $l9898 i32) - (local $l9899 i32) - (local $l9900 i32) - (local $l9901 i32) - (local $l9902 i32) - (local $l9903 i32) - (local $l9904 i32) - (local $l9905 i32) - (local $l9906 i32) - (local $l9907 i32) - (local $l9908 i32) - (local $l9909 i32) - (local $l9910 i32) - (local $l9911 i32) - (local $l9912 i32) - (local $l9913 i32) - (local $l9914 i32) - (local $l9915 i32) - (local $l9916 i32) - (local $l9917 i32) - (local $l9918 i32) - (local $l9919 i32) - (local $l9920 i32) - (local $l9921 i32) - (local $l9922 i32) - (local $l9923 i32) - (local $l9924 i32) - (local $l9925 i32) - (local $l9926 i32) - (local $l9927 i32) - (local $l9928 i32) - (local $l9929 i32) - (local $l9930 i32) - (local $l9931 i32) - (local $l9932 i32) - (local $l9933 i32) - (local $l9934 i32) - (local $l9935 i32) - (local $l9936 i32) - (local $l9937 i32) - (local $l9938 i32) - (local $l9939 i32) - (local $l9940 i32) - (local $l9941 i32) - (local $l9942 i32) - (local $l9943 i32) - (local $l9944 i32) - (local $l9945 i32) - (local $l9946 i32) - (local $l9947 i32) - (local $l9948 i32) - (local $l9949 i32) - (local $l9950 i32) - (local $l9951 i32) - (local $l9952 i32) - (local $l9953 i32) - (local $l9954 i32) - (local $l9955 i32) - (local $l9956 i32) - (local $l9957 i32) - (local $l9958 i32) - (local $l9959 i32) - (local $l9960 i32) - (local $l9961 i32) - (local $l9962 i32) - (local $l9963 i32) - (local $l9964 i32) - (local $l9965 i32) - (local $l9966 i32) - (local $l9967 i32) - (local $l9968 i32) - (local $l9969 i32) - (local $l9970 i32) - (local $l9971 i32) - (local $l9972 i32) - (local $l9973 i32) - (local $l9974 i32) - (local $l9975 i32) - (local $l9976 i32) - (local $l9977 i32) - (local $l9978 i32) - (local $l9979 i32) - (local $l9980 i32) - (local $l9981 i32) - (local $l9982 i32) - (local $l9983 i32) - (local $l9984 i32) - (local $l9985 i32) - (local $l9986 i32) - (local $l9987 i32) - (local $l9988 i32) - (local $l9989 i32) - (local $l9990 i32) - (local $l9991 i32) - (local $l9992 i32) - (local $l9993 i32) - (local $l9994 i32) - (local $l9995 i32) - (local $l9996 i32) - (local $l9997 i32) - (local $l9998 i32) - (local $l9999 i32) - ;; Initialize locals as sum of previous two - local.get $p0 - local.get $p1 - i32.add - local.set $l2 - local.get $p1 - local.get $l2 - i32.add - local.set $l3 - local.get $l2 - local.get $l3 - i32.add - local.set $l4 - local.get $l3 - local.get $l4 - i32.add - local.set $l5 - local.get $l4 - local.get $l5 - i32.add - local.set $l6 - local.get $l5 - local.get $l6 - i32.add - local.set $l7 - local.get $l6 - local.get $l7 - i32.add - local.set $l8 - local.get $l7 - local.get $l8 - i32.add - local.set $l9 - local.get $l8 - local.get $l9 - i32.add - local.set $l10 - local.get $l9 - local.get $l10 - i32.add - local.set $l11 - local.get $l10 - local.get $l11 - i32.add - local.set $l12 - local.get $l11 - local.get $l12 - i32.add - local.set $l13 - local.get $l12 - local.get $l13 - i32.add - local.set $l14 - local.get $l13 - local.get $l14 - i32.add - local.set $l15 - local.get $l14 - local.get $l15 - i32.add - local.set $l16 - local.get $l15 - local.get $l16 - i32.add - local.set $l17 - local.get $l16 - local.get $l17 - i32.add - local.set $l18 - local.get $l17 - local.get $l18 - i32.add - local.set $l19 - local.get $l18 - local.get $l19 - i32.add - local.set $l20 - local.get $l19 - local.get $l20 - i32.add - local.set $l21 - local.get $l20 - local.get $l21 - i32.add - local.set $l22 - local.get $l21 - local.get $l22 - i32.add - local.set $l23 - local.get $l22 - local.get $l23 - i32.add - local.set $l24 - local.get $l23 - local.get $l24 - i32.add - local.set $l25 - local.get $l24 - local.get $l25 - i32.add - local.set $l26 - local.get $l25 - local.get $l26 - i32.add - local.set $l27 - local.get $l26 - local.get $l27 - i32.add - local.set $l28 - local.get $l27 - local.get $l28 - i32.add - local.set $l29 - local.get $l28 - local.get $l29 - i32.add - local.set $l30 - local.get $l29 - local.get $l30 - i32.add - local.set $l31 - local.get $l30 - local.get $l31 - i32.add - local.set $l32 - local.get $l31 - local.get $l32 - i32.add - local.set $l33 - local.get $l32 - local.get $l33 - i32.add - local.set $l34 - local.get $l33 - local.get $l34 - i32.add - local.set $l35 - local.get $l34 - local.get $l35 - i32.add - local.set $l36 - local.get $l35 - local.get $l36 - i32.add - local.set $l37 - local.get $l36 - local.get $l37 - i32.add - local.set $l38 - local.get $l37 - local.get $l38 - i32.add - local.set $l39 - local.get $l38 - local.get $l39 - i32.add - local.set $l40 - local.get $l39 - local.get $l40 - i32.add - local.set $l41 - local.get $l40 - local.get $l41 - i32.add - local.set $l42 - local.get $l41 - local.get $l42 - i32.add - local.set $l43 - local.get $l42 - local.get $l43 - i32.add - local.set $l44 - local.get $l43 - local.get $l44 - i32.add - local.set $l45 - local.get $l44 - local.get $l45 - i32.add - local.set $l46 - local.get $l45 - local.get $l46 - i32.add - local.set $l47 - local.get $l46 - local.get $l47 - i32.add - local.set $l48 - local.get $l47 - local.get $l48 - i32.add - local.set $l49 - local.get $l48 - local.get $l49 - i32.add - local.set $l50 - local.get $l49 - local.get $l50 - i32.add - local.set $l51 - local.get $l50 - local.get $l51 - i32.add - local.set $l52 - local.get $l51 - local.get $l52 - i32.add - local.set $l53 - local.get $l52 - local.get $l53 - i32.add - local.set $l54 - local.get $l53 - local.get $l54 - i32.add - local.set $l55 - local.get $l54 - local.get $l55 - i32.add - local.set $l56 - local.get $l55 - local.get $l56 - i32.add - local.set $l57 - local.get $l56 - local.get $l57 - i32.add - local.set $l58 - local.get $l57 - local.get $l58 - i32.add - local.set $l59 - local.get $l58 - local.get $l59 - i32.add - local.set $l60 - local.get $l59 - local.get $l60 - i32.add - local.set $l61 - local.get $l60 - local.get $l61 - i32.add - local.set $l62 - local.get $l61 - local.get $l62 - i32.add - local.set $l63 - local.get $l62 - local.get $l63 - i32.add - local.set $l64 - local.get $l63 - local.get $l64 - i32.add - local.set $l65 - local.get $l64 - local.get $l65 - i32.add - local.set $l66 - local.get $l65 - local.get $l66 - i32.add - local.set $l67 - local.get $l66 - local.get $l67 - i32.add - local.set $l68 - local.get $l67 - local.get $l68 - i32.add - local.set $l69 - local.get $l68 - local.get $l69 - i32.add - local.set $l70 - local.get $l69 - local.get $l70 - i32.add - local.set $l71 - local.get $l70 - local.get $l71 - i32.add - local.set $l72 - local.get $l71 - local.get $l72 - i32.add - local.set $l73 - local.get $l72 - local.get $l73 - i32.add - local.set $l74 - local.get $l73 - local.get $l74 - i32.add - local.set $l75 - local.get $l74 - local.get $l75 - i32.add - local.set $l76 - local.get $l75 - local.get $l76 - i32.add - local.set $l77 - local.get $l76 - local.get $l77 - i32.add - local.set $l78 - local.get $l77 - local.get $l78 - i32.add - local.set $l79 - local.get $l78 - local.get $l79 - i32.add - local.set $l80 - local.get $l79 - local.get $l80 - i32.add - local.set $l81 - local.get $l80 - local.get $l81 - i32.add - local.set $l82 - local.get $l81 - local.get $l82 - i32.add - local.set $l83 - local.get $l82 - local.get $l83 - i32.add - local.set $l84 - local.get $l83 - local.get $l84 - i32.add - local.set $l85 - local.get $l84 - local.get $l85 - i32.add - local.set $l86 - local.get $l85 - local.get $l86 - i32.add - local.set $l87 - local.get $l86 - local.get $l87 - i32.add - local.set $l88 - local.get $l87 - local.get $l88 - i32.add - local.set $l89 - local.get $l88 - local.get $l89 - i32.add - local.set $l90 - local.get $l89 - local.get $l90 - i32.add - local.set $l91 - local.get $l90 - local.get $l91 - i32.add - local.set $l92 - local.get $l91 - local.get $l92 - i32.add - local.set $l93 - local.get $l92 - local.get $l93 - i32.add - local.set $l94 - local.get $l93 - local.get $l94 - i32.add - local.set $l95 - local.get $l94 - local.get $l95 - i32.add - local.set $l96 - local.get $l95 - local.get $l96 - i32.add - local.set $l97 - local.get $l96 - local.get $l97 - i32.add - local.set $l98 - local.get $l97 - local.get $l98 - i32.add - local.set $l99 - local.get $l98 - local.get $l99 - i32.add - local.set $l100 - local.get $l99 - local.get $l100 - i32.add - local.set $l101 - local.get $l100 - local.get $l101 - i32.add - local.set $l102 - local.get $l101 - local.get $l102 - i32.add - local.set $l103 - local.get $l102 - local.get $l103 - i32.add - local.set $l104 - local.get $l103 - local.get $l104 - i32.add - local.set $l105 - local.get $l104 - local.get $l105 - i32.add - local.set $l106 - local.get $l105 - local.get $l106 - i32.add - local.set $l107 - local.get $l106 - local.get $l107 - i32.add - local.set $l108 - local.get $l107 - local.get $l108 - i32.add - local.set $l109 - local.get $l108 - local.get $l109 - i32.add - local.set $l110 - local.get $l109 - local.get $l110 - i32.add - local.set $l111 - local.get $l110 - local.get $l111 - i32.add - local.set $l112 - local.get $l111 - local.get $l112 - i32.add - local.set $l113 - local.get $l112 - local.get $l113 - i32.add - local.set $l114 - local.get $l113 - local.get $l114 - i32.add - local.set $l115 - local.get $l114 - local.get $l115 - i32.add - local.set $l116 - local.get $l115 - local.get $l116 - i32.add - local.set $l117 - local.get $l116 - local.get $l117 - i32.add - local.set $l118 - local.get $l117 - local.get $l118 - i32.add - local.set $l119 - local.get $l118 - local.get $l119 - i32.add - local.set $l120 - local.get $l119 - local.get $l120 - i32.add - local.set $l121 - local.get $l120 - local.get $l121 - i32.add - local.set $l122 - local.get $l121 - local.get $l122 - i32.add - local.set $l123 - local.get $l122 - local.get $l123 - i32.add - local.set $l124 - local.get $l123 - local.get $l124 - i32.add - local.set $l125 - local.get $l124 - local.get $l125 - i32.add - local.set $l126 - local.get $l125 - local.get $l126 - i32.add - local.set $l127 - local.get $l126 - local.get $l127 - i32.add - local.set $l128 - local.get $l127 - local.get $l128 - i32.add - local.set $l129 - local.get $l128 - local.get $l129 - i32.add - local.set $l130 - local.get $l129 - local.get $l130 - i32.add - local.set $l131 - local.get $l130 - local.get $l131 - i32.add - local.set $l132 - local.get $l131 - local.get $l132 - i32.add - local.set $l133 - local.get $l132 - local.get $l133 - i32.add - local.set $l134 - local.get $l133 - local.get $l134 - i32.add - local.set $l135 - local.get $l134 - local.get $l135 - i32.add - local.set $l136 - local.get $l135 - local.get $l136 - i32.add - local.set $l137 - local.get $l136 - local.get $l137 - i32.add - local.set $l138 - local.get $l137 - local.get $l138 - i32.add - local.set $l139 - local.get $l138 - local.get $l139 - i32.add - local.set $l140 - local.get $l139 - local.get $l140 - i32.add - local.set $l141 - local.get $l140 - local.get $l141 - i32.add - local.set $l142 - local.get $l141 - local.get $l142 - i32.add - local.set $l143 - local.get $l142 - local.get $l143 - i32.add - local.set $l144 - local.get $l143 - local.get $l144 - i32.add - local.set $l145 - local.get $l144 - local.get $l145 - i32.add - local.set $l146 - local.get $l145 - local.get $l146 - i32.add - local.set $l147 - local.get $l146 - local.get $l147 - i32.add - local.set $l148 - local.get $l147 - local.get $l148 - i32.add - local.set $l149 - local.get $l148 - local.get $l149 - i32.add - local.set $l150 - local.get $l149 - local.get $l150 - i32.add - local.set $l151 - local.get $l150 - local.get $l151 - i32.add - local.set $l152 - local.get $l151 - local.get $l152 - i32.add - local.set $l153 - local.get $l152 - local.get $l153 - i32.add - local.set $l154 - local.get $l153 - local.get $l154 - i32.add - local.set $l155 - local.get $l154 - local.get $l155 - i32.add - local.set $l156 - local.get $l155 - local.get $l156 - i32.add - local.set $l157 - local.get $l156 - local.get $l157 - i32.add - local.set $l158 - local.get $l157 - local.get $l158 - i32.add - local.set $l159 - local.get $l158 - local.get $l159 - i32.add - local.set $l160 - local.get $l159 - local.get $l160 - i32.add - local.set $l161 - local.get $l160 - local.get $l161 - i32.add - local.set $l162 - local.get $l161 - local.get $l162 - i32.add - local.set $l163 - local.get $l162 - local.get $l163 - i32.add - local.set $l164 - local.get $l163 - local.get $l164 - i32.add - local.set $l165 - local.get $l164 - local.get $l165 - i32.add - local.set $l166 - local.get $l165 - local.get $l166 - i32.add - local.set $l167 - local.get $l166 - local.get $l167 - i32.add - local.set $l168 - local.get $l167 - local.get $l168 - i32.add - local.set $l169 - local.get $l168 - local.get $l169 - i32.add - local.set $l170 - local.get $l169 - local.get $l170 - i32.add - local.set $l171 - local.get $l170 - local.get $l171 - i32.add - local.set $l172 - local.get $l171 - local.get $l172 - i32.add - local.set $l173 - local.get $l172 - local.get $l173 - i32.add - local.set $l174 - local.get $l173 - local.get $l174 - i32.add - local.set $l175 - local.get $l174 - local.get $l175 - i32.add - local.set $l176 - local.get $l175 - local.get $l176 - i32.add - local.set $l177 - local.get $l176 - local.get $l177 - i32.add - local.set $l178 - local.get $l177 - local.get $l178 - i32.add - local.set $l179 - local.get $l178 - local.get $l179 - i32.add - local.set $l180 - local.get $l179 - local.get $l180 - i32.add - local.set $l181 - local.get $l180 - local.get $l181 - i32.add - local.set $l182 - local.get $l181 - local.get $l182 - i32.add - local.set $l183 - local.get $l182 - local.get $l183 - i32.add - local.set $l184 - local.get $l183 - local.get $l184 - i32.add - local.set $l185 - local.get $l184 - local.get $l185 - i32.add - local.set $l186 - local.get $l185 - local.get $l186 - i32.add - local.set $l187 - local.get $l186 - local.get $l187 - i32.add - local.set $l188 - local.get $l187 - local.get $l188 - i32.add - local.set $l189 - local.get $l188 - local.get $l189 - i32.add - local.set $l190 - local.get $l189 - local.get $l190 - i32.add - local.set $l191 - local.get $l190 - local.get $l191 - i32.add - local.set $l192 - local.get $l191 - local.get $l192 - i32.add - local.set $l193 - local.get $l192 - local.get $l193 - i32.add - local.set $l194 - local.get $l193 - local.get $l194 - i32.add - local.set $l195 - local.get $l194 - local.get $l195 - i32.add - local.set $l196 - local.get $l195 - local.get $l196 - i32.add - local.set $l197 - local.get $l196 - local.get $l197 - i32.add - local.set $l198 - local.get $l197 - local.get $l198 - i32.add - local.set $l199 - local.get $l198 - local.get $l199 - i32.add - local.set $l200 - local.get $l199 - local.get $l200 - i32.add - local.set $l201 - local.get $l200 - local.get $l201 - i32.add - local.set $l202 - local.get $l201 - local.get $l202 - i32.add - local.set $l203 - local.get $l202 - local.get $l203 - i32.add - local.set $l204 - local.get $l203 - local.get $l204 - i32.add - local.set $l205 - local.get $l204 - local.get $l205 - i32.add - local.set $l206 - local.get $l205 - local.get $l206 - i32.add - local.set $l207 - local.get $l206 - local.get $l207 - i32.add - local.set $l208 - local.get $l207 - local.get $l208 - i32.add - local.set $l209 - local.get $l208 - local.get $l209 - i32.add - local.set $l210 - local.get $l209 - local.get $l210 - i32.add - local.set $l211 - local.get $l210 - local.get $l211 - i32.add - local.set $l212 - local.get $l211 - local.get $l212 - i32.add - local.set $l213 - local.get $l212 - local.get $l213 - i32.add - local.set $l214 - local.get $l213 - local.get $l214 - i32.add - local.set $l215 - local.get $l214 - local.get $l215 - i32.add - local.set $l216 - local.get $l215 - local.get $l216 - i32.add - local.set $l217 - local.get $l216 - local.get $l217 - i32.add - local.set $l218 - local.get $l217 - local.get $l218 - i32.add - local.set $l219 - local.get $l218 - local.get $l219 - i32.add - local.set $l220 - local.get $l219 - local.get $l220 - i32.add - local.set $l221 - local.get $l220 - local.get $l221 - i32.add - local.set $l222 - local.get $l221 - local.get $l222 - i32.add - local.set $l223 - local.get $l222 - local.get $l223 - i32.add - local.set $l224 - local.get $l223 - local.get $l224 - i32.add - local.set $l225 - local.get $l224 - local.get $l225 - i32.add - local.set $l226 - local.get $l225 - local.get $l226 - i32.add - local.set $l227 - local.get $l226 - local.get $l227 - i32.add - local.set $l228 - local.get $l227 - local.get $l228 - i32.add - local.set $l229 - local.get $l228 - local.get $l229 - i32.add - local.set $l230 - local.get $l229 - local.get $l230 - i32.add - local.set $l231 - local.get $l230 - local.get $l231 - i32.add - local.set $l232 - local.get $l231 - local.get $l232 - i32.add - local.set $l233 - local.get $l232 - local.get $l233 - i32.add - local.set $l234 - local.get $l233 - local.get $l234 - i32.add - local.set $l235 - local.get $l234 - local.get $l235 - i32.add - local.set $l236 - local.get $l235 - local.get $l236 - i32.add - local.set $l237 - local.get $l236 - local.get $l237 - i32.add - local.set $l238 - local.get $l237 - local.get $l238 - i32.add - local.set $l239 - local.get $l238 - local.get $l239 - i32.add - local.set $l240 - local.get $l239 - local.get $l240 - i32.add - local.set $l241 - local.get $l240 - local.get $l241 - i32.add - local.set $l242 - local.get $l241 - local.get $l242 - i32.add - local.set $l243 - local.get $l242 - local.get $l243 - i32.add - local.set $l244 - local.get $l243 - local.get $l244 - i32.add - local.set $l245 - local.get $l244 - local.get $l245 - i32.add - local.set $l246 - local.get $l245 - local.get $l246 - i32.add - local.set $l247 - local.get $l246 - local.get $l247 - i32.add - local.set $l248 - local.get $l247 - local.get $l248 - i32.add - local.set $l249 - local.get $l248 - local.get $l249 - i32.add - local.set $l250 - local.get $l249 - local.get $l250 - i32.add - local.set $l251 - local.get $l250 - local.get $l251 - i32.add - local.set $l252 - local.get $l251 - local.get $l252 - i32.add - local.set $l253 - local.get $l252 - local.get $l253 - i32.add - local.set $l254 - local.get $l253 - local.get $l254 - i32.add - local.set $l255 - local.get $l254 - local.get $l255 - i32.add - local.set $l256 - local.get $l255 - local.get $l256 - i32.add - local.set $l257 - local.get $l256 - local.get $l257 - i32.add - local.set $l258 - local.get $l257 - local.get $l258 - i32.add - local.set $l259 - local.get $l258 - local.get $l259 - i32.add - local.set $l260 - local.get $l259 - local.get $l260 - i32.add - local.set $l261 - local.get $l260 - local.get $l261 - i32.add - local.set $l262 - local.get $l261 - local.get $l262 - i32.add - local.set $l263 - local.get $l262 - local.get $l263 - i32.add - local.set $l264 - local.get $l263 - local.get $l264 - i32.add - local.set $l265 - local.get $l264 - local.get $l265 - i32.add - local.set $l266 - local.get $l265 - local.get $l266 - i32.add - local.set $l267 - local.get $l266 - local.get $l267 - i32.add - local.set $l268 - local.get $l267 - local.get $l268 - i32.add - local.set $l269 - local.get $l268 - local.get $l269 - i32.add - local.set $l270 - local.get $l269 - local.get $l270 - i32.add - local.set $l271 - local.get $l270 - local.get $l271 - i32.add - local.set $l272 - local.get $l271 - local.get $l272 - i32.add - local.set $l273 - local.get $l272 - local.get $l273 - i32.add - local.set $l274 - local.get $l273 - local.get $l274 - i32.add - local.set $l275 - local.get $l274 - local.get $l275 - i32.add - local.set $l276 - local.get $l275 - local.get $l276 - i32.add - local.set $l277 - local.get $l276 - local.get $l277 - i32.add - local.set $l278 - local.get $l277 - local.get $l278 - i32.add - local.set $l279 - local.get $l278 - local.get $l279 - i32.add - local.set $l280 - local.get $l279 - local.get $l280 - i32.add - local.set $l281 - local.get $l280 - local.get $l281 - i32.add - local.set $l282 - local.get $l281 - local.get $l282 - i32.add - local.set $l283 - local.get $l282 - local.get $l283 - i32.add - local.set $l284 - local.get $l283 - local.get $l284 - i32.add - local.set $l285 - local.get $l284 - local.get $l285 - i32.add - local.set $l286 - local.get $l285 - local.get $l286 - i32.add - local.set $l287 - local.get $l286 - local.get $l287 - i32.add - local.set $l288 - local.get $l287 - local.get $l288 - i32.add - local.set $l289 - local.get $l288 - local.get $l289 - i32.add - local.set $l290 - local.get $l289 - local.get $l290 - i32.add - local.set $l291 - local.get $l290 - local.get $l291 - i32.add - local.set $l292 - local.get $l291 - local.get $l292 - i32.add - local.set $l293 - local.get $l292 - local.get $l293 - i32.add - local.set $l294 - local.get $l293 - local.get $l294 - i32.add - local.set $l295 - local.get $l294 - local.get $l295 - i32.add - local.set $l296 - local.get $l295 - local.get $l296 - i32.add - local.set $l297 - local.get $l296 - local.get $l297 - i32.add - local.set $l298 - local.get $l297 - local.get $l298 - i32.add - local.set $l299 - local.get $l298 - local.get $l299 - i32.add - local.set $l300 - local.get $l299 - local.get $l300 - i32.add - local.set $l301 - local.get $l300 - local.get $l301 - i32.add - local.set $l302 - local.get $l301 - local.get $l302 - i32.add - local.set $l303 - local.get $l302 - local.get $l303 - i32.add - local.set $l304 - local.get $l303 - local.get $l304 - i32.add - local.set $l305 - local.get $l304 - local.get $l305 - i32.add - local.set $l306 - local.get $l305 - local.get $l306 - i32.add - local.set $l307 - local.get $l306 - local.get $l307 - i32.add - local.set $l308 - local.get $l307 - local.get $l308 - i32.add - local.set $l309 - local.get $l308 - local.get $l309 - i32.add - local.set $l310 - local.get $l309 - local.get $l310 - i32.add - local.set $l311 - local.get $l310 - local.get $l311 - i32.add - local.set $l312 - local.get $l311 - local.get $l312 - i32.add - local.set $l313 - local.get $l312 - local.get $l313 - i32.add - local.set $l314 - local.get $l313 - local.get $l314 - i32.add - local.set $l315 - local.get $l314 - local.get $l315 - i32.add - local.set $l316 - local.get $l315 - local.get $l316 - i32.add - local.set $l317 - local.get $l316 - local.get $l317 - i32.add - local.set $l318 - local.get $l317 - local.get $l318 - i32.add - local.set $l319 - local.get $l318 - local.get $l319 - i32.add - local.set $l320 - local.get $l319 - local.get $l320 - i32.add - local.set $l321 - local.get $l320 - local.get $l321 - i32.add - local.set $l322 - local.get $l321 - local.get $l322 - i32.add - local.set $l323 - local.get $l322 - local.get $l323 - i32.add - local.set $l324 - local.get $l323 - local.get $l324 - i32.add - local.set $l325 - local.get $l324 - local.get $l325 - i32.add - local.set $l326 - local.get $l325 - local.get $l326 - i32.add - local.set $l327 - local.get $l326 - local.get $l327 - i32.add - local.set $l328 - local.get $l327 - local.get $l328 - i32.add - local.set $l329 - local.get $l328 - local.get $l329 - i32.add - local.set $l330 - local.get $l329 - local.get $l330 - i32.add - local.set $l331 - local.get $l330 - local.get $l331 - i32.add - local.set $l332 - local.get $l331 - local.get $l332 - i32.add - local.set $l333 - local.get $l332 - local.get $l333 - i32.add - local.set $l334 - local.get $l333 - local.get $l334 - i32.add - local.set $l335 - local.get $l334 - local.get $l335 - i32.add - local.set $l336 - local.get $l335 - local.get $l336 - i32.add - local.set $l337 - local.get $l336 - local.get $l337 - i32.add - local.set $l338 - local.get $l337 - local.get $l338 - i32.add - local.set $l339 - local.get $l338 - local.get $l339 - i32.add - local.set $l340 - local.get $l339 - local.get $l340 - i32.add - local.set $l341 - local.get $l340 - local.get $l341 - i32.add - local.set $l342 - local.get $l341 - local.get $l342 - i32.add - local.set $l343 - local.get $l342 - local.get $l343 - i32.add - local.set $l344 - local.get $l343 - local.get $l344 - i32.add - local.set $l345 - local.get $l344 - local.get $l345 - i32.add - local.set $l346 - local.get $l345 - local.get $l346 - i32.add - local.set $l347 - local.get $l346 - local.get $l347 - i32.add - local.set $l348 - local.get $l347 - local.get $l348 - i32.add - local.set $l349 - local.get $l348 - local.get $l349 - i32.add - local.set $l350 - local.get $l349 - local.get $l350 - i32.add - local.set $l351 - local.get $l350 - local.get $l351 - i32.add - local.set $l352 - local.get $l351 - local.get $l352 - i32.add - local.set $l353 - local.get $l352 - local.get $l353 - i32.add - local.set $l354 - local.get $l353 - local.get $l354 - i32.add - local.set $l355 - local.get $l354 - local.get $l355 - i32.add - local.set $l356 - local.get $l355 - local.get $l356 - i32.add - local.set $l357 - local.get $l356 - local.get $l357 - i32.add - local.set $l358 - local.get $l357 - local.get $l358 - i32.add - local.set $l359 - local.get $l358 - local.get $l359 - i32.add - local.set $l360 - local.get $l359 - local.get $l360 - i32.add - local.set $l361 - local.get $l360 - local.get $l361 - i32.add - local.set $l362 - local.get $l361 - local.get $l362 - i32.add - local.set $l363 - local.get $l362 - local.get $l363 - i32.add - local.set $l364 - local.get $l363 - local.get $l364 - i32.add - local.set $l365 - local.get $l364 - local.get $l365 - i32.add - local.set $l366 - local.get $l365 - local.get $l366 - i32.add - local.set $l367 - local.get $l366 - local.get $l367 - i32.add - local.set $l368 - local.get $l367 - local.get $l368 - i32.add - local.set $l369 - local.get $l368 - local.get $l369 - i32.add - local.set $l370 - local.get $l369 - local.get $l370 - i32.add - local.set $l371 - local.get $l370 - local.get $l371 - i32.add - local.set $l372 - local.get $l371 - local.get $l372 - i32.add - local.set $l373 - local.get $l372 - local.get $l373 - i32.add - local.set $l374 - local.get $l373 - local.get $l374 - i32.add - local.set $l375 - local.get $l374 - local.get $l375 - i32.add - local.set $l376 - local.get $l375 - local.get $l376 - i32.add - local.set $l377 - local.get $l376 - local.get $l377 - i32.add - local.set $l378 - local.get $l377 - local.get $l378 - i32.add - local.set $l379 - local.get $l378 - local.get $l379 - i32.add - local.set $l380 - local.get $l379 - local.get $l380 - i32.add - local.set $l381 - local.get $l380 - local.get $l381 - i32.add - local.set $l382 - local.get $l381 - local.get $l382 - i32.add - local.set $l383 - local.get $l382 - local.get $l383 - i32.add - local.set $l384 - local.get $l383 - local.get $l384 - i32.add - local.set $l385 - local.get $l384 - local.get $l385 - i32.add - local.set $l386 - local.get $l385 - local.get $l386 - i32.add - local.set $l387 - local.get $l386 - local.get $l387 - i32.add - local.set $l388 - local.get $l387 - local.get $l388 - i32.add - local.set $l389 - local.get $l388 - local.get $l389 - i32.add - local.set $l390 - local.get $l389 - local.get $l390 - i32.add - local.set $l391 - local.get $l390 - local.get $l391 - i32.add - local.set $l392 - local.get $l391 - local.get $l392 - i32.add - local.set $l393 - local.get $l392 - local.get $l393 - i32.add - local.set $l394 - local.get $l393 - local.get $l394 - i32.add - local.set $l395 - local.get $l394 - local.get $l395 - i32.add - local.set $l396 - local.get $l395 - local.get $l396 - i32.add - local.set $l397 - local.get $l396 - local.get $l397 - i32.add - local.set $l398 - local.get $l397 - local.get $l398 - i32.add - local.set $l399 - local.get $l398 - local.get $l399 - i32.add - local.set $l400 - local.get $l399 - local.get $l400 - i32.add - local.set $l401 - local.get $l400 - local.get $l401 - i32.add - local.set $l402 - local.get $l401 - local.get $l402 - i32.add - local.set $l403 - local.get $l402 - local.get $l403 - i32.add - local.set $l404 - local.get $l403 - local.get $l404 - i32.add - local.set $l405 - local.get $l404 - local.get $l405 - i32.add - local.set $l406 - local.get $l405 - local.get $l406 - i32.add - local.set $l407 - local.get $l406 - local.get $l407 - i32.add - local.set $l408 - local.get $l407 - local.get $l408 - i32.add - local.set $l409 - local.get $l408 - local.get $l409 - i32.add - local.set $l410 - local.get $l409 - local.get $l410 - i32.add - local.set $l411 - local.get $l410 - local.get $l411 - i32.add - local.set $l412 - local.get $l411 - local.get $l412 - i32.add - local.set $l413 - local.get $l412 - local.get $l413 - i32.add - local.set $l414 - local.get $l413 - local.get $l414 - i32.add - local.set $l415 - local.get $l414 - local.get $l415 - i32.add - local.set $l416 - local.get $l415 - local.get $l416 - i32.add - local.set $l417 - local.get $l416 - local.get $l417 - i32.add - local.set $l418 - local.get $l417 - local.get $l418 - i32.add - local.set $l419 - local.get $l418 - local.get $l419 - i32.add - local.set $l420 - local.get $l419 - local.get $l420 - i32.add - local.set $l421 - local.get $l420 - local.get $l421 - i32.add - local.set $l422 - local.get $l421 - local.get $l422 - i32.add - local.set $l423 - local.get $l422 - local.get $l423 - i32.add - local.set $l424 - local.get $l423 - local.get $l424 - i32.add - local.set $l425 - local.get $l424 - local.get $l425 - i32.add - local.set $l426 - local.get $l425 - local.get $l426 - i32.add - local.set $l427 - local.get $l426 - local.get $l427 - i32.add - local.set $l428 - local.get $l427 - local.get $l428 - i32.add - local.set $l429 - local.get $l428 - local.get $l429 - i32.add - local.set $l430 - local.get $l429 - local.get $l430 - i32.add - local.set $l431 - local.get $l430 - local.get $l431 - i32.add - local.set $l432 - local.get $l431 - local.get $l432 - i32.add - local.set $l433 - local.get $l432 - local.get $l433 - i32.add - local.set $l434 - local.get $l433 - local.get $l434 - i32.add - local.set $l435 - local.get $l434 - local.get $l435 - i32.add - local.set $l436 - local.get $l435 - local.get $l436 - i32.add - local.set $l437 - local.get $l436 - local.get $l437 - i32.add - local.set $l438 - local.get $l437 - local.get $l438 - i32.add - local.set $l439 - local.get $l438 - local.get $l439 - i32.add - local.set $l440 - local.get $l439 - local.get $l440 - i32.add - local.set $l441 - local.get $l440 - local.get $l441 - i32.add - local.set $l442 - local.get $l441 - local.get $l442 - i32.add - local.set $l443 - local.get $l442 - local.get $l443 - i32.add - local.set $l444 - local.get $l443 - local.get $l444 - i32.add - local.set $l445 - local.get $l444 - local.get $l445 - i32.add - local.set $l446 - local.get $l445 - local.get $l446 - i32.add - local.set $l447 - local.get $l446 - local.get $l447 - i32.add - local.set $l448 - local.get $l447 - local.get $l448 - i32.add - local.set $l449 - local.get $l448 - local.get $l449 - i32.add - local.set $l450 - local.get $l449 - local.get $l450 - i32.add - local.set $l451 - local.get $l450 - local.get $l451 - i32.add - local.set $l452 - local.get $l451 - local.get $l452 - i32.add - local.set $l453 - local.get $l452 - local.get $l453 - i32.add - local.set $l454 - local.get $l453 - local.get $l454 - i32.add - local.set $l455 - local.get $l454 - local.get $l455 - i32.add - local.set $l456 - local.get $l455 - local.get $l456 - i32.add - local.set $l457 - local.get $l456 - local.get $l457 - i32.add - local.set $l458 - local.get $l457 - local.get $l458 - i32.add - local.set $l459 - local.get $l458 - local.get $l459 - i32.add - local.set $l460 - local.get $l459 - local.get $l460 - i32.add - local.set $l461 - local.get $l460 - local.get $l461 - i32.add - local.set $l462 - local.get $l461 - local.get $l462 - i32.add - local.set $l463 - local.get $l462 - local.get $l463 - i32.add - local.set $l464 - local.get $l463 - local.get $l464 - i32.add - local.set $l465 - local.get $l464 - local.get $l465 - i32.add - local.set $l466 - local.get $l465 - local.get $l466 - i32.add - local.set $l467 - local.get $l466 - local.get $l467 - i32.add - local.set $l468 - local.get $l467 - local.get $l468 - i32.add - local.set $l469 - local.get $l468 - local.get $l469 - i32.add - local.set $l470 - local.get $l469 - local.get $l470 - i32.add - local.set $l471 - local.get $l470 - local.get $l471 - i32.add - local.set $l472 - local.get $l471 - local.get $l472 - i32.add - local.set $l473 - local.get $l472 - local.get $l473 - i32.add - local.set $l474 - local.get $l473 - local.get $l474 - i32.add - local.set $l475 - local.get $l474 - local.get $l475 - i32.add - local.set $l476 - local.get $l475 - local.get $l476 - i32.add - local.set $l477 - local.get $l476 - local.get $l477 - i32.add - local.set $l478 - local.get $l477 - local.get $l478 - i32.add - local.set $l479 - local.get $l478 - local.get $l479 - i32.add - local.set $l480 - local.get $l479 - local.get $l480 - i32.add - local.set $l481 - local.get $l480 - local.get $l481 - i32.add - local.set $l482 - local.get $l481 - local.get $l482 - i32.add - local.set $l483 - local.get $l482 - local.get $l483 - i32.add - local.set $l484 - local.get $l483 - local.get $l484 - i32.add - local.set $l485 - local.get $l484 - local.get $l485 - i32.add - local.set $l486 - local.get $l485 - local.get $l486 - i32.add - local.set $l487 - local.get $l486 - local.get $l487 - i32.add - local.set $l488 - local.get $l487 - local.get $l488 - i32.add - local.set $l489 - local.get $l488 - local.get $l489 - i32.add - local.set $l490 - local.get $l489 - local.get $l490 - i32.add - local.set $l491 - local.get $l490 - local.get $l491 - i32.add - local.set $l492 - local.get $l491 - local.get $l492 - i32.add - local.set $l493 - local.get $l492 - local.get $l493 - i32.add - local.set $l494 - local.get $l493 - local.get $l494 - i32.add - local.set $l495 - local.get $l494 - local.get $l495 - i32.add - local.set $l496 - local.get $l495 - local.get $l496 - i32.add - local.set $l497 - local.get $l496 - local.get $l497 - i32.add - local.set $l498 - local.get $l497 - local.get $l498 - i32.add - local.set $l499 - local.get $l498 - local.get $l499 - i32.add - local.set $l500 - local.get $l499 - local.get $l500 - i32.add - local.set $l501 - local.get $l500 - local.get $l501 - i32.add - local.set $l502 - local.get $l501 - local.get $l502 - i32.add - local.set $l503 - local.get $l502 - local.get $l503 - i32.add - local.set $l504 - local.get $l503 - local.get $l504 - i32.add - local.set $l505 - local.get $l504 - local.get $l505 - i32.add - local.set $l506 - local.get $l505 - local.get $l506 - i32.add - local.set $l507 - local.get $l506 - local.get $l507 - i32.add - local.set $l508 - local.get $l507 - local.get $l508 - i32.add - local.set $l509 - local.get $l508 - local.get $l509 - i32.add - local.set $l510 - local.get $l509 - local.get $l510 - i32.add - local.set $l511 - local.get $l510 - local.get $l511 - i32.add - local.set $l512 - local.get $l511 - local.get $l512 - i32.add - local.set $l513 - local.get $l512 - local.get $l513 - i32.add - local.set $l514 - local.get $l513 - local.get $l514 - i32.add - local.set $l515 - local.get $l514 - local.get $l515 - i32.add - local.set $l516 - local.get $l515 - local.get $l516 - i32.add - local.set $l517 - local.get $l516 - local.get $l517 - i32.add - local.set $l518 - local.get $l517 - local.get $l518 - i32.add - local.set $l519 - local.get $l518 - local.get $l519 - i32.add - local.set $l520 - local.get $l519 - local.get $l520 - i32.add - local.set $l521 - local.get $l520 - local.get $l521 - i32.add - local.set $l522 - local.get $l521 - local.get $l522 - i32.add - local.set $l523 - local.get $l522 - local.get $l523 - i32.add - local.set $l524 - local.get $l523 - local.get $l524 - i32.add - local.set $l525 - local.get $l524 - local.get $l525 - i32.add - local.set $l526 - local.get $l525 - local.get $l526 - i32.add - local.set $l527 - local.get $l526 - local.get $l527 - i32.add - local.set $l528 - local.get $l527 - local.get $l528 - i32.add - local.set $l529 - local.get $l528 - local.get $l529 - i32.add - local.set $l530 - local.get $l529 - local.get $l530 - i32.add - local.set $l531 - local.get $l530 - local.get $l531 - i32.add - local.set $l532 - local.get $l531 - local.get $l532 - i32.add - local.set $l533 - local.get $l532 - local.get $l533 - i32.add - local.set $l534 - local.get $l533 - local.get $l534 - i32.add - local.set $l535 - local.get $l534 - local.get $l535 - i32.add - local.set $l536 - local.get $l535 - local.get $l536 - i32.add - local.set $l537 - local.get $l536 - local.get $l537 - i32.add - local.set $l538 - local.get $l537 - local.get $l538 - i32.add - local.set $l539 - local.get $l538 - local.get $l539 - i32.add - local.set $l540 - local.get $l539 - local.get $l540 - i32.add - local.set $l541 - local.get $l540 - local.get $l541 - i32.add - local.set $l542 - local.get $l541 - local.get $l542 - i32.add - local.set $l543 - local.get $l542 - local.get $l543 - i32.add - local.set $l544 - local.get $l543 - local.get $l544 - i32.add - local.set $l545 - local.get $l544 - local.get $l545 - i32.add - local.set $l546 - local.get $l545 - local.get $l546 - i32.add - local.set $l547 - local.get $l546 - local.get $l547 - i32.add - local.set $l548 - local.get $l547 - local.get $l548 - i32.add - local.set $l549 - local.get $l548 - local.get $l549 - i32.add - local.set $l550 - local.get $l549 - local.get $l550 - i32.add - local.set $l551 - local.get $l550 - local.get $l551 - i32.add - local.set $l552 - local.get $l551 - local.get $l552 - i32.add - local.set $l553 - local.get $l552 - local.get $l553 - i32.add - local.set $l554 - local.get $l553 - local.get $l554 - i32.add - local.set $l555 - local.get $l554 - local.get $l555 - i32.add - local.set $l556 - local.get $l555 - local.get $l556 - i32.add - local.set $l557 - local.get $l556 - local.get $l557 - i32.add - local.set $l558 - local.get $l557 - local.get $l558 - i32.add - local.set $l559 - local.get $l558 - local.get $l559 - i32.add - local.set $l560 - local.get $l559 - local.get $l560 - i32.add - local.set $l561 - local.get $l560 - local.get $l561 - i32.add - local.set $l562 - local.get $l561 - local.get $l562 - i32.add - local.set $l563 - local.get $l562 - local.get $l563 - i32.add - local.set $l564 - local.get $l563 - local.get $l564 - i32.add - local.set $l565 - local.get $l564 - local.get $l565 - i32.add - local.set $l566 - local.get $l565 - local.get $l566 - i32.add - local.set $l567 - local.get $l566 - local.get $l567 - i32.add - local.set $l568 - local.get $l567 - local.get $l568 - i32.add - local.set $l569 - local.get $l568 - local.get $l569 - i32.add - local.set $l570 - local.get $l569 - local.get $l570 - i32.add - local.set $l571 - local.get $l570 - local.get $l571 - i32.add - local.set $l572 - local.get $l571 - local.get $l572 - i32.add - local.set $l573 - local.get $l572 - local.get $l573 - i32.add - local.set $l574 - local.get $l573 - local.get $l574 - i32.add - local.set $l575 - local.get $l574 - local.get $l575 - i32.add - local.set $l576 - local.get $l575 - local.get $l576 - i32.add - local.set $l577 - local.get $l576 - local.get $l577 - i32.add - local.set $l578 - local.get $l577 - local.get $l578 - i32.add - local.set $l579 - local.get $l578 - local.get $l579 - i32.add - local.set $l580 - local.get $l579 - local.get $l580 - i32.add - local.set $l581 - local.get $l580 - local.get $l581 - i32.add - local.set $l582 - local.get $l581 - local.get $l582 - i32.add - local.set $l583 - local.get $l582 - local.get $l583 - i32.add - local.set $l584 - local.get $l583 - local.get $l584 - i32.add - local.set $l585 - local.get $l584 - local.get $l585 - i32.add - local.set $l586 - local.get $l585 - local.get $l586 - i32.add - local.set $l587 - local.get $l586 - local.get $l587 - i32.add - local.set $l588 - local.get $l587 - local.get $l588 - i32.add - local.set $l589 - local.get $l588 - local.get $l589 - i32.add - local.set $l590 - local.get $l589 - local.get $l590 - i32.add - local.set $l591 - local.get $l590 - local.get $l591 - i32.add - local.set $l592 - local.get $l591 - local.get $l592 - i32.add - local.set $l593 - local.get $l592 - local.get $l593 - i32.add - local.set $l594 - local.get $l593 - local.get $l594 - i32.add - local.set $l595 - local.get $l594 - local.get $l595 - i32.add - local.set $l596 - local.get $l595 - local.get $l596 - i32.add - local.set $l597 - local.get $l596 - local.get $l597 - i32.add - local.set $l598 - local.get $l597 - local.get $l598 - i32.add - local.set $l599 - local.get $l598 - local.get $l599 - i32.add - local.set $l600 - local.get $l599 - local.get $l600 - i32.add - local.set $l601 - local.get $l600 - local.get $l601 - i32.add - local.set $l602 - local.get $l601 - local.get $l602 - i32.add - local.set $l603 - local.get $l602 - local.get $l603 - i32.add - local.set $l604 - local.get $l603 - local.get $l604 - i32.add - local.set $l605 - local.get $l604 - local.get $l605 - i32.add - local.set $l606 - local.get $l605 - local.get $l606 - i32.add - local.set $l607 - local.get $l606 - local.get $l607 - i32.add - local.set $l608 - local.get $l607 - local.get $l608 - i32.add - local.set $l609 - local.get $l608 - local.get $l609 - i32.add - local.set $l610 - local.get $l609 - local.get $l610 - i32.add - local.set $l611 - local.get $l610 - local.get $l611 - i32.add - local.set $l612 - local.get $l611 - local.get $l612 - i32.add - local.set $l613 - local.get $l612 - local.get $l613 - i32.add - local.set $l614 - local.get $l613 - local.get $l614 - i32.add - local.set $l615 - local.get $l614 - local.get $l615 - i32.add - local.set $l616 - local.get $l615 - local.get $l616 - i32.add - local.set $l617 - local.get $l616 - local.get $l617 - i32.add - local.set $l618 - local.get $l617 - local.get $l618 - i32.add - local.set $l619 - local.get $l618 - local.get $l619 - i32.add - local.set $l620 - local.get $l619 - local.get $l620 - i32.add - local.set $l621 - local.get $l620 - local.get $l621 - i32.add - local.set $l622 - local.get $l621 - local.get $l622 - i32.add - local.set $l623 - local.get $l622 - local.get $l623 - i32.add - local.set $l624 - local.get $l623 - local.get $l624 - i32.add - local.set $l625 - local.get $l624 - local.get $l625 - i32.add - local.set $l626 - local.get $l625 - local.get $l626 - i32.add - local.set $l627 - local.get $l626 - local.get $l627 - i32.add - local.set $l628 - local.get $l627 - local.get $l628 - i32.add - local.set $l629 - local.get $l628 - local.get $l629 - i32.add - local.set $l630 - local.get $l629 - local.get $l630 - i32.add - local.set $l631 - local.get $l630 - local.get $l631 - i32.add - local.set $l632 - local.get $l631 - local.get $l632 - i32.add - local.set $l633 - local.get $l632 - local.get $l633 - i32.add - local.set $l634 - local.get $l633 - local.get $l634 - i32.add - local.set $l635 - local.get $l634 - local.get $l635 - i32.add - local.set $l636 - local.get $l635 - local.get $l636 - i32.add - local.set $l637 - local.get $l636 - local.get $l637 - i32.add - local.set $l638 - local.get $l637 - local.get $l638 - i32.add - local.set $l639 - local.get $l638 - local.get $l639 - i32.add - local.set $l640 - local.get $l639 - local.get $l640 - i32.add - local.set $l641 - local.get $l640 - local.get $l641 - i32.add - local.set $l642 - local.get $l641 - local.get $l642 - i32.add - local.set $l643 - local.get $l642 - local.get $l643 - i32.add - local.set $l644 - local.get $l643 - local.get $l644 - i32.add - local.set $l645 - local.get $l644 - local.get $l645 - i32.add - local.set $l646 - local.get $l645 - local.get $l646 - i32.add - local.set $l647 - local.get $l646 - local.get $l647 - i32.add - local.set $l648 - local.get $l647 - local.get $l648 - i32.add - local.set $l649 - local.get $l648 - local.get $l649 - i32.add - local.set $l650 - local.get $l649 - local.get $l650 - i32.add - local.set $l651 - local.get $l650 - local.get $l651 - i32.add - local.set $l652 - local.get $l651 - local.get $l652 - i32.add - local.set $l653 - local.get $l652 - local.get $l653 - i32.add - local.set $l654 - local.get $l653 - local.get $l654 - i32.add - local.set $l655 - local.get $l654 - local.get $l655 - i32.add - local.set $l656 - local.get $l655 - local.get $l656 - i32.add - local.set $l657 - local.get $l656 - local.get $l657 - i32.add - local.set $l658 - local.get $l657 - local.get $l658 - i32.add - local.set $l659 - local.get $l658 - local.get $l659 - i32.add - local.set $l660 - local.get $l659 - local.get $l660 - i32.add - local.set $l661 - local.get $l660 - local.get $l661 - i32.add - local.set $l662 - local.get $l661 - local.get $l662 - i32.add - local.set $l663 - local.get $l662 - local.get $l663 - i32.add - local.set $l664 - local.get $l663 - local.get $l664 - i32.add - local.set $l665 - local.get $l664 - local.get $l665 - i32.add - local.set $l666 - local.get $l665 - local.get $l666 - i32.add - local.set $l667 - local.get $l666 - local.get $l667 - i32.add - local.set $l668 - local.get $l667 - local.get $l668 - i32.add - local.set $l669 - local.get $l668 - local.get $l669 - i32.add - local.set $l670 - local.get $l669 - local.get $l670 - i32.add - local.set $l671 - local.get $l670 - local.get $l671 - i32.add - local.set $l672 - local.get $l671 - local.get $l672 - i32.add - local.set $l673 - local.get $l672 - local.get $l673 - i32.add - local.set $l674 - local.get $l673 - local.get $l674 - i32.add - local.set $l675 - local.get $l674 - local.get $l675 - i32.add - local.set $l676 - local.get $l675 - local.get $l676 - i32.add - local.set $l677 - local.get $l676 - local.get $l677 - i32.add - local.set $l678 - local.get $l677 - local.get $l678 - i32.add - local.set $l679 - local.get $l678 - local.get $l679 - i32.add - local.set $l680 - local.get $l679 - local.get $l680 - i32.add - local.set $l681 - local.get $l680 - local.get $l681 - i32.add - local.set $l682 - local.get $l681 - local.get $l682 - i32.add - local.set $l683 - local.get $l682 - local.get $l683 - i32.add - local.set $l684 - local.get $l683 - local.get $l684 - i32.add - local.set $l685 - local.get $l684 - local.get $l685 - i32.add - local.set $l686 - local.get $l685 - local.get $l686 - i32.add - local.set $l687 - local.get $l686 - local.get $l687 - i32.add - local.set $l688 - local.get $l687 - local.get $l688 - i32.add - local.set $l689 - local.get $l688 - local.get $l689 - i32.add - local.set $l690 - local.get $l689 - local.get $l690 - i32.add - local.set $l691 - local.get $l690 - local.get $l691 - i32.add - local.set $l692 - local.get $l691 - local.get $l692 - i32.add - local.set $l693 - local.get $l692 - local.get $l693 - i32.add - local.set $l694 - local.get $l693 - local.get $l694 - i32.add - local.set $l695 - local.get $l694 - local.get $l695 - i32.add - local.set $l696 - local.get $l695 - local.get $l696 - i32.add - local.set $l697 - local.get $l696 - local.get $l697 - i32.add - local.set $l698 - local.get $l697 - local.get $l698 - i32.add - local.set $l699 - local.get $l698 - local.get $l699 - i32.add - local.set $l700 - local.get $l699 - local.get $l700 - i32.add - local.set $l701 - local.get $l700 - local.get $l701 - i32.add - local.set $l702 - local.get $l701 - local.get $l702 - i32.add - local.set $l703 - local.get $l702 - local.get $l703 - i32.add - local.set $l704 - local.get $l703 - local.get $l704 - i32.add - local.set $l705 - local.get $l704 - local.get $l705 - i32.add - local.set $l706 - local.get $l705 - local.get $l706 - i32.add - local.set $l707 - local.get $l706 - local.get $l707 - i32.add - local.set $l708 - local.get $l707 - local.get $l708 - i32.add - local.set $l709 - local.get $l708 - local.get $l709 - i32.add - local.set $l710 - local.get $l709 - local.get $l710 - i32.add - local.set $l711 - local.get $l710 - local.get $l711 - i32.add - local.set $l712 - local.get $l711 - local.get $l712 - i32.add - local.set $l713 - local.get $l712 - local.get $l713 - i32.add - local.set $l714 - local.get $l713 - local.get $l714 - i32.add - local.set $l715 - local.get $l714 - local.get $l715 - i32.add - local.set $l716 - local.get $l715 - local.get $l716 - i32.add - local.set $l717 - local.get $l716 - local.get $l717 - i32.add - local.set $l718 - local.get $l717 - local.get $l718 - i32.add - local.set $l719 - local.get $l718 - local.get $l719 - i32.add - local.set $l720 - local.get $l719 - local.get $l720 - i32.add - local.set $l721 - local.get $l720 - local.get $l721 - i32.add - local.set $l722 - local.get $l721 - local.get $l722 - i32.add - local.set $l723 - local.get $l722 - local.get $l723 - i32.add - local.set $l724 - local.get $l723 - local.get $l724 - i32.add - local.set $l725 - local.get $l724 - local.get $l725 - i32.add - local.set $l726 - local.get $l725 - local.get $l726 - i32.add - local.set $l727 - local.get $l726 - local.get $l727 - i32.add - local.set $l728 - local.get $l727 - local.get $l728 - i32.add - local.set $l729 - local.get $l728 - local.get $l729 - i32.add - local.set $l730 - local.get $l729 - local.get $l730 - i32.add - local.set $l731 - local.get $l730 - local.get $l731 - i32.add - local.set $l732 - local.get $l731 - local.get $l732 - i32.add - local.set $l733 - local.get $l732 - local.get $l733 - i32.add - local.set $l734 - local.get $l733 - local.get $l734 - i32.add - local.set $l735 - local.get $l734 - local.get $l735 - i32.add - local.set $l736 - local.get $l735 - local.get $l736 - i32.add - local.set $l737 - local.get $l736 - local.get $l737 - i32.add - local.set $l738 - local.get $l737 - local.get $l738 - i32.add - local.set $l739 - local.get $l738 - local.get $l739 - i32.add - local.set $l740 - local.get $l739 - local.get $l740 - i32.add - local.set $l741 - local.get $l740 - local.get $l741 - i32.add - local.set $l742 - local.get $l741 - local.get $l742 - i32.add - local.set $l743 - local.get $l742 - local.get $l743 - i32.add - local.set $l744 - local.get $l743 - local.get $l744 - i32.add - local.set $l745 - local.get $l744 - local.get $l745 - i32.add - local.set $l746 - local.get $l745 - local.get $l746 - i32.add - local.set $l747 - local.get $l746 - local.get $l747 - i32.add - local.set $l748 - local.get $l747 - local.get $l748 - i32.add - local.set $l749 - local.get $l748 - local.get $l749 - i32.add - local.set $l750 - local.get $l749 - local.get $l750 - i32.add - local.set $l751 - local.get $l750 - local.get $l751 - i32.add - local.set $l752 - local.get $l751 - local.get $l752 - i32.add - local.set $l753 - local.get $l752 - local.get $l753 - i32.add - local.set $l754 - local.get $l753 - local.get $l754 - i32.add - local.set $l755 - local.get $l754 - local.get $l755 - i32.add - local.set $l756 - local.get $l755 - local.get $l756 - i32.add - local.set $l757 - local.get $l756 - local.get $l757 - i32.add - local.set $l758 - local.get $l757 - local.get $l758 - i32.add - local.set $l759 - local.get $l758 - local.get $l759 - i32.add - local.set $l760 - local.get $l759 - local.get $l760 - i32.add - local.set $l761 - local.get $l760 - local.get $l761 - i32.add - local.set $l762 - local.get $l761 - local.get $l762 - i32.add - local.set $l763 - local.get $l762 - local.get $l763 - i32.add - local.set $l764 - local.get $l763 - local.get $l764 - i32.add - local.set $l765 - local.get $l764 - local.get $l765 - i32.add - local.set $l766 - local.get $l765 - local.get $l766 - i32.add - local.set $l767 - local.get $l766 - local.get $l767 - i32.add - local.set $l768 - local.get $l767 - local.get $l768 - i32.add - local.set $l769 - local.get $l768 - local.get $l769 - i32.add - local.set $l770 - local.get $l769 - local.get $l770 - i32.add - local.set $l771 - local.get $l770 - local.get $l771 - i32.add - local.set $l772 - local.get $l771 - local.get $l772 - i32.add - local.set $l773 - local.get $l772 - local.get $l773 - i32.add - local.set $l774 - local.get $l773 - local.get $l774 - i32.add - local.set $l775 - local.get $l774 - local.get $l775 - i32.add - local.set $l776 - local.get $l775 - local.get $l776 - i32.add - local.set $l777 - local.get $l776 - local.get $l777 - i32.add - local.set $l778 - local.get $l777 - local.get $l778 - i32.add - local.set $l779 - local.get $l778 - local.get $l779 - i32.add - local.set $l780 - local.get $l779 - local.get $l780 - i32.add - local.set $l781 - local.get $l780 - local.get $l781 - i32.add - local.set $l782 - local.get $l781 - local.get $l782 - i32.add - local.set $l783 - local.get $l782 - local.get $l783 - i32.add - local.set $l784 - local.get $l783 - local.get $l784 - i32.add - local.set $l785 - local.get $l784 - local.get $l785 - i32.add - local.set $l786 - local.get $l785 - local.get $l786 - i32.add - local.set $l787 - local.get $l786 - local.get $l787 - i32.add - local.set $l788 - local.get $l787 - local.get $l788 - i32.add - local.set $l789 - local.get $l788 - local.get $l789 - i32.add - local.set $l790 - local.get $l789 - local.get $l790 - i32.add - local.set $l791 - local.get $l790 - local.get $l791 - i32.add - local.set $l792 - local.get $l791 - local.get $l792 - i32.add - local.set $l793 - local.get $l792 - local.get $l793 - i32.add - local.set $l794 - local.get $l793 - local.get $l794 - i32.add - local.set $l795 - local.get $l794 - local.get $l795 - i32.add - local.set $l796 - local.get $l795 - local.get $l796 - i32.add - local.set $l797 - local.get $l796 - local.get $l797 - i32.add - local.set $l798 - local.get $l797 - local.get $l798 - i32.add - local.set $l799 - local.get $l798 - local.get $l799 - i32.add - local.set $l800 - local.get $l799 - local.get $l800 - i32.add - local.set $l801 - local.get $l800 - local.get $l801 - i32.add - local.set $l802 - local.get $l801 - local.get $l802 - i32.add - local.set $l803 - local.get $l802 - local.get $l803 - i32.add - local.set $l804 - local.get $l803 - local.get $l804 - i32.add - local.set $l805 - local.get $l804 - local.get $l805 - i32.add - local.set $l806 - local.get $l805 - local.get $l806 - i32.add - local.set $l807 - local.get $l806 - local.get $l807 - i32.add - local.set $l808 - local.get $l807 - local.get $l808 - i32.add - local.set $l809 - local.get $l808 - local.get $l809 - i32.add - local.set $l810 - local.get $l809 - local.get $l810 - i32.add - local.set $l811 - local.get $l810 - local.get $l811 - i32.add - local.set $l812 - local.get $l811 - local.get $l812 - i32.add - local.set $l813 - local.get $l812 - local.get $l813 - i32.add - local.set $l814 - local.get $l813 - local.get $l814 - i32.add - local.set $l815 - local.get $l814 - local.get $l815 - i32.add - local.set $l816 - local.get $l815 - local.get $l816 - i32.add - local.set $l817 - local.get $l816 - local.get $l817 - i32.add - local.set $l818 - local.get $l817 - local.get $l818 - i32.add - local.set $l819 - local.get $l818 - local.get $l819 - i32.add - local.set $l820 - local.get $l819 - local.get $l820 - i32.add - local.set $l821 - local.get $l820 - local.get $l821 - i32.add - local.set $l822 - local.get $l821 - local.get $l822 - i32.add - local.set $l823 - local.get $l822 - local.get $l823 - i32.add - local.set $l824 - local.get $l823 - local.get $l824 - i32.add - local.set $l825 - local.get $l824 - local.get $l825 - i32.add - local.set $l826 - local.get $l825 - local.get $l826 - i32.add - local.set $l827 - local.get $l826 - local.get $l827 - i32.add - local.set $l828 - local.get $l827 - local.get $l828 - i32.add - local.set $l829 - local.get $l828 - local.get $l829 - i32.add - local.set $l830 - local.get $l829 - local.get $l830 - i32.add - local.set $l831 - local.get $l830 - local.get $l831 - i32.add - local.set $l832 - local.get $l831 - local.get $l832 - i32.add - local.set $l833 - local.get $l832 - local.get $l833 - i32.add - local.set $l834 - local.get $l833 - local.get $l834 - i32.add - local.set $l835 - local.get $l834 - local.get $l835 - i32.add - local.set $l836 - local.get $l835 - local.get $l836 - i32.add - local.set $l837 - local.get $l836 - local.get $l837 - i32.add - local.set $l838 - local.get $l837 - local.get $l838 - i32.add - local.set $l839 - local.get $l838 - local.get $l839 - i32.add - local.set $l840 - local.get $l839 - local.get $l840 - i32.add - local.set $l841 - local.get $l840 - local.get $l841 - i32.add - local.set $l842 - local.get $l841 - local.get $l842 - i32.add - local.set $l843 - local.get $l842 - local.get $l843 - i32.add - local.set $l844 - local.get $l843 - local.get $l844 - i32.add - local.set $l845 - local.get $l844 - local.get $l845 - i32.add - local.set $l846 - local.get $l845 - local.get $l846 - i32.add - local.set $l847 - local.get $l846 - local.get $l847 - i32.add - local.set $l848 - local.get $l847 - local.get $l848 - i32.add - local.set $l849 - local.get $l848 - local.get $l849 - i32.add - local.set $l850 - local.get $l849 - local.get $l850 - i32.add - local.set $l851 - local.get $l850 - local.get $l851 - i32.add - local.set $l852 - local.get $l851 - local.get $l852 - i32.add - local.set $l853 - local.get $l852 - local.get $l853 - i32.add - local.set $l854 - local.get $l853 - local.get $l854 - i32.add - local.set $l855 - local.get $l854 - local.get $l855 - i32.add - local.set $l856 - local.get $l855 - local.get $l856 - i32.add - local.set $l857 - local.get $l856 - local.get $l857 - i32.add - local.set $l858 - local.get $l857 - local.get $l858 - i32.add - local.set $l859 - local.get $l858 - local.get $l859 - i32.add - local.set $l860 - local.get $l859 - local.get $l860 - i32.add - local.set $l861 - local.get $l860 - local.get $l861 - i32.add - local.set $l862 - local.get $l861 - local.get $l862 - i32.add - local.set $l863 - local.get $l862 - local.get $l863 - i32.add - local.set $l864 - local.get $l863 - local.get $l864 - i32.add - local.set $l865 - local.get $l864 - local.get $l865 - i32.add - local.set $l866 - local.get $l865 - local.get $l866 - i32.add - local.set $l867 - local.get $l866 - local.get $l867 - i32.add - local.set $l868 - local.get $l867 - local.get $l868 - i32.add - local.set $l869 - local.get $l868 - local.get $l869 - i32.add - local.set $l870 - local.get $l869 - local.get $l870 - i32.add - local.set $l871 - local.get $l870 - local.get $l871 - i32.add - local.set $l872 - local.get $l871 - local.get $l872 - i32.add - local.set $l873 - local.get $l872 - local.get $l873 - i32.add - local.set $l874 - local.get $l873 - local.get $l874 - i32.add - local.set $l875 - local.get $l874 - local.get $l875 - i32.add - local.set $l876 - local.get $l875 - local.get $l876 - i32.add - local.set $l877 - local.get $l876 - local.get $l877 - i32.add - local.set $l878 - local.get $l877 - local.get $l878 - i32.add - local.set $l879 - local.get $l878 - local.get $l879 - i32.add - local.set $l880 - local.get $l879 - local.get $l880 - i32.add - local.set $l881 - local.get $l880 - local.get $l881 - i32.add - local.set $l882 - local.get $l881 - local.get $l882 - i32.add - local.set $l883 - local.get $l882 - local.get $l883 - i32.add - local.set $l884 - local.get $l883 - local.get $l884 - i32.add - local.set $l885 - local.get $l884 - local.get $l885 - i32.add - local.set $l886 - local.get $l885 - local.get $l886 - i32.add - local.set $l887 - local.get $l886 - local.get $l887 - i32.add - local.set $l888 - local.get $l887 - local.get $l888 - i32.add - local.set $l889 - local.get $l888 - local.get $l889 - i32.add - local.set $l890 - local.get $l889 - local.get $l890 - i32.add - local.set $l891 - local.get $l890 - local.get $l891 - i32.add - local.set $l892 - local.get $l891 - local.get $l892 - i32.add - local.set $l893 - local.get $l892 - local.get $l893 - i32.add - local.set $l894 - local.get $l893 - local.get $l894 - i32.add - local.set $l895 - local.get $l894 - local.get $l895 - i32.add - local.set $l896 - local.get $l895 - local.get $l896 - i32.add - local.set $l897 - local.get $l896 - local.get $l897 - i32.add - local.set $l898 - local.get $l897 - local.get $l898 - i32.add - local.set $l899 - local.get $l898 - local.get $l899 - i32.add - local.set $l900 - local.get $l899 - local.get $l900 - i32.add - local.set $l901 - local.get $l900 - local.get $l901 - i32.add - local.set $l902 - local.get $l901 - local.get $l902 - i32.add - local.set $l903 - local.get $l902 - local.get $l903 - i32.add - local.set $l904 - local.get $l903 - local.get $l904 - i32.add - local.set $l905 - local.get $l904 - local.get $l905 - i32.add - local.set $l906 - local.get $l905 - local.get $l906 - i32.add - local.set $l907 - local.get $l906 - local.get $l907 - i32.add - local.set $l908 - local.get $l907 - local.get $l908 - i32.add - local.set $l909 - local.get $l908 - local.get $l909 - i32.add - local.set $l910 - local.get $l909 - local.get $l910 - i32.add - local.set $l911 - local.get $l910 - local.get $l911 - i32.add - local.set $l912 - local.get $l911 - local.get $l912 - i32.add - local.set $l913 - local.get $l912 - local.get $l913 - i32.add - local.set $l914 - local.get $l913 - local.get $l914 - i32.add - local.set $l915 - local.get $l914 - local.get $l915 - i32.add - local.set $l916 - local.get $l915 - local.get $l916 - i32.add - local.set $l917 - local.get $l916 - local.get $l917 - i32.add - local.set $l918 - local.get $l917 - local.get $l918 - i32.add - local.set $l919 - local.get $l918 - local.get $l919 - i32.add - local.set $l920 - local.get $l919 - local.get $l920 - i32.add - local.set $l921 - local.get $l920 - local.get $l921 - i32.add - local.set $l922 - local.get $l921 - local.get $l922 - i32.add - local.set $l923 - local.get $l922 - local.get $l923 - i32.add - local.set $l924 - local.get $l923 - local.get $l924 - i32.add - local.set $l925 - local.get $l924 - local.get $l925 - i32.add - local.set $l926 - local.get $l925 - local.get $l926 - i32.add - local.set $l927 - local.get $l926 - local.get $l927 - i32.add - local.set $l928 - local.get $l927 - local.get $l928 - i32.add - local.set $l929 - local.get $l928 - local.get $l929 - i32.add - local.set $l930 - local.get $l929 - local.get $l930 - i32.add - local.set $l931 - local.get $l930 - local.get $l931 - i32.add - local.set $l932 - local.get $l931 - local.get $l932 - i32.add - local.set $l933 - local.get $l932 - local.get $l933 - i32.add - local.set $l934 - local.get $l933 - local.get $l934 - i32.add - local.set $l935 - local.get $l934 - local.get $l935 - i32.add - local.set $l936 - local.get $l935 - local.get $l936 - i32.add - local.set $l937 - local.get $l936 - local.get $l937 - i32.add - local.set $l938 - local.get $l937 - local.get $l938 - i32.add - local.set $l939 - local.get $l938 - local.get $l939 - i32.add - local.set $l940 - local.get $l939 - local.get $l940 - i32.add - local.set $l941 - local.get $l940 - local.get $l941 - i32.add - local.set $l942 - local.get $l941 - local.get $l942 - i32.add - local.set $l943 - local.get $l942 - local.get $l943 - i32.add - local.set $l944 - local.get $l943 - local.get $l944 - i32.add - local.set $l945 - local.get $l944 - local.get $l945 - i32.add - local.set $l946 - local.get $l945 - local.get $l946 - i32.add - local.set $l947 - local.get $l946 - local.get $l947 - i32.add - local.set $l948 - local.get $l947 - local.get $l948 - i32.add - local.set $l949 - local.get $l948 - local.get $l949 - i32.add - local.set $l950 - local.get $l949 - local.get $l950 - i32.add - local.set $l951 - local.get $l950 - local.get $l951 - i32.add - local.set $l952 - local.get $l951 - local.get $l952 - i32.add - local.set $l953 - local.get $l952 - local.get $l953 - i32.add - local.set $l954 - local.get $l953 - local.get $l954 - i32.add - local.set $l955 - local.get $l954 - local.get $l955 - i32.add - local.set $l956 - local.get $l955 - local.get $l956 - i32.add - local.set $l957 - local.get $l956 - local.get $l957 - i32.add - local.set $l958 - local.get $l957 - local.get $l958 - i32.add - local.set $l959 - local.get $l958 - local.get $l959 - i32.add - local.set $l960 - local.get $l959 - local.get $l960 - i32.add - local.set $l961 - local.get $l960 - local.get $l961 - i32.add - local.set $l962 - local.get $l961 - local.get $l962 - i32.add - local.set $l963 - local.get $l962 - local.get $l963 - i32.add - local.set $l964 - local.get $l963 - local.get $l964 - i32.add - local.set $l965 - local.get $l964 - local.get $l965 - i32.add - local.set $l966 - local.get $l965 - local.get $l966 - i32.add - local.set $l967 - local.get $l966 - local.get $l967 - i32.add - local.set $l968 - local.get $l967 - local.get $l968 - i32.add - local.set $l969 - local.get $l968 - local.get $l969 - i32.add - local.set $l970 - local.get $l969 - local.get $l970 - i32.add - local.set $l971 - local.get $l970 - local.get $l971 - i32.add - local.set $l972 - local.get $l971 - local.get $l972 - i32.add - local.set $l973 - local.get $l972 - local.get $l973 - i32.add - local.set $l974 - local.get $l973 - local.get $l974 - i32.add - local.set $l975 - local.get $l974 - local.get $l975 - i32.add - local.set $l976 - local.get $l975 - local.get $l976 - i32.add - local.set $l977 - local.get $l976 - local.get $l977 - i32.add - local.set $l978 - local.get $l977 - local.get $l978 - i32.add - local.set $l979 - local.get $l978 - local.get $l979 - i32.add - local.set $l980 - local.get $l979 - local.get $l980 - i32.add - local.set $l981 - local.get $l980 - local.get $l981 - i32.add - local.set $l982 - local.get $l981 - local.get $l982 - i32.add - local.set $l983 - local.get $l982 - local.get $l983 - i32.add - local.set $l984 - local.get $l983 - local.get $l984 - i32.add - local.set $l985 - local.get $l984 - local.get $l985 - i32.add - local.set $l986 - local.get $l985 - local.get $l986 - i32.add - local.set $l987 - local.get $l986 - local.get $l987 - i32.add - local.set $l988 - local.get $l987 - local.get $l988 - i32.add - local.set $l989 - local.get $l988 - local.get $l989 - i32.add - local.set $l990 - local.get $l989 - local.get $l990 - i32.add - local.set $l991 - local.get $l990 - local.get $l991 - i32.add - local.set $l992 - local.get $l991 - local.get $l992 - i32.add - local.set $l993 - local.get $l992 - local.get $l993 - i32.add - local.set $l994 - local.get $l993 - local.get $l994 - i32.add - local.set $l995 - local.get $l994 - local.get $l995 - i32.add - local.set $l996 - local.get $l995 - local.get $l996 - i32.add - local.set $l997 - local.get $l996 - local.get $l997 - i32.add - local.set $l998 - local.get $l997 - local.get $l998 - i32.add - local.set $l999 - local.get $l998 - local.get $l999 - i32.add - local.set $l1000 - local.get $l999 - local.get $l1000 - i32.add - local.set $l1001 - local.get $l1000 - local.get $l1001 - i32.add - local.set $l1002 - local.get $l1001 - local.get $l1002 - i32.add - local.set $l1003 - local.get $l1002 - local.get $l1003 - i32.add - local.set $l1004 - local.get $l1003 - local.get $l1004 - i32.add - local.set $l1005 - local.get $l1004 - local.get $l1005 - i32.add - local.set $l1006 - local.get $l1005 - local.get $l1006 - i32.add - local.set $l1007 - local.get $l1006 - local.get $l1007 - i32.add - local.set $l1008 - local.get $l1007 - local.get $l1008 - i32.add - local.set $l1009 - local.get $l1008 - local.get $l1009 - i32.add - local.set $l1010 - local.get $l1009 - local.get $l1010 - i32.add - local.set $l1011 - local.get $l1010 - local.get $l1011 - i32.add - local.set $l1012 - local.get $l1011 - local.get $l1012 - i32.add - local.set $l1013 - local.get $l1012 - local.get $l1013 - i32.add - local.set $l1014 - local.get $l1013 - local.get $l1014 - i32.add - local.set $l1015 - local.get $l1014 - local.get $l1015 - i32.add - local.set $l1016 - local.get $l1015 - local.get $l1016 - i32.add - local.set $l1017 - local.get $l1016 - local.get $l1017 - i32.add - local.set $l1018 - local.get $l1017 - local.get $l1018 - i32.add - local.set $l1019 - local.get $l1018 - local.get $l1019 - i32.add - local.set $l1020 - local.get $l1019 - local.get $l1020 - i32.add - local.set $l1021 - local.get $l1020 - local.get $l1021 - i32.add - local.set $l1022 - local.get $l1021 - local.get $l1022 - i32.add - local.set $l1023 - local.get $l1022 - local.get $l1023 - i32.add - local.set $l1024 - local.get $l1023 - local.get $l1024 - i32.add - local.set $l1025 - local.get $l1024 - local.get $l1025 - i32.add - local.set $l1026 - local.get $l1025 - local.get $l1026 - i32.add - local.set $l1027 - local.get $l1026 - local.get $l1027 - i32.add - local.set $l1028 - local.get $l1027 - local.get $l1028 - i32.add - local.set $l1029 - local.get $l1028 - local.get $l1029 - i32.add - local.set $l1030 - local.get $l1029 - local.get $l1030 - i32.add - local.set $l1031 - local.get $l1030 - local.get $l1031 - i32.add - local.set $l1032 - local.get $l1031 - local.get $l1032 - i32.add - local.set $l1033 - local.get $l1032 - local.get $l1033 - i32.add - local.set $l1034 - local.get $l1033 - local.get $l1034 - i32.add - local.set $l1035 - local.get $l1034 - local.get $l1035 - i32.add - local.set $l1036 - local.get $l1035 - local.get $l1036 - i32.add - local.set $l1037 - local.get $l1036 - local.get $l1037 - i32.add - local.set $l1038 - local.get $l1037 - local.get $l1038 - i32.add - local.set $l1039 - local.get $l1038 - local.get $l1039 - i32.add - local.set $l1040 - local.get $l1039 - local.get $l1040 - i32.add - local.set $l1041 - local.get $l1040 - local.get $l1041 - i32.add - local.set $l1042 - local.get $l1041 - local.get $l1042 - i32.add - local.set $l1043 - local.get $l1042 - local.get $l1043 - i32.add - local.set $l1044 - local.get $l1043 - local.get $l1044 - i32.add - local.set $l1045 - local.get $l1044 - local.get $l1045 - i32.add - local.set $l1046 - local.get $l1045 - local.get $l1046 - i32.add - local.set $l1047 - local.get $l1046 - local.get $l1047 - i32.add - local.set $l1048 - local.get $l1047 - local.get $l1048 - i32.add - local.set $l1049 - local.get $l1048 - local.get $l1049 - i32.add - local.set $l1050 - local.get $l1049 - local.get $l1050 - i32.add - local.set $l1051 - local.get $l1050 - local.get $l1051 - i32.add - local.set $l1052 - local.get $l1051 - local.get $l1052 - i32.add - local.set $l1053 - local.get $l1052 - local.get $l1053 - i32.add - local.set $l1054 - local.get $l1053 - local.get $l1054 - i32.add - local.set $l1055 - local.get $l1054 - local.get $l1055 - i32.add - local.set $l1056 - local.get $l1055 - local.get $l1056 - i32.add - local.set $l1057 - local.get $l1056 - local.get $l1057 - i32.add - local.set $l1058 - local.get $l1057 - local.get $l1058 - i32.add - local.set $l1059 - local.get $l1058 - local.get $l1059 - i32.add - local.set $l1060 - local.get $l1059 - local.get $l1060 - i32.add - local.set $l1061 - local.get $l1060 - local.get $l1061 - i32.add - local.set $l1062 - local.get $l1061 - local.get $l1062 - i32.add - local.set $l1063 - local.get $l1062 - local.get $l1063 - i32.add - local.set $l1064 - local.get $l1063 - local.get $l1064 - i32.add - local.set $l1065 - local.get $l1064 - local.get $l1065 - i32.add - local.set $l1066 - local.get $l1065 - local.get $l1066 - i32.add - local.set $l1067 - local.get $l1066 - local.get $l1067 - i32.add - local.set $l1068 - local.get $l1067 - local.get $l1068 - i32.add - local.set $l1069 - local.get $l1068 - local.get $l1069 - i32.add - local.set $l1070 - local.get $l1069 - local.get $l1070 - i32.add - local.set $l1071 - local.get $l1070 - local.get $l1071 - i32.add - local.set $l1072 - local.get $l1071 - local.get $l1072 - i32.add - local.set $l1073 - local.get $l1072 - local.get $l1073 - i32.add - local.set $l1074 - local.get $l1073 - local.get $l1074 - i32.add - local.set $l1075 - local.get $l1074 - local.get $l1075 - i32.add - local.set $l1076 - local.get $l1075 - local.get $l1076 - i32.add - local.set $l1077 - local.get $l1076 - local.get $l1077 - i32.add - local.set $l1078 - local.get $l1077 - local.get $l1078 - i32.add - local.set $l1079 - local.get $l1078 - local.get $l1079 - i32.add - local.set $l1080 - local.get $l1079 - local.get $l1080 - i32.add - local.set $l1081 - local.get $l1080 - local.get $l1081 - i32.add - local.set $l1082 - local.get $l1081 - local.get $l1082 - i32.add - local.set $l1083 - local.get $l1082 - local.get $l1083 - i32.add - local.set $l1084 - local.get $l1083 - local.get $l1084 - i32.add - local.set $l1085 - local.get $l1084 - local.get $l1085 - i32.add - local.set $l1086 - local.get $l1085 - local.get $l1086 - i32.add - local.set $l1087 - local.get $l1086 - local.get $l1087 - i32.add - local.set $l1088 - local.get $l1087 - local.get $l1088 - i32.add - local.set $l1089 - local.get $l1088 - local.get $l1089 - i32.add - local.set $l1090 - local.get $l1089 - local.get $l1090 - i32.add - local.set $l1091 - local.get $l1090 - local.get $l1091 - i32.add - local.set $l1092 - local.get $l1091 - local.get $l1092 - i32.add - local.set $l1093 - local.get $l1092 - local.get $l1093 - i32.add - local.set $l1094 - local.get $l1093 - local.get $l1094 - i32.add - local.set $l1095 - local.get $l1094 - local.get $l1095 - i32.add - local.set $l1096 - local.get $l1095 - local.get $l1096 - i32.add - local.set $l1097 - local.get $l1096 - local.get $l1097 - i32.add - local.set $l1098 - local.get $l1097 - local.get $l1098 - i32.add - local.set $l1099 - local.get $l1098 - local.get $l1099 - i32.add - local.set $l1100 - local.get $l1099 - local.get $l1100 - i32.add - local.set $l1101 - local.get $l1100 - local.get $l1101 - i32.add - local.set $l1102 - local.get $l1101 - local.get $l1102 - i32.add - local.set $l1103 - local.get $l1102 - local.get $l1103 - i32.add - local.set $l1104 - local.get $l1103 - local.get $l1104 - i32.add - local.set $l1105 - local.get $l1104 - local.get $l1105 - i32.add - local.set $l1106 - local.get $l1105 - local.get $l1106 - i32.add - local.set $l1107 - local.get $l1106 - local.get $l1107 - i32.add - local.set $l1108 - local.get $l1107 - local.get $l1108 - i32.add - local.set $l1109 - local.get $l1108 - local.get $l1109 - i32.add - local.set $l1110 - local.get $l1109 - local.get $l1110 - i32.add - local.set $l1111 - local.get $l1110 - local.get $l1111 - i32.add - local.set $l1112 - local.get $l1111 - local.get $l1112 - i32.add - local.set $l1113 - local.get $l1112 - local.get $l1113 - i32.add - local.set $l1114 - local.get $l1113 - local.get $l1114 - i32.add - local.set $l1115 - local.get $l1114 - local.get $l1115 - i32.add - local.set $l1116 - local.get $l1115 - local.get $l1116 - i32.add - local.set $l1117 - local.get $l1116 - local.get $l1117 - i32.add - local.set $l1118 - local.get $l1117 - local.get $l1118 - i32.add - local.set $l1119 - local.get $l1118 - local.get $l1119 - i32.add - local.set $l1120 - local.get $l1119 - local.get $l1120 - i32.add - local.set $l1121 - local.get $l1120 - local.get $l1121 - i32.add - local.set $l1122 - local.get $l1121 - local.get $l1122 - i32.add - local.set $l1123 - local.get $l1122 - local.get $l1123 - i32.add - local.set $l1124 - local.get $l1123 - local.get $l1124 - i32.add - local.set $l1125 - local.get $l1124 - local.get $l1125 - i32.add - local.set $l1126 - local.get $l1125 - local.get $l1126 - i32.add - local.set $l1127 - local.get $l1126 - local.get $l1127 - i32.add - local.set $l1128 - local.get $l1127 - local.get $l1128 - i32.add - local.set $l1129 - local.get $l1128 - local.get $l1129 - i32.add - local.set $l1130 - local.get $l1129 - local.get $l1130 - i32.add - local.set $l1131 - local.get $l1130 - local.get $l1131 - i32.add - local.set $l1132 - local.get $l1131 - local.get $l1132 - i32.add - local.set $l1133 - local.get $l1132 - local.get $l1133 - i32.add - local.set $l1134 - local.get $l1133 - local.get $l1134 - i32.add - local.set $l1135 - local.get $l1134 - local.get $l1135 - i32.add - local.set $l1136 - local.get $l1135 - local.get $l1136 - i32.add - local.set $l1137 - local.get $l1136 - local.get $l1137 - i32.add - local.set $l1138 - local.get $l1137 - local.get $l1138 - i32.add - local.set $l1139 - local.get $l1138 - local.get $l1139 - i32.add - local.set $l1140 - local.get $l1139 - local.get $l1140 - i32.add - local.set $l1141 - local.get $l1140 - local.get $l1141 - i32.add - local.set $l1142 - local.get $l1141 - local.get $l1142 - i32.add - local.set $l1143 - local.get $l1142 - local.get $l1143 - i32.add - local.set $l1144 - local.get $l1143 - local.get $l1144 - i32.add - local.set $l1145 - local.get $l1144 - local.get $l1145 - i32.add - local.set $l1146 - local.get $l1145 - local.get $l1146 - i32.add - local.set $l1147 - local.get $l1146 - local.get $l1147 - i32.add - local.set $l1148 - local.get $l1147 - local.get $l1148 - i32.add - local.set $l1149 - local.get $l1148 - local.get $l1149 - i32.add - local.set $l1150 - local.get $l1149 - local.get $l1150 - i32.add - local.set $l1151 - local.get $l1150 - local.get $l1151 - i32.add - local.set $l1152 - local.get $l1151 - local.get $l1152 - i32.add - local.set $l1153 - local.get $l1152 - local.get $l1153 - i32.add - local.set $l1154 - local.get $l1153 - local.get $l1154 - i32.add - local.set $l1155 - local.get $l1154 - local.get $l1155 - i32.add - local.set $l1156 - local.get $l1155 - local.get $l1156 - i32.add - local.set $l1157 - local.get $l1156 - local.get $l1157 - i32.add - local.set $l1158 - local.get $l1157 - local.get $l1158 - i32.add - local.set $l1159 - local.get $l1158 - local.get $l1159 - i32.add - local.set $l1160 - local.get $l1159 - local.get $l1160 - i32.add - local.set $l1161 - local.get $l1160 - local.get $l1161 - i32.add - local.set $l1162 - local.get $l1161 - local.get $l1162 - i32.add - local.set $l1163 - local.get $l1162 - local.get $l1163 - i32.add - local.set $l1164 - local.get $l1163 - local.get $l1164 - i32.add - local.set $l1165 - local.get $l1164 - local.get $l1165 - i32.add - local.set $l1166 - local.get $l1165 - local.get $l1166 - i32.add - local.set $l1167 - local.get $l1166 - local.get $l1167 - i32.add - local.set $l1168 - local.get $l1167 - local.get $l1168 - i32.add - local.set $l1169 - local.get $l1168 - local.get $l1169 - i32.add - local.set $l1170 - local.get $l1169 - local.get $l1170 - i32.add - local.set $l1171 - local.get $l1170 - local.get $l1171 - i32.add - local.set $l1172 - local.get $l1171 - local.get $l1172 - i32.add - local.set $l1173 - local.get $l1172 - local.get $l1173 - i32.add - local.set $l1174 - local.get $l1173 - local.get $l1174 - i32.add - local.set $l1175 - local.get $l1174 - local.get $l1175 - i32.add - local.set $l1176 - local.get $l1175 - local.get $l1176 - i32.add - local.set $l1177 - local.get $l1176 - local.get $l1177 - i32.add - local.set $l1178 - local.get $l1177 - local.get $l1178 - i32.add - local.set $l1179 - local.get $l1178 - local.get $l1179 - i32.add - local.set $l1180 - local.get $l1179 - local.get $l1180 - i32.add - local.set $l1181 - local.get $l1180 - local.get $l1181 - i32.add - local.set $l1182 - local.get $l1181 - local.get $l1182 - i32.add - local.set $l1183 - local.get $l1182 - local.get $l1183 - i32.add - local.set $l1184 - local.get $l1183 - local.get $l1184 - i32.add - local.set $l1185 - local.get $l1184 - local.get $l1185 - i32.add - local.set $l1186 - local.get $l1185 - local.get $l1186 - i32.add - local.set $l1187 - local.get $l1186 - local.get $l1187 - i32.add - local.set $l1188 - local.get $l1187 - local.get $l1188 - i32.add - local.set $l1189 - local.get $l1188 - local.get $l1189 - i32.add - local.set $l1190 - local.get $l1189 - local.get $l1190 - i32.add - local.set $l1191 - local.get $l1190 - local.get $l1191 - i32.add - local.set $l1192 - local.get $l1191 - local.get $l1192 - i32.add - local.set $l1193 - local.get $l1192 - local.get $l1193 - i32.add - local.set $l1194 - local.get $l1193 - local.get $l1194 - i32.add - local.set $l1195 - local.get $l1194 - local.get $l1195 - i32.add - local.set $l1196 - local.get $l1195 - local.get $l1196 - i32.add - local.set $l1197 - local.get $l1196 - local.get $l1197 - i32.add - local.set $l1198 - local.get $l1197 - local.get $l1198 - i32.add - local.set $l1199 - local.get $l1198 - local.get $l1199 - i32.add - local.set $l1200 - local.get $l1199 - local.get $l1200 - i32.add - local.set $l1201 - local.get $l1200 - local.get $l1201 - i32.add - local.set $l1202 - local.get $l1201 - local.get $l1202 - i32.add - local.set $l1203 - local.get $l1202 - local.get $l1203 - i32.add - local.set $l1204 - local.get $l1203 - local.get $l1204 - i32.add - local.set $l1205 - local.get $l1204 - local.get $l1205 - i32.add - local.set $l1206 - local.get $l1205 - local.get $l1206 - i32.add - local.set $l1207 - local.get $l1206 - local.get $l1207 - i32.add - local.set $l1208 - local.get $l1207 - local.get $l1208 - i32.add - local.set $l1209 - local.get $l1208 - local.get $l1209 - i32.add - local.set $l1210 - local.get $l1209 - local.get $l1210 - i32.add - local.set $l1211 - local.get $l1210 - local.get $l1211 - i32.add - local.set $l1212 - local.get $l1211 - local.get $l1212 - i32.add - local.set $l1213 - local.get $l1212 - local.get $l1213 - i32.add - local.set $l1214 - local.get $l1213 - local.get $l1214 - i32.add - local.set $l1215 - local.get $l1214 - local.get $l1215 - i32.add - local.set $l1216 - local.get $l1215 - local.get $l1216 - i32.add - local.set $l1217 - local.get $l1216 - local.get $l1217 - i32.add - local.set $l1218 - local.get $l1217 - local.get $l1218 - i32.add - local.set $l1219 - local.get $l1218 - local.get $l1219 - i32.add - local.set $l1220 - local.get $l1219 - local.get $l1220 - i32.add - local.set $l1221 - local.get $l1220 - local.get $l1221 - i32.add - local.set $l1222 - local.get $l1221 - local.get $l1222 - i32.add - local.set $l1223 - local.get $l1222 - local.get $l1223 - i32.add - local.set $l1224 - local.get $l1223 - local.get $l1224 - i32.add - local.set $l1225 - local.get $l1224 - local.get $l1225 - i32.add - local.set $l1226 - local.get $l1225 - local.get $l1226 - i32.add - local.set $l1227 - local.get $l1226 - local.get $l1227 - i32.add - local.set $l1228 - local.get $l1227 - local.get $l1228 - i32.add - local.set $l1229 - local.get $l1228 - local.get $l1229 - i32.add - local.set $l1230 - local.get $l1229 - local.get $l1230 - i32.add - local.set $l1231 - local.get $l1230 - local.get $l1231 - i32.add - local.set $l1232 - local.get $l1231 - local.get $l1232 - i32.add - local.set $l1233 - local.get $l1232 - local.get $l1233 - i32.add - local.set $l1234 - local.get $l1233 - local.get $l1234 - i32.add - local.set $l1235 - local.get $l1234 - local.get $l1235 - i32.add - local.set $l1236 - local.get $l1235 - local.get $l1236 - i32.add - local.set $l1237 - local.get $l1236 - local.get $l1237 - i32.add - local.set $l1238 - local.get $l1237 - local.get $l1238 - i32.add - local.set $l1239 - local.get $l1238 - local.get $l1239 - i32.add - local.set $l1240 - local.get $l1239 - local.get $l1240 - i32.add - local.set $l1241 - local.get $l1240 - local.get $l1241 - i32.add - local.set $l1242 - local.get $l1241 - local.get $l1242 - i32.add - local.set $l1243 - local.get $l1242 - local.get $l1243 - i32.add - local.set $l1244 - local.get $l1243 - local.get $l1244 - i32.add - local.set $l1245 - local.get $l1244 - local.get $l1245 - i32.add - local.set $l1246 - local.get $l1245 - local.get $l1246 - i32.add - local.set $l1247 - local.get $l1246 - local.get $l1247 - i32.add - local.set $l1248 - local.get $l1247 - local.get $l1248 - i32.add - local.set $l1249 - local.get $l1248 - local.get $l1249 - i32.add - local.set $l1250 - local.get $l1249 - local.get $l1250 - i32.add - local.set $l1251 - local.get $l1250 - local.get $l1251 - i32.add - local.set $l1252 - local.get $l1251 - local.get $l1252 - i32.add - local.set $l1253 - local.get $l1252 - local.get $l1253 - i32.add - local.set $l1254 - local.get $l1253 - local.get $l1254 - i32.add - local.set $l1255 - local.get $l1254 - local.get $l1255 - i32.add - local.set $l1256 - local.get $l1255 - local.get $l1256 - i32.add - local.set $l1257 - local.get $l1256 - local.get $l1257 - i32.add - local.set $l1258 - local.get $l1257 - local.get $l1258 - i32.add - local.set $l1259 - local.get $l1258 - local.get $l1259 - i32.add - local.set $l1260 - local.get $l1259 - local.get $l1260 - i32.add - local.set $l1261 - local.get $l1260 - local.get $l1261 - i32.add - local.set $l1262 - local.get $l1261 - local.get $l1262 - i32.add - local.set $l1263 - local.get $l1262 - local.get $l1263 - i32.add - local.set $l1264 - local.get $l1263 - local.get $l1264 - i32.add - local.set $l1265 - local.get $l1264 - local.get $l1265 - i32.add - local.set $l1266 - local.get $l1265 - local.get $l1266 - i32.add - local.set $l1267 - local.get $l1266 - local.get $l1267 - i32.add - local.set $l1268 - local.get $l1267 - local.get $l1268 - i32.add - local.set $l1269 - local.get $l1268 - local.get $l1269 - i32.add - local.set $l1270 - local.get $l1269 - local.get $l1270 - i32.add - local.set $l1271 - local.get $l1270 - local.get $l1271 - i32.add - local.set $l1272 - local.get $l1271 - local.get $l1272 - i32.add - local.set $l1273 - local.get $l1272 - local.get $l1273 - i32.add - local.set $l1274 - local.get $l1273 - local.get $l1274 - i32.add - local.set $l1275 - local.get $l1274 - local.get $l1275 - i32.add - local.set $l1276 - local.get $l1275 - local.get $l1276 - i32.add - local.set $l1277 - local.get $l1276 - local.get $l1277 - i32.add - local.set $l1278 - local.get $l1277 - local.get $l1278 - i32.add - local.set $l1279 - local.get $l1278 - local.get $l1279 - i32.add - local.set $l1280 - local.get $l1279 - local.get $l1280 - i32.add - local.set $l1281 - local.get $l1280 - local.get $l1281 - i32.add - local.set $l1282 - local.get $l1281 - local.get $l1282 - i32.add - local.set $l1283 - local.get $l1282 - local.get $l1283 - i32.add - local.set $l1284 - local.get $l1283 - local.get $l1284 - i32.add - local.set $l1285 - local.get $l1284 - local.get $l1285 - i32.add - local.set $l1286 - local.get $l1285 - local.get $l1286 - i32.add - local.set $l1287 - local.get $l1286 - local.get $l1287 - i32.add - local.set $l1288 - local.get $l1287 - local.get $l1288 - i32.add - local.set $l1289 - local.get $l1288 - local.get $l1289 - i32.add - local.set $l1290 - local.get $l1289 - local.get $l1290 - i32.add - local.set $l1291 - local.get $l1290 - local.get $l1291 - i32.add - local.set $l1292 - local.get $l1291 - local.get $l1292 - i32.add - local.set $l1293 - local.get $l1292 - local.get $l1293 - i32.add - local.set $l1294 - local.get $l1293 - local.get $l1294 - i32.add - local.set $l1295 - local.get $l1294 - local.get $l1295 - i32.add - local.set $l1296 - local.get $l1295 - local.get $l1296 - i32.add - local.set $l1297 - local.get $l1296 - local.get $l1297 - i32.add - local.set $l1298 - local.get $l1297 - local.get $l1298 - i32.add - local.set $l1299 - local.get $l1298 - local.get $l1299 - i32.add - local.set $l1300 - local.get $l1299 - local.get $l1300 - i32.add - local.set $l1301 - local.get $l1300 - local.get $l1301 - i32.add - local.set $l1302 - local.get $l1301 - local.get $l1302 - i32.add - local.set $l1303 - local.get $l1302 - local.get $l1303 - i32.add - local.set $l1304 - local.get $l1303 - local.get $l1304 - i32.add - local.set $l1305 - local.get $l1304 - local.get $l1305 - i32.add - local.set $l1306 - local.get $l1305 - local.get $l1306 - i32.add - local.set $l1307 - local.get $l1306 - local.get $l1307 - i32.add - local.set $l1308 - local.get $l1307 - local.get $l1308 - i32.add - local.set $l1309 - local.get $l1308 - local.get $l1309 - i32.add - local.set $l1310 - local.get $l1309 - local.get $l1310 - i32.add - local.set $l1311 - local.get $l1310 - local.get $l1311 - i32.add - local.set $l1312 - local.get $l1311 - local.get $l1312 - i32.add - local.set $l1313 - local.get $l1312 - local.get $l1313 - i32.add - local.set $l1314 - local.get $l1313 - local.get $l1314 - i32.add - local.set $l1315 - local.get $l1314 - local.get $l1315 - i32.add - local.set $l1316 - local.get $l1315 - local.get $l1316 - i32.add - local.set $l1317 - local.get $l1316 - local.get $l1317 - i32.add - local.set $l1318 - local.get $l1317 - local.get $l1318 - i32.add - local.set $l1319 - local.get $l1318 - local.get $l1319 - i32.add - local.set $l1320 - local.get $l1319 - local.get $l1320 - i32.add - local.set $l1321 - local.get $l1320 - local.get $l1321 - i32.add - local.set $l1322 - local.get $l1321 - local.get $l1322 - i32.add - local.set $l1323 - local.get $l1322 - local.get $l1323 - i32.add - local.set $l1324 - local.get $l1323 - local.get $l1324 - i32.add - local.set $l1325 - local.get $l1324 - local.get $l1325 - i32.add - local.set $l1326 - local.get $l1325 - local.get $l1326 - i32.add - local.set $l1327 - local.get $l1326 - local.get $l1327 - i32.add - local.set $l1328 - local.get $l1327 - local.get $l1328 - i32.add - local.set $l1329 - local.get $l1328 - local.get $l1329 - i32.add - local.set $l1330 - local.get $l1329 - local.get $l1330 - i32.add - local.set $l1331 - local.get $l1330 - local.get $l1331 - i32.add - local.set $l1332 - local.get $l1331 - local.get $l1332 - i32.add - local.set $l1333 - local.get $l1332 - local.get $l1333 - i32.add - local.set $l1334 - local.get $l1333 - local.get $l1334 - i32.add - local.set $l1335 - local.get $l1334 - local.get $l1335 - i32.add - local.set $l1336 - local.get $l1335 - local.get $l1336 - i32.add - local.set $l1337 - local.get $l1336 - local.get $l1337 - i32.add - local.set $l1338 - local.get $l1337 - local.get $l1338 - i32.add - local.set $l1339 - local.get $l1338 - local.get $l1339 - i32.add - local.set $l1340 - local.get $l1339 - local.get $l1340 - i32.add - local.set $l1341 - local.get $l1340 - local.get $l1341 - i32.add - local.set $l1342 - local.get $l1341 - local.get $l1342 - i32.add - local.set $l1343 - local.get $l1342 - local.get $l1343 - i32.add - local.set $l1344 - local.get $l1343 - local.get $l1344 - i32.add - local.set $l1345 - local.get $l1344 - local.get $l1345 - i32.add - local.set $l1346 - local.get $l1345 - local.get $l1346 - i32.add - local.set $l1347 - local.get $l1346 - local.get $l1347 - i32.add - local.set $l1348 - local.get $l1347 - local.get $l1348 - i32.add - local.set $l1349 - local.get $l1348 - local.get $l1349 - i32.add - local.set $l1350 - local.get $l1349 - local.get $l1350 - i32.add - local.set $l1351 - local.get $l1350 - local.get $l1351 - i32.add - local.set $l1352 - local.get $l1351 - local.get $l1352 - i32.add - local.set $l1353 - local.get $l1352 - local.get $l1353 - i32.add - local.set $l1354 - local.get $l1353 - local.get $l1354 - i32.add - local.set $l1355 - local.get $l1354 - local.get $l1355 - i32.add - local.set $l1356 - local.get $l1355 - local.get $l1356 - i32.add - local.set $l1357 - local.get $l1356 - local.get $l1357 - i32.add - local.set $l1358 - local.get $l1357 - local.get $l1358 - i32.add - local.set $l1359 - local.get $l1358 - local.get $l1359 - i32.add - local.set $l1360 - local.get $l1359 - local.get $l1360 - i32.add - local.set $l1361 - local.get $l1360 - local.get $l1361 - i32.add - local.set $l1362 - local.get $l1361 - local.get $l1362 - i32.add - local.set $l1363 - local.get $l1362 - local.get $l1363 - i32.add - local.set $l1364 - local.get $l1363 - local.get $l1364 - i32.add - local.set $l1365 - local.get $l1364 - local.get $l1365 - i32.add - local.set $l1366 - local.get $l1365 - local.get $l1366 - i32.add - local.set $l1367 - local.get $l1366 - local.get $l1367 - i32.add - local.set $l1368 - local.get $l1367 - local.get $l1368 - i32.add - local.set $l1369 - local.get $l1368 - local.get $l1369 - i32.add - local.set $l1370 - local.get $l1369 - local.get $l1370 - i32.add - local.set $l1371 - local.get $l1370 - local.get $l1371 - i32.add - local.set $l1372 - local.get $l1371 - local.get $l1372 - i32.add - local.set $l1373 - local.get $l1372 - local.get $l1373 - i32.add - local.set $l1374 - local.get $l1373 - local.get $l1374 - i32.add - local.set $l1375 - local.get $l1374 - local.get $l1375 - i32.add - local.set $l1376 - local.get $l1375 - local.get $l1376 - i32.add - local.set $l1377 - local.get $l1376 - local.get $l1377 - i32.add - local.set $l1378 - local.get $l1377 - local.get $l1378 - i32.add - local.set $l1379 - local.get $l1378 - local.get $l1379 - i32.add - local.set $l1380 - local.get $l1379 - local.get $l1380 - i32.add - local.set $l1381 - local.get $l1380 - local.get $l1381 - i32.add - local.set $l1382 - local.get $l1381 - local.get $l1382 - i32.add - local.set $l1383 - local.get $l1382 - local.get $l1383 - i32.add - local.set $l1384 - local.get $l1383 - local.get $l1384 - i32.add - local.set $l1385 - local.get $l1384 - local.get $l1385 - i32.add - local.set $l1386 - local.get $l1385 - local.get $l1386 - i32.add - local.set $l1387 - local.get $l1386 - local.get $l1387 - i32.add - local.set $l1388 - local.get $l1387 - local.get $l1388 - i32.add - local.set $l1389 - local.get $l1388 - local.get $l1389 - i32.add - local.set $l1390 - local.get $l1389 - local.get $l1390 - i32.add - local.set $l1391 - local.get $l1390 - local.get $l1391 - i32.add - local.set $l1392 - local.get $l1391 - local.get $l1392 - i32.add - local.set $l1393 - local.get $l1392 - local.get $l1393 - i32.add - local.set $l1394 - local.get $l1393 - local.get $l1394 - i32.add - local.set $l1395 - local.get $l1394 - local.get $l1395 - i32.add - local.set $l1396 - local.get $l1395 - local.get $l1396 - i32.add - local.set $l1397 - local.get $l1396 - local.get $l1397 - i32.add - local.set $l1398 - local.get $l1397 - local.get $l1398 - i32.add - local.set $l1399 - local.get $l1398 - local.get $l1399 - i32.add - local.set $l1400 - local.get $l1399 - local.get $l1400 - i32.add - local.set $l1401 - local.get $l1400 - local.get $l1401 - i32.add - local.set $l1402 - local.get $l1401 - local.get $l1402 - i32.add - local.set $l1403 - local.get $l1402 - local.get $l1403 - i32.add - local.set $l1404 - local.get $l1403 - local.get $l1404 - i32.add - local.set $l1405 - local.get $l1404 - local.get $l1405 - i32.add - local.set $l1406 - local.get $l1405 - local.get $l1406 - i32.add - local.set $l1407 - local.get $l1406 - local.get $l1407 - i32.add - local.set $l1408 - local.get $l1407 - local.get $l1408 - i32.add - local.set $l1409 - local.get $l1408 - local.get $l1409 - i32.add - local.set $l1410 - local.get $l1409 - local.get $l1410 - i32.add - local.set $l1411 - local.get $l1410 - local.get $l1411 - i32.add - local.set $l1412 - local.get $l1411 - local.get $l1412 - i32.add - local.set $l1413 - local.get $l1412 - local.get $l1413 - i32.add - local.set $l1414 - local.get $l1413 - local.get $l1414 - i32.add - local.set $l1415 - local.get $l1414 - local.get $l1415 - i32.add - local.set $l1416 - local.get $l1415 - local.get $l1416 - i32.add - local.set $l1417 - local.get $l1416 - local.get $l1417 - i32.add - local.set $l1418 - local.get $l1417 - local.get $l1418 - i32.add - local.set $l1419 - local.get $l1418 - local.get $l1419 - i32.add - local.set $l1420 - local.get $l1419 - local.get $l1420 - i32.add - local.set $l1421 - local.get $l1420 - local.get $l1421 - i32.add - local.set $l1422 - local.get $l1421 - local.get $l1422 - i32.add - local.set $l1423 - local.get $l1422 - local.get $l1423 - i32.add - local.set $l1424 - local.get $l1423 - local.get $l1424 - i32.add - local.set $l1425 - local.get $l1424 - local.get $l1425 - i32.add - local.set $l1426 - local.get $l1425 - local.get $l1426 - i32.add - local.set $l1427 - local.get $l1426 - local.get $l1427 - i32.add - local.set $l1428 - local.get $l1427 - local.get $l1428 - i32.add - local.set $l1429 - local.get $l1428 - local.get $l1429 - i32.add - local.set $l1430 - local.get $l1429 - local.get $l1430 - i32.add - local.set $l1431 - local.get $l1430 - local.get $l1431 - i32.add - local.set $l1432 - local.get $l1431 - local.get $l1432 - i32.add - local.set $l1433 - local.get $l1432 - local.get $l1433 - i32.add - local.set $l1434 - local.get $l1433 - local.get $l1434 - i32.add - local.set $l1435 - local.get $l1434 - local.get $l1435 - i32.add - local.set $l1436 - local.get $l1435 - local.get $l1436 - i32.add - local.set $l1437 - local.get $l1436 - local.get $l1437 - i32.add - local.set $l1438 - local.get $l1437 - local.get $l1438 - i32.add - local.set $l1439 - local.get $l1438 - local.get $l1439 - i32.add - local.set $l1440 - local.get $l1439 - local.get $l1440 - i32.add - local.set $l1441 - local.get $l1440 - local.get $l1441 - i32.add - local.set $l1442 - local.get $l1441 - local.get $l1442 - i32.add - local.set $l1443 - local.get $l1442 - local.get $l1443 - i32.add - local.set $l1444 - local.get $l1443 - local.get $l1444 - i32.add - local.set $l1445 - local.get $l1444 - local.get $l1445 - i32.add - local.set $l1446 - local.get $l1445 - local.get $l1446 - i32.add - local.set $l1447 - local.get $l1446 - local.get $l1447 - i32.add - local.set $l1448 - local.get $l1447 - local.get $l1448 - i32.add - local.set $l1449 - local.get $l1448 - local.get $l1449 - i32.add - local.set $l1450 - local.get $l1449 - local.get $l1450 - i32.add - local.set $l1451 - local.get $l1450 - local.get $l1451 - i32.add - local.set $l1452 - local.get $l1451 - local.get $l1452 - i32.add - local.set $l1453 - local.get $l1452 - local.get $l1453 - i32.add - local.set $l1454 - local.get $l1453 - local.get $l1454 - i32.add - local.set $l1455 - local.get $l1454 - local.get $l1455 - i32.add - local.set $l1456 - local.get $l1455 - local.get $l1456 - i32.add - local.set $l1457 - local.get $l1456 - local.get $l1457 - i32.add - local.set $l1458 - local.get $l1457 - local.get $l1458 - i32.add - local.set $l1459 - local.get $l1458 - local.get $l1459 - i32.add - local.set $l1460 - local.get $l1459 - local.get $l1460 - i32.add - local.set $l1461 - local.get $l1460 - local.get $l1461 - i32.add - local.set $l1462 - local.get $l1461 - local.get $l1462 - i32.add - local.set $l1463 - local.get $l1462 - local.get $l1463 - i32.add - local.set $l1464 - local.get $l1463 - local.get $l1464 - i32.add - local.set $l1465 - local.get $l1464 - local.get $l1465 - i32.add - local.set $l1466 - local.get $l1465 - local.get $l1466 - i32.add - local.set $l1467 - local.get $l1466 - local.get $l1467 - i32.add - local.set $l1468 - local.get $l1467 - local.get $l1468 - i32.add - local.set $l1469 - local.get $l1468 - local.get $l1469 - i32.add - local.set $l1470 - local.get $l1469 - local.get $l1470 - i32.add - local.set $l1471 - local.get $l1470 - local.get $l1471 - i32.add - local.set $l1472 - local.get $l1471 - local.get $l1472 - i32.add - local.set $l1473 - local.get $l1472 - local.get $l1473 - i32.add - local.set $l1474 - local.get $l1473 - local.get $l1474 - i32.add - local.set $l1475 - local.get $l1474 - local.get $l1475 - i32.add - local.set $l1476 - local.get $l1475 - local.get $l1476 - i32.add - local.set $l1477 - local.get $l1476 - local.get $l1477 - i32.add - local.set $l1478 - local.get $l1477 - local.get $l1478 - i32.add - local.set $l1479 - local.get $l1478 - local.get $l1479 - i32.add - local.set $l1480 - local.get $l1479 - local.get $l1480 - i32.add - local.set $l1481 - local.get $l1480 - local.get $l1481 - i32.add - local.set $l1482 - local.get $l1481 - local.get $l1482 - i32.add - local.set $l1483 - local.get $l1482 - local.get $l1483 - i32.add - local.set $l1484 - local.get $l1483 - local.get $l1484 - i32.add - local.set $l1485 - local.get $l1484 - local.get $l1485 - i32.add - local.set $l1486 - local.get $l1485 - local.get $l1486 - i32.add - local.set $l1487 - local.get $l1486 - local.get $l1487 - i32.add - local.set $l1488 - local.get $l1487 - local.get $l1488 - i32.add - local.set $l1489 - local.get $l1488 - local.get $l1489 - i32.add - local.set $l1490 - local.get $l1489 - local.get $l1490 - i32.add - local.set $l1491 - local.get $l1490 - local.get $l1491 - i32.add - local.set $l1492 - local.get $l1491 - local.get $l1492 - i32.add - local.set $l1493 - local.get $l1492 - local.get $l1493 - i32.add - local.set $l1494 - local.get $l1493 - local.get $l1494 - i32.add - local.set $l1495 - local.get $l1494 - local.get $l1495 - i32.add - local.set $l1496 - local.get $l1495 - local.get $l1496 - i32.add - local.set $l1497 - local.get $l1496 - local.get $l1497 - i32.add - local.set $l1498 - local.get $l1497 - local.get $l1498 - i32.add - local.set $l1499 - local.get $l1498 - local.get $l1499 - i32.add - local.set $l1500 - local.get $l1499 - local.get $l1500 - i32.add - local.set $l1501 - local.get $l1500 - local.get $l1501 - i32.add - local.set $l1502 - local.get $l1501 - local.get $l1502 - i32.add - local.set $l1503 - local.get $l1502 - local.get $l1503 - i32.add - local.set $l1504 - local.get $l1503 - local.get $l1504 - i32.add - local.set $l1505 - local.get $l1504 - local.get $l1505 - i32.add - local.set $l1506 - local.get $l1505 - local.get $l1506 - i32.add - local.set $l1507 - local.get $l1506 - local.get $l1507 - i32.add - local.set $l1508 - local.get $l1507 - local.get $l1508 - i32.add - local.set $l1509 - local.get $l1508 - local.get $l1509 - i32.add - local.set $l1510 - local.get $l1509 - local.get $l1510 - i32.add - local.set $l1511 - local.get $l1510 - local.get $l1511 - i32.add - local.set $l1512 - local.get $l1511 - local.get $l1512 - i32.add - local.set $l1513 - local.get $l1512 - local.get $l1513 - i32.add - local.set $l1514 - local.get $l1513 - local.get $l1514 - i32.add - local.set $l1515 - local.get $l1514 - local.get $l1515 - i32.add - local.set $l1516 - local.get $l1515 - local.get $l1516 - i32.add - local.set $l1517 - local.get $l1516 - local.get $l1517 - i32.add - local.set $l1518 - local.get $l1517 - local.get $l1518 - i32.add - local.set $l1519 - local.get $l1518 - local.get $l1519 - i32.add - local.set $l1520 - local.get $l1519 - local.get $l1520 - i32.add - local.set $l1521 - local.get $l1520 - local.get $l1521 - i32.add - local.set $l1522 - local.get $l1521 - local.get $l1522 - i32.add - local.set $l1523 - local.get $l1522 - local.get $l1523 - i32.add - local.set $l1524 - local.get $l1523 - local.get $l1524 - i32.add - local.set $l1525 - local.get $l1524 - local.get $l1525 - i32.add - local.set $l1526 - local.get $l1525 - local.get $l1526 - i32.add - local.set $l1527 - local.get $l1526 - local.get $l1527 - i32.add - local.set $l1528 - local.get $l1527 - local.get $l1528 - i32.add - local.set $l1529 - local.get $l1528 - local.get $l1529 - i32.add - local.set $l1530 - local.get $l1529 - local.get $l1530 - i32.add - local.set $l1531 - local.get $l1530 - local.get $l1531 - i32.add - local.set $l1532 - local.get $l1531 - local.get $l1532 - i32.add - local.set $l1533 - local.get $l1532 - local.get $l1533 - i32.add - local.set $l1534 - local.get $l1533 - local.get $l1534 - i32.add - local.set $l1535 - local.get $l1534 - local.get $l1535 - i32.add - local.set $l1536 - local.get $l1535 - local.get $l1536 - i32.add - local.set $l1537 - local.get $l1536 - local.get $l1537 - i32.add - local.set $l1538 - local.get $l1537 - local.get $l1538 - i32.add - local.set $l1539 - local.get $l1538 - local.get $l1539 - i32.add - local.set $l1540 - local.get $l1539 - local.get $l1540 - i32.add - local.set $l1541 - local.get $l1540 - local.get $l1541 - i32.add - local.set $l1542 - local.get $l1541 - local.get $l1542 - i32.add - local.set $l1543 - local.get $l1542 - local.get $l1543 - i32.add - local.set $l1544 - local.get $l1543 - local.get $l1544 - i32.add - local.set $l1545 - local.get $l1544 - local.get $l1545 - i32.add - local.set $l1546 - local.get $l1545 - local.get $l1546 - i32.add - local.set $l1547 - local.get $l1546 - local.get $l1547 - i32.add - local.set $l1548 - local.get $l1547 - local.get $l1548 - i32.add - local.set $l1549 - local.get $l1548 - local.get $l1549 - i32.add - local.set $l1550 - local.get $l1549 - local.get $l1550 - i32.add - local.set $l1551 - local.get $l1550 - local.get $l1551 - i32.add - local.set $l1552 - local.get $l1551 - local.get $l1552 - i32.add - local.set $l1553 - local.get $l1552 - local.get $l1553 - i32.add - local.set $l1554 - local.get $l1553 - local.get $l1554 - i32.add - local.set $l1555 - local.get $l1554 - local.get $l1555 - i32.add - local.set $l1556 - local.get $l1555 - local.get $l1556 - i32.add - local.set $l1557 - local.get $l1556 - local.get $l1557 - i32.add - local.set $l1558 - local.get $l1557 - local.get $l1558 - i32.add - local.set $l1559 - local.get $l1558 - local.get $l1559 - i32.add - local.set $l1560 - local.get $l1559 - local.get $l1560 - i32.add - local.set $l1561 - local.get $l1560 - local.get $l1561 - i32.add - local.set $l1562 - local.get $l1561 - local.get $l1562 - i32.add - local.set $l1563 - local.get $l1562 - local.get $l1563 - i32.add - local.set $l1564 - local.get $l1563 - local.get $l1564 - i32.add - local.set $l1565 - local.get $l1564 - local.get $l1565 - i32.add - local.set $l1566 - local.get $l1565 - local.get $l1566 - i32.add - local.set $l1567 - local.get $l1566 - local.get $l1567 - i32.add - local.set $l1568 - local.get $l1567 - local.get $l1568 - i32.add - local.set $l1569 - local.get $l1568 - local.get $l1569 - i32.add - local.set $l1570 - local.get $l1569 - local.get $l1570 - i32.add - local.set $l1571 - local.get $l1570 - local.get $l1571 - i32.add - local.set $l1572 - local.get $l1571 - local.get $l1572 - i32.add - local.set $l1573 - local.get $l1572 - local.get $l1573 - i32.add - local.set $l1574 - local.get $l1573 - local.get $l1574 - i32.add - local.set $l1575 - local.get $l1574 - local.get $l1575 - i32.add - local.set $l1576 - local.get $l1575 - local.get $l1576 - i32.add - local.set $l1577 - local.get $l1576 - local.get $l1577 - i32.add - local.set $l1578 - local.get $l1577 - local.get $l1578 - i32.add - local.set $l1579 - local.get $l1578 - local.get $l1579 - i32.add - local.set $l1580 - local.get $l1579 - local.get $l1580 - i32.add - local.set $l1581 - local.get $l1580 - local.get $l1581 - i32.add - local.set $l1582 - local.get $l1581 - local.get $l1582 - i32.add - local.set $l1583 - local.get $l1582 - local.get $l1583 - i32.add - local.set $l1584 - local.get $l1583 - local.get $l1584 - i32.add - local.set $l1585 - local.get $l1584 - local.get $l1585 - i32.add - local.set $l1586 - local.get $l1585 - local.get $l1586 - i32.add - local.set $l1587 - local.get $l1586 - local.get $l1587 - i32.add - local.set $l1588 - local.get $l1587 - local.get $l1588 - i32.add - local.set $l1589 - local.get $l1588 - local.get $l1589 - i32.add - local.set $l1590 - local.get $l1589 - local.get $l1590 - i32.add - local.set $l1591 - local.get $l1590 - local.get $l1591 - i32.add - local.set $l1592 - local.get $l1591 - local.get $l1592 - i32.add - local.set $l1593 - local.get $l1592 - local.get $l1593 - i32.add - local.set $l1594 - local.get $l1593 - local.get $l1594 - i32.add - local.set $l1595 - local.get $l1594 - local.get $l1595 - i32.add - local.set $l1596 - local.get $l1595 - local.get $l1596 - i32.add - local.set $l1597 - local.get $l1596 - local.get $l1597 - i32.add - local.set $l1598 - local.get $l1597 - local.get $l1598 - i32.add - local.set $l1599 - local.get $l1598 - local.get $l1599 - i32.add - local.set $l1600 - local.get $l1599 - local.get $l1600 - i32.add - local.set $l1601 - local.get $l1600 - local.get $l1601 - i32.add - local.set $l1602 - local.get $l1601 - local.get $l1602 - i32.add - local.set $l1603 - local.get $l1602 - local.get $l1603 - i32.add - local.set $l1604 - local.get $l1603 - local.get $l1604 - i32.add - local.set $l1605 - local.get $l1604 - local.get $l1605 - i32.add - local.set $l1606 - local.get $l1605 - local.get $l1606 - i32.add - local.set $l1607 - local.get $l1606 - local.get $l1607 - i32.add - local.set $l1608 - local.get $l1607 - local.get $l1608 - i32.add - local.set $l1609 - local.get $l1608 - local.get $l1609 - i32.add - local.set $l1610 - local.get $l1609 - local.get $l1610 - i32.add - local.set $l1611 - local.get $l1610 - local.get $l1611 - i32.add - local.set $l1612 - local.get $l1611 - local.get $l1612 - i32.add - local.set $l1613 - local.get $l1612 - local.get $l1613 - i32.add - local.set $l1614 - local.get $l1613 - local.get $l1614 - i32.add - local.set $l1615 - local.get $l1614 - local.get $l1615 - i32.add - local.set $l1616 - local.get $l1615 - local.get $l1616 - i32.add - local.set $l1617 - local.get $l1616 - local.get $l1617 - i32.add - local.set $l1618 - local.get $l1617 - local.get $l1618 - i32.add - local.set $l1619 - local.get $l1618 - local.get $l1619 - i32.add - local.set $l1620 - local.get $l1619 - local.get $l1620 - i32.add - local.set $l1621 - local.get $l1620 - local.get $l1621 - i32.add - local.set $l1622 - local.get $l1621 - local.get $l1622 - i32.add - local.set $l1623 - local.get $l1622 - local.get $l1623 - i32.add - local.set $l1624 - local.get $l1623 - local.get $l1624 - i32.add - local.set $l1625 - local.get $l1624 - local.get $l1625 - i32.add - local.set $l1626 - local.get $l1625 - local.get $l1626 - i32.add - local.set $l1627 - local.get $l1626 - local.get $l1627 - i32.add - local.set $l1628 - local.get $l1627 - local.get $l1628 - i32.add - local.set $l1629 - local.get $l1628 - local.get $l1629 - i32.add - local.set $l1630 - local.get $l1629 - local.get $l1630 - i32.add - local.set $l1631 - local.get $l1630 - local.get $l1631 - i32.add - local.set $l1632 - local.get $l1631 - local.get $l1632 - i32.add - local.set $l1633 - local.get $l1632 - local.get $l1633 - i32.add - local.set $l1634 - local.get $l1633 - local.get $l1634 - i32.add - local.set $l1635 - local.get $l1634 - local.get $l1635 - i32.add - local.set $l1636 - local.get $l1635 - local.get $l1636 - i32.add - local.set $l1637 - local.get $l1636 - local.get $l1637 - i32.add - local.set $l1638 - local.get $l1637 - local.get $l1638 - i32.add - local.set $l1639 - local.get $l1638 - local.get $l1639 - i32.add - local.set $l1640 - local.get $l1639 - local.get $l1640 - i32.add - local.set $l1641 - local.get $l1640 - local.get $l1641 - i32.add - local.set $l1642 - local.get $l1641 - local.get $l1642 - i32.add - local.set $l1643 - local.get $l1642 - local.get $l1643 - i32.add - local.set $l1644 - local.get $l1643 - local.get $l1644 - i32.add - local.set $l1645 - local.get $l1644 - local.get $l1645 - i32.add - local.set $l1646 - local.get $l1645 - local.get $l1646 - i32.add - local.set $l1647 - local.get $l1646 - local.get $l1647 - i32.add - local.set $l1648 - local.get $l1647 - local.get $l1648 - i32.add - local.set $l1649 - local.get $l1648 - local.get $l1649 - i32.add - local.set $l1650 - local.get $l1649 - local.get $l1650 - i32.add - local.set $l1651 - local.get $l1650 - local.get $l1651 - i32.add - local.set $l1652 - local.get $l1651 - local.get $l1652 - i32.add - local.set $l1653 - local.get $l1652 - local.get $l1653 - i32.add - local.set $l1654 - local.get $l1653 - local.get $l1654 - i32.add - local.set $l1655 - local.get $l1654 - local.get $l1655 - i32.add - local.set $l1656 - local.get $l1655 - local.get $l1656 - i32.add - local.set $l1657 - local.get $l1656 - local.get $l1657 - i32.add - local.set $l1658 - local.get $l1657 - local.get $l1658 - i32.add - local.set $l1659 - local.get $l1658 - local.get $l1659 - i32.add - local.set $l1660 - local.get $l1659 - local.get $l1660 - i32.add - local.set $l1661 - local.get $l1660 - local.get $l1661 - i32.add - local.set $l1662 - local.get $l1661 - local.get $l1662 - i32.add - local.set $l1663 - local.get $l1662 - local.get $l1663 - i32.add - local.set $l1664 - local.get $l1663 - local.get $l1664 - i32.add - local.set $l1665 - local.get $l1664 - local.get $l1665 - i32.add - local.set $l1666 - local.get $l1665 - local.get $l1666 - i32.add - local.set $l1667 - local.get $l1666 - local.get $l1667 - i32.add - local.set $l1668 - local.get $l1667 - local.get $l1668 - i32.add - local.set $l1669 - local.get $l1668 - local.get $l1669 - i32.add - local.set $l1670 - local.get $l1669 - local.get $l1670 - i32.add - local.set $l1671 - local.get $l1670 - local.get $l1671 - i32.add - local.set $l1672 - local.get $l1671 - local.get $l1672 - i32.add - local.set $l1673 - local.get $l1672 - local.get $l1673 - i32.add - local.set $l1674 - local.get $l1673 - local.get $l1674 - i32.add - local.set $l1675 - local.get $l1674 - local.get $l1675 - i32.add - local.set $l1676 - local.get $l1675 - local.get $l1676 - i32.add - local.set $l1677 - local.get $l1676 - local.get $l1677 - i32.add - local.set $l1678 - local.get $l1677 - local.get $l1678 - i32.add - local.set $l1679 - local.get $l1678 - local.get $l1679 - i32.add - local.set $l1680 - local.get $l1679 - local.get $l1680 - i32.add - local.set $l1681 - local.get $l1680 - local.get $l1681 - i32.add - local.set $l1682 - local.get $l1681 - local.get $l1682 - i32.add - local.set $l1683 - local.get $l1682 - local.get $l1683 - i32.add - local.set $l1684 - local.get $l1683 - local.get $l1684 - i32.add - local.set $l1685 - local.get $l1684 - local.get $l1685 - i32.add - local.set $l1686 - local.get $l1685 - local.get $l1686 - i32.add - local.set $l1687 - local.get $l1686 - local.get $l1687 - i32.add - local.set $l1688 - local.get $l1687 - local.get $l1688 - i32.add - local.set $l1689 - local.get $l1688 - local.get $l1689 - i32.add - local.set $l1690 - local.get $l1689 - local.get $l1690 - i32.add - local.set $l1691 - local.get $l1690 - local.get $l1691 - i32.add - local.set $l1692 - local.get $l1691 - local.get $l1692 - i32.add - local.set $l1693 - local.get $l1692 - local.get $l1693 - i32.add - local.set $l1694 - local.get $l1693 - local.get $l1694 - i32.add - local.set $l1695 - local.get $l1694 - local.get $l1695 - i32.add - local.set $l1696 - local.get $l1695 - local.get $l1696 - i32.add - local.set $l1697 - local.get $l1696 - local.get $l1697 - i32.add - local.set $l1698 - local.get $l1697 - local.get $l1698 - i32.add - local.set $l1699 - local.get $l1698 - local.get $l1699 - i32.add - local.set $l1700 - local.get $l1699 - local.get $l1700 - i32.add - local.set $l1701 - local.get $l1700 - local.get $l1701 - i32.add - local.set $l1702 - local.get $l1701 - local.get $l1702 - i32.add - local.set $l1703 - local.get $l1702 - local.get $l1703 - i32.add - local.set $l1704 - local.get $l1703 - local.get $l1704 - i32.add - local.set $l1705 - local.get $l1704 - local.get $l1705 - i32.add - local.set $l1706 - local.get $l1705 - local.get $l1706 - i32.add - local.set $l1707 - local.get $l1706 - local.get $l1707 - i32.add - local.set $l1708 - local.get $l1707 - local.get $l1708 - i32.add - local.set $l1709 - local.get $l1708 - local.get $l1709 - i32.add - local.set $l1710 - local.get $l1709 - local.get $l1710 - i32.add - local.set $l1711 - local.get $l1710 - local.get $l1711 - i32.add - local.set $l1712 - local.get $l1711 - local.get $l1712 - i32.add - local.set $l1713 - local.get $l1712 - local.get $l1713 - i32.add - local.set $l1714 - local.get $l1713 - local.get $l1714 - i32.add - local.set $l1715 - local.get $l1714 - local.get $l1715 - i32.add - local.set $l1716 - local.get $l1715 - local.get $l1716 - i32.add - local.set $l1717 - local.get $l1716 - local.get $l1717 - i32.add - local.set $l1718 - local.get $l1717 - local.get $l1718 - i32.add - local.set $l1719 - local.get $l1718 - local.get $l1719 - i32.add - local.set $l1720 - local.get $l1719 - local.get $l1720 - i32.add - local.set $l1721 - local.get $l1720 - local.get $l1721 - i32.add - local.set $l1722 - local.get $l1721 - local.get $l1722 - i32.add - local.set $l1723 - local.get $l1722 - local.get $l1723 - i32.add - local.set $l1724 - local.get $l1723 - local.get $l1724 - i32.add - local.set $l1725 - local.get $l1724 - local.get $l1725 - i32.add - local.set $l1726 - local.get $l1725 - local.get $l1726 - i32.add - local.set $l1727 - local.get $l1726 - local.get $l1727 - i32.add - local.set $l1728 - local.get $l1727 - local.get $l1728 - i32.add - local.set $l1729 - local.get $l1728 - local.get $l1729 - i32.add - local.set $l1730 - local.get $l1729 - local.get $l1730 - i32.add - local.set $l1731 - local.get $l1730 - local.get $l1731 - i32.add - local.set $l1732 - local.get $l1731 - local.get $l1732 - i32.add - local.set $l1733 - local.get $l1732 - local.get $l1733 - i32.add - local.set $l1734 - local.get $l1733 - local.get $l1734 - i32.add - local.set $l1735 - local.get $l1734 - local.get $l1735 - i32.add - local.set $l1736 - local.get $l1735 - local.get $l1736 - i32.add - local.set $l1737 - local.get $l1736 - local.get $l1737 - i32.add - local.set $l1738 - local.get $l1737 - local.get $l1738 - i32.add - local.set $l1739 - local.get $l1738 - local.get $l1739 - i32.add - local.set $l1740 - local.get $l1739 - local.get $l1740 - i32.add - local.set $l1741 - local.get $l1740 - local.get $l1741 - i32.add - local.set $l1742 - local.get $l1741 - local.get $l1742 - i32.add - local.set $l1743 - local.get $l1742 - local.get $l1743 - i32.add - local.set $l1744 - local.get $l1743 - local.get $l1744 - i32.add - local.set $l1745 - local.get $l1744 - local.get $l1745 - i32.add - local.set $l1746 - local.get $l1745 - local.get $l1746 - i32.add - local.set $l1747 - local.get $l1746 - local.get $l1747 - i32.add - local.set $l1748 - local.get $l1747 - local.get $l1748 - i32.add - local.set $l1749 - local.get $l1748 - local.get $l1749 - i32.add - local.set $l1750 - local.get $l1749 - local.get $l1750 - i32.add - local.set $l1751 - local.get $l1750 - local.get $l1751 - i32.add - local.set $l1752 - local.get $l1751 - local.get $l1752 - i32.add - local.set $l1753 - local.get $l1752 - local.get $l1753 - i32.add - local.set $l1754 - local.get $l1753 - local.get $l1754 - i32.add - local.set $l1755 - local.get $l1754 - local.get $l1755 - i32.add - local.set $l1756 - local.get $l1755 - local.get $l1756 - i32.add - local.set $l1757 - local.get $l1756 - local.get $l1757 - i32.add - local.set $l1758 - local.get $l1757 - local.get $l1758 - i32.add - local.set $l1759 - local.get $l1758 - local.get $l1759 - i32.add - local.set $l1760 - local.get $l1759 - local.get $l1760 - i32.add - local.set $l1761 - local.get $l1760 - local.get $l1761 - i32.add - local.set $l1762 - local.get $l1761 - local.get $l1762 - i32.add - local.set $l1763 - local.get $l1762 - local.get $l1763 - i32.add - local.set $l1764 - local.get $l1763 - local.get $l1764 - i32.add - local.set $l1765 - local.get $l1764 - local.get $l1765 - i32.add - local.set $l1766 - local.get $l1765 - local.get $l1766 - i32.add - local.set $l1767 - local.get $l1766 - local.get $l1767 - i32.add - local.set $l1768 - local.get $l1767 - local.get $l1768 - i32.add - local.set $l1769 - local.get $l1768 - local.get $l1769 - i32.add - local.set $l1770 - local.get $l1769 - local.get $l1770 - i32.add - local.set $l1771 - local.get $l1770 - local.get $l1771 - i32.add - local.set $l1772 - local.get $l1771 - local.get $l1772 - i32.add - local.set $l1773 - local.get $l1772 - local.get $l1773 - i32.add - local.set $l1774 - local.get $l1773 - local.get $l1774 - i32.add - local.set $l1775 - local.get $l1774 - local.get $l1775 - i32.add - local.set $l1776 - local.get $l1775 - local.get $l1776 - i32.add - local.set $l1777 - local.get $l1776 - local.get $l1777 - i32.add - local.set $l1778 - local.get $l1777 - local.get $l1778 - i32.add - local.set $l1779 - local.get $l1778 - local.get $l1779 - i32.add - local.set $l1780 - local.get $l1779 - local.get $l1780 - i32.add - local.set $l1781 - local.get $l1780 - local.get $l1781 - i32.add - local.set $l1782 - local.get $l1781 - local.get $l1782 - i32.add - local.set $l1783 - local.get $l1782 - local.get $l1783 - i32.add - local.set $l1784 - local.get $l1783 - local.get $l1784 - i32.add - local.set $l1785 - local.get $l1784 - local.get $l1785 - i32.add - local.set $l1786 - local.get $l1785 - local.get $l1786 - i32.add - local.set $l1787 - local.get $l1786 - local.get $l1787 - i32.add - local.set $l1788 - local.get $l1787 - local.get $l1788 - i32.add - local.set $l1789 - local.get $l1788 - local.get $l1789 - i32.add - local.set $l1790 - local.get $l1789 - local.get $l1790 - i32.add - local.set $l1791 - local.get $l1790 - local.get $l1791 - i32.add - local.set $l1792 - local.get $l1791 - local.get $l1792 - i32.add - local.set $l1793 - local.get $l1792 - local.get $l1793 - i32.add - local.set $l1794 - local.get $l1793 - local.get $l1794 - i32.add - local.set $l1795 - local.get $l1794 - local.get $l1795 - i32.add - local.set $l1796 - local.get $l1795 - local.get $l1796 - i32.add - local.set $l1797 - local.get $l1796 - local.get $l1797 - i32.add - local.set $l1798 - local.get $l1797 - local.get $l1798 - i32.add - local.set $l1799 - local.get $l1798 - local.get $l1799 - i32.add - local.set $l1800 - local.get $l1799 - local.get $l1800 - i32.add - local.set $l1801 - local.get $l1800 - local.get $l1801 - i32.add - local.set $l1802 - local.get $l1801 - local.get $l1802 - i32.add - local.set $l1803 - local.get $l1802 - local.get $l1803 - i32.add - local.set $l1804 - local.get $l1803 - local.get $l1804 - i32.add - local.set $l1805 - local.get $l1804 - local.get $l1805 - i32.add - local.set $l1806 - local.get $l1805 - local.get $l1806 - i32.add - local.set $l1807 - local.get $l1806 - local.get $l1807 - i32.add - local.set $l1808 - local.get $l1807 - local.get $l1808 - i32.add - local.set $l1809 - local.get $l1808 - local.get $l1809 - i32.add - local.set $l1810 - local.get $l1809 - local.get $l1810 - i32.add - local.set $l1811 - local.get $l1810 - local.get $l1811 - i32.add - local.set $l1812 - local.get $l1811 - local.get $l1812 - i32.add - local.set $l1813 - local.get $l1812 - local.get $l1813 - i32.add - local.set $l1814 - local.get $l1813 - local.get $l1814 - i32.add - local.set $l1815 - local.get $l1814 - local.get $l1815 - i32.add - local.set $l1816 - local.get $l1815 - local.get $l1816 - i32.add - local.set $l1817 - local.get $l1816 - local.get $l1817 - i32.add - local.set $l1818 - local.get $l1817 - local.get $l1818 - i32.add - local.set $l1819 - local.get $l1818 - local.get $l1819 - i32.add - local.set $l1820 - local.get $l1819 - local.get $l1820 - i32.add - local.set $l1821 - local.get $l1820 - local.get $l1821 - i32.add - local.set $l1822 - local.get $l1821 - local.get $l1822 - i32.add - local.set $l1823 - local.get $l1822 - local.get $l1823 - i32.add - local.set $l1824 - local.get $l1823 - local.get $l1824 - i32.add - local.set $l1825 - local.get $l1824 - local.get $l1825 - i32.add - local.set $l1826 - local.get $l1825 - local.get $l1826 - i32.add - local.set $l1827 - local.get $l1826 - local.get $l1827 - i32.add - local.set $l1828 - local.get $l1827 - local.get $l1828 - i32.add - local.set $l1829 - local.get $l1828 - local.get $l1829 - i32.add - local.set $l1830 - local.get $l1829 - local.get $l1830 - i32.add - local.set $l1831 - local.get $l1830 - local.get $l1831 - i32.add - local.set $l1832 - local.get $l1831 - local.get $l1832 - i32.add - local.set $l1833 - local.get $l1832 - local.get $l1833 - i32.add - local.set $l1834 - local.get $l1833 - local.get $l1834 - i32.add - local.set $l1835 - local.get $l1834 - local.get $l1835 - i32.add - local.set $l1836 - local.get $l1835 - local.get $l1836 - i32.add - local.set $l1837 - local.get $l1836 - local.get $l1837 - i32.add - local.set $l1838 - local.get $l1837 - local.get $l1838 - i32.add - local.set $l1839 - local.get $l1838 - local.get $l1839 - i32.add - local.set $l1840 - local.get $l1839 - local.get $l1840 - i32.add - local.set $l1841 - local.get $l1840 - local.get $l1841 - i32.add - local.set $l1842 - local.get $l1841 - local.get $l1842 - i32.add - local.set $l1843 - local.get $l1842 - local.get $l1843 - i32.add - local.set $l1844 - local.get $l1843 - local.get $l1844 - i32.add - local.set $l1845 - local.get $l1844 - local.get $l1845 - i32.add - local.set $l1846 - local.get $l1845 - local.get $l1846 - i32.add - local.set $l1847 - local.get $l1846 - local.get $l1847 - i32.add - local.set $l1848 - local.get $l1847 - local.get $l1848 - i32.add - local.set $l1849 - local.get $l1848 - local.get $l1849 - i32.add - local.set $l1850 - local.get $l1849 - local.get $l1850 - i32.add - local.set $l1851 - local.get $l1850 - local.get $l1851 - i32.add - local.set $l1852 - local.get $l1851 - local.get $l1852 - i32.add - local.set $l1853 - local.get $l1852 - local.get $l1853 - i32.add - local.set $l1854 - local.get $l1853 - local.get $l1854 - i32.add - local.set $l1855 - local.get $l1854 - local.get $l1855 - i32.add - local.set $l1856 - local.get $l1855 - local.get $l1856 - i32.add - local.set $l1857 - local.get $l1856 - local.get $l1857 - i32.add - local.set $l1858 - local.get $l1857 - local.get $l1858 - i32.add - local.set $l1859 - local.get $l1858 - local.get $l1859 - i32.add - local.set $l1860 - local.get $l1859 - local.get $l1860 - i32.add - local.set $l1861 - local.get $l1860 - local.get $l1861 - i32.add - local.set $l1862 - local.get $l1861 - local.get $l1862 - i32.add - local.set $l1863 - local.get $l1862 - local.get $l1863 - i32.add - local.set $l1864 - local.get $l1863 - local.get $l1864 - i32.add - local.set $l1865 - local.get $l1864 - local.get $l1865 - i32.add - local.set $l1866 - local.get $l1865 - local.get $l1866 - i32.add - local.set $l1867 - local.get $l1866 - local.get $l1867 - i32.add - local.set $l1868 - local.get $l1867 - local.get $l1868 - i32.add - local.set $l1869 - local.get $l1868 - local.get $l1869 - i32.add - local.set $l1870 - local.get $l1869 - local.get $l1870 - i32.add - local.set $l1871 - local.get $l1870 - local.get $l1871 - i32.add - local.set $l1872 - local.get $l1871 - local.get $l1872 - i32.add - local.set $l1873 - local.get $l1872 - local.get $l1873 - i32.add - local.set $l1874 - local.get $l1873 - local.get $l1874 - i32.add - local.set $l1875 - local.get $l1874 - local.get $l1875 - i32.add - local.set $l1876 - local.get $l1875 - local.get $l1876 - i32.add - local.set $l1877 - local.get $l1876 - local.get $l1877 - i32.add - local.set $l1878 - local.get $l1877 - local.get $l1878 - i32.add - local.set $l1879 - local.get $l1878 - local.get $l1879 - i32.add - local.set $l1880 - local.get $l1879 - local.get $l1880 - i32.add - local.set $l1881 - local.get $l1880 - local.get $l1881 - i32.add - local.set $l1882 - local.get $l1881 - local.get $l1882 - i32.add - local.set $l1883 - local.get $l1882 - local.get $l1883 - i32.add - local.set $l1884 - local.get $l1883 - local.get $l1884 - i32.add - local.set $l1885 - local.get $l1884 - local.get $l1885 - i32.add - local.set $l1886 - local.get $l1885 - local.get $l1886 - i32.add - local.set $l1887 - local.get $l1886 - local.get $l1887 - i32.add - local.set $l1888 - local.get $l1887 - local.get $l1888 - i32.add - local.set $l1889 - local.get $l1888 - local.get $l1889 - i32.add - local.set $l1890 - local.get $l1889 - local.get $l1890 - i32.add - local.set $l1891 - local.get $l1890 - local.get $l1891 - i32.add - local.set $l1892 - local.get $l1891 - local.get $l1892 - i32.add - local.set $l1893 - local.get $l1892 - local.get $l1893 - i32.add - local.set $l1894 - local.get $l1893 - local.get $l1894 - i32.add - local.set $l1895 - local.get $l1894 - local.get $l1895 - i32.add - local.set $l1896 - local.get $l1895 - local.get $l1896 - i32.add - local.set $l1897 - local.get $l1896 - local.get $l1897 - i32.add - local.set $l1898 - local.get $l1897 - local.get $l1898 - i32.add - local.set $l1899 - local.get $l1898 - local.get $l1899 - i32.add - local.set $l1900 - local.get $l1899 - local.get $l1900 - i32.add - local.set $l1901 - local.get $l1900 - local.get $l1901 - i32.add - local.set $l1902 - local.get $l1901 - local.get $l1902 - i32.add - local.set $l1903 - local.get $l1902 - local.get $l1903 - i32.add - local.set $l1904 - local.get $l1903 - local.get $l1904 - i32.add - local.set $l1905 - local.get $l1904 - local.get $l1905 - i32.add - local.set $l1906 - local.get $l1905 - local.get $l1906 - i32.add - local.set $l1907 - local.get $l1906 - local.get $l1907 - i32.add - local.set $l1908 - local.get $l1907 - local.get $l1908 - i32.add - local.set $l1909 - local.get $l1908 - local.get $l1909 - i32.add - local.set $l1910 - local.get $l1909 - local.get $l1910 - i32.add - local.set $l1911 - local.get $l1910 - local.get $l1911 - i32.add - local.set $l1912 - local.get $l1911 - local.get $l1912 - i32.add - local.set $l1913 - local.get $l1912 - local.get $l1913 - i32.add - local.set $l1914 - local.get $l1913 - local.get $l1914 - i32.add - local.set $l1915 - local.get $l1914 - local.get $l1915 - i32.add - local.set $l1916 - local.get $l1915 - local.get $l1916 - i32.add - local.set $l1917 - local.get $l1916 - local.get $l1917 - i32.add - local.set $l1918 - local.get $l1917 - local.get $l1918 - i32.add - local.set $l1919 - local.get $l1918 - local.get $l1919 - i32.add - local.set $l1920 - local.get $l1919 - local.get $l1920 - i32.add - local.set $l1921 - local.get $l1920 - local.get $l1921 - i32.add - local.set $l1922 - local.get $l1921 - local.get $l1922 - i32.add - local.set $l1923 - local.get $l1922 - local.get $l1923 - i32.add - local.set $l1924 - local.get $l1923 - local.get $l1924 - i32.add - local.set $l1925 - local.get $l1924 - local.get $l1925 - i32.add - local.set $l1926 - local.get $l1925 - local.get $l1926 - i32.add - local.set $l1927 - local.get $l1926 - local.get $l1927 - i32.add - local.set $l1928 - local.get $l1927 - local.get $l1928 - i32.add - local.set $l1929 - local.get $l1928 - local.get $l1929 - i32.add - local.set $l1930 - local.get $l1929 - local.get $l1930 - i32.add - local.set $l1931 - local.get $l1930 - local.get $l1931 - i32.add - local.set $l1932 - local.get $l1931 - local.get $l1932 - i32.add - local.set $l1933 - local.get $l1932 - local.get $l1933 - i32.add - local.set $l1934 - local.get $l1933 - local.get $l1934 - i32.add - local.set $l1935 - local.get $l1934 - local.get $l1935 - i32.add - local.set $l1936 - local.get $l1935 - local.get $l1936 - i32.add - local.set $l1937 - local.get $l1936 - local.get $l1937 - i32.add - local.set $l1938 - local.get $l1937 - local.get $l1938 - i32.add - local.set $l1939 - local.get $l1938 - local.get $l1939 - i32.add - local.set $l1940 - local.get $l1939 - local.get $l1940 - i32.add - local.set $l1941 - local.get $l1940 - local.get $l1941 - i32.add - local.set $l1942 - local.get $l1941 - local.get $l1942 - i32.add - local.set $l1943 - local.get $l1942 - local.get $l1943 - i32.add - local.set $l1944 - local.get $l1943 - local.get $l1944 - i32.add - local.set $l1945 - local.get $l1944 - local.get $l1945 - i32.add - local.set $l1946 - local.get $l1945 - local.get $l1946 - i32.add - local.set $l1947 - local.get $l1946 - local.get $l1947 - i32.add - local.set $l1948 - local.get $l1947 - local.get $l1948 - i32.add - local.set $l1949 - local.get $l1948 - local.get $l1949 - i32.add - local.set $l1950 - local.get $l1949 - local.get $l1950 - i32.add - local.set $l1951 - local.get $l1950 - local.get $l1951 - i32.add - local.set $l1952 - local.get $l1951 - local.get $l1952 - i32.add - local.set $l1953 - local.get $l1952 - local.get $l1953 - i32.add - local.set $l1954 - local.get $l1953 - local.get $l1954 - i32.add - local.set $l1955 - local.get $l1954 - local.get $l1955 - i32.add - local.set $l1956 - local.get $l1955 - local.get $l1956 - i32.add - local.set $l1957 - local.get $l1956 - local.get $l1957 - i32.add - local.set $l1958 - local.get $l1957 - local.get $l1958 - i32.add - local.set $l1959 - local.get $l1958 - local.get $l1959 - i32.add - local.set $l1960 - local.get $l1959 - local.get $l1960 - i32.add - local.set $l1961 - local.get $l1960 - local.get $l1961 - i32.add - local.set $l1962 - local.get $l1961 - local.get $l1962 - i32.add - local.set $l1963 - local.get $l1962 - local.get $l1963 - i32.add - local.set $l1964 - local.get $l1963 - local.get $l1964 - i32.add - local.set $l1965 - local.get $l1964 - local.get $l1965 - i32.add - local.set $l1966 - local.get $l1965 - local.get $l1966 - i32.add - local.set $l1967 - local.get $l1966 - local.get $l1967 - i32.add - local.set $l1968 - local.get $l1967 - local.get $l1968 - i32.add - local.set $l1969 - local.get $l1968 - local.get $l1969 - i32.add - local.set $l1970 - local.get $l1969 - local.get $l1970 - i32.add - local.set $l1971 - local.get $l1970 - local.get $l1971 - i32.add - local.set $l1972 - local.get $l1971 - local.get $l1972 - i32.add - local.set $l1973 - local.get $l1972 - local.get $l1973 - i32.add - local.set $l1974 - local.get $l1973 - local.get $l1974 - i32.add - local.set $l1975 - local.get $l1974 - local.get $l1975 - i32.add - local.set $l1976 - local.get $l1975 - local.get $l1976 - i32.add - local.set $l1977 - local.get $l1976 - local.get $l1977 - i32.add - local.set $l1978 - local.get $l1977 - local.get $l1978 - i32.add - local.set $l1979 - local.get $l1978 - local.get $l1979 - i32.add - local.set $l1980 - local.get $l1979 - local.get $l1980 - i32.add - local.set $l1981 - local.get $l1980 - local.get $l1981 - i32.add - local.set $l1982 - local.get $l1981 - local.get $l1982 - i32.add - local.set $l1983 - local.get $l1982 - local.get $l1983 - i32.add - local.set $l1984 - local.get $l1983 - local.get $l1984 - i32.add - local.set $l1985 - local.get $l1984 - local.get $l1985 - i32.add - local.set $l1986 - local.get $l1985 - local.get $l1986 - i32.add - local.set $l1987 - local.get $l1986 - local.get $l1987 - i32.add - local.set $l1988 - local.get $l1987 - local.get $l1988 - i32.add - local.set $l1989 - local.get $l1988 - local.get $l1989 - i32.add - local.set $l1990 - local.get $l1989 - local.get $l1990 - i32.add - local.set $l1991 - local.get $l1990 - local.get $l1991 - i32.add - local.set $l1992 - local.get $l1991 - local.get $l1992 - i32.add - local.set $l1993 - local.get $l1992 - local.get $l1993 - i32.add - local.set $l1994 - local.get $l1993 - local.get $l1994 - i32.add - local.set $l1995 - local.get $l1994 - local.get $l1995 - i32.add - local.set $l1996 - local.get $l1995 - local.get $l1996 - i32.add - local.set $l1997 - local.get $l1996 - local.get $l1997 - i32.add - local.set $l1998 - local.get $l1997 - local.get $l1998 - i32.add - local.set $l1999 - local.get $l1998 - local.get $l1999 - i32.add - local.set $l2000 - local.get $l1999 - local.get $l2000 - i32.add - local.set $l2001 - local.get $l2000 - local.get $l2001 - i32.add - local.set $l2002 - local.get $l2001 - local.get $l2002 - i32.add - local.set $l2003 - local.get $l2002 - local.get $l2003 - i32.add - local.set $l2004 - local.get $l2003 - local.get $l2004 - i32.add - local.set $l2005 - local.get $l2004 - local.get $l2005 - i32.add - local.set $l2006 - local.get $l2005 - local.get $l2006 - i32.add - local.set $l2007 - local.get $l2006 - local.get $l2007 - i32.add - local.set $l2008 - local.get $l2007 - local.get $l2008 - i32.add - local.set $l2009 - local.get $l2008 - local.get $l2009 - i32.add - local.set $l2010 - local.get $l2009 - local.get $l2010 - i32.add - local.set $l2011 - local.get $l2010 - local.get $l2011 - i32.add - local.set $l2012 - local.get $l2011 - local.get $l2012 - i32.add - local.set $l2013 - local.get $l2012 - local.get $l2013 - i32.add - local.set $l2014 - local.get $l2013 - local.get $l2014 - i32.add - local.set $l2015 - local.get $l2014 - local.get $l2015 - i32.add - local.set $l2016 - local.get $l2015 - local.get $l2016 - i32.add - local.set $l2017 - local.get $l2016 - local.get $l2017 - i32.add - local.set $l2018 - local.get $l2017 - local.get $l2018 - i32.add - local.set $l2019 - local.get $l2018 - local.get $l2019 - i32.add - local.set $l2020 - local.get $l2019 - local.get $l2020 - i32.add - local.set $l2021 - local.get $l2020 - local.get $l2021 - i32.add - local.set $l2022 - local.get $l2021 - local.get $l2022 - i32.add - local.set $l2023 - local.get $l2022 - local.get $l2023 - i32.add - local.set $l2024 - local.get $l2023 - local.get $l2024 - i32.add - local.set $l2025 - local.get $l2024 - local.get $l2025 - i32.add - local.set $l2026 - local.get $l2025 - local.get $l2026 - i32.add - local.set $l2027 - local.get $l2026 - local.get $l2027 - i32.add - local.set $l2028 - local.get $l2027 - local.get $l2028 - i32.add - local.set $l2029 - local.get $l2028 - local.get $l2029 - i32.add - local.set $l2030 - local.get $l2029 - local.get $l2030 - i32.add - local.set $l2031 - local.get $l2030 - local.get $l2031 - i32.add - local.set $l2032 - local.get $l2031 - local.get $l2032 - i32.add - local.set $l2033 - local.get $l2032 - local.get $l2033 - i32.add - local.set $l2034 - local.get $l2033 - local.get $l2034 - i32.add - local.set $l2035 - local.get $l2034 - local.get $l2035 - i32.add - local.set $l2036 - local.get $l2035 - local.get $l2036 - i32.add - local.set $l2037 - local.get $l2036 - local.get $l2037 - i32.add - local.set $l2038 - local.get $l2037 - local.get $l2038 - i32.add - local.set $l2039 - local.get $l2038 - local.get $l2039 - i32.add - local.set $l2040 - local.get $l2039 - local.get $l2040 - i32.add - local.set $l2041 - local.get $l2040 - local.get $l2041 - i32.add - local.set $l2042 - local.get $l2041 - local.get $l2042 - i32.add - local.set $l2043 - local.get $l2042 - local.get $l2043 - i32.add - local.set $l2044 - local.get $l2043 - local.get $l2044 - i32.add - local.set $l2045 - local.get $l2044 - local.get $l2045 - i32.add - local.set $l2046 - local.get $l2045 - local.get $l2046 - i32.add - local.set $l2047 - local.get $l2046 - local.get $l2047 - i32.add - local.set $l2048 - local.get $l2047 - local.get $l2048 - i32.add - local.set $l2049 - local.get $l2048 - local.get $l2049 - i32.add - local.set $l2050 - local.get $l2049 - local.get $l2050 - i32.add - local.set $l2051 - local.get $l2050 - local.get $l2051 - i32.add - local.set $l2052 - local.get $l2051 - local.get $l2052 - i32.add - local.set $l2053 - local.get $l2052 - local.get $l2053 - i32.add - local.set $l2054 - local.get $l2053 - local.get $l2054 - i32.add - local.set $l2055 - local.get $l2054 - local.get $l2055 - i32.add - local.set $l2056 - local.get $l2055 - local.get $l2056 - i32.add - local.set $l2057 - local.get $l2056 - local.get $l2057 - i32.add - local.set $l2058 - local.get $l2057 - local.get $l2058 - i32.add - local.set $l2059 - local.get $l2058 - local.get $l2059 - i32.add - local.set $l2060 - local.get $l2059 - local.get $l2060 - i32.add - local.set $l2061 - local.get $l2060 - local.get $l2061 - i32.add - local.set $l2062 - local.get $l2061 - local.get $l2062 - i32.add - local.set $l2063 - local.get $l2062 - local.get $l2063 - i32.add - local.set $l2064 - local.get $l2063 - local.get $l2064 - i32.add - local.set $l2065 - local.get $l2064 - local.get $l2065 - i32.add - local.set $l2066 - local.get $l2065 - local.get $l2066 - i32.add - local.set $l2067 - local.get $l2066 - local.get $l2067 - i32.add - local.set $l2068 - local.get $l2067 - local.get $l2068 - i32.add - local.set $l2069 - local.get $l2068 - local.get $l2069 - i32.add - local.set $l2070 - local.get $l2069 - local.get $l2070 - i32.add - local.set $l2071 - local.get $l2070 - local.get $l2071 - i32.add - local.set $l2072 - local.get $l2071 - local.get $l2072 - i32.add - local.set $l2073 - local.get $l2072 - local.get $l2073 - i32.add - local.set $l2074 - local.get $l2073 - local.get $l2074 - i32.add - local.set $l2075 - local.get $l2074 - local.get $l2075 - i32.add - local.set $l2076 - local.get $l2075 - local.get $l2076 - i32.add - local.set $l2077 - local.get $l2076 - local.get $l2077 - i32.add - local.set $l2078 - local.get $l2077 - local.get $l2078 - i32.add - local.set $l2079 - local.get $l2078 - local.get $l2079 - i32.add - local.set $l2080 - local.get $l2079 - local.get $l2080 - i32.add - local.set $l2081 - local.get $l2080 - local.get $l2081 - i32.add - local.set $l2082 - local.get $l2081 - local.get $l2082 - i32.add - local.set $l2083 - local.get $l2082 - local.get $l2083 - i32.add - local.set $l2084 - local.get $l2083 - local.get $l2084 - i32.add - local.set $l2085 - local.get $l2084 - local.get $l2085 - i32.add - local.set $l2086 - local.get $l2085 - local.get $l2086 - i32.add - local.set $l2087 - local.get $l2086 - local.get $l2087 - i32.add - local.set $l2088 - local.get $l2087 - local.get $l2088 - i32.add - local.set $l2089 - local.get $l2088 - local.get $l2089 - i32.add - local.set $l2090 - local.get $l2089 - local.get $l2090 - i32.add - local.set $l2091 - local.get $l2090 - local.get $l2091 - i32.add - local.set $l2092 - local.get $l2091 - local.get $l2092 - i32.add - local.set $l2093 - local.get $l2092 - local.get $l2093 - i32.add - local.set $l2094 - local.get $l2093 - local.get $l2094 - i32.add - local.set $l2095 - local.get $l2094 - local.get $l2095 - i32.add - local.set $l2096 - local.get $l2095 - local.get $l2096 - i32.add - local.set $l2097 - local.get $l2096 - local.get $l2097 - i32.add - local.set $l2098 - local.get $l2097 - local.get $l2098 - i32.add - local.set $l2099 - local.get $l2098 - local.get $l2099 - i32.add - local.set $l2100 - local.get $l2099 - local.get $l2100 - i32.add - local.set $l2101 - local.get $l2100 - local.get $l2101 - i32.add - local.set $l2102 - local.get $l2101 - local.get $l2102 - i32.add - local.set $l2103 - local.get $l2102 - local.get $l2103 - i32.add - local.set $l2104 - local.get $l2103 - local.get $l2104 - i32.add - local.set $l2105 - local.get $l2104 - local.get $l2105 - i32.add - local.set $l2106 - local.get $l2105 - local.get $l2106 - i32.add - local.set $l2107 - local.get $l2106 - local.get $l2107 - i32.add - local.set $l2108 - local.get $l2107 - local.get $l2108 - i32.add - local.set $l2109 - local.get $l2108 - local.get $l2109 - i32.add - local.set $l2110 - local.get $l2109 - local.get $l2110 - i32.add - local.set $l2111 - local.get $l2110 - local.get $l2111 - i32.add - local.set $l2112 - local.get $l2111 - local.get $l2112 - i32.add - local.set $l2113 - local.get $l2112 - local.get $l2113 - i32.add - local.set $l2114 - local.get $l2113 - local.get $l2114 - i32.add - local.set $l2115 - local.get $l2114 - local.get $l2115 - i32.add - local.set $l2116 - local.get $l2115 - local.get $l2116 - i32.add - local.set $l2117 - local.get $l2116 - local.get $l2117 - i32.add - local.set $l2118 - local.get $l2117 - local.get $l2118 - i32.add - local.set $l2119 - local.get $l2118 - local.get $l2119 - i32.add - local.set $l2120 - local.get $l2119 - local.get $l2120 - i32.add - local.set $l2121 - local.get $l2120 - local.get $l2121 - i32.add - local.set $l2122 - local.get $l2121 - local.get $l2122 - i32.add - local.set $l2123 - local.get $l2122 - local.get $l2123 - i32.add - local.set $l2124 - local.get $l2123 - local.get $l2124 - i32.add - local.set $l2125 - local.get $l2124 - local.get $l2125 - i32.add - local.set $l2126 - local.get $l2125 - local.get $l2126 - i32.add - local.set $l2127 - local.get $l2126 - local.get $l2127 - i32.add - local.set $l2128 - local.get $l2127 - local.get $l2128 - i32.add - local.set $l2129 - local.get $l2128 - local.get $l2129 - i32.add - local.set $l2130 - local.get $l2129 - local.get $l2130 - i32.add - local.set $l2131 - local.get $l2130 - local.get $l2131 - i32.add - local.set $l2132 - local.get $l2131 - local.get $l2132 - i32.add - local.set $l2133 - local.get $l2132 - local.get $l2133 - i32.add - local.set $l2134 - local.get $l2133 - local.get $l2134 - i32.add - local.set $l2135 - local.get $l2134 - local.get $l2135 - i32.add - local.set $l2136 - local.get $l2135 - local.get $l2136 - i32.add - local.set $l2137 - local.get $l2136 - local.get $l2137 - i32.add - local.set $l2138 - local.get $l2137 - local.get $l2138 - i32.add - local.set $l2139 - local.get $l2138 - local.get $l2139 - i32.add - local.set $l2140 - local.get $l2139 - local.get $l2140 - i32.add - local.set $l2141 - local.get $l2140 - local.get $l2141 - i32.add - local.set $l2142 - local.get $l2141 - local.get $l2142 - i32.add - local.set $l2143 - local.get $l2142 - local.get $l2143 - i32.add - local.set $l2144 - local.get $l2143 - local.get $l2144 - i32.add - local.set $l2145 - local.get $l2144 - local.get $l2145 - i32.add - local.set $l2146 - local.get $l2145 - local.get $l2146 - i32.add - local.set $l2147 - local.get $l2146 - local.get $l2147 - i32.add - local.set $l2148 - local.get $l2147 - local.get $l2148 - i32.add - local.set $l2149 - local.get $l2148 - local.get $l2149 - i32.add - local.set $l2150 - local.get $l2149 - local.get $l2150 - i32.add - local.set $l2151 - local.get $l2150 - local.get $l2151 - i32.add - local.set $l2152 - local.get $l2151 - local.get $l2152 - i32.add - local.set $l2153 - local.get $l2152 - local.get $l2153 - i32.add - local.set $l2154 - local.get $l2153 - local.get $l2154 - i32.add - local.set $l2155 - local.get $l2154 - local.get $l2155 - i32.add - local.set $l2156 - local.get $l2155 - local.get $l2156 - i32.add - local.set $l2157 - local.get $l2156 - local.get $l2157 - i32.add - local.set $l2158 - local.get $l2157 - local.get $l2158 - i32.add - local.set $l2159 - local.get $l2158 - local.get $l2159 - i32.add - local.set $l2160 - local.get $l2159 - local.get $l2160 - i32.add - local.set $l2161 - local.get $l2160 - local.get $l2161 - i32.add - local.set $l2162 - local.get $l2161 - local.get $l2162 - i32.add - local.set $l2163 - local.get $l2162 - local.get $l2163 - i32.add - local.set $l2164 - local.get $l2163 - local.get $l2164 - i32.add - local.set $l2165 - local.get $l2164 - local.get $l2165 - i32.add - local.set $l2166 - local.get $l2165 - local.get $l2166 - i32.add - local.set $l2167 - local.get $l2166 - local.get $l2167 - i32.add - local.set $l2168 - local.get $l2167 - local.get $l2168 - i32.add - local.set $l2169 - local.get $l2168 - local.get $l2169 - i32.add - local.set $l2170 - local.get $l2169 - local.get $l2170 - i32.add - local.set $l2171 - local.get $l2170 - local.get $l2171 - i32.add - local.set $l2172 - local.get $l2171 - local.get $l2172 - i32.add - local.set $l2173 - local.get $l2172 - local.get $l2173 - i32.add - local.set $l2174 - local.get $l2173 - local.get $l2174 - i32.add - local.set $l2175 - local.get $l2174 - local.get $l2175 - i32.add - local.set $l2176 - local.get $l2175 - local.get $l2176 - i32.add - local.set $l2177 - local.get $l2176 - local.get $l2177 - i32.add - local.set $l2178 - local.get $l2177 - local.get $l2178 - i32.add - local.set $l2179 - local.get $l2178 - local.get $l2179 - i32.add - local.set $l2180 - local.get $l2179 - local.get $l2180 - i32.add - local.set $l2181 - local.get $l2180 - local.get $l2181 - i32.add - local.set $l2182 - local.get $l2181 - local.get $l2182 - i32.add - local.set $l2183 - local.get $l2182 - local.get $l2183 - i32.add - local.set $l2184 - local.get $l2183 - local.get $l2184 - i32.add - local.set $l2185 - local.get $l2184 - local.get $l2185 - i32.add - local.set $l2186 - local.get $l2185 - local.get $l2186 - i32.add - local.set $l2187 - local.get $l2186 - local.get $l2187 - i32.add - local.set $l2188 - local.get $l2187 - local.get $l2188 - i32.add - local.set $l2189 - local.get $l2188 - local.get $l2189 - i32.add - local.set $l2190 - local.get $l2189 - local.get $l2190 - i32.add - local.set $l2191 - local.get $l2190 - local.get $l2191 - i32.add - local.set $l2192 - local.get $l2191 - local.get $l2192 - i32.add - local.set $l2193 - local.get $l2192 - local.get $l2193 - i32.add - local.set $l2194 - local.get $l2193 - local.get $l2194 - i32.add - local.set $l2195 - local.get $l2194 - local.get $l2195 - i32.add - local.set $l2196 - local.get $l2195 - local.get $l2196 - i32.add - local.set $l2197 - local.get $l2196 - local.get $l2197 - i32.add - local.set $l2198 - local.get $l2197 - local.get $l2198 - i32.add - local.set $l2199 - local.get $l2198 - local.get $l2199 - i32.add - local.set $l2200 - local.get $l2199 - local.get $l2200 - i32.add - local.set $l2201 - local.get $l2200 - local.get $l2201 - i32.add - local.set $l2202 - local.get $l2201 - local.get $l2202 - i32.add - local.set $l2203 - local.get $l2202 - local.get $l2203 - i32.add - local.set $l2204 - local.get $l2203 - local.get $l2204 - i32.add - local.set $l2205 - local.get $l2204 - local.get $l2205 - i32.add - local.set $l2206 - local.get $l2205 - local.get $l2206 - i32.add - local.set $l2207 - local.get $l2206 - local.get $l2207 - i32.add - local.set $l2208 - local.get $l2207 - local.get $l2208 - i32.add - local.set $l2209 - local.get $l2208 - local.get $l2209 - i32.add - local.set $l2210 - local.get $l2209 - local.get $l2210 - i32.add - local.set $l2211 - local.get $l2210 - local.get $l2211 - i32.add - local.set $l2212 - local.get $l2211 - local.get $l2212 - i32.add - local.set $l2213 - local.get $l2212 - local.get $l2213 - i32.add - local.set $l2214 - local.get $l2213 - local.get $l2214 - i32.add - local.set $l2215 - local.get $l2214 - local.get $l2215 - i32.add - local.set $l2216 - local.get $l2215 - local.get $l2216 - i32.add - local.set $l2217 - local.get $l2216 - local.get $l2217 - i32.add - local.set $l2218 - local.get $l2217 - local.get $l2218 - i32.add - local.set $l2219 - local.get $l2218 - local.get $l2219 - i32.add - local.set $l2220 - local.get $l2219 - local.get $l2220 - i32.add - local.set $l2221 - local.get $l2220 - local.get $l2221 - i32.add - local.set $l2222 - local.get $l2221 - local.get $l2222 - i32.add - local.set $l2223 - local.get $l2222 - local.get $l2223 - i32.add - local.set $l2224 - local.get $l2223 - local.get $l2224 - i32.add - local.set $l2225 - local.get $l2224 - local.get $l2225 - i32.add - local.set $l2226 - local.get $l2225 - local.get $l2226 - i32.add - local.set $l2227 - local.get $l2226 - local.get $l2227 - i32.add - local.set $l2228 - local.get $l2227 - local.get $l2228 - i32.add - local.set $l2229 - local.get $l2228 - local.get $l2229 - i32.add - local.set $l2230 - local.get $l2229 - local.get $l2230 - i32.add - local.set $l2231 - local.get $l2230 - local.get $l2231 - i32.add - local.set $l2232 - local.get $l2231 - local.get $l2232 - i32.add - local.set $l2233 - local.get $l2232 - local.get $l2233 - i32.add - local.set $l2234 - local.get $l2233 - local.get $l2234 - i32.add - local.set $l2235 - local.get $l2234 - local.get $l2235 - i32.add - local.set $l2236 - local.get $l2235 - local.get $l2236 - i32.add - local.set $l2237 - local.get $l2236 - local.get $l2237 - i32.add - local.set $l2238 - local.get $l2237 - local.get $l2238 - i32.add - local.set $l2239 - local.get $l2238 - local.get $l2239 - i32.add - local.set $l2240 - local.get $l2239 - local.get $l2240 - i32.add - local.set $l2241 - local.get $l2240 - local.get $l2241 - i32.add - local.set $l2242 - local.get $l2241 - local.get $l2242 - i32.add - local.set $l2243 - local.get $l2242 - local.get $l2243 - i32.add - local.set $l2244 - local.get $l2243 - local.get $l2244 - i32.add - local.set $l2245 - local.get $l2244 - local.get $l2245 - i32.add - local.set $l2246 - local.get $l2245 - local.get $l2246 - i32.add - local.set $l2247 - local.get $l2246 - local.get $l2247 - i32.add - local.set $l2248 - local.get $l2247 - local.get $l2248 - i32.add - local.set $l2249 - local.get $l2248 - local.get $l2249 - i32.add - local.set $l2250 - local.get $l2249 - local.get $l2250 - i32.add - local.set $l2251 - local.get $l2250 - local.get $l2251 - i32.add - local.set $l2252 - local.get $l2251 - local.get $l2252 - i32.add - local.set $l2253 - local.get $l2252 - local.get $l2253 - i32.add - local.set $l2254 - local.get $l2253 - local.get $l2254 - i32.add - local.set $l2255 - local.get $l2254 - local.get $l2255 - i32.add - local.set $l2256 - local.get $l2255 - local.get $l2256 - i32.add - local.set $l2257 - local.get $l2256 - local.get $l2257 - i32.add - local.set $l2258 - local.get $l2257 - local.get $l2258 - i32.add - local.set $l2259 - local.get $l2258 - local.get $l2259 - i32.add - local.set $l2260 - local.get $l2259 - local.get $l2260 - i32.add - local.set $l2261 - local.get $l2260 - local.get $l2261 - i32.add - local.set $l2262 - local.get $l2261 - local.get $l2262 - i32.add - local.set $l2263 - local.get $l2262 - local.get $l2263 - i32.add - local.set $l2264 - local.get $l2263 - local.get $l2264 - i32.add - local.set $l2265 - local.get $l2264 - local.get $l2265 - i32.add - local.set $l2266 - local.get $l2265 - local.get $l2266 - i32.add - local.set $l2267 - local.get $l2266 - local.get $l2267 - i32.add - local.set $l2268 - local.get $l2267 - local.get $l2268 - i32.add - local.set $l2269 - local.get $l2268 - local.get $l2269 - i32.add - local.set $l2270 - local.get $l2269 - local.get $l2270 - i32.add - local.set $l2271 - local.get $l2270 - local.get $l2271 - i32.add - local.set $l2272 - local.get $l2271 - local.get $l2272 - i32.add - local.set $l2273 - local.get $l2272 - local.get $l2273 - i32.add - local.set $l2274 - local.get $l2273 - local.get $l2274 - i32.add - local.set $l2275 - local.get $l2274 - local.get $l2275 - i32.add - local.set $l2276 - local.get $l2275 - local.get $l2276 - i32.add - local.set $l2277 - local.get $l2276 - local.get $l2277 - i32.add - local.set $l2278 - local.get $l2277 - local.get $l2278 - i32.add - local.set $l2279 - local.get $l2278 - local.get $l2279 - i32.add - local.set $l2280 - local.get $l2279 - local.get $l2280 - i32.add - local.set $l2281 - local.get $l2280 - local.get $l2281 - i32.add - local.set $l2282 - local.get $l2281 - local.get $l2282 - i32.add - local.set $l2283 - local.get $l2282 - local.get $l2283 - i32.add - local.set $l2284 - local.get $l2283 - local.get $l2284 - i32.add - local.set $l2285 - local.get $l2284 - local.get $l2285 - i32.add - local.set $l2286 - local.get $l2285 - local.get $l2286 - i32.add - local.set $l2287 - local.get $l2286 - local.get $l2287 - i32.add - local.set $l2288 - local.get $l2287 - local.get $l2288 - i32.add - local.set $l2289 - local.get $l2288 - local.get $l2289 - i32.add - local.set $l2290 - local.get $l2289 - local.get $l2290 - i32.add - local.set $l2291 - local.get $l2290 - local.get $l2291 - i32.add - local.set $l2292 - local.get $l2291 - local.get $l2292 - i32.add - local.set $l2293 - local.get $l2292 - local.get $l2293 - i32.add - local.set $l2294 - local.get $l2293 - local.get $l2294 - i32.add - local.set $l2295 - local.get $l2294 - local.get $l2295 - i32.add - local.set $l2296 - local.get $l2295 - local.get $l2296 - i32.add - local.set $l2297 - local.get $l2296 - local.get $l2297 - i32.add - local.set $l2298 - local.get $l2297 - local.get $l2298 - i32.add - local.set $l2299 - local.get $l2298 - local.get $l2299 - i32.add - local.set $l2300 - local.get $l2299 - local.get $l2300 - i32.add - local.set $l2301 - local.get $l2300 - local.get $l2301 - i32.add - local.set $l2302 - local.get $l2301 - local.get $l2302 - i32.add - local.set $l2303 - local.get $l2302 - local.get $l2303 - i32.add - local.set $l2304 - local.get $l2303 - local.get $l2304 - i32.add - local.set $l2305 - local.get $l2304 - local.get $l2305 - i32.add - local.set $l2306 - local.get $l2305 - local.get $l2306 - i32.add - local.set $l2307 - local.get $l2306 - local.get $l2307 - i32.add - local.set $l2308 - local.get $l2307 - local.get $l2308 - i32.add - local.set $l2309 - local.get $l2308 - local.get $l2309 - i32.add - local.set $l2310 - local.get $l2309 - local.get $l2310 - i32.add - local.set $l2311 - local.get $l2310 - local.get $l2311 - i32.add - local.set $l2312 - local.get $l2311 - local.get $l2312 - i32.add - local.set $l2313 - local.get $l2312 - local.get $l2313 - i32.add - local.set $l2314 - local.get $l2313 - local.get $l2314 - i32.add - local.set $l2315 - local.get $l2314 - local.get $l2315 - i32.add - local.set $l2316 - local.get $l2315 - local.get $l2316 - i32.add - local.set $l2317 - local.get $l2316 - local.get $l2317 - i32.add - local.set $l2318 - local.get $l2317 - local.get $l2318 - i32.add - local.set $l2319 - local.get $l2318 - local.get $l2319 - i32.add - local.set $l2320 - local.get $l2319 - local.get $l2320 - i32.add - local.set $l2321 - local.get $l2320 - local.get $l2321 - i32.add - local.set $l2322 - local.get $l2321 - local.get $l2322 - i32.add - local.set $l2323 - local.get $l2322 - local.get $l2323 - i32.add - local.set $l2324 - local.get $l2323 - local.get $l2324 - i32.add - local.set $l2325 - local.get $l2324 - local.get $l2325 - i32.add - local.set $l2326 - local.get $l2325 - local.get $l2326 - i32.add - local.set $l2327 - local.get $l2326 - local.get $l2327 - i32.add - local.set $l2328 - local.get $l2327 - local.get $l2328 - i32.add - local.set $l2329 - local.get $l2328 - local.get $l2329 - i32.add - local.set $l2330 - local.get $l2329 - local.get $l2330 - i32.add - local.set $l2331 - local.get $l2330 - local.get $l2331 - i32.add - local.set $l2332 - local.get $l2331 - local.get $l2332 - i32.add - local.set $l2333 - local.get $l2332 - local.get $l2333 - i32.add - local.set $l2334 - local.get $l2333 - local.get $l2334 - i32.add - local.set $l2335 - local.get $l2334 - local.get $l2335 - i32.add - local.set $l2336 - local.get $l2335 - local.get $l2336 - i32.add - local.set $l2337 - local.get $l2336 - local.get $l2337 - i32.add - local.set $l2338 - local.get $l2337 - local.get $l2338 - i32.add - local.set $l2339 - local.get $l2338 - local.get $l2339 - i32.add - local.set $l2340 - local.get $l2339 - local.get $l2340 - i32.add - local.set $l2341 - local.get $l2340 - local.get $l2341 - i32.add - local.set $l2342 - local.get $l2341 - local.get $l2342 - i32.add - local.set $l2343 - local.get $l2342 - local.get $l2343 - i32.add - local.set $l2344 - local.get $l2343 - local.get $l2344 - i32.add - local.set $l2345 - local.get $l2344 - local.get $l2345 - i32.add - local.set $l2346 - local.get $l2345 - local.get $l2346 - i32.add - local.set $l2347 - local.get $l2346 - local.get $l2347 - i32.add - local.set $l2348 - local.get $l2347 - local.get $l2348 - i32.add - local.set $l2349 - local.get $l2348 - local.get $l2349 - i32.add - local.set $l2350 - local.get $l2349 - local.get $l2350 - i32.add - local.set $l2351 - local.get $l2350 - local.get $l2351 - i32.add - local.set $l2352 - local.get $l2351 - local.get $l2352 - i32.add - local.set $l2353 - local.get $l2352 - local.get $l2353 - i32.add - local.set $l2354 - local.get $l2353 - local.get $l2354 - i32.add - local.set $l2355 - local.get $l2354 - local.get $l2355 - i32.add - local.set $l2356 - local.get $l2355 - local.get $l2356 - i32.add - local.set $l2357 - local.get $l2356 - local.get $l2357 - i32.add - local.set $l2358 - local.get $l2357 - local.get $l2358 - i32.add - local.set $l2359 - local.get $l2358 - local.get $l2359 - i32.add - local.set $l2360 - local.get $l2359 - local.get $l2360 - i32.add - local.set $l2361 - local.get $l2360 - local.get $l2361 - i32.add - local.set $l2362 - local.get $l2361 - local.get $l2362 - i32.add - local.set $l2363 - local.get $l2362 - local.get $l2363 - i32.add - local.set $l2364 - local.get $l2363 - local.get $l2364 - i32.add - local.set $l2365 - local.get $l2364 - local.get $l2365 - i32.add - local.set $l2366 - local.get $l2365 - local.get $l2366 - i32.add - local.set $l2367 - local.get $l2366 - local.get $l2367 - i32.add - local.set $l2368 - local.get $l2367 - local.get $l2368 - i32.add - local.set $l2369 - local.get $l2368 - local.get $l2369 - i32.add - local.set $l2370 - local.get $l2369 - local.get $l2370 - i32.add - local.set $l2371 - local.get $l2370 - local.get $l2371 - i32.add - local.set $l2372 - local.get $l2371 - local.get $l2372 - i32.add - local.set $l2373 - local.get $l2372 - local.get $l2373 - i32.add - local.set $l2374 - local.get $l2373 - local.get $l2374 - i32.add - local.set $l2375 - local.get $l2374 - local.get $l2375 - i32.add - local.set $l2376 - local.get $l2375 - local.get $l2376 - i32.add - local.set $l2377 - local.get $l2376 - local.get $l2377 - i32.add - local.set $l2378 - local.get $l2377 - local.get $l2378 - i32.add - local.set $l2379 - local.get $l2378 - local.get $l2379 - i32.add - local.set $l2380 - local.get $l2379 - local.get $l2380 - i32.add - local.set $l2381 - local.get $l2380 - local.get $l2381 - i32.add - local.set $l2382 - local.get $l2381 - local.get $l2382 - i32.add - local.set $l2383 - local.get $l2382 - local.get $l2383 - i32.add - local.set $l2384 - local.get $l2383 - local.get $l2384 - i32.add - local.set $l2385 - local.get $l2384 - local.get $l2385 - i32.add - local.set $l2386 - local.get $l2385 - local.get $l2386 - i32.add - local.set $l2387 - local.get $l2386 - local.get $l2387 - i32.add - local.set $l2388 - local.get $l2387 - local.get $l2388 - i32.add - local.set $l2389 - local.get $l2388 - local.get $l2389 - i32.add - local.set $l2390 - local.get $l2389 - local.get $l2390 - i32.add - local.set $l2391 - local.get $l2390 - local.get $l2391 - i32.add - local.set $l2392 - local.get $l2391 - local.get $l2392 - i32.add - local.set $l2393 - local.get $l2392 - local.get $l2393 - i32.add - local.set $l2394 - local.get $l2393 - local.get $l2394 - i32.add - local.set $l2395 - local.get $l2394 - local.get $l2395 - i32.add - local.set $l2396 - local.get $l2395 - local.get $l2396 - i32.add - local.set $l2397 - local.get $l2396 - local.get $l2397 - i32.add - local.set $l2398 - local.get $l2397 - local.get $l2398 - i32.add - local.set $l2399 - local.get $l2398 - local.get $l2399 - i32.add - local.set $l2400 - local.get $l2399 - local.get $l2400 - i32.add - local.set $l2401 - local.get $l2400 - local.get $l2401 - i32.add - local.set $l2402 - local.get $l2401 - local.get $l2402 - i32.add - local.set $l2403 - local.get $l2402 - local.get $l2403 - i32.add - local.set $l2404 - local.get $l2403 - local.get $l2404 - i32.add - local.set $l2405 - local.get $l2404 - local.get $l2405 - i32.add - local.set $l2406 - local.get $l2405 - local.get $l2406 - i32.add - local.set $l2407 - local.get $l2406 - local.get $l2407 - i32.add - local.set $l2408 - local.get $l2407 - local.get $l2408 - i32.add - local.set $l2409 - local.get $l2408 - local.get $l2409 - i32.add - local.set $l2410 - local.get $l2409 - local.get $l2410 - i32.add - local.set $l2411 - local.get $l2410 - local.get $l2411 - i32.add - local.set $l2412 - local.get $l2411 - local.get $l2412 - i32.add - local.set $l2413 - local.get $l2412 - local.get $l2413 - i32.add - local.set $l2414 - local.get $l2413 - local.get $l2414 - i32.add - local.set $l2415 - local.get $l2414 - local.get $l2415 - i32.add - local.set $l2416 - local.get $l2415 - local.get $l2416 - i32.add - local.set $l2417 - local.get $l2416 - local.get $l2417 - i32.add - local.set $l2418 - local.get $l2417 - local.get $l2418 - i32.add - local.set $l2419 - local.get $l2418 - local.get $l2419 - i32.add - local.set $l2420 - local.get $l2419 - local.get $l2420 - i32.add - local.set $l2421 - local.get $l2420 - local.get $l2421 - i32.add - local.set $l2422 - local.get $l2421 - local.get $l2422 - i32.add - local.set $l2423 - local.get $l2422 - local.get $l2423 - i32.add - local.set $l2424 - local.get $l2423 - local.get $l2424 - i32.add - local.set $l2425 - local.get $l2424 - local.get $l2425 - i32.add - local.set $l2426 - local.get $l2425 - local.get $l2426 - i32.add - local.set $l2427 - local.get $l2426 - local.get $l2427 - i32.add - local.set $l2428 - local.get $l2427 - local.get $l2428 - i32.add - local.set $l2429 - local.get $l2428 - local.get $l2429 - i32.add - local.set $l2430 - local.get $l2429 - local.get $l2430 - i32.add - local.set $l2431 - local.get $l2430 - local.get $l2431 - i32.add - local.set $l2432 - local.get $l2431 - local.get $l2432 - i32.add - local.set $l2433 - local.get $l2432 - local.get $l2433 - i32.add - local.set $l2434 - local.get $l2433 - local.get $l2434 - i32.add - local.set $l2435 - local.get $l2434 - local.get $l2435 - i32.add - local.set $l2436 - local.get $l2435 - local.get $l2436 - i32.add - local.set $l2437 - local.get $l2436 - local.get $l2437 - i32.add - local.set $l2438 - local.get $l2437 - local.get $l2438 - i32.add - local.set $l2439 - local.get $l2438 - local.get $l2439 - i32.add - local.set $l2440 - local.get $l2439 - local.get $l2440 - i32.add - local.set $l2441 - local.get $l2440 - local.get $l2441 - i32.add - local.set $l2442 - local.get $l2441 - local.get $l2442 - i32.add - local.set $l2443 - local.get $l2442 - local.get $l2443 - i32.add - local.set $l2444 - local.get $l2443 - local.get $l2444 - i32.add - local.set $l2445 - local.get $l2444 - local.get $l2445 - i32.add - local.set $l2446 - local.get $l2445 - local.get $l2446 - i32.add - local.set $l2447 - local.get $l2446 - local.get $l2447 - i32.add - local.set $l2448 - local.get $l2447 - local.get $l2448 - i32.add - local.set $l2449 - local.get $l2448 - local.get $l2449 - i32.add - local.set $l2450 - local.get $l2449 - local.get $l2450 - i32.add - local.set $l2451 - local.get $l2450 - local.get $l2451 - i32.add - local.set $l2452 - local.get $l2451 - local.get $l2452 - i32.add - local.set $l2453 - local.get $l2452 - local.get $l2453 - i32.add - local.set $l2454 - local.get $l2453 - local.get $l2454 - i32.add - local.set $l2455 - local.get $l2454 - local.get $l2455 - i32.add - local.set $l2456 - local.get $l2455 - local.get $l2456 - i32.add - local.set $l2457 - local.get $l2456 - local.get $l2457 - i32.add - local.set $l2458 - local.get $l2457 - local.get $l2458 - i32.add - local.set $l2459 - local.get $l2458 - local.get $l2459 - i32.add - local.set $l2460 - local.get $l2459 - local.get $l2460 - i32.add - local.set $l2461 - local.get $l2460 - local.get $l2461 - i32.add - local.set $l2462 - local.get $l2461 - local.get $l2462 - i32.add - local.set $l2463 - local.get $l2462 - local.get $l2463 - i32.add - local.set $l2464 - local.get $l2463 - local.get $l2464 - i32.add - local.set $l2465 - local.get $l2464 - local.get $l2465 - i32.add - local.set $l2466 - local.get $l2465 - local.get $l2466 - i32.add - local.set $l2467 - local.get $l2466 - local.get $l2467 - i32.add - local.set $l2468 - local.get $l2467 - local.get $l2468 - i32.add - local.set $l2469 - local.get $l2468 - local.get $l2469 - i32.add - local.set $l2470 - local.get $l2469 - local.get $l2470 - i32.add - local.set $l2471 - local.get $l2470 - local.get $l2471 - i32.add - local.set $l2472 - local.get $l2471 - local.get $l2472 - i32.add - local.set $l2473 - local.get $l2472 - local.get $l2473 - i32.add - local.set $l2474 - local.get $l2473 - local.get $l2474 - i32.add - local.set $l2475 - local.get $l2474 - local.get $l2475 - i32.add - local.set $l2476 - local.get $l2475 - local.get $l2476 - i32.add - local.set $l2477 - local.get $l2476 - local.get $l2477 - i32.add - local.set $l2478 - local.get $l2477 - local.get $l2478 - i32.add - local.set $l2479 - local.get $l2478 - local.get $l2479 - i32.add - local.set $l2480 - local.get $l2479 - local.get $l2480 - i32.add - local.set $l2481 - local.get $l2480 - local.get $l2481 - i32.add - local.set $l2482 - local.get $l2481 - local.get $l2482 - i32.add - local.set $l2483 - local.get $l2482 - local.get $l2483 - i32.add - local.set $l2484 - local.get $l2483 - local.get $l2484 - i32.add - local.set $l2485 - local.get $l2484 - local.get $l2485 - i32.add - local.set $l2486 - local.get $l2485 - local.get $l2486 - i32.add - local.set $l2487 - local.get $l2486 - local.get $l2487 - i32.add - local.set $l2488 - local.get $l2487 - local.get $l2488 - i32.add - local.set $l2489 - local.get $l2488 - local.get $l2489 - i32.add - local.set $l2490 - local.get $l2489 - local.get $l2490 - i32.add - local.set $l2491 - local.get $l2490 - local.get $l2491 - i32.add - local.set $l2492 - local.get $l2491 - local.get $l2492 - i32.add - local.set $l2493 - local.get $l2492 - local.get $l2493 - i32.add - local.set $l2494 - local.get $l2493 - local.get $l2494 - i32.add - local.set $l2495 - local.get $l2494 - local.get $l2495 - i32.add - local.set $l2496 - local.get $l2495 - local.get $l2496 - i32.add - local.set $l2497 - local.get $l2496 - local.get $l2497 - i32.add - local.set $l2498 - local.get $l2497 - local.get $l2498 - i32.add - local.set $l2499 - local.get $l2498 - local.get $l2499 - i32.add - local.set $l2500 - local.get $l2499 - local.get $l2500 - i32.add - local.set $l2501 - local.get $l2500 - local.get $l2501 - i32.add - local.set $l2502 - local.get $l2501 - local.get $l2502 - i32.add - local.set $l2503 - local.get $l2502 - local.get $l2503 - i32.add - local.set $l2504 - local.get $l2503 - local.get $l2504 - i32.add - local.set $l2505 - local.get $l2504 - local.get $l2505 - i32.add - local.set $l2506 - local.get $l2505 - local.get $l2506 - i32.add - local.set $l2507 - local.get $l2506 - local.get $l2507 - i32.add - local.set $l2508 - local.get $l2507 - local.get $l2508 - i32.add - local.set $l2509 - local.get $l2508 - local.get $l2509 - i32.add - local.set $l2510 - local.get $l2509 - local.get $l2510 - i32.add - local.set $l2511 - local.get $l2510 - local.get $l2511 - i32.add - local.set $l2512 - local.get $l2511 - local.get $l2512 - i32.add - local.set $l2513 - local.get $l2512 - local.get $l2513 - i32.add - local.set $l2514 - local.get $l2513 - local.get $l2514 - i32.add - local.set $l2515 - local.get $l2514 - local.get $l2515 - i32.add - local.set $l2516 - local.get $l2515 - local.get $l2516 - i32.add - local.set $l2517 - local.get $l2516 - local.get $l2517 - i32.add - local.set $l2518 - local.get $l2517 - local.get $l2518 - i32.add - local.set $l2519 - local.get $l2518 - local.get $l2519 - i32.add - local.set $l2520 - local.get $l2519 - local.get $l2520 - i32.add - local.set $l2521 - local.get $l2520 - local.get $l2521 - i32.add - local.set $l2522 - local.get $l2521 - local.get $l2522 - i32.add - local.set $l2523 - local.get $l2522 - local.get $l2523 - i32.add - local.set $l2524 - local.get $l2523 - local.get $l2524 - i32.add - local.set $l2525 - local.get $l2524 - local.get $l2525 - i32.add - local.set $l2526 - local.get $l2525 - local.get $l2526 - i32.add - local.set $l2527 - local.get $l2526 - local.get $l2527 - i32.add - local.set $l2528 - local.get $l2527 - local.get $l2528 - i32.add - local.set $l2529 - local.get $l2528 - local.get $l2529 - i32.add - local.set $l2530 - local.get $l2529 - local.get $l2530 - i32.add - local.set $l2531 - local.get $l2530 - local.get $l2531 - i32.add - local.set $l2532 - local.get $l2531 - local.get $l2532 - i32.add - local.set $l2533 - local.get $l2532 - local.get $l2533 - i32.add - local.set $l2534 - local.get $l2533 - local.get $l2534 - i32.add - local.set $l2535 - local.get $l2534 - local.get $l2535 - i32.add - local.set $l2536 - local.get $l2535 - local.get $l2536 - i32.add - local.set $l2537 - local.get $l2536 - local.get $l2537 - i32.add - local.set $l2538 - local.get $l2537 - local.get $l2538 - i32.add - local.set $l2539 - local.get $l2538 - local.get $l2539 - i32.add - local.set $l2540 - local.get $l2539 - local.get $l2540 - i32.add - local.set $l2541 - local.get $l2540 - local.get $l2541 - i32.add - local.set $l2542 - local.get $l2541 - local.get $l2542 - i32.add - local.set $l2543 - local.get $l2542 - local.get $l2543 - i32.add - local.set $l2544 - local.get $l2543 - local.get $l2544 - i32.add - local.set $l2545 - local.get $l2544 - local.get $l2545 - i32.add - local.set $l2546 - local.get $l2545 - local.get $l2546 - i32.add - local.set $l2547 - local.get $l2546 - local.get $l2547 - i32.add - local.set $l2548 - local.get $l2547 - local.get $l2548 - i32.add - local.set $l2549 - local.get $l2548 - local.get $l2549 - i32.add - local.set $l2550 - local.get $l2549 - local.get $l2550 - i32.add - local.set $l2551 - local.get $l2550 - local.get $l2551 - i32.add - local.set $l2552 - local.get $l2551 - local.get $l2552 - i32.add - local.set $l2553 - local.get $l2552 - local.get $l2553 - i32.add - local.set $l2554 - local.get $l2553 - local.get $l2554 - i32.add - local.set $l2555 - local.get $l2554 - local.get $l2555 - i32.add - local.set $l2556 - local.get $l2555 - local.get $l2556 - i32.add - local.set $l2557 - local.get $l2556 - local.get $l2557 - i32.add - local.set $l2558 - local.get $l2557 - local.get $l2558 - i32.add - local.set $l2559 - local.get $l2558 - local.get $l2559 - i32.add - local.set $l2560 - local.get $l2559 - local.get $l2560 - i32.add - local.set $l2561 - local.get $l2560 - local.get $l2561 - i32.add - local.set $l2562 - local.get $l2561 - local.get $l2562 - i32.add - local.set $l2563 - local.get $l2562 - local.get $l2563 - i32.add - local.set $l2564 - local.get $l2563 - local.get $l2564 - i32.add - local.set $l2565 - local.get $l2564 - local.get $l2565 - i32.add - local.set $l2566 - local.get $l2565 - local.get $l2566 - i32.add - local.set $l2567 - local.get $l2566 - local.get $l2567 - i32.add - local.set $l2568 - local.get $l2567 - local.get $l2568 - i32.add - local.set $l2569 - local.get $l2568 - local.get $l2569 - i32.add - local.set $l2570 - local.get $l2569 - local.get $l2570 - i32.add - local.set $l2571 - local.get $l2570 - local.get $l2571 - i32.add - local.set $l2572 - local.get $l2571 - local.get $l2572 - i32.add - local.set $l2573 - local.get $l2572 - local.get $l2573 - i32.add - local.set $l2574 - local.get $l2573 - local.get $l2574 - i32.add - local.set $l2575 - local.get $l2574 - local.get $l2575 - i32.add - local.set $l2576 - local.get $l2575 - local.get $l2576 - i32.add - local.set $l2577 - local.get $l2576 - local.get $l2577 - i32.add - local.set $l2578 - local.get $l2577 - local.get $l2578 - i32.add - local.set $l2579 - local.get $l2578 - local.get $l2579 - i32.add - local.set $l2580 - local.get $l2579 - local.get $l2580 - i32.add - local.set $l2581 - local.get $l2580 - local.get $l2581 - i32.add - local.set $l2582 - local.get $l2581 - local.get $l2582 - i32.add - local.set $l2583 - local.get $l2582 - local.get $l2583 - i32.add - local.set $l2584 - local.get $l2583 - local.get $l2584 - i32.add - local.set $l2585 - local.get $l2584 - local.get $l2585 - i32.add - local.set $l2586 - local.get $l2585 - local.get $l2586 - i32.add - local.set $l2587 - local.get $l2586 - local.get $l2587 - i32.add - local.set $l2588 - local.get $l2587 - local.get $l2588 - i32.add - local.set $l2589 - local.get $l2588 - local.get $l2589 - i32.add - local.set $l2590 - local.get $l2589 - local.get $l2590 - i32.add - local.set $l2591 - local.get $l2590 - local.get $l2591 - i32.add - local.set $l2592 - local.get $l2591 - local.get $l2592 - i32.add - local.set $l2593 - local.get $l2592 - local.get $l2593 - i32.add - local.set $l2594 - local.get $l2593 - local.get $l2594 - i32.add - local.set $l2595 - local.get $l2594 - local.get $l2595 - i32.add - local.set $l2596 - local.get $l2595 - local.get $l2596 - i32.add - local.set $l2597 - local.get $l2596 - local.get $l2597 - i32.add - local.set $l2598 - local.get $l2597 - local.get $l2598 - i32.add - local.set $l2599 - local.get $l2598 - local.get $l2599 - i32.add - local.set $l2600 - local.get $l2599 - local.get $l2600 - i32.add - local.set $l2601 - local.get $l2600 - local.get $l2601 - i32.add - local.set $l2602 - local.get $l2601 - local.get $l2602 - i32.add - local.set $l2603 - local.get $l2602 - local.get $l2603 - i32.add - local.set $l2604 - local.get $l2603 - local.get $l2604 - i32.add - local.set $l2605 - local.get $l2604 - local.get $l2605 - i32.add - local.set $l2606 - local.get $l2605 - local.get $l2606 - i32.add - local.set $l2607 - local.get $l2606 - local.get $l2607 - i32.add - local.set $l2608 - local.get $l2607 - local.get $l2608 - i32.add - local.set $l2609 - local.get $l2608 - local.get $l2609 - i32.add - local.set $l2610 - local.get $l2609 - local.get $l2610 - i32.add - local.set $l2611 - local.get $l2610 - local.get $l2611 - i32.add - local.set $l2612 - local.get $l2611 - local.get $l2612 - i32.add - local.set $l2613 - local.get $l2612 - local.get $l2613 - i32.add - local.set $l2614 - local.get $l2613 - local.get $l2614 - i32.add - local.set $l2615 - local.get $l2614 - local.get $l2615 - i32.add - local.set $l2616 - local.get $l2615 - local.get $l2616 - i32.add - local.set $l2617 - local.get $l2616 - local.get $l2617 - i32.add - local.set $l2618 - local.get $l2617 - local.get $l2618 - i32.add - local.set $l2619 - local.get $l2618 - local.get $l2619 - i32.add - local.set $l2620 - local.get $l2619 - local.get $l2620 - i32.add - local.set $l2621 - local.get $l2620 - local.get $l2621 - i32.add - local.set $l2622 - local.get $l2621 - local.get $l2622 - i32.add - local.set $l2623 - local.get $l2622 - local.get $l2623 - i32.add - local.set $l2624 - local.get $l2623 - local.get $l2624 - i32.add - local.set $l2625 - local.get $l2624 - local.get $l2625 - i32.add - local.set $l2626 - local.get $l2625 - local.get $l2626 - i32.add - local.set $l2627 - local.get $l2626 - local.get $l2627 - i32.add - local.set $l2628 - local.get $l2627 - local.get $l2628 - i32.add - local.set $l2629 - local.get $l2628 - local.get $l2629 - i32.add - local.set $l2630 - local.get $l2629 - local.get $l2630 - i32.add - local.set $l2631 - local.get $l2630 - local.get $l2631 - i32.add - local.set $l2632 - local.get $l2631 - local.get $l2632 - i32.add - local.set $l2633 - local.get $l2632 - local.get $l2633 - i32.add - local.set $l2634 - local.get $l2633 - local.get $l2634 - i32.add - local.set $l2635 - local.get $l2634 - local.get $l2635 - i32.add - local.set $l2636 - local.get $l2635 - local.get $l2636 - i32.add - local.set $l2637 - local.get $l2636 - local.get $l2637 - i32.add - local.set $l2638 - local.get $l2637 - local.get $l2638 - i32.add - local.set $l2639 - local.get $l2638 - local.get $l2639 - i32.add - local.set $l2640 - local.get $l2639 - local.get $l2640 - i32.add - local.set $l2641 - local.get $l2640 - local.get $l2641 - i32.add - local.set $l2642 - local.get $l2641 - local.get $l2642 - i32.add - local.set $l2643 - local.get $l2642 - local.get $l2643 - i32.add - local.set $l2644 - local.get $l2643 - local.get $l2644 - i32.add - local.set $l2645 - local.get $l2644 - local.get $l2645 - i32.add - local.set $l2646 - local.get $l2645 - local.get $l2646 - i32.add - local.set $l2647 - local.get $l2646 - local.get $l2647 - i32.add - local.set $l2648 - local.get $l2647 - local.get $l2648 - i32.add - local.set $l2649 - local.get $l2648 - local.get $l2649 - i32.add - local.set $l2650 - local.get $l2649 - local.get $l2650 - i32.add - local.set $l2651 - local.get $l2650 - local.get $l2651 - i32.add - local.set $l2652 - local.get $l2651 - local.get $l2652 - i32.add - local.set $l2653 - local.get $l2652 - local.get $l2653 - i32.add - local.set $l2654 - local.get $l2653 - local.get $l2654 - i32.add - local.set $l2655 - local.get $l2654 - local.get $l2655 - i32.add - local.set $l2656 - local.get $l2655 - local.get $l2656 - i32.add - local.set $l2657 - local.get $l2656 - local.get $l2657 - i32.add - local.set $l2658 - local.get $l2657 - local.get $l2658 - i32.add - local.set $l2659 - local.get $l2658 - local.get $l2659 - i32.add - local.set $l2660 - local.get $l2659 - local.get $l2660 - i32.add - local.set $l2661 - local.get $l2660 - local.get $l2661 - i32.add - local.set $l2662 - local.get $l2661 - local.get $l2662 - i32.add - local.set $l2663 - local.get $l2662 - local.get $l2663 - i32.add - local.set $l2664 - local.get $l2663 - local.get $l2664 - i32.add - local.set $l2665 - local.get $l2664 - local.get $l2665 - i32.add - local.set $l2666 - local.get $l2665 - local.get $l2666 - i32.add - local.set $l2667 - local.get $l2666 - local.get $l2667 - i32.add - local.set $l2668 - local.get $l2667 - local.get $l2668 - i32.add - local.set $l2669 - local.get $l2668 - local.get $l2669 - i32.add - local.set $l2670 - local.get $l2669 - local.get $l2670 - i32.add - local.set $l2671 - local.get $l2670 - local.get $l2671 - i32.add - local.set $l2672 - local.get $l2671 - local.get $l2672 - i32.add - local.set $l2673 - local.get $l2672 - local.get $l2673 - i32.add - local.set $l2674 - local.get $l2673 - local.get $l2674 - i32.add - local.set $l2675 - local.get $l2674 - local.get $l2675 - i32.add - local.set $l2676 - local.get $l2675 - local.get $l2676 - i32.add - local.set $l2677 - local.get $l2676 - local.get $l2677 - i32.add - local.set $l2678 - local.get $l2677 - local.get $l2678 - i32.add - local.set $l2679 - local.get $l2678 - local.get $l2679 - i32.add - local.set $l2680 - local.get $l2679 - local.get $l2680 - i32.add - local.set $l2681 - local.get $l2680 - local.get $l2681 - i32.add - local.set $l2682 - local.get $l2681 - local.get $l2682 - i32.add - local.set $l2683 - local.get $l2682 - local.get $l2683 - i32.add - local.set $l2684 - local.get $l2683 - local.get $l2684 - i32.add - local.set $l2685 - local.get $l2684 - local.get $l2685 - i32.add - local.set $l2686 - local.get $l2685 - local.get $l2686 - i32.add - local.set $l2687 - local.get $l2686 - local.get $l2687 - i32.add - local.set $l2688 - local.get $l2687 - local.get $l2688 - i32.add - local.set $l2689 - local.get $l2688 - local.get $l2689 - i32.add - local.set $l2690 - local.get $l2689 - local.get $l2690 - i32.add - local.set $l2691 - local.get $l2690 - local.get $l2691 - i32.add - local.set $l2692 - local.get $l2691 - local.get $l2692 - i32.add - local.set $l2693 - local.get $l2692 - local.get $l2693 - i32.add - local.set $l2694 - local.get $l2693 - local.get $l2694 - i32.add - local.set $l2695 - local.get $l2694 - local.get $l2695 - i32.add - local.set $l2696 - local.get $l2695 - local.get $l2696 - i32.add - local.set $l2697 - local.get $l2696 - local.get $l2697 - i32.add - local.set $l2698 - local.get $l2697 - local.get $l2698 - i32.add - local.set $l2699 - local.get $l2698 - local.get $l2699 - i32.add - local.set $l2700 - local.get $l2699 - local.get $l2700 - i32.add - local.set $l2701 - local.get $l2700 - local.get $l2701 - i32.add - local.set $l2702 - local.get $l2701 - local.get $l2702 - i32.add - local.set $l2703 - local.get $l2702 - local.get $l2703 - i32.add - local.set $l2704 - local.get $l2703 - local.get $l2704 - i32.add - local.set $l2705 - local.get $l2704 - local.get $l2705 - i32.add - local.set $l2706 - local.get $l2705 - local.get $l2706 - i32.add - local.set $l2707 - local.get $l2706 - local.get $l2707 - i32.add - local.set $l2708 - local.get $l2707 - local.get $l2708 - i32.add - local.set $l2709 - local.get $l2708 - local.get $l2709 - i32.add - local.set $l2710 - local.get $l2709 - local.get $l2710 - i32.add - local.set $l2711 - local.get $l2710 - local.get $l2711 - i32.add - local.set $l2712 - local.get $l2711 - local.get $l2712 - i32.add - local.set $l2713 - local.get $l2712 - local.get $l2713 - i32.add - local.set $l2714 - local.get $l2713 - local.get $l2714 - i32.add - local.set $l2715 - local.get $l2714 - local.get $l2715 - i32.add - local.set $l2716 - local.get $l2715 - local.get $l2716 - i32.add - local.set $l2717 - local.get $l2716 - local.get $l2717 - i32.add - local.set $l2718 - local.get $l2717 - local.get $l2718 - i32.add - local.set $l2719 - local.get $l2718 - local.get $l2719 - i32.add - local.set $l2720 - local.get $l2719 - local.get $l2720 - i32.add - local.set $l2721 - local.get $l2720 - local.get $l2721 - i32.add - local.set $l2722 - local.get $l2721 - local.get $l2722 - i32.add - local.set $l2723 - local.get $l2722 - local.get $l2723 - i32.add - local.set $l2724 - local.get $l2723 - local.get $l2724 - i32.add - local.set $l2725 - local.get $l2724 - local.get $l2725 - i32.add - local.set $l2726 - local.get $l2725 - local.get $l2726 - i32.add - local.set $l2727 - local.get $l2726 - local.get $l2727 - i32.add - local.set $l2728 - local.get $l2727 - local.get $l2728 - i32.add - local.set $l2729 - local.get $l2728 - local.get $l2729 - i32.add - local.set $l2730 - local.get $l2729 - local.get $l2730 - i32.add - local.set $l2731 - local.get $l2730 - local.get $l2731 - i32.add - local.set $l2732 - local.get $l2731 - local.get $l2732 - i32.add - local.set $l2733 - local.get $l2732 - local.get $l2733 - i32.add - local.set $l2734 - local.get $l2733 - local.get $l2734 - i32.add - local.set $l2735 - local.get $l2734 - local.get $l2735 - i32.add - local.set $l2736 - local.get $l2735 - local.get $l2736 - i32.add - local.set $l2737 - local.get $l2736 - local.get $l2737 - i32.add - local.set $l2738 - local.get $l2737 - local.get $l2738 - i32.add - local.set $l2739 - local.get $l2738 - local.get $l2739 - i32.add - local.set $l2740 - local.get $l2739 - local.get $l2740 - i32.add - local.set $l2741 - local.get $l2740 - local.get $l2741 - i32.add - local.set $l2742 - local.get $l2741 - local.get $l2742 - i32.add - local.set $l2743 - local.get $l2742 - local.get $l2743 - i32.add - local.set $l2744 - local.get $l2743 - local.get $l2744 - i32.add - local.set $l2745 - local.get $l2744 - local.get $l2745 - i32.add - local.set $l2746 - local.get $l2745 - local.get $l2746 - i32.add - local.set $l2747 - local.get $l2746 - local.get $l2747 - i32.add - local.set $l2748 - local.get $l2747 - local.get $l2748 - i32.add - local.set $l2749 - local.get $l2748 - local.get $l2749 - i32.add - local.set $l2750 - local.get $l2749 - local.get $l2750 - i32.add - local.set $l2751 - local.get $l2750 - local.get $l2751 - i32.add - local.set $l2752 - local.get $l2751 - local.get $l2752 - i32.add - local.set $l2753 - local.get $l2752 - local.get $l2753 - i32.add - local.set $l2754 - local.get $l2753 - local.get $l2754 - i32.add - local.set $l2755 - local.get $l2754 - local.get $l2755 - i32.add - local.set $l2756 - local.get $l2755 - local.get $l2756 - i32.add - local.set $l2757 - local.get $l2756 - local.get $l2757 - i32.add - local.set $l2758 - local.get $l2757 - local.get $l2758 - i32.add - local.set $l2759 - local.get $l2758 - local.get $l2759 - i32.add - local.set $l2760 - local.get $l2759 - local.get $l2760 - i32.add - local.set $l2761 - local.get $l2760 - local.get $l2761 - i32.add - local.set $l2762 - local.get $l2761 - local.get $l2762 - i32.add - local.set $l2763 - local.get $l2762 - local.get $l2763 - i32.add - local.set $l2764 - local.get $l2763 - local.get $l2764 - i32.add - local.set $l2765 - local.get $l2764 - local.get $l2765 - i32.add - local.set $l2766 - local.get $l2765 - local.get $l2766 - i32.add - local.set $l2767 - local.get $l2766 - local.get $l2767 - i32.add - local.set $l2768 - local.get $l2767 - local.get $l2768 - i32.add - local.set $l2769 - local.get $l2768 - local.get $l2769 - i32.add - local.set $l2770 - local.get $l2769 - local.get $l2770 - i32.add - local.set $l2771 - local.get $l2770 - local.get $l2771 - i32.add - local.set $l2772 - local.get $l2771 - local.get $l2772 - i32.add - local.set $l2773 - local.get $l2772 - local.get $l2773 - i32.add - local.set $l2774 - local.get $l2773 - local.get $l2774 - i32.add - local.set $l2775 - local.get $l2774 - local.get $l2775 - i32.add - local.set $l2776 - local.get $l2775 - local.get $l2776 - i32.add - local.set $l2777 - local.get $l2776 - local.get $l2777 - i32.add - local.set $l2778 - local.get $l2777 - local.get $l2778 - i32.add - local.set $l2779 - local.get $l2778 - local.get $l2779 - i32.add - local.set $l2780 - local.get $l2779 - local.get $l2780 - i32.add - local.set $l2781 - local.get $l2780 - local.get $l2781 - i32.add - local.set $l2782 - local.get $l2781 - local.get $l2782 - i32.add - local.set $l2783 - local.get $l2782 - local.get $l2783 - i32.add - local.set $l2784 - local.get $l2783 - local.get $l2784 - i32.add - local.set $l2785 - local.get $l2784 - local.get $l2785 - i32.add - local.set $l2786 - local.get $l2785 - local.get $l2786 - i32.add - local.set $l2787 - local.get $l2786 - local.get $l2787 - i32.add - local.set $l2788 - local.get $l2787 - local.get $l2788 - i32.add - local.set $l2789 - local.get $l2788 - local.get $l2789 - i32.add - local.set $l2790 - local.get $l2789 - local.get $l2790 - i32.add - local.set $l2791 - local.get $l2790 - local.get $l2791 - i32.add - local.set $l2792 - local.get $l2791 - local.get $l2792 - i32.add - local.set $l2793 - local.get $l2792 - local.get $l2793 - i32.add - local.set $l2794 - local.get $l2793 - local.get $l2794 - i32.add - local.set $l2795 - local.get $l2794 - local.get $l2795 - i32.add - local.set $l2796 - local.get $l2795 - local.get $l2796 - i32.add - local.set $l2797 - local.get $l2796 - local.get $l2797 - i32.add - local.set $l2798 - local.get $l2797 - local.get $l2798 - i32.add - local.set $l2799 - local.get $l2798 - local.get $l2799 - i32.add - local.set $l2800 - local.get $l2799 - local.get $l2800 - i32.add - local.set $l2801 - local.get $l2800 - local.get $l2801 - i32.add - local.set $l2802 - local.get $l2801 - local.get $l2802 - i32.add - local.set $l2803 - local.get $l2802 - local.get $l2803 - i32.add - local.set $l2804 - local.get $l2803 - local.get $l2804 - i32.add - local.set $l2805 - local.get $l2804 - local.get $l2805 - i32.add - local.set $l2806 - local.get $l2805 - local.get $l2806 - i32.add - local.set $l2807 - local.get $l2806 - local.get $l2807 - i32.add - local.set $l2808 - local.get $l2807 - local.get $l2808 - i32.add - local.set $l2809 - local.get $l2808 - local.get $l2809 - i32.add - local.set $l2810 - local.get $l2809 - local.get $l2810 - i32.add - local.set $l2811 - local.get $l2810 - local.get $l2811 - i32.add - local.set $l2812 - local.get $l2811 - local.get $l2812 - i32.add - local.set $l2813 - local.get $l2812 - local.get $l2813 - i32.add - local.set $l2814 - local.get $l2813 - local.get $l2814 - i32.add - local.set $l2815 - local.get $l2814 - local.get $l2815 - i32.add - local.set $l2816 - local.get $l2815 - local.get $l2816 - i32.add - local.set $l2817 - local.get $l2816 - local.get $l2817 - i32.add - local.set $l2818 - local.get $l2817 - local.get $l2818 - i32.add - local.set $l2819 - local.get $l2818 - local.get $l2819 - i32.add - local.set $l2820 - local.get $l2819 - local.get $l2820 - i32.add - local.set $l2821 - local.get $l2820 - local.get $l2821 - i32.add - local.set $l2822 - local.get $l2821 - local.get $l2822 - i32.add - local.set $l2823 - local.get $l2822 - local.get $l2823 - i32.add - local.set $l2824 - local.get $l2823 - local.get $l2824 - i32.add - local.set $l2825 - local.get $l2824 - local.get $l2825 - i32.add - local.set $l2826 - local.get $l2825 - local.get $l2826 - i32.add - local.set $l2827 - local.get $l2826 - local.get $l2827 - i32.add - local.set $l2828 - local.get $l2827 - local.get $l2828 - i32.add - local.set $l2829 - local.get $l2828 - local.get $l2829 - i32.add - local.set $l2830 - local.get $l2829 - local.get $l2830 - i32.add - local.set $l2831 - local.get $l2830 - local.get $l2831 - i32.add - local.set $l2832 - local.get $l2831 - local.get $l2832 - i32.add - local.set $l2833 - local.get $l2832 - local.get $l2833 - i32.add - local.set $l2834 - local.get $l2833 - local.get $l2834 - i32.add - local.set $l2835 - local.get $l2834 - local.get $l2835 - i32.add - local.set $l2836 - local.get $l2835 - local.get $l2836 - i32.add - local.set $l2837 - local.get $l2836 - local.get $l2837 - i32.add - local.set $l2838 - local.get $l2837 - local.get $l2838 - i32.add - local.set $l2839 - local.get $l2838 - local.get $l2839 - i32.add - local.set $l2840 - local.get $l2839 - local.get $l2840 - i32.add - local.set $l2841 - local.get $l2840 - local.get $l2841 - i32.add - local.set $l2842 - local.get $l2841 - local.get $l2842 - i32.add - local.set $l2843 - local.get $l2842 - local.get $l2843 - i32.add - local.set $l2844 - local.get $l2843 - local.get $l2844 - i32.add - local.set $l2845 - local.get $l2844 - local.get $l2845 - i32.add - local.set $l2846 - local.get $l2845 - local.get $l2846 - i32.add - local.set $l2847 - local.get $l2846 - local.get $l2847 - i32.add - local.set $l2848 - local.get $l2847 - local.get $l2848 - i32.add - local.set $l2849 - local.get $l2848 - local.get $l2849 - i32.add - local.set $l2850 - local.get $l2849 - local.get $l2850 - i32.add - local.set $l2851 - local.get $l2850 - local.get $l2851 - i32.add - local.set $l2852 - local.get $l2851 - local.get $l2852 - i32.add - local.set $l2853 - local.get $l2852 - local.get $l2853 - i32.add - local.set $l2854 - local.get $l2853 - local.get $l2854 - i32.add - local.set $l2855 - local.get $l2854 - local.get $l2855 - i32.add - local.set $l2856 - local.get $l2855 - local.get $l2856 - i32.add - local.set $l2857 - local.get $l2856 - local.get $l2857 - i32.add - local.set $l2858 - local.get $l2857 - local.get $l2858 - i32.add - local.set $l2859 - local.get $l2858 - local.get $l2859 - i32.add - local.set $l2860 - local.get $l2859 - local.get $l2860 - i32.add - local.set $l2861 - local.get $l2860 - local.get $l2861 - i32.add - local.set $l2862 - local.get $l2861 - local.get $l2862 - i32.add - local.set $l2863 - local.get $l2862 - local.get $l2863 - i32.add - local.set $l2864 - local.get $l2863 - local.get $l2864 - i32.add - local.set $l2865 - local.get $l2864 - local.get $l2865 - i32.add - local.set $l2866 - local.get $l2865 - local.get $l2866 - i32.add - local.set $l2867 - local.get $l2866 - local.get $l2867 - i32.add - local.set $l2868 - local.get $l2867 - local.get $l2868 - i32.add - local.set $l2869 - local.get $l2868 - local.get $l2869 - i32.add - local.set $l2870 - local.get $l2869 - local.get $l2870 - i32.add - local.set $l2871 - local.get $l2870 - local.get $l2871 - i32.add - local.set $l2872 - local.get $l2871 - local.get $l2872 - i32.add - local.set $l2873 - local.get $l2872 - local.get $l2873 - i32.add - local.set $l2874 - local.get $l2873 - local.get $l2874 - i32.add - local.set $l2875 - local.get $l2874 - local.get $l2875 - i32.add - local.set $l2876 - local.get $l2875 - local.get $l2876 - i32.add - local.set $l2877 - local.get $l2876 - local.get $l2877 - i32.add - local.set $l2878 - local.get $l2877 - local.get $l2878 - i32.add - local.set $l2879 - local.get $l2878 - local.get $l2879 - i32.add - local.set $l2880 - local.get $l2879 - local.get $l2880 - i32.add - local.set $l2881 - local.get $l2880 - local.get $l2881 - i32.add - local.set $l2882 - local.get $l2881 - local.get $l2882 - i32.add - local.set $l2883 - local.get $l2882 - local.get $l2883 - i32.add - local.set $l2884 - local.get $l2883 - local.get $l2884 - i32.add - local.set $l2885 - local.get $l2884 - local.get $l2885 - i32.add - local.set $l2886 - local.get $l2885 - local.get $l2886 - i32.add - local.set $l2887 - local.get $l2886 - local.get $l2887 - i32.add - local.set $l2888 - local.get $l2887 - local.get $l2888 - i32.add - local.set $l2889 - local.get $l2888 - local.get $l2889 - i32.add - local.set $l2890 - local.get $l2889 - local.get $l2890 - i32.add - local.set $l2891 - local.get $l2890 - local.get $l2891 - i32.add - local.set $l2892 - local.get $l2891 - local.get $l2892 - i32.add - local.set $l2893 - local.get $l2892 - local.get $l2893 - i32.add - local.set $l2894 - local.get $l2893 - local.get $l2894 - i32.add - local.set $l2895 - local.get $l2894 - local.get $l2895 - i32.add - local.set $l2896 - local.get $l2895 - local.get $l2896 - i32.add - local.set $l2897 - local.get $l2896 - local.get $l2897 - i32.add - local.set $l2898 - local.get $l2897 - local.get $l2898 - i32.add - local.set $l2899 - local.get $l2898 - local.get $l2899 - i32.add - local.set $l2900 - local.get $l2899 - local.get $l2900 - i32.add - local.set $l2901 - local.get $l2900 - local.get $l2901 - i32.add - local.set $l2902 - local.get $l2901 - local.get $l2902 - i32.add - local.set $l2903 - local.get $l2902 - local.get $l2903 - i32.add - local.set $l2904 - local.get $l2903 - local.get $l2904 - i32.add - local.set $l2905 - local.get $l2904 - local.get $l2905 - i32.add - local.set $l2906 - local.get $l2905 - local.get $l2906 - i32.add - local.set $l2907 - local.get $l2906 - local.get $l2907 - i32.add - local.set $l2908 - local.get $l2907 - local.get $l2908 - i32.add - local.set $l2909 - local.get $l2908 - local.get $l2909 - i32.add - local.set $l2910 - local.get $l2909 - local.get $l2910 - i32.add - local.set $l2911 - local.get $l2910 - local.get $l2911 - i32.add - local.set $l2912 - local.get $l2911 - local.get $l2912 - i32.add - local.set $l2913 - local.get $l2912 - local.get $l2913 - i32.add - local.set $l2914 - local.get $l2913 - local.get $l2914 - i32.add - local.set $l2915 - local.get $l2914 - local.get $l2915 - i32.add - local.set $l2916 - local.get $l2915 - local.get $l2916 - i32.add - local.set $l2917 - local.get $l2916 - local.get $l2917 - i32.add - local.set $l2918 - local.get $l2917 - local.get $l2918 - i32.add - local.set $l2919 - local.get $l2918 - local.get $l2919 - i32.add - local.set $l2920 - local.get $l2919 - local.get $l2920 - i32.add - local.set $l2921 - local.get $l2920 - local.get $l2921 - i32.add - local.set $l2922 - local.get $l2921 - local.get $l2922 - i32.add - local.set $l2923 - local.get $l2922 - local.get $l2923 - i32.add - local.set $l2924 - local.get $l2923 - local.get $l2924 - i32.add - local.set $l2925 - local.get $l2924 - local.get $l2925 - i32.add - local.set $l2926 - local.get $l2925 - local.get $l2926 - i32.add - local.set $l2927 - local.get $l2926 - local.get $l2927 - i32.add - local.set $l2928 - local.get $l2927 - local.get $l2928 - i32.add - local.set $l2929 - local.get $l2928 - local.get $l2929 - i32.add - local.set $l2930 - local.get $l2929 - local.get $l2930 - i32.add - local.set $l2931 - local.get $l2930 - local.get $l2931 - i32.add - local.set $l2932 - local.get $l2931 - local.get $l2932 - i32.add - local.set $l2933 - local.get $l2932 - local.get $l2933 - i32.add - local.set $l2934 - local.get $l2933 - local.get $l2934 - i32.add - local.set $l2935 - local.get $l2934 - local.get $l2935 - i32.add - local.set $l2936 - local.get $l2935 - local.get $l2936 - i32.add - local.set $l2937 - local.get $l2936 - local.get $l2937 - i32.add - local.set $l2938 - local.get $l2937 - local.get $l2938 - i32.add - local.set $l2939 - local.get $l2938 - local.get $l2939 - i32.add - local.set $l2940 - local.get $l2939 - local.get $l2940 - i32.add - local.set $l2941 - local.get $l2940 - local.get $l2941 - i32.add - local.set $l2942 - local.get $l2941 - local.get $l2942 - i32.add - local.set $l2943 - local.get $l2942 - local.get $l2943 - i32.add - local.set $l2944 - local.get $l2943 - local.get $l2944 - i32.add - local.set $l2945 - local.get $l2944 - local.get $l2945 - i32.add - local.set $l2946 - local.get $l2945 - local.get $l2946 - i32.add - local.set $l2947 - local.get $l2946 - local.get $l2947 - i32.add - local.set $l2948 - local.get $l2947 - local.get $l2948 - i32.add - local.set $l2949 - local.get $l2948 - local.get $l2949 - i32.add - local.set $l2950 - local.get $l2949 - local.get $l2950 - i32.add - local.set $l2951 - local.get $l2950 - local.get $l2951 - i32.add - local.set $l2952 - local.get $l2951 - local.get $l2952 - i32.add - local.set $l2953 - local.get $l2952 - local.get $l2953 - i32.add - local.set $l2954 - local.get $l2953 - local.get $l2954 - i32.add - local.set $l2955 - local.get $l2954 - local.get $l2955 - i32.add - local.set $l2956 - local.get $l2955 - local.get $l2956 - i32.add - local.set $l2957 - local.get $l2956 - local.get $l2957 - i32.add - local.set $l2958 - local.get $l2957 - local.get $l2958 - i32.add - local.set $l2959 - local.get $l2958 - local.get $l2959 - i32.add - local.set $l2960 - local.get $l2959 - local.get $l2960 - i32.add - local.set $l2961 - local.get $l2960 - local.get $l2961 - i32.add - local.set $l2962 - local.get $l2961 - local.get $l2962 - i32.add - local.set $l2963 - local.get $l2962 - local.get $l2963 - i32.add - local.set $l2964 - local.get $l2963 - local.get $l2964 - i32.add - local.set $l2965 - local.get $l2964 - local.get $l2965 - i32.add - local.set $l2966 - local.get $l2965 - local.get $l2966 - i32.add - local.set $l2967 - local.get $l2966 - local.get $l2967 - i32.add - local.set $l2968 - local.get $l2967 - local.get $l2968 - i32.add - local.set $l2969 - local.get $l2968 - local.get $l2969 - i32.add - local.set $l2970 - local.get $l2969 - local.get $l2970 - i32.add - local.set $l2971 - local.get $l2970 - local.get $l2971 - i32.add - local.set $l2972 - local.get $l2971 - local.get $l2972 - i32.add - local.set $l2973 - local.get $l2972 - local.get $l2973 - i32.add - local.set $l2974 - local.get $l2973 - local.get $l2974 - i32.add - local.set $l2975 - local.get $l2974 - local.get $l2975 - i32.add - local.set $l2976 - local.get $l2975 - local.get $l2976 - i32.add - local.set $l2977 - local.get $l2976 - local.get $l2977 - i32.add - local.set $l2978 - local.get $l2977 - local.get $l2978 - i32.add - local.set $l2979 - local.get $l2978 - local.get $l2979 - i32.add - local.set $l2980 - local.get $l2979 - local.get $l2980 - i32.add - local.set $l2981 - local.get $l2980 - local.get $l2981 - i32.add - local.set $l2982 - local.get $l2981 - local.get $l2982 - i32.add - local.set $l2983 - local.get $l2982 - local.get $l2983 - i32.add - local.set $l2984 - local.get $l2983 - local.get $l2984 - i32.add - local.set $l2985 - local.get $l2984 - local.get $l2985 - i32.add - local.set $l2986 - local.get $l2985 - local.get $l2986 - i32.add - local.set $l2987 - local.get $l2986 - local.get $l2987 - i32.add - local.set $l2988 - local.get $l2987 - local.get $l2988 - i32.add - local.set $l2989 - local.get $l2988 - local.get $l2989 - i32.add - local.set $l2990 - local.get $l2989 - local.get $l2990 - i32.add - local.set $l2991 - local.get $l2990 - local.get $l2991 - i32.add - local.set $l2992 - local.get $l2991 - local.get $l2992 - i32.add - local.set $l2993 - local.get $l2992 - local.get $l2993 - i32.add - local.set $l2994 - local.get $l2993 - local.get $l2994 - i32.add - local.set $l2995 - local.get $l2994 - local.get $l2995 - i32.add - local.set $l2996 - local.get $l2995 - local.get $l2996 - i32.add - local.set $l2997 - local.get $l2996 - local.get $l2997 - i32.add - local.set $l2998 - local.get $l2997 - local.get $l2998 - i32.add - local.set $l2999 - local.get $l2998 - local.get $l2999 - i32.add - local.set $l3000 - local.get $l2999 - local.get $l3000 - i32.add - local.set $l3001 - local.get $l3000 - local.get $l3001 - i32.add - local.set $l3002 - local.get $l3001 - local.get $l3002 - i32.add - local.set $l3003 - local.get $l3002 - local.get $l3003 - i32.add - local.set $l3004 - local.get $l3003 - local.get $l3004 - i32.add - local.set $l3005 - local.get $l3004 - local.get $l3005 - i32.add - local.set $l3006 - local.get $l3005 - local.get $l3006 - i32.add - local.set $l3007 - local.get $l3006 - local.get $l3007 - i32.add - local.set $l3008 - local.get $l3007 - local.get $l3008 - i32.add - local.set $l3009 - local.get $l3008 - local.get $l3009 - i32.add - local.set $l3010 - local.get $l3009 - local.get $l3010 - i32.add - local.set $l3011 - local.get $l3010 - local.get $l3011 - i32.add - local.set $l3012 - local.get $l3011 - local.get $l3012 - i32.add - local.set $l3013 - local.get $l3012 - local.get $l3013 - i32.add - local.set $l3014 - local.get $l3013 - local.get $l3014 - i32.add - local.set $l3015 - local.get $l3014 - local.get $l3015 - i32.add - local.set $l3016 - local.get $l3015 - local.get $l3016 - i32.add - local.set $l3017 - local.get $l3016 - local.get $l3017 - i32.add - local.set $l3018 - local.get $l3017 - local.get $l3018 - i32.add - local.set $l3019 - local.get $l3018 - local.get $l3019 - i32.add - local.set $l3020 - local.get $l3019 - local.get $l3020 - i32.add - local.set $l3021 - local.get $l3020 - local.get $l3021 - i32.add - local.set $l3022 - local.get $l3021 - local.get $l3022 - i32.add - local.set $l3023 - local.get $l3022 - local.get $l3023 - i32.add - local.set $l3024 - local.get $l3023 - local.get $l3024 - i32.add - local.set $l3025 - local.get $l3024 - local.get $l3025 - i32.add - local.set $l3026 - local.get $l3025 - local.get $l3026 - i32.add - local.set $l3027 - local.get $l3026 - local.get $l3027 - i32.add - local.set $l3028 - local.get $l3027 - local.get $l3028 - i32.add - local.set $l3029 - local.get $l3028 - local.get $l3029 - i32.add - local.set $l3030 - local.get $l3029 - local.get $l3030 - i32.add - local.set $l3031 - local.get $l3030 - local.get $l3031 - i32.add - local.set $l3032 - local.get $l3031 - local.get $l3032 - i32.add - local.set $l3033 - local.get $l3032 - local.get $l3033 - i32.add - local.set $l3034 - local.get $l3033 - local.get $l3034 - i32.add - local.set $l3035 - local.get $l3034 - local.get $l3035 - i32.add - local.set $l3036 - local.get $l3035 - local.get $l3036 - i32.add - local.set $l3037 - local.get $l3036 - local.get $l3037 - i32.add - local.set $l3038 - local.get $l3037 - local.get $l3038 - i32.add - local.set $l3039 - local.get $l3038 - local.get $l3039 - i32.add - local.set $l3040 - local.get $l3039 - local.get $l3040 - i32.add - local.set $l3041 - local.get $l3040 - local.get $l3041 - i32.add - local.set $l3042 - local.get $l3041 - local.get $l3042 - i32.add - local.set $l3043 - local.get $l3042 - local.get $l3043 - i32.add - local.set $l3044 - local.get $l3043 - local.get $l3044 - i32.add - local.set $l3045 - local.get $l3044 - local.get $l3045 - i32.add - local.set $l3046 - local.get $l3045 - local.get $l3046 - i32.add - local.set $l3047 - local.get $l3046 - local.get $l3047 - i32.add - local.set $l3048 - local.get $l3047 - local.get $l3048 - i32.add - local.set $l3049 - local.get $l3048 - local.get $l3049 - i32.add - local.set $l3050 - local.get $l3049 - local.get $l3050 - i32.add - local.set $l3051 - local.get $l3050 - local.get $l3051 - i32.add - local.set $l3052 - local.get $l3051 - local.get $l3052 - i32.add - local.set $l3053 - local.get $l3052 - local.get $l3053 - i32.add - local.set $l3054 - local.get $l3053 - local.get $l3054 - i32.add - local.set $l3055 - local.get $l3054 - local.get $l3055 - i32.add - local.set $l3056 - local.get $l3055 - local.get $l3056 - i32.add - local.set $l3057 - local.get $l3056 - local.get $l3057 - i32.add - local.set $l3058 - local.get $l3057 - local.get $l3058 - i32.add - local.set $l3059 - local.get $l3058 - local.get $l3059 - i32.add - local.set $l3060 - local.get $l3059 - local.get $l3060 - i32.add - local.set $l3061 - local.get $l3060 - local.get $l3061 - i32.add - local.set $l3062 - local.get $l3061 - local.get $l3062 - i32.add - local.set $l3063 - local.get $l3062 - local.get $l3063 - i32.add - local.set $l3064 - local.get $l3063 - local.get $l3064 - i32.add - local.set $l3065 - local.get $l3064 - local.get $l3065 - i32.add - local.set $l3066 - local.get $l3065 - local.get $l3066 - i32.add - local.set $l3067 - local.get $l3066 - local.get $l3067 - i32.add - local.set $l3068 - local.get $l3067 - local.get $l3068 - i32.add - local.set $l3069 - local.get $l3068 - local.get $l3069 - i32.add - local.set $l3070 - local.get $l3069 - local.get $l3070 - i32.add - local.set $l3071 - local.get $l3070 - local.get $l3071 - i32.add - local.set $l3072 - local.get $l3071 - local.get $l3072 - i32.add - local.set $l3073 - local.get $l3072 - local.get $l3073 - i32.add - local.set $l3074 - local.get $l3073 - local.get $l3074 - i32.add - local.set $l3075 - local.get $l3074 - local.get $l3075 - i32.add - local.set $l3076 - local.get $l3075 - local.get $l3076 - i32.add - local.set $l3077 - local.get $l3076 - local.get $l3077 - i32.add - local.set $l3078 - local.get $l3077 - local.get $l3078 - i32.add - local.set $l3079 - local.get $l3078 - local.get $l3079 - i32.add - local.set $l3080 - local.get $l3079 - local.get $l3080 - i32.add - local.set $l3081 - local.get $l3080 - local.get $l3081 - i32.add - local.set $l3082 - local.get $l3081 - local.get $l3082 - i32.add - local.set $l3083 - local.get $l3082 - local.get $l3083 - i32.add - local.set $l3084 - local.get $l3083 - local.get $l3084 - i32.add - local.set $l3085 - local.get $l3084 - local.get $l3085 - i32.add - local.set $l3086 - local.get $l3085 - local.get $l3086 - i32.add - local.set $l3087 - local.get $l3086 - local.get $l3087 - i32.add - local.set $l3088 - local.get $l3087 - local.get $l3088 - i32.add - local.set $l3089 - local.get $l3088 - local.get $l3089 - i32.add - local.set $l3090 - local.get $l3089 - local.get $l3090 - i32.add - local.set $l3091 - local.get $l3090 - local.get $l3091 - i32.add - local.set $l3092 - local.get $l3091 - local.get $l3092 - i32.add - local.set $l3093 - local.get $l3092 - local.get $l3093 - i32.add - local.set $l3094 - local.get $l3093 - local.get $l3094 - i32.add - local.set $l3095 - local.get $l3094 - local.get $l3095 - i32.add - local.set $l3096 - local.get $l3095 - local.get $l3096 - i32.add - local.set $l3097 - local.get $l3096 - local.get $l3097 - i32.add - local.set $l3098 - local.get $l3097 - local.get $l3098 - i32.add - local.set $l3099 - local.get $l3098 - local.get $l3099 - i32.add - local.set $l3100 - local.get $l3099 - local.get $l3100 - i32.add - local.set $l3101 - local.get $l3100 - local.get $l3101 - i32.add - local.set $l3102 - local.get $l3101 - local.get $l3102 - i32.add - local.set $l3103 - local.get $l3102 - local.get $l3103 - i32.add - local.set $l3104 - local.get $l3103 - local.get $l3104 - i32.add - local.set $l3105 - local.get $l3104 - local.get $l3105 - i32.add - local.set $l3106 - local.get $l3105 - local.get $l3106 - i32.add - local.set $l3107 - local.get $l3106 - local.get $l3107 - i32.add - local.set $l3108 - local.get $l3107 - local.get $l3108 - i32.add - local.set $l3109 - local.get $l3108 - local.get $l3109 - i32.add - local.set $l3110 - local.get $l3109 - local.get $l3110 - i32.add - local.set $l3111 - local.get $l3110 - local.get $l3111 - i32.add - local.set $l3112 - local.get $l3111 - local.get $l3112 - i32.add - local.set $l3113 - local.get $l3112 - local.get $l3113 - i32.add - local.set $l3114 - local.get $l3113 - local.get $l3114 - i32.add - local.set $l3115 - local.get $l3114 - local.get $l3115 - i32.add - local.set $l3116 - local.get $l3115 - local.get $l3116 - i32.add - local.set $l3117 - local.get $l3116 - local.get $l3117 - i32.add - local.set $l3118 - local.get $l3117 - local.get $l3118 - i32.add - local.set $l3119 - local.get $l3118 - local.get $l3119 - i32.add - local.set $l3120 - local.get $l3119 - local.get $l3120 - i32.add - local.set $l3121 - local.get $l3120 - local.get $l3121 - i32.add - local.set $l3122 - local.get $l3121 - local.get $l3122 - i32.add - local.set $l3123 - local.get $l3122 - local.get $l3123 - i32.add - local.set $l3124 - local.get $l3123 - local.get $l3124 - i32.add - local.set $l3125 - local.get $l3124 - local.get $l3125 - i32.add - local.set $l3126 - local.get $l3125 - local.get $l3126 - i32.add - local.set $l3127 - local.get $l3126 - local.get $l3127 - i32.add - local.set $l3128 - local.get $l3127 - local.get $l3128 - i32.add - local.set $l3129 - local.get $l3128 - local.get $l3129 - i32.add - local.set $l3130 - local.get $l3129 - local.get $l3130 - i32.add - local.set $l3131 - local.get $l3130 - local.get $l3131 - i32.add - local.set $l3132 - local.get $l3131 - local.get $l3132 - i32.add - local.set $l3133 - local.get $l3132 - local.get $l3133 - i32.add - local.set $l3134 - local.get $l3133 - local.get $l3134 - i32.add - local.set $l3135 - local.get $l3134 - local.get $l3135 - i32.add - local.set $l3136 - local.get $l3135 - local.get $l3136 - i32.add - local.set $l3137 - local.get $l3136 - local.get $l3137 - i32.add - local.set $l3138 - local.get $l3137 - local.get $l3138 - i32.add - local.set $l3139 - local.get $l3138 - local.get $l3139 - i32.add - local.set $l3140 - local.get $l3139 - local.get $l3140 - i32.add - local.set $l3141 - local.get $l3140 - local.get $l3141 - i32.add - local.set $l3142 - local.get $l3141 - local.get $l3142 - i32.add - local.set $l3143 - local.get $l3142 - local.get $l3143 - i32.add - local.set $l3144 - local.get $l3143 - local.get $l3144 - i32.add - local.set $l3145 - local.get $l3144 - local.get $l3145 - i32.add - local.set $l3146 - local.get $l3145 - local.get $l3146 - i32.add - local.set $l3147 - local.get $l3146 - local.get $l3147 - i32.add - local.set $l3148 - local.get $l3147 - local.get $l3148 - i32.add - local.set $l3149 - local.get $l3148 - local.get $l3149 - i32.add - local.set $l3150 - local.get $l3149 - local.get $l3150 - i32.add - local.set $l3151 - local.get $l3150 - local.get $l3151 - i32.add - local.set $l3152 - local.get $l3151 - local.get $l3152 - i32.add - local.set $l3153 - local.get $l3152 - local.get $l3153 - i32.add - local.set $l3154 - local.get $l3153 - local.get $l3154 - i32.add - local.set $l3155 - local.get $l3154 - local.get $l3155 - i32.add - local.set $l3156 - local.get $l3155 - local.get $l3156 - i32.add - local.set $l3157 - local.get $l3156 - local.get $l3157 - i32.add - local.set $l3158 - local.get $l3157 - local.get $l3158 - i32.add - local.set $l3159 - local.get $l3158 - local.get $l3159 - i32.add - local.set $l3160 - local.get $l3159 - local.get $l3160 - i32.add - local.set $l3161 - local.get $l3160 - local.get $l3161 - i32.add - local.set $l3162 - local.get $l3161 - local.get $l3162 - i32.add - local.set $l3163 - local.get $l3162 - local.get $l3163 - i32.add - local.set $l3164 - local.get $l3163 - local.get $l3164 - i32.add - local.set $l3165 - local.get $l3164 - local.get $l3165 - i32.add - local.set $l3166 - local.get $l3165 - local.get $l3166 - i32.add - local.set $l3167 - local.get $l3166 - local.get $l3167 - i32.add - local.set $l3168 - local.get $l3167 - local.get $l3168 - i32.add - local.set $l3169 - local.get $l3168 - local.get $l3169 - i32.add - local.set $l3170 - local.get $l3169 - local.get $l3170 - i32.add - local.set $l3171 - local.get $l3170 - local.get $l3171 - i32.add - local.set $l3172 - local.get $l3171 - local.get $l3172 - i32.add - local.set $l3173 - local.get $l3172 - local.get $l3173 - i32.add - local.set $l3174 - local.get $l3173 - local.get $l3174 - i32.add - local.set $l3175 - local.get $l3174 - local.get $l3175 - i32.add - local.set $l3176 - local.get $l3175 - local.get $l3176 - i32.add - local.set $l3177 - local.get $l3176 - local.get $l3177 - i32.add - local.set $l3178 - local.get $l3177 - local.get $l3178 - i32.add - local.set $l3179 - local.get $l3178 - local.get $l3179 - i32.add - local.set $l3180 - local.get $l3179 - local.get $l3180 - i32.add - local.set $l3181 - local.get $l3180 - local.get $l3181 - i32.add - local.set $l3182 - local.get $l3181 - local.get $l3182 - i32.add - local.set $l3183 - local.get $l3182 - local.get $l3183 - i32.add - local.set $l3184 - local.get $l3183 - local.get $l3184 - i32.add - local.set $l3185 - local.get $l3184 - local.get $l3185 - i32.add - local.set $l3186 - local.get $l3185 - local.get $l3186 - i32.add - local.set $l3187 - local.get $l3186 - local.get $l3187 - i32.add - local.set $l3188 - local.get $l3187 - local.get $l3188 - i32.add - local.set $l3189 - local.get $l3188 - local.get $l3189 - i32.add - local.set $l3190 - local.get $l3189 - local.get $l3190 - i32.add - local.set $l3191 - local.get $l3190 - local.get $l3191 - i32.add - local.set $l3192 - local.get $l3191 - local.get $l3192 - i32.add - local.set $l3193 - local.get $l3192 - local.get $l3193 - i32.add - local.set $l3194 - local.get $l3193 - local.get $l3194 - i32.add - local.set $l3195 - local.get $l3194 - local.get $l3195 - i32.add - local.set $l3196 - local.get $l3195 - local.get $l3196 - i32.add - local.set $l3197 - local.get $l3196 - local.get $l3197 - i32.add - local.set $l3198 - local.get $l3197 - local.get $l3198 - i32.add - local.set $l3199 - local.get $l3198 - local.get $l3199 - i32.add - local.set $l3200 - local.get $l3199 - local.get $l3200 - i32.add - local.set $l3201 - local.get $l3200 - local.get $l3201 - i32.add - local.set $l3202 - local.get $l3201 - local.get $l3202 - i32.add - local.set $l3203 - local.get $l3202 - local.get $l3203 - i32.add - local.set $l3204 - local.get $l3203 - local.get $l3204 - i32.add - local.set $l3205 - local.get $l3204 - local.get $l3205 - i32.add - local.set $l3206 - local.get $l3205 - local.get $l3206 - i32.add - local.set $l3207 - local.get $l3206 - local.get $l3207 - i32.add - local.set $l3208 - local.get $l3207 - local.get $l3208 - i32.add - local.set $l3209 - local.get $l3208 - local.get $l3209 - i32.add - local.set $l3210 - local.get $l3209 - local.get $l3210 - i32.add - local.set $l3211 - local.get $l3210 - local.get $l3211 - i32.add - local.set $l3212 - local.get $l3211 - local.get $l3212 - i32.add - local.set $l3213 - local.get $l3212 - local.get $l3213 - i32.add - local.set $l3214 - local.get $l3213 - local.get $l3214 - i32.add - local.set $l3215 - local.get $l3214 - local.get $l3215 - i32.add - local.set $l3216 - local.get $l3215 - local.get $l3216 - i32.add - local.set $l3217 - local.get $l3216 - local.get $l3217 - i32.add - local.set $l3218 - local.get $l3217 - local.get $l3218 - i32.add - local.set $l3219 - local.get $l3218 - local.get $l3219 - i32.add - local.set $l3220 - local.get $l3219 - local.get $l3220 - i32.add - local.set $l3221 - local.get $l3220 - local.get $l3221 - i32.add - local.set $l3222 - local.get $l3221 - local.get $l3222 - i32.add - local.set $l3223 - local.get $l3222 - local.get $l3223 - i32.add - local.set $l3224 - local.get $l3223 - local.get $l3224 - i32.add - local.set $l3225 - local.get $l3224 - local.get $l3225 - i32.add - local.set $l3226 - local.get $l3225 - local.get $l3226 - i32.add - local.set $l3227 - local.get $l3226 - local.get $l3227 - i32.add - local.set $l3228 - local.get $l3227 - local.get $l3228 - i32.add - local.set $l3229 - local.get $l3228 - local.get $l3229 - i32.add - local.set $l3230 - local.get $l3229 - local.get $l3230 - i32.add - local.set $l3231 - local.get $l3230 - local.get $l3231 - i32.add - local.set $l3232 - local.get $l3231 - local.get $l3232 - i32.add - local.set $l3233 - local.get $l3232 - local.get $l3233 - i32.add - local.set $l3234 - local.get $l3233 - local.get $l3234 - i32.add - local.set $l3235 - local.get $l3234 - local.get $l3235 - i32.add - local.set $l3236 - local.get $l3235 - local.get $l3236 - i32.add - local.set $l3237 - local.get $l3236 - local.get $l3237 - i32.add - local.set $l3238 - local.get $l3237 - local.get $l3238 - i32.add - local.set $l3239 - local.get $l3238 - local.get $l3239 - i32.add - local.set $l3240 - local.get $l3239 - local.get $l3240 - i32.add - local.set $l3241 - local.get $l3240 - local.get $l3241 - i32.add - local.set $l3242 - local.get $l3241 - local.get $l3242 - i32.add - local.set $l3243 - local.get $l3242 - local.get $l3243 - i32.add - local.set $l3244 - local.get $l3243 - local.get $l3244 - i32.add - local.set $l3245 - local.get $l3244 - local.get $l3245 - i32.add - local.set $l3246 - local.get $l3245 - local.get $l3246 - i32.add - local.set $l3247 - local.get $l3246 - local.get $l3247 - i32.add - local.set $l3248 - local.get $l3247 - local.get $l3248 - i32.add - local.set $l3249 - local.get $l3248 - local.get $l3249 - i32.add - local.set $l3250 - local.get $l3249 - local.get $l3250 - i32.add - local.set $l3251 - local.get $l3250 - local.get $l3251 - i32.add - local.set $l3252 - local.get $l3251 - local.get $l3252 - i32.add - local.set $l3253 - local.get $l3252 - local.get $l3253 - i32.add - local.set $l3254 - local.get $l3253 - local.get $l3254 - i32.add - local.set $l3255 - local.get $l3254 - local.get $l3255 - i32.add - local.set $l3256 - local.get $l3255 - local.get $l3256 - i32.add - local.set $l3257 - local.get $l3256 - local.get $l3257 - i32.add - local.set $l3258 - local.get $l3257 - local.get $l3258 - i32.add - local.set $l3259 - local.get $l3258 - local.get $l3259 - i32.add - local.set $l3260 - local.get $l3259 - local.get $l3260 - i32.add - local.set $l3261 - local.get $l3260 - local.get $l3261 - i32.add - local.set $l3262 - local.get $l3261 - local.get $l3262 - i32.add - local.set $l3263 - local.get $l3262 - local.get $l3263 - i32.add - local.set $l3264 - local.get $l3263 - local.get $l3264 - i32.add - local.set $l3265 - local.get $l3264 - local.get $l3265 - i32.add - local.set $l3266 - local.get $l3265 - local.get $l3266 - i32.add - local.set $l3267 - local.get $l3266 - local.get $l3267 - i32.add - local.set $l3268 - local.get $l3267 - local.get $l3268 - i32.add - local.set $l3269 - local.get $l3268 - local.get $l3269 - i32.add - local.set $l3270 - local.get $l3269 - local.get $l3270 - i32.add - local.set $l3271 - local.get $l3270 - local.get $l3271 - i32.add - local.set $l3272 - local.get $l3271 - local.get $l3272 - i32.add - local.set $l3273 - local.get $l3272 - local.get $l3273 - i32.add - local.set $l3274 - local.get $l3273 - local.get $l3274 - i32.add - local.set $l3275 - local.get $l3274 - local.get $l3275 - i32.add - local.set $l3276 - local.get $l3275 - local.get $l3276 - i32.add - local.set $l3277 - local.get $l3276 - local.get $l3277 - i32.add - local.set $l3278 - local.get $l3277 - local.get $l3278 - i32.add - local.set $l3279 - local.get $l3278 - local.get $l3279 - i32.add - local.set $l3280 - local.get $l3279 - local.get $l3280 - i32.add - local.set $l3281 - local.get $l3280 - local.get $l3281 - i32.add - local.set $l3282 - local.get $l3281 - local.get $l3282 - i32.add - local.set $l3283 - local.get $l3282 - local.get $l3283 - i32.add - local.set $l3284 - local.get $l3283 - local.get $l3284 - i32.add - local.set $l3285 - local.get $l3284 - local.get $l3285 - i32.add - local.set $l3286 - local.get $l3285 - local.get $l3286 - i32.add - local.set $l3287 - local.get $l3286 - local.get $l3287 - i32.add - local.set $l3288 - local.get $l3287 - local.get $l3288 - i32.add - local.set $l3289 - local.get $l3288 - local.get $l3289 - i32.add - local.set $l3290 - local.get $l3289 - local.get $l3290 - i32.add - local.set $l3291 - local.get $l3290 - local.get $l3291 - i32.add - local.set $l3292 - local.get $l3291 - local.get $l3292 - i32.add - local.set $l3293 - local.get $l3292 - local.get $l3293 - i32.add - local.set $l3294 - local.get $l3293 - local.get $l3294 - i32.add - local.set $l3295 - local.get $l3294 - local.get $l3295 - i32.add - local.set $l3296 - local.get $l3295 - local.get $l3296 - i32.add - local.set $l3297 - local.get $l3296 - local.get $l3297 - i32.add - local.set $l3298 - local.get $l3297 - local.get $l3298 - i32.add - local.set $l3299 - local.get $l3298 - local.get $l3299 - i32.add - local.set $l3300 - local.get $l3299 - local.get $l3300 - i32.add - local.set $l3301 - local.get $l3300 - local.get $l3301 - i32.add - local.set $l3302 - local.get $l3301 - local.get $l3302 - i32.add - local.set $l3303 - local.get $l3302 - local.get $l3303 - i32.add - local.set $l3304 - local.get $l3303 - local.get $l3304 - i32.add - local.set $l3305 - local.get $l3304 - local.get $l3305 - i32.add - local.set $l3306 - local.get $l3305 - local.get $l3306 - i32.add - local.set $l3307 - local.get $l3306 - local.get $l3307 - i32.add - local.set $l3308 - local.get $l3307 - local.get $l3308 - i32.add - local.set $l3309 - local.get $l3308 - local.get $l3309 - i32.add - local.set $l3310 - local.get $l3309 - local.get $l3310 - i32.add - local.set $l3311 - local.get $l3310 - local.get $l3311 - i32.add - local.set $l3312 - local.get $l3311 - local.get $l3312 - i32.add - local.set $l3313 - local.get $l3312 - local.get $l3313 - i32.add - local.set $l3314 - local.get $l3313 - local.get $l3314 - i32.add - local.set $l3315 - local.get $l3314 - local.get $l3315 - i32.add - local.set $l3316 - local.get $l3315 - local.get $l3316 - i32.add - local.set $l3317 - local.get $l3316 - local.get $l3317 - i32.add - local.set $l3318 - local.get $l3317 - local.get $l3318 - i32.add - local.set $l3319 - local.get $l3318 - local.get $l3319 - i32.add - local.set $l3320 - local.get $l3319 - local.get $l3320 - i32.add - local.set $l3321 - local.get $l3320 - local.get $l3321 - i32.add - local.set $l3322 - local.get $l3321 - local.get $l3322 - i32.add - local.set $l3323 - local.get $l3322 - local.get $l3323 - i32.add - local.set $l3324 - local.get $l3323 - local.get $l3324 - i32.add - local.set $l3325 - local.get $l3324 - local.get $l3325 - i32.add - local.set $l3326 - local.get $l3325 - local.get $l3326 - i32.add - local.set $l3327 - local.get $l3326 - local.get $l3327 - i32.add - local.set $l3328 - local.get $l3327 - local.get $l3328 - i32.add - local.set $l3329 - local.get $l3328 - local.get $l3329 - i32.add - local.set $l3330 - local.get $l3329 - local.get $l3330 - i32.add - local.set $l3331 - local.get $l3330 - local.get $l3331 - i32.add - local.set $l3332 - local.get $l3331 - local.get $l3332 - i32.add - local.set $l3333 - local.get $l3332 - local.get $l3333 - i32.add - local.set $l3334 - local.get $l3333 - local.get $l3334 - i32.add - local.set $l3335 - local.get $l3334 - local.get $l3335 - i32.add - local.set $l3336 - local.get $l3335 - local.get $l3336 - i32.add - local.set $l3337 - local.get $l3336 - local.get $l3337 - i32.add - local.set $l3338 - local.get $l3337 - local.get $l3338 - i32.add - local.set $l3339 - local.get $l3338 - local.get $l3339 - i32.add - local.set $l3340 - local.get $l3339 - local.get $l3340 - i32.add - local.set $l3341 - local.get $l3340 - local.get $l3341 - i32.add - local.set $l3342 - local.get $l3341 - local.get $l3342 - i32.add - local.set $l3343 - local.get $l3342 - local.get $l3343 - i32.add - local.set $l3344 - local.get $l3343 - local.get $l3344 - i32.add - local.set $l3345 - local.get $l3344 - local.get $l3345 - i32.add - local.set $l3346 - local.get $l3345 - local.get $l3346 - i32.add - local.set $l3347 - local.get $l3346 - local.get $l3347 - i32.add - local.set $l3348 - local.get $l3347 - local.get $l3348 - i32.add - local.set $l3349 - local.get $l3348 - local.get $l3349 - i32.add - local.set $l3350 - local.get $l3349 - local.get $l3350 - i32.add - local.set $l3351 - local.get $l3350 - local.get $l3351 - i32.add - local.set $l3352 - local.get $l3351 - local.get $l3352 - i32.add - local.set $l3353 - local.get $l3352 - local.get $l3353 - i32.add - local.set $l3354 - local.get $l3353 - local.get $l3354 - i32.add - local.set $l3355 - local.get $l3354 - local.get $l3355 - i32.add - local.set $l3356 - local.get $l3355 - local.get $l3356 - i32.add - local.set $l3357 - local.get $l3356 - local.get $l3357 - i32.add - local.set $l3358 - local.get $l3357 - local.get $l3358 - i32.add - local.set $l3359 - local.get $l3358 - local.get $l3359 - i32.add - local.set $l3360 - local.get $l3359 - local.get $l3360 - i32.add - local.set $l3361 - local.get $l3360 - local.get $l3361 - i32.add - local.set $l3362 - local.get $l3361 - local.get $l3362 - i32.add - local.set $l3363 - local.get $l3362 - local.get $l3363 - i32.add - local.set $l3364 - local.get $l3363 - local.get $l3364 - i32.add - local.set $l3365 - local.get $l3364 - local.get $l3365 - i32.add - local.set $l3366 - local.get $l3365 - local.get $l3366 - i32.add - local.set $l3367 - local.get $l3366 - local.get $l3367 - i32.add - local.set $l3368 - local.get $l3367 - local.get $l3368 - i32.add - local.set $l3369 - local.get $l3368 - local.get $l3369 - i32.add - local.set $l3370 - local.get $l3369 - local.get $l3370 - i32.add - local.set $l3371 - local.get $l3370 - local.get $l3371 - i32.add - local.set $l3372 - local.get $l3371 - local.get $l3372 - i32.add - local.set $l3373 - local.get $l3372 - local.get $l3373 - i32.add - local.set $l3374 - local.get $l3373 - local.get $l3374 - i32.add - local.set $l3375 - local.get $l3374 - local.get $l3375 - i32.add - local.set $l3376 - local.get $l3375 - local.get $l3376 - i32.add - local.set $l3377 - local.get $l3376 - local.get $l3377 - i32.add - local.set $l3378 - local.get $l3377 - local.get $l3378 - i32.add - local.set $l3379 - local.get $l3378 - local.get $l3379 - i32.add - local.set $l3380 - local.get $l3379 - local.get $l3380 - i32.add - local.set $l3381 - local.get $l3380 - local.get $l3381 - i32.add - local.set $l3382 - local.get $l3381 - local.get $l3382 - i32.add - local.set $l3383 - local.get $l3382 - local.get $l3383 - i32.add - local.set $l3384 - local.get $l3383 - local.get $l3384 - i32.add - local.set $l3385 - local.get $l3384 - local.get $l3385 - i32.add - local.set $l3386 - local.get $l3385 - local.get $l3386 - i32.add - local.set $l3387 - local.get $l3386 - local.get $l3387 - i32.add - local.set $l3388 - local.get $l3387 - local.get $l3388 - i32.add - local.set $l3389 - local.get $l3388 - local.get $l3389 - i32.add - local.set $l3390 - local.get $l3389 - local.get $l3390 - i32.add - local.set $l3391 - local.get $l3390 - local.get $l3391 - i32.add - local.set $l3392 - local.get $l3391 - local.get $l3392 - i32.add - local.set $l3393 - local.get $l3392 - local.get $l3393 - i32.add - local.set $l3394 - local.get $l3393 - local.get $l3394 - i32.add - local.set $l3395 - local.get $l3394 - local.get $l3395 - i32.add - local.set $l3396 - local.get $l3395 - local.get $l3396 - i32.add - local.set $l3397 - local.get $l3396 - local.get $l3397 - i32.add - local.set $l3398 - local.get $l3397 - local.get $l3398 - i32.add - local.set $l3399 - local.get $l3398 - local.get $l3399 - i32.add - local.set $l3400 - local.get $l3399 - local.get $l3400 - i32.add - local.set $l3401 - local.get $l3400 - local.get $l3401 - i32.add - local.set $l3402 - local.get $l3401 - local.get $l3402 - i32.add - local.set $l3403 - local.get $l3402 - local.get $l3403 - i32.add - local.set $l3404 - local.get $l3403 - local.get $l3404 - i32.add - local.set $l3405 - local.get $l3404 - local.get $l3405 - i32.add - local.set $l3406 - local.get $l3405 - local.get $l3406 - i32.add - local.set $l3407 - local.get $l3406 - local.get $l3407 - i32.add - local.set $l3408 - local.get $l3407 - local.get $l3408 - i32.add - local.set $l3409 - local.get $l3408 - local.get $l3409 - i32.add - local.set $l3410 - local.get $l3409 - local.get $l3410 - i32.add - local.set $l3411 - local.get $l3410 - local.get $l3411 - i32.add - local.set $l3412 - local.get $l3411 - local.get $l3412 - i32.add - local.set $l3413 - local.get $l3412 - local.get $l3413 - i32.add - local.set $l3414 - local.get $l3413 - local.get $l3414 - i32.add - local.set $l3415 - local.get $l3414 - local.get $l3415 - i32.add - local.set $l3416 - local.get $l3415 - local.get $l3416 - i32.add - local.set $l3417 - local.get $l3416 - local.get $l3417 - i32.add - local.set $l3418 - local.get $l3417 - local.get $l3418 - i32.add - local.set $l3419 - local.get $l3418 - local.get $l3419 - i32.add - local.set $l3420 - local.get $l3419 - local.get $l3420 - i32.add - local.set $l3421 - local.get $l3420 - local.get $l3421 - i32.add - local.set $l3422 - local.get $l3421 - local.get $l3422 - i32.add - local.set $l3423 - local.get $l3422 - local.get $l3423 - i32.add - local.set $l3424 - local.get $l3423 - local.get $l3424 - i32.add - local.set $l3425 - local.get $l3424 - local.get $l3425 - i32.add - local.set $l3426 - local.get $l3425 - local.get $l3426 - i32.add - local.set $l3427 - local.get $l3426 - local.get $l3427 - i32.add - local.set $l3428 - local.get $l3427 - local.get $l3428 - i32.add - local.set $l3429 - local.get $l3428 - local.get $l3429 - i32.add - local.set $l3430 - local.get $l3429 - local.get $l3430 - i32.add - local.set $l3431 - local.get $l3430 - local.get $l3431 - i32.add - local.set $l3432 - local.get $l3431 - local.get $l3432 - i32.add - local.set $l3433 - local.get $l3432 - local.get $l3433 - i32.add - local.set $l3434 - local.get $l3433 - local.get $l3434 - i32.add - local.set $l3435 - local.get $l3434 - local.get $l3435 - i32.add - local.set $l3436 - local.get $l3435 - local.get $l3436 - i32.add - local.set $l3437 - local.get $l3436 - local.get $l3437 - i32.add - local.set $l3438 - local.get $l3437 - local.get $l3438 - i32.add - local.set $l3439 - local.get $l3438 - local.get $l3439 - i32.add - local.set $l3440 - local.get $l3439 - local.get $l3440 - i32.add - local.set $l3441 - local.get $l3440 - local.get $l3441 - i32.add - local.set $l3442 - local.get $l3441 - local.get $l3442 - i32.add - local.set $l3443 - local.get $l3442 - local.get $l3443 - i32.add - local.set $l3444 - local.get $l3443 - local.get $l3444 - i32.add - local.set $l3445 - local.get $l3444 - local.get $l3445 - i32.add - local.set $l3446 - local.get $l3445 - local.get $l3446 - i32.add - local.set $l3447 - local.get $l3446 - local.get $l3447 - i32.add - local.set $l3448 - local.get $l3447 - local.get $l3448 - i32.add - local.set $l3449 - local.get $l3448 - local.get $l3449 - i32.add - local.set $l3450 - local.get $l3449 - local.get $l3450 - i32.add - local.set $l3451 - local.get $l3450 - local.get $l3451 - i32.add - local.set $l3452 - local.get $l3451 - local.get $l3452 - i32.add - local.set $l3453 - local.get $l3452 - local.get $l3453 - i32.add - local.set $l3454 - local.get $l3453 - local.get $l3454 - i32.add - local.set $l3455 - local.get $l3454 - local.get $l3455 - i32.add - local.set $l3456 - local.get $l3455 - local.get $l3456 - i32.add - local.set $l3457 - local.get $l3456 - local.get $l3457 - i32.add - local.set $l3458 - local.get $l3457 - local.get $l3458 - i32.add - local.set $l3459 - local.get $l3458 - local.get $l3459 - i32.add - local.set $l3460 - local.get $l3459 - local.get $l3460 - i32.add - local.set $l3461 - local.get $l3460 - local.get $l3461 - i32.add - local.set $l3462 - local.get $l3461 - local.get $l3462 - i32.add - local.set $l3463 - local.get $l3462 - local.get $l3463 - i32.add - local.set $l3464 - local.get $l3463 - local.get $l3464 - i32.add - local.set $l3465 - local.get $l3464 - local.get $l3465 - i32.add - local.set $l3466 - local.get $l3465 - local.get $l3466 - i32.add - local.set $l3467 - local.get $l3466 - local.get $l3467 - i32.add - local.set $l3468 - local.get $l3467 - local.get $l3468 - i32.add - local.set $l3469 - local.get $l3468 - local.get $l3469 - i32.add - local.set $l3470 - local.get $l3469 - local.get $l3470 - i32.add - local.set $l3471 - local.get $l3470 - local.get $l3471 - i32.add - local.set $l3472 - local.get $l3471 - local.get $l3472 - i32.add - local.set $l3473 - local.get $l3472 - local.get $l3473 - i32.add - local.set $l3474 - local.get $l3473 - local.get $l3474 - i32.add - local.set $l3475 - local.get $l3474 - local.get $l3475 - i32.add - local.set $l3476 - local.get $l3475 - local.get $l3476 - i32.add - local.set $l3477 - local.get $l3476 - local.get $l3477 - i32.add - local.set $l3478 - local.get $l3477 - local.get $l3478 - i32.add - local.set $l3479 - local.get $l3478 - local.get $l3479 - i32.add - local.set $l3480 - local.get $l3479 - local.get $l3480 - i32.add - local.set $l3481 - local.get $l3480 - local.get $l3481 - i32.add - local.set $l3482 - local.get $l3481 - local.get $l3482 - i32.add - local.set $l3483 - local.get $l3482 - local.get $l3483 - i32.add - local.set $l3484 - local.get $l3483 - local.get $l3484 - i32.add - local.set $l3485 - local.get $l3484 - local.get $l3485 - i32.add - local.set $l3486 - local.get $l3485 - local.get $l3486 - i32.add - local.set $l3487 - local.get $l3486 - local.get $l3487 - i32.add - local.set $l3488 - local.get $l3487 - local.get $l3488 - i32.add - local.set $l3489 - local.get $l3488 - local.get $l3489 - i32.add - local.set $l3490 - local.get $l3489 - local.get $l3490 - i32.add - local.set $l3491 - local.get $l3490 - local.get $l3491 - i32.add - local.set $l3492 - local.get $l3491 - local.get $l3492 - i32.add - local.set $l3493 - local.get $l3492 - local.get $l3493 - i32.add - local.set $l3494 - local.get $l3493 - local.get $l3494 - i32.add - local.set $l3495 - local.get $l3494 - local.get $l3495 - i32.add - local.set $l3496 - local.get $l3495 - local.get $l3496 - i32.add - local.set $l3497 - local.get $l3496 - local.get $l3497 - i32.add - local.set $l3498 - local.get $l3497 - local.get $l3498 - i32.add - local.set $l3499 - local.get $l3498 - local.get $l3499 - i32.add - local.set $l3500 - local.get $l3499 - local.get $l3500 - i32.add - local.set $l3501 - local.get $l3500 - local.get $l3501 - i32.add - local.set $l3502 - local.get $l3501 - local.get $l3502 - i32.add - local.set $l3503 - local.get $l3502 - local.get $l3503 - i32.add - local.set $l3504 - local.get $l3503 - local.get $l3504 - i32.add - local.set $l3505 - local.get $l3504 - local.get $l3505 - i32.add - local.set $l3506 - local.get $l3505 - local.get $l3506 - i32.add - local.set $l3507 - local.get $l3506 - local.get $l3507 - i32.add - local.set $l3508 - local.get $l3507 - local.get $l3508 - i32.add - local.set $l3509 - local.get $l3508 - local.get $l3509 - i32.add - local.set $l3510 - local.get $l3509 - local.get $l3510 - i32.add - local.set $l3511 - local.get $l3510 - local.get $l3511 - i32.add - local.set $l3512 - local.get $l3511 - local.get $l3512 - i32.add - local.set $l3513 - local.get $l3512 - local.get $l3513 - i32.add - local.set $l3514 - local.get $l3513 - local.get $l3514 - i32.add - local.set $l3515 - local.get $l3514 - local.get $l3515 - i32.add - local.set $l3516 - local.get $l3515 - local.get $l3516 - i32.add - local.set $l3517 - local.get $l3516 - local.get $l3517 - i32.add - local.set $l3518 - local.get $l3517 - local.get $l3518 - i32.add - local.set $l3519 - local.get $l3518 - local.get $l3519 - i32.add - local.set $l3520 - local.get $l3519 - local.get $l3520 - i32.add - local.set $l3521 - local.get $l3520 - local.get $l3521 - i32.add - local.set $l3522 - local.get $l3521 - local.get $l3522 - i32.add - local.set $l3523 - local.get $l3522 - local.get $l3523 - i32.add - local.set $l3524 - local.get $l3523 - local.get $l3524 - i32.add - local.set $l3525 - local.get $l3524 - local.get $l3525 - i32.add - local.set $l3526 - local.get $l3525 - local.get $l3526 - i32.add - local.set $l3527 - local.get $l3526 - local.get $l3527 - i32.add - local.set $l3528 - local.get $l3527 - local.get $l3528 - i32.add - local.set $l3529 - local.get $l3528 - local.get $l3529 - i32.add - local.set $l3530 - local.get $l3529 - local.get $l3530 - i32.add - local.set $l3531 - local.get $l3530 - local.get $l3531 - i32.add - local.set $l3532 - local.get $l3531 - local.get $l3532 - i32.add - local.set $l3533 - local.get $l3532 - local.get $l3533 - i32.add - local.set $l3534 - local.get $l3533 - local.get $l3534 - i32.add - local.set $l3535 - local.get $l3534 - local.get $l3535 - i32.add - local.set $l3536 - local.get $l3535 - local.get $l3536 - i32.add - local.set $l3537 - local.get $l3536 - local.get $l3537 - i32.add - local.set $l3538 - local.get $l3537 - local.get $l3538 - i32.add - local.set $l3539 - local.get $l3538 - local.get $l3539 - i32.add - local.set $l3540 - local.get $l3539 - local.get $l3540 - i32.add - local.set $l3541 - local.get $l3540 - local.get $l3541 - i32.add - local.set $l3542 - local.get $l3541 - local.get $l3542 - i32.add - local.set $l3543 - local.get $l3542 - local.get $l3543 - i32.add - local.set $l3544 - local.get $l3543 - local.get $l3544 - i32.add - local.set $l3545 - local.get $l3544 - local.get $l3545 - i32.add - local.set $l3546 - local.get $l3545 - local.get $l3546 - i32.add - local.set $l3547 - local.get $l3546 - local.get $l3547 - i32.add - local.set $l3548 - local.get $l3547 - local.get $l3548 - i32.add - local.set $l3549 - local.get $l3548 - local.get $l3549 - i32.add - local.set $l3550 - local.get $l3549 - local.get $l3550 - i32.add - local.set $l3551 - local.get $l3550 - local.get $l3551 - i32.add - local.set $l3552 - local.get $l3551 - local.get $l3552 - i32.add - local.set $l3553 - local.get $l3552 - local.get $l3553 - i32.add - local.set $l3554 - local.get $l3553 - local.get $l3554 - i32.add - local.set $l3555 - local.get $l3554 - local.get $l3555 - i32.add - local.set $l3556 - local.get $l3555 - local.get $l3556 - i32.add - local.set $l3557 - local.get $l3556 - local.get $l3557 - i32.add - local.set $l3558 - local.get $l3557 - local.get $l3558 - i32.add - local.set $l3559 - local.get $l3558 - local.get $l3559 - i32.add - local.set $l3560 - local.get $l3559 - local.get $l3560 - i32.add - local.set $l3561 - local.get $l3560 - local.get $l3561 - i32.add - local.set $l3562 - local.get $l3561 - local.get $l3562 - i32.add - local.set $l3563 - local.get $l3562 - local.get $l3563 - i32.add - local.set $l3564 - local.get $l3563 - local.get $l3564 - i32.add - local.set $l3565 - local.get $l3564 - local.get $l3565 - i32.add - local.set $l3566 - local.get $l3565 - local.get $l3566 - i32.add - local.set $l3567 - local.get $l3566 - local.get $l3567 - i32.add - local.set $l3568 - local.get $l3567 - local.get $l3568 - i32.add - local.set $l3569 - local.get $l3568 - local.get $l3569 - i32.add - local.set $l3570 - local.get $l3569 - local.get $l3570 - i32.add - local.set $l3571 - local.get $l3570 - local.get $l3571 - i32.add - local.set $l3572 - local.get $l3571 - local.get $l3572 - i32.add - local.set $l3573 - local.get $l3572 - local.get $l3573 - i32.add - local.set $l3574 - local.get $l3573 - local.get $l3574 - i32.add - local.set $l3575 - local.get $l3574 - local.get $l3575 - i32.add - local.set $l3576 - local.get $l3575 - local.get $l3576 - i32.add - local.set $l3577 - local.get $l3576 - local.get $l3577 - i32.add - local.set $l3578 - local.get $l3577 - local.get $l3578 - i32.add - local.set $l3579 - local.get $l3578 - local.get $l3579 - i32.add - local.set $l3580 - local.get $l3579 - local.get $l3580 - i32.add - local.set $l3581 - local.get $l3580 - local.get $l3581 - i32.add - local.set $l3582 - local.get $l3581 - local.get $l3582 - i32.add - local.set $l3583 - local.get $l3582 - local.get $l3583 - i32.add - local.set $l3584 - local.get $l3583 - local.get $l3584 - i32.add - local.set $l3585 - local.get $l3584 - local.get $l3585 - i32.add - local.set $l3586 - local.get $l3585 - local.get $l3586 - i32.add - local.set $l3587 - local.get $l3586 - local.get $l3587 - i32.add - local.set $l3588 - local.get $l3587 - local.get $l3588 - i32.add - local.set $l3589 - local.get $l3588 - local.get $l3589 - i32.add - local.set $l3590 - local.get $l3589 - local.get $l3590 - i32.add - local.set $l3591 - local.get $l3590 - local.get $l3591 - i32.add - local.set $l3592 - local.get $l3591 - local.get $l3592 - i32.add - local.set $l3593 - local.get $l3592 - local.get $l3593 - i32.add - local.set $l3594 - local.get $l3593 - local.get $l3594 - i32.add - local.set $l3595 - local.get $l3594 - local.get $l3595 - i32.add - local.set $l3596 - local.get $l3595 - local.get $l3596 - i32.add - local.set $l3597 - local.get $l3596 - local.get $l3597 - i32.add - local.set $l3598 - local.get $l3597 - local.get $l3598 - i32.add - local.set $l3599 - local.get $l3598 - local.get $l3599 - i32.add - local.set $l3600 - local.get $l3599 - local.get $l3600 - i32.add - local.set $l3601 - local.get $l3600 - local.get $l3601 - i32.add - local.set $l3602 - local.get $l3601 - local.get $l3602 - i32.add - local.set $l3603 - local.get $l3602 - local.get $l3603 - i32.add - local.set $l3604 - local.get $l3603 - local.get $l3604 - i32.add - local.set $l3605 - local.get $l3604 - local.get $l3605 - i32.add - local.set $l3606 - local.get $l3605 - local.get $l3606 - i32.add - local.set $l3607 - local.get $l3606 - local.get $l3607 - i32.add - local.set $l3608 - local.get $l3607 - local.get $l3608 - i32.add - local.set $l3609 - local.get $l3608 - local.get $l3609 - i32.add - local.set $l3610 - local.get $l3609 - local.get $l3610 - i32.add - local.set $l3611 - local.get $l3610 - local.get $l3611 - i32.add - local.set $l3612 - local.get $l3611 - local.get $l3612 - i32.add - local.set $l3613 - local.get $l3612 - local.get $l3613 - i32.add - local.set $l3614 - local.get $l3613 - local.get $l3614 - i32.add - local.set $l3615 - local.get $l3614 - local.get $l3615 - i32.add - local.set $l3616 - local.get $l3615 - local.get $l3616 - i32.add - local.set $l3617 - local.get $l3616 - local.get $l3617 - i32.add - local.set $l3618 - local.get $l3617 - local.get $l3618 - i32.add - local.set $l3619 - local.get $l3618 - local.get $l3619 - i32.add - local.set $l3620 - local.get $l3619 - local.get $l3620 - i32.add - local.set $l3621 - local.get $l3620 - local.get $l3621 - i32.add - local.set $l3622 - local.get $l3621 - local.get $l3622 - i32.add - local.set $l3623 - local.get $l3622 - local.get $l3623 - i32.add - local.set $l3624 - local.get $l3623 - local.get $l3624 - i32.add - local.set $l3625 - local.get $l3624 - local.get $l3625 - i32.add - local.set $l3626 - local.get $l3625 - local.get $l3626 - i32.add - local.set $l3627 - local.get $l3626 - local.get $l3627 - i32.add - local.set $l3628 - local.get $l3627 - local.get $l3628 - i32.add - local.set $l3629 - local.get $l3628 - local.get $l3629 - i32.add - local.set $l3630 - local.get $l3629 - local.get $l3630 - i32.add - local.set $l3631 - local.get $l3630 - local.get $l3631 - i32.add - local.set $l3632 - local.get $l3631 - local.get $l3632 - i32.add - local.set $l3633 - local.get $l3632 - local.get $l3633 - i32.add - local.set $l3634 - local.get $l3633 - local.get $l3634 - i32.add - local.set $l3635 - local.get $l3634 - local.get $l3635 - i32.add - local.set $l3636 - local.get $l3635 - local.get $l3636 - i32.add - local.set $l3637 - local.get $l3636 - local.get $l3637 - i32.add - local.set $l3638 - local.get $l3637 - local.get $l3638 - i32.add - local.set $l3639 - local.get $l3638 - local.get $l3639 - i32.add - local.set $l3640 - local.get $l3639 - local.get $l3640 - i32.add - local.set $l3641 - local.get $l3640 - local.get $l3641 - i32.add - local.set $l3642 - local.get $l3641 - local.get $l3642 - i32.add - local.set $l3643 - local.get $l3642 - local.get $l3643 - i32.add - local.set $l3644 - local.get $l3643 - local.get $l3644 - i32.add - local.set $l3645 - local.get $l3644 - local.get $l3645 - i32.add - local.set $l3646 - local.get $l3645 - local.get $l3646 - i32.add - local.set $l3647 - local.get $l3646 - local.get $l3647 - i32.add - local.set $l3648 - local.get $l3647 - local.get $l3648 - i32.add - local.set $l3649 - local.get $l3648 - local.get $l3649 - i32.add - local.set $l3650 - local.get $l3649 - local.get $l3650 - i32.add - local.set $l3651 - local.get $l3650 - local.get $l3651 - i32.add - local.set $l3652 - local.get $l3651 - local.get $l3652 - i32.add - local.set $l3653 - local.get $l3652 - local.get $l3653 - i32.add - local.set $l3654 - local.get $l3653 - local.get $l3654 - i32.add - local.set $l3655 - local.get $l3654 - local.get $l3655 - i32.add - local.set $l3656 - local.get $l3655 - local.get $l3656 - i32.add - local.set $l3657 - local.get $l3656 - local.get $l3657 - i32.add - local.set $l3658 - local.get $l3657 - local.get $l3658 - i32.add - local.set $l3659 - local.get $l3658 - local.get $l3659 - i32.add - local.set $l3660 - local.get $l3659 - local.get $l3660 - i32.add - local.set $l3661 - local.get $l3660 - local.get $l3661 - i32.add - local.set $l3662 - local.get $l3661 - local.get $l3662 - i32.add - local.set $l3663 - local.get $l3662 - local.get $l3663 - i32.add - local.set $l3664 - local.get $l3663 - local.get $l3664 - i32.add - local.set $l3665 - local.get $l3664 - local.get $l3665 - i32.add - local.set $l3666 - local.get $l3665 - local.get $l3666 - i32.add - local.set $l3667 - local.get $l3666 - local.get $l3667 - i32.add - local.set $l3668 - local.get $l3667 - local.get $l3668 - i32.add - local.set $l3669 - local.get $l3668 - local.get $l3669 - i32.add - local.set $l3670 - local.get $l3669 - local.get $l3670 - i32.add - local.set $l3671 - local.get $l3670 - local.get $l3671 - i32.add - local.set $l3672 - local.get $l3671 - local.get $l3672 - i32.add - local.set $l3673 - local.get $l3672 - local.get $l3673 - i32.add - local.set $l3674 - local.get $l3673 - local.get $l3674 - i32.add - local.set $l3675 - local.get $l3674 - local.get $l3675 - i32.add - local.set $l3676 - local.get $l3675 - local.get $l3676 - i32.add - local.set $l3677 - local.get $l3676 - local.get $l3677 - i32.add - local.set $l3678 - local.get $l3677 - local.get $l3678 - i32.add - local.set $l3679 - local.get $l3678 - local.get $l3679 - i32.add - local.set $l3680 - local.get $l3679 - local.get $l3680 - i32.add - local.set $l3681 - local.get $l3680 - local.get $l3681 - i32.add - local.set $l3682 - local.get $l3681 - local.get $l3682 - i32.add - local.set $l3683 - local.get $l3682 - local.get $l3683 - i32.add - local.set $l3684 - local.get $l3683 - local.get $l3684 - i32.add - local.set $l3685 - local.get $l3684 - local.get $l3685 - i32.add - local.set $l3686 - local.get $l3685 - local.get $l3686 - i32.add - local.set $l3687 - local.get $l3686 - local.get $l3687 - i32.add - local.set $l3688 - local.get $l3687 - local.get $l3688 - i32.add - local.set $l3689 - local.get $l3688 - local.get $l3689 - i32.add - local.set $l3690 - local.get $l3689 - local.get $l3690 - i32.add - local.set $l3691 - local.get $l3690 - local.get $l3691 - i32.add - local.set $l3692 - local.get $l3691 - local.get $l3692 - i32.add - local.set $l3693 - local.get $l3692 - local.get $l3693 - i32.add - local.set $l3694 - local.get $l3693 - local.get $l3694 - i32.add - local.set $l3695 - local.get $l3694 - local.get $l3695 - i32.add - local.set $l3696 - local.get $l3695 - local.get $l3696 - i32.add - local.set $l3697 - local.get $l3696 - local.get $l3697 - i32.add - local.set $l3698 - local.get $l3697 - local.get $l3698 - i32.add - local.set $l3699 - local.get $l3698 - local.get $l3699 - i32.add - local.set $l3700 - local.get $l3699 - local.get $l3700 - i32.add - local.set $l3701 - local.get $l3700 - local.get $l3701 - i32.add - local.set $l3702 - local.get $l3701 - local.get $l3702 - i32.add - local.set $l3703 - local.get $l3702 - local.get $l3703 - i32.add - local.set $l3704 - local.get $l3703 - local.get $l3704 - i32.add - local.set $l3705 - local.get $l3704 - local.get $l3705 - i32.add - local.set $l3706 - local.get $l3705 - local.get $l3706 - i32.add - local.set $l3707 - local.get $l3706 - local.get $l3707 - i32.add - local.set $l3708 - local.get $l3707 - local.get $l3708 - i32.add - local.set $l3709 - local.get $l3708 - local.get $l3709 - i32.add - local.set $l3710 - local.get $l3709 - local.get $l3710 - i32.add - local.set $l3711 - local.get $l3710 - local.get $l3711 - i32.add - local.set $l3712 - local.get $l3711 - local.get $l3712 - i32.add - local.set $l3713 - local.get $l3712 - local.get $l3713 - i32.add - local.set $l3714 - local.get $l3713 - local.get $l3714 - i32.add - local.set $l3715 - local.get $l3714 - local.get $l3715 - i32.add - local.set $l3716 - local.get $l3715 - local.get $l3716 - i32.add - local.set $l3717 - local.get $l3716 - local.get $l3717 - i32.add - local.set $l3718 - local.get $l3717 - local.get $l3718 - i32.add - local.set $l3719 - local.get $l3718 - local.get $l3719 - i32.add - local.set $l3720 - local.get $l3719 - local.get $l3720 - i32.add - local.set $l3721 - local.get $l3720 - local.get $l3721 - i32.add - local.set $l3722 - local.get $l3721 - local.get $l3722 - i32.add - local.set $l3723 - local.get $l3722 - local.get $l3723 - i32.add - local.set $l3724 - local.get $l3723 - local.get $l3724 - i32.add - local.set $l3725 - local.get $l3724 - local.get $l3725 - i32.add - local.set $l3726 - local.get $l3725 - local.get $l3726 - i32.add - local.set $l3727 - local.get $l3726 - local.get $l3727 - i32.add - local.set $l3728 - local.get $l3727 - local.get $l3728 - i32.add - local.set $l3729 - local.get $l3728 - local.get $l3729 - i32.add - local.set $l3730 - local.get $l3729 - local.get $l3730 - i32.add - local.set $l3731 - local.get $l3730 - local.get $l3731 - i32.add - local.set $l3732 - local.get $l3731 - local.get $l3732 - i32.add - local.set $l3733 - local.get $l3732 - local.get $l3733 - i32.add - local.set $l3734 - local.get $l3733 - local.get $l3734 - i32.add - local.set $l3735 - local.get $l3734 - local.get $l3735 - i32.add - local.set $l3736 - local.get $l3735 - local.get $l3736 - i32.add - local.set $l3737 - local.get $l3736 - local.get $l3737 - i32.add - local.set $l3738 - local.get $l3737 - local.get $l3738 - i32.add - local.set $l3739 - local.get $l3738 - local.get $l3739 - i32.add - local.set $l3740 - local.get $l3739 - local.get $l3740 - i32.add - local.set $l3741 - local.get $l3740 - local.get $l3741 - i32.add - local.set $l3742 - local.get $l3741 - local.get $l3742 - i32.add - local.set $l3743 - local.get $l3742 - local.get $l3743 - i32.add - local.set $l3744 - local.get $l3743 - local.get $l3744 - i32.add - local.set $l3745 - local.get $l3744 - local.get $l3745 - i32.add - local.set $l3746 - local.get $l3745 - local.get $l3746 - i32.add - local.set $l3747 - local.get $l3746 - local.get $l3747 - i32.add - local.set $l3748 - local.get $l3747 - local.get $l3748 - i32.add - local.set $l3749 - local.get $l3748 - local.get $l3749 - i32.add - local.set $l3750 - local.get $l3749 - local.get $l3750 - i32.add - local.set $l3751 - local.get $l3750 - local.get $l3751 - i32.add - local.set $l3752 - local.get $l3751 - local.get $l3752 - i32.add - local.set $l3753 - local.get $l3752 - local.get $l3753 - i32.add - local.set $l3754 - local.get $l3753 - local.get $l3754 - i32.add - local.set $l3755 - local.get $l3754 - local.get $l3755 - i32.add - local.set $l3756 - local.get $l3755 - local.get $l3756 - i32.add - local.set $l3757 - local.get $l3756 - local.get $l3757 - i32.add - local.set $l3758 - local.get $l3757 - local.get $l3758 - i32.add - local.set $l3759 - local.get $l3758 - local.get $l3759 - i32.add - local.set $l3760 - local.get $l3759 - local.get $l3760 - i32.add - local.set $l3761 - local.get $l3760 - local.get $l3761 - i32.add - local.set $l3762 - local.get $l3761 - local.get $l3762 - i32.add - local.set $l3763 - local.get $l3762 - local.get $l3763 - i32.add - local.set $l3764 - local.get $l3763 - local.get $l3764 - i32.add - local.set $l3765 - local.get $l3764 - local.get $l3765 - i32.add - local.set $l3766 - local.get $l3765 - local.get $l3766 - i32.add - local.set $l3767 - local.get $l3766 - local.get $l3767 - i32.add - local.set $l3768 - local.get $l3767 - local.get $l3768 - i32.add - local.set $l3769 - local.get $l3768 - local.get $l3769 - i32.add - local.set $l3770 - local.get $l3769 - local.get $l3770 - i32.add - local.set $l3771 - local.get $l3770 - local.get $l3771 - i32.add - local.set $l3772 - local.get $l3771 - local.get $l3772 - i32.add - local.set $l3773 - local.get $l3772 - local.get $l3773 - i32.add - local.set $l3774 - local.get $l3773 - local.get $l3774 - i32.add - local.set $l3775 - local.get $l3774 - local.get $l3775 - i32.add - local.set $l3776 - local.get $l3775 - local.get $l3776 - i32.add - local.set $l3777 - local.get $l3776 - local.get $l3777 - i32.add - local.set $l3778 - local.get $l3777 - local.get $l3778 - i32.add - local.set $l3779 - local.get $l3778 - local.get $l3779 - i32.add - local.set $l3780 - local.get $l3779 - local.get $l3780 - i32.add - local.set $l3781 - local.get $l3780 - local.get $l3781 - i32.add - local.set $l3782 - local.get $l3781 - local.get $l3782 - i32.add - local.set $l3783 - local.get $l3782 - local.get $l3783 - i32.add - local.set $l3784 - local.get $l3783 - local.get $l3784 - i32.add - local.set $l3785 - local.get $l3784 - local.get $l3785 - i32.add - local.set $l3786 - local.get $l3785 - local.get $l3786 - i32.add - local.set $l3787 - local.get $l3786 - local.get $l3787 - i32.add - local.set $l3788 - local.get $l3787 - local.get $l3788 - i32.add - local.set $l3789 - local.get $l3788 - local.get $l3789 - i32.add - local.set $l3790 - local.get $l3789 - local.get $l3790 - i32.add - local.set $l3791 - local.get $l3790 - local.get $l3791 - i32.add - local.set $l3792 - local.get $l3791 - local.get $l3792 - i32.add - local.set $l3793 - local.get $l3792 - local.get $l3793 - i32.add - local.set $l3794 - local.get $l3793 - local.get $l3794 - i32.add - local.set $l3795 - local.get $l3794 - local.get $l3795 - i32.add - local.set $l3796 - local.get $l3795 - local.get $l3796 - i32.add - local.set $l3797 - local.get $l3796 - local.get $l3797 - i32.add - local.set $l3798 - local.get $l3797 - local.get $l3798 - i32.add - local.set $l3799 - local.get $l3798 - local.get $l3799 - i32.add - local.set $l3800 - local.get $l3799 - local.get $l3800 - i32.add - local.set $l3801 - local.get $l3800 - local.get $l3801 - i32.add - local.set $l3802 - local.get $l3801 - local.get $l3802 - i32.add - local.set $l3803 - local.get $l3802 - local.get $l3803 - i32.add - local.set $l3804 - local.get $l3803 - local.get $l3804 - i32.add - local.set $l3805 - local.get $l3804 - local.get $l3805 - i32.add - local.set $l3806 - local.get $l3805 - local.get $l3806 - i32.add - local.set $l3807 - local.get $l3806 - local.get $l3807 - i32.add - local.set $l3808 - local.get $l3807 - local.get $l3808 - i32.add - local.set $l3809 - local.get $l3808 - local.get $l3809 - i32.add - local.set $l3810 - local.get $l3809 - local.get $l3810 - i32.add - local.set $l3811 - local.get $l3810 - local.get $l3811 - i32.add - local.set $l3812 - local.get $l3811 - local.get $l3812 - i32.add - local.set $l3813 - local.get $l3812 - local.get $l3813 - i32.add - local.set $l3814 - local.get $l3813 - local.get $l3814 - i32.add - local.set $l3815 - local.get $l3814 - local.get $l3815 - i32.add - local.set $l3816 - local.get $l3815 - local.get $l3816 - i32.add - local.set $l3817 - local.get $l3816 - local.get $l3817 - i32.add - local.set $l3818 - local.get $l3817 - local.get $l3818 - i32.add - local.set $l3819 - local.get $l3818 - local.get $l3819 - i32.add - local.set $l3820 - local.get $l3819 - local.get $l3820 - i32.add - local.set $l3821 - local.get $l3820 - local.get $l3821 - i32.add - local.set $l3822 - local.get $l3821 - local.get $l3822 - i32.add - local.set $l3823 - local.get $l3822 - local.get $l3823 - i32.add - local.set $l3824 - local.get $l3823 - local.get $l3824 - i32.add - local.set $l3825 - local.get $l3824 - local.get $l3825 - i32.add - local.set $l3826 - local.get $l3825 - local.get $l3826 - i32.add - local.set $l3827 - local.get $l3826 - local.get $l3827 - i32.add - local.set $l3828 - local.get $l3827 - local.get $l3828 - i32.add - local.set $l3829 - local.get $l3828 - local.get $l3829 - i32.add - local.set $l3830 - local.get $l3829 - local.get $l3830 - i32.add - local.set $l3831 - local.get $l3830 - local.get $l3831 - i32.add - local.set $l3832 - local.get $l3831 - local.get $l3832 - i32.add - local.set $l3833 - local.get $l3832 - local.get $l3833 - i32.add - local.set $l3834 - local.get $l3833 - local.get $l3834 - i32.add - local.set $l3835 - local.get $l3834 - local.get $l3835 - i32.add - local.set $l3836 - local.get $l3835 - local.get $l3836 - i32.add - local.set $l3837 - local.get $l3836 - local.get $l3837 - i32.add - local.set $l3838 - local.get $l3837 - local.get $l3838 - i32.add - local.set $l3839 - local.get $l3838 - local.get $l3839 - i32.add - local.set $l3840 - local.get $l3839 - local.get $l3840 - i32.add - local.set $l3841 - local.get $l3840 - local.get $l3841 - i32.add - local.set $l3842 - local.get $l3841 - local.get $l3842 - i32.add - local.set $l3843 - local.get $l3842 - local.get $l3843 - i32.add - local.set $l3844 - local.get $l3843 - local.get $l3844 - i32.add - local.set $l3845 - local.get $l3844 - local.get $l3845 - i32.add - local.set $l3846 - local.get $l3845 - local.get $l3846 - i32.add - local.set $l3847 - local.get $l3846 - local.get $l3847 - i32.add - local.set $l3848 - local.get $l3847 - local.get $l3848 - i32.add - local.set $l3849 - local.get $l3848 - local.get $l3849 - i32.add - local.set $l3850 - local.get $l3849 - local.get $l3850 - i32.add - local.set $l3851 - local.get $l3850 - local.get $l3851 - i32.add - local.set $l3852 - local.get $l3851 - local.get $l3852 - i32.add - local.set $l3853 - local.get $l3852 - local.get $l3853 - i32.add - local.set $l3854 - local.get $l3853 - local.get $l3854 - i32.add - local.set $l3855 - local.get $l3854 - local.get $l3855 - i32.add - local.set $l3856 - local.get $l3855 - local.get $l3856 - i32.add - local.set $l3857 - local.get $l3856 - local.get $l3857 - i32.add - local.set $l3858 - local.get $l3857 - local.get $l3858 - i32.add - local.set $l3859 - local.get $l3858 - local.get $l3859 - i32.add - local.set $l3860 - local.get $l3859 - local.get $l3860 - i32.add - local.set $l3861 - local.get $l3860 - local.get $l3861 - i32.add - local.set $l3862 - local.get $l3861 - local.get $l3862 - i32.add - local.set $l3863 - local.get $l3862 - local.get $l3863 - i32.add - local.set $l3864 - local.get $l3863 - local.get $l3864 - i32.add - local.set $l3865 - local.get $l3864 - local.get $l3865 - i32.add - local.set $l3866 - local.get $l3865 - local.get $l3866 - i32.add - local.set $l3867 - local.get $l3866 - local.get $l3867 - i32.add - local.set $l3868 - local.get $l3867 - local.get $l3868 - i32.add - local.set $l3869 - local.get $l3868 - local.get $l3869 - i32.add - local.set $l3870 - local.get $l3869 - local.get $l3870 - i32.add - local.set $l3871 - local.get $l3870 - local.get $l3871 - i32.add - local.set $l3872 - local.get $l3871 - local.get $l3872 - i32.add - local.set $l3873 - local.get $l3872 - local.get $l3873 - i32.add - local.set $l3874 - local.get $l3873 - local.get $l3874 - i32.add - local.set $l3875 - local.get $l3874 - local.get $l3875 - i32.add - local.set $l3876 - local.get $l3875 - local.get $l3876 - i32.add - local.set $l3877 - local.get $l3876 - local.get $l3877 - i32.add - local.set $l3878 - local.get $l3877 - local.get $l3878 - i32.add - local.set $l3879 - local.get $l3878 - local.get $l3879 - i32.add - local.set $l3880 - local.get $l3879 - local.get $l3880 - i32.add - local.set $l3881 - local.get $l3880 - local.get $l3881 - i32.add - local.set $l3882 - local.get $l3881 - local.get $l3882 - i32.add - local.set $l3883 - local.get $l3882 - local.get $l3883 - i32.add - local.set $l3884 - local.get $l3883 - local.get $l3884 - i32.add - local.set $l3885 - local.get $l3884 - local.get $l3885 - i32.add - local.set $l3886 - local.get $l3885 - local.get $l3886 - i32.add - local.set $l3887 - local.get $l3886 - local.get $l3887 - i32.add - local.set $l3888 - local.get $l3887 - local.get $l3888 - i32.add - local.set $l3889 - local.get $l3888 - local.get $l3889 - i32.add - local.set $l3890 - local.get $l3889 - local.get $l3890 - i32.add - local.set $l3891 - local.get $l3890 - local.get $l3891 - i32.add - local.set $l3892 - local.get $l3891 - local.get $l3892 - i32.add - local.set $l3893 - local.get $l3892 - local.get $l3893 - i32.add - local.set $l3894 - local.get $l3893 - local.get $l3894 - i32.add - local.set $l3895 - local.get $l3894 - local.get $l3895 - i32.add - local.set $l3896 - local.get $l3895 - local.get $l3896 - i32.add - local.set $l3897 - local.get $l3896 - local.get $l3897 - i32.add - local.set $l3898 - local.get $l3897 - local.get $l3898 - i32.add - local.set $l3899 - local.get $l3898 - local.get $l3899 - i32.add - local.set $l3900 - local.get $l3899 - local.get $l3900 - i32.add - local.set $l3901 - local.get $l3900 - local.get $l3901 - i32.add - local.set $l3902 - local.get $l3901 - local.get $l3902 - i32.add - local.set $l3903 - local.get $l3902 - local.get $l3903 - i32.add - local.set $l3904 - local.get $l3903 - local.get $l3904 - i32.add - local.set $l3905 - local.get $l3904 - local.get $l3905 - i32.add - local.set $l3906 - local.get $l3905 - local.get $l3906 - i32.add - local.set $l3907 - local.get $l3906 - local.get $l3907 - i32.add - local.set $l3908 - local.get $l3907 - local.get $l3908 - i32.add - local.set $l3909 - local.get $l3908 - local.get $l3909 - i32.add - local.set $l3910 - local.get $l3909 - local.get $l3910 - i32.add - local.set $l3911 - local.get $l3910 - local.get $l3911 - i32.add - local.set $l3912 - local.get $l3911 - local.get $l3912 - i32.add - local.set $l3913 - local.get $l3912 - local.get $l3913 - i32.add - local.set $l3914 - local.get $l3913 - local.get $l3914 - i32.add - local.set $l3915 - local.get $l3914 - local.get $l3915 - i32.add - local.set $l3916 - local.get $l3915 - local.get $l3916 - i32.add - local.set $l3917 - local.get $l3916 - local.get $l3917 - i32.add - local.set $l3918 - local.get $l3917 - local.get $l3918 - i32.add - local.set $l3919 - local.get $l3918 - local.get $l3919 - i32.add - local.set $l3920 - local.get $l3919 - local.get $l3920 - i32.add - local.set $l3921 - local.get $l3920 - local.get $l3921 - i32.add - local.set $l3922 - local.get $l3921 - local.get $l3922 - i32.add - local.set $l3923 - local.get $l3922 - local.get $l3923 - i32.add - local.set $l3924 - local.get $l3923 - local.get $l3924 - i32.add - local.set $l3925 - local.get $l3924 - local.get $l3925 - i32.add - local.set $l3926 - local.get $l3925 - local.get $l3926 - i32.add - local.set $l3927 - local.get $l3926 - local.get $l3927 - i32.add - local.set $l3928 - local.get $l3927 - local.get $l3928 - i32.add - local.set $l3929 - local.get $l3928 - local.get $l3929 - i32.add - local.set $l3930 - local.get $l3929 - local.get $l3930 - i32.add - local.set $l3931 - local.get $l3930 - local.get $l3931 - i32.add - local.set $l3932 - local.get $l3931 - local.get $l3932 - i32.add - local.set $l3933 - local.get $l3932 - local.get $l3933 - i32.add - local.set $l3934 - local.get $l3933 - local.get $l3934 - i32.add - local.set $l3935 - local.get $l3934 - local.get $l3935 - i32.add - local.set $l3936 - local.get $l3935 - local.get $l3936 - i32.add - local.set $l3937 - local.get $l3936 - local.get $l3937 - i32.add - local.set $l3938 - local.get $l3937 - local.get $l3938 - i32.add - local.set $l3939 - local.get $l3938 - local.get $l3939 - i32.add - local.set $l3940 - local.get $l3939 - local.get $l3940 - i32.add - local.set $l3941 - local.get $l3940 - local.get $l3941 - i32.add - local.set $l3942 - local.get $l3941 - local.get $l3942 - i32.add - local.set $l3943 - local.get $l3942 - local.get $l3943 - i32.add - local.set $l3944 - local.get $l3943 - local.get $l3944 - i32.add - local.set $l3945 - local.get $l3944 - local.get $l3945 - i32.add - local.set $l3946 - local.get $l3945 - local.get $l3946 - i32.add - local.set $l3947 - local.get $l3946 - local.get $l3947 - i32.add - local.set $l3948 - local.get $l3947 - local.get $l3948 - i32.add - local.set $l3949 - local.get $l3948 - local.get $l3949 - i32.add - local.set $l3950 - local.get $l3949 - local.get $l3950 - i32.add - local.set $l3951 - local.get $l3950 - local.get $l3951 - i32.add - local.set $l3952 - local.get $l3951 - local.get $l3952 - i32.add - local.set $l3953 - local.get $l3952 - local.get $l3953 - i32.add - local.set $l3954 - local.get $l3953 - local.get $l3954 - i32.add - local.set $l3955 - local.get $l3954 - local.get $l3955 - i32.add - local.set $l3956 - local.get $l3955 - local.get $l3956 - i32.add - local.set $l3957 - local.get $l3956 - local.get $l3957 - i32.add - local.set $l3958 - local.get $l3957 - local.get $l3958 - i32.add - local.set $l3959 - local.get $l3958 - local.get $l3959 - i32.add - local.set $l3960 - local.get $l3959 - local.get $l3960 - i32.add - local.set $l3961 - local.get $l3960 - local.get $l3961 - i32.add - local.set $l3962 - local.get $l3961 - local.get $l3962 - i32.add - local.set $l3963 - local.get $l3962 - local.get $l3963 - i32.add - local.set $l3964 - local.get $l3963 - local.get $l3964 - i32.add - local.set $l3965 - local.get $l3964 - local.get $l3965 - i32.add - local.set $l3966 - local.get $l3965 - local.get $l3966 - i32.add - local.set $l3967 - local.get $l3966 - local.get $l3967 - i32.add - local.set $l3968 - local.get $l3967 - local.get $l3968 - i32.add - local.set $l3969 - local.get $l3968 - local.get $l3969 - i32.add - local.set $l3970 - local.get $l3969 - local.get $l3970 - i32.add - local.set $l3971 - local.get $l3970 - local.get $l3971 - i32.add - local.set $l3972 - local.get $l3971 - local.get $l3972 - i32.add - local.set $l3973 - local.get $l3972 - local.get $l3973 - i32.add - local.set $l3974 - local.get $l3973 - local.get $l3974 - i32.add - local.set $l3975 - local.get $l3974 - local.get $l3975 - i32.add - local.set $l3976 - local.get $l3975 - local.get $l3976 - i32.add - local.set $l3977 - local.get $l3976 - local.get $l3977 - i32.add - local.set $l3978 - local.get $l3977 - local.get $l3978 - i32.add - local.set $l3979 - local.get $l3978 - local.get $l3979 - i32.add - local.set $l3980 - local.get $l3979 - local.get $l3980 - i32.add - local.set $l3981 - local.get $l3980 - local.get $l3981 - i32.add - local.set $l3982 - local.get $l3981 - local.get $l3982 - i32.add - local.set $l3983 - local.get $l3982 - local.get $l3983 - i32.add - local.set $l3984 - local.get $l3983 - local.get $l3984 - i32.add - local.set $l3985 - local.get $l3984 - local.get $l3985 - i32.add - local.set $l3986 - local.get $l3985 - local.get $l3986 - i32.add - local.set $l3987 - local.get $l3986 - local.get $l3987 - i32.add - local.set $l3988 - local.get $l3987 - local.get $l3988 - i32.add - local.set $l3989 - local.get $l3988 - local.get $l3989 - i32.add - local.set $l3990 - local.get $l3989 - local.get $l3990 - i32.add - local.set $l3991 - local.get $l3990 - local.get $l3991 - i32.add - local.set $l3992 - local.get $l3991 - local.get $l3992 - i32.add - local.set $l3993 - local.get $l3992 - local.get $l3993 - i32.add - local.set $l3994 - local.get $l3993 - local.get $l3994 - i32.add - local.set $l3995 - local.get $l3994 - local.get $l3995 - i32.add - local.set $l3996 - local.get $l3995 - local.get $l3996 - i32.add - local.set $l3997 - local.get $l3996 - local.get $l3997 - i32.add - local.set $l3998 - local.get $l3997 - local.get $l3998 - i32.add - local.set $l3999 - local.get $l3998 - local.get $l3999 - i32.add - local.set $l4000 - local.get $l3999 - local.get $l4000 - i32.add - local.set $l4001 - local.get $l4000 - local.get $l4001 - i32.add - local.set $l4002 - local.get $l4001 - local.get $l4002 - i32.add - local.set $l4003 - local.get $l4002 - local.get $l4003 - i32.add - local.set $l4004 - local.get $l4003 - local.get $l4004 - i32.add - local.set $l4005 - local.get $l4004 - local.get $l4005 - i32.add - local.set $l4006 - local.get $l4005 - local.get $l4006 - i32.add - local.set $l4007 - local.get $l4006 - local.get $l4007 - i32.add - local.set $l4008 - local.get $l4007 - local.get $l4008 - i32.add - local.set $l4009 - local.get $l4008 - local.get $l4009 - i32.add - local.set $l4010 - local.get $l4009 - local.get $l4010 - i32.add - local.set $l4011 - local.get $l4010 - local.get $l4011 - i32.add - local.set $l4012 - local.get $l4011 - local.get $l4012 - i32.add - local.set $l4013 - local.get $l4012 - local.get $l4013 - i32.add - local.set $l4014 - local.get $l4013 - local.get $l4014 - i32.add - local.set $l4015 - local.get $l4014 - local.get $l4015 - i32.add - local.set $l4016 - local.get $l4015 - local.get $l4016 - i32.add - local.set $l4017 - local.get $l4016 - local.get $l4017 - i32.add - local.set $l4018 - local.get $l4017 - local.get $l4018 - i32.add - local.set $l4019 - local.get $l4018 - local.get $l4019 - i32.add - local.set $l4020 - local.get $l4019 - local.get $l4020 - i32.add - local.set $l4021 - local.get $l4020 - local.get $l4021 - i32.add - local.set $l4022 - local.get $l4021 - local.get $l4022 - i32.add - local.set $l4023 - local.get $l4022 - local.get $l4023 - i32.add - local.set $l4024 - local.get $l4023 - local.get $l4024 - i32.add - local.set $l4025 - local.get $l4024 - local.get $l4025 - i32.add - local.set $l4026 - local.get $l4025 - local.get $l4026 - i32.add - local.set $l4027 - local.get $l4026 - local.get $l4027 - i32.add - local.set $l4028 - local.get $l4027 - local.get $l4028 - i32.add - local.set $l4029 - local.get $l4028 - local.get $l4029 - i32.add - local.set $l4030 - local.get $l4029 - local.get $l4030 - i32.add - local.set $l4031 - local.get $l4030 - local.get $l4031 - i32.add - local.set $l4032 - local.get $l4031 - local.get $l4032 - i32.add - local.set $l4033 - local.get $l4032 - local.get $l4033 - i32.add - local.set $l4034 - local.get $l4033 - local.get $l4034 - i32.add - local.set $l4035 - local.get $l4034 - local.get $l4035 - i32.add - local.set $l4036 - local.get $l4035 - local.get $l4036 - i32.add - local.set $l4037 - local.get $l4036 - local.get $l4037 - i32.add - local.set $l4038 - local.get $l4037 - local.get $l4038 - i32.add - local.set $l4039 - local.get $l4038 - local.get $l4039 - i32.add - local.set $l4040 - local.get $l4039 - local.get $l4040 - i32.add - local.set $l4041 - local.get $l4040 - local.get $l4041 - i32.add - local.set $l4042 - local.get $l4041 - local.get $l4042 - i32.add - local.set $l4043 - local.get $l4042 - local.get $l4043 - i32.add - local.set $l4044 - local.get $l4043 - local.get $l4044 - i32.add - local.set $l4045 - local.get $l4044 - local.get $l4045 - i32.add - local.set $l4046 - local.get $l4045 - local.get $l4046 - i32.add - local.set $l4047 - local.get $l4046 - local.get $l4047 - i32.add - local.set $l4048 - local.get $l4047 - local.get $l4048 - i32.add - local.set $l4049 - local.get $l4048 - local.get $l4049 - i32.add - local.set $l4050 - local.get $l4049 - local.get $l4050 - i32.add - local.set $l4051 - local.get $l4050 - local.get $l4051 - i32.add - local.set $l4052 - local.get $l4051 - local.get $l4052 - i32.add - local.set $l4053 - local.get $l4052 - local.get $l4053 - i32.add - local.set $l4054 - local.get $l4053 - local.get $l4054 - i32.add - local.set $l4055 - local.get $l4054 - local.get $l4055 - i32.add - local.set $l4056 - local.get $l4055 - local.get $l4056 - i32.add - local.set $l4057 - local.get $l4056 - local.get $l4057 - i32.add - local.set $l4058 - local.get $l4057 - local.get $l4058 - i32.add - local.set $l4059 - local.get $l4058 - local.get $l4059 - i32.add - local.set $l4060 - local.get $l4059 - local.get $l4060 - i32.add - local.set $l4061 - local.get $l4060 - local.get $l4061 - i32.add - local.set $l4062 - local.get $l4061 - local.get $l4062 - i32.add - local.set $l4063 - local.get $l4062 - local.get $l4063 - i32.add - local.set $l4064 - local.get $l4063 - local.get $l4064 - i32.add - local.set $l4065 - local.get $l4064 - local.get $l4065 - i32.add - local.set $l4066 - local.get $l4065 - local.get $l4066 - i32.add - local.set $l4067 - local.get $l4066 - local.get $l4067 - i32.add - local.set $l4068 - local.get $l4067 - local.get $l4068 - i32.add - local.set $l4069 - local.get $l4068 - local.get $l4069 - i32.add - local.set $l4070 - local.get $l4069 - local.get $l4070 - i32.add - local.set $l4071 - local.get $l4070 - local.get $l4071 - i32.add - local.set $l4072 - local.get $l4071 - local.get $l4072 - i32.add - local.set $l4073 - local.get $l4072 - local.get $l4073 - i32.add - local.set $l4074 - local.get $l4073 - local.get $l4074 - i32.add - local.set $l4075 - local.get $l4074 - local.get $l4075 - i32.add - local.set $l4076 - local.get $l4075 - local.get $l4076 - i32.add - local.set $l4077 - local.get $l4076 - local.get $l4077 - i32.add - local.set $l4078 - local.get $l4077 - local.get $l4078 - i32.add - local.set $l4079 - local.get $l4078 - local.get $l4079 - i32.add - local.set $l4080 - local.get $l4079 - local.get $l4080 - i32.add - local.set $l4081 - local.get $l4080 - local.get $l4081 - i32.add - local.set $l4082 - local.get $l4081 - local.get $l4082 - i32.add - local.set $l4083 - local.get $l4082 - local.get $l4083 - i32.add - local.set $l4084 - local.get $l4083 - local.get $l4084 - i32.add - local.set $l4085 - local.get $l4084 - local.get $l4085 - i32.add - local.set $l4086 - local.get $l4085 - local.get $l4086 - i32.add - local.set $l4087 - local.get $l4086 - local.get $l4087 - i32.add - local.set $l4088 - local.get $l4087 - local.get $l4088 - i32.add - local.set $l4089 - local.get $l4088 - local.get $l4089 - i32.add - local.set $l4090 - local.get $l4089 - local.get $l4090 - i32.add - local.set $l4091 - local.get $l4090 - local.get $l4091 - i32.add - local.set $l4092 - local.get $l4091 - local.get $l4092 - i32.add - local.set $l4093 - local.get $l4092 - local.get $l4093 - i32.add - local.set $l4094 - local.get $l4093 - local.get $l4094 - i32.add - local.set $l4095 - local.get $l4094 - local.get $l4095 - i32.add - local.set $l4096 - local.get $l4095 - local.get $l4096 - i32.add - local.set $l4097 - local.get $l4096 - local.get $l4097 - i32.add - local.set $l4098 - local.get $l4097 - local.get $l4098 - i32.add - local.set $l4099 - local.get $l4098 - local.get $l4099 - i32.add - local.set $l4100 - local.get $l4099 - local.get $l4100 - i32.add - local.set $l4101 - local.get $l4100 - local.get $l4101 - i32.add - local.set $l4102 - local.get $l4101 - local.get $l4102 - i32.add - local.set $l4103 - local.get $l4102 - local.get $l4103 - i32.add - local.set $l4104 - local.get $l4103 - local.get $l4104 - i32.add - local.set $l4105 - local.get $l4104 - local.get $l4105 - i32.add - local.set $l4106 - local.get $l4105 - local.get $l4106 - i32.add - local.set $l4107 - local.get $l4106 - local.get $l4107 - i32.add - local.set $l4108 - local.get $l4107 - local.get $l4108 - i32.add - local.set $l4109 - local.get $l4108 - local.get $l4109 - i32.add - local.set $l4110 - local.get $l4109 - local.get $l4110 - i32.add - local.set $l4111 - local.get $l4110 - local.get $l4111 - i32.add - local.set $l4112 - local.get $l4111 - local.get $l4112 - i32.add - local.set $l4113 - local.get $l4112 - local.get $l4113 - i32.add - local.set $l4114 - local.get $l4113 - local.get $l4114 - i32.add - local.set $l4115 - local.get $l4114 - local.get $l4115 - i32.add - local.set $l4116 - local.get $l4115 - local.get $l4116 - i32.add - local.set $l4117 - local.get $l4116 - local.get $l4117 - i32.add - local.set $l4118 - local.get $l4117 - local.get $l4118 - i32.add - local.set $l4119 - local.get $l4118 - local.get $l4119 - i32.add - local.set $l4120 - local.get $l4119 - local.get $l4120 - i32.add - local.set $l4121 - local.get $l4120 - local.get $l4121 - i32.add - local.set $l4122 - local.get $l4121 - local.get $l4122 - i32.add - local.set $l4123 - local.get $l4122 - local.get $l4123 - i32.add - local.set $l4124 - local.get $l4123 - local.get $l4124 - i32.add - local.set $l4125 - local.get $l4124 - local.get $l4125 - i32.add - local.set $l4126 - local.get $l4125 - local.get $l4126 - i32.add - local.set $l4127 - local.get $l4126 - local.get $l4127 - i32.add - local.set $l4128 - local.get $l4127 - local.get $l4128 - i32.add - local.set $l4129 - local.get $l4128 - local.get $l4129 - i32.add - local.set $l4130 - local.get $l4129 - local.get $l4130 - i32.add - local.set $l4131 - local.get $l4130 - local.get $l4131 - i32.add - local.set $l4132 - local.get $l4131 - local.get $l4132 - i32.add - local.set $l4133 - local.get $l4132 - local.get $l4133 - i32.add - local.set $l4134 - local.get $l4133 - local.get $l4134 - i32.add - local.set $l4135 - local.get $l4134 - local.get $l4135 - i32.add - local.set $l4136 - local.get $l4135 - local.get $l4136 - i32.add - local.set $l4137 - local.get $l4136 - local.get $l4137 - i32.add - local.set $l4138 - local.get $l4137 - local.get $l4138 - i32.add - local.set $l4139 - local.get $l4138 - local.get $l4139 - i32.add - local.set $l4140 - local.get $l4139 - local.get $l4140 - i32.add - local.set $l4141 - local.get $l4140 - local.get $l4141 - i32.add - local.set $l4142 - local.get $l4141 - local.get $l4142 - i32.add - local.set $l4143 - local.get $l4142 - local.get $l4143 - i32.add - local.set $l4144 - local.get $l4143 - local.get $l4144 - i32.add - local.set $l4145 - local.get $l4144 - local.get $l4145 - i32.add - local.set $l4146 - local.get $l4145 - local.get $l4146 - i32.add - local.set $l4147 - local.get $l4146 - local.get $l4147 - i32.add - local.set $l4148 - local.get $l4147 - local.get $l4148 - i32.add - local.set $l4149 - local.get $l4148 - local.get $l4149 - i32.add - local.set $l4150 - local.get $l4149 - local.get $l4150 - i32.add - local.set $l4151 - local.get $l4150 - local.get $l4151 - i32.add - local.set $l4152 - local.get $l4151 - local.get $l4152 - i32.add - local.set $l4153 - local.get $l4152 - local.get $l4153 - i32.add - local.set $l4154 - local.get $l4153 - local.get $l4154 - i32.add - local.set $l4155 - local.get $l4154 - local.get $l4155 - i32.add - local.set $l4156 - local.get $l4155 - local.get $l4156 - i32.add - local.set $l4157 - local.get $l4156 - local.get $l4157 - i32.add - local.set $l4158 - local.get $l4157 - local.get $l4158 - i32.add - local.set $l4159 - local.get $l4158 - local.get $l4159 - i32.add - local.set $l4160 - local.get $l4159 - local.get $l4160 - i32.add - local.set $l4161 - local.get $l4160 - local.get $l4161 - i32.add - local.set $l4162 - local.get $l4161 - local.get $l4162 - i32.add - local.set $l4163 - local.get $l4162 - local.get $l4163 - i32.add - local.set $l4164 - local.get $l4163 - local.get $l4164 - i32.add - local.set $l4165 - local.get $l4164 - local.get $l4165 - i32.add - local.set $l4166 - local.get $l4165 - local.get $l4166 - i32.add - local.set $l4167 - local.get $l4166 - local.get $l4167 - i32.add - local.set $l4168 - local.get $l4167 - local.get $l4168 - i32.add - local.set $l4169 - local.get $l4168 - local.get $l4169 - i32.add - local.set $l4170 - local.get $l4169 - local.get $l4170 - i32.add - local.set $l4171 - local.get $l4170 - local.get $l4171 - i32.add - local.set $l4172 - local.get $l4171 - local.get $l4172 - i32.add - local.set $l4173 - local.get $l4172 - local.get $l4173 - i32.add - local.set $l4174 - local.get $l4173 - local.get $l4174 - i32.add - local.set $l4175 - local.get $l4174 - local.get $l4175 - i32.add - local.set $l4176 - local.get $l4175 - local.get $l4176 - i32.add - local.set $l4177 - local.get $l4176 - local.get $l4177 - i32.add - local.set $l4178 - local.get $l4177 - local.get $l4178 - i32.add - local.set $l4179 - local.get $l4178 - local.get $l4179 - i32.add - local.set $l4180 - local.get $l4179 - local.get $l4180 - i32.add - local.set $l4181 - local.get $l4180 - local.get $l4181 - i32.add - local.set $l4182 - local.get $l4181 - local.get $l4182 - i32.add - local.set $l4183 - local.get $l4182 - local.get $l4183 - i32.add - local.set $l4184 - local.get $l4183 - local.get $l4184 - i32.add - local.set $l4185 - local.get $l4184 - local.get $l4185 - i32.add - local.set $l4186 - local.get $l4185 - local.get $l4186 - i32.add - local.set $l4187 - local.get $l4186 - local.get $l4187 - i32.add - local.set $l4188 - local.get $l4187 - local.get $l4188 - i32.add - local.set $l4189 - local.get $l4188 - local.get $l4189 - i32.add - local.set $l4190 - local.get $l4189 - local.get $l4190 - i32.add - local.set $l4191 - local.get $l4190 - local.get $l4191 - i32.add - local.set $l4192 - local.get $l4191 - local.get $l4192 - i32.add - local.set $l4193 - local.get $l4192 - local.get $l4193 - i32.add - local.set $l4194 - local.get $l4193 - local.get $l4194 - i32.add - local.set $l4195 - local.get $l4194 - local.get $l4195 - i32.add - local.set $l4196 - local.get $l4195 - local.get $l4196 - i32.add - local.set $l4197 - local.get $l4196 - local.get $l4197 - i32.add - local.set $l4198 - local.get $l4197 - local.get $l4198 - i32.add - local.set $l4199 - local.get $l4198 - local.get $l4199 - i32.add - local.set $l4200 - local.get $l4199 - local.get $l4200 - i32.add - local.set $l4201 - local.get $l4200 - local.get $l4201 - i32.add - local.set $l4202 - local.get $l4201 - local.get $l4202 - i32.add - local.set $l4203 - local.get $l4202 - local.get $l4203 - i32.add - local.set $l4204 - local.get $l4203 - local.get $l4204 - i32.add - local.set $l4205 - local.get $l4204 - local.get $l4205 - i32.add - local.set $l4206 - local.get $l4205 - local.get $l4206 - i32.add - local.set $l4207 - local.get $l4206 - local.get $l4207 - i32.add - local.set $l4208 - local.get $l4207 - local.get $l4208 - i32.add - local.set $l4209 - local.get $l4208 - local.get $l4209 - i32.add - local.set $l4210 - local.get $l4209 - local.get $l4210 - i32.add - local.set $l4211 - local.get $l4210 - local.get $l4211 - i32.add - local.set $l4212 - local.get $l4211 - local.get $l4212 - i32.add - local.set $l4213 - local.get $l4212 - local.get $l4213 - i32.add - local.set $l4214 - local.get $l4213 - local.get $l4214 - i32.add - local.set $l4215 - local.get $l4214 - local.get $l4215 - i32.add - local.set $l4216 - local.get $l4215 - local.get $l4216 - i32.add - local.set $l4217 - local.get $l4216 - local.get $l4217 - i32.add - local.set $l4218 - local.get $l4217 - local.get $l4218 - i32.add - local.set $l4219 - local.get $l4218 - local.get $l4219 - i32.add - local.set $l4220 - local.get $l4219 - local.get $l4220 - i32.add - local.set $l4221 - local.get $l4220 - local.get $l4221 - i32.add - local.set $l4222 - local.get $l4221 - local.get $l4222 - i32.add - local.set $l4223 - local.get $l4222 - local.get $l4223 - i32.add - local.set $l4224 - local.get $l4223 - local.get $l4224 - i32.add - local.set $l4225 - local.get $l4224 - local.get $l4225 - i32.add - local.set $l4226 - local.get $l4225 - local.get $l4226 - i32.add - local.set $l4227 - local.get $l4226 - local.get $l4227 - i32.add - local.set $l4228 - local.get $l4227 - local.get $l4228 - i32.add - local.set $l4229 - local.get $l4228 - local.get $l4229 - i32.add - local.set $l4230 - local.get $l4229 - local.get $l4230 - i32.add - local.set $l4231 - local.get $l4230 - local.get $l4231 - i32.add - local.set $l4232 - local.get $l4231 - local.get $l4232 - i32.add - local.set $l4233 - local.get $l4232 - local.get $l4233 - i32.add - local.set $l4234 - local.get $l4233 - local.get $l4234 - i32.add - local.set $l4235 - local.get $l4234 - local.get $l4235 - i32.add - local.set $l4236 - local.get $l4235 - local.get $l4236 - i32.add - local.set $l4237 - local.get $l4236 - local.get $l4237 - i32.add - local.set $l4238 - local.get $l4237 - local.get $l4238 - i32.add - local.set $l4239 - local.get $l4238 - local.get $l4239 - i32.add - local.set $l4240 - local.get $l4239 - local.get $l4240 - i32.add - local.set $l4241 - local.get $l4240 - local.get $l4241 - i32.add - local.set $l4242 - local.get $l4241 - local.get $l4242 - i32.add - local.set $l4243 - local.get $l4242 - local.get $l4243 - i32.add - local.set $l4244 - local.get $l4243 - local.get $l4244 - i32.add - local.set $l4245 - local.get $l4244 - local.get $l4245 - i32.add - local.set $l4246 - local.get $l4245 - local.get $l4246 - i32.add - local.set $l4247 - local.get $l4246 - local.get $l4247 - i32.add - local.set $l4248 - local.get $l4247 - local.get $l4248 - i32.add - local.set $l4249 - local.get $l4248 - local.get $l4249 - i32.add - local.set $l4250 - local.get $l4249 - local.get $l4250 - i32.add - local.set $l4251 - local.get $l4250 - local.get $l4251 - i32.add - local.set $l4252 - local.get $l4251 - local.get $l4252 - i32.add - local.set $l4253 - local.get $l4252 - local.get $l4253 - i32.add - local.set $l4254 - local.get $l4253 - local.get $l4254 - i32.add - local.set $l4255 - local.get $l4254 - local.get $l4255 - i32.add - local.set $l4256 - local.get $l4255 - local.get $l4256 - i32.add - local.set $l4257 - local.get $l4256 - local.get $l4257 - i32.add - local.set $l4258 - local.get $l4257 - local.get $l4258 - i32.add - local.set $l4259 - local.get $l4258 - local.get $l4259 - i32.add - local.set $l4260 - local.get $l4259 - local.get $l4260 - i32.add - local.set $l4261 - local.get $l4260 - local.get $l4261 - i32.add - local.set $l4262 - local.get $l4261 - local.get $l4262 - i32.add - local.set $l4263 - local.get $l4262 - local.get $l4263 - i32.add - local.set $l4264 - local.get $l4263 - local.get $l4264 - i32.add - local.set $l4265 - local.get $l4264 - local.get $l4265 - i32.add - local.set $l4266 - local.get $l4265 - local.get $l4266 - i32.add - local.set $l4267 - local.get $l4266 - local.get $l4267 - i32.add - local.set $l4268 - local.get $l4267 - local.get $l4268 - i32.add - local.set $l4269 - local.get $l4268 - local.get $l4269 - i32.add - local.set $l4270 - local.get $l4269 - local.get $l4270 - i32.add - local.set $l4271 - local.get $l4270 - local.get $l4271 - i32.add - local.set $l4272 - local.get $l4271 - local.get $l4272 - i32.add - local.set $l4273 - local.get $l4272 - local.get $l4273 - i32.add - local.set $l4274 - local.get $l4273 - local.get $l4274 - i32.add - local.set $l4275 - local.get $l4274 - local.get $l4275 - i32.add - local.set $l4276 - local.get $l4275 - local.get $l4276 - i32.add - local.set $l4277 - local.get $l4276 - local.get $l4277 - i32.add - local.set $l4278 - local.get $l4277 - local.get $l4278 - i32.add - local.set $l4279 - local.get $l4278 - local.get $l4279 - i32.add - local.set $l4280 - local.get $l4279 - local.get $l4280 - i32.add - local.set $l4281 - local.get $l4280 - local.get $l4281 - i32.add - local.set $l4282 - local.get $l4281 - local.get $l4282 - i32.add - local.set $l4283 - local.get $l4282 - local.get $l4283 - i32.add - local.set $l4284 - local.get $l4283 - local.get $l4284 - i32.add - local.set $l4285 - local.get $l4284 - local.get $l4285 - i32.add - local.set $l4286 - local.get $l4285 - local.get $l4286 - i32.add - local.set $l4287 - local.get $l4286 - local.get $l4287 - i32.add - local.set $l4288 - local.get $l4287 - local.get $l4288 - i32.add - local.set $l4289 - local.get $l4288 - local.get $l4289 - i32.add - local.set $l4290 - local.get $l4289 - local.get $l4290 - i32.add - local.set $l4291 - local.get $l4290 - local.get $l4291 - i32.add - local.set $l4292 - local.get $l4291 - local.get $l4292 - i32.add - local.set $l4293 - local.get $l4292 - local.get $l4293 - i32.add - local.set $l4294 - local.get $l4293 - local.get $l4294 - i32.add - local.set $l4295 - local.get $l4294 - local.get $l4295 - i32.add - local.set $l4296 - local.get $l4295 - local.get $l4296 - i32.add - local.set $l4297 - local.get $l4296 - local.get $l4297 - i32.add - local.set $l4298 - local.get $l4297 - local.get $l4298 - i32.add - local.set $l4299 - local.get $l4298 - local.get $l4299 - i32.add - local.set $l4300 - local.get $l4299 - local.get $l4300 - i32.add - local.set $l4301 - local.get $l4300 - local.get $l4301 - i32.add - local.set $l4302 - local.get $l4301 - local.get $l4302 - i32.add - local.set $l4303 - local.get $l4302 - local.get $l4303 - i32.add - local.set $l4304 - local.get $l4303 - local.get $l4304 - i32.add - local.set $l4305 - local.get $l4304 - local.get $l4305 - i32.add - local.set $l4306 - local.get $l4305 - local.get $l4306 - i32.add - local.set $l4307 - local.get $l4306 - local.get $l4307 - i32.add - local.set $l4308 - local.get $l4307 - local.get $l4308 - i32.add - local.set $l4309 - local.get $l4308 - local.get $l4309 - i32.add - local.set $l4310 - local.get $l4309 - local.get $l4310 - i32.add - local.set $l4311 - local.get $l4310 - local.get $l4311 - i32.add - local.set $l4312 - local.get $l4311 - local.get $l4312 - i32.add - local.set $l4313 - local.get $l4312 - local.get $l4313 - i32.add - local.set $l4314 - local.get $l4313 - local.get $l4314 - i32.add - local.set $l4315 - local.get $l4314 - local.get $l4315 - i32.add - local.set $l4316 - local.get $l4315 - local.get $l4316 - i32.add - local.set $l4317 - local.get $l4316 - local.get $l4317 - i32.add - local.set $l4318 - local.get $l4317 - local.get $l4318 - i32.add - local.set $l4319 - local.get $l4318 - local.get $l4319 - i32.add - local.set $l4320 - local.get $l4319 - local.get $l4320 - i32.add - local.set $l4321 - local.get $l4320 - local.get $l4321 - i32.add - local.set $l4322 - local.get $l4321 - local.get $l4322 - i32.add - local.set $l4323 - local.get $l4322 - local.get $l4323 - i32.add - local.set $l4324 - local.get $l4323 - local.get $l4324 - i32.add - local.set $l4325 - local.get $l4324 - local.get $l4325 - i32.add - local.set $l4326 - local.get $l4325 - local.get $l4326 - i32.add - local.set $l4327 - local.get $l4326 - local.get $l4327 - i32.add - local.set $l4328 - local.get $l4327 - local.get $l4328 - i32.add - local.set $l4329 - local.get $l4328 - local.get $l4329 - i32.add - local.set $l4330 - local.get $l4329 - local.get $l4330 - i32.add - local.set $l4331 - local.get $l4330 - local.get $l4331 - i32.add - local.set $l4332 - local.get $l4331 - local.get $l4332 - i32.add - local.set $l4333 - local.get $l4332 - local.get $l4333 - i32.add - local.set $l4334 - local.get $l4333 - local.get $l4334 - i32.add - local.set $l4335 - local.get $l4334 - local.get $l4335 - i32.add - local.set $l4336 - local.get $l4335 - local.get $l4336 - i32.add - local.set $l4337 - local.get $l4336 - local.get $l4337 - i32.add - local.set $l4338 - local.get $l4337 - local.get $l4338 - i32.add - local.set $l4339 - local.get $l4338 - local.get $l4339 - i32.add - local.set $l4340 - local.get $l4339 - local.get $l4340 - i32.add - local.set $l4341 - local.get $l4340 - local.get $l4341 - i32.add - local.set $l4342 - local.get $l4341 - local.get $l4342 - i32.add - local.set $l4343 - local.get $l4342 - local.get $l4343 - i32.add - local.set $l4344 - local.get $l4343 - local.get $l4344 - i32.add - local.set $l4345 - local.get $l4344 - local.get $l4345 - i32.add - local.set $l4346 - local.get $l4345 - local.get $l4346 - i32.add - local.set $l4347 - local.get $l4346 - local.get $l4347 - i32.add - local.set $l4348 - local.get $l4347 - local.get $l4348 - i32.add - local.set $l4349 - local.get $l4348 - local.get $l4349 - i32.add - local.set $l4350 - local.get $l4349 - local.get $l4350 - i32.add - local.set $l4351 - local.get $l4350 - local.get $l4351 - i32.add - local.set $l4352 - local.get $l4351 - local.get $l4352 - i32.add - local.set $l4353 - local.get $l4352 - local.get $l4353 - i32.add - local.set $l4354 - local.get $l4353 - local.get $l4354 - i32.add - local.set $l4355 - local.get $l4354 - local.get $l4355 - i32.add - local.set $l4356 - local.get $l4355 - local.get $l4356 - i32.add - local.set $l4357 - local.get $l4356 - local.get $l4357 - i32.add - local.set $l4358 - local.get $l4357 - local.get $l4358 - i32.add - local.set $l4359 - local.get $l4358 - local.get $l4359 - i32.add - local.set $l4360 - local.get $l4359 - local.get $l4360 - i32.add - local.set $l4361 - local.get $l4360 - local.get $l4361 - i32.add - local.set $l4362 - local.get $l4361 - local.get $l4362 - i32.add - local.set $l4363 - local.get $l4362 - local.get $l4363 - i32.add - local.set $l4364 - local.get $l4363 - local.get $l4364 - i32.add - local.set $l4365 - local.get $l4364 - local.get $l4365 - i32.add - local.set $l4366 - local.get $l4365 - local.get $l4366 - i32.add - local.set $l4367 - local.get $l4366 - local.get $l4367 - i32.add - local.set $l4368 - local.get $l4367 - local.get $l4368 - i32.add - local.set $l4369 - local.get $l4368 - local.get $l4369 - i32.add - local.set $l4370 - local.get $l4369 - local.get $l4370 - i32.add - local.set $l4371 - local.get $l4370 - local.get $l4371 - i32.add - local.set $l4372 - local.get $l4371 - local.get $l4372 - i32.add - local.set $l4373 - local.get $l4372 - local.get $l4373 - i32.add - local.set $l4374 - local.get $l4373 - local.get $l4374 - i32.add - local.set $l4375 - local.get $l4374 - local.get $l4375 - i32.add - local.set $l4376 - local.get $l4375 - local.get $l4376 - i32.add - local.set $l4377 - local.get $l4376 - local.get $l4377 - i32.add - local.set $l4378 - local.get $l4377 - local.get $l4378 - i32.add - local.set $l4379 - local.get $l4378 - local.get $l4379 - i32.add - local.set $l4380 - local.get $l4379 - local.get $l4380 - i32.add - local.set $l4381 - local.get $l4380 - local.get $l4381 - i32.add - local.set $l4382 - local.get $l4381 - local.get $l4382 - i32.add - local.set $l4383 - local.get $l4382 - local.get $l4383 - i32.add - local.set $l4384 - local.get $l4383 - local.get $l4384 - i32.add - local.set $l4385 - local.get $l4384 - local.get $l4385 - i32.add - local.set $l4386 - local.get $l4385 - local.get $l4386 - i32.add - local.set $l4387 - local.get $l4386 - local.get $l4387 - i32.add - local.set $l4388 - local.get $l4387 - local.get $l4388 - i32.add - local.set $l4389 - local.get $l4388 - local.get $l4389 - i32.add - local.set $l4390 - local.get $l4389 - local.get $l4390 - i32.add - local.set $l4391 - local.get $l4390 - local.get $l4391 - i32.add - local.set $l4392 - local.get $l4391 - local.get $l4392 - i32.add - local.set $l4393 - local.get $l4392 - local.get $l4393 - i32.add - local.set $l4394 - local.get $l4393 - local.get $l4394 - i32.add - local.set $l4395 - local.get $l4394 - local.get $l4395 - i32.add - local.set $l4396 - local.get $l4395 - local.get $l4396 - i32.add - local.set $l4397 - local.get $l4396 - local.get $l4397 - i32.add - local.set $l4398 - local.get $l4397 - local.get $l4398 - i32.add - local.set $l4399 - local.get $l4398 - local.get $l4399 - i32.add - local.set $l4400 - local.get $l4399 - local.get $l4400 - i32.add - local.set $l4401 - local.get $l4400 - local.get $l4401 - i32.add - local.set $l4402 - local.get $l4401 - local.get $l4402 - i32.add - local.set $l4403 - local.get $l4402 - local.get $l4403 - i32.add - local.set $l4404 - local.get $l4403 - local.get $l4404 - i32.add - local.set $l4405 - local.get $l4404 - local.get $l4405 - i32.add - local.set $l4406 - local.get $l4405 - local.get $l4406 - i32.add - local.set $l4407 - local.get $l4406 - local.get $l4407 - i32.add - local.set $l4408 - local.get $l4407 - local.get $l4408 - i32.add - local.set $l4409 - local.get $l4408 - local.get $l4409 - i32.add - local.set $l4410 - local.get $l4409 - local.get $l4410 - i32.add - local.set $l4411 - local.get $l4410 - local.get $l4411 - i32.add - local.set $l4412 - local.get $l4411 - local.get $l4412 - i32.add - local.set $l4413 - local.get $l4412 - local.get $l4413 - i32.add - local.set $l4414 - local.get $l4413 - local.get $l4414 - i32.add - local.set $l4415 - local.get $l4414 - local.get $l4415 - i32.add - local.set $l4416 - local.get $l4415 - local.get $l4416 - i32.add - local.set $l4417 - local.get $l4416 - local.get $l4417 - i32.add - local.set $l4418 - local.get $l4417 - local.get $l4418 - i32.add - local.set $l4419 - local.get $l4418 - local.get $l4419 - i32.add - local.set $l4420 - local.get $l4419 - local.get $l4420 - i32.add - local.set $l4421 - local.get $l4420 - local.get $l4421 - i32.add - local.set $l4422 - local.get $l4421 - local.get $l4422 - i32.add - local.set $l4423 - local.get $l4422 - local.get $l4423 - i32.add - local.set $l4424 - local.get $l4423 - local.get $l4424 - i32.add - local.set $l4425 - local.get $l4424 - local.get $l4425 - i32.add - local.set $l4426 - local.get $l4425 - local.get $l4426 - i32.add - local.set $l4427 - local.get $l4426 - local.get $l4427 - i32.add - local.set $l4428 - local.get $l4427 - local.get $l4428 - i32.add - local.set $l4429 - local.get $l4428 - local.get $l4429 - i32.add - local.set $l4430 - local.get $l4429 - local.get $l4430 - i32.add - local.set $l4431 - local.get $l4430 - local.get $l4431 - i32.add - local.set $l4432 - local.get $l4431 - local.get $l4432 - i32.add - local.set $l4433 - local.get $l4432 - local.get $l4433 - i32.add - local.set $l4434 - local.get $l4433 - local.get $l4434 - i32.add - local.set $l4435 - local.get $l4434 - local.get $l4435 - i32.add - local.set $l4436 - local.get $l4435 - local.get $l4436 - i32.add - local.set $l4437 - local.get $l4436 - local.get $l4437 - i32.add - local.set $l4438 - local.get $l4437 - local.get $l4438 - i32.add - local.set $l4439 - local.get $l4438 - local.get $l4439 - i32.add - local.set $l4440 - local.get $l4439 - local.get $l4440 - i32.add - local.set $l4441 - local.get $l4440 - local.get $l4441 - i32.add - local.set $l4442 - local.get $l4441 - local.get $l4442 - i32.add - local.set $l4443 - local.get $l4442 - local.get $l4443 - i32.add - local.set $l4444 - local.get $l4443 - local.get $l4444 - i32.add - local.set $l4445 - local.get $l4444 - local.get $l4445 - i32.add - local.set $l4446 - local.get $l4445 - local.get $l4446 - i32.add - local.set $l4447 - local.get $l4446 - local.get $l4447 - i32.add - local.set $l4448 - local.get $l4447 - local.get $l4448 - i32.add - local.set $l4449 - local.get $l4448 - local.get $l4449 - i32.add - local.set $l4450 - local.get $l4449 - local.get $l4450 - i32.add - local.set $l4451 - local.get $l4450 - local.get $l4451 - i32.add - local.set $l4452 - local.get $l4451 - local.get $l4452 - i32.add - local.set $l4453 - local.get $l4452 - local.get $l4453 - i32.add - local.set $l4454 - local.get $l4453 - local.get $l4454 - i32.add - local.set $l4455 - local.get $l4454 - local.get $l4455 - i32.add - local.set $l4456 - local.get $l4455 - local.get $l4456 - i32.add - local.set $l4457 - local.get $l4456 - local.get $l4457 - i32.add - local.set $l4458 - local.get $l4457 - local.get $l4458 - i32.add - local.set $l4459 - local.get $l4458 - local.get $l4459 - i32.add - local.set $l4460 - local.get $l4459 - local.get $l4460 - i32.add - local.set $l4461 - local.get $l4460 - local.get $l4461 - i32.add - local.set $l4462 - local.get $l4461 - local.get $l4462 - i32.add - local.set $l4463 - local.get $l4462 - local.get $l4463 - i32.add - local.set $l4464 - local.get $l4463 - local.get $l4464 - i32.add - local.set $l4465 - local.get $l4464 - local.get $l4465 - i32.add - local.set $l4466 - local.get $l4465 - local.get $l4466 - i32.add - local.set $l4467 - local.get $l4466 - local.get $l4467 - i32.add - local.set $l4468 - local.get $l4467 - local.get $l4468 - i32.add - local.set $l4469 - local.get $l4468 - local.get $l4469 - i32.add - local.set $l4470 - local.get $l4469 - local.get $l4470 - i32.add - local.set $l4471 - local.get $l4470 - local.get $l4471 - i32.add - local.set $l4472 - local.get $l4471 - local.get $l4472 - i32.add - local.set $l4473 - local.get $l4472 - local.get $l4473 - i32.add - local.set $l4474 - local.get $l4473 - local.get $l4474 - i32.add - local.set $l4475 - local.get $l4474 - local.get $l4475 - i32.add - local.set $l4476 - local.get $l4475 - local.get $l4476 - i32.add - local.set $l4477 - local.get $l4476 - local.get $l4477 - i32.add - local.set $l4478 - local.get $l4477 - local.get $l4478 - i32.add - local.set $l4479 - local.get $l4478 - local.get $l4479 - i32.add - local.set $l4480 - local.get $l4479 - local.get $l4480 - i32.add - local.set $l4481 - local.get $l4480 - local.get $l4481 - i32.add - local.set $l4482 - local.get $l4481 - local.get $l4482 - i32.add - local.set $l4483 - local.get $l4482 - local.get $l4483 - i32.add - local.set $l4484 - local.get $l4483 - local.get $l4484 - i32.add - local.set $l4485 - local.get $l4484 - local.get $l4485 - i32.add - local.set $l4486 - local.get $l4485 - local.get $l4486 - i32.add - local.set $l4487 - local.get $l4486 - local.get $l4487 - i32.add - local.set $l4488 - local.get $l4487 - local.get $l4488 - i32.add - local.set $l4489 - local.get $l4488 - local.get $l4489 - i32.add - local.set $l4490 - local.get $l4489 - local.get $l4490 - i32.add - local.set $l4491 - local.get $l4490 - local.get $l4491 - i32.add - local.set $l4492 - local.get $l4491 - local.get $l4492 - i32.add - local.set $l4493 - local.get $l4492 - local.get $l4493 - i32.add - local.set $l4494 - local.get $l4493 - local.get $l4494 - i32.add - local.set $l4495 - local.get $l4494 - local.get $l4495 - i32.add - local.set $l4496 - local.get $l4495 - local.get $l4496 - i32.add - local.set $l4497 - local.get $l4496 - local.get $l4497 - i32.add - local.set $l4498 - local.get $l4497 - local.get $l4498 - i32.add - local.set $l4499 - local.get $l4498 - local.get $l4499 - i32.add - local.set $l4500 - local.get $l4499 - local.get $l4500 - i32.add - local.set $l4501 - local.get $l4500 - local.get $l4501 - i32.add - local.set $l4502 - local.get $l4501 - local.get $l4502 - i32.add - local.set $l4503 - local.get $l4502 - local.get $l4503 - i32.add - local.set $l4504 - local.get $l4503 - local.get $l4504 - i32.add - local.set $l4505 - local.get $l4504 - local.get $l4505 - i32.add - local.set $l4506 - local.get $l4505 - local.get $l4506 - i32.add - local.set $l4507 - local.get $l4506 - local.get $l4507 - i32.add - local.set $l4508 - local.get $l4507 - local.get $l4508 - i32.add - local.set $l4509 - local.get $l4508 - local.get $l4509 - i32.add - local.set $l4510 - local.get $l4509 - local.get $l4510 - i32.add - local.set $l4511 - local.get $l4510 - local.get $l4511 - i32.add - local.set $l4512 - local.get $l4511 - local.get $l4512 - i32.add - local.set $l4513 - local.get $l4512 - local.get $l4513 - i32.add - local.set $l4514 - local.get $l4513 - local.get $l4514 - i32.add - local.set $l4515 - local.get $l4514 - local.get $l4515 - i32.add - local.set $l4516 - local.get $l4515 - local.get $l4516 - i32.add - local.set $l4517 - local.get $l4516 - local.get $l4517 - i32.add - local.set $l4518 - local.get $l4517 - local.get $l4518 - i32.add - local.set $l4519 - local.get $l4518 - local.get $l4519 - i32.add - local.set $l4520 - local.get $l4519 - local.get $l4520 - i32.add - local.set $l4521 - local.get $l4520 - local.get $l4521 - i32.add - local.set $l4522 - local.get $l4521 - local.get $l4522 - i32.add - local.set $l4523 - local.get $l4522 - local.get $l4523 - i32.add - local.set $l4524 - local.get $l4523 - local.get $l4524 - i32.add - local.set $l4525 - local.get $l4524 - local.get $l4525 - i32.add - local.set $l4526 - local.get $l4525 - local.get $l4526 - i32.add - local.set $l4527 - local.get $l4526 - local.get $l4527 - i32.add - local.set $l4528 - local.get $l4527 - local.get $l4528 - i32.add - local.set $l4529 - local.get $l4528 - local.get $l4529 - i32.add - local.set $l4530 - local.get $l4529 - local.get $l4530 - i32.add - local.set $l4531 - local.get $l4530 - local.get $l4531 - i32.add - local.set $l4532 - local.get $l4531 - local.get $l4532 - i32.add - local.set $l4533 - local.get $l4532 - local.get $l4533 - i32.add - local.set $l4534 - local.get $l4533 - local.get $l4534 - i32.add - local.set $l4535 - local.get $l4534 - local.get $l4535 - i32.add - local.set $l4536 - local.get $l4535 - local.get $l4536 - i32.add - local.set $l4537 - local.get $l4536 - local.get $l4537 - i32.add - local.set $l4538 - local.get $l4537 - local.get $l4538 - i32.add - local.set $l4539 - local.get $l4538 - local.get $l4539 - i32.add - local.set $l4540 - local.get $l4539 - local.get $l4540 - i32.add - local.set $l4541 - local.get $l4540 - local.get $l4541 - i32.add - local.set $l4542 - local.get $l4541 - local.get $l4542 - i32.add - local.set $l4543 - local.get $l4542 - local.get $l4543 - i32.add - local.set $l4544 - local.get $l4543 - local.get $l4544 - i32.add - local.set $l4545 - local.get $l4544 - local.get $l4545 - i32.add - local.set $l4546 - local.get $l4545 - local.get $l4546 - i32.add - local.set $l4547 - local.get $l4546 - local.get $l4547 - i32.add - local.set $l4548 - local.get $l4547 - local.get $l4548 - i32.add - local.set $l4549 - local.get $l4548 - local.get $l4549 - i32.add - local.set $l4550 - local.get $l4549 - local.get $l4550 - i32.add - local.set $l4551 - local.get $l4550 - local.get $l4551 - i32.add - local.set $l4552 - local.get $l4551 - local.get $l4552 - i32.add - local.set $l4553 - local.get $l4552 - local.get $l4553 - i32.add - local.set $l4554 - local.get $l4553 - local.get $l4554 - i32.add - local.set $l4555 - local.get $l4554 - local.get $l4555 - i32.add - local.set $l4556 - local.get $l4555 - local.get $l4556 - i32.add - local.set $l4557 - local.get $l4556 - local.get $l4557 - i32.add - local.set $l4558 - local.get $l4557 - local.get $l4558 - i32.add - local.set $l4559 - local.get $l4558 - local.get $l4559 - i32.add - local.set $l4560 - local.get $l4559 - local.get $l4560 - i32.add - local.set $l4561 - local.get $l4560 - local.get $l4561 - i32.add - local.set $l4562 - local.get $l4561 - local.get $l4562 - i32.add - local.set $l4563 - local.get $l4562 - local.get $l4563 - i32.add - local.set $l4564 - local.get $l4563 - local.get $l4564 - i32.add - local.set $l4565 - local.get $l4564 - local.get $l4565 - i32.add - local.set $l4566 - local.get $l4565 - local.get $l4566 - i32.add - local.set $l4567 - local.get $l4566 - local.get $l4567 - i32.add - local.set $l4568 - local.get $l4567 - local.get $l4568 - i32.add - local.set $l4569 - local.get $l4568 - local.get $l4569 - i32.add - local.set $l4570 - local.get $l4569 - local.get $l4570 - i32.add - local.set $l4571 - local.get $l4570 - local.get $l4571 - i32.add - local.set $l4572 - local.get $l4571 - local.get $l4572 - i32.add - local.set $l4573 - local.get $l4572 - local.get $l4573 - i32.add - local.set $l4574 - local.get $l4573 - local.get $l4574 - i32.add - local.set $l4575 - local.get $l4574 - local.get $l4575 - i32.add - local.set $l4576 - local.get $l4575 - local.get $l4576 - i32.add - local.set $l4577 - local.get $l4576 - local.get $l4577 - i32.add - local.set $l4578 - local.get $l4577 - local.get $l4578 - i32.add - local.set $l4579 - local.get $l4578 - local.get $l4579 - i32.add - local.set $l4580 - local.get $l4579 - local.get $l4580 - i32.add - local.set $l4581 - local.get $l4580 - local.get $l4581 - i32.add - local.set $l4582 - local.get $l4581 - local.get $l4582 - i32.add - local.set $l4583 - local.get $l4582 - local.get $l4583 - i32.add - local.set $l4584 - local.get $l4583 - local.get $l4584 - i32.add - local.set $l4585 - local.get $l4584 - local.get $l4585 - i32.add - local.set $l4586 - local.get $l4585 - local.get $l4586 - i32.add - local.set $l4587 - local.get $l4586 - local.get $l4587 - i32.add - local.set $l4588 - local.get $l4587 - local.get $l4588 - i32.add - local.set $l4589 - local.get $l4588 - local.get $l4589 - i32.add - local.set $l4590 - local.get $l4589 - local.get $l4590 - i32.add - local.set $l4591 - local.get $l4590 - local.get $l4591 - i32.add - local.set $l4592 - local.get $l4591 - local.get $l4592 - i32.add - local.set $l4593 - local.get $l4592 - local.get $l4593 - i32.add - local.set $l4594 - local.get $l4593 - local.get $l4594 - i32.add - local.set $l4595 - local.get $l4594 - local.get $l4595 - i32.add - local.set $l4596 - local.get $l4595 - local.get $l4596 - i32.add - local.set $l4597 - local.get $l4596 - local.get $l4597 - i32.add - local.set $l4598 - local.get $l4597 - local.get $l4598 - i32.add - local.set $l4599 - local.get $l4598 - local.get $l4599 - i32.add - local.set $l4600 - local.get $l4599 - local.get $l4600 - i32.add - local.set $l4601 - local.get $l4600 - local.get $l4601 - i32.add - local.set $l4602 - local.get $l4601 - local.get $l4602 - i32.add - local.set $l4603 - local.get $l4602 - local.get $l4603 - i32.add - local.set $l4604 - local.get $l4603 - local.get $l4604 - i32.add - local.set $l4605 - local.get $l4604 - local.get $l4605 - i32.add - local.set $l4606 - local.get $l4605 - local.get $l4606 - i32.add - local.set $l4607 - local.get $l4606 - local.get $l4607 - i32.add - local.set $l4608 - local.get $l4607 - local.get $l4608 - i32.add - local.set $l4609 - local.get $l4608 - local.get $l4609 - i32.add - local.set $l4610 - local.get $l4609 - local.get $l4610 - i32.add - local.set $l4611 - local.get $l4610 - local.get $l4611 - i32.add - local.set $l4612 - local.get $l4611 - local.get $l4612 - i32.add - local.set $l4613 - local.get $l4612 - local.get $l4613 - i32.add - local.set $l4614 - local.get $l4613 - local.get $l4614 - i32.add - local.set $l4615 - local.get $l4614 - local.get $l4615 - i32.add - local.set $l4616 - local.get $l4615 - local.get $l4616 - i32.add - local.set $l4617 - local.get $l4616 - local.get $l4617 - i32.add - local.set $l4618 - local.get $l4617 - local.get $l4618 - i32.add - local.set $l4619 - local.get $l4618 - local.get $l4619 - i32.add - local.set $l4620 - local.get $l4619 - local.get $l4620 - i32.add - local.set $l4621 - local.get $l4620 - local.get $l4621 - i32.add - local.set $l4622 - local.get $l4621 - local.get $l4622 - i32.add - local.set $l4623 - local.get $l4622 - local.get $l4623 - i32.add - local.set $l4624 - local.get $l4623 - local.get $l4624 - i32.add - local.set $l4625 - local.get $l4624 - local.get $l4625 - i32.add - local.set $l4626 - local.get $l4625 - local.get $l4626 - i32.add - local.set $l4627 - local.get $l4626 - local.get $l4627 - i32.add - local.set $l4628 - local.get $l4627 - local.get $l4628 - i32.add - local.set $l4629 - local.get $l4628 - local.get $l4629 - i32.add - local.set $l4630 - local.get $l4629 - local.get $l4630 - i32.add - local.set $l4631 - local.get $l4630 - local.get $l4631 - i32.add - local.set $l4632 - local.get $l4631 - local.get $l4632 - i32.add - local.set $l4633 - local.get $l4632 - local.get $l4633 - i32.add - local.set $l4634 - local.get $l4633 - local.get $l4634 - i32.add - local.set $l4635 - local.get $l4634 - local.get $l4635 - i32.add - local.set $l4636 - local.get $l4635 - local.get $l4636 - i32.add - local.set $l4637 - local.get $l4636 - local.get $l4637 - i32.add - local.set $l4638 - local.get $l4637 - local.get $l4638 - i32.add - local.set $l4639 - local.get $l4638 - local.get $l4639 - i32.add - local.set $l4640 - local.get $l4639 - local.get $l4640 - i32.add - local.set $l4641 - local.get $l4640 - local.get $l4641 - i32.add - local.set $l4642 - local.get $l4641 - local.get $l4642 - i32.add - local.set $l4643 - local.get $l4642 - local.get $l4643 - i32.add - local.set $l4644 - local.get $l4643 - local.get $l4644 - i32.add - local.set $l4645 - local.get $l4644 - local.get $l4645 - i32.add - local.set $l4646 - local.get $l4645 - local.get $l4646 - i32.add - local.set $l4647 - local.get $l4646 - local.get $l4647 - i32.add - local.set $l4648 - local.get $l4647 - local.get $l4648 - i32.add - local.set $l4649 - local.get $l4648 - local.get $l4649 - i32.add - local.set $l4650 - local.get $l4649 - local.get $l4650 - i32.add - local.set $l4651 - local.get $l4650 - local.get $l4651 - i32.add - local.set $l4652 - local.get $l4651 - local.get $l4652 - i32.add - local.set $l4653 - local.get $l4652 - local.get $l4653 - i32.add - local.set $l4654 - local.get $l4653 - local.get $l4654 - i32.add - local.set $l4655 - local.get $l4654 - local.get $l4655 - i32.add - local.set $l4656 - local.get $l4655 - local.get $l4656 - i32.add - local.set $l4657 - local.get $l4656 - local.get $l4657 - i32.add - local.set $l4658 - local.get $l4657 - local.get $l4658 - i32.add - local.set $l4659 - local.get $l4658 - local.get $l4659 - i32.add - local.set $l4660 - local.get $l4659 - local.get $l4660 - i32.add - local.set $l4661 - local.get $l4660 - local.get $l4661 - i32.add - local.set $l4662 - local.get $l4661 - local.get $l4662 - i32.add - local.set $l4663 - local.get $l4662 - local.get $l4663 - i32.add - local.set $l4664 - local.get $l4663 - local.get $l4664 - i32.add - local.set $l4665 - local.get $l4664 - local.get $l4665 - i32.add - local.set $l4666 - local.get $l4665 - local.get $l4666 - i32.add - local.set $l4667 - local.get $l4666 - local.get $l4667 - i32.add - local.set $l4668 - local.get $l4667 - local.get $l4668 - i32.add - local.set $l4669 - local.get $l4668 - local.get $l4669 - i32.add - local.set $l4670 - local.get $l4669 - local.get $l4670 - i32.add - local.set $l4671 - local.get $l4670 - local.get $l4671 - i32.add - local.set $l4672 - local.get $l4671 - local.get $l4672 - i32.add - local.set $l4673 - local.get $l4672 - local.get $l4673 - i32.add - local.set $l4674 - local.get $l4673 - local.get $l4674 - i32.add - local.set $l4675 - local.get $l4674 - local.get $l4675 - i32.add - local.set $l4676 - local.get $l4675 - local.get $l4676 - i32.add - local.set $l4677 - local.get $l4676 - local.get $l4677 - i32.add - local.set $l4678 - local.get $l4677 - local.get $l4678 - i32.add - local.set $l4679 - local.get $l4678 - local.get $l4679 - i32.add - local.set $l4680 - local.get $l4679 - local.get $l4680 - i32.add - local.set $l4681 - local.get $l4680 - local.get $l4681 - i32.add - local.set $l4682 - local.get $l4681 - local.get $l4682 - i32.add - local.set $l4683 - local.get $l4682 - local.get $l4683 - i32.add - local.set $l4684 - local.get $l4683 - local.get $l4684 - i32.add - local.set $l4685 - local.get $l4684 - local.get $l4685 - i32.add - local.set $l4686 - local.get $l4685 - local.get $l4686 - i32.add - local.set $l4687 - local.get $l4686 - local.get $l4687 - i32.add - local.set $l4688 - local.get $l4687 - local.get $l4688 - i32.add - local.set $l4689 - local.get $l4688 - local.get $l4689 - i32.add - local.set $l4690 - local.get $l4689 - local.get $l4690 - i32.add - local.set $l4691 - local.get $l4690 - local.get $l4691 - i32.add - local.set $l4692 - local.get $l4691 - local.get $l4692 - i32.add - local.set $l4693 - local.get $l4692 - local.get $l4693 - i32.add - local.set $l4694 - local.get $l4693 - local.get $l4694 - i32.add - local.set $l4695 - local.get $l4694 - local.get $l4695 - i32.add - local.set $l4696 - local.get $l4695 - local.get $l4696 - i32.add - local.set $l4697 - local.get $l4696 - local.get $l4697 - i32.add - local.set $l4698 - local.get $l4697 - local.get $l4698 - i32.add - local.set $l4699 - local.get $l4698 - local.get $l4699 - i32.add - local.set $l4700 - local.get $l4699 - local.get $l4700 - i32.add - local.set $l4701 - local.get $l4700 - local.get $l4701 - i32.add - local.set $l4702 - local.get $l4701 - local.get $l4702 - i32.add - local.set $l4703 - local.get $l4702 - local.get $l4703 - i32.add - local.set $l4704 - local.get $l4703 - local.get $l4704 - i32.add - local.set $l4705 - local.get $l4704 - local.get $l4705 - i32.add - local.set $l4706 - local.get $l4705 - local.get $l4706 - i32.add - local.set $l4707 - local.get $l4706 - local.get $l4707 - i32.add - local.set $l4708 - local.get $l4707 - local.get $l4708 - i32.add - local.set $l4709 - local.get $l4708 - local.get $l4709 - i32.add - local.set $l4710 - local.get $l4709 - local.get $l4710 - i32.add - local.set $l4711 - local.get $l4710 - local.get $l4711 - i32.add - local.set $l4712 - local.get $l4711 - local.get $l4712 - i32.add - local.set $l4713 - local.get $l4712 - local.get $l4713 - i32.add - local.set $l4714 - local.get $l4713 - local.get $l4714 - i32.add - local.set $l4715 - local.get $l4714 - local.get $l4715 - i32.add - local.set $l4716 - local.get $l4715 - local.get $l4716 - i32.add - local.set $l4717 - local.get $l4716 - local.get $l4717 - i32.add - local.set $l4718 - local.get $l4717 - local.get $l4718 - i32.add - local.set $l4719 - local.get $l4718 - local.get $l4719 - i32.add - local.set $l4720 - local.get $l4719 - local.get $l4720 - i32.add - local.set $l4721 - local.get $l4720 - local.get $l4721 - i32.add - local.set $l4722 - local.get $l4721 - local.get $l4722 - i32.add - local.set $l4723 - local.get $l4722 - local.get $l4723 - i32.add - local.set $l4724 - local.get $l4723 - local.get $l4724 - i32.add - local.set $l4725 - local.get $l4724 - local.get $l4725 - i32.add - local.set $l4726 - local.get $l4725 - local.get $l4726 - i32.add - local.set $l4727 - local.get $l4726 - local.get $l4727 - i32.add - local.set $l4728 - local.get $l4727 - local.get $l4728 - i32.add - local.set $l4729 - local.get $l4728 - local.get $l4729 - i32.add - local.set $l4730 - local.get $l4729 - local.get $l4730 - i32.add - local.set $l4731 - local.get $l4730 - local.get $l4731 - i32.add - local.set $l4732 - local.get $l4731 - local.get $l4732 - i32.add - local.set $l4733 - local.get $l4732 - local.get $l4733 - i32.add - local.set $l4734 - local.get $l4733 - local.get $l4734 - i32.add - local.set $l4735 - local.get $l4734 - local.get $l4735 - i32.add - local.set $l4736 - local.get $l4735 - local.get $l4736 - i32.add - local.set $l4737 - local.get $l4736 - local.get $l4737 - i32.add - local.set $l4738 - local.get $l4737 - local.get $l4738 - i32.add - local.set $l4739 - local.get $l4738 - local.get $l4739 - i32.add - local.set $l4740 - local.get $l4739 - local.get $l4740 - i32.add - local.set $l4741 - local.get $l4740 - local.get $l4741 - i32.add - local.set $l4742 - local.get $l4741 - local.get $l4742 - i32.add - local.set $l4743 - local.get $l4742 - local.get $l4743 - i32.add - local.set $l4744 - local.get $l4743 - local.get $l4744 - i32.add - local.set $l4745 - local.get $l4744 - local.get $l4745 - i32.add - local.set $l4746 - local.get $l4745 - local.get $l4746 - i32.add - local.set $l4747 - local.get $l4746 - local.get $l4747 - i32.add - local.set $l4748 - local.get $l4747 - local.get $l4748 - i32.add - local.set $l4749 - local.get $l4748 - local.get $l4749 - i32.add - local.set $l4750 - local.get $l4749 - local.get $l4750 - i32.add - local.set $l4751 - local.get $l4750 - local.get $l4751 - i32.add - local.set $l4752 - local.get $l4751 - local.get $l4752 - i32.add - local.set $l4753 - local.get $l4752 - local.get $l4753 - i32.add - local.set $l4754 - local.get $l4753 - local.get $l4754 - i32.add - local.set $l4755 - local.get $l4754 - local.get $l4755 - i32.add - local.set $l4756 - local.get $l4755 - local.get $l4756 - i32.add - local.set $l4757 - local.get $l4756 - local.get $l4757 - i32.add - local.set $l4758 - local.get $l4757 - local.get $l4758 - i32.add - local.set $l4759 - local.get $l4758 - local.get $l4759 - i32.add - local.set $l4760 - local.get $l4759 - local.get $l4760 - i32.add - local.set $l4761 - local.get $l4760 - local.get $l4761 - i32.add - local.set $l4762 - local.get $l4761 - local.get $l4762 - i32.add - local.set $l4763 - local.get $l4762 - local.get $l4763 - i32.add - local.set $l4764 - local.get $l4763 - local.get $l4764 - i32.add - local.set $l4765 - local.get $l4764 - local.get $l4765 - i32.add - local.set $l4766 - local.get $l4765 - local.get $l4766 - i32.add - local.set $l4767 - local.get $l4766 - local.get $l4767 - i32.add - local.set $l4768 - local.get $l4767 - local.get $l4768 - i32.add - local.set $l4769 - local.get $l4768 - local.get $l4769 - i32.add - local.set $l4770 - local.get $l4769 - local.get $l4770 - i32.add - local.set $l4771 - local.get $l4770 - local.get $l4771 - i32.add - local.set $l4772 - local.get $l4771 - local.get $l4772 - i32.add - local.set $l4773 - local.get $l4772 - local.get $l4773 - i32.add - local.set $l4774 - local.get $l4773 - local.get $l4774 - i32.add - local.set $l4775 - local.get $l4774 - local.get $l4775 - i32.add - local.set $l4776 - local.get $l4775 - local.get $l4776 - i32.add - local.set $l4777 - local.get $l4776 - local.get $l4777 - i32.add - local.set $l4778 - local.get $l4777 - local.get $l4778 - i32.add - local.set $l4779 - local.get $l4778 - local.get $l4779 - i32.add - local.set $l4780 - local.get $l4779 - local.get $l4780 - i32.add - local.set $l4781 - local.get $l4780 - local.get $l4781 - i32.add - local.set $l4782 - local.get $l4781 - local.get $l4782 - i32.add - local.set $l4783 - local.get $l4782 - local.get $l4783 - i32.add - local.set $l4784 - local.get $l4783 - local.get $l4784 - i32.add - local.set $l4785 - local.get $l4784 - local.get $l4785 - i32.add - local.set $l4786 - local.get $l4785 - local.get $l4786 - i32.add - local.set $l4787 - local.get $l4786 - local.get $l4787 - i32.add - local.set $l4788 - local.get $l4787 - local.get $l4788 - i32.add - local.set $l4789 - local.get $l4788 - local.get $l4789 - i32.add - local.set $l4790 - local.get $l4789 - local.get $l4790 - i32.add - local.set $l4791 - local.get $l4790 - local.get $l4791 - i32.add - local.set $l4792 - local.get $l4791 - local.get $l4792 - i32.add - local.set $l4793 - local.get $l4792 - local.get $l4793 - i32.add - local.set $l4794 - local.get $l4793 - local.get $l4794 - i32.add - local.set $l4795 - local.get $l4794 - local.get $l4795 - i32.add - local.set $l4796 - local.get $l4795 - local.get $l4796 - i32.add - local.set $l4797 - local.get $l4796 - local.get $l4797 - i32.add - local.set $l4798 - local.get $l4797 - local.get $l4798 - i32.add - local.set $l4799 - local.get $l4798 - local.get $l4799 - i32.add - local.set $l4800 - local.get $l4799 - local.get $l4800 - i32.add - local.set $l4801 - local.get $l4800 - local.get $l4801 - i32.add - local.set $l4802 - local.get $l4801 - local.get $l4802 - i32.add - local.set $l4803 - local.get $l4802 - local.get $l4803 - i32.add - local.set $l4804 - local.get $l4803 - local.get $l4804 - i32.add - local.set $l4805 - local.get $l4804 - local.get $l4805 - i32.add - local.set $l4806 - local.get $l4805 - local.get $l4806 - i32.add - local.set $l4807 - local.get $l4806 - local.get $l4807 - i32.add - local.set $l4808 - local.get $l4807 - local.get $l4808 - i32.add - local.set $l4809 - local.get $l4808 - local.get $l4809 - i32.add - local.set $l4810 - local.get $l4809 - local.get $l4810 - i32.add - local.set $l4811 - local.get $l4810 - local.get $l4811 - i32.add - local.set $l4812 - local.get $l4811 - local.get $l4812 - i32.add - local.set $l4813 - local.get $l4812 - local.get $l4813 - i32.add - local.set $l4814 - local.get $l4813 - local.get $l4814 - i32.add - local.set $l4815 - local.get $l4814 - local.get $l4815 - i32.add - local.set $l4816 - local.get $l4815 - local.get $l4816 - i32.add - local.set $l4817 - local.get $l4816 - local.get $l4817 - i32.add - local.set $l4818 - local.get $l4817 - local.get $l4818 - i32.add - local.set $l4819 - local.get $l4818 - local.get $l4819 - i32.add - local.set $l4820 - local.get $l4819 - local.get $l4820 - i32.add - local.set $l4821 - local.get $l4820 - local.get $l4821 - i32.add - local.set $l4822 - local.get $l4821 - local.get $l4822 - i32.add - local.set $l4823 - local.get $l4822 - local.get $l4823 - i32.add - local.set $l4824 - local.get $l4823 - local.get $l4824 - i32.add - local.set $l4825 - local.get $l4824 - local.get $l4825 - i32.add - local.set $l4826 - local.get $l4825 - local.get $l4826 - i32.add - local.set $l4827 - local.get $l4826 - local.get $l4827 - i32.add - local.set $l4828 - local.get $l4827 - local.get $l4828 - i32.add - local.set $l4829 - local.get $l4828 - local.get $l4829 - i32.add - local.set $l4830 - local.get $l4829 - local.get $l4830 - i32.add - local.set $l4831 - local.get $l4830 - local.get $l4831 - i32.add - local.set $l4832 - local.get $l4831 - local.get $l4832 - i32.add - local.set $l4833 - local.get $l4832 - local.get $l4833 - i32.add - local.set $l4834 - local.get $l4833 - local.get $l4834 - i32.add - local.set $l4835 - local.get $l4834 - local.get $l4835 - i32.add - local.set $l4836 - local.get $l4835 - local.get $l4836 - i32.add - local.set $l4837 - local.get $l4836 - local.get $l4837 - i32.add - local.set $l4838 - local.get $l4837 - local.get $l4838 - i32.add - local.set $l4839 - local.get $l4838 - local.get $l4839 - i32.add - local.set $l4840 - local.get $l4839 - local.get $l4840 - i32.add - local.set $l4841 - local.get $l4840 - local.get $l4841 - i32.add - local.set $l4842 - local.get $l4841 - local.get $l4842 - i32.add - local.set $l4843 - local.get $l4842 - local.get $l4843 - i32.add - local.set $l4844 - local.get $l4843 - local.get $l4844 - i32.add - local.set $l4845 - local.get $l4844 - local.get $l4845 - i32.add - local.set $l4846 - local.get $l4845 - local.get $l4846 - i32.add - local.set $l4847 - local.get $l4846 - local.get $l4847 - i32.add - local.set $l4848 - local.get $l4847 - local.get $l4848 - i32.add - local.set $l4849 - local.get $l4848 - local.get $l4849 - i32.add - local.set $l4850 - local.get $l4849 - local.get $l4850 - i32.add - local.set $l4851 - local.get $l4850 - local.get $l4851 - i32.add - local.set $l4852 - local.get $l4851 - local.get $l4852 - i32.add - local.set $l4853 - local.get $l4852 - local.get $l4853 - i32.add - local.set $l4854 - local.get $l4853 - local.get $l4854 - i32.add - local.set $l4855 - local.get $l4854 - local.get $l4855 - i32.add - local.set $l4856 - local.get $l4855 - local.get $l4856 - i32.add - local.set $l4857 - local.get $l4856 - local.get $l4857 - i32.add - local.set $l4858 - local.get $l4857 - local.get $l4858 - i32.add - local.set $l4859 - local.get $l4858 - local.get $l4859 - i32.add - local.set $l4860 - local.get $l4859 - local.get $l4860 - i32.add - local.set $l4861 - local.get $l4860 - local.get $l4861 - i32.add - local.set $l4862 - local.get $l4861 - local.get $l4862 - i32.add - local.set $l4863 - local.get $l4862 - local.get $l4863 - i32.add - local.set $l4864 - local.get $l4863 - local.get $l4864 - i32.add - local.set $l4865 - local.get $l4864 - local.get $l4865 - i32.add - local.set $l4866 - local.get $l4865 - local.get $l4866 - i32.add - local.set $l4867 - local.get $l4866 - local.get $l4867 - i32.add - local.set $l4868 - local.get $l4867 - local.get $l4868 - i32.add - local.set $l4869 - local.get $l4868 - local.get $l4869 - i32.add - local.set $l4870 - local.get $l4869 - local.get $l4870 - i32.add - local.set $l4871 - local.get $l4870 - local.get $l4871 - i32.add - local.set $l4872 - local.get $l4871 - local.get $l4872 - i32.add - local.set $l4873 - local.get $l4872 - local.get $l4873 - i32.add - local.set $l4874 - local.get $l4873 - local.get $l4874 - i32.add - local.set $l4875 - local.get $l4874 - local.get $l4875 - i32.add - local.set $l4876 - local.get $l4875 - local.get $l4876 - i32.add - local.set $l4877 - local.get $l4876 - local.get $l4877 - i32.add - local.set $l4878 - local.get $l4877 - local.get $l4878 - i32.add - local.set $l4879 - local.get $l4878 - local.get $l4879 - i32.add - local.set $l4880 - local.get $l4879 - local.get $l4880 - i32.add - local.set $l4881 - local.get $l4880 - local.get $l4881 - i32.add - local.set $l4882 - local.get $l4881 - local.get $l4882 - i32.add - local.set $l4883 - local.get $l4882 - local.get $l4883 - i32.add - local.set $l4884 - local.get $l4883 - local.get $l4884 - i32.add - local.set $l4885 - local.get $l4884 - local.get $l4885 - i32.add - local.set $l4886 - local.get $l4885 - local.get $l4886 - i32.add - local.set $l4887 - local.get $l4886 - local.get $l4887 - i32.add - local.set $l4888 - local.get $l4887 - local.get $l4888 - i32.add - local.set $l4889 - local.get $l4888 - local.get $l4889 - i32.add - local.set $l4890 - local.get $l4889 - local.get $l4890 - i32.add - local.set $l4891 - local.get $l4890 - local.get $l4891 - i32.add - local.set $l4892 - local.get $l4891 - local.get $l4892 - i32.add - local.set $l4893 - local.get $l4892 - local.get $l4893 - i32.add - local.set $l4894 - local.get $l4893 - local.get $l4894 - i32.add - local.set $l4895 - local.get $l4894 - local.get $l4895 - i32.add - local.set $l4896 - local.get $l4895 - local.get $l4896 - i32.add - local.set $l4897 - local.get $l4896 - local.get $l4897 - i32.add - local.set $l4898 - local.get $l4897 - local.get $l4898 - i32.add - local.set $l4899 - local.get $l4898 - local.get $l4899 - i32.add - local.set $l4900 - local.get $l4899 - local.get $l4900 - i32.add - local.set $l4901 - local.get $l4900 - local.get $l4901 - i32.add - local.set $l4902 - local.get $l4901 - local.get $l4902 - i32.add - local.set $l4903 - local.get $l4902 - local.get $l4903 - i32.add - local.set $l4904 - local.get $l4903 - local.get $l4904 - i32.add - local.set $l4905 - local.get $l4904 - local.get $l4905 - i32.add - local.set $l4906 - local.get $l4905 - local.get $l4906 - i32.add - local.set $l4907 - local.get $l4906 - local.get $l4907 - i32.add - local.set $l4908 - local.get $l4907 - local.get $l4908 - i32.add - local.set $l4909 - local.get $l4908 - local.get $l4909 - i32.add - local.set $l4910 - local.get $l4909 - local.get $l4910 - i32.add - local.set $l4911 - local.get $l4910 - local.get $l4911 - i32.add - local.set $l4912 - local.get $l4911 - local.get $l4912 - i32.add - local.set $l4913 - local.get $l4912 - local.get $l4913 - i32.add - local.set $l4914 - local.get $l4913 - local.get $l4914 - i32.add - local.set $l4915 - local.get $l4914 - local.get $l4915 - i32.add - local.set $l4916 - local.get $l4915 - local.get $l4916 - i32.add - local.set $l4917 - local.get $l4916 - local.get $l4917 - i32.add - local.set $l4918 - local.get $l4917 - local.get $l4918 - i32.add - local.set $l4919 - local.get $l4918 - local.get $l4919 - i32.add - local.set $l4920 - local.get $l4919 - local.get $l4920 - i32.add - local.set $l4921 - local.get $l4920 - local.get $l4921 - i32.add - local.set $l4922 - local.get $l4921 - local.get $l4922 - i32.add - local.set $l4923 - local.get $l4922 - local.get $l4923 - i32.add - local.set $l4924 - local.get $l4923 - local.get $l4924 - i32.add - local.set $l4925 - local.get $l4924 - local.get $l4925 - i32.add - local.set $l4926 - local.get $l4925 - local.get $l4926 - i32.add - local.set $l4927 - local.get $l4926 - local.get $l4927 - i32.add - local.set $l4928 - local.get $l4927 - local.get $l4928 - i32.add - local.set $l4929 - local.get $l4928 - local.get $l4929 - i32.add - local.set $l4930 - local.get $l4929 - local.get $l4930 - i32.add - local.set $l4931 - local.get $l4930 - local.get $l4931 - i32.add - local.set $l4932 - local.get $l4931 - local.get $l4932 - i32.add - local.set $l4933 - local.get $l4932 - local.get $l4933 - i32.add - local.set $l4934 - local.get $l4933 - local.get $l4934 - i32.add - local.set $l4935 - local.get $l4934 - local.get $l4935 - i32.add - local.set $l4936 - local.get $l4935 - local.get $l4936 - i32.add - local.set $l4937 - local.get $l4936 - local.get $l4937 - i32.add - local.set $l4938 - local.get $l4937 - local.get $l4938 - i32.add - local.set $l4939 - local.get $l4938 - local.get $l4939 - i32.add - local.set $l4940 - local.get $l4939 - local.get $l4940 - i32.add - local.set $l4941 - local.get $l4940 - local.get $l4941 - i32.add - local.set $l4942 - local.get $l4941 - local.get $l4942 - i32.add - local.set $l4943 - local.get $l4942 - local.get $l4943 - i32.add - local.set $l4944 - local.get $l4943 - local.get $l4944 - i32.add - local.set $l4945 - local.get $l4944 - local.get $l4945 - i32.add - local.set $l4946 - local.get $l4945 - local.get $l4946 - i32.add - local.set $l4947 - local.get $l4946 - local.get $l4947 - i32.add - local.set $l4948 - local.get $l4947 - local.get $l4948 - i32.add - local.set $l4949 - local.get $l4948 - local.get $l4949 - i32.add - local.set $l4950 - local.get $l4949 - local.get $l4950 - i32.add - local.set $l4951 - local.get $l4950 - local.get $l4951 - i32.add - local.set $l4952 - local.get $l4951 - local.get $l4952 - i32.add - local.set $l4953 - local.get $l4952 - local.get $l4953 - i32.add - local.set $l4954 - local.get $l4953 - local.get $l4954 - i32.add - local.set $l4955 - local.get $l4954 - local.get $l4955 - i32.add - local.set $l4956 - local.get $l4955 - local.get $l4956 - i32.add - local.set $l4957 - local.get $l4956 - local.get $l4957 - i32.add - local.set $l4958 - local.get $l4957 - local.get $l4958 - i32.add - local.set $l4959 - local.get $l4958 - local.get $l4959 - i32.add - local.set $l4960 - local.get $l4959 - local.get $l4960 - i32.add - local.set $l4961 - local.get $l4960 - local.get $l4961 - i32.add - local.set $l4962 - local.get $l4961 - local.get $l4962 - i32.add - local.set $l4963 - local.get $l4962 - local.get $l4963 - i32.add - local.set $l4964 - local.get $l4963 - local.get $l4964 - i32.add - local.set $l4965 - local.get $l4964 - local.get $l4965 - i32.add - local.set $l4966 - local.get $l4965 - local.get $l4966 - i32.add - local.set $l4967 - local.get $l4966 - local.get $l4967 - i32.add - local.set $l4968 - local.get $l4967 - local.get $l4968 - i32.add - local.set $l4969 - local.get $l4968 - local.get $l4969 - i32.add - local.set $l4970 - local.get $l4969 - local.get $l4970 - i32.add - local.set $l4971 - local.get $l4970 - local.get $l4971 - i32.add - local.set $l4972 - local.get $l4971 - local.get $l4972 - i32.add - local.set $l4973 - local.get $l4972 - local.get $l4973 - i32.add - local.set $l4974 - local.get $l4973 - local.get $l4974 - i32.add - local.set $l4975 - local.get $l4974 - local.get $l4975 - i32.add - local.set $l4976 - local.get $l4975 - local.get $l4976 - i32.add - local.set $l4977 - local.get $l4976 - local.get $l4977 - i32.add - local.set $l4978 - local.get $l4977 - local.get $l4978 - i32.add - local.set $l4979 - local.get $l4978 - local.get $l4979 - i32.add - local.set $l4980 - local.get $l4979 - local.get $l4980 - i32.add - local.set $l4981 - local.get $l4980 - local.get $l4981 - i32.add - local.set $l4982 - local.get $l4981 - local.get $l4982 - i32.add - local.set $l4983 - local.get $l4982 - local.get $l4983 - i32.add - local.set $l4984 - local.get $l4983 - local.get $l4984 - i32.add - local.set $l4985 - local.get $l4984 - local.get $l4985 - i32.add - local.set $l4986 - local.get $l4985 - local.get $l4986 - i32.add - local.set $l4987 - local.get $l4986 - local.get $l4987 - i32.add - local.set $l4988 - local.get $l4987 - local.get $l4988 - i32.add - local.set $l4989 - local.get $l4988 - local.get $l4989 - i32.add - local.set $l4990 - local.get $l4989 - local.get $l4990 - i32.add - local.set $l4991 - local.get $l4990 - local.get $l4991 - i32.add - local.set $l4992 - local.get $l4991 - local.get $l4992 - i32.add - local.set $l4993 - local.get $l4992 - local.get $l4993 - i32.add - local.set $l4994 - local.get $l4993 - local.get $l4994 - i32.add - local.set $l4995 - local.get $l4994 - local.get $l4995 - i32.add - local.set $l4996 - local.get $l4995 - local.get $l4996 - i32.add - local.set $l4997 - local.get $l4996 - local.get $l4997 - i32.add - local.set $l4998 - local.get $l4997 - local.get $l4998 - i32.add - local.set $l4999 - local.get $l4998 - local.get $l4999 - i32.add - local.set $l5000 - local.get $l4999 - local.get $l5000 - i32.add - local.set $l5001 - local.get $l5000 - local.get $l5001 - i32.add - local.set $l5002 - local.get $l5001 - local.get $l5002 - i32.add - local.set $l5003 - local.get $l5002 - local.get $l5003 - i32.add - local.set $l5004 - local.get $l5003 - local.get $l5004 - i32.add - local.set $l5005 - local.get $l5004 - local.get $l5005 - i32.add - local.set $l5006 - local.get $l5005 - local.get $l5006 - i32.add - local.set $l5007 - local.get $l5006 - local.get $l5007 - i32.add - local.set $l5008 - local.get $l5007 - local.get $l5008 - i32.add - local.set $l5009 - local.get $l5008 - local.get $l5009 - i32.add - local.set $l5010 - local.get $l5009 - local.get $l5010 - i32.add - local.set $l5011 - local.get $l5010 - local.get $l5011 - i32.add - local.set $l5012 - local.get $l5011 - local.get $l5012 - i32.add - local.set $l5013 - local.get $l5012 - local.get $l5013 - i32.add - local.set $l5014 - local.get $l5013 - local.get $l5014 - i32.add - local.set $l5015 - local.get $l5014 - local.get $l5015 - i32.add - local.set $l5016 - local.get $l5015 - local.get $l5016 - i32.add - local.set $l5017 - local.get $l5016 - local.get $l5017 - i32.add - local.set $l5018 - local.get $l5017 - local.get $l5018 - i32.add - local.set $l5019 - local.get $l5018 - local.get $l5019 - i32.add - local.set $l5020 - local.get $l5019 - local.get $l5020 - i32.add - local.set $l5021 - local.get $l5020 - local.get $l5021 - i32.add - local.set $l5022 - local.get $l5021 - local.get $l5022 - i32.add - local.set $l5023 - local.get $l5022 - local.get $l5023 - i32.add - local.set $l5024 - local.get $l5023 - local.get $l5024 - i32.add - local.set $l5025 - local.get $l5024 - local.get $l5025 - i32.add - local.set $l5026 - local.get $l5025 - local.get $l5026 - i32.add - local.set $l5027 - local.get $l5026 - local.get $l5027 - i32.add - local.set $l5028 - local.get $l5027 - local.get $l5028 - i32.add - local.set $l5029 - local.get $l5028 - local.get $l5029 - i32.add - local.set $l5030 - local.get $l5029 - local.get $l5030 - i32.add - local.set $l5031 - local.get $l5030 - local.get $l5031 - i32.add - local.set $l5032 - local.get $l5031 - local.get $l5032 - i32.add - local.set $l5033 - local.get $l5032 - local.get $l5033 - i32.add - local.set $l5034 - local.get $l5033 - local.get $l5034 - i32.add - local.set $l5035 - local.get $l5034 - local.get $l5035 - i32.add - local.set $l5036 - local.get $l5035 - local.get $l5036 - i32.add - local.set $l5037 - local.get $l5036 - local.get $l5037 - i32.add - local.set $l5038 - local.get $l5037 - local.get $l5038 - i32.add - local.set $l5039 - local.get $l5038 - local.get $l5039 - i32.add - local.set $l5040 - local.get $l5039 - local.get $l5040 - i32.add - local.set $l5041 - local.get $l5040 - local.get $l5041 - i32.add - local.set $l5042 - local.get $l5041 - local.get $l5042 - i32.add - local.set $l5043 - local.get $l5042 - local.get $l5043 - i32.add - local.set $l5044 - local.get $l5043 - local.get $l5044 - i32.add - local.set $l5045 - local.get $l5044 - local.get $l5045 - i32.add - local.set $l5046 - local.get $l5045 - local.get $l5046 - i32.add - local.set $l5047 - local.get $l5046 - local.get $l5047 - i32.add - local.set $l5048 - local.get $l5047 - local.get $l5048 - i32.add - local.set $l5049 - local.get $l5048 - local.get $l5049 - i32.add - local.set $l5050 - local.get $l5049 - local.get $l5050 - i32.add - local.set $l5051 - local.get $l5050 - local.get $l5051 - i32.add - local.set $l5052 - local.get $l5051 - local.get $l5052 - i32.add - local.set $l5053 - local.get $l5052 - local.get $l5053 - i32.add - local.set $l5054 - local.get $l5053 - local.get $l5054 - i32.add - local.set $l5055 - local.get $l5054 - local.get $l5055 - i32.add - local.set $l5056 - local.get $l5055 - local.get $l5056 - i32.add - local.set $l5057 - local.get $l5056 - local.get $l5057 - i32.add - local.set $l5058 - local.get $l5057 - local.get $l5058 - i32.add - local.set $l5059 - local.get $l5058 - local.get $l5059 - i32.add - local.set $l5060 - local.get $l5059 - local.get $l5060 - i32.add - local.set $l5061 - local.get $l5060 - local.get $l5061 - i32.add - local.set $l5062 - local.get $l5061 - local.get $l5062 - i32.add - local.set $l5063 - local.get $l5062 - local.get $l5063 - i32.add - local.set $l5064 - local.get $l5063 - local.get $l5064 - i32.add - local.set $l5065 - local.get $l5064 - local.get $l5065 - i32.add - local.set $l5066 - local.get $l5065 - local.get $l5066 - i32.add - local.set $l5067 - local.get $l5066 - local.get $l5067 - i32.add - local.set $l5068 - local.get $l5067 - local.get $l5068 - i32.add - local.set $l5069 - local.get $l5068 - local.get $l5069 - i32.add - local.set $l5070 - local.get $l5069 - local.get $l5070 - i32.add - local.set $l5071 - local.get $l5070 - local.get $l5071 - i32.add - local.set $l5072 - local.get $l5071 - local.get $l5072 - i32.add - local.set $l5073 - local.get $l5072 - local.get $l5073 - i32.add - local.set $l5074 - local.get $l5073 - local.get $l5074 - i32.add - local.set $l5075 - local.get $l5074 - local.get $l5075 - i32.add - local.set $l5076 - local.get $l5075 - local.get $l5076 - i32.add - local.set $l5077 - local.get $l5076 - local.get $l5077 - i32.add - local.set $l5078 - local.get $l5077 - local.get $l5078 - i32.add - local.set $l5079 - local.get $l5078 - local.get $l5079 - i32.add - local.set $l5080 - local.get $l5079 - local.get $l5080 - i32.add - local.set $l5081 - local.get $l5080 - local.get $l5081 - i32.add - local.set $l5082 - local.get $l5081 - local.get $l5082 - i32.add - local.set $l5083 - local.get $l5082 - local.get $l5083 - i32.add - local.set $l5084 - local.get $l5083 - local.get $l5084 - i32.add - local.set $l5085 - local.get $l5084 - local.get $l5085 - i32.add - local.set $l5086 - local.get $l5085 - local.get $l5086 - i32.add - local.set $l5087 - local.get $l5086 - local.get $l5087 - i32.add - local.set $l5088 - local.get $l5087 - local.get $l5088 - i32.add - local.set $l5089 - local.get $l5088 - local.get $l5089 - i32.add - local.set $l5090 - local.get $l5089 - local.get $l5090 - i32.add - local.set $l5091 - local.get $l5090 - local.get $l5091 - i32.add - local.set $l5092 - local.get $l5091 - local.get $l5092 - i32.add - local.set $l5093 - local.get $l5092 - local.get $l5093 - i32.add - local.set $l5094 - local.get $l5093 - local.get $l5094 - i32.add - local.set $l5095 - local.get $l5094 - local.get $l5095 - i32.add - local.set $l5096 - local.get $l5095 - local.get $l5096 - i32.add - local.set $l5097 - local.get $l5096 - local.get $l5097 - i32.add - local.set $l5098 - local.get $l5097 - local.get $l5098 - i32.add - local.set $l5099 - local.get $l5098 - local.get $l5099 - i32.add - local.set $l5100 - local.get $l5099 - local.get $l5100 - i32.add - local.set $l5101 - local.get $l5100 - local.get $l5101 - i32.add - local.set $l5102 - local.get $l5101 - local.get $l5102 - i32.add - local.set $l5103 - local.get $l5102 - local.get $l5103 - i32.add - local.set $l5104 - local.get $l5103 - local.get $l5104 - i32.add - local.set $l5105 - local.get $l5104 - local.get $l5105 - i32.add - local.set $l5106 - local.get $l5105 - local.get $l5106 - i32.add - local.set $l5107 - local.get $l5106 - local.get $l5107 - i32.add - local.set $l5108 - local.get $l5107 - local.get $l5108 - i32.add - local.set $l5109 - local.get $l5108 - local.get $l5109 - i32.add - local.set $l5110 - local.get $l5109 - local.get $l5110 - i32.add - local.set $l5111 - local.get $l5110 - local.get $l5111 - i32.add - local.set $l5112 - local.get $l5111 - local.get $l5112 - i32.add - local.set $l5113 - local.get $l5112 - local.get $l5113 - i32.add - local.set $l5114 - local.get $l5113 - local.get $l5114 - i32.add - local.set $l5115 - local.get $l5114 - local.get $l5115 - i32.add - local.set $l5116 - local.get $l5115 - local.get $l5116 - i32.add - local.set $l5117 - local.get $l5116 - local.get $l5117 - i32.add - local.set $l5118 - local.get $l5117 - local.get $l5118 - i32.add - local.set $l5119 - local.get $l5118 - local.get $l5119 - i32.add - local.set $l5120 - local.get $l5119 - local.get $l5120 - i32.add - local.set $l5121 - local.get $l5120 - local.get $l5121 - i32.add - local.set $l5122 - local.get $l5121 - local.get $l5122 - i32.add - local.set $l5123 - local.get $l5122 - local.get $l5123 - i32.add - local.set $l5124 - local.get $l5123 - local.get $l5124 - i32.add - local.set $l5125 - local.get $l5124 - local.get $l5125 - i32.add - local.set $l5126 - local.get $l5125 - local.get $l5126 - i32.add - local.set $l5127 - local.get $l5126 - local.get $l5127 - i32.add - local.set $l5128 - local.get $l5127 - local.get $l5128 - i32.add - local.set $l5129 - local.get $l5128 - local.get $l5129 - i32.add - local.set $l5130 - local.get $l5129 - local.get $l5130 - i32.add - local.set $l5131 - local.get $l5130 - local.get $l5131 - i32.add - local.set $l5132 - local.get $l5131 - local.get $l5132 - i32.add - local.set $l5133 - local.get $l5132 - local.get $l5133 - i32.add - local.set $l5134 - local.get $l5133 - local.get $l5134 - i32.add - local.set $l5135 - local.get $l5134 - local.get $l5135 - i32.add - local.set $l5136 - local.get $l5135 - local.get $l5136 - i32.add - local.set $l5137 - local.get $l5136 - local.get $l5137 - i32.add - local.set $l5138 - local.get $l5137 - local.get $l5138 - i32.add - local.set $l5139 - local.get $l5138 - local.get $l5139 - i32.add - local.set $l5140 - local.get $l5139 - local.get $l5140 - i32.add - local.set $l5141 - local.get $l5140 - local.get $l5141 - i32.add - local.set $l5142 - local.get $l5141 - local.get $l5142 - i32.add - local.set $l5143 - local.get $l5142 - local.get $l5143 - i32.add - local.set $l5144 - local.get $l5143 - local.get $l5144 - i32.add - local.set $l5145 - local.get $l5144 - local.get $l5145 - i32.add - local.set $l5146 - local.get $l5145 - local.get $l5146 - i32.add - local.set $l5147 - local.get $l5146 - local.get $l5147 - i32.add - local.set $l5148 - local.get $l5147 - local.get $l5148 - i32.add - local.set $l5149 - local.get $l5148 - local.get $l5149 - i32.add - local.set $l5150 - local.get $l5149 - local.get $l5150 - i32.add - local.set $l5151 - local.get $l5150 - local.get $l5151 - i32.add - local.set $l5152 - local.get $l5151 - local.get $l5152 - i32.add - local.set $l5153 - local.get $l5152 - local.get $l5153 - i32.add - local.set $l5154 - local.get $l5153 - local.get $l5154 - i32.add - local.set $l5155 - local.get $l5154 - local.get $l5155 - i32.add - local.set $l5156 - local.get $l5155 - local.get $l5156 - i32.add - local.set $l5157 - local.get $l5156 - local.get $l5157 - i32.add - local.set $l5158 - local.get $l5157 - local.get $l5158 - i32.add - local.set $l5159 - local.get $l5158 - local.get $l5159 - i32.add - local.set $l5160 - local.get $l5159 - local.get $l5160 - i32.add - local.set $l5161 - local.get $l5160 - local.get $l5161 - i32.add - local.set $l5162 - local.get $l5161 - local.get $l5162 - i32.add - local.set $l5163 - local.get $l5162 - local.get $l5163 - i32.add - local.set $l5164 - local.get $l5163 - local.get $l5164 - i32.add - local.set $l5165 - local.get $l5164 - local.get $l5165 - i32.add - local.set $l5166 - local.get $l5165 - local.get $l5166 - i32.add - local.set $l5167 - local.get $l5166 - local.get $l5167 - i32.add - local.set $l5168 - local.get $l5167 - local.get $l5168 - i32.add - local.set $l5169 - local.get $l5168 - local.get $l5169 - i32.add - local.set $l5170 - local.get $l5169 - local.get $l5170 - i32.add - local.set $l5171 - local.get $l5170 - local.get $l5171 - i32.add - local.set $l5172 - local.get $l5171 - local.get $l5172 - i32.add - local.set $l5173 - local.get $l5172 - local.get $l5173 - i32.add - local.set $l5174 - local.get $l5173 - local.get $l5174 - i32.add - local.set $l5175 - local.get $l5174 - local.get $l5175 - i32.add - local.set $l5176 - local.get $l5175 - local.get $l5176 - i32.add - local.set $l5177 - local.get $l5176 - local.get $l5177 - i32.add - local.set $l5178 - local.get $l5177 - local.get $l5178 - i32.add - local.set $l5179 - local.get $l5178 - local.get $l5179 - i32.add - local.set $l5180 - local.get $l5179 - local.get $l5180 - i32.add - local.set $l5181 - local.get $l5180 - local.get $l5181 - i32.add - local.set $l5182 - local.get $l5181 - local.get $l5182 - i32.add - local.set $l5183 - local.get $l5182 - local.get $l5183 - i32.add - local.set $l5184 - local.get $l5183 - local.get $l5184 - i32.add - local.set $l5185 - local.get $l5184 - local.get $l5185 - i32.add - local.set $l5186 - local.get $l5185 - local.get $l5186 - i32.add - local.set $l5187 - local.get $l5186 - local.get $l5187 - i32.add - local.set $l5188 - local.get $l5187 - local.get $l5188 - i32.add - local.set $l5189 - local.get $l5188 - local.get $l5189 - i32.add - local.set $l5190 - local.get $l5189 - local.get $l5190 - i32.add - local.set $l5191 - local.get $l5190 - local.get $l5191 - i32.add - local.set $l5192 - local.get $l5191 - local.get $l5192 - i32.add - local.set $l5193 - local.get $l5192 - local.get $l5193 - i32.add - local.set $l5194 - local.get $l5193 - local.get $l5194 - i32.add - local.set $l5195 - local.get $l5194 - local.get $l5195 - i32.add - local.set $l5196 - local.get $l5195 - local.get $l5196 - i32.add - local.set $l5197 - local.get $l5196 - local.get $l5197 - i32.add - local.set $l5198 - local.get $l5197 - local.get $l5198 - i32.add - local.set $l5199 - local.get $l5198 - local.get $l5199 - i32.add - local.set $l5200 - local.get $l5199 - local.get $l5200 - i32.add - local.set $l5201 - local.get $l5200 - local.get $l5201 - i32.add - local.set $l5202 - local.get $l5201 - local.get $l5202 - i32.add - local.set $l5203 - local.get $l5202 - local.get $l5203 - i32.add - local.set $l5204 - local.get $l5203 - local.get $l5204 - i32.add - local.set $l5205 - local.get $l5204 - local.get $l5205 - i32.add - local.set $l5206 - local.get $l5205 - local.get $l5206 - i32.add - local.set $l5207 - local.get $l5206 - local.get $l5207 - i32.add - local.set $l5208 - local.get $l5207 - local.get $l5208 - i32.add - local.set $l5209 - local.get $l5208 - local.get $l5209 - i32.add - local.set $l5210 - local.get $l5209 - local.get $l5210 - i32.add - local.set $l5211 - local.get $l5210 - local.get $l5211 - i32.add - local.set $l5212 - local.get $l5211 - local.get $l5212 - i32.add - local.set $l5213 - local.get $l5212 - local.get $l5213 - i32.add - local.set $l5214 - local.get $l5213 - local.get $l5214 - i32.add - local.set $l5215 - local.get $l5214 - local.get $l5215 - i32.add - local.set $l5216 - local.get $l5215 - local.get $l5216 - i32.add - local.set $l5217 - local.get $l5216 - local.get $l5217 - i32.add - local.set $l5218 - local.get $l5217 - local.get $l5218 - i32.add - local.set $l5219 - local.get $l5218 - local.get $l5219 - i32.add - local.set $l5220 - local.get $l5219 - local.get $l5220 - i32.add - local.set $l5221 - local.get $l5220 - local.get $l5221 - i32.add - local.set $l5222 - local.get $l5221 - local.get $l5222 - i32.add - local.set $l5223 - local.get $l5222 - local.get $l5223 - i32.add - local.set $l5224 - local.get $l5223 - local.get $l5224 - i32.add - local.set $l5225 - local.get $l5224 - local.get $l5225 - i32.add - local.set $l5226 - local.get $l5225 - local.get $l5226 - i32.add - local.set $l5227 - local.get $l5226 - local.get $l5227 - i32.add - local.set $l5228 - local.get $l5227 - local.get $l5228 - i32.add - local.set $l5229 - local.get $l5228 - local.get $l5229 - i32.add - local.set $l5230 - local.get $l5229 - local.get $l5230 - i32.add - local.set $l5231 - local.get $l5230 - local.get $l5231 - i32.add - local.set $l5232 - local.get $l5231 - local.get $l5232 - i32.add - local.set $l5233 - local.get $l5232 - local.get $l5233 - i32.add - local.set $l5234 - local.get $l5233 - local.get $l5234 - i32.add - local.set $l5235 - local.get $l5234 - local.get $l5235 - i32.add - local.set $l5236 - local.get $l5235 - local.get $l5236 - i32.add - local.set $l5237 - local.get $l5236 - local.get $l5237 - i32.add - local.set $l5238 - local.get $l5237 - local.get $l5238 - i32.add - local.set $l5239 - local.get $l5238 - local.get $l5239 - i32.add - local.set $l5240 - local.get $l5239 - local.get $l5240 - i32.add - local.set $l5241 - local.get $l5240 - local.get $l5241 - i32.add - local.set $l5242 - local.get $l5241 - local.get $l5242 - i32.add - local.set $l5243 - local.get $l5242 - local.get $l5243 - i32.add - local.set $l5244 - local.get $l5243 - local.get $l5244 - i32.add - local.set $l5245 - local.get $l5244 - local.get $l5245 - i32.add - local.set $l5246 - local.get $l5245 - local.get $l5246 - i32.add - local.set $l5247 - local.get $l5246 - local.get $l5247 - i32.add - local.set $l5248 - local.get $l5247 - local.get $l5248 - i32.add - local.set $l5249 - local.get $l5248 - local.get $l5249 - i32.add - local.set $l5250 - local.get $l5249 - local.get $l5250 - i32.add - local.set $l5251 - local.get $l5250 - local.get $l5251 - i32.add - local.set $l5252 - local.get $l5251 - local.get $l5252 - i32.add - local.set $l5253 - local.get $l5252 - local.get $l5253 - i32.add - local.set $l5254 - local.get $l5253 - local.get $l5254 - i32.add - local.set $l5255 - local.get $l5254 - local.get $l5255 - i32.add - local.set $l5256 - local.get $l5255 - local.get $l5256 - i32.add - local.set $l5257 - local.get $l5256 - local.get $l5257 - i32.add - local.set $l5258 - local.get $l5257 - local.get $l5258 - i32.add - local.set $l5259 - local.get $l5258 - local.get $l5259 - i32.add - local.set $l5260 - local.get $l5259 - local.get $l5260 - i32.add - local.set $l5261 - local.get $l5260 - local.get $l5261 - i32.add - local.set $l5262 - local.get $l5261 - local.get $l5262 - i32.add - local.set $l5263 - local.get $l5262 - local.get $l5263 - i32.add - local.set $l5264 - local.get $l5263 - local.get $l5264 - i32.add - local.set $l5265 - local.get $l5264 - local.get $l5265 - i32.add - local.set $l5266 - local.get $l5265 - local.get $l5266 - i32.add - local.set $l5267 - local.get $l5266 - local.get $l5267 - i32.add - local.set $l5268 - local.get $l5267 - local.get $l5268 - i32.add - local.set $l5269 - local.get $l5268 - local.get $l5269 - i32.add - local.set $l5270 - local.get $l5269 - local.get $l5270 - i32.add - local.set $l5271 - local.get $l5270 - local.get $l5271 - i32.add - local.set $l5272 - local.get $l5271 - local.get $l5272 - i32.add - local.set $l5273 - local.get $l5272 - local.get $l5273 - i32.add - local.set $l5274 - local.get $l5273 - local.get $l5274 - i32.add - local.set $l5275 - local.get $l5274 - local.get $l5275 - i32.add - local.set $l5276 - local.get $l5275 - local.get $l5276 - i32.add - local.set $l5277 - local.get $l5276 - local.get $l5277 - i32.add - local.set $l5278 - local.get $l5277 - local.get $l5278 - i32.add - local.set $l5279 - local.get $l5278 - local.get $l5279 - i32.add - local.set $l5280 - local.get $l5279 - local.get $l5280 - i32.add - local.set $l5281 - local.get $l5280 - local.get $l5281 - i32.add - local.set $l5282 - local.get $l5281 - local.get $l5282 - i32.add - local.set $l5283 - local.get $l5282 - local.get $l5283 - i32.add - local.set $l5284 - local.get $l5283 - local.get $l5284 - i32.add - local.set $l5285 - local.get $l5284 - local.get $l5285 - i32.add - local.set $l5286 - local.get $l5285 - local.get $l5286 - i32.add - local.set $l5287 - local.get $l5286 - local.get $l5287 - i32.add - local.set $l5288 - local.get $l5287 - local.get $l5288 - i32.add - local.set $l5289 - local.get $l5288 - local.get $l5289 - i32.add - local.set $l5290 - local.get $l5289 - local.get $l5290 - i32.add - local.set $l5291 - local.get $l5290 - local.get $l5291 - i32.add - local.set $l5292 - local.get $l5291 - local.get $l5292 - i32.add - local.set $l5293 - local.get $l5292 - local.get $l5293 - i32.add - local.set $l5294 - local.get $l5293 - local.get $l5294 - i32.add - local.set $l5295 - local.get $l5294 - local.get $l5295 - i32.add - local.set $l5296 - local.get $l5295 - local.get $l5296 - i32.add - local.set $l5297 - local.get $l5296 - local.get $l5297 - i32.add - local.set $l5298 - local.get $l5297 - local.get $l5298 - i32.add - local.set $l5299 - local.get $l5298 - local.get $l5299 - i32.add - local.set $l5300 - local.get $l5299 - local.get $l5300 - i32.add - local.set $l5301 - local.get $l5300 - local.get $l5301 - i32.add - local.set $l5302 - local.get $l5301 - local.get $l5302 - i32.add - local.set $l5303 - local.get $l5302 - local.get $l5303 - i32.add - local.set $l5304 - local.get $l5303 - local.get $l5304 - i32.add - local.set $l5305 - local.get $l5304 - local.get $l5305 - i32.add - local.set $l5306 - local.get $l5305 - local.get $l5306 - i32.add - local.set $l5307 - local.get $l5306 - local.get $l5307 - i32.add - local.set $l5308 - local.get $l5307 - local.get $l5308 - i32.add - local.set $l5309 - local.get $l5308 - local.get $l5309 - i32.add - local.set $l5310 - local.get $l5309 - local.get $l5310 - i32.add - local.set $l5311 - local.get $l5310 - local.get $l5311 - i32.add - local.set $l5312 - local.get $l5311 - local.get $l5312 - i32.add - local.set $l5313 - local.get $l5312 - local.get $l5313 - i32.add - local.set $l5314 - local.get $l5313 - local.get $l5314 - i32.add - local.set $l5315 - local.get $l5314 - local.get $l5315 - i32.add - local.set $l5316 - local.get $l5315 - local.get $l5316 - i32.add - local.set $l5317 - local.get $l5316 - local.get $l5317 - i32.add - local.set $l5318 - local.get $l5317 - local.get $l5318 - i32.add - local.set $l5319 - local.get $l5318 - local.get $l5319 - i32.add - local.set $l5320 - local.get $l5319 - local.get $l5320 - i32.add - local.set $l5321 - local.get $l5320 - local.get $l5321 - i32.add - local.set $l5322 - local.get $l5321 - local.get $l5322 - i32.add - local.set $l5323 - local.get $l5322 - local.get $l5323 - i32.add - local.set $l5324 - local.get $l5323 - local.get $l5324 - i32.add - local.set $l5325 - local.get $l5324 - local.get $l5325 - i32.add - local.set $l5326 - local.get $l5325 - local.get $l5326 - i32.add - local.set $l5327 - local.get $l5326 - local.get $l5327 - i32.add - local.set $l5328 - local.get $l5327 - local.get $l5328 - i32.add - local.set $l5329 - local.get $l5328 - local.get $l5329 - i32.add - local.set $l5330 - local.get $l5329 - local.get $l5330 - i32.add - local.set $l5331 - local.get $l5330 - local.get $l5331 - i32.add - local.set $l5332 - local.get $l5331 - local.get $l5332 - i32.add - local.set $l5333 - local.get $l5332 - local.get $l5333 - i32.add - local.set $l5334 - local.get $l5333 - local.get $l5334 - i32.add - local.set $l5335 - local.get $l5334 - local.get $l5335 - i32.add - local.set $l5336 - local.get $l5335 - local.get $l5336 - i32.add - local.set $l5337 - local.get $l5336 - local.get $l5337 - i32.add - local.set $l5338 - local.get $l5337 - local.get $l5338 - i32.add - local.set $l5339 - local.get $l5338 - local.get $l5339 - i32.add - local.set $l5340 - local.get $l5339 - local.get $l5340 - i32.add - local.set $l5341 - local.get $l5340 - local.get $l5341 - i32.add - local.set $l5342 - local.get $l5341 - local.get $l5342 - i32.add - local.set $l5343 - local.get $l5342 - local.get $l5343 - i32.add - local.set $l5344 - local.get $l5343 - local.get $l5344 - i32.add - local.set $l5345 - local.get $l5344 - local.get $l5345 - i32.add - local.set $l5346 - local.get $l5345 - local.get $l5346 - i32.add - local.set $l5347 - local.get $l5346 - local.get $l5347 - i32.add - local.set $l5348 - local.get $l5347 - local.get $l5348 - i32.add - local.set $l5349 - local.get $l5348 - local.get $l5349 - i32.add - local.set $l5350 - local.get $l5349 - local.get $l5350 - i32.add - local.set $l5351 - local.get $l5350 - local.get $l5351 - i32.add - local.set $l5352 - local.get $l5351 - local.get $l5352 - i32.add - local.set $l5353 - local.get $l5352 - local.get $l5353 - i32.add - local.set $l5354 - local.get $l5353 - local.get $l5354 - i32.add - local.set $l5355 - local.get $l5354 - local.get $l5355 - i32.add - local.set $l5356 - local.get $l5355 - local.get $l5356 - i32.add - local.set $l5357 - local.get $l5356 - local.get $l5357 - i32.add - local.set $l5358 - local.get $l5357 - local.get $l5358 - i32.add - local.set $l5359 - local.get $l5358 - local.get $l5359 - i32.add - local.set $l5360 - local.get $l5359 - local.get $l5360 - i32.add - local.set $l5361 - local.get $l5360 - local.get $l5361 - i32.add - local.set $l5362 - local.get $l5361 - local.get $l5362 - i32.add - local.set $l5363 - local.get $l5362 - local.get $l5363 - i32.add - local.set $l5364 - local.get $l5363 - local.get $l5364 - i32.add - local.set $l5365 - local.get $l5364 - local.get $l5365 - i32.add - local.set $l5366 - local.get $l5365 - local.get $l5366 - i32.add - local.set $l5367 - local.get $l5366 - local.get $l5367 - i32.add - local.set $l5368 - local.get $l5367 - local.get $l5368 - i32.add - local.set $l5369 - local.get $l5368 - local.get $l5369 - i32.add - local.set $l5370 - local.get $l5369 - local.get $l5370 - i32.add - local.set $l5371 - local.get $l5370 - local.get $l5371 - i32.add - local.set $l5372 - local.get $l5371 - local.get $l5372 - i32.add - local.set $l5373 - local.get $l5372 - local.get $l5373 - i32.add - local.set $l5374 - local.get $l5373 - local.get $l5374 - i32.add - local.set $l5375 - local.get $l5374 - local.get $l5375 - i32.add - local.set $l5376 - local.get $l5375 - local.get $l5376 - i32.add - local.set $l5377 - local.get $l5376 - local.get $l5377 - i32.add - local.set $l5378 - local.get $l5377 - local.get $l5378 - i32.add - local.set $l5379 - local.get $l5378 - local.get $l5379 - i32.add - local.set $l5380 - local.get $l5379 - local.get $l5380 - i32.add - local.set $l5381 - local.get $l5380 - local.get $l5381 - i32.add - local.set $l5382 - local.get $l5381 - local.get $l5382 - i32.add - local.set $l5383 - local.get $l5382 - local.get $l5383 - i32.add - local.set $l5384 - local.get $l5383 - local.get $l5384 - i32.add - local.set $l5385 - local.get $l5384 - local.get $l5385 - i32.add - local.set $l5386 - local.get $l5385 - local.get $l5386 - i32.add - local.set $l5387 - local.get $l5386 - local.get $l5387 - i32.add - local.set $l5388 - local.get $l5387 - local.get $l5388 - i32.add - local.set $l5389 - local.get $l5388 - local.get $l5389 - i32.add - local.set $l5390 - local.get $l5389 - local.get $l5390 - i32.add - local.set $l5391 - local.get $l5390 - local.get $l5391 - i32.add - local.set $l5392 - local.get $l5391 - local.get $l5392 - i32.add - local.set $l5393 - local.get $l5392 - local.get $l5393 - i32.add - local.set $l5394 - local.get $l5393 - local.get $l5394 - i32.add - local.set $l5395 - local.get $l5394 - local.get $l5395 - i32.add - local.set $l5396 - local.get $l5395 - local.get $l5396 - i32.add - local.set $l5397 - local.get $l5396 - local.get $l5397 - i32.add - local.set $l5398 - local.get $l5397 - local.get $l5398 - i32.add - local.set $l5399 - local.get $l5398 - local.get $l5399 - i32.add - local.set $l5400 - local.get $l5399 - local.get $l5400 - i32.add - local.set $l5401 - local.get $l5400 - local.get $l5401 - i32.add - local.set $l5402 - local.get $l5401 - local.get $l5402 - i32.add - local.set $l5403 - local.get $l5402 - local.get $l5403 - i32.add - local.set $l5404 - local.get $l5403 - local.get $l5404 - i32.add - local.set $l5405 - local.get $l5404 - local.get $l5405 - i32.add - local.set $l5406 - local.get $l5405 - local.get $l5406 - i32.add - local.set $l5407 - local.get $l5406 - local.get $l5407 - i32.add - local.set $l5408 - local.get $l5407 - local.get $l5408 - i32.add - local.set $l5409 - local.get $l5408 - local.get $l5409 - i32.add - local.set $l5410 - local.get $l5409 - local.get $l5410 - i32.add - local.set $l5411 - local.get $l5410 - local.get $l5411 - i32.add - local.set $l5412 - local.get $l5411 - local.get $l5412 - i32.add - local.set $l5413 - local.get $l5412 - local.get $l5413 - i32.add - local.set $l5414 - local.get $l5413 - local.get $l5414 - i32.add - local.set $l5415 - local.get $l5414 - local.get $l5415 - i32.add - local.set $l5416 - local.get $l5415 - local.get $l5416 - i32.add - local.set $l5417 - local.get $l5416 - local.get $l5417 - i32.add - local.set $l5418 - local.get $l5417 - local.get $l5418 - i32.add - local.set $l5419 - local.get $l5418 - local.get $l5419 - i32.add - local.set $l5420 - local.get $l5419 - local.get $l5420 - i32.add - local.set $l5421 - local.get $l5420 - local.get $l5421 - i32.add - local.set $l5422 - local.get $l5421 - local.get $l5422 - i32.add - local.set $l5423 - local.get $l5422 - local.get $l5423 - i32.add - local.set $l5424 - local.get $l5423 - local.get $l5424 - i32.add - local.set $l5425 - local.get $l5424 - local.get $l5425 - i32.add - local.set $l5426 - local.get $l5425 - local.get $l5426 - i32.add - local.set $l5427 - local.get $l5426 - local.get $l5427 - i32.add - local.set $l5428 - local.get $l5427 - local.get $l5428 - i32.add - local.set $l5429 - local.get $l5428 - local.get $l5429 - i32.add - local.set $l5430 - local.get $l5429 - local.get $l5430 - i32.add - local.set $l5431 - local.get $l5430 - local.get $l5431 - i32.add - local.set $l5432 - local.get $l5431 - local.get $l5432 - i32.add - local.set $l5433 - local.get $l5432 - local.get $l5433 - i32.add - local.set $l5434 - local.get $l5433 - local.get $l5434 - i32.add - local.set $l5435 - local.get $l5434 - local.get $l5435 - i32.add - local.set $l5436 - local.get $l5435 - local.get $l5436 - i32.add - local.set $l5437 - local.get $l5436 - local.get $l5437 - i32.add - local.set $l5438 - local.get $l5437 - local.get $l5438 - i32.add - local.set $l5439 - local.get $l5438 - local.get $l5439 - i32.add - local.set $l5440 - local.get $l5439 - local.get $l5440 - i32.add - local.set $l5441 - local.get $l5440 - local.get $l5441 - i32.add - local.set $l5442 - local.get $l5441 - local.get $l5442 - i32.add - local.set $l5443 - local.get $l5442 - local.get $l5443 - i32.add - local.set $l5444 - local.get $l5443 - local.get $l5444 - i32.add - local.set $l5445 - local.get $l5444 - local.get $l5445 - i32.add - local.set $l5446 - local.get $l5445 - local.get $l5446 - i32.add - local.set $l5447 - local.get $l5446 - local.get $l5447 - i32.add - local.set $l5448 - local.get $l5447 - local.get $l5448 - i32.add - local.set $l5449 - local.get $l5448 - local.get $l5449 - i32.add - local.set $l5450 - local.get $l5449 - local.get $l5450 - i32.add - local.set $l5451 - local.get $l5450 - local.get $l5451 - i32.add - local.set $l5452 - local.get $l5451 - local.get $l5452 - i32.add - local.set $l5453 - local.get $l5452 - local.get $l5453 - i32.add - local.set $l5454 - local.get $l5453 - local.get $l5454 - i32.add - local.set $l5455 - local.get $l5454 - local.get $l5455 - i32.add - local.set $l5456 - local.get $l5455 - local.get $l5456 - i32.add - local.set $l5457 - local.get $l5456 - local.get $l5457 - i32.add - local.set $l5458 - local.get $l5457 - local.get $l5458 - i32.add - local.set $l5459 - local.get $l5458 - local.get $l5459 - i32.add - local.set $l5460 - local.get $l5459 - local.get $l5460 - i32.add - local.set $l5461 - local.get $l5460 - local.get $l5461 - i32.add - local.set $l5462 - local.get $l5461 - local.get $l5462 - i32.add - local.set $l5463 - local.get $l5462 - local.get $l5463 - i32.add - local.set $l5464 - local.get $l5463 - local.get $l5464 - i32.add - local.set $l5465 - local.get $l5464 - local.get $l5465 - i32.add - local.set $l5466 - local.get $l5465 - local.get $l5466 - i32.add - local.set $l5467 - local.get $l5466 - local.get $l5467 - i32.add - local.set $l5468 - local.get $l5467 - local.get $l5468 - i32.add - local.set $l5469 - local.get $l5468 - local.get $l5469 - i32.add - local.set $l5470 - local.get $l5469 - local.get $l5470 - i32.add - local.set $l5471 - local.get $l5470 - local.get $l5471 - i32.add - local.set $l5472 - local.get $l5471 - local.get $l5472 - i32.add - local.set $l5473 - local.get $l5472 - local.get $l5473 - i32.add - local.set $l5474 - local.get $l5473 - local.get $l5474 - i32.add - local.set $l5475 - local.get $l5474 - local.get $l5475 - i32.add - local.set $l5476 - local.get $l5475 - local.get $l5476 - i32.add - local.set $l5477 - local.get $l5476 - local.get $l5477 - i32.add - local.set $l5478 - local.get $l5477 - local.get $l5478 - i32.add - local.set $l5479 - local.get $l5478 - local.get $l5479 - i32.add - local.set $l5480 - local.get $l5479 - local.get $l5480 - i32.add - local.set $l5481 - local.get $l5480 - local.get $l5481 - i32.add - local.set $l5482 - local.get $l5481 - local.get $l5482 - i32.add - local.set $l5483 - local.get $l5482 - local.get $l5483 - i32.add - local.set $l5484 - local.get $l5483 - local.get $l5484 - i32.add - local.set $l5485 - local.get $l5484 - local.get $l5485 - i32.add - local.set $l5486 - local.get $l5485 - local.get $l5486 - i32.add - local.set $l5487 - local.get $l5486 - local.get $l5487 - i32.add - local.set $l5488 - local.get $l5487 - local.get $l5488 - i32.add - local.set $l5489 - local.get $l5488 - local.get $l5489 - i32.add - local.set $l5490 - local.get $l5489 - local.get $l5490 - i32.add - local.set $l5491 - local.get $l5490 - local.get $l5491 - i32.add - local.set $l5492 - local.get $l5491 - local.get $l5492 - i32.add - local.set $l5493 - local.get $l5492 - local.get $l5493 - i32.add - local.set $l5494 - local.get $l5493 - local.get $l5494 - i32.add - local.set $l5495 - local.get $l5494 - local.get $l5495 - i32.add - local.set $l5496 - local.get $l5495 - local.get $l5496 - i32.add - local.set $l5497 - local.get $l5496 - local.get $l5497 - i32.add - local.set $l5498 - local.get $l5497 - local.get $l5498 - i32.add - local.set $l5499 - local.get $l5498 - local.get $l5499 - i32.add - local.set $l5500 - local.get $l5499 - local.get $l5500 - i32.add - local.set $l5501 - local.get $l5500 - local.get $l5501 - i32.add - local.set $l5502 - local.get $l5501 - local.get $l5502 - i32.add - local.set $l5503 - local.get $l5502 - local.get $l5503 - i32.add - local.set $l5504 - local.get $l5503 - local.get $l5504 - i32.add - local.set $l5505 - local.get $l5504 - local.get $l5505 - i32.add - local.set $l5506 - local.get $l5505 - local.get $l5506 - i32.add - local.set $l5507 - local.get $l5506 - local.get $l5507 - i32.add - local.set $l5508 - local.get $l5507 - local.get $l5508 - i32.add - local.set $l5509 - local.get $l5508 - local.get $l5509 - i32.add - local.set $l5510 - local.get $l5509 - local.get $l5510 - i32.add - local.set $l5511 - local.get $l5510 - local.get $l5511 - i32.add - local.set $l5512 - local.get $l5511 - local.get $l5512 - i32.add - local.set $l5513 - local.get $l5512 - local.get $l5513 - i32.add - local.set $l5514 - local.get $l5513 - local.get $l5514 - i32.add - local.set $l5515 - local.get $l5514 - local.get $l5515 - i32.add - local.set $l5516 - local.get $l5515 - local.get $l5516 - i32.add - local.set $l5517 - local.get $l5516 - local.get $l5517 - i32.add - local.set $l5518 - local.get $l5517 - local.get $l5518 - i32.add - local.set $l5519 - local.get $l5518 - local.get $l5519 - i32.add - local.set $l5520 - local.get $l5519 - local.get $l5520 - i32.add - local.set $l5521 - local.get $l5520 - local.get $l5521 - i32.add - local.set $l5522 - local.get $l5521 - local.get $l5522 - i32.add - local.set $l5523 - local.get $l5522 - local.get $l5523 - i32.add - local.set $l5524 - local.get $l5523 - local.get $l5524 - i32.add - local.set $l5525 - local.get $l5524 - local.get $l5525 - i32.add - local.set $l5526 - local.get $l5525 - local.get $l5526 - i32.add - local.set $l5527 - local.get $l5526 - local.get $l5527 - i32.add - local.set $l5528 - local.get $l5527 - local.get $l5528 - i32.add - local.set $l5529 - local.get $l5528 - local.get $l5529 - i32.add - local.set $l5530 - local.get $l5529 - local.get $l5530 - i32.add - local.set $l5531 - local.get $l5530 - local.get $l5531 - i32.add - local.set $l5532 - local.get $l5531 - local.get $l5532 - i32.add - local.set $l5533 - local.get $l5532 - local.get $l5533 - i32.add - local.set $l5534 - local.get $l5533 - local.get $l5534 - i32.add - local.set $l5535 - local.get $l5534 - local.get $l5535 - i32.add - local.set $l5536 - local.get $l5535 - local.get $l5536 - i32.add - local.set $l5537 - local.get $l5536 - local.get $l5537 - i32.add - local.set $l5538 - local.get $l5537 - local.get $l5538 - i32.add - local.set $l5539 - local.get $l5538 - local.get $l5539 - i32.add - local.set $l5540 - local.get $l5539 - local.get $l5540 - i32.add - local.set $l5541 - local.get $l5540 - local.get $l5541 - i32.add - local.set $l5542 - local.get $l5541 - local.get $l5542 - i32.add - local.set $l5543 - local.get $l5542 - local.get $l5543 - i32.add - local.set $l5544 - local.get $l5543 - local.get $l5544 - i32.add - local.set $l5545 - local.get $l5544 - local.get $l5545 - i32.add - local.set $l5546 - local.get $l5545 - local.get $l5546 - i32.add - local.set $l5547 - local.get $l5546 - local.get $l5547 - i32.add - local.set $l5548 - local.get $l5547 - local.get $l5548 - i32.add - local.set $l5549 - local.get $l5548 - local.get $l5549 - i32.add - local.set $l5550 - local.get $l5549 - local.get $l5550 - i32.add - local.set $l5551 - local.get $l5550 - local.get $l5551 - i32.add - local.set $l5552 - local.get $l5551 - local.get $l5552 - i32.add - local.set $l5553 - local.get $l5552 - local.get $l5553 - i32.add - local.set $l5554 - local.get $l5553 - local.get $l5554 - i32.add - local.set $l5555 - local.get $l5554 - local.get $l5555 - i32.add - local.set $l5556 - local.get $l5555 - local.get $l5556 - i32.add - local.set $l5557 - local.get $l5556 - local.get $l5557 - i32.add - local.set $l5558 - local.get $l5557 - local.get $l5558 - i32.add - local.set $l5559 - local.get $l5558 - local.get $l5559 - i32.add - local.set $l5560 - local.get $l5559 - local.get $l5560 - i32.add - local.set $l5561 - local.get $l5560 - local.get $l5561 - i32.add - local.set $l5562 - local.get $l5561 - local.get $l5562 - i32.add - local.set $l5563 - local.get $l5562 - local.get $l5563 - i32.add - local.set $l5564 - local.get $l5563 - local.get $l5564 - i32.add - local.set $l5565 - local.get $l5564 - local.get $l5565 - i32.add - local.set $l5566 - local.get $l5565 - local.get $l5566 - i32.add - local.set $l5567 - local.get $l5566 - local.get $l5567 - i32.add - local.set $l5568 - local.get $l5567 - local.get $l5568 - i32.add - local.set $l5569 - local.get $l5568 - local.get $l5569 - i32.add - local.set $l5570 - local.get $l5569 - local.get $l5570 - i32.add - local.set $l5571 - local.get $l5570 - local.get $l5571 - i32.add - local.set $l5572 - local.get $l5571 - local.get $l5572 - i32.add - local.set $l5573 - local.get $l5572 - local.get $l5573 - i32.add - local.set $l5574 - local.get $l5573 - local.get $l5574 - i32.add - local.set $l5575 - local.get $l5574 - local.get $l5575 - i32.add - local.set $l5576 - local.get $l5575 - local.get $l5576 - i32.add - local.set $l5577 - local.get $l5576 - local.get $l5577 - i32.add - local.set $l5578 - local.get $l5577 - local.get $l5578 - i32.add - local.set $l5579 - local.get $l5578 - local.get $l5579 - i32.add - local.set $l5580 - local.get $l5579 - local.get $l5580 - i32.add - local.set $l5581 - local.get $l5580 - local.get $l5581 - i32.add - local.set $l5582 - local.get $l5581 - local.get $l5582 - i32.add - local.set $l5583 - local.get $l5582 - local.get $l5583 - i32.add - local.set $l5584 - local.get $l5583 - local.get $l5584 - i32.add - local.set $l5585 - local.get $l5584 - local.get $l5585 - i32.add - local.set $l5586 - local.get $l5585 - local.get $l5586 - i32.add - local.set $l5587 - local.get $l5586 - local.get $l5587 - i32.add - local.set $l5588 - local.get $l5587 - local.get $l5588 - i32.add - local.set $l5589 - local.get $l5588 - local.get $l5589 - i32.add - local.set $l5590 - local.get $l5589 - local.get $l5590 - i32.add - local.set $l5591 - local.get $l5590 - local.get $l5591 - i32.add - local.set $l5592 - local.get $l5591 - local.get $l5592 - i32.add - local.set $l5593 - local.get $l5592 - local.get $l5593 - i32.add - local.set $l5594 - local.get $l5593 - local.get $l5594 - i32.add - local.set $l5595 - local.get $l5594 - local.get $l5595 - i32.add - local.set $l5596 - local.get $l5595 - local.get $l5596 - i32.add - local.set $l5597 - local.get $l5596 - local.get $l5597 - i32.add - local.set $l5598 - local.get $l5597 - local.get $l5598 - i32.add - local.set $l5599 - local.get $l5598 - local.get $l5599 - i32.add - local.set $l5600 - local.get $l5599 - local.get $l5600 - i32.add - local.set $l5601 - local.get $l5600 - local.get $l5601 - i32.add - local.set $l5602 - local.get $l5601 - local.get $l5602 - i32.add - local.set $l5603 - local.get $l5602 - local.get $l5603 - i32.add - local.set $l5604 - local.get $l5603 - local.get $l5604 - i32.add - local.set $l5605 - local.get $l5604 - local.get $l5605 - i32.add - local.set $l5606 - local.get $l5605 - local.get $l5606 - i32.add - local.set $l5607 - local.get $l5606 - local.get $l5607 - i32.add - local.set $l5608 - local.get $l5607 - local.get $l5608 - i32.add - local.set $l5609 - local.get $l5608 - local.get $l5609 - i32.add - local.set $l5610 - local.get $l5609 - local.get $l5610 - i32.add - local.set $l5611 - local.get $l5610 - local.get $l5611 - i32.add - local.set $l5612 - local.get $l5611 - local.get $l5612 - i32.add - local.set $l5613 - local.get $l5612 - local.get $l5613 - i32.add - local.set $l5614 - local.get $l5613 - local.get $l5614 - i32.add - local.set $l5615 - local.get $l5614 - local.get $l5615 - i32.add - local.set $l5616 - local.get $l5615 - local.get $l5616 - i32.add - local.set $l5617 - local.get $l5616 - local.get $l5617 - i32.add - local.set $l5618 - local.get $l5617 - local.get $l5618 - i32.add - local.set $l5619 - local.get $l5618 - local.get $l5619 - i32.add - local.set $l5620 - local.get $l5619 - local.get $l5620 - i32.add - local.set $l5621 - local.get $l5620 - local.get $l5621 - i32.add - local.set $l5622 - local.get $l5621 - local.get $l5622 - i32.add - local.set $l5623 - local.get $l5622 - local.get $l5623 - i32.add - local.set $l5624 - local.get $l5623 - local.get $l5624 - i32.add - local.set $l5625 - local.get $l5624 - local.get $l5625 - i32.add - local.set $l5626 - local.get $l5625 - local.get $l5626 - i32.add - local.set $l5627 - local.get $l5626 - local.get $l5627 - i32.add - local.set $l5628 - local.get $l5627 - local.get $l5628 - i32.add - local.set $l5629 - local.get $l5628 - local.get $l5629 - i32.add - local.set $l5630 - local.get $l5629 - local.get $l5630 - i32.add - local.set $l5631 - local.get $l5630 - local.get $l5631 - i32.add - local.set $l5632 - local.get $l5631 - local.get $l5632 - i32.add - local.set $l5633 - local.get $l5632 - local.get $l5633 - i32.add - local.set $l5634 - local.get $l5633 - local.get $l5634 - i32.add - local.set $l5635 - local.get $l5634 - local.get $l5635 - i32.add - local.set $l5636 - local.get $l5635 - local.get $l5636 - i32.add - local.set $l5637 - local.get $l5636 - local.get $l5637 - i32.add - local.set $l5638 - local.get $l5637 - local.get $l5638 - i32.add - local.set $l5639 - local.get $l5638 - local.get $l5639 - i32.add - local.set $l5640 - local.get $l5639 - local.get $l5640 - i32.add - local.set $l5641 - local.get $l5640 - local.get $l5641 - i32.add - local.set $l5642 - local.get $l5641 - local.get $l5642 - i32.add - local.set $l5643 - local.get $l5642 - local.get $l5643 - i32.add - local.set $l5644 - local.get $l5643 - local.get $l5644 - i32.add - local.set $l5645 - local.get $l5644 - local.get $l5645 - i32.add - local.set $l5646 - local.get $l5645 - local.get $l5646 - i32.add - local.set $l5647 - local.get $l5646 - local.get $l5647 - i32.add - local.set $l5648 - local.get $l5647 - local.get $l5648 - i32.add - local.set $l5649 - local.get $l5648 - local.get $l5649 - i32.add - local.set $l5650 - local.get $l5649 - local.get $l5650 - i32.add - local.set $l5651 - local.get $l5650 - local.get $l5651 - i32.add - local.set $l5652 - local.get $l5651 - local.get $l5652 - i32.add - local.set $l5653 - local.get $l5652 - local.get $l5653 - i32.add - local.set $l5654 - local.get $l5653 - local.get $l5654 - i32.add - local.set $l5655 - local.get $l5654 - local.get $l5655 - i32.add - local.set $l5656 - local.get $l5655 - local.get $l5656 - i32.add - local.set $l5657 - local.get $l5656 - local.get $l5657 - i32.add - local.set $l5658 - local.get $l5657 - local.get $l5658 - i32.add - local.set $l5659 - local.get $l5658 - local.get $l5659 - i32.add - local.set $l5660 - local.get $l5659 - local.get $l5660 - i32.add - local.set $l5661 - local.get $l5660 - local.get $l5661 - i32.add - local.set $l5662 - local.get $l5661 - local.get $l5662 - i32.add - local.set $l5663 - local.get $l5662 - local.get $l5663 - i32.add - local.set $l5664 - local.get $l5663 - local.get $l5664 - i32.add - local.set $l5665 - local.get $l5664 - local.get $l5665 - i32.add - local.set $l5666 - local.get $l5665 - local.get $l5666 - i32.add - local.set $l5667 - local.get $l5666 - local.get $l5667 - i32.add - local.set $l5668 - local.get $l5667 - local.get $l5668 - i32.add - local.set $l5669 - local.get $l5668 - local.get $l5669 - i32.add - local.set $l5670 - local.get $l5669 - local.get $l5670 - i32.add - local.set $l5671 - local.get $l5670 - local.get $l5671 - i32.add - local.set $l5672 - local.get $l5671 - local.get $l5672 - i32.add - local.set $l5673 - local.get $l5672 - local.get $l5673 - i32.add - local.set $l5674 - local.get $l5673 - local.get $l5674 - i32.add - local.set $l5675 - local.get $l5674 - local.get $l5675 - i32.add - local.set $l5676 - local.get $l5675 - local.get $l5676 - i32.add - local.set $l5677 - local.get $l5676 - local.get $l5677 - i32.add - local.set $l5678 - local.get $l5677 - local.get $l5678 - i32.add - local.set $l5679 - local.get $l5678 - local.get $l5679 - i32.add - local.set $l5680 - local.get $l5679 - local.get $l5680 - i32.add - local.set $l5681 - local.get $l5680 - local.get $l5681 - i32.add - local.set $l5682 - local.get $l5681 - local.get $l5682 - i32.add - local.set $l5683 - local.get $l5682 - local.get $l5683 - i32.add - local.set $l5684 - local.get $l5683 - local.get $l5684 - i32.add - local.set $l5685 - local.get $l5684 - local.get $l5685 - i32.add - local.set $l5686 - local.get $l5685 - local.get $l5686 - i32.add - local.set $l5687 - local.get $l5686 - local.get $l5687 - i32.add - local.set $l5688 - local.get $l5687 - local.get $l5688 - i32.add - local.set $l5689 - local.get $l5688 - local.get $l5689 - i32.add - local.set $l5690 - local.get $l5689 - local.get $l5690 - i32.add - local.set $l5691 - local.get $l5690 - local.get $l5691 - i32.add - local.set $l5692 - local.get $l5691 - local.get $l5692 - i32.add - local.set $l5693 - local.get $l5692 - local.get $l5693 - i32.add - local.set $l5694 - local.get $l5693 - local.get $l5694 - i32.add - local.set $l5695 - local.get $l5694 - local.get $l5695 - i32.add - local.set $l5696 - local.get $l5695 - local.get $l5696 - i32.add - local.set $l5697 - local.get $l5696 - local.get $l5697 - i32.add - local.set $l5698 - local.get $l5697 - local.get $l5698 - i32.add - local.set $l5699 - local.get $l5698 - local.get $l5699 - i32.add - local.set $l5700 - local.get $l5699 - local.get $l5700 - i32.add - local.set $l5701 - local.get $l5700 - local.get $l5701 - i32.add - local.set $l5702 - local.get $l5701 - local.get $l5702 - i32.add - local.set $l5703 - local.get $l5702 - local.get $l5703 - i32.add - local.set $l5704 - local.get $l5703 - local.get $l5704 - i32.add - local.set $l5705 - local.get $l5704 - local.get $l5705 - i32.add - local.set $l5706 - local.get $l5705 - local.get $l5706 - i32.add - local.set $l5707 - local.get $l5706 - local.get $l5707 - i32.add - local.set $l5708 - local.get $l5707 - local.get $l5708 - i32.add - local.set $l5709 - local.get $l5708 - local.get $l5709 - i32.add - local.set $l5710 - local.get $l5709 - local.get $l5710 - i32.add - local.set $l5711 - local.get $l5710 - local.get $l5711 - i32.add - local.set $l5712 - local.get $l5711 - local.get $l5712 - i32.add - local.set $l5713 - local.get $l5712 - local.get $l5713 - i32.add - local.set $l5714 - local.get $l5713 - local.get $l5714 - i32.add - local.set $l5715 - local.get $l5714 - local.get $l5715 - i32.add - local.set $l5716 - local.get $l5715 - local.get $l5716 - i32.add - local.set $l5717 - local.get $l5716 - local.get $l5717 - i32.add - local.set $l5718 - local.get $l5717 - local.get $l5718 - i32.add - local.set $l5719 - local.get $l5718 - local.get $l5719 - i32.add - local.set $l5720 - local.get $l5719 - local.get $l5720 - i32.add - local.set $l5721 - local.get $l5720 - local.get $l5721 - i32.add - local.set $l5722 - local.get $l5721 - local.get $l5722 - i32.add - local.set $l5723 - local.get $l5722 - local.get $l5723 - i32.add - local.set $l5724 - local.get $l5723 - local.get $l5724 - i32.add - local.set $l5725 - local.get $l5724 - local.get $l5725 - i32.add - local.set $l5726 - local.get $l5725 - local.get $l5726 - i32.add - local.set $l5727 - local.get $l5726 - local.get $l5727 - i32.add - local.set $l5728 - local.get $l5727 - local.get $l5728 - i32.add - local.set $l5729 - local.get $l5728 - local.get $l5729 - i32.add - local.set $l5730 - local.get $l5729 - local.get $l5730 - i32.add - local.set $l5731 - local.get $l5730 - local.get $l5731 - i32.add - local.set $l5732 - local.get $l5731 - local.get $l5732 - i32.add - local.set $l5733 - local.get $l5732 - local.get $l5733 - i32.add - local.set $l5734 - local.get $l5733 - local.get $l5734 - i32.add - local.set $l5735 - local.get $l5734 - local.get $l5735 - i32.add - local.set $l5736 - local.get $l5735 - local.get $l5736 - i32.add - local.set $l5737 - local.get $l5736 - local.get $l5737 - i32.add - local.set $l5738 - local.get $l5737 - local.get $l5738 - i32.add - local.set $l5739 - local.get $l5738 - local.get $l5739 - i32.add - local.set $l5740 - local.get $l5739 - local.get $l5740 - i32.add - local.set $l5741 - local.get $l5740 - local.get $l5741 - i32.add - local.set $l5742 - local.get $l5741 - local.get $l5742 - i32.add - local.set $l5743 - local.get $l5742 - local.get $l5743 - i32.add - local.set $l5744 - local.get $l5743 - local.get $l5744 - i32.add - local.set $l5745 - local.get $l5744 - local.get $l5745 - i32.add - local.set $l5746 - local.get $l5745 - local.get $l5746 - i32.add - local.set $l5747 - local.get $l5746 - local.get $l5747 - i32.add - local.set $l5748 - local.get $l5747 - local.get $l5748 - i32.add - local.set $l5749 - local.get $l5748 - local.get $l5749 - i32.add - local.set $l5750 - local.get $l5749 - local.get $l5750 - i32.add - local.set $l5751 - local.get $l5750 - local.get $l5751 - i32.add - local.set $l5752 - local.get $l5751 - local.get $l5752 - i32.add - local.set $l5753 - local.get $l5752 - local.get $l5753 - i32.add - local.set $l5754 - local.get $l5753 - local.get $l5754 - i32.add - local.set $l5755 - local.get $l5754 - local.get $l5755 - i32.add - local.set $l5756 - local.get $l5755 - local.get $l5756 - i32.add - local.set $l5757 - local.get $l5756 - local.get $l5757 - i32.add - local.set $l5758 - local.get $l5757 - local.get $l5758 - i32.add - local.set $l5759 - local.get $l5758 - local.get $l5759 - i32.add - local.set $l5760 - local.get $l5759 - local.get $l5760 - i32.add - local.set $l5761 - local.get $l5760 - local.get $l5761 - i32.add - local.set $l5762 - local.get $l5761 - local.get $l5762 - i32.add - local.set $l5763 - local.get $l5762 - local.get $l5763 - i32.add - local.set $l5764 - local.get $l5763 - local.get $l5764 - i32.add - local.set $l5765 - local.get $l5764 - local.get $l5765 - i32.add - local.set $l5766 - local.get $l5765 - local.get $l5766 - i32.add - local.set $l5767 - local.get $l5766 - local.get $l5767 - i32.add - local.set $l5768 - local.get $l5767 - local.get $l5768 - i32.add - local.set $l5769 - local.get $l5768 - local.get $l5769 - i32.add - local.set $l5770 - local.get $l5769 - local.get $l5770 - i32.add - local.set $l5771 - local.get $l5770 - local.get $l5771 - i32.add - local.set $l5772 - local.get $l5771 - local.get $l5772 - i32.add - local.set $l5773 - local.get $l5772 - local.get $l5773 - i32.add - local.set $l5774 - local.get $l5773 - local.get $l5774 - i32.add - local.set $l5775 - local.get $l5774 - local.get $l5775 - i32.add - local.set $l5776 - local.get $l5775 - local.get $l5776 - i32.add - local.set $l5777 - local.get $l5776 - local.get $l5777 - i32.add - local.set $l5778 - local.get $l5777 - local.get $l5778 - i32.add - local.set $l5779 - local.get $l5778 - local.get $l5779 - i32.add - local.set $l5780 - local.get $l5779 - local.get $l5780 - i32.add - local.set $l5781 - local.get $l5780 - local.get $l5781 - i32.add - local.set $l5782 - local.get $l5781 - local.get $l5782 - i32.add - local.set $l5783 - local.get $l5782 - local.get $l5783 - i32.add - local.set $l5784 - local.get $l5783 - local.get $l5784 - i32.add - local.set $l5785 - local.get $l5784 - local.get $l5785 - i32.add - local.set $l5786 - local.get $l5785 - local.get $l5786 - i32.add - local.set $l5787 - local.get $l5786 - local.get $l5787 - i32.add - local.set $l5788 - local.get $l5787 - local.get $l5788 - i32.add - local.set $l5789 - local.get $l5788 - local.get $l5789 - i32.add - local.set $l5790 - local.get $l5789 - local.get $l5790 - i32.add - local.set $l5791 - local.get $l5790 - local.get $l5791 - i32.add - local.set $l5792 - local.get $l5791 - local.get $l5792 - i32.add - local.set $l5793 - local.get $l5792 - local.get $l5793 - i32.add - local.set $l5794 - local.get $l5793 - local.get $l5794 - i32.add - local.set $l5795 - local.get $l5794 - local.get $l5795 - i32.add - local.set $l5796 - local.get $l5795 - local.get $l5796 - i32.add - local.set $l5797 - local.get $l5796 - local.get $l5797 - i32.add - local.set $l5798 - local.get $l5797 - local.get $l5798 - i32.add - local.set $l5799 - local.get $l5798 - local.get $l5799 - i32.add - local.set $l5800 - local.get $l5799 - local.get $l5800 - i32.add - local.set $l5801 - local.get $l5800 - local.get $l5801 - i32.add - local.set $l5802 - local.get $l5801 - local.get $l5802 - i32.add - local.set $l5803 - local.get $l5802 - local.get $l5803 - i32.add - local.set $l5804 - local.get $l5803 - local.get $l5804 - i32.add - local.set $l5805 - local.get $l5804 - local.get $l5805 - i32.add - local.set $l5806 - local.get $l5805 - local.get $l5806 - i32.add - local.set $l5807 - local.get $l5806 - local.get $l5807 - i32.add - local.set $l5808 - local.get $l5807 - local.get $l5808 - i32.add - local.set $l5809 - local.get $l5808 - local.get $l5809 - i32.add - local.set $l5810 - local.get $l5809 - local.get $l5810 - i32.add - local.set $l5811 - local.get $l5810 - local.get $l5811 - i32.add - local.set $l5812 - local.get $l5811 - local.get $l5812 - i32.add - local.set $l5813 - local.get $l5812 - local.get $l5813 - i32.add - local.set $l5814 - local.get $l5813 - local.get $l5814 - i32.add - local.set $l5815 - local.get $l5814 - local.get $l5815 - i32.add - local.set $l5816 - local.get $l5815 - local.get $l5816 - i32.add - local.set $l5817 - local.get $l5816 - local.get $l5817 - i32.add - local.set $l5818 - local.get $l5817 - local.get $l5818 - i32.add - local.set $l5819 - local.get $l5818 - local.get $l5819 - i32.add - local.set $l5820 - local.get $l5819 - local.get $l5820 - i32.add - local.set $l5821 - local.get $l5820 - local.get $l5821 - i32.add - local.set $l5822 - local.get $l5821 - local.get $l5822 - i32.add - local.set $l5823 - local.get $l5822 - local.get $l5823 - i32.add - local.set $l5824 - local.get $l5823 - local.get $l5824 - i32.add - local.set $l5825 - local.get $l5824 - local.get $l5825 - i32.add - local.set $l5826 - local.get $l5825 - local.get $l5826 - i32.add - local.set $l5827 - local.get $l5826 - local.get $l5827 - i32.add - local.set $l5828 - local.get $l5827 - local.get $l5828 - i32.add - local.set $l5829 - local.get $l5828 - local.get $l5829 - i32.add - local.set $l5830 - local.get $l5829 - local.get $l5830 - i32.add - local.set $l5831 - local.get $l5830 - local.get $l5831 - i32.add - local.set $l5832 - local.get $l5831 - local.get $l5832 - i32.add - local.set $l5833 - local.get $l5832 - local.get $l5833 - i32.add - local.set $l5834 - local.get $l5833 - local.get $l5834 - i32.add - local.set $l5835 - local.get $l5834 - local.get $l5835 - i32.add - local.set $l5836 - local.get $l5835 - local.get $l5836 - i32.add - local.set $l5837 - local.get $l5836 - local.get $l5837 - i32.add - local.set $l5838 - local.get $l5837 - local.get $l5838 - i32.add - local.set $l5839 - local.get $l5838 - local.get $l5839 - i32.add - local.set $l5840 - local.get $l5839 - local.get $l5840 - i32.add - local.set $l5841 - local.get $l5840 - local.get $l5841 - i32.add - local.set $l5842 - local.get $l5841 - local.get $l5842 - i32.add - local.set $l5843 - local.get $l5842 - local.get $l5843 - i32.add - local.set $l5844 - local.get $l5843 - local.get $l5844 - i32.add - local.set $l5845 - local.get $l5844 - local.get $l5845 - i32.add - local.set $l5846 - local.get $l5845 - local.get $l5846 - i32.add - local.set $l5847 - local.get $l5846 - local.get $l5847 - i32.add - local.set $l5848 - local.get $l5847 - local.get $l5848 - i32.add - local.set $l5849 - local.get $l5848 - local.get $l5849 - i32.add - local.set $l5850 - local.get $l5849 - local.get $l5850 - i32.add - local.set $l5851 - local.get $l5850 - local.get $l5851 - i32.add - local.set $l5852 - local.get $l5851 - local.get $l5852 - i32.add - local.set $l5853 - local.get $l5852 - local.get $l5853 - i32.add - local.set $l5854 - local.get $l5853 - local.get $l5854 - i32.add - local.set $l5855 - local.get $l5854 - local.get $l5855 - i32.add - local.set $l5856 - local.get $l5855 - local.get $l5856 - i32.add - local.set $l5857 - local.get $l5856 - local.get $l5857 - i32.add - local.set $l5858 - local.get $l5857 - local.get $l5858 - i32.add - local.set $l5859 - local.get $l5858 - local.get $l5859 - i32.add - local.set $l5860 - local.get $l5859 - local.get $l5860 - i32.add - local.set $l5861 - local.get $l5860 - local.get $l5861 - i32.add - local.set $l5862 - local.get $l5861 - local.get $l5862 - i32.add - local.set $l5863 - local.get $l5862 - local.get $l5863 - i32.add - local.set $l5864 - local.get $l5863 - local.get $l5864 - i32.add - local.set $l5865 - local.get $l5864 - local.get $l5865 - i32.add - local.set $l5866 - local.get $l5865 - local.get $l5866 - i32.add - local.set $l5867 - local.get $l5866 - local.get $l5867 - i32.add - local.set $l5868 - local.get $l5867 - local.get $l5868 - i32.add - local.set $l5869 - local.get $l5868 - local.get $l5869 - i32.add - local.set $l5870 - local.get $l5869 - local.get $l5870 - i32.add - local.set $l5871 - local.get $l5870 - local.get $l5871 - i32.add - local.set $l5872 - local.get $l5871 - local.get $l5872 - i32.add - local.set $l5873 - local.get $l5872 - local.get $l5873 - i32.add - local.set $l5874 - local.get $l5873 - local.get $l5874 - i32.add - local.set $l5875 - local.get $l5874 - local.get $l5875 - i32.add - local.set $l5876 - local.get $l5875 - local.get $l5876 - i32.add - local.set $l5877 - local.get $l5876 - local.get $l5877 - i32.add - local.set $l5878 - local.get $l5877 - local.get $l5878 - i32.add - local.set $l5879 - local.get $l5878 - local.get $l5879 - i32.add - local.set $l5880 - local.get $l5879 - local.get $l5880 - i32.add - local.set $l5881 - local.get $l5880 - local.get $l5881 - i32.add - local.set $l5882 - local.get $l5881 - local.get $l5882 - i32.add - local.set $l5883 - local.get $l5882 - local.get $l5883 - i32.add - local.set $l5884 - local.get $l5883 - local.get $l5884 - i32.add - local.set $l5885 - local.get $l5884 - local.get $l5885 - i32.add - local.set $l5886 - local.get $l5885 - local.get $l5886 - i32.add - local.set $l5887 - local.get $l5886 - local.get $l5887 - i32.add - local.set $l5888 - local.get $l5887 - local.get $l5888 - i32.add - local.set $l5889 - local.get $l5888 - local.get $l5889 - i32.add - local.set $l5890 - local.get $l5889 - local.get $l5890 - i32.add - local.set $l5891 - local.get $l5890 - local.get $l5891 - i32.add - local.set $l5892 - local.get $l5891 - local.get $l5892 - i32.add - local.set $l5893 - local.get $l5892 - local.get $l5893 - i32.add - local.set $l5894 - local.get $l5893 - local.get $l5894 - i32.add - local.set $l5895 - local.get $l5894 - local.get $l5895 - i32.add - local.set $l5896 - local.get $l5895 - local.get $l5896 - i32.add - local.set $l5897 - local.get $l5896 - local.get $l5897 - i32.add - local.set $l5898 - local.get $l5897 - local.get $l5898 - i32.add - local.set $l5899 - local.get $l5898 - local.get $l5899 - i32.add - local.set $l5900 - local.get $l5899 - local.get $l5900 - i32.add - local.set $l5901 - local.get $l5900 - local.get $l5901 - i32.add - local.set $l5902 - local.get $l5901 - local.get $l5902 - i32.add - local.set $l5903 - local.get $l5902 - local.get $l5903 - i32.add - local.set $l5904 - local.get $l5903 - local.get $l5904 - i32.add - local.set $l5905 - local.get $l5904 - local.get $l5905 - i32.add - local.set $l5906 - local.get $l5905 - local.get $l5906 - i32.add - local.set $l5907 - local.get $l5906 - local.get $l5907 - i32.add - local.set $l5908 - local.get $l5907 - local.get $l5908 - i32.add - local.set $l5909 - local.get $l5908 - local.get $l5909 - i32.add - local.set $l5910 - local.get $l5909 - local.get $l5910 - i32.add - local.set $l5911 - local.get $l5910 - local.get $l5911 - i32.add - local.set $l5912 - local.get $l5911 - local.get $l5912 - i32.add - local.set $l5913 - local.get $l5912 - local.get $l5913 - i32.add - local.set $l5914 - local.get $l5913 - local.get $l5914 - i32.add - local.set $l5915 - local.get $l5914 - local.get $l5915 - i32.add - local.set $l5916 - local.get $l5915 - local.get $l5916 - i32.add - local.set $l5917 - local.get $l5916 - local.get $l5917 - i32.add - local.set $l5918 - local.get $l5917 - local.get $l5918 - i32.add - local.set $l5919 - local.get $l5918 - local.get $l5919 - i32.add - local.set $l5920 - local.get $l5919 - local.get $l5920 - i32.add - local.set $l5921 - local.get $l5920 - local.get $l5921 - i32.add - local.set $l5922 - local.get $l5921 - local.get $l5922 - i32.add - local.set $l5923 - local.get $l5922 - local.get $l5923 - i32.add - local.set $l5924 - local.get $l5923 - local.get $l5924 - i32.add - local.set $l5925 - local.get $l5924 - local.get $l5925 - i32.add - local.set $l5926 - local.get $l5925 - local.get $l5926 - i32.add - local.set $l5927 - local.get $l5926 - local.get $l5927 - i32.add - local.set $l5928 - local.get $l5927 - local.get $l5928 - i32.add - local.set $l5929 - local.get $l5928 - local.get $l5929 - i32.add - local.set $l5930 - local.get $l5929 - local.get $l5930 - i32.add - local.set $l5931 - local.get $l5930 - local.get $l5931 - i32.add - local.set $l5932 - local.get $l5931 - local.get $l5932 - i32.add - local.set $l5933 - local.get $l5932 - local.get $l5933 - i32.add - local.set $l5934 - local.get $l5933 - local.get $l5934 - i32.add - local.set $l5935 - local.get $l5934 - local.get $l5935 - i32.add - local.set $l5936 - local.get $l5935 - local.get $l5936 - i32.add - local.set $l5937 - local.get $l5936 - local.get $l5937 - i32.add - local.set $l5938 - local.get $l5937 - local.get $l5938 - i32.add - local.set $l5939 - local.get $l5938 - local.get $l5939 - i32.add - local.set $l5940 - local.get $l5939 - local.get $l5940 - i32.add - local.set $l5941 - local.get $l5940 - local.get $l5941 - i32.add - local.set $l5942 - local.get $l5941 - local.get $l5942 - i32.add - local.set $l5943 - local.get $l5942 - local.get $l5943 - i32.add - local.set $l5944 - local.get $l5943 - local.get $l5944 - i32.add - local.set $l5945 - local.get $l5944 - local.get $l5945 - i32.add - local.set $l5946 - local.get $l5945 - local.get $l5946 - i32.add - local.set $l5947 - local.get $l5946 - local.get $l5947 - i32.add - local.set $l5948 - local.get $l5947 - local.get $l5948 - i32.add - local.set $l5949 - local.get $l5948 - local.get $l5949 - i32.add - local.set $l5950 - local.get $l5949 - local.get $l5950 - i32.add - local.set $l5951 - local.get $l5950 - local.get $l5951 - i32.add - local.set $l5952 - local.get $l5951 - local.get $l5952 - i32.add - local.set $l5953 - local.get $l5952 - local.get $l5953 - i32.add - local.set $l5954 - local.get $l5953 - local.get $l5954 - i32.add - local.set $l5955 - local.get $l5954 - local.get $l5955 - i32.add - local.set $l5956 - local.get $l5955 - local.get $l5956 - i32.add - local.set $l5957 - local.get $l5956 - local.get $l5957 - i32.add - local.set $l5958 - local.get $l5957 - local.get $l5958 - i32.add - local.set $l5959 - local.get $l5958 - local.get $l5959 - i32.add - local.set $l5960 - local.get $l5959 - local.get $l5960 - i32.add - local.set $l5961 - local.get $l5960 - local.get $l5961 - i32.add - local.set $l5962 - local.get $l5961 - local.get $l5962 - i32.add - local.set $l5963 - local.get $l5962 - local.get $l5963 - i32.add - local.set $l5964 - local.get $l5963 - local.get $l5964 - i32.add - local.set $l5965 - local.get $l5964 - local.get $l5965 - i32.add - local.set $l5966 - local.get $l5965 - local.get $l5966 - i32.add - local.set $l5967 - local.get $l5966 - local.get $l5967 - i32.add - local.set $l5968 - local.get $l5967 - local.get $l5968 - i32.add - local.set $l5969 - local.get $l5968 - local.get $l5969 - i32.add - local.set $l5970 - local.get $l5969 - local.get $l5970 - i32.add - local.set $l5971 - local.get $l5970 - local.get $l5971 - i32.add - local.set $l5972 - local.get $l5971 - local.get $l5972 - i32.add - local.set $l5973 - local.get $l5972 - local.get $l5973 - i32.add - local.set $l5974 - local.get $l5973 - local.get $l5974 - i32.add - local.set $l5975 - local.get $l5974 - local.get $l5975 - i32.add - local.set $l5976 - local.get $l5975 - local.get $l5976 - i32.add - local.set $l5977 - local.get $l5976 - local.get $l5977 - i32.add - local.set $l5978 - local.get $l5977 - local.get $l5978 - i32.add - local.set $l5979 - local.get $l5978 - local.get $l5979 - i32.add - local.set $l5980 - local.get $l5979 - local.get $l5980 - i32.add - local.set $l5981 - local.get $l5980 - local.get $l5981 - i32.add - local.set $l5982 - local.get $l5981 - local.get $l5982 - i32.add - local.set $l5983 - local.get $l5982 - local.get $l5983 - i32.add - local.set $l5984 - local.get $l5983 - local.get $l5984 - i32.add - local.set $l5985 - local.get $l5984 - local.get $l5985 - i32.add - local.set $l5986 - local.get $l5985 - local.get $l5986 - i32.add - local.set $l5987 - local.get $l5986 - local.get $l5987 - i32.add - local.set $l5988 - local.get $l5987 - local.get $l5988 - i32.add - local.set $l5989 - local.get $l5988 - local.get $l5989 - i32.add - local.set $l5990 - local.get $l5989 - local.get $l5990 - i32.add - local.set $l5991 - local.get $l5990 - local.get $l5991 - i32.add - local.set $l5992 - local.get $l5991 - local.get $l5992 - i32.add - local.set $l5993 - local.get $l5992 - local.get $l5993 - i32.add - local.set $l5994 - local.get $l5993 - local.get $l5994 - i32.add - local.set $l5995 - local.get $l5994 - local.get $l5995 - i32.add - local.set $l5996 - local.get $l5995 - local.get $l5996 - i32.add - local.set $l5997 - local.get $l5996 - local.get $l5997 - i32.add - local.set $l5998 - local.get $l5997 - local.get $l5998 - i32.add - local.set $l5999 - local.get $l5998 - local.get $l5999 - i32.add - local.set $l6000 - local.get $l5999 - local.get $l6000 - i32.add - local.set $l6001 - local.get $l6000 - local.get $l6001 - i32.add - local.set $l6002 - local.get $l6001 - local.get $l6002 - i32.add - local.set $l6003 - local.get $l6002 - local.get $l6003 - i32.add - local.set $l6004 - local.get $l6003 - local.get $l6004 - i32.add - local.set $l6005 - local.get $l6004 - local.get $l6005 - i32.add - local.set $l6006 - local.get $l6005 - local.get $l6006 - i32.add - local.set $l6007 - local.get $l6006 - local.get $l6007 - i32.add - local.set $l6008 - local.get $l6007 - local.get $l6008 - i32.add - local.set $l6009 - local.get $l6008 - local.get $l6009 - i32.add - local.set $l6010 - local.get $l6009 - local.get $l6010 - i32.add - local.set $l6011 - local.get $l6010 - local.get $l6011 - i32.add - local.set $l6012 - local.get $l6011 - local.get $l6012 - i32.add - local.set $l6013 - local.get $l6012 - local.get $l6013 - i32.add - local.set $l6014 - local.get $l6013 - local.get $l6014 - i32.add - local.set $l6015 - local.get $l6014 - local.get $l6015 - i32.add - local.set $l6016 - local.get $l6015 - local.get $l6016 - i32.add - local.set $l6017 - local.get $l6016 - local.get $l6017 - i32.add - local.set $l6018 - local.get $l6017 - local.get $l6018 - i32.add - local.set $l6019 - local.get $l6018 - local.get $l6019 - i32.add - local.set $l6020 - local.get $l6019 - local.get $l6020 - i32.add - local.set $l6021 - local.get $l6020 - local.get $l6021 - i32.add - local.set $l6022 - local.get $l6021 - local.get $l6022 - i32.add - local.set $l6023 - local.get $l6022 - local.get $l6023 - i32.add - local.set $l6024 - local.get $l6023 - local.get $l6024 - i32.add - local.set $l6025 - local.get $l6024 - local.get $l6025 - i32.add - local.set $l6026 - local.get $l6025 - local.get $l6026 - i32.add - local.set $l6027 - local.get $l6026 - local.get $l6027 - i32.add - local.set $l6028 - local.get $l6027 - local.get $l6028 - i32.add - local.set $l6029 - local.get $l6028 - local.get $l6029 - i32.add - local.set $l6030 - local.get $l6029 - local.get $l6030 - i32.add - local.set $l6031 - local.get $l6030 - local.get $l6031 - i32.add - local.set $l6032 - local.get $l6031 - local.get $l6032 - i32.add - local.set $l6033 - local.get $l6032 - local.get $l6033 - i32.add - local.set $l6034 - local.get $l6033 - local.get $l6034 - i32.add - local.set $l6035 - local.get $l6034 - local.get $l6035 - i32.add - local.set $l6036 - local.get $l6035 - local.get $l6036 - i32.add - local.set $l6037 - local.get $l6036 - local.get $l6037 - i32.add - local.set $l6038 - local.get $l6037 - local.get $l6038 - i32.add - local.set $l6039 - local.get $l6038 - local.get $l6039 - i32.add - local.set $l6040 - local.get $l6039 - local.get $l6040 - i32.add - local.set $l6041 - local.get $l6040 - local.get $l6041 - i32.add - local.set $l6042 - local.get $l6041 - local.get $l6042 - i32.add - local.set $l6043 - local.get $l6042 - local.get $l6043 - i32.add - local.set $l6044 - local.get $l6043 - local.get $l6044 - i32.add - local.set $l6045 - local.get $l6044 - local.get $l6045 - i32.add - local.set $l6046 - local.get $l6045 - local.get $l6046 - i32.add - local.set $l6047 - local.get $l6046 - local.get $l6047 - i32.add - local.set $l6048 - local.get $l6047 - local.get $l6048 - i32.add - local.set $l6049 - local.get $l6048 - local.get $l6049 - i32.add - local.set $l6050 - local.get $l6049 - local.get $l6050 - i32.add - local.set $l6051 - local.get $l6050 - local.get $l6051 - i32.add - local.set $l6052 - local.get $l6051 - local.get $l6052 - i32.add - local.set $l6053 - local.get $l6052 - local.get $l6053 - i32.add - local.set $l6054 - local.get $l6053 - local.get $l6054 - i32.add - local.set $l6055 - local.get $l6054 - local.get $l6055 - i32.add - local.set $l6056 - local.get $l6055 - local.get $l6056 - i32.add - local.set $l6057 - local.get $l6056 - local.get $l6057 - i32.add - local.set $l6058 - local.get $l6057 - local.get $l6058 - i32.add - local.set $l6059 - local.get $l6058 - local.get $l6059 - i32.add - local.set $l6060 - local.get $l6059 - local.get $l6060 - i32.add - local.set $l6061 - local.get $l6060 - local.get $l6061 - i32.add - local.set $l6062 - local.get $l6061 - local.get $l6062 - i32.add - local.set $l6063 - local.get $l6062 - local.get $l6063 - i32.add - local.set $l6064 - local.get $l6063 - local.get $l6064 - i32.add - local.set $l6065 - local.get $l6064 - local.get $l6065 - i32.add - local.set $l6066 - local.get $l6065 - local.get $l6066 - i32.add - local.set $l6067 - local.get $l6066 - local.get $l6067 - i32.add - local.set $l6068 - local.get $l6067 - local.get $l6068 - i32.add - local.set $l6069 - local.get $l6068 - local.get $l6069 - i32.add - local.set $l6070 - local.get $l6069 - local.get $l6070 - i32.add - local.set $l6071 - local.get $l6070 - local.get $l6071 - i32.add - local.set $l6072 - local.get $l6071 - local.get $l6072 - i32.add - local.set $l6073 - local.get $l6072 - local.get $l6073 - i32.add - local.set $l6074 - local.get $l6073 - local.get $l6074 - i32.add - local.set $l6075 - local.get $l6074 - local.get $l6075 - i32.add - local.set $l6076 - local.get $l6075 - local.get $l6076 - i32.add - local.set $l6077 - local.get $l6076 - local.get $l6077 - i32.add - local.set $l6078 - local.get $l6077 - local.get $l6078 - i32.add - local.set $l6079 - local.get $l6078 - local.get $l6079 - i32.add - local.set $l6080 - local.get $l6079 - local.get $l6080 - i32.add - local.set $l6081 - local.get $l6080 - local.get $l6081 - i32.add - local.set $l6082 - local.get $l6081 - local.get $l6082 - i32.add - local.set $l6083 - local.get $l6082 - local.get $l6083 - i32.add - local.set $l6084 - local.get $l6083 - local.get $l6084 - i32.add - local.set $l6085 - local.get $l6084 - local.get $l6085 - i32.add - local.set $l6086 - local.get $l6085 - local.get $l6086 - i32.add - local.set $l6087 - local.get $l6086 - local.get $l6087 - i32.add - local.set $l6088 - local.get $l6087 - local.get $l6088 - i32.add - local.set $l6089 - local.get $l6088 - local.get $l6089 - i32.add - local.set $l6090 - local.get $l6089 - local.get $l6090 - i32.add - local.set $l6091 - local.get $l6090 - local.get $l6091 - i32.add - local.set $l6092 - local.get $l6091 - local.get $l6092 - i32.add - local.set $l6093 - local.get $l6092 - local.get $l6093 - i32.add - local.set $l6094 - local.get $l6093 - local.get $l6094 - i32.add - local.set $l6095 - local.get $l6094 - local.get $l6095 - i32.add - local.set $l6096 - local.get $l6095 - local.get $l6096 - i32.add - local.set $l6097 - local.get $l6096 - local.get $l6097 - i32.add - local.set $l6098 - local.get $l6097 - local.get $l6098 - i32.add - local.set $l6099 - local.get $l6098 - local.get $l6099 - i32.add - local.set $l6100 - local.get $l6099 - local.get $l6100 - i32.add - local.set $l6101 - local.get $l6100 - local.get $l6101 - i32.add - local.set $l6102 - local.get $l6101 - local.get $l6102 - i32.add - local.set $l6103 - local.get $l6102 - local.get $l6103 - i32.add - local.set $l6104 - local.get $l6103 - local.get $l6104 - i32.add - local.set $l6105 - local.get $l6104 - local.get $l6105 - i32.add - local.set $l6106 - local.get $l6105 - local.get $l6106 - i32.add - local.set $l6107 - local.get $l6106 - local.get $l6107 - i32.add - local.set $l6108 - local.get $l6107 - local.get $l6108 - i32.add - local.set $l6109 - local.get $l6108 - local.get $l6109 - i32.add - local.set $l6110 - local.get $l6109 - local.get $l6110 - i32.add - local.set $l6111 - local.get $l6110 - local.get $l6111 - i32.add - local.set $l6112 - local.get $l6111 - local.get $l6112 - i32.add - local.set $l6113 - local.get $l6112 - local.get $l6113 - i32.add - local.set $l6114 - local.get $l6113 - local.get $l6114 - i32.add - local.set $l6115 - local.get $l6114 - local.get $l6115 - i32.add - local.set $l6116 - local.get $l6115 - local.get $l6116 - i32.add - local.set $l6117 - local.get $l6116 - local.get $l6117 - i32.add - local.set $l6118 - local.get $l6117 - local.get $l6118 - i32.add - local.set $l6119 - local.get $l6118 - local.get $l6119 - i32.add - local.set $l6120 - local.get $l6119 - local.get $l6120 - i32.add - local.set $l6121 - local.get $l6120 - local.get $l6121 - i32.add - local.set $l6122 - local.get $l6121 - local.get $l6122 - i32.add - local.set $l6123 - local.get $l6122 - local.get $l6123 - i32.add - local.set $l6124 - local.get $l6123 - local.get $l6124 - i32.add - local.set $l6125 - local.get $l6124 - local.get $l6125 - i32.add - local.set $l6126 - local.get $l6125 - local.get $l6126 - i32.add - local.set $l6127 - local.get $l6126 - local.get $l6127 - i32.add - local.set $l6128 - local.get $l6127 - local.get $l6128 - i32.add - local.set $l6129 - local.get $l6128 - local.get $l6129 - i32.add - local.set $l6130 - local.get $l6129 - local.get $l6130 - i32.add - local.set $l6131 - local.get $l6130 - local.get $l6131 - i32.add - local.set $l6132 - local.get $l6131 - local.get $l6132 - i32.add - local.set $l6133 - local.get $l6132 - local.get $l6133 - i32.add - local.set $l6134 - local.get $l6133 - local.get $l6134 - i32.add - local.set $l6135 - local.get $l6134 - local.get $l6135 - i32.add - local.set $l6136 - local.get $l6135 - local.get $l6136 - i32.add - local.set $l6137 - local.get $l6136 - local.get $l6137 - i32.add - local.set $l6138 - local.get $l6137 - local.get $l6138 - i32.add - local.set $l6139 - local.get $l6138 - local.get $l6139 - i32.add - local.set $l6140 - local.get $l6139 - local.get $l6140 - i32.add - local.set $l6141 - local.get $l6140 - local.get $l6141 - i32.add - local.set $l6142 - local.get $l6141 - local.get $l6142 - i32.add - local.set $l6143 - local.get $l6142 - local.get $l6143 - i32.add - local.set $l6144 - local.get $l6143 - local.get $l6144 - i32.add - local.set $l6145 - local.get $l6144 - local.get $l6145 - i32.add - local.set $l6146 - local.get $l6145 - local.get $l6146 - i32.add - local.set $l6147 - local.get $l6146 - local.get $l6147 - i32.add - local.set $l6148 - local.get $l6147 - local.get $l6148 - i32.add - local.set $l6149 - local.get $l6148 - local.get $l6149 - i32.add - local.set $l6150 - local.get $l6149 - local.get $l6150 - i32.add - local.set $l6151 - local.get $l6150 - local.get $l6151 - i32.add - local.set $l6152 - local.get $l6151 - local.get $l6152 - i32.add - local.set $l6153 - local.get $l6152 - local.get $l6153 - i32.add - local.set $l6154 - local.get $l6153 - local.get $l6154 - i32.add - local.set $l6155 - local.get $l6154 - local.get $l6155 - i32.add - local.set $l6156 - local.get $l6155 - local.get $l6156 - i32.add - local.set $l6157 - local.get $l6156 - local.get $l6157 - i32.add - local.set $l6158 - local.get $l6157 - local.get $l6158 - i32.add - local.set $l6159 - local.get $l6158 - local.get $l6159 - i32.add - local.set $l6160 - local.get $l6159 - local.get $l6160 - i32.add - local.set $l6161 - local.get $l6160 - local.get $l6161 - i32.add - local.set $l6162 - local.get $l6161 - local.get $l6162 - i32.add - local.set $l6163 - local.get $l6162 - local.get $l6163 - i32.add - local.set $l6164 - local.get $l6163 - local.get $l6164 - i32.add - local.set $l6165 - local.get $l6164 - local.get $l6165 - i32.add - local.set $l6166 - local.get $l6165 - local.get $l6166 - i32.add - local.set $l6167 - local.get $l6166 - local.get $l6167 - i32.add - local.set $l6168 - local.get $l6167 - local.get $l6168 - i32.add - local.set $l6169 - local.get $l6168 - local.get $l6169 - i32.add - local.set $l6170 - local.get $l6169 - local.get $l6170 - i32.add - local.set $l6171 - local.get $l6170 - local.get $l6171 - i32.add - local.set $l6172 - local.get $l6171 - local.get $l6172 - i32.add - local.set $l6173 - local.get $l6172 - local.get $l6173 - i32.add - local.set $l6174 - local.get $l6173 - local.get $l6174 - i32.add - local.set $l6175 - local.get $l6174 - local.get $l6175 - i32.add - local.set $l6176 - local.get $l6175 - local.get $l6176 - i32.add - local.set $l6177 - local.get $l6176 - local.get $l6177 - i32.add - local.set $l6178 - local.get $l6177 - local.get $l6178 - i32.add - local.set $l6179 - local.get $l6178 - local.get $l6179 - i32.add - local.set $l6180 - local.get $l6179 - local.get $l6180 - i32.add - local.set $l6181 - local.get $l6180 - local.get $l6181 - i32.add - local.set $l6182 - local.get $l6181 - local.get $l6182 - i32.add - local.set $l6183 - local.get $l6182 - local.get $l6183 - i32.add - local.set $l6184 - local.get $l6183 - local.get $l6184 - i32.add - local.set $l6185 - local.get $l6184 - local.get $l6185 - i32.add - local.set $l6186 - local.get $l6185 - local.get $l6186 - i32.add - local.set $l6187 - local.get $l6186 - local.get $l6187 - i32.add - local.set $l6188 - local.get $l6187 - local.get $l6188 - i32.add - local.set $l6189 - local.get $l6188 - local.get $l6189 - i32.add - local.set $l6190 - local.get $l6189 - local.get $l6190 - i32.add - local.set $l6191 - local.get $l6190 - local.get $l6191 - i32.add - local.set $l6192 - local.get $l6191 - local.get $l6192 - i32.add - local.set $l6193 - local.get $l6192 - local.get $l6193 - i32.add - local.set $l6194 - local.get $l6193 - local.get $l6194 - i32.add - local.set $l6195 - local.get $l6194 - local.get $l6195 - i32.add - local.set $l6196 - local.get $l6195 - local.get $l6196 - i32.add - local.set $l6197 - local.get $l6196 - local.get $l6197 - i32.add - local.set $l6198 - local.get $l6197 - local.get $l6198 - i32.add - local.set $l6199 - local.get $l6198 - local.get $l6199 - i32.add - local.set $l6200 - local.get $l6199 - local.get $l6200 - i32.add - local.set $l6201 - local.get $l6200 - local.get $l6201 - i32.add - local.set $l6202 - local.get $l6201 - local.get $l6202 - i32.add - local.set $l6203 - local.get $l6202 - local.get $l6203 - i32.add - local.set $l6204 - local.get $l6203 - local.get $l6204 - i32.add - local.set $l6205 - local.get $l6204 - local.get $l6205 - i32.add - local.set $l6206 - local.get $l6205 - local.get $l6206 - i32.add - local.set $l6207 - local.get $l6206 - local.get $l6207 - i32.add - local.set $l6208 - local.get $l6207 - local.get $l6208 - i32.add - local.set $l6209 - local.get $l6208 - local.get $l6209 - i32.add - local.set $l6210 - local.get $l6209 - local.get $l6210 - i32.add - local.set $l6211 - local.get $l6210 - local.get $l6211 - i32.add - local.set $l6212 - local.get $l6211 - local.get $l6212 - i32.add - local.set $l6213 - local.get $l6212 - local.get $l6213 - i32.add - local.set $l6214 - local.get $l6213 - local.get $l6214 - i32.add - local.set $l6215 - local.get $l6214 - local.get $l6215 - i32.add - local.set $l6216 - local.get $l6215 - local.get $l6216 - i32.add - local.set $l6217 - local.get $l6216 - local.get $l6217 - i32.add - local.set $l6218 - local.get $l6217 - local.get $l6218 - i32.add - local.set $l6219 - local.get $l6218 - local.get $l6219 - i32.add - local.set $l6220 - local.get $l6219 - local.get $l6220 - i32.add - local.set $l6221 - local.get $l6220 - local.get $l6221 - i32.add - local.set $l6222 - local.get $l6221 - local.get $l6222 - i32.add - local.set $l6223 - local.get $l6222 - local.get $l6223 - i32.add - local.set $l6224 - local.get $l6223 - local.get $l6224 - i32.add - local.set $l6225 - local.get $l6224 - local.get $l6225 - i32.add - local.set $l6226 - local.get $l6225 - local.get $l6226 - i32.add - local.set $l6227 - local.get $l6226 - local.get $l6227 - i32.add - local.set $l6228 - local.get $l6227 - local.get $l6228 - i32.add - local.set $l6229 - local.get $l6228 - local.get $l6229 - i32.add - local.set $l6230 - local.get $l6229 - local.get $l6230 - i32.add - local.set $l6231 - local.get $l6230 - local.get $l6231 - i32.add - local.set $l6232 - local.get $l6231 - local.get $l6232 - i32.add - local.set $l6233 - local.get $l6232 - local.get $l6233 - i32.add - local.set $l6234 - local.get $l6233 - local.get $l6234 - i32.add - local.set $l6235 - local.get $l6234 - local.get $l6235 - i32.add - local.set $l6236 - local.get $l6235 - local.get $l6236 - i32.add - local.set $l6237 - local.get $l6236 - local.get $l6237 - i32.add - local.set $l6238 - local.get $l6237 - local.get $l6238 - i32.add - local.set $l6239 - local.get $l6238 - local.get $l6239 - i32.add - local.set $l6240 - local.get $l6239 - local.get $l6240 - i32.add - local.set $l6241 - local.get $l6240 - local.get $l6241 - i32.add - local.set $l6242 - local.get $l6241 - local.get $l6242 - i32.add - local.set $l6243 - local.get $l6242 - local.get $l6243 - i32.add - local.set $l6244 - local.get $l6243 - local.get $l6244 - i32.add - local.set $l6245 - local.get $l6244 - local.get $l6245 - i32.add - local.set $l6246 - local.get $l6245 - local.get $l6246 - i32.add - local.set $l6247 - local.get $l6246 - local.get $l6247 - i32.add - local.set $l6248 - local.get $l6247 - local.get $l6248 - i32.add - local.set $l6249 - local.get $l6248 - local.get $l6249 - i32.add - local.set $l6250 - local.get $l6249 - local.get $l6250 - i32.add - local.set $l6251 - local.get $l6250 - local.get $l6251 - i32.add - local.set $l6252 - local.get $l6251 - local.get $l6252 - i32.add - local.set $l6253 - local.get $l6252 - local.get $l6253 - i32.add - local.set $l6254 - local.get $l6253 - local.get $l6254 - i32.add - local.set $l6255 - local.get $l6254 - local.get $l6255 - i32.add - local.set $l6256 - local.get $l6255 - local.get $l6256 - i32.add - local.set $l6257 - local.get $l6256 - local.get $l6257 - i32.add - local.set $l6258 - local.get $l6257 - local.get $l6258 - i32.add - local.set $l6259 - local.get $l6258 - local.get $l6259 - i32.add - local.set $l6260 - local.get $l6259 - local.get $l6260 - i32.add - local.set $l6261 - local.get $l6260 - local.get $l6261 - i32.add - local.set $l6262 - local.get $l6261 - local.get $l6262 - i32.add - local.set $l6263 - local.get $l6262 - local.get $l6263 - i32.add - local.set $l6264 - local.get $l6263 - local.get $l6264 - i32.add - local.set $l6265 - local.get $l6264 - local.get $l6265 - i32.add - local.set $l6266 - local.get $l6265 - local.get $l6266 - i32.add - local.set $l6267 - local.get $l6266 - local.get $l6267 - i32.add - local.set $l6268 - local.get $l6267 - local.get $l6268 - i32.add - local.set $l6269 - local.get $l6268 - local.get $l6269 - i32.add - local.set $l6270 - local.get $l6269 - local.get $l6270 - i32.add - local.set $l6271 - local.get $l6270 - local.get $l6271 - i32.add - local.set $l6272 - local.get $l6271 - local.get $l6272 - i32.add - local.set $l6273 - local.get $l6272 - local.get $l6273 - i32.add - local.set $l6274 - local.get $l6273 - local.get $l6274 - i32.add - local.set $l6275 - local.get $l6274 - local.get $l6275 - i32.add - local.set $l6276 - local.get $l6275 - local.get $l6276 - i32.add - local.set $l6277 - local.get $l6276 - local.get $l6277 - i32.add - local.set $l6278 - local.get $l6277 - local.get $l6278 - i32.add - local.set $l6279 - local.get $l6278 - local.get $l6279 - i32.add - local.set $l6280 - local.get $l6279 - local.get $l6280 - i32.add - local.set $l6281 - local.get $l6280 - local.get $l6281 - i32.add - local.set $l6282 - local.get $l6281 - local.get $l6282 - i32.add - local.set $l6283 - local.get $l6282 - local.get $l6283 - i32.add - local.set $l6284 - local.get $l6283 - local.get $l6284 - i32.add - local.set $l6285 - local.get $l6284 - local.get $l6285 - i32.add - local.set $l6286 - local.get $l6285 - local.get $l6286 - i32.add - local.set $l6287 - local.get $l6286 - local.get $l6287 - i32.add - local.set $l6288 - local.get $l6287 - local.get $l6288 - i32.add - local.set $l6289 - local.get $l6288 - local.get $l6289 - i32.add - local.set $l6290 - local.get $l6289 - local.get $l6290 - i32.add - local.set $l6291 - local.get $l6290 - local.get $l6291 - i32.add - local.set $l6292 - local.get $l6291 - local.get $l6292 - i32.add - local.set $l6293 - local.get $l6292 - local.get $l6293 - i32.add - local.set $l6294 - local.get $l6293 - local.get $l6294 - i32.add - local.set $l6295 - local.get $l6294 - local.get $l6295 - i32.add - local.set $l6296 - local.get $l6295 - local.get $l6296 - i32.add - local.set $l6297 - local.get $l6296 - local.get $l6297 - i32.add - local.set $l6298 - local.get $l6297 - local.get $l6298 - i32.add - local.set $l6299 - local.get $l6298 - local.get $l6299 - i32.add - local.set $l6300 - local.get $l6299 - local.get $l6300 - i32.add - local.set $l6301 - local.get $l6300 - local.get $l6301 - i32.add - local.set $l6302 - local.get $l6301 - local.get $l6302 - i32.add - local.set $l6303 - local.get $l6302 - local.get $l6303 - i32.add - local.set $l6304 - local.get $l6303 - local.get $l6304 - i32.add - local.set $l6305 - local.get $l6304 - local.get $l6305 - i32.add - local.set $l6306 - local.get $l6305 - local.get $l6306 - i32.add - local.set $l6307 - local.get $l6306 - local.get $l6307 - i32.add - local.set $l6308 - local.get $l6307 - local.get $l6308 - i32.add - local.set $l6309 - local.get $l6308 - local.get $l6309 - i32.add - local.set $l6310 - local.get $l6309 - local.get $l6310 - i32.add - local.set $l6311 - local.get $l6310 - local.get $l6311 - i32.add - local.set $l6312 - local.get $l6311 - local.get $l6312 - i32.add - local.set $l6313 - local.get $l6312 - local.get $l6313 - i32.add - local.set $l6314 - local.get $l6313 - local.get $l6314 - i32.add - local.set $l6315 - local.get $l6314 - local.get $l6315 - i32.add - local.set $l6316 - local.get $l6315 - local.get $l6316 - i32.add - local.set $l6317 - local.get $l6316 - local.get $l6317 - i32.add - local.set $l6318 - local.get $l6317 - local.get $l6318 - i32.add - local.set $l6319 - local.get $l6318 - local.get $l6319 - i32.add - local.set $l6320 - local.get $l6319 - local.get $l6320 - i32.add - local.set $l6321 - local.get $l6320 - local.get $l6321 - i32.add - local.set $l6322 - local.get $l6321 - local.get $l6322 - i32.add - local.set $l6323 - local.get $l6322 - local.get $l6323 - i32.add - local.set $l6324 - local.get $l6323 - local.get $l6324 - i32.add - local.set $l6325 - local.get $l6324 - local.get $l6325 - i32.add - local.set $l6326 - local.get $l6325 - local.get $l6326 - i32.add - local.set $l6327 - local.get $l6326 - local.get $l6327 - i32.add - local.set $l6328 - local.get $l6327 - local.get $l6328 - i32.add - local.set $l6329 - local.get $l6328 - local.get $l6329 - i32.add - local.set $l6330 - local.get $l6329 - local.get $l6330 - i32.add - local.set $l6331 - local.get $l6330 - local.get $l6331 - i32.add - local.set $l6332 - local.get $l6331 - local.get $l6332 - i32.add - local.set $l6333 - local.get $l6332 - local.get $l6333 - i32.add - local.set $l6334 - local.get $l6333 - local.get $l6334 - i32.add - local.set $l6335 - local.get $l6334 - local.get $l6335 - i32.add - local.set $l6336 - local.get $l6335 - local.get $l6336 - i32.add - local.set $l6337 - local.get $l6336 - local.get $l6337 - i32.add - local.set $l6338 - local.get $l6337 - local.get $l6338 - i32.add - local.set $l6339 - local.get $l6338 - local.get $l6339 - i32.add - local.set $l6340 - local.get $l6339 - local.get $l6340 - i32.add - local.set $l6341 - local.get $l6340 - local.get $l6341 - i32.add - local.set $l6342 - local.get $l6341 - local.get $l6342 - i32.add - local.set $l6343 - local.get $l6342 - local.get $l6343 - i32.add - local.set $l6344 - local.get $l6343 - local.get $l6344 - i32.add - local.set $l6345 - local.get $l6344 - local.get $l6345 - i32.add - local.set $l6346 - local.get $l6345 - local.get $l6346 - i32.add - local.set $l6347 - local.get $l6346 - local.get $l6347 - i32.add - local.set $l6348 - local.get $l6347 - local.get $l6348 - i32.add - local.set $l6349 - local.get $l6348 - local.get $l6349 - i32.add - local.set $l6350 - local.get $l6349 - local.get $l6350 - i32.add - local.set $l6351 - local.get $l6350 - local.get $l6351 - i32.add - local.set $l6352 - local.get $l6351 - local.get $l6352 - i32.add - local.set $l6353 - local.get $l6352 - local.get $l6353 - i32.add - local.set $l6354 - local.get $l6353 - local.get $l6354 - i32.add - local.set $l6355 - local.get $l6354 - local.get $l6355 - i32.add - local.set $l6356 - local.get $l6355 - local.get $l6356 - i32.add - local.set $l6357 - local.get $l6356 - local.get $l6357 - i32.add - local.set $l6358 - local.get $l6357 - local.get $l6358 - i32.add - local.set $l6359 - local.get $l6358 - local.get $l6359 - i32.add - local.set $l6360 - local.get $l6359 - local.get $l6360 - i32.add - local.set $l6361 - local.get $l6360 - local.get $l6361 - i32.add - local.set $l6362 - local.get $l6361 - local.get $l6362 - i32.add - local.set $l6363 - local.get $l6362 - local.get $l6363 - i32.add - local.set $l6364 - local.get $l6363 - local.get $l6364 - i32.add - local.set $l6365 - local.get $l6364 - local.get $l6365 - i32.add - local.set $l6366 - local.get $l6365 - local.get $l6366 - i32.add - local.set $l6367 - local.get $l6366 - local.get $l6367 - i32.add - local.set $l6368 - local.get $l6367 - local.get $l6368 - i32.add - local.set $l6369 - local.get $l6368 - local.get $l6369 - i32.add - local.set $l6370 - local.get $l6369 - local.get $l6370 - i32.add - local.set $l6371 - local.get $l6370 - local.get $l6371 - i32.add - local.set $l6372 - local.get $l6371 - local.get $l6372 - i32.add - local.set $l6373 - local.get $l6372 - local.get $l6373 - i32.add - local.set $l6374 - local.get $l6373 - local.get $l6374 - i32.add - local.set $l6375 - local.get $l6374 - local.get $l6375 - i32.add - local.set $l6376 - local.get $l6375 - local.get $l6376 - i32.add - local.set $l6377 - local.get $l6376 - local.get $l6377 - i32.add - local.set $l6378 - local.get $l6377 - local.get $l6378 - i32.add - local.set $l6379 - local.get $l6378 - local.get $l6379 - i32.add - local.set $l6380 - local.get $l6379 - local.get $l6380 - i32.add - local.set $l6381 - local.get $l6380 - local.get $l6381 - i32.add - local.set $l6382 - local.get $l6381 - local.get $l6382 - i32.add - local.set $l6383 - local.get $l6382 - local.get $l6383 - i32.add - local.set $l6384 - local.get $l6383 - local.get $l6384 - i32.add - local.set $l6385 - local.get $l6384 - local.get $l6385 - i32.add - local.set $l6386 - local.get $l6385 - local.get $l6386 - i32.add - local.set $l6387 - local.get $l6386 - local.get $l6387 - i32.add - local.set $l6388 - local.get $l6387 - local.get $l6388 - i32.add - local.set $l6389 - local.get $l6388 - local.get $l6389 - i32.add - local.set $l6390 - local.get $l6389 - local.get $l6390 - i32.add - local.set $l6391 - local.get $l6390 - local.get $l6391 - i32.add - local.set $l6392 - local.get $l6391 - local.get $l6392 - i32.add - local.set $l6393 - local.get $l6392 - local.get $l6393 - i32.add - local.set $l6394 - local.get $l6393 - local.get $l6394 - i32.add - local.set $l6395 - local.get $l6394 - local.get $l6395 - i32.add - local.set $l6396 - local.get $l6395 - local.get $l6396 - i32.add - local.set $l6397 - local.get $l6396 - local.get $l6397 - i32.add - local.set $l6398 - local.get $l6397 - local.get $l6398 - i32.add - local.set $l6399 - local.get $l6398 - local.get $l6399 - i32.add - local.set $l6400 - local.get $l6399 - local.get $l6400 - i32.add - local.set $l6401 - local.get $l6400 - local.get $l6401 - i32.add - local.set $l6402 - local.get $l6401 - local.get $l6402 - i32.add - local.set $l6403 - local.get $l6402 - local.get $l6403 - i32.add - local.set $l6404 - local.get $l6403 - local.get $l6404 - i32.add - local.set $l6405 - local.get $l6404 - local.get $l6405 - i32.add - local.set $l6406 - local.get $l6405 - local.get $l6406 - i32.add - local.set $l6407 - local.get $l6406 - local.get $l6407 - i32.add - local.set $l6408 - local.get $l6407 - local.get $l6408 - i32.add - local.set $l6409 - local.get $l6408 - local.get $l6409 - i32.add - local.set $l6410 - local.get $l6409 - local.get $l6410 - i32.add - local.set $l6411 - local.get $l6410 - local.get $l6411 - i32.add - local.set $l6412 - local.get $l6411 - local.get $l6412 - i32.add - local.set $l6413 - local.get $l6412 - local.get $l6413 - i32.add - local.set $l6414 - local.get $l6413 - local.get $l6414 - i32.add - local.set $l6415 - local.get $l6414 - local.get $l6415 - i32.add - local.set $l6416 - local.get $l6415 - local.get $l6416 - i32.add - local.set $l6417 - local.get $l6416 - local.get $l6417 - i32.add - local.set $l6418 - local.get $l6417 - local.get $l6418 - i32.add - local.set $l6419 - local.get $l6418 - local.get $l6419 - i32.add - local.set $l6420 - local.get $l6419 - local.get $l6420 - i32.add - local.set $l6421 - local.get $l6420 - local.get $l6421 - i32.add - local.set $l6422 - local.get $l6421 - local.get $l6422 - i32.add - local.set $l6423 - local.get $l6422 - local.get $l6423 - i32.add - local.set $l6424 - local.get $l6423 - local.get $l6424 - i32.add - local.set $l6425 - local.get $l6424 - local.get $l6425 - i32.add - local.set $l6426 - local.get $l6425 - local.get $l6426 - i32.add - local.set $l6427 - local.get $l6426 - local.get $l6427 - i32.add - local.set $l6428 - local.get $l6427 - local.get $l6428 - i32.add - local.set $l6429 - local.get $l6428 - local.get $l6429 - i32.add - local.set $l6430 - local.get $l6429 - local.get $l6430 - i32.add - local.set $l6431 - local.get $l6430 - local.get $l6431 - i32.add - local.set $l6432 - local.get $l6431 - local.get $l6432 - i32.add - local.set $l6433 - local.get $l6432 - local.get $l6433 - i32.add - local.set $l6434 - local.get $l6433 - local.get $l6434 - i32.add - local.set $l6435 - local.get $l6434 - local.get $l6435 - i32.add - local.set $l6436 - local.get $l6435 - local.get $l6436 - i32.add - local.set $l6437 - local.get $l6436 - local.get $l6437 - i32.add - local.set $l6438 - local.get $l6437 - local.get $l6438 - i32.add - local.set $l6439 - local.get $l6438 - local.get $l6439 - i32.add - local.set $l6440 - local.get $l6439 - local.get $l6440 - i32.add - local.set $l6441 - local.get $l6440 - local.get $l6441 - i32.add - local.set $l6442 - local.get $l6441 - local.get $l6442 - i32.add - local.set $l6443 - local.get $l6442 - local.get $l6443 - i32.add - local.set $l6444 - local.get $l6443 - local.get $l6444 - i32.add - local.set $l6445 - local.get $l6444 - local.get $l6445 - i32.add - local.set $l6446 - local.get $l6445 - local.get $l6446 - i32.add - local.set $l6447 - local.get $l6446 - local.get $l6447 - i32.add - local.set $l6448 - local.get $l6447 - local.get $l6448 - i32.add - local.set $l6449 - local.get $l6448 - local.get $l6449 - i32.add - local.set $l6450 - local.get $l6449 - local.get $l6450 - i32.add - local.set $l6451 - local.get $l6450 - local.get $l6451 - i32.add - local.set $l6452 - local.get $l6451 - local.get $l6452 - i32.add - local.set $l6453 - local.get $l6452 - local.get $l6453 - i32.add - local.set $l6454 - local.get $l6453 - local.get $l6454 - i32.add - local.set $l6455 - local.get $l6454 - local.get $l6455 - i32.add - local.set $l6456 - local.get $l6455 - local.get $l6456 - i32.add - local.set $l6457 - local.get $l6456 - local.get $l6457 - i32.add - local.set $l6458 - local.get $l6457 - local.get $l6458 - i32.add - local.set $l6459 - local.get $l6458 - local.get $l6459 - i32.add - local.set $l6460 - local.get $l6459 - local.get $l6460 - i32.add - local.set $l6461 - local.get $l6460 - local.get $l6461 - i32.add - local.set $l6462 - local.get $l6461 - local.get $l6462 - i32.add - local.set $l6463 - local.get $l6462 - local.get $l6463 - i32.add - local.set $l6464 - local.get $l6463 - local.get $l6464 - i32.add - local.set $l6465 - local.get $l6464 - local.get $l6465 - i32.add - local.set $l6466 - local.get $l6465 - local.get $l6466 - i32.add - local.set $l6467 - local.get $l6466 - local.get $l6467 - i32.add - local.set $l6468 - local.get $l6467 - local.get $l6468 - i32.add - local.set $l6469 - local.get $l6468 - local.get $l6469 - i32.add - local.set $l6470 - local.get $l6469 - local.get $l6470 - i32.add - local.set $l6471 - local.get $l6470 - local.get $l6471 - i32.add - local.set $l6472 - local.get $l6471 - local.get $l6472 - i32.add - local.set $l6473 - local.get $l6472 - local.get $l6473 - i32.add - local.set $l6474 - local.get $l6473 - local.get $l6474 - i32.add - local.set $l6475 - local.get $l6474 - local.get $l6475 - i32.add - local.set $l6476 - local.get $l6475 - local.get $l6476 - i32.add - local.set $l6477 - local.get $l6476 - local.get $l6477 - i32.add - local.set $l6478 - local.get $l6477 - local.get $l6478 - i32.add - local.set $l6479 - local.get $l6478 - local.get $l6479 - i32.add - local.set $l6480 - local.get $l6479 - local.get $l6480 - i32.add - local.set $l6481 - local.get $l6480 - local.get $l6481 - i32.add - local.set $l6482 - local.get $l6481 - local.get $l6482 - i32.add - local.set $l6483 - local.get $l6482 - local.get $l6483 - i32.add - local.set $l6484 - local.get $l6483 - local.get $l6484 - i32.add - local.set $l6485 - local.get $l6484 - local.get $l6485 - i32.add - local.set $l6486 - local.get $l6485 - local.get $l6486 - i32.add - local.set $l6487 - local.get $l6486 - local.get $l6487 - i32.add - local.set $l6488 - local.get $l6487 - local.get $l6488 - i32.add - local.set $l6489 - local.get $l6488 - local.get $l6489 - i32.add - local.set $l6490 - local.get $l6489 - local.get $l6490 - i32.add - local.set $l6491 - local.get $l6490 - local.get $l6491 - i32.add - local.set $l6492 - local.get $l6491 - local.get $l6492 - i32.add - local.set $l6493 - local.get $l6492 - local.get $l6493 - i32.add - local.set $l6494 - local.get $l6493 - local.get $l6494 - i32.add - local.set $l6495 - local.get $l6494 - local.get $l6495 - i32.add - local.set $l6496 - local.get $l6495 - local.get $l6496 - i32.add - local.set $l6497 - local.get $l6496 - local.get $l6497 - i32.add - local.set $l6498 - local.get $l6497 - local.get $l6498 - i32.add - local.set $l6499 - local.get $l6498 - local.get $l6499 - i32.add - local.set $l6500 - local.get $l6499 - local.get $l6500 - i32.add - local.set $l6501 - local.get $l6500 - local.get $l6501 - i32.add - local.set $l6502 - local.get $l6501 - local.get $l6502 - i32.add - local.set $l6503 - local.get $l6502 - local.get $l6503 - i32.add - local.set $l6504 - local.get $l6503 - local.get $l6504 - i32.add - local.set $l6505 - local.get $l6504 - local.get $l6505 - i32.add - local.set $l6506 - local.get $l6505 - local.get $l6506 - i32.add - local.set $l6507 - local.get $l6506 - local.get $l6507 - i32.add - local.set $l6508 - local.get $l6507 - local.get $l6508 - i32.add - local.set $l6509 - local.get $l6508 - local.get $l6509 - i32.add - local.set $l6510 - local.get $l6509 - local.get $l6510 - i32.add - local.set $l6511 - local.get $l6510 - local.get $l6511 - i32.add - local.set $l6512 - local.get $l6511 - local.get $l6512 - i32.add - local.set $l6513 - local.get $l6512 - local.get $l6513 - i32.add - local.set $l6514 - local.get $l6513 - local.get $l6514 - i32.add - local.set $l6515 - local.get $l6514 - local.get $l6515 - i32.add - local.set $l6516 - local.get $l6515 - local.get $l6516 - i32.add - local.set $l6517 - local.get $l6516 - local.get $l6517 - i32.add - local.set $l6518 - local.get $l6517 - local.get $l6518 - i32.add - local.set $l6519 - local.get $l6518 - local.get $l6519 - i32.add - local.set $l6520 - local.get $l6519 - local.get $l6520 - i32.add - local.set $l6521 - local.get $l6520 - local.get $l6521 - i32.add - local.set $l6522 - local.get $l6521 - local.get $l6522 - i32.add - local.set $l6523 - local.get $l6522 - local.get $l6523 - i32.add - local.set $l6524 - local.get $l6523 - local.get $l6524 - i32.add - local.set $l6525 - local.get $l6524 - local.get $l6525 - i32.add - local.set $l6526 - local.get $l6525 - local.get $l6526 - i32.add - local.set $l6527 - local.get $l6526 - local.get $l6527 - i32.add - local.set $l6528 - local.get $l6527 - local.get $l6528 - i32.add - local.set $l6529 - local.get $l6528 - local.get $l6529 - i32.add - local.set $l6530 - local.get $l6529 - local.get $l6530 - i32.add - local.set $l6531 - local.get $l6530 - local.get $l6531 - i32.add - local.set $l6532 - local.get $l6531 - local.get $l6532 - i32.add - local.set $l6533 - local.get $l6532 - local.get $l6533 - i32.add - local.set $l6534 - local.get $l6533 - local.get $l6534 - i32.add - local.set $l6535 - local.get $l6534 - local.get $l6535 - i32.add - local.set $l6536 - local.get $l6535 - local.get $l6536 - i32.add - local.set $l6537 - local.get $l6536 - local.get $l6537 - i32.add - local.set $l6538 - local.get $l6537 - local.get $l6538 - i32.add - local.set $l6539 - local.get $l6538 - local.get $l6539 - i32.add - local.set $l6540 - local.get $l6539 - local.get $l6540 - i32.add - local.set $l6541 - local.get $l6540 - local.get $l6541 - i32.add - local.set $l6542 - local.get $l6541 - local.get $l6542 - i32.add - local.set $l6543 - local.get $l6542 - local.get $l6543 - i32.add - local.set $l6544 - local.get $l6543 - local.get $l6544 - i32.add - local.set $l6545 - local.get $l6544 - local.get $l6545 - i32.add - local.set $l6546 - local.get $l6545 - local.get $l6546 - i32.add - local.set $l6547 - local.get $l6546 - local.get $l6547 - i32.add - local.set $l6548 - local.get $l6547 - local.get $l6548 - i32.add - local.set $l6549 - local.get $l6548 - local.get $l6549 - i32.add - local.set $l6550 - local.get $l6549 - local.get $l6550 - i32.add - local.set $l6551 - local.get $l6550 - local.get $l6551 - i32.add - local.set $l6552 - local.get $l6551 - local.get $l6552 - i32.add - local.set $l6553 - local.get $l6552 - local.get $l6553 - i32.add - local.set $l6554 - local.get $l6553 - local.get $l6554 - i32.add - local.set $l6555 - local.get $l6554 - local.get $l6555 - i32.add - local.set $l6556 - local.get $l6555 - local.get $l6556 - i32.add - local.set $l6557 - local.get $l6556 - local.get $l6557 - i32.add - local.set $l6558 - local.get $l6557 - local.get $l6558 - i32.add - local.set $l6559 - local.get $l6558 - local.get $l6559 - i32.add - local.set $l6560 - local.get $l6559 - local.get $l6560 - i32.add - local.set $l6561 - local.get $l6560 - local.get $l6561 - i32.add - local.set $l6562 - local.get $l6561 - local.get $l6562 - i32.add - local.set $l6563 - local.get $l6562 - local.get $l6563 - i32.add - local.set $l6564 - local.get $l6563 - local.get $l6564 - i32.add - local.set $l6565 - local.get $l6564 - local.get $l6565 - i32.add - local.set $l6566 - local.get $l6565 - local.get $l6566 - i32.add - local.set $l6567 - local.get $l6566 - local.get $l6567 - i32.add - local.set $l6568 - local.get $l6567 - local.get $l6568 - i32.add - local.set $l6569 - local.get $l6568 - local.get $l6569 - i32.add - local.set $l6570 - local.get $l6569 - local.get $l6570 - i32.add - local.set $l6571 - local.get $l6570 - local.get $l6571 - i32.add - local.set $l6572 - local.get $l6571 - local.get $l6572 - i32.add - local.set $l6573 - local.get $l6572 - local.get $l6573 - i32.add - local.set $l6574 - local.get $l6573 - local.get $l6574 - i32.add - local.set $l6575 - local.get $l6574 - local.get $l6575 - i32.add - local.set $l6576 - local.get $l6575 - local.get $l6576 - i32.add - local.set $l6577 - local.get $l6576 - local.get $l6577 - i32.add - local.set $l6578 - local.get $l6577 - local.get $l6578 - i32.add - local.set $l6579 - local.get $l6578 - local.get $l6579 - i32.add - local.set $l6580 - local.get $l6579 - local.get $l6580 - i32.add - local.set $l6581 - local.get $l6580 - local.get $l6581 - i32.add - local.set $l6582 - local.get $l6581 - local.get $l6582 - i32.add - local.set $l6583 - local.get $l6582 - local.get $l6583 - i32.add - local.set $l6584 - local.get $l6583 - local.get $l6584 - i32.add - local.set $l6585 - local.get $l6584 - local.get $l6585 - i32.add - local.set $l6586 - local.get $l6585 - local.get $l6586 - i32.add - local.set $l6587 - local.get $l6586 - local.get $l6587 - i32.add - local.set $l6588 - local.get $l6587 - local.get $l6588 - i32.add - local.set $l6589 - local.get $l6588 - local.get $l6589 - i32.add - local.set $l6590 - local.get $l6589 - local.get $l6590 - i32.add - local.set $l6591 - local.get $l6590 - local.get $l6591 - i32.add - local.set $l6592 - local.get $l6591 - local.get $l6592 - i32.add - local.set $l6593 - local.get $l6592 - local.get $l6593 - i32.add - local.set $l6594 - local.get $l6593 - local.get $l6594 - i32.add - local.set $l6595 - local.get $l6594 - local.get $l6595 - i32.add - local.set $l6596 - local.get $l6595 - local.get $l6596 - i32.add - local.set $l6597 - local.get $l6596 - local.get $l6597 - i32.add - local.set $l6598 - local.get $l6597 - local.get $l6598 - i32.add - local.set $l6599 - local.get $l6598 - local.get $l6599 - i32.add - local.set $l6600 - local.get $l6599 - local.get $l6600 - i32.add - local.set $l6601 - local.get $l6600 - local.get $l6601 - i32.add - local.set $l6602 - local.get $l6601 - local.get $l6602 - i32.add - local.set $l6603 - local.get $l6602 - local.get $l6603 - i32.add - local.set $l6604 - local.get $l6603 - local.get $l6604 - i32.add - local.set $l6605 - local.get $l6604 - local.get $l6605 - i32.add - local.set $l6606 - local.get $l6605 - local.get $l6606 - i32.add - local.set $l6607 - local.get $l6606 - local.get $l6607 - i32.add - local.set $l6608 - local.get $l6607 - local.get $l6608 - i32.add - local.set $l6609 - local.get $l6608 - local.get $l6609 - i32.add - local.set $l6610 - local.get $l6609 - local.get $l6610 - i32.add - local.set $l6611 - local.get $l6610 - local.get $l6611 - i32.add - local.set $l6612 - local.get $l6611 - local.get $l6612 - i32.add - local.set $l6613 - local.get $l6612 - local.get $l6613 - i32.add - local.set $l6614 - local.get $l6613 - local.get $l6614 - i32.add - local.set $l6615 - local.get $l6614 - local.get $l6615 - i32.add - local.set $l6616 - local.get $l6615 - local.get $l6616 - i32.add - local.set $l6617 - local.get $l6616 - local.get $l6617 - i32.add - local.set $l6618 - local.get $l6617 - local.get $l6618 - i32.add - local.set $l6619 - local.get $l6618 - local.get $l6619 - i32.add - local.set $l6620 - local.get $l6619 - local.get $l6620 - i32.add - local.set $l6621 - local.get $l6620 - local.get $l6621 - i32.add - local.set $l6622 - local.get $l6621 - local.get $l6622 - i32.add - local.set $l6623 - local.get $l6622 - local.get $l6623 - i32.add - local.set $l6624 - local.get $l6623 - local.get $l6624 - i32.add - local.set $l6625 - local.get $l6624 - local.get $l6625 - i32.add - local.set $l6626 - local.get $l6625 - local.get $l6626 - i32.add - local.set $l6627 - local.get $l6626 - local.get $l6627 - i32.add - local.set $l6628 - local.get $l6627 - local.get $l6628 - i32.add - local.set $l6629 - local.get $l6628 - local.get $l6629 - i32.add - local.set $l6630 - local.get $l6629 - local.get $l6630 - i32.add - local.set $l6631 - local.get $l6630 - local.get $l6631 - i32.add - local.set $l6632 - local.get $l6631 - local.get $l6632 - i32.add - local.set $l6633 - local.get $l6632 - local.get $l6633 - i32.add - local.set $l6634 - local.get $l6633 - local.get $l6634 - i32.add - local.set $l6635 - local.get $l6634 - local.get $l6635 - i32.add - local.set $l6636 - local.get $l6635 - local.get $l6636 - i32.add - local.set $l6637 - local.get $l6636 - local.get $l6637 - i32.add - local.set $l6638 - local.get $l6637 - local.get $l6638 - i32.add - local.set $l6639 - local.get $l6638 - local.get $l6639 - i32.add - local.set $l6640 - local.get $l6639 - local.get $l6640 - i32.add - local.set $l6641 - local.get $l6640 - local.get $l6641 - i32.add - local.set $l6642 - local.get $l6641 - local.get $l6642 - i32.add - local.set $l6643 - local.get $l6642 - local.get $l6643 - i32.add - local.set $l6644 - local.get $l6643 - local.get $l6644 - i32.add - local.set $l6645 - local.get $l6644 - local.get $l6645 - i32.add - local.set $l6646 - local.get $l6645 - local.get $l6646 - i32.add - local.set $l6647 - local.get $l6646 - local.get $l6647 - i32.add - local.set $l6648 - local.get $l6647 - local.get $l6648 - i32.add - local.set $l6649 - local.get $l6648 - local.get $l6649 - i32.add - local.set $l6650 - local.get $l6649 - local.get $l6650 - i32.add - local.set $l6651 - local.get $l6650 - local.get $l6651 - i32.add - local.set $l6652 - local.get $l6651 - local.get $l6652 - i32.add - local.set $l6653 - local.get $l6652 - local.get $l6653 - i32.add - local.set $l6654 - local.get $l6653 - local.get $l6654 - i32.add - local.set $l6655 - local.get $l6654 - local.get $l6655 - i32.add - local.set $l6656 - local.get $l6655 - local.get $l6656 - i32.add - local.set $l6657 - local.get $l6656 - local.get $l6657 - i32.add - local.set $l6658 - local.get $l6657 - local.get $l6658 - i32.add - local.set $l6659 - local.get $l6658 - local.get $l6659 - i32.add - local.set $l6660 - local.get $l6659 - local.get $l6660 - i32.add - local.set $l6661 - local.get $l6660 - local.get $l6661 - i32.add - local.set $l6662 - local.get $l6661 - local.get $l6662 - i32.add - local.set $l6663 - local.get $l6662 - local.get $l6663 - i32.add - local.set $l6664 - local.get $l6663 - local.get $l6664 - i32.add - local.set $l6665 - local.get $l6664 - local.get $l6665 - i32.add - local.set $l6666 - local.get $l6665 - local.get $l6666 - i32.add - local.set $l6667 - local.get $l6666 - local.get $l6667 - i32.add - local.set $l6668 - local.get $l6667 - local.get $l6668 - i32.add - local.set $l6669 - local.get $l6668 - local.get $l6669 - i32.add - local.set $l6670 - local.get $l6669 - local.get $l6670 - i32.add - local.set $l6671 - local.get $l6670 - local.get $l6671 - i32.add - local.set $l6672 - local.get $l6671 - local.get $l6672 - i32.add - local.set $l6673 - local.get $l6672 - local.get $l6673 - i32.add - local.set $l6674 - local.get $l6673 - local.get $l6674 - i32.add - local.set $l6675 - local.get $l6674 - local.get $l6675 - i32.add - local.set $l6676 - local.get $l6675 - local.get $l6676 - i32.add - local.set $l6677 - local.get $l6676 - local.get $l6677 - i32.add - local.set $l6678 - local.get $l6677 - local.get $l6678 - i32.add - local.set $l6679 - local.get $l6678 - local.get $l6679 - i32.add - local.set $l6680 - local.get $l6679 - local.get $l6680 - i32.add - local.set $l6681 - local.get $l6680 - local.get $l6681 - i32.add - local.set $l6682 - local.get $l6681 - local.get $l6682 - i32.add - local.set $l6683 - local.get $l6682 - local.get $l6683 - i32.add - local.set $l6684 - local.get $l6683 - local.get $l6684 - i32.add - local.set $l6685 - local.get $l6684 - local.get $l6685 - i32.add - local.set $l6686 - local.get $l6685 - local.get $l6686 - i32.add - local.set $l6687 - local.get $l6686 - local.get $l6687 - i32.add - local.set $l6688 - local.get $l6687 - local.get $l6688 - i32.add - local.set $l6689 - local.get $l6688 - local.get $l6689 - i32.add - local.set $l6690 - local.get $l6689 - local.get $l6690 - i32.add - local.set $l6691 - local.get $l6690 - local.get $l6691 - i32.add - local.set $l6692 - local.get $l6691 - local.get $l6692 - i32.add - local.set $l6693 - local.get $l6692 - local.get $l6693 - i32.add - local.set $l6694 - local.get $l6693 - local.get $l6694 - i32.add - local.set $l6695 - local.get $l6694 - local.get $l6695 - i32.add - local.set $l6696 - local.get $l6695 - local.get $l6696 - i32.add - local.set $l6697 - local.get $l6696 - local.get $l6697 - i32.add - local.set $l6698 - local.get $l6697 - local.get $l6698 - i32.add - local.set $l6699 - local.get $l6698 - local.get $l6699 - i32.add - local.set $l6700 - local.get $l6699 - local.get $l6700 - i32.add - local.set $l6701 - local.get $l6700 - local.get $l6701 - i32.add - local.set $l6702 - local.get $l6701 - local.get $l6702 - i32.add - local.set $l6703 - local.get $l6702 - local.get $l6703 - i32.add - local.set $l6704 - local.get $l6703 - local.get $l6704 - i32.add - local.set $l6705 - local.get $l6704 - local.get $l6705 - i32.add - local.set $l6706 - local.get $l6705 - local.get $l6706 - i32.add - local.set $l6707 - local.get $l6706 - local.get $l6707 - i32.add - local.set $l6708 - local.get $l6707 - local.get $l6708 - i32.add - local.set $l6709 - local.get $l6708 - local.get $l6709 - i32.add - local.set $l6710 - local.get $l6709 - local.get $l6710 - i32.add - local.set $l6711 - local.get $l6710 - local.get $l6711 - i32.add - local.set $l6712 - local.get $l6711 - local.get $l6712 - i32.add - local.set $l6713 - local.get $l6712 - local.get $l6713 - i32.add - local.set $l6714 - local.get $l6713 - local.get $l6714 - i32.add - local.set $l6715 - local.get $l6714 - local.get $l6715 - i32.add - local.set $l6716 - local.get $l6715 - local.get $l6716 - i32.add - local.set $l6717 - local.get $l6716 - local.get $l6717 - i32.add - local.set $l6718 - local.get $l6717 - local.get $l6718 - i32.add - local.set $l6719 - local.get $l6718 - local.get $l6719 - i32.add - local.set $l6720 - local.get $l6719 - local.get $l6720 - i32.add - local.set $l6721 - local.get $l6720 - local.get $l6721 - i32.add - local.set $l6722 - local.get $l6721 - local.get $l6722 - i32.add - local.set $l6723 - local.get $l6722 - local.get $l6723 - i32.add - local.set $l6724 - local.get $l6723 - local.get $l6724 - i32.add - local.set $l6725 - local.get $l6724 - local.get $l6725 - i32.add - local.set $l6726 - local.get $l6725 - local.get $l6726 - i32.add - local.set $l6727 - local.get $l6726 - local.get $l6727 - i32.add - local.set $l6728 - local.get $l6727 - local.get $l6728 - i32.add - local.set $l6729 - local.get $l6728 - local.get $l6729 - i32.add - local.set $l6730 - local.get $l6729 - local.get $l6730 - i32.add - local.set $l6731 - local.get $l6730 - local.get $l6731 - i32.add - local.set $l6732 - local.get $l6731 - local.get $l6732 - i32.add - local.set $l6733 - local.get $l6732 - local.get $l6733 - i32.add - local.set $l6734 - local.get $l6733 - local.get $l6734 - i32.add - local.set $l6735 - local.get $l6734 - local.get $l6735 - i32.add - local.set $l6736 - local.get $l6735 - local.get $l6736 - i32.add - local.set $l6737 - local.get $l6736 - local.get $l6737 - i32.add - local.set $l6738 - local.get $l6737 - local.get $l6738 - i32.add - local.set $l6739 - local.get $l6738 - local.get $l6739 - i32.add - local.set $l6740 - local.get $l6739 - local.get $l6740 - i32.add - local.set $l6741 - local.get $l6740 - local.get $l6741 - i32.add - local.set $l6742 - local.get $l6741 - local.get $l6742 - i32.add - local.set $l6743 - local.get $l6742 - local.get $l6743 - i32.add - local.set $l6744 - local.get $l6743 - local.get $l6744 - i32.add - local.set $l6745 - local.get $l6744 - local.get $l6745 - i32.add - local.set $l6746 - local.get $l6745 - local.get $l6746 - i32.add - local.set $l6747 - local.get $l6746 - local.get $l6747 - i32.add - local.set $l6748 - local.get $l6747 - local.get $l6748 - i32.add - local.set $l6749 - local.get $l6748 - local.get $l6749 - i32.add - local.set $l6750 - local.get $l6749 - local.get $l6750 - i32.add - local.set $l6751 - local.get $l6750 - local.get $l6751 - i32.add - local.set $l6752 - local.get $l6751 - local.get $l6752 - i32.add - local.set $l6753 - local.get $l6752 - local.get $l6753 - i32.add - local.set $l6754 - local.get $l6753 - local.get $l6754 - i32.add - local.set $l6755 - local.get $l6754 - local.get $l6755 - i32.add - local.set $l6756 - local.get $l6755 - local.get $l6756 - i32.add - local.set $l6757 - local.get $l6756 - local.get $l6757 - i32.add - local.set $l6758 - local.get $l6757 - local.get $l6758 - i32.add - local.set $l6759 - local.get $l6758 - local.get $l6759 - i32.add - local.set $l6760 - local.get $l6759 - local.get $l6760 - i32.add - local.set $l6761 - local.get $l6760 - local.get $l6761 - i32.add - local.set $l6762 - local.get $l6761 - local.get $l6762 - i32.add - local.set $l6763 - local.get $l6762 - local.get $l6763 - i32.add - local.set $l6764 - local.get $l6763 - local.get $l6764 - i32.add - local.set $l6765 - local.get $l6764 - local.get $l6765 - i32.add - local.set $l6766 - local.get $l6765 - local.get $l6766 - i32.add - local.set $l6767 - local.get $l6766 - local.get $l6767 - i32.add - local.set $l6768 - local.get $l6767 - local.get $l6768 - i32.add - local.set $l6769 - local.get $l6768 - local.get $l6769 - i32.add - local.set $l6770 - local.get $l6769 - local.get $l6770 - i32.add - local.set $l6771 - local.get $l6770 - local.get $l6771 - i32.add - local.set $l6772 - local.get $l6771 - local.get $l6772 - i32.add - local.set $l6773 - local.get $l6772 - local.get $l6773 - i32.add - local.set $l6774 - local.get $l6773 - local.get $l6774 - i32.add - local.set $l6775 - local.get $l6774 - local.get $l6775 - i32.add - local.set $l6776 - local.get $l6775 - local.get $l6776 - i32.add - local.set $l6777 - local.get $l6776 - local.get $l6777 - i32.add - local.set $l6778 - local.get $l6777 - local.get $l6778 - i32.add - local.set $l6779 - local.get $l6778 - local.get $l6779 - i32.add - local.set $l6780 - local.get $l6779 - local.get $l6780 - i32.add - local.set $l6781 - local.get $l6780 - local.get $l6781 - i32.add - local.set $l6782 - local.get $l6781 - local.get $l6782 - i32.add - local.set $l6783 - local.get $l6782 - local.get $l6783 - i32.add - local.set $l6784 - local.get $l6783 - local.get $l6784 - i32.add - local.set $l6785 - local.get $l6784 - local.get $l6785 - i32.add - local.set $l6786 - local.get $l6785 - local.get $l6786 - i32.add - local.set $l6787 - local.get $l6786 - local.get $l6787 - i32.add - local.set $l6788 - local.get $l6787 - local.get $l6788 - i32.add - local.set $l6789 - local.get $l6788 - local.get $l6789 - i32.add - local.set $l6790 - local.get $l6789 - local.get $l6790 - i32.add - local.set $l6791 - local.get $l6790 - local.get $l6791 - i32.add - local.set $l6792 - local.get $l6791 - local.get $l6792 - i32.add - local.set $l6793 - local.get $l6792 - local.get $l6793 - i32.add - local.set $l6794 - local.get $l6793 - local.get $l6794 - i32.add - local.set $l6795 - local.get $l6794 - local.get $l6795 - i32.add - local.set $l6796 - local.get $l6795 - local.get $l6796 - i32.add - local.set $l6797 - local.get $l6796 - local.get $l6797 - i32.add - local.set $l6798 - local.get $l6797 - local.get $l6798 - i32.add - local.set $l6799 - local.get $l6798 - local.get $l6799 - i32.add - local.set $l6800 - local.get $l6799 - local.get $l6800 - i32.add - local.set $l6801 - local.get $l6800 - local.get $l6801 - i32.add - local.set $l6802 - local.get $l6801 - local.get $l6802 - i32.add - local.set $l6803 - local.get $l6802 - local.get $l6803 - i32.add - local.set $l6804 - local.get $l6803 - local.get $l6804 - i32.add - local.set $l6805 - local.get $l6804 - local.get $l6805 - i32.add - local.set $l6806 - local.get $l6805 - local.get $l6806 - i32.add - local.set $l6807 - local.get $l6806 - local.get $l6807 - i32.add - local.set $l6808 - local.get $l6807 - local.get $l6808 - i32.add - local.set $l6809 - local.get $l6808 - local.get $l6809 - i32.add - local.set $l6810 - local.get $l6809 - local.get $l6810 - i32.add - local.set $l6811 - local.get $l6810 - local.get $l6811 - i32.add - local.set $l6812 - local.get $l6811 - local.get $l6812 - i32.add - local.set $l6813 - local.get $l6812 - local.get $l6813 - i32.add - local.set $l6814 - local.get $l6813 - local.get $l6814 - i32.add - local.set $l6815 - local.get $l6814 - local.get $l6815 - i32.add - local.set $l6816 - local.get $l6815 - local.get $l6816 - i32.add - local.set $l6817 - local.get $l6816 - local.get $l6817 - i32.add - local.set $l6818 - local.get $l6817 - local.get $l6818 - i32.add - local.set $l6819 - local.get $l6818 - local.get $l6819 - i32.add - local.set $l6820 - local.get $l6819 - local.get $l6820 - i32.add - local.set $l6821 - local.get $l6820 - local.get $l6821 - i32.add - local.set $l6822 - local.get $l6821 - local.get $l6822 - i32.add - local.set $l6823 - local.get $l6822 - local.get $l6823 - i32.add - local.set $l6824 - local.get $l6823 - local.get $l6824 - i32.add - local.set $l6825 - local.get $l6824 - local.get $l6825 - i32.add - local.set $l6826 - local.get $l6825 - local.get $l6826 - i32.add - local.set $l6827 - local.get $l6826 - local.get $l6827 - i32.add - local.set $l6828 - local.get $l6827 - local.get $l6828 - i32.add - local.set $l6829 - local.get $l6828 - local.get $l6829 - i32.add - local.set $l6830 - local.get $l6829 - local.get $l6830 - i32.add - local.set $l6831 - local.get $l6830 - local.get $l6831 - i32.add - local.set $l6832 - local.get $l6831 - local.get $l6832 - i32.add - local.set $l6833 - local.get $l6832 - local.get $l6833 - i32.add - local.set $l6834 - local.get $l6833 - local.get $l6834 - i32.add - local.set $l6835 - local.get $l6834 - local.get $l6835 - i32.add - local.set $l6836 - local.get $l6835 - local.get $l6836 - i32.add - local.set $l6837 - local.get $l6836 - local.get $l6837 - i32.add - local.set $l6838 - local.get $l6837 - local.get $l6838 - i32.add - local.set $l6839 - local.get $l6838 - local.get $l6839 - i32.add - local.set $l6840 - local.get $l6839 - local.get $l6840 - i32.add - local.set $l6841 - local.get $l6840 - local.get $l6841 - i32.add - local.set $l6842 - local.get $l6841 - local.get $l6842 - i32.add - local.set $l6843 - local.get $l6842 - local.get $l6843 - i32.add - local.set $l6844 - local.get $l6843 - local.get $l6844 - i32.add - local.set $l6845 - local.get $l6844 - local.get $l6845 - i32.add - local.set $l6846 - local.get $l6845 - local.get $l6846 - i32.add - local.set $l6847 - local.get $l6846 - local.get $l6847 - i32.add - local.set $l6848 - local.get $l6847 - local.get $l6848 - i32.add - local.set $l6849 - local.get $l6848 - local.get $l6849 - i32.add - local.set $l6850 - local.get $l6849 - local.get $l6850 - i32.add - local.set $l6851 - local.get $l6850 - local.get $l6851 - i32.add - local.set $l6852 - local.get $l6851 - local.get $l6852 - i32.add - local.set $l6853 - local.get $l6852 - local.get $l6853 - i32.add - local.set $l6854 - local.get $l6853 - local.get $l6854 - i32.add - local.set $l6855 - local.get $l6854 - local.get $l6855 - i32.add - local.set $l6856 - local.get $l6855 - local.get $l6856 - i32.add - local.set $l6857 - local.get $l6856 - local.get $l6857 - i32.add - local.set $l6858 - local.get $l6857 - local.get $l6858 - i32.add - local.set $l6859 - local.get $l6858 - local.get $l6859 - i32.add - local.set $l6860 - local.get $l6859 - local.get $l6860 - i32.add - local.set $l6861 - local.get $l6860 - local.get $l6861 - i32.add - local.set $l6862 - local.get $l6861 - local.get $l6862 - i32.add - local.set $l6863 - local.get $l6862 - local.get $l6863 - i32.add - local.set $l6864 - local.get $l6863 - local.get $l6864 - i32.add - local.set $l6865 - local.get $l6864 - local.get $l6865 - i32.add - local.set $l6866 - local.get $l6865 - local.get $l6866 - i32.add - local.set $l6867 - local.get $l6866 - local.get $l6867 - i32.add - local.set $l6868 - local.get $l6867 - local.get $l6868 - i32.add - local.set $l6869 - local.get $l6868 - local.get $l6869 - i32.add - local.set $l6870 - local.get $l6869 - local.get $l6870 - i32.add - local.set $l6871 - local.get $l6870 - local.get $l6871 - i32.add - local.set $l6872 - local.get $l6871 - local.get $l6872 - i32.add - local.set $l6873 - local.get $l6872 - local.get $l6873 - i32.add - local.set $l6874 - local.get $l6873 - local.get $l6874 - i32.add - local.set $l6875 - local.get $l6874 - local.get $l6875 - i32.add - local.set $l6876 - local.get $l6875 - local.get $l6876 - i32.add - local.set $l6877 - local.get $l6876 - local.get $l6877 - i32.add - local.set $l6878 - local.get $l6877 - local.get $l6878 - i32.add - local.set $l6879 - local.get $l6878 - local.get $l6879 - i32.add - local.set $l6880 - local.get $l6879 - local.get $l6880 - i32.add - local.set $l6881 - local.get $l6880 - local.get $l6881 - i32.add - local.set $l6882 - local.get $l6881 - local.get $l6882 - i32.add - local.set $l6883 - local.get $l6882 - local.get $l6883 - i32.add - local.set $l6884 - local.get $l6883 - local.get $l6884 - i32.add - local.set $l6885 - local.get $l6884 - local.get $l6885 - i32.add - local.set $l6886 - local.get $l6885 - local.get $l6886 - i32.add - local.set $l6887 - local.get $l6886 - local.get $l6887 - i32.add - local.set $l6888 - local.get $l6887 - local.get $l6888 - i32.add - local.set $l6889 - local.get $l6888 - local.get $l6889 - i32.add - local.set $l6890 - local.get $l6889 - local.get $l6890 - i32.add - local.set $l6891 - local.get $l6890 - local.get $l6891 - i32.add - local.set $l6892 - local.get $l6891 - local.get $l6892 - i32.add - local.set $l6893 - local.get $l6892 - local.get $l6893 - i32.add - local.set $l6894 - local.get $l6893 - local.get $l6894 - i32.add - local.set $l6895 - local.get $l6894 - local.get $l6895 - i32.add - local.set $l6896 - local.get $l6895 - local.get $l6896 - i32.add - local.set $l6897 - local.get $l6896 - local.get $l6897 - i32.add - local.set $l6898 - local.get $l6897 - local.get $l6898 - i32.add - local.set $l6899 - local.get $l6898 - local.get $l6899 - i32.add - local.set $l6900 - local.get $l6899 - local.get $l6900 - i32.add - local.set $l6901 - local.get $l6900 - local.get $l6901 - i32.add - local.set $l6902 - local.get $l6901 - local.get $l6902 - i32.add - local.set $l6903 - local.get $l6902 - local.get $l6903 - i32.add - local.set $l6904 - local.get $l6903 - local.get $l6904 - i32.add - local.set $l6905 - local.get $l6904 - local.get $l6905 - i32.add - local.set $l6906 - local.get $l6905 - local.get $l6906 - i32.add - local.set $l6907 - local.get $l6906 - local.get $l6907 - i32.add - local.set $l6908 - local.get $l6907 - local.get $l6908 - i32.add - local.set $l6909 - local.get $l6908 - local.get $l6909 - i32.add - local.set $l6910 - local.get $l6909 - local.get $l6910 - i32.add - local.set $l6911 - local.get $l6910 - local.get $l6911 - i32.add - local.set $l6912 - local.get $l6911 - local.get $l6912 - i32.add - local.set $l6913 - local.get $l6912 - local.get $l6913 - i32.add - local.set $l6914 - local.get $l6913 - local.get $l6914 - i32.add - local.set $l6915 - local.get $l6914 - local.get $l6915 - i32.add - local.set $l6916 - local.get $l6915 - local.get $l6916 - i32.add - local.set $l6917 - local.get $l6916 - local.get $l6917 - i32.add - local.set $l6918 - local.get $l6917 - local.get $l6918 - i32.add - local.set $l6919 - local.get $l6918 - local.get $l6919 - i32.add - local.set $l6920 - local.get $l6919 - local.get $l6920 - i32.add - local.set $l6921 - local.get $l6920 - local.get $l6921 - i32.add - local.set $l6922 - local.get $l6921 - local.get $l6922 - i32.add - local.set $l6923 - local.get $l6922 - local.get $l6923 - i32.add - local.set $l6924 - local.get $l6923 - local.get $l6924 - i32.add - local.set $l6925 - local.get $l6924 - local.get $l6925 - i32.add - local.set $l6926 - local.get $l6925 - local.get $l6926 - i32.add - local.set $l6927 - local.get $l6926 - local.get $l6927 - i32.add - local.set $l6928 - local.get $l6927 - local.get $l6928 - i32.add - local.set $l6929 - local.get $l6928 - local.get $l6929 - i32.add - local.set $l6930 - local.get $l6929 - local.get $l6930 - i32.add - local.set $l6931 - local.get $l6930 - local.get $l6931 - i32.add - local.set $l6932 - local.get $l6931 - local.get $l6932 - i32.add - local.set $l6933 - local.get $l6932 - local.get $l6933 - i32.add - local.set $l6934 - local.get $l6933 - local.get $l6934 - i32.add - local.set $l6935 - local.get $l6934 - local.get $l6935 - i32.add - local.set $l6936 - local.get $l6935 - local.get $l6936 - i32.add - local.set $l6937 - local.get $l6936 - local.get $l6937 - i32.add - local.set $l6938 - local.get $l6937 - local.get $l6938 - i32.add - local.set $l6939 - local.get $l6938 - local.get $l6939 - i32.add - local.set $l6940 - local.get $l6939 - local.get $l6940 - i32.add - local.set $l6941 - local.get $l6940 - local.get $l6941 - i32.add - local.set $l6942 - local.get $l6941 - local.get $l6942 - i32.add - local.set $l6943 - local.get $l6942 - local.get $l6943 - i32.add - local.set $l6944 - local.get $l6943 - local.get $l6944 - i32.add - local.set $l6945 - local.get $l6944 - local.get $l6945 - i32.add - local.set $l6946 - local.get $l6945 - local.get $l6946 - i32.add - local.set $l6947 - local.get $l6946 - local.get $l6947 - i32.add - local.set $l6948 - local.get $l6947 - local.get $l6948 - i32.add - local.set $l6949 - local.get $l6948 - local.get $l6949 - i32.add - local.set $l6950 - local.get $l6949 - local.get $l6950 - i32.add - local.set $l6951 - local.get $l6950 - local.get $l6951 - i32.add - local.set $l6952 - local.get $l6951 - local.get $l6952 - i32.add - local.set $l6953 - local.get $l6952 - local.get $l6953 - i32.add - local.set $l6954 - local.get $l6953 - local.get $l6954 - i32.add - local.set $l6955 - local.get $l6954 - local.get $l6955 - i32.add - local.set $l6956 - local.get $l6955 - local.get $l6956 - i32.add - local.set $l6957 - local.get $l6956 - local.get $l6957 - i32.add - local.set $l6958 - local.get $l6957 - local.get $l6958 - i32.add - local.set $l6959 - local.get $l6958 - local.get $l6959 - i32.add - local.set $l6960 - local.get $l6959 - local.get $l6960 - i32.add - local.set $l6961 - local.get $l6960 - local.get $l6961 - i32.add - local.set $l6962 - local.get $l6961 - local.get $l6962 - i32.add - local.set $l6963 - local.get $l6962 - local.get $l6963 - i32.add - local.set $l6964 - local.get $l6963 - local.get $l6964 - i32.add - local.set $l6965 - local.get $l6964 - local.get $l6965 - i32.add - local.set $l6966 - local.get $l6965 - local.get $l6966 - i32.add - local.set $l6967 - local.get $l6966 - local.get $l6967 - i32.add - local.set $l6968 - local.get $l6967 - local.get $l6968 - i32.add - local.set $l6969 - local.get $l6968 - local.get $l6969 - i32.add - local.set $l6970 - local.get $l6969 - local.get $l6970 - i32.add - local.set $l6971 - local.get $l6970 - local.get $l6971 - i32.add - local.set $l6972 - local.get $l6971 - local.get $l6972 - i32.add - local.set $l6973 - local.get $l6972 - local.get $l6973 - i32.add - local.set $l6974 - local.get $l6973 - local.get $l6974 - i32.add - local.set $l6975 - local.get $l6974 - local.get $l6975 - i32.add - local.set $l6976 - local.get $l6975 - local.get $l6976 - i32.add - local.set $l6977 - local.get $l6976 - local.get $l6977 - i32.add - local.set $l6978 - local.get $l6977 - local.get $l6978 - i32.add - local.set $l6979 - local.get $l6978 - local.get $l6979 - i32.add - local.set $l6980 - local.get $l6979 - local.get $l6980 - i32.add - local.set $l6981 - local.get $l6980 - local.get $l6981 - i32.add - local.set $l6982 - local.get $l6981 - local.get $l6982 - i32.add - local.set $l6983 - local.get $l6982 - local.get $l6983 - i32.add - local.set $l6984 - local.get $l6983 - local.get $l6984 - i32.add - local.set $l6985 - local.get $l6984 - local.get $l6985 - i32.add - local.set $l6986 - local.get $l6985 - local.get $l6986 - i32.add - local.set $l6987 - local.get $l6986 - local.get $l6987 - i32.add - local.set $l6988 - local.get $l6987 - local.get $l6988 - i32.add - local.set $l6989 - local.get $l6988 - local.get $l6989 - i32.add - local.set $l6990 - local.get $l6989 - local.get $l6990 - i32.add - local.set $l6991 - local.get $l6990 - local.get $l6991 - i32.add - local.set $l6992 - local.get $l6991 - local.get $l6992 - i32.add - local.set $l6993 - local.get $l6992 - local.get $l6993 - i32.add - local.set $l6994 - local.get $l6993 - local.get $l6994 - i32.add - local.set $l6995 - local.get $l6994 - local.get $l6995 - i32.add - local.set $l6996 - local.get $l6995 - local.get $l6996 - i32.add - local.set $l6997 - local.get $l6996 - local.get $l6997 - i32.add - local.set $l6998 - local.get $l6997 - local.get $l6998 - i32.add - local.set $l6999 - local.get $l6998 - local.get $l6999 - i32.add - local.set $l7000 - local.get $l6999 - local.get $l7000 - i32.add - local.set $l7001 - local.get $l7000 - local.get $l7001 - i32.add - local.set $l7002 - local.get $l7001 - local.get $l7002 - i32.add - local.set $l7003 - local.get $l7002 - local.get $l7003 - i32.add - local.set $l7004 - local.get $l7003 - local.get $l7004 - i32.add - local.set $l7005 - local.get $l7004 - local.get $l7005 - i32.add - local.set $l7006 - local.get $l7005 - local.get $l7006 - i32.add - local.set $l7007 - local.get $l7006 - local.get $l7007 - i32.add - local.set $l7008 - local.get $l7007 - local.get $l7008 - i32.add - local.set $l7009 - local.get $l7008 - local.get $l7009 - i32.add - local.set $l7010 - local.get $l7009 - local.get $l7010 - i32.add - local.set $l7011 - local.get $l7010 - local.get $l7011 - i32.add - local.set $l7012 - local.get $l7011 - local.get $l7012 - i32.add - local.set $l7013 - local.get $l7012 - local.get $l7013 - i32.add - local.set $l7014 - local.get $l7013 - local.get $l7014 - i32.add - local.set $l7015 - local.get $l7014 - local.get $l7015 - i32.add - local.set $l7016 - local.get $l7015 - local.get $l7016 - i32.add - local.set $l7017 - local.get $l7016 - local.get $l7017 - i32.add - local.set $l7018 - local.get $l7017 - local.get $l7018 - i32.add - local.set $l7019 - local.get $l7018 - local.get $l7019 - i32.add - local.set $l7020 - local.get $l7019 - local.get $l7020 - i32.add - local.set $l7021 - local.get $l7020 - local.get $l7021 - i32.add - local.set $l7022 - local.get $l7021 - local.get $l7022 - i32.add - local.set $l7023 - local.get $l7022 - local.get $l7023 - i32.add - local.set $l7024 - local.get $l7023 - local.get $l7024 - i32.add - local.set $l7025 - local.get $l7024 - local.get $l7025 - i32.add - local.set $l7026 - local.get $l7025 - local.get $l7026 - i32.add - local.set $l7027 - local.get $l7026 - local.get $l7027 - i32.add - local.set $l7028 - local.get $l7027 - local.get $l7028 - i32.add - local.set $l7029 - local.get $l7028 - local.get $l7029 - i32.add - local.set $l7030 - local.get $l7029 - local.get $l7030 - i32.add - local.set $l7031 - local.get $l7030 - local.get $l7031 - i32.add - local.set $l7032 - local.get $l7031 - local.get $l7032 - i32.add - local.set $l7033 - local.get $l7032 - local.get $l7033 - i32.add - local.set $l7034 - local.get $l7033 - local.get $l7034 - i32.add - local.set $l7035 - local.get $l7034 - local.get $l7035 - i32.add - local.set $l7036 - local.get $l7035 - local.get $l7036 - i32.add - local.set $l7037 - local.get $l7036 - local.get $l7037 - i32.add - local.set $l7038 - local.get $l7037 - local.get $l7038 - i32.add - local.set $l7039 - local.get $l7038 - local.get $l7039 - i32.add - local.set $l7040 - local.get $l7039 - local.get $l7040 - i32.add - local.set $l7041 - local.get $l7040 - local.get $l7041 - i32.add - local.set $l7042 - local.get $l7041 - local.get $l7042 - i32.add - local.set $l7043 - local.get $l7042 - local.get $l7043 - i32.add - local.set $l7044 - local.get $l7043 - local.get $l7044 - i32.add - local.set $l7045 - local.get $l7044 - local.get $l7045 - i32.add - local.set $l7046 - local.get $l7045 - local.get $l7046 - i32.add - local.set $l7047 - local.get $l7046 - local.get $l7047 - i32.add - local.set $l7048 - local.get $l7047 - local.get $l7048 - i32.add - local.set $l7049 - local.get $l7048 - local.get $l7049 - i32.add - local.set $l7050 - local.get $l7049 - local.get $l7050 - i32.add - local.set $l7051 - local.get $l7050 - local.get $l7051 - i32.add - local.set $l7052 - local.get $l7051 - local.get $l7052 - i32.add - local.set $l7053 - local.get $l7052 - local.get $l7053 - i32.add - local.set $l7054 - local.get $l7053 - local.get $l7054 - i32.add - local.set $l7055 - local.get $l7054 - local.get $l7055 - i32.add - local.set $l7056 - local.get $l7055 - local.get $l7056 - i32.add - local.set $l7057 - local.get $l7056 - local.get $l7057 - i32.add - local.set $l7058 - local.get $l7057 - local.get $l7058 - i32.add - local.set $l7059 - local.get $l7058 - local.get $l7059 - i32.add - local.set $l7060 - local.get $l7059 - local.get $l7060 - i32.add - local.set $l7061 - local.get $l7060 - local.get $l7061 - i32.add - local.set $l7062 - local.get $l7061 - local.get $l7062 - i32.add - local.set $l7063 - local.get $l7062 - local.get $l7063 - i32.add - local.set $l7064 - local.get $l7063 - local.get $l7064 - i32.add - local.set $l7065 - local.get $l7064 - local.get $l7065 - i32.add - local.set $l7066 - local.get $l7065 - local.get $l7066 - i32.add - local.set $l7067 - local.get $l7066 - local.get $l7067 - i32.add - local.set $l7068 - local.get $l7067 - local.get $l7068 - i32.add - local.set $l7069 - local.get $l7068 - local.get $l7069 - i32.add - local.set $l7070 - local.get $l7069 - local.get $l7070 - i32.add - local.set $l7071 - local.get $l7070 - local.get $l7071 - i32.add - local.set $l7072 - local.get $l7071 - local.get $l7072 - i32.add - local.set $l7073 - local.get $l7072 - local.get $l7073 - i32.add - local.set $l7074 - local.get $l7073 - local.get $l7074 - i32.add - local.set $l7075 - local.get $l7074 - local.get $l7075 - i32.add - local.set $l7076 - local.get $l7075 - local.get $l7076 - i32.add - local.set $l7077 - local.get $l7076 - local.get $l7077 - i32.add - local.set $l7078 - local.get $l7077 - local.get $l7078 - i32.add - local.set $l7079 - local.get $l7078 - local.get $l7079 - i32.add - local.set $l7080 - local.get $l7079 - local.get $l7080 - i32.add - local.set $l7081 - local.get $l7080 - local.get $l7081 - i32.add - local.set $l7082 - local.get $l7081 - local.get $l7082 - i32.add - local.set $l7083 - local.get $l7082 - local.get $l7083 - i32.add - local.set $l7084 - local.get $l7083 - local.get $l7084 - i32.add - local.set $l7085 - local.get $l7084 - local.get $l7085 - i32.add - local.set $l7086 - local.get $l7085 - local.get $l7086 - i32.add - local.set $l7087 - local.get $l7086 - local.get $l7087 - i32.add - local.set $l7088 - local.get $l7087 - local.get $l7088 - i32.add - local.set $l7089 - local.get $l7088 - local.get $l7089 - i32.add - local.set $l7090 - local.get $l7089 - local.get $l7090 - i32.add - local.set $l7091 - local.get $l7090 - local.get $l7091 - i32.add - local.set $l7092 - local.get $l7091 - local.get $l7092 - i32.add - local.set $l7093 - local.get $l7092 - local.get $l7093 - i32.add - local.set $l7094 - local.get $l7093 - local.get $l7094 - i32.add - local.set $l7095 - local.get $l7094 - local.get $l7095 - i32.add - local.set $l7096 - local.get $l7095 - local.get $l7096 - i32.add - local.set $l7097 - local.get $l7096 - local.get $l7097 - i32.add - local.set $l7098 - local.get $l7097 - local.get $l7098 - i32.add - local.set $l7099 - local.get $l7098 - local.get $l7099 - i32.add - local.set $l7100 - local.get $l7099 - local.get $l7100 - i32.add - local.set $l7101 - local.get $l7100 - local.get $l7101 - i32.add - local.set $l7102 - local.get $l7101 - local.get $l7102 - i32.add - local.set $l7103 - local.get $l7102 - local.get $l7103 - i32.add - local.set $l7104 - local.get $l7103 - local.get $l7104 - i32.add - local.set $l7105 - local.get $l7104 - local.get $l7105 - i32.add - local.set $l7106 - local.get $l7105 - local.get $l7106 - i32.add - local.set $l7107 - local.get $l7106 - local.get $l7107 - i32.add - local.set $l7108 - local.get $l7107 - local.get $l7108 - i32.add - local.set $l7109 - local.get $l7108 - local.get $l7109 - i32.add - local.set $l7110 - local.get $l7109 - local.get $l7110 - i32.add - local.set $l7111 - local.get $l7110 - local.get $l7111 - i32.add - local.set $l7112 - local.get $l7111 - local.get $l7112 - i32.add - local.set $l7113 - local.get $l7112 - local.get $l7113 - i32.add - local.set $l7114 - local.get $l7113 - local.get $l7114 - i32.add - local.set $l7115 - local.get $l7114 - local.get $l7115 - i32.add - local.set $l7116 - local.get $l7115 - local.get $l7116 - i32.add - local.set $l7117 - local.get $l7116 - local.get $l7117 - i32.add - local.set $l7118 - local.get $l7117 - local.get $l7118 - i32.add - local.set $l7119 - local.get $l7118 - local.get $l7119 - i32.add - local.set $l7120 - local.get $l7119 - local.get $l7120 - i32.add - local.set $l7121 - local.get $l7120 - local.get $l7121 - i32.add - local.set $l7122 - local.get $l7121 - local.get $l7122 - i32.add - local.set $l7123 - local.get $l7122 - local.get $l7123 - i32.add - local.set $l7124 - local.get $l7123 - local.get $l7124 - i32.add - local.set $l7125 - local.get $l7124 - local.get $l7125 - i32.add - local.set $l7126 - local.get $l7125 - local.get $l7126 - i32.add - local.set $l7127 - local.get $l7126 - local.get $l7127 - i32.add - local.set $l7128 - local.get $l7127 - local.get $l7128 - i32.add - local.set $l7129 - local.get $l7128 - local.get $l7129 - i32.add - local.set $l7130 - local.get $l7129 - local.get $l7130 - i32.add - local.set $l7131 - local.get $l7130 - local.get $l7131 - i32.add - local.set $l7132 - local.get $l7131 - local.get $l7132 - i32.add - local.set $l7133 - local.get $l7132 - local.get $l7133 - i32.add - local.set $l7134 - local.get $l7133 - local.get $l7134 - i32.add - local.set $l7135 - local.get $l7134 - local.get $l7135 - i32.add - local.set $l7136 - local.get $l7135 - local.get $l7136 - i32.add - local.set $l7137 - local.get $l7136 - local.get $l7137 - i32.add - local.set $l7138 - local.get $l7137 - local.get $l7138 - i32.add - local.set $l7139 - local.get $l7138 - local.get $l7139 - i32.add - local.set $l7140 - local.get $l7139 - local.get $l7140 - i32.add - local.set $l7141 - local.get $l7140 - local.get $l7141 - i32.add - local.set $l7142 - local.get $l7141 - local.get $l7142 - i32.add - local.set $l7143 - local.get $l7142 - local.get $l7143 - i32.add - local.set $l7144 - local.get $l7143 - local.get $l7144 - i32.add - local.set $l7145 - local.get $l7144 - local.get $l7145 - i32.add - local.set $l7146 - local.get $l7145 - local.get $l7146 - i32.add - local.set $l7147 - local.get $l7146 - local.get $l7147 - i32.add - local.set $l7148 - local.get $l7147 - local.get $l7148 - i32.add - local.set $l7149 - local.get $l7148 - local.get $l7149 - i32.add - local.set $l7150 - local.get $l7149 - local.get $l7150 - i32.add - local.set $l7151 - local.get $l7150 - local.get $l7151 - i32.add - local.set $l7152 - local.get $l7151 - local.get $l7152 - i32.add - local.set $l7153 - local.get $l7152 - local.get $l7153 - i32.add - local.set $l7154 - local.get $l7153 - local.get $l7154 - i32.add - local.set $l7155 - local.get $l7154 - local.get $l7155 - i32.add - local.set $l7156 - local.get $l7155 - local.get $l7156 - i32.add - local.set $l7157 - local.get $l7156 - local.get $l7157 - i32.add - local.set $l7158 - local.get $l7157 - local.get $l7158 - i32.add - local.set $l7159 - local.get $l7158 - local.get $l7159 - i32.add - local.set $l7160 - local.get $l7159 - local.get $l7160 - i32.add - local.set $l7161 - local.get $l7160 - local.get $l7161 - i32.add - local.set $l7162 - local.get $l7161 - local.get $l7162 - i32.add - local.set $l7163 - local.get $l7162 - local.get $l7163 - i32.add - local.set $l7164 - local.get $l7163 - local.get $l7164 - i32.add - local.set $l7165 - local.get $l7164 - local.get $l7165 - i32.add - local.set $l7166 - local.get $l7165 - local.get $l7166 - i32.add - local.set $l7167 - local.get $l7166 - local.get $l7167 - i32.add - local.set $l7168 - local.get $l7167 - local.get $l7168 - i32.add - local.set $l7169 - local.get $l7168 - local.get $l7169 - i32.add - local.set $l7170 - local.get $l7169 - local.get $l7170 - i32.add - local.set $l7171 - local.get $l7170 - local.get $l7171 - i32.add - local.set $l7172 - local.get $l7171 - local.get $l7172 - i32.add - local.set $l7173 - local.get $l7172 - local.get $l7173 - i32.add - local.set $l7174 - local.get $l7173 - local.get $l7174 - i32.add - local.set $l7175 - local.get $l7174 - local.get $l7175 - i32.add - local.set $l7176 - local.get $l7175 - local.get $l7176 - i32.add - local.set $l7177 - local.get $l7176 - local.get $l7177 - i32.add - local.set $l7178 - local.get $l7177 - local.get $l7178 - i32.add - local.set $l7179 - local.get $l7178 - local.get $l7179 - i32.add - local.set $l7180 - local.get $l7179 - local.get $l7180 - i32.add - local.set $l7181 - local.get $l7180 - local.get $l7181 - i32.add - local.set $l7182 - local.get $l7181 - local.get $l7182 - i32.add - local.set $l7183 - local.get $l7182 - local.get $l7183 - i32.add - local.set $l7184 - local.get $l7183 - local.get $l7184 - i32.add - local.set $l7185 - local.get $l7184 - local.get $l7185 - i32.add - local.set $l7186 - local.get $l7185 - local.get $l7186 - i32.add - local.set $l7187 - local.get $l7186 - local.get $l7187 - i32.add - local.set $l7188 - local.get $l7187 - local.get $l7188 - i32.add - local.set $l7189 - local.get $l7188 - local.get $l7189 - i32.add - local.set $l7190 - local.get $l7189 - local.get $l7190 - i32.add - local.set $l7191 - local.get $l7190 - local.get $l7191 - i32.add - local.set $l7192 - local.get $l7191 - local.get $l7192 - i32.add - local.set $l7193 - local.get $l7192 - local.get $l7193 - i32.add - local.set $l7194 - local.get $l7193 - local.get $l7194 - i32.add - local.set $l7195 - local.get $l7194 - local.get $l7195 - i32.add - local.set $l7196 - local.get $l7195 - local.get $l7196 - i32.add - local.set $l7197 - local.get $l7196 - local.get $l7197 - i32.add - local.set $l7198 - local.get $l7197 - local.get $l7198 - i32.add - local.set $l7199 - local.get $l7198 - local.get $l7199 - i32.add - local.set $l7200 - local.get $l7199 - local.get $l7200 - i32.add - local.set $l7201 - local.get $l7200 - local.get $l7201 - i32.add - local.set $l7202 - local.get $l7201 - local.get $l7202 - i32.add - local.set $l7203 - local.get $l7202 - local.get $l7203 - i32.add - local.set $l7204 - local.get $l7203 - local.get $l7204 - i32.add - local.set $l7205 - local.get $l7204 - local.get $l7205 - i32.add - local.set $l7206 - local.get $l7205 - local.get $l7206 - i32.add - local.set $l7207 - local.get $l7206 - local.get $l7207 - i32.add - local.set $l7208 - local.get $l7207 - local.get $l7208 - i32.add - local.set $l7209 - local.get $l7208 - local.get $l7209 - i32.add - local.set $l7210 - local.get $l7209 - local.get $l7210 - i32.add - local.set $l7211 - local.get $l7210 - local.get $l7211 - i32.add - local.set $l7212 - local.get $l7211 - local.get $l7212 - i32.add - local.set $l7213 - local.get $l7212 - local.get $l7213 - i32.add - local.set $l7214 - local.get $l7213 - local.get $l7214 - i32.add - local.set $l7215 - local.get $l7214 - local.get $l7215 - i32.add - local.set $l7216 - local.get $l7215 - local.get $l7216 - i32.add - local.set $l7217 - local.get $l7216 - local.get $l7217 - i32.add - local.set $l7218 - local.get $l7217 - local.get $l7218 - i32.add - local.set $l7219 - local.get $l7218 - local.get $l7219 - i32.add - local.set $l7220 - local.get $l7219 - local.get $l7220 - i32.add - local.set $l7221 - local.get $l7220 - local.get $l7221 - i32.add - local.set $l7222 - local.get $l7221 - local.get $l7222 - i32.add - local.set $l7223 - local.get $l7222 - local.get $l7223 - i32.add - local.set $l7224 - local.get $l7223 - local.get $l7224 - i32.add - local.set $l7225 - local.get $l7224 - local.get $l7225 - i32.add - local.set $l7226 - local.get $l7225 - local.get $l7226 - i32.add - local.set $l7227 - local.get $l7226 - local.get $l7227 - i32.add - local.set $l7228 - local.get $l7227 - local.get $l7228 - i32.add - local.set $l7229 - local.get $l7228 - local.get $l7229 - i32.add - local.set $l7230 - local.get $l7229 - local.get $l7230 - i32.add - local.set $l7231 - local.get $l7230 - local.get $l7231 - i32.add - local.set $l7232 - local.get $l7231 - local.get $l7232 - i32.add - local.set $l7233 - local.get $l7232 - local.get $l7233 - i32.add - local.set $l7234 - local.get $l7233 - local.get $l7234 - i32.add - local.set $l7235 - local.get $l7234 - local.get $l7235 - i32.add - local.set $l7236 - local.get $l7235 - local.get $l7236 - i32.add - local.set $l7237 - local.get $l7236 - local.get $l7237 - i32.add - local.set $l7238 - local.get $l7237 - local.get $l7238 - i32.add - local.set $l7239 - local.get $l7238 - local.get $l7239 - i32.add - local.set $l7240 - local.get $l7239 - local.get $l7240 - i32.add - local.set $l7241 - local.get $l7240 - local.get $l7241 - i32.add - local.set $l7242 - local.get $l7241 - local.get $l7242 - i32.add - local.set $l7243 - local.get $l7242 - local.get $l7243 - i32.add - local.set $l7244 - local.get $l7243 - local.get $l7244 - i32.add - local.set $l7245 - local.get $l7244 - local.get $l7245 - i32.add - local.set $l7246 - local.get $l7245 - local.get $l7246 - i32.add - local.set $l7247 - local.get $l7246 - local.get $l7247 - i32.add - local.set $l7248 - local.get $l7247 - local.get $l7248 - i32.add - local.set $l7249 - local.get $l7248 - local.get $l7249 - i32.add - local.set $l7250 - local.get $l7249 - local.get $l7250 - i32.add - local.set $l7251 - local.get $l7250 - local.get $l7251 - i32.add - local.set $l7252 - local.get $l7251 - local.get $l7252 - i32.add - local.set $l7253 - local.get $l7252 - local.get $l7253 - i32.add - local.set $l7254 - local.get $l7253 - local.get $l7254 - i32.add - local.set $l7255 - local.get $l7254 - local.get $l7255 - i32.add - local.set $l7256 - local.get $l7255 - local.get $l7256 - i32.add - local.set $l7257 - local.get $l7256 - local.get $l7257 - i32.add - local.set $l7258 - local.get $l7257 - local.get $l7258 - i32.add - local.set $l7259 - local.get $l7258 - local.get $l7259 - i32.add - local.set $l7260 - local.get $l7259 - local.get $l7260 - i32.add - local.set $l7261 - local.get $l7260 - local.get $l7261 - i32.add - local.set $l7262 - local.get $l7261 - local.get $l7262 - i32.add - local.set $l7263 - local.get $l7262 - local.get $l7263 - i32.add - local.set $l7264 - local.get $l7263 - local.get $l7264 - i32.add - local.set $l7265 - local.get $l7264 - local.get $l7265 - i32.add - local.set $l7266 - local.get $l7265 - local.get $l7266 - i32.add - local.set $l7267 - local.get $l7266 - local.get $l7267 - i32.add - local.set $l7268 - local.get $l7267 - local.get $l7268 - i32.add - local.set $l7269 - local.get $l7268 - local.get $l7269 - i32.add - local.set $l7270 - local.get $l7269 - local.get $l7270 - i32.add - local.set $l7271 - local.get $l7270 - local.get $l7271 - i32.add - local.set $l7272 - local.get $l7271 - local.get $l7272 - i32.add - local.set $l7273 - local.get $l7272 - local.get $l7273 - i32.add - local.set $l7274 - local.get $l7273 - local.get $l7274 - i32.add - local.set $l7275 - local.get $l7274 - local.get $l7275 - i32.add - local.set $l7276 - local.get $l7275 - local.get $l7276 - i32.add - local.set $l7277 - local.get $l7276 - local.get $l7277 - i32.add - local.set $l7278 - local.get $l7277 - local.get $l7278 - i32.add - local.set $l7279 - local.get $l7278 - local.get $l7279 - i32.add - local.set $l7280 - local.get $l7279 - local.get $l7280 - i32.add - local.set $l7281 - local.get $l7280 - local.get $l7281 - i32.add - local.set $l7282 - local.get $l7281 - local.get $l7282 - i32.add - local.set $l7283 - local.get $l7282 - local.get $l7283 - i32.add - local.set $l7284 - local.get $l7283 - local.get $l7284 - i32.add - local.set $l7285 - local.get $l7284 - local.get $l7285 - i32.add - local.set $l7286 - local.get $l7285 - local.get $l7286 - i32.add - local.set $l7287 - local.get $l7286 - local.get $l7287 - i32.add - local.set $l7288 - local.get $l7287 - local.get $l7288 - i32.add - local.set $l7289 - local.get $l7288 - local.get $l7289 - i32.add - local.set $l7290 - local.get $l7289 - local.get $l7290 - i32.add - local.set $l7291 - local.get $l7290 - local.get $l7291 - i32.add - local.set $l7292 - local.get $l7291 - local.get $l7292 - i32.add - local.set $l7293 - local.get $l7292 - local.get $l7293 - i32.add - local.set $l7294 - local.get $l7293 - local.get $l7294 - i32.add - local.set $l7295 - local.get $l7294 - local.get $l7295 - i32.add - local.set $l7296 - local.get $l7295 - local.get $l7296 - i32.add - local.set $l7297 - local.get $l7296 - local.get $l7297 - i32.add - local.set $l7298 - local.get $l7297 - local.get $l7298 - i32.add - local.set $l7299 - local.get $l7298 - local.get $l7299 - i32.add - local.set $l7300 - local.get $l7299 - local.get $l7300 - i32.add - local.set $l7301 - local.get $l7300 - local.get $l7301 - i32.add - local.set $l7302 - local.get $l7301 - local.get $l7302 - i32.add - local.set $l7303 - local.get $l7302 - local.get $l7303 - i32.add - local.set $l7304 - local.get $l7303 - local.get $l7304 - i32.add - local.set $l7305 - local.get $l7304 - local.get $l7305 - i32.add - local.set $l7306 - local.get $l7305 - local.get $l7306 - i32.add - local.set $l7307 - local.get $l7306 - local.get $l7307 - i32.add - local.set $l7308 - local.get $l7307 - local.get $l7308 - i32.add - local.set $l7309 - local.get $l7308 - local.get $l7309 - i32.add - local.set $l7310 - local.get $l7309 - local.get $l7310 - i32.add - local.set $l7311 - local.get $l7310 - local.get $l7311 - i32.add - local.set $l7312 - local.get $l7311 - local.get $l7312 - i32.add - local.set $l7313 - local.get $l7312 - local.get $l7313 - i32.add - local.set $l7314 - local.get $l7313 - local.get $l7314 - i32.add - local.set $l7315 - local.get $l7314 - local.get $l7315 - i32.add - local.set $l7316 - local.get $l7315 - local.get $l7316 - i32.add - local.set $l7317 - local.get $l7316 - local.get $l7317 - i32.add - local.set $l7318 - local.get $l7317 - local.get $l7318 - i32.add - local.set $l7319 - local.get $l7318 - local.get $l7319 - i32.add - local.set $l7320 - local.get $l7319 - local.get $l7320 - i32.add - local.set $l7321 - local.get $l7320 - local.get $l7321 - i32.add - local.set $l7322 - local.get $l7321 - local.get $l7322 - i32.add - local.set $l7323 - local.get $l7322 - local.get $l7323 - i32.add - local.set $l7324 - local.get $l7323 - local.get $l7324 - i32.add - local.set $l7325 - local.get $l7324 - local.get $l7325 - i32.add - local.set $l7326 - local.get $l7325 - local.get $l7326 - i32.add - local.set $l7327 - local.get $l7326 - local.get $l7327 - i32.add - local.set $l7328 - local.get $l7327 - local.get $l7328 - i32.add - local.set $l7329 - local.get $l7328 - local.get $l7329 - i32.add - local.set $l7330 - local.get $l7329 - local.get $l7330 - i32.add - local.set $l7331 - local.get $l7330 - local.get $l7331 - i32.add - local.set $l7332 - local.get $l7331 - local.get $l7332 - i32.add - local.set $l7333 - local.get $l7332 - local.get $l7333 - i32.add - local.set $l7334 - local.get $l7333 - local.get $l7334 - i32.add - local.set $l7335 - local.get $l7334 - local.get $l7335 - i32.add - local.set $l7336 - local.get $l7335 - local.get $l7336 - i32.add - local.set $l7337 - local.get $l7336 - local.get $l7337 - i32.add - local.set $l7338 - local.get $l7337 - local.get $l7338 - i32.add - local.set $l7339 - local.get $l7338 - local.get $l7339 - i32.add - local.set $l7340 - local.get $l7339 - local.get $l7340 - i32.add - local.set $l7341 - local.get $l7340 - local.get $l7341 - i32.add - local.set $l7342 - local.get $l7341 - local.get $l7342 - i32.add - local.set $l7343 - local.get $l7342 - local.get $l7343 - i32.add - local.set $l7344 - local.get $l7343 - local.get $l7344 - i32.add - local.set $l7345 - local.get $l7344 - local.get $l7345 - i32.add - local.set $l7346 - local.get $l7345 - local.get $l7346 - i32.add - local.set $l7347 - local.get $l7346 - local.get $l7347 - i32.add - local.set $l7348 - local.get $l7347 - local.get $l7348 - i32.add - local.set $l7349 - local.get $l7348 - local.get $l7349 - i32.add - local.set $l7350 - local.get $l7349 - local.get $l7350 - i32.add - local.set $l7351 - local.get $l7350 - local.get $l7351 - i32.add - local.set $l7352 - local.get $l7351 - local.get $l7352 - i32.add - local.set $l7353 - local.get $l7352 - local.get $l7353 - i32.add - local.set $l7354 - local.get $l7353 - local.get $l7354 - i32.add - local.set $l7355 - local.get $l7354 - local.get $l7355 - i32.add - local.set $l7356 - local.get $l7355 - local.get $l7356 - i32.add - local.set $l7357 - local.get $l7356 - local.get $l7357 - i32.add - local.set $l7358 - local.get $l7357 - local.get $l7358 - i32.add - local.set $l7359 - local.get $l7358 - local.get $l7359 - i32.add - local.set $l7360 - local.get $l7359 - local.get $l7360 - i32.add - local.set $l7361 - local.get $l7360 - local.get $l7361 - i32.add - local.set $l7362 - local.get $l7361 - local.get $l7362 - i32.add - local.set $l7363 - local.get $l7362 - local.get $l7363 - i32.add - local.set $l7364 - local.get $l7363 - local.get $l7364 - i32.add - local.set $l7365 - local.get $l7364 - local.get $l7365 - i32.add - local.set $l7366 - local.get $l7365 - local.get $l7366 - i32.add - local.set $l7367 - local.get $l7366 - local.get $l7367 - i32.add - local.set $l7368 - local.get $l7367 - local.get $l7368 - i32.add - local.set $l7369 - local.get $l7368 - local.get $l7369 - i32.add - local.set $l7370 - local.get $l7369 - local.get $l7370 - i32.add - local.set $l7371 - local.get $l7370 - local.get $l7371 - i32.add - local.set $l7372 - local.get $l7371 - local.get $l7372 - i32.add - local.set $l7373 - local.get $l7372 - local.get $l7373 - i32.add - local.set $l7374 - local.get $l7373 - local.get $l7374 - i32.add - local.set $l7375 - local.get $l7374 - local.get $l7375 - i32.add - local.set $l7376 - local.get $l7375 - local.get $l7376 - i32.add - local.set $l7377 - local.get $l7376 - local.get $l7377 - i32.add - local.set $l7378 - local.get $l7377 - local.get $l7378 - i32.add - local.set $l7379 - local.get $l7378 - local.get $l7379 - i32.add - local.set $l7380 - local.get $l7379 - local.get $l7380 - i32.add - local.set $l7381 - local.get $l7380 - local.get $l7381 - i32.add - local.set $l7382 - local.get $l7381 - local.get $l7382 - i32.add - local.set $l7383 - local.get $l7382 - local.get $l7383 - i32.add - local.set $l7384 - local.get $l7383 - local.get $l7384 - i32.add - local.set $l7385 - local.get $l7384 - local.get $l7385 - i32.add - local.set $l7386 - local.get $l7385 - local.get $l7386 - i32.add - local.set $l7387 - local.get $l7386 - local.get $l7387 - i32.add - local.set $l7388 - local.get $l7387 - local.get $l7388 - i32.add - local.set $l7389 - local.get $l7388 - local.get $l7389 - i32.add - local.set $l7390 - local.get $l7389 - local.get $l7390 - i32.add - local.set $l7391 - local.get $l7390 - local.get $l7391 - i32.add - local.set $l7392 - local.get $l7391 - local.get $l7392 - i32.add - local.set $l7393 - local.get $l7392 - local.get $l7393 - i32.add - local.set $l7394 - local.get $l7393 - local.get $l7394 - i32.add - local.set $l7395 - local.get $l7394 - local.get $l7395 - i32.add - local.set $l7396 - local.get $l7395 - local.get $l7396 - i32.add - local.set $l7397 - local.get $l7396 - local.get $l7397 - i32.add - local.set $l7398 - local.get $l7397 - local.get $l7398 - i32.add - local.set $l7399 - local.get $l7398 - local.get $l7399 - i32.add - local.set $l7400 - local.get $l7399 - local.get $l7400 - i32.add - local.set $l7401 - local.get $l7400 - local.get $l7401 - i32.add - local.set $l7402 - local.get $l7401 - local.get $l7402 - i32.add - local.set $l7403 - local.get $l7402 - local.get $l7403 - i32.add - local.set $l7404 - local.get $l7403 - local.get $l7404 - i32.add - local.set $l7405 - local.get $l7404 - local.get $l7405 - i32.add - local.set $l7406 - local.get $l7405 - local.get $l7406 - i32.add - local.set $l7407 - local.get $l7406 - local.get $l7407 - i32.add - local.set $l7408 - local.get $l7407 - local.get $l7408 - i32.add - local.set $l7409 - local.get $l7408 - local.get $l7409 - i32.add - local.set $l7410 - local.get $l7409 - local.get $l7410 - i32.add - local.set $l7411 - local.get $l7410 - local.get $l7411 - i32.add - local.set $l7412 - local.get $l7411 - local.get $l7412 - i32.add - local.set $l7413 - local.get $l7412 - local.get $l7413 - i32.add - local.set $l7414 - local.get $l7413 - local.get $l7414 - i32.add - local.set $l7415 - local.get $l7414 - local.get $l7415 - i32.add - local.set $l7416 - local.get $l7415 - local.get $l7416 - i32.add - local.set $l7417 - local.get $l7416 - local.get $l7417 - i32.add - local.set $l7418 - local.get $l7417 - local.get $l7418 - i32.add - local.set $l7419 - local.get $l7418 - local.get $l7419 - i32.add - local.set $l7420 - local.get $l7419 - local.get $l7420 - i32.add - local.set $l7421 - local.get $l7420 - local.get $l7421 - i32.add - local.set $l7422 - local.get $l7421 - local.get $l7422 - i32.add - local.set $l7423 - local.get $l7422 - local.get $l7423 - i32.add - local.set $l7424 - local.get $l7423 - local.get $l7424 - i32.add - local.set $l7425 - local.get $l7424 - local.get $l7425 - i32.add - local.set $l7426 - local.get $l7425 - local.get $l7426 - i32.add - local.set $l7427 - local.get $l7426 - local.get $l7427 - i32.add - local.set $l7428 - local.get $l7427 - local.get $l7428 - i32.add - local.set $l7429 - local.get $l7428 - local.get $l7429 - i32.add - local.set $l7430 - local.get $l7429 - local.get $l7430 - i32.add - local.set $l7431 - local.get $l7430 - local.get $l7431 - i32.add - local.set $l7432 - local.get $l7431 - local.get $l7432 - i32.add - local.set $l7433 - local.get $l7432 - local.get $l7433 - i32.add - local.set $l7434 - local.get $l7433 - local.get $l7434 - i32.add - local.set $l7435 - local.get $l7434 - local.get $l7435 - i32.add - local.set $l7436 - local.get $l7435 - local.get $l7436 - i32.add - local.set $l7437 - local.get $l7436 - local.get $l7437 - i32.add - local.set $l7438 - local.get $l7437 - local.get $l7438 - i32.add - local.set $l7439 - local.get $l7438 - local.get $l7439 - i32.add - local.set $l7440 - local.get $l7439 - local.get $l7440 - i32.add - local.set $l7441 - local.get $l7440 - local.get $l7441 - i32.add - local.set $l7442 - local.get $l7441 - local.get $l7442 - i32.add - local.set $l7443 - local.get $l7442 - local.get $l7443 - i32.add - local.set $l7444 - local.get $l7443 - local.get $l7444 - i32.add - local.set $l7445 - local.get $l7444 - local.get $l7445 - i32.add - local.set $l7446 - local.get $l7445 - local.get $l7446 - i32.add - local.set $l7447 - local.get $l7446 - local.get $l7447 - i32.add - local.set $l7448 - local.get $l7447 - local.get $l7448 - i32.add - local.set $l7449 - local.get $l7448 - local.get $l7449 - i32.add - local.set $l7450 - local.get $l7449 - local.get $l7450 - i32.add - local.set $l7451 - local.get $l7450 - local.get $l7451 - i32.add - local.set $l7452 - local.get $l7451 - local.get $l7452 - i32.add - local.set $l7453 - local.get $l7452 - local.get $l7453 - i32.add - local.set $l7454 - local.get $l7453 - local.get $l7454 - i32.add - local.set $l7455 - local.get $l7454 - local.get $l7455 - i32.add - local.set $l7456 - local.get $l7455 - local.get $l7456 - i32.add - local.set $l7457 - local.get $l7456 - local.get $l7457 - i32.add - local.set $l7458 - local.get $l7457 - local.get $l7458 - i32.add - local.set $l7459 - local.get $l7458 - local.get $l7459 - i32.add - local.set $l7460 - local.get $l7459 - local.get $l7460 - i32.add - local.set $l7461 - local.get $l7460 - local.get $l7461 - i32.add - local.set $l7462 - local.get $l7461 - local.get $l7462 - i32.add - local.set $l7463 - local.get $l7462 - local.get $l7463 - i32.add - local.set $l7464 - local.get $l7463 - local.get $l7464 - i32.add - local.set $l7465 - local.get $l7464 - local.get $l7465 - i32.add - local.set $l7466 - local.get $l7465 - local.get $l7466 - i32.add - local.set $l7467 - local.get $l7466 - local.get $l7467 - i32.add - local.set $l7468 - local.get $l7467 - local.get $l7468 - i32.add - local.set $l7469 - local.get $l7468 - local.get $l7469 - i32.add - local.set $l7470 - local.get $l7469 - local.get $l7470 - i32.add - local.set $l7471 - local.get $l7470 - local.get $l7471 - i32.add - local.set $l7472 - local.get $l7471 - local.get $l7472 - i32.add - local.set $l7473 - local.get $l7472 - local.get $l7473 - i32.add - local.set $l7474 - local.get $l7473 - local.get $l7474 - i32.add - local.set $l7475 - local.get $l7474 - local.get $l7475 - i32.add - local.set $l7476 - local.get $l7475 - local.get $l7476 - i32.add - local.set $l7477 - local.get $l7476 - local.get $l7477 - i32.add - local.set $l7478 - local.get $l7477 - local.get $l7478 - i32.add - local.set $l7479 - local.get $l7478 - local.get $l7479 - i32.add - local.set $l7480 - local.get $l7479 - local.get $l7480 - i32.add - local.set $l7481 - local.get $l7480 - local.get $l7481 - i32.add - local.set $l7482 - local.get $l7481 - local.get $l7482 - i32.add - local.set $l7483 - local.get $l7482 - local.get $l7483 - i32.add - local.set $l7484 - local.get $l7483 - local.get $l7484 - i32.add - local.set $l7485 - local.get $l7484 - local.get $l7485 - i32.add - local.set $l7486 - local.get $l7485 - local.get $l7486 - i32.add - local.set $l7487 - local.get $l7486 - local.get $l7487 - i32.add - local.set $l7488 - local.get $l7487 - local.get $l7488 - i32.add - local.set $l7489 - local.get $l7488 - local.get $l7489 - i32.add - local.set $l7490 - local.get $l7489 - local.get $l7490 - i32.add - local.set $l7491 - local.get $l7490 - local.get $l7491 - i32.add - local.set $l7492 - local.get $l7491 - local.get $l7492 - i32.add - local.set $l7493 - local.get $l7492 - local.get $l7493 - i32.add - local.set $l7494 - local.get $l7493 - local.get $l7494 - i32.add - local.set $l7495 - local.get $l7494 - local.get $l7495 - i32.add - local.set $l7496 - local.get $l7495 - local.get $l7496 - i32.add - local.set $l7497 - local.get $l7496 - local.get $l7497 - i32.add - local.set $l7498 - local.get $l7497 - local.get $l7498 - i32.add - local.set $l7499 - local.get $l7498 - local.get $l7499 - i32.add - local.set $l7500 - local.get $l7499 - local.get $l7500 - i32.add - local.set $l7501 - local.get $l7500 - local.get $l7501 - i32.add - local.set $l7502 - local.get $l7501 - local.get $l7502 - i32.add - local.set $l7503 - local.get $l7502 - local.get $l7503 - i32.add - local.set $l7504 - local.get $l7503 - local.get $l7504 - i32.add - local.set $l7505 - local.get $l7504 - local.get $l7505 - i32.add - local.set $l7506 - local.get $l7505 - local.get $l7506 - i32.add - local.set $l7507 - local.get $l7506 - local.get $l7507 - i32.add - local.set $l7508 - local.get $l7507 - local.get $l7508 - i32.add - local.set $l7509 - local.get $l7508 - local.get $l7509 - i32.add - local.set $l7510 - local.get $l7509 - local.get $l7510 - i32.add - local.set $l7511 - local.get $l7510 - local.get $l7511 - i32.add - local.set $l7512 - local.get $l7511 - local.get $l7512 - i32.add - local.set $l7513 - local.get $l7512 - local.get $l7513 - i32.add - local.set $l7514 - local.get $l7513 - local.get $l7514 - i32.add - local.set $l7515 - local.get $l7514 - local.get $l7515 - i32.add - local.set $l7516 - local.get $l7515 - local.get $l7516 - i32.add - local.set $l7517 - local.get $l7516 - local.get $l7517 - i32.add - local.set $l7518 - local.get $l7517 - local.get $l7518 - i32.add - local.set $l7519 - local.get $l7518 - local.get $l7519 - i32.add - local.set $l7520 - local.get $l7519 - local.get $l7520 - i32.add - local.set $l7521 - local.get $l7520 - local.get $l7521 - i32.add - local.set $l7522 - local.get $l7521 - local.get $l7522 - i32.add - local.set $l7523 - local.get $l7522 - local.get $l7523 - i32.add - local.set $l7524 - local.get $l7523 - local.get $l7524 - i32.add - local.set $l7525 - local.get $l7524 - local.get $l7525 - i32.add - local.set $l7526 - local.get $l7525 - local.get $l7526 - i32.add - local.set $l7527 - local.get $l7526 - local.get $l7527 - i32.add - local.set $l7528 - local.get $l7527 - local.get $l7528 - i32.add - local.set $l7529 - local.get $l7528 - local.get $l7529 - i32.add - local.set $l7530 - local.get $l7529 - local.get $l7530 - i32.add - local.set $l7531 - local.get $l7530 - local.get $l7531 - i32.add - local.set $l7532 - local.get $l7531 - local.get $l7532 - i32.add - local.set $l7533 - local.get $l7532 - local.get $l7533 - i32.add - local.set $l7534 - local.get $l7533 - local.get $l7534 - i32.add - local.set $l7535 - local.get $l7534 - local.get $l7535 - i32.add - local.set $l7536 - local.get $l7535 - local.get $l7536 - i32.add - local.set $l7537 - local.get $l7536 - local.get $l7537 - i32.add - local.set $l7538 - local.get $l7537 - local.get $l7538 - i32.add - local.set $l7539 - local.get $l7538 - local.get $l7539 - i32.add - local.set $l7540 - local.get $l7539 - local.get $l7540 - i32.add - local.set $l7541 - local.get $l7540 - local.get $l7541 - i32.add - local.set $l7542 - local.get $l7541 - local.get $l7542 - i32.add - local.set $l7543 - local.get $l7542 - local.get $l7543 - i32.add - local.set $l7544 - local.get $l7543 - local.get $l7544 - i32.add - local.set $l7545 - local.get $l7544 - local.get $l7545 - i32.add - local.set $l7546 - local.get $l7545 - local.get $l7546 - i32.add - local.set $l7547 - local.get $l7546 - local.get $l7547 - i32.add - local.set $l7548 - local.get $l7547 - local.get $l7548 - i32.add - local.set $l7549 - local.get $l7548 - local.get $l7549 - i32.add - local.set $l7550 - local.get $l7549 - local.get $l7550 - i32.add - local.set $l7551 - local.get $l7550 - local.get $l7551 - i32.add - local.set $l7552 - local.get $l7551 - local.get $l7552 - i32.add - local.set $l7553 - local.get $l7552 - local.get $l7553 - i32.add - local.set $l7554 - local.get $l7553 - local.get $l7554 - i32.add - local.set $l7555 - local.get $l7554 - local.get $l7555 - i32.add - local.set $l7556 - local.get $l7555 - local.get $l7556 - i32.add - local.set $l7557 - local.get $l7556 - local.get $l7557 - i32.add - local.set $l7558 - local.get $l7557 - local.get $l7558 - i32.add - local.set $l7559 - local.get $l7558 - local.get $l7559 - i32.add - local.set $l7560 - local.get $l7559 - local.get $l7560 - i32.add - local.set $l7561 - local.get $l7560 - local.get $l7561 - i32.add - local.set $l7562 - local.get $l7561 - local.get $l7562 - i32.add - local.set $l7563 - local.get $l7562 - local.get $l7563 - i32.add - local.set $l7564 - local.get $l7563 - local.get $l7564 - i32.add - local.set $l7565 - local.get $l7564 - local.get $l7565 - i32.add - local.set $l7566 - local.get $l7565 - local.get $l7566 - i32.add - local.set $l7567 - local.get $l7566 - local.get $l7567 - i32.add - local.set $l7568 - local.get $l7567 - local.get $l7568 - i32.add - local.set $l7569 - local.get $l7568 - local.get $l7569 - i32.add - local.set $l7570 - local.get $l7569 - local.get $l7570 - i32.add - local.set $l7571 - local.get $l7570 - local.get $l7571 - i32.add - local.set $l7572 - local.get $l7571 - local.get $l7572 - i32.add - local.set $l7573 - local.get $l7572 - local.get $l7573 - i32.add - local.set $l7574 - local.get $l7573 - local.get $l7574 - i32.add - local.set $l7575 - local.get $l7574 - local.get $l7575 - i32.add - local.set $l7576 - local.get $l7575 - local.get $l7576 - i32.add - local.set $l7577 - local.get $l7576 - local.get $l7577 - i32.add - local.set $l7578 - local.get $l7577 - local.get $l7578 - i32.add - local.set $l7579 - local.get $l7578 - local.get $l7579 - i32.add - local.set $l7580 - local.get $l7579 - local.get $l7580 - i32.add - local.set $l7581 - local.get $l7580 - local.get $l7581 - i32.add - local.set $l7582 - local.get $l7581 - local.get $l7582 - i32.add - local.set $l7583 - local.get $l7582 - local.get $l7583 - i32.add - local.set $l7584 - local.get $l7583 - local.get $l7584 - i32.add - local.set $l7585 - local.get $l7584 - local.get $l7585 - i32.add - local.set $l7586 - local.get $l7585 - local.get $l7586 - i32.add - local.set $l7587 - local.get $l7586 - local.get $l7587 - i32.add - local.set $l7588 - local.get $l7587 - local.get $l7588 - i32.add - local.set $l7589 - local.get $l7588 - local.get $l7589 - i32.add - local.set $l7590 - local.get $l7589 - local.get $l7590 - i32.add - local.set $l7591 - local.get $l7590 - local.get $l7591 - i32.add - local.set $l7592 - local.get $l7591 - local.get $l7592 - i32.add - local.set $l7593 - local.get $l7592 - local.get $l7593 - i32.add - local.set $l7594 - local.get $l7593 - local.get $l7594 - i32.add - local.set $l7595 - local.get $l7594 - local.get $l7595 - i32.add - local.set $l7596 - local.get $l7595 - local.get $l7596 - i32.add - local.set $l7597 - local.get $l7596 - local.get $l7597 - i32.add - local.set $l7598 - local.get $l7597 - local.get $l7598 - i32.add - local.set $l7599 - local.get $l7598 - local.get $l7599 - i32.add - local.set $l7600 - local.get $l7599 - local.get $l7600 - i32.add - local.set $l7601 - local.get $l7600 - local.get $l7601 - i32.add - local.set $l7602 - local.get $l7601 - local.get $l7602 - i32.add - local.set $l7603 - local.get $l7602 - local.get $l7603 - i32.add - local.set $l7604 - local.get $l7603 - local.get $l7604 - i32.add - local.set $l7605 - local.get $l7604 - local.get $l7605 - i32.add - local.set $l7606 - local.get $l7605 - local.get $l7606 - i32.add - local.set $l7607 - local.get $l7606 - local.get $l7607 - i32.add - local.set $l7608 - local.get $l7607 - local.get $l7608 - i32.add - local.set $l7609 - local.get $l7608 - local.get $l7609 - i32.add - local.set $l7610 - local.get $l7609 - local.get $l7610 - i32.add - local.set $l7611 - local.get $l7610 - local.get $l7611 - i32.add - local.set $l7612 - local.get $l7611 - local.get $l7612 - i32.add - local.set $l7613 - local.get $l7612 - local.get $l7613 - i32.add - local.set $l7614 - local.get $l7613 - local.get $l7614 - i32.add - local.set $l7615 - local.get $l7614 - local.get $l7615 - i32.add - local.set $l7616 - local.get $l7615 - local.get $l7616 - i32.add - local.set $l7617 - local.get $l7616 - local.get $l7617 - i32.add - local.set $l7618 - local.get $l7617 - local.get $l7618 - i32.add - local.set $l7619 - local.get $l7618 - local.get $l7619 - i32.add - local.set $l7620 - local.get $l7619 - local.get $l7620 - i32.add - local.set $l7621 - local.get $l7620 - local.get $l7621 - i32.add - local.set $l7622 - local.get $l7621 - local.get $l7622 - i32.add - local.set $l7623 - local.get $l7622 - local.get $l7623 - i32.add - local.set $l7624 - local.get $l7623 - local.get $l7624 - i32.add - local.set $l7625 - local.get $l7624 - local.get $l7625 - i32.add - local.set $l7626 - local.get $l7625 - local.get $l7626 - i32.add - local.set $l7627 - local.get $l7626 - local.get $l7627 - i32.add - local.set $l7628 - local.get $l7627 - local.get $l7628 - i32.add - local.set $l7629 - local.get $l7628 - local.get $l7629 - i32.add - local.set $l7630 - local.get $l7629 - local.get $l7630 - i32.add - local.set $l7631 - local.get $l7630 - local.get $l7631 - i32.add - local.set $l7632 - local.get $l7631 - local.get $l7632 - i32.add - local.set $l7633 - local.get $l7632 - local.get $l7633 - i32.add - local.set $l7634 - local.get $l7633 - local.get $l7634 - i32.add - local.set $l7635 - local.get $l7634 - local.get $l7635 - i32.add - local.set $l7636 - local.get $l7635 - local.get $l7636 - i32.add - local.set $l7637 - local.get $l7636 - local.get $l7637 - i32.add - local.set $l7638 - local.get $l7637 - local.get $l7638 - i32.add - local.set $l7639 - local.get $l7638 - local.get $l7639 - i32.add - local.set $l7640 - local.get $l7639 - local.get $l7640 - i32.add - local.set $l7641 - local.get $l7640 - local.get $l7641 - i32.add - local.set $l7642 - local.get $l7641 - local.get $l7642 - i32.add - local.set $l7643 - local.get $l7642 - local.get $l7643 - i32.add - local.set $l7644 - local.get $l7643 - local.get $l7644 - i32.add - local.set $l7645 - local.get $l7644 - local.get $l7645 - i32.add - local.set $l7646 - local.get $l7645 - local.get $l7646 - i32.add - local.set $l7647 - local.get $l7646 - local.get $l7647 - i32.add - local.set $l7648 - local.get $l7647 - local.get $l7648 - i32.add - local.set $l7649 - local.get $l7648 - local.get $l7649 - i32.add - local.set $l7650 - local.get $l7649 - local.get $l7650 - i32.add - local.set $l7651 - local.get $l7650 - local.get $l7651 - i32.add - local.set $l7652 - local.get $l7651 - local.get $l7652 - i32.add - local.set $l7653 - local.get $l7652 - local.get $l7653 - i32.add - local.set $l7654 - local.get $l7653 - local.get $l7654 - i32.add - local.set $l7655 - local.get $l7654 - local.get $l7655 - i32.add - local.set $l7656 - local.get $l7655 - local.get $l7656 - i32.add - local.set $l7657 - local.get $l7656 - local.get $l7657 - i32.add - local.set $l7658 - local.get $l7657 - local.get $l7658 - i32.add - local.set $l7659 - local.get $l7658 - local.get $l7659 - i32.add - local.set $l7660 - local.get $l7659 - local.get $l7660 - i32.add - local.set $l7661 - local.get $l7660 - local.get $l7661 - i32.add - local.set $l7662 - local.get $l7661 - local.get $l7662 - i32.add - local.set $l7663 - local.get $l7662 - local.get $l7663 - i32.add - local.set $l7664 - local.get $l7663 - local.get $l7664 - i32.add - local.set $l7665 - local.get $l7664 - local.get $l7665 - i32.add - local.set $l7666 - local.get $l7665 - local.get $l7666 - i32.add - local.set $l7667 - local.get $l7666 - local.get $l7667 - i32.add - local.set $l7668 - local.get $l7667 - local.get $l7668 - i32.add - local.set $l7669 - local.get $l7668 - local.get $l7669 - i32.add - local.set $l7670 - local.get $l7669 - local.get $l7670 - i32.add - local.set $l7671 - local.get $l7670 - local.get $l7671 - i32.add - local.set $l7672 - local.get $l7671 - local.get $l7672 - i32.add - local.set $l7673 - local.get $l7672 - local.get $l7673 - i32.add - local.set $l7674 - local.get $l7673 - local.get $l7674 - i32.add - local.set $l7675 - local.get $l7674 - local.get $l7675 - i32.add - local.set $l7676 - local.get $l7675 - local.get $l7676 - i32.add - local.set $l7677 - local.get $l7676 - local.get $l7677 - i32.add - local.set $l7678 - local.get $l7677 - local.get $l7678 - i32.add - local.set $l7679 - local.get $l7678 - local.get $l7679 - i32.add - local.set $l7680 - local.get $l7679 - local.get $l7680 - i32.add - local.set $l7681 - local.get $l7680 - local.get $l7681 - i32.add - local.set $l7682 - local.get $l7681 - local.get $l7682 - i32.add - local.set $l7683 - local.get $l7682 - local.get $l7683 - i32.add - local.set $l7684 - local.get $l7683 - local.get $l7684 - i32.add - local.set $l7685 - local.get $l7684 - local.get $l7685 - i32.add - local.set $l7686 - local.get $l7685 - local.get $l7686 - i32.add - local.set $l7687 - local.get $l7686 - local.get $l7687 - i32.add - local.set $l7688 - local.get $l7687 - local.get $l7688 - i32.add - local.set $l7689 - local.get $l7688 - local.get $l7689 - i32.add - local.set $l7690 - local.get $l7689 - local.get $l7690 - i32.add - local.set $l7691 - local.get $l7690 - local.get $l7691 - i32.add - local.set $l7692 - local.get $l7691 - local.get $l7692 - i32.add - local.set $l7693 - local.get $l7692 - local.get $l7693 - i32.add - local.set $l7694 - local.get $l7693 - local.get $l7694 - i32.add - local.set $l7695 - local.get $l7694 - local.get $l7695 - i32.add - local.set $l7696 - local.get $l7695 - local.get $l7696 - i32.add - local.set $l7697 - local.get $l7696 - local.get $l7697 - i32.add - local.set $l7698 - local.get $l7697 - local.get $l7698 - i32.add - local.set $l7699 - local.get $l7698 - local.get $l7699 - i32.add - local.set $l7700 - local.get $l7699 - local.get $l7700 - i32.add - local.set $l7701 - local.get $l7700 - local.get $l7701 - i32.add - local.set $l7702 - local.get $l7701 - local.get $l7702 - i32.add - local.set $l7703 - local.get $l7702 - local.get $l7703 - i32.add - local.set $l7704 - local.get $l7703 - local.get $l7704 - i32.add - local.set $l7705 - local.get $l7704 - local.get $l7705 - i32.add - local.set $l7706 - local.get $l7705 - local.get $l7706 - i32.add - local.set $l7707 - local.get $l7706 - local.get $l7707 - i32.add - local.set $l7708 - local.get $l7707 - local.get $l7708 - i32.add - local.set $l7709 - local.get $l7708 - local.get $l7709 - i32.add - local.set $l7710 - local.get $l7709 - local.get $l7710 - i32.add - local.set $l7711 - local.get $l7710 - local.get $l7711 - i32.add - local.set $l7712 - local.get $l7711 - local.get $l7712 - i32.add - local.set $l7713 - local.get $l7712 - local.get $l7713 - i32.add - local.set $l7714 - local.get $l7713 - local.get $l7714 - i32.add - local.set $l7715 - local.get $l7714 - local.get $l7715 - i32.add - local.set $l7716 - local.get $l7715 - local.get $l7716 - i32.add - local.set $l7717 - local.get $l7716 - local.get $l7717 - i32.add - local.set $l7718 - local.get $l7717 - local.get $l7718 - i32.add - local.set $l7719 - local.get $l7718 - local.get $l7719 - i32.add - local.set $l7720 - local.get $l7719 - local.get $l7720 - i32.add - local.set $l7721 - local.get $l7720 - local.get $l7721 - i32.add - local.set $l7722 - local.get $l7721 - local.get $l7722 - i32.add - local.set $l7723 - local.get $l7722 - local.get $l7723 - i32.add - local.set $l7724 - local.get $l7723 - local.get $l7724 - i32.add - local.set $l7725 - local.get $l7724 - local.get $l7725 - i32.add - local.set $l7726 - local.get $l7725 - local.get $l7726 - i32.add - local.set $l7727 - local.get $l7726 - local.get $l7727 - i32.add - local.set $l7728 - local.get $l7727 - local.get $l7728 - i32.add - local.set $l7729 - local.get $l7728 - local.get $l7729 - i32.add - local.set $l7730 - local.get $l7729 - local.get $l7730 - i32.add - local.set $l7731 - local.get $l7730 - local.get $l7731 - i32.add - local.set $l7732 - local.get $l7731 - local.get $l7732 - i32.add - local.set $l7733 - local.get $l7732 - local.get $l7733 - i32.add - local.set $l7734 - local.get $l7733 - local.get $l7734 - i32.add - local.set $l7735 - local.get $l7734 - local.get $l7735 - i32.add - local.set $l7736 - local.get $l7735 - local.get $l7736 - i32.add - local.set $l7737 - local.get $l7736 - local.get $l7737 - i32.add - local.set $l7738 - local.get $l7737 - local.get $l7738 - i32.add - local.set $l7739 - local.get $l7738 - local.get $l7739 - i32.add - local.set $l7740 - local.get $l7739 - local.get $l7740 - i32.add - local.set $l7741 - local.get $l7740 - local.get $l7741 - i32.add - local.set $l7742 - local.get $l7741 - local.get $l7742 - i32.add - local.set $l7743 - local.get $l7742 - local.get $l7743 - i32.add - local.set $l7744 - local.get $l7743 - local.get $l7744 - i32.add - local.set $l7745 - local.get $l7744 - local.get $l7745 - i32.add - local.set $l7746 - local.get $l7745 - local.get $l7746 - i32.add - local.set $l7747 - local.get $l7746 - local.get $l7747 - i32.add - local.set $l7748 - local.get $l7747 - local.get $l7748 - i32.add - local.set $l7749 - local.get $l7748 - local.get $l7749 - i32.add - local.set $l7750 - local.get $l7749 - local.get $l7750 - i32.add - local.set $l7751 - local.get $l7750 - local.get $l7751 - i32.add - local.set $l7752 - local.get $l7751 - local.get $l7752 - i32.add - local.set $l7753 - local.get $l7752 - local.get $l7753 - i32.add - local.set $l7754 - local.get $l7753 - local.get $l7754 - i32.add - local.set $l7755 - local.get $l7754 - local.get $l7755 - i32.add - local.set $l7756 - local.get $l7755 - local.get $l7756 - i32.add - local.set $l7757 - local.get $l7756 - local.get $l7757 - i32.add - local.set $l7758 - local.get $l7757 - local.get $l7758 - i32.add - local.set $l7759 - local.get $l7758 - local.get $l7759 - i32.add - local.set $l7760 - local.get $l7759 - local.get $l7760 - i32.add - local.set $l7761 - local.get $l7760 - local.get $l7761 - i32.add - local.set $l7762 - local.get $l7761 - local.get $l7762 - i32.add - local.set $l7763 - local.get $l7762 - local.get $l7763 - i32.add - local.set $l7764 - local.get $l7763 - local.get $l7764 - i32.add - local.set $l7765 - local.get $l7764 - local.get $l7765 - i32.add - local.set $l7766 - local.get $l7765 - local.get $l7766 - i32.add - local.set $l7767 - local.get $l7766 - local.get $l7767 - i32.add - local.set $l7768 - local.get $l7767 - local.get $l7768 - i32.add - local.set $l7769 - local.get $l7768 - local.get $l7769 - i32.add - local.set $l7770 - local.get $l7769 - local.get $l7770 - i32.add - local.set $l7771 - local.get $l7770 - local.get $l7771 - i32.add - local.set $l7772 - local.get $l7771 - local.get $l7772 - i32.add - local.set $l7773 - local.get $l7772 - local.get $l7773 - i32.add - local.set $l7774 - local.get $l7773 - local.get $l7774 - i32.add - local.set $l7775 - local.get $l7774 - local.get $l7775 - i32.add - local.set $l7776 - local.get $l7775 - local.get $l7776 - i32.add - local.set $l7777 - local.get $l7776 - local.get $l7777 - i32.add - local.set $l7778 - local.get $l7777 - local.get $l7778 - i32.add - local.set $l7779 - local.get $l7778 - local.get $l7779 - i32.add - local.set $l7780 - local.get $l7779 - local.get $l7780 - i32.add - local.set $l7781 - local.get $l7780 - local.get $l7781 - i32.add - local.set $l7782 - local.get $l7781 - local.get $l7782 - i32.add - local.set $l7783 - local.get $l7782 - local.get $l7783 - i32.add - local.set $l7784 - local.get $l7783 - local.get $l7784 - i32.add - local.set $l7785 - local.get $l7784 - local.get $l7785 - i32.add - local.set $l7786 - local.get $l7785 - local.get $l7786 - i32.add - local.set $l7787 - local.get $l7786 - local.get $l7787 - i32.add - local.set $l7788 - local.get $l7787 - local.get $l7788 - i32.add - local.set $l7789 - local.get $l7788 - local.get $l7789 - i32.add - local.set $l7790 - local.get $l7789 - local.get $l7790 - i32.add - local.set $l7791 - local.get $l7790 - local.get $l7791 - i32.add - local.set $l7792 - local.get $l7791 - local.get $l7792 - i32.add - local.set $l7793 - local.get $l7792 - local.get $l7793 - i32.add - local.set $l7794 - local.get $l7793 - local.get $l7794 - i32.add - local.set $l7795 - local.get $l7794 - local.get $l7795 - i32.add - local.set $l7796 - local.get $l7795 - local.get $l7796 - i32.add - local.set $l7797 - local.get $l7796 - local.get $l7797 - i32.add - local.set $l7798 - local.get $l7797 - local.get $l7798 - i32.add - local.set $l7799 - local.get $l7798 - local.get $l7799 - i32.add - local.set $l7800 - local.get $l7799 - local.get $l7800 - i32.add - local.set $l7801 - local.get $l7800 - local.get $l7801 - i32.add - local.set $l7802 - local.get $l7801 - local.get $l7802 - i32.add - local.set $l7803 - local.get $l7802 - local.get $l7803 - i32.add - local.set $l7804 - local.get $l7803 - local.get $l7804 - i32.add - local.set $l7805 - local.get $l7804 - local.get $l7805 - i32.add - local.set $l7806 - local.get $l7805 - local.get $l7806 - i32.add - local.set $l7807 - local.get $l7806 - local.get $l7807 - i32.add - local.set $l7808 - local.get $l7807 - local.get $l7808 - i32.add - local.set $l7809 - local.get $l7808 - local.get $l7809 - i32.add - local.set $l7810 - local.get $l7809 - local.get $l7810 - i32.add - local.set $l7811 - local.get $l7810 - local.get $l7811 - i32.add - local.set $l7812 - local.get $l7811 - local.get $l7812 - i32.add - local.set $l7813 - local.get $l7812 - local.get $l7813 - i32.add - local.set $l7814 - local.get $l7813 - local.get $l7814 - i32.add - local.set $l7815 - local.get $l7814 - local.get $l7815 - i32.add - local.set $l7816 - local.get $l7815 - local.get $l7816 - i32.add - local.set $l7817 - local.get $l7816 - local.get $l7817 - i32.add - local.set $l7818 - local.get $l7817 - local.get $l7818 - i32.add - local.set $l7819 - local.get $l7818 - local.get $l7819 - i32.add - local.set $l7820 - local.get $l7819 - local.get $l7820 - i32.add - local.set $l7821 - local.get $l7820 - local.get $l7821 - i32.add - local.set $l7822 - local.get $l7821 - local.get $l7822 - i32.add - local.set $l7823 - local.get $l7822 - local.get $l7823 - i32.add - local.set $l7824 - local.get $l7823 - local.get $l7824 - i32.add - local.set $l7825 - local.get $l7824 - local.get $l7825 - i32.add - local.set $l7826 - local.get $l7825 - local.get $l7826 - i32.add - local.set $l7827 - local.get $l7826 - local.get $l7827 - i32.add - local.set $l7828 - local.get $l7827 - local.get $l7828 - i32.add - local.set $l7829 - local.get $l7828 - local.get $l7829 - i32.add - local.set $l7830 - local.get $l7829 - local.get $l7830 - i32.add - local.set $l7831 - local.get $l7830 - local.get $l7831 - i32.add - local.set $l7832 - local.get $l7831 - local.get $l7832 - i32.add - local.set $l7833 - local.get $l7832 - local.get $l7833 - i32.add - local.set $l7834 - local.get $l7833 - local.get $l7834 - i32.add - local.set $l7835 - local.get $l7834 - local.get $l7835 - i32.add - local.set $l7836 - local.get $l7835 - local.get $l7836 - i32.add - local.set $l7837 - local.get $l7836 - local.get $l7837 - i32.add - local.set $l7838 - local.get $l7837 - local.get $l7838 - i32.add - local.set $l7839 - local.get $l7838 - local.get $l7839 - i32.add - local.set $l7840 - local.get $l7839 - local.get $l7840 - i32.add - local.set $l7841 - local.get $l7840 - local.get $l7841 - i32.add - local.set $l7842 - local.get $l7841 - local.get $l7842 - i32.add - local.set $l7843 - local.get $l7842 - local.get $l7843 - i32.add - local.set $l7844 - local.get $l7843 - local.get $l7844 - i32.add - local.set $l7845 - local.get $l7844 - local.get $l7845 - i32.add - local.set $l7846 - local.get $l7845 - local.get $l7846 - i32.add - local.set $l7847 - local.get $l7846 - local.get $l7847 - i32.add - local.set $l7848 - local.get $l7847 - local.get $l7848 - i32.add - local.set $l7849 - local.get $l7848 - local.get $l7849 - i32.add - local.set $l7850 - local.get $l7849 - local.get $l7850 - i32.add - local.set $l7851 - local.get $l7850 - local.get $l7851 - i32.add - local.set $l7852 - local.get $l7851 - local.get $l7852 - i32.add - local.set $l7853 - local.get $l7852 - local.get $l7853 - i32.add - local.set $l7854 - local.get $l7853 - local.get $l7854 - i32.add - local.set $l7855 - local.get $l7854 - local.get $l7855 - i32.add - local.set $l7856 - local.get $l7855 - local.get $l7856 - i32.add - local.set $l7857 - local.get $l7856 - local.get $l7857 - i32.add - local.set $l7858 - local.get $l7857 - local.get $l7858 - i32.add - local.set $l7859 - local.get $l7858 - local.get $l7859 - i32.add - local.set $l7860 - local.get $l7859 - local.get $l7860 - i32.add - local.set $l7861 - local.get $l7860 - local.get $l7861 - i32.add - local.set $l7862 - local.get $l7861 - local.get $l7862 - i32.add - local.set $l7863 - local.get $l7862 - local.get $l7863 - i32.add - local.set $l7864 - local.get $l7863 - local.get $l7864 - i32.add - local.set $l7865 - local.get $l7864 - local.get $l7865 - i32.add - local.set $l7866 - local.get $l7865 - local.get $l7866 - i32.add - local.set $l7867 - local.get $l7866 - local.get $l7867 - i32.add - local.set $l7868 - local.get $l7867 - local.get $l7868 - i32.add - local.set $l7869 - local.get $l7868 - local.get $l7869 - i32.add - local.set $l7870 - local.get $l7869 - local.get $l7870 - i32.add - local.set $l7871 - local.get $l7870 - local.get $l7871 - i32.add - local.set $l7872 - local.get $l7871 - local.get $l7872 - i32.add - local.set $l7873 - local.get $l7872 - local.get $l7873 - i32.add - local.set $l7874 - local.get $l7873 - local.get $l7874 - i32.add - local.set $l7875 - local.get $l7874 - local.get $l7875 - i32.add - local.set $l7876 - local.get $l7875 - local.get $l7876 - i32.add - local.set $l7877 - local.get $l7876 - local.get $l7877 - i32.add - local.set $l7878 - local.get $l7877 - local.get $l7878 - i32.add - local.set $l7879 - local.get $l7878 - local.get $l7879 - i32.add - local.set $l7880 - local.get $l7879 - local.get $l7880 - i32.add - local.set $l7881 - local.get $l7880 - local.get $l7881 - i32.add - local.set $l7882 - local.get $l7881 - local.get $l7882 - i32.add - local.set $l7883 - local.get $l7882 - local.get $l7883 - i32.add - local.set $l7884 - local.get $l7883 - local.get $l7884 - i32.add - local.set $l7885 - local.get $l7884 - local.get $l7885 - i32.add - local.set $l7886 - local.get $l7885 - local.get $l7886 - i32.add - local.set $l7887 - local.get $l7886 - local.get $l7887 - i32.add - local.set $l7888 - local.get $l7887 - local.get $l7888 - i32.add - local.set $l7889 - local.get $l7888 - local.get $l7889 - i32.add - local.set $l7890 - local.get $l7889 - local.get $l7890 - i32.add - local.set $l7891 - local.get $l7890 - local.get $l7891 - i32.add - local.set $l7892 - local.get $l7891 - local.get $l7892 - i32.add - local.set $l7893 - local.get $l7892 - local.get $l7893 - i32.add - local.set $l7894 - local.get $l7893 - local.get $l7894 - i32.add - local.set $l7895 - local.get $l7894 - local.get $l7895 - i32.add - local.set $l7896 - local.get $l7895 - local.get $l7896 - i32.add - local.set $l7897 - local.get $l7896 - local.get $l7897 - i32.add - local.set $l7898 - local.get $l7897 - local.get $l7898 - i32.add - local.set $l7899 - local.get $l7898 - local.get $l7899 - i32.add - local.set $l7900 - local.get $l7899 - local.get $l7900 - i32.add - local.set $l7901 - local.get $l7900 - local.get $l7901 - i32.add - local.set $l7902 - local.get $l7901 - local.get $l7902 - i32.add - local.set $l7903 - local.get $l7902 - local.get $l7903 - i32.add - local.set $l7904 - local.get $l7903 - local.get $l7904 - i32.add - local.set $l7905 - local.get $l7904 - local.get $l7905 - i32.add - local.set $l7906 - local.get $l7905 - local.get $l7906 - i32.add - local.set $l7907 - local.get $l7906 - local.get $l7907 - i32.add - local.set $l7908 - local.get $l7907 - local.get $l7908 - i32.add - local.set $l7909 - local.get $l7908 - local.get $l7909 - i32.add - local.set $l7910 - local.get $l7909 - local.get $l7910 - i32.add - local.set $l7911 - local.get $l7910 - local.get $l7911 - i32.add - local.set $l7912 - local.get $l7911 - local.get $l7912 - i32.add - local.set $l7913 - local.get $l7912 - local.get $l7913 - i32.add - local.set $l7914 - local.get $l7913 - local.get $l7914 - i32.add - local.set $l7915 - local.get $l7914 - local.get $l7915 - i32.add - local.set $l7916 - local.get $l7915 - local.get $l7916 - i32.add - local.set $l7917 - local.get $l7916 - local.get $l7917 - i32.add - local.set $l7918 - local.get $l7917 - local.get $l7918 - i32.add - local.set $l7919 - local.get $l7918 - local.get $l7919 - i32.add - local.set $l7920 - local.get $l7919 - local.get $l7920 - i32.add - local.set $l7921 - local.get $l7920 - local.get $l7921 - i32.add - local.set $l7922 - local.get $l7921 - local.get $l7922 - i32.add - local.set $l7923 - local.get $l7922 - local.get $l7923 - i32.add - local.set $l7924 - local.get $l7923 - local.get $l7924 - i32.add - local.set $l7925 - local.get $l7924 - local.get $l7925 - i32.add - local.set $l7926 - local.get $l7925 - local.get $l7926 - i32.add - local.set $l7927 - local.get $l7926 - local.get $l7927 - i32.add - local.set $l7928 - local.get $l7927 - local.get $l7928 - i32.add - local.set $l7929 - local.get $l7928 - local.get $l7929 - i32.add - local.set $l7930 - local.get $l7929 - local.get $l7930 - i32.add - local.set $l7931 - local.get $l7930 - local.get $l7931 - i32.add - local.set $l7932 - local.get $l7931 - local.get $l7932 - i32.add - local.set $l7933 - local.get $l7932 - local.get $l7933 - i32.add - local.set $l7934 - local.get $l7933 - local.get $l7934 - i32.add - local.set $l7935 - local.get $l7934 - local.get $l7935 - i32.add - local.set $l7936 - local.get $l7935 - local.get $l7936 - i32.add - local.set $l7937 - local.get $l7936 - local.get $l7937 - i32.add - local.set $l7938 - local.get $l7937 - local.get $l7938 - i32.add - local.set $l7939 - local.get $l7938 - local.get $l7939 - i32.add - local.set $l7940 - local.get $l7939 - local.get $l7940 - i32.add - local.set $l7941 - local.get $l7940 - local.get $l7941 - i32.add - local.set $l7942 - local.get $l7941 - local.get $l7942 - i32.add - local.set $l7943 - local.get $l7942 - local.get $l7943 - i32.add - local.set $l7944 - local.get $l7943 - local.get $l7944 - i32.add - local.set $l7945 - local.get $l7944 - local.get $l7945 - i32.add - local.set $l7946 - local.get $l7945 - local.get $l7946 - i32.add - local.set $l7947 - local.get $l7946 - local.get $l7947 - i32.add - local.set $l7948 - local.get $l7947 - local.get $l7948 - i32.add - local.set $l7949 - local.get $l7948 - local.get $l7949 - i32.add - local.set $l7950 - local.get $l7949 - local.get $l7950 - i32.add - local.set $l7951 - local.get $l7950 - local.get $l7951 - i32.add - local.set $l7952 - local.get $l7951 - local.get $l7952 - i32.add - local.set $l7953 - local.get $l7952 - local.get $l7953 - i32.add - local.set $l7954 - local.get $l7953 - local.get $l7954 - i32.add - local.set $l7955 - local.get $l7954 - local.get $l7955 - i32.add - local.set $l7956 - local.get $l7955 - local.get $l7956 - i32.add - local.set $l7957 - local.get $l7956 - local.get $l7957 - i32.add - local.set $l7958 - local.get $l7957 - local.get $l7958 - i32.add - local.set $l7959 - local.get $l7958 - local.get $l7959 - i32.add - local.set $l7960 - local.get $l7959 - local.get $l7960 - i32.add - local.set $l7961 - local.get $l7960 - local.get $l7961 - i32.add - local.set $l7962 - local.get $l7961 - local.get $l7962 - i32.add - local.set $l7963 - local.get $l7962 - local.get $l7963 - i32.add - local.set $l7964 - local.get $l7963 - local.get $l7964 - i32.add - local.set $l7965 - local.get $l7964 - local.get $l7965 - i32.add - local.set $l7966 - local.get $l7965 - local.get $l7966 - i32.add - local.set $l7967 - local.get $l7966 - local.get $l7967 - i32.add - local.set $l7968 - local.get $l7967 - local.get $l7968 - i32.add - local.set $l7969 - local.get $l7968 - local.get $l7969 - i32.add - local.set $l7970 - local.get $l7969 - local.get $l7970 - i32.add - local.set $l7971 - local.get $l7970 - local.get $l7971 - i32.add - local.set $l7972 - local.get $l7971 - local.get $l7972 - i32.add - local.set $l7973 - local.get $l7972 - local.get $l7973 - i32.add - local.set $l7974 - local.get $l7973 - local.get $l7974 - i32.add - local.set $l7975 - local.get $l7974 - local.get $l7975 - i32.add - local.set $l7976 - local.get $l7975 - local.get $l7976 - i32.add - local.set $l7977 - local.get $l7976 - local.get $l7977 - i32.add - local.set $l7978 - local.get $l7977 - local.get $l7978 - i32.add - local.set $l7979 - local.get $l7978 - local.get $l7979 - i32.add - local.set $l7980 - local.get $l7979 - local.get $l7980 - i32.add - local.set $l7981 - local.get $l7980 - local.get $l7981 - i32.add - local.set $l7982 - local.get $l7981 - local.get $l7982 - i32.add - local.set $l7983 - local.get $l7982 - local.get $l7983 - i32.add - local.set $l7984 - local.get $l7983 - local.get $l7984 - i32.add - local.set $l7985 - local.get $l7984 - local.get $l7985 - i32.add - local.set $l7986 - local.get $l7985 - local.get $l7986 - i32.add - local.set $l7987 - local.get $l7986 - local.get $l7987 - i32.add - local.set $l7988 - local.get $l7987 - local.get $l7988 - i32.add - local.set $l7989 - local.get $l7988 - local.get $l7989 - i32.add - local.set $l7990 - local.get $l7989 - local.get $l7990 - i32.add - local.set $l7991 - local.get $l7990 - local.get $l7991 - i32.add - local.set $l7992 - local.get $l7991 - local.get $l7992 - i32.add - local.set $l7993 - local.get $l7992 - local.get $l7993 - i32.add - local.set $l7994 - local.get $l7993 - local.get $l7994 - i32.add - local.set $l7995 - local.get $l7994 - local.get $l7995 - i32.add - local.set $l7996 - local.get $l7995 - local.get $l7996 - i32.add - local.set $l7997 - local.get $l7996 - local.get $l7997 - i32.add - local.set $l7998 - local.get $l7997 - local.get $l7998 - i32.add - local.set $l7999 - local.get $l7998 - local.get $l7999 - i32.add - local.set $l8000 - local.get $l7999 - local.get $l8000 - i32.add - local.set $l8001 - local.get $l8000 - local.get $l8001 - i32.add - local.set $l8002 - local.get $l8001 - local.get $l8002 - i32.add - local.set $l8003 - local.get $l8002 - local.get $l8003 - i32.add - local.set $l8004 - local.get $l8003 - local.get $l8004 - i32.add - local.set $l8005 - local.get $l8004 - local.get $l8005 - i32.add - local.set $l8006 - local.get $l8005 - local.get $l8006 - i32.add - local.set $l8007 - local.get $l8006 - local.get $l8007 - i32.add - local.set $l8008 - local.get $l8007 - local.get $l8008 - i32.add - local.set $l8009 - local.get $l8008 - local.get $l8009 - i32.add - local.set $l8010 - local.get $l8009 - local.get $l8010 - i32.add - local.set $l8011 - local.get $l8010 - local.get $l8011 - i32.add - local.set $l8012 - local.get $l8011 - local.get $l8012 - i32.add - local.set $l8013 - local.get $l8012 - local.get $l8013 - i32.add - local.set $l8014 - local.get $l8013 - local.get $l8014 - i32.add - local.set $l8015 - local.get $l8014 - local.get $l8015 - i32.add - local.set $l8016 - local.get $l8015 - local.get $l8016 - i32.add - local.set $l8017 - local.get $l8016 - local.get $l8017 - i32.add - local.set $l8018 - local.get $l8017 - local.get $l8018 - i32.add - local.set $l8019 - local.get $l8018 - local.get $l8019 - i32.add - local.set $l8020 - local.get $l8019 - local.get $l8020 - i32.add - local.set $l8021 - local.get $l8020 - local.get $l8021 - i32.add - local.set $l8022 - local.get $l8021 - local.get $l8022 - i32.add - local.set $l8023 - local.get $l8022 - local.get $l8023 - i32.add - local.set $l8024 - local.get $l8023 - local.get $l8024 - i32.add - local.set $l8025 - local.get $l8024 - local.get $l8025 - i32.add - local.set $l8026 - local.get $l8025 - local.get $l8026 - i32.add - local.set $l8027 - local.get $l8026 - local.get $l8027 - i32.add - local.set $l8028 - local.get $l8027 - local.get $l8028 - i32.add - local.set $l8029 - local.get $l8028 - local.get $l8029 - i32.add - local.set $l8030 - local.get $l8029 - local.get $l8030 - i32.add - local.set $l8031 - local.get $l8030 - local.get $l8031 - i32.add - local.set $l8032 - local.get $l8031 - local.get $l8032 - i32.add - local.set $l8033 - local.get $l8032 - local.get $l8033 - i32.add - local.set $l8034 - local.get $l8033 - local.get $l8034 - i32.add - local.set $l8035 - local.get $l8034 - local.get $l8035 - i32.add - local.set $l8036 - local.get $l8035 - local.get $l8036 - i32.add - local.set $l8037 - local.get $l8036 - local.get $l8037 - i32.add - local.set $l8038 - local.get $l8037 - local.get $l8038 - i32.add - local.set $l8039 - local.get $l8038 - local.get $l8039 - i32.add - local.set $l8040 - local.get $l8039 - local.get $l8040 - i32.add - local.set $l8041 - local.get $l8040 - local.get $l8041 - i32.add - local.set $l8042 - local.get $l8041 - local.get $l8042 - i32.add - local.set $l8043 - local.get $l8042 - local.get $l8043 - i32.add - local.set $l8044 - local.get $l8043 - local.get $l8044 - i32.add - local.set $l8045 - local.get $l8044 - local.get $l8045 - i32.add - local.set $l8046 - local.get $l8045 - local.get $l8046 - i32.add - local.set $l8047 - local.get $l8046 - local.get $l8047 - i32.add - local.set $l8048 - local.get $l8047 - local.get $l8048 - i32.add - local.set $l8049 - local.get $l8048 - local.get $l8049 - i32.add - local.set $l8050 - local.get $l8049 - local.get $l8050 - i32.add - local.set $l8051 - local.get $l8050 - local.get $l8051 - i32.add - local.set $l8052 - local.get $l8051 - local.get $l8052 - i32.add - local.set $l8053 - local.get $l8052 - local.get $l8053 - i32.add - local.set $l8054 - local.get $l8053 - local.get $l8054 - i32.add - local.set $l8055 - local.get $l8054 - local.get $l8055 - i32.add - local.set $l8056 - local.get $l8055 - local.get $l8056 - i32.add - local.set $l8057 - local.get $l8056 - local.get $l8057 - i32.add - local.set $l8058 - local.get $l8057 - local.get $l8058 - i32.add - local.set $l8059 - local.get $l8058 - local.get $l8059 - i32.add - local.set $l8060 - local.get $l8059 - local.get $l8060 - i32.add - local.set $l8061 - local.get $l8060 - local.get $l8061 - i32.add - local.set $l8062 - local.get $l8061 - local.get $l8062 - i32.add - local.set $l8063 - local.get $l8062 - local.get $l8063 - i32.add - local.set $l8064 - local.get $l8063 - local.get $l8064 - i32.add - local.set $l8065 - local.get $l8064 - local.get $l8065 - i32.add - local.set $l8066 - local.get $l8065 - local.get $l8066 - i32.add - local.set $l8067 - local.get $l8066 - local.get $l8067 - i32.add - local.set $l8068 - local.get $l8067 - local.get $l8068 - i32.add - local.set $l8069 - local.get $l8068 - local.get $l8069 - i32.add - local.set $l8070 - local.get $l8069 - local.get $l8070 - i32.add - local.set $l8071 - local.get $l8070 - local.get $l8071 - i32.add - local.set $l8072 - local.get $l8071 - local.get $l8072 - i32.add - local.set $l8073 - local.get $l8072 - local.get $l8073 - i32.add - local.set $l8074 - local.get $l8073 - local.get $l8074 - i32.add - local.set $l8075 - local.get $l8074 - local.get $l8075 - i32.add - local.set $l8076 - local.get $l8075 - local.get $l8076 - i32.add - local.set $l8077 - local.get $l8076 - local.get $l8077 - i32.add - local.set $l8078 - local.get $l8077 - local.get $l8078 - i32.add - local.set $l8079 - local.get $l8078 - local.get $l8079 - i32.add - local.set $l8080 - local.get $l8079 - local.get $l8080 - i32.add - local.set $l8081 - local.get $l8080 - local.get $l8081 - i32.add - local.set $l8082 - local.get $l8081 - local.get $l8082 - i32.add - local.set $l8083 - local.get $l8082 - local.get $l8083 - i32.add - local.set $l8084 - local.get $l8083 - local.get $l8084 - i32.add - local.set $l8085 - local.get $l8084 - local.get $l8085 - i32.add - local.set $l8086 - local.get $l8085 - local.get $l8086 - i32.add - local.set $l8087 - local.get $l8086 - local.get $l8087 - i32.add - local.set $l8088 - local.get $l8087 - local.get $l8088 - i32.add - local.set $l8089 - local.get $l8088 - local.get $l8089 - i32.add - local.set $l8090 - local.get $l8089 - local.get $l8090 - i32.add - local.set $l8091 - local.get $l8090 - local.get $l8091 - i32.add - local.set $l8092 - local.get $l8091 - local.get $l8092 - i32.add - local.set $l8093 - local.get $l8092 - local.get $l8093 - i32.add - local.set $l8094 - local.get $l8093 - local.get $l8094 - i32.add - local.set $l8095 - local.get $l8094 - local.get $l8095 - i32.add - local.set $l8096 - local.get $l8095 - local.get $l8096 - i32.add - local.set $l8097 - local.get $l8096 - local.get $l8097 - i32.add - local.set $l8098 - local.get $l8097 - local.get $l8098 - i32.add - local.set $l8099 - local.get $l8098 - local.get $l8099 - i32.add - local.set $l8100 - local.get $l8099 - local.get $l8100 - i32.add - local.set $l8101 - local.get $l8100 - local.get $l8101 - i32.add - local.set $l8102 - local.get $l8101 - local.get $l8102 - i32.add - local.set $l8103 - local.get $l8102 - local.get $l8103 - i32.add - local.set $l8104 - local.get $l8103 - local.get $l8104 - i32.add - local.set $l8105 - local.get $l8104 - local.get $l8105 - i32.add - local.set $l8106 - local.get $l8105 - local.get $l8106 - i32.add - local.set $l8107 - local.get $l8106 - local.get $l8107 - i32.add - local.set $l8108 - local.get $l8107 - local.get $l8108 - i32.add - local.set $l8109 - local.get $l8108 - local.get $l8109 - i32.add - local.set $l8110 - local.get $l8109 - local.get $l8110 - i32.add - local.set $l8111 - local.get $l8110 - local.get $l8111 - i32.add - local.set $l8112 - local.get $l8111 - local.get $l8112 - i32.add - local.set $l8113 - local.get $l8112 - local.get $l8113 - i32.add - local.set $l8114 - local.get $l8113 - local.get $l8114 - i32.add - local.set $l8115 - local.get $l8114 - local.get $l8115 - i32.add - local.set $l8116 - local.get $l8115 - local.get $l8116 - i32.add - local.set $l8117 - local.get $l8116 - local.get $l8117 - i32.add - local.set $l8118 - local.get $l8117 - local.get $l8118 - i32.add - local.set $l8119 - local.get $l8118 - local.get $l8119 - i32.add - local.set $l8120 - local.get $l8119 - local.get $l8120 - i32.add - local.set $l8121 - local.get $l8120 - local.get $l8121 - i32.add - local.set $l8122 - local.get $l8121 - local.get $l8122 - i32.add - local.set $l8123 - local.get $l8122 - local.get $l8123 - i32.add - local.set $l8124 - local.get $l8123 - local.get $l8124 - i32.add - local.set $l8125 - local.get $l8124 - local.get $l8125 - i32.add - local.set $l8126 - local.get $l8125 - local.get $l8126 - i32.add - local.set $l8127 - local.get $l8126 - local.get $l8127 - i32.add - local.set $l8128 - local.get $l8127 - local.get $l8128 - i32.add - local.set $l8129 - local.get $l8128 - local.get $l8129 - i32.add - local.set $l8130 - local.get $l8129 - local.get $l8130 - i32.add - local.set $l8131 - local.get $l8130 - local.get $l8131 - i32.add - local.set $l8132 - local.get $l8131 - local.get $l8132 - i32.add - local.set $l8133 - local.get $l8132 - local.get $l8133 - i32.add - local.set $l8134 - local.get $l8133 - local.get $l8134 - i32.add - local.set $l8135 - local.get $l8134 - local.get $l8135 - i32.add - local.set $l8136 - local.get $l8135 - local.get $l8136 - i32.add - local.set $l8137 - local.get $l8136 - local.get $l8137 - i32.add - local.set $l8138 - local.get $l8137 - local.get $l8138 - i32.add - local.set $l8139 - local.get $l8138 - local.get $l8139 - i32.add - local.set $l8140 - local.get $l8139 - local.get $l8140 - i32.add - local.set $l8141 - local.get $l8140 - local.get $l8141 - i32.add - local.set $l8142 - local.get $l8141 - local.get $l8142 - i32.add - local.set $l8143 - local.get $l8142 - local.get $l8143 - i32.add - local.set $l8144 - local.get $l8143 - local.get $l8144 - i32.add - local.set $l8145 - local.get $l8144 - local.get $l8145 - i32.add - local.set $l8146 - local.get $l8145 - local.get $l8146 - i32.add - local.set $l8147 - local.get $l8146 - local.get $l8147 - i32.add - local.set $l8148 - local.get $l8147 - local.get $l8148 - i32.add - local.set $l8149 - local.get $l8148 - local.get $l8149 - i32.add - local.set $l8150 - local.get $l8149 - local.get $l8150 - i32.add - local.set $l8151 - local.get $l8150 - local.get $l8151 - i32.add - local.set $l8152 - local.get $l8151 - local.get $l8152 - i32.add - local.set $l8153 - local.get $l8152 - local.get $l8153 - i32.add - local.set $l8154 - local.get $l8153 - local.get $l8154 - i32.add - local.set $l8155 - local.get $l8154 - local.get $l8155 - i32.add - local.set $l8156 - local.get $l8155 - local.get $l8156 - i32.add - local.set $l8157 - local.get $l8156 - local.get $l8157 - i32.add - local.set $l8158 - local.get $l8157 - local.get $l8158 - i32.add - local.set $l8159 - local.get $l8158 - local.get $l8159 - i32.add - local.set $l8160 - local.get $l8159 - local.get $l8160 - i32.add - local.set $l8161 - local.get $l8160 - local.get $l8161 - i32.add - local.set $l8162 - local.get $l8161 - local.get $l8162 - i32.add - local.set $l8163 - local.get $l8162 - local.get $l8163 - i32.add - local.set $l8164 - local.get $l8163 - local.get $l8164 - i32.add - local.set $l8165 - local.get $l8164 - local.get $l8165 - i32.add - local.set $l8166 - local.get $l8165 - local.get $l8166 - i32.add - local.set $l8167 - local.get $l8166 - local.get $l8167 - i32.add - local.set $l8168 - local.get $l8167 - local.get $l8168 - i32.add - local.set $l8169 - local.get $l8168 - local.get $l8169 - i32.add - local.set $l8170 - local.get $l8169 - local.get $l8170 - i32.add - local.set $l8171 - local.get $l8170 - local.get $l8171 - i32.add - local.set $l8172 - local.get $l8171 - local.get $l8172 - i32.add - local.set $l8173 - local.get $l8172 - local.get $l8173 - i32.add - local.set $l8174 - local.get $l8173 - local.get $l8174 - i32.add - local.set $l8175 - local.get $l8174 - local.get $l8175 - i32.add - local.set $l8176 - local.get $l8175 - local.get $l8176 - i32.add - local.set $l8177 - local.get $l8176 - local.get $l8177 - i32.add - local.set $l8178 - local.get $l8177 - local.get $l8178 - i32.add - local.set $l8179 - local.get $l8178 - local.get $l8179 - i32.add - local.set $l8180 - local.get $l8179 - local.get $l8180 - i32.add - local.set $l8181 - local.get $l8180 - local.get $l8181 - i32.add - local.set $l8182 - local.get $l8181 - local.get $l8182 - i32.add - local.set $l8183 - local.get $l8182 - local.get $l8183 - i32.add - local.set $l8184 - local.get $l8183 - local.get $l8184 - i32.add - local.set $l8185 - local.get $l8184 - local.get $l8185 - i32.add - local.set $l8186 - local.get $l8185 - local.get $l8186 - i32.add - local.set $l8187 - local.get $l8186 - local.get $l8187 - i32.add - local.set $l8188 - local.get $l8187 - local.get $l8188 - i32.add - local.set $l8189 - local.get $l8188 - local.get $l8189 - i32.add - local.set $l8190 - local.get $l8189 - local.get $l8190 - i32.add - local.set $l8191 - local.get $l8190 - local.get $l8191 - i32.add - local.set $l8192 - local.get $l8191 - local.get $l8192 - i32.add - local.set $l8193 - local.get $l8192 - local.get $l8193 - i32.add - local.set $l8194 - local.get $l8193 - local.get $l8194 - i32.add - local.set $l8195 - local.get $l8194 - local.get $l8195 - i32.add - local.set $l8196 - local.get $l8195 - local.get $l8196 - i32.add - local.set $l8197 - local.get $l8196 - local.get $l8197 - i32.add - local.set $l8198 - local.get $l8197 - local.get $l8198 - i32.add - local.set $l8199 - local.get $l8198 - local.get $l8199 - i32.add - local.set $l8200 - local.get $l8199 - local.get $l8200 - i32.add - local.set $l8201 - local.get $l8200 - local.get $l8201 - i32.add - local.set $l8202 - local.get $l8201 - local.get $l8202 - i32.add - local.set $l8203 - local.get $l8202 - local.get $l8203 - i32.add - local.set $l8204 - local.get $l8203 - local.get $l8204 - i32.add - local.set $l8205 - local.get $l8204 - local.get $l8205 - i32.add - local.set $l8206 - local.get $l8205 - local.get $l8206 - i32.add - local.set $l8207 - local.get $l8206 - local.get $l8207 - i32.add - local.set $l8208 - local.get $l8207 - local.get $l8208 - i32.add - local.set $l8209 - local.get $l8208 - local.get $l8209 - i32.add - local.set $l8210 - local.get $l8209 - local.get $l8210 - i32.add - local.set $l8211 - local.get $l8210 - local.get $l8211 - i32.add - local.set $l8212 - local.get $l8211 - local.get $l8212 - i32.add - local.set $l8213 - local.get $l8212 - local.get $l8213 - i32.add - local.set $l8214 - local.get $l8213 - local.get $l8214 - i32.add - local.set $l8215 - local.get $l8214 - local.get $l8215 - i32.add - local.set $l8216 - local.get $l8215 - local.get $l8216 - i32.add - local.set $l8217 - local.get $l8216 - local.get $l8217 - i32.add - local.set $l8218 - local.get $l8217 - local.get $l8218 - i32.add - local.set $l8219 - local.get $l8218 - local.get $l8219 - i32.add - local.set $l8220 - local.get $l8219 - local.get $l8220 - i32.add - local.set $l8221 - local.get $l8220 - local.get $l8221 - i32.add - local.set $l8222 - local.get $l8221 - local.get $l8222 - i32.add - local.set $l8223 - local.get $l8222 - local.get $l8223 - i32.add - local.set $l8224 - local.get $l8223 - local.get $l8224 - i32.add - local.set $l8225 - local.get $l8224 - local.get $l8225 - i32.add - local.set $l8226 - local.get $l8225 - local.get $l8226 - i32.add - local.set $l8227 - local.get $l8226 - local.get $l8227 - i32.add - local.set $l8228 - local.get $l8227 - local.get $l8228 - i32.add - local.set $l8229 - local.get $l8228 - local.get $l8229 - i32.add - local.set $l8230 - local.get $l8229 - local.get $l8230 - i32.add - local.set $l8231 - local.get $l8230 - local.get $l8231 - i32.add - local.set $l8232 - local.get $l8231 - local.get $l8232 - i32.add - local.set $l8233 - local.get $l8232 - local.get $l8233 - i32.add - local.set $l8234 - local.get $l8233 - local.get $l8234 - i32.add - local.set $l8235 - local.get $l8234 - local.get $l8235 - i32.add - local.set $l8236 - local.get $l8235 - local.get $l8236 - i32.add - local.set $l8237 - local.get $l8236 - local.get $l8237 - i32.add - local.set $l8238 - local.get $l8237 - local.get $l8238 - i32.add - local.set $l8239 - local.get $l8238 - local.get $l8239 - i32.add - local.set $l8240 - local.get $l8239 - local.get $l8240 - i32.add - local.set $l8241 - local.get $l8240 - local.get $l8241 - i32.add - local.set $l8242 - local.get $l8241 - local.get $l8242 - i32.add - local.set $l8243 - local.get $l8242 - local.get $l8243 - i32.add - local.set $l8244 - local.get $l8243 - local.get $l8244 - i32.add - local.set $l8245 - local.get $l8244 - local.get $l8245 - i32.add - local.set $l8246 - local.get $l8245 - local.get $l8246 - i32.add - local.set $l8247 - local.get $l8246 - local.get $l8247 - i32.add - local.set $l8248 - local.get $l8247 - local.get $l8248 - i32.add - local.set $l8249 - local.get $l8248 - local.get $l8249 - i32.add - local.set $l8250 - local.get $l8249 - local.get $l8250 - i32.add - local.set $l8251 - local.get $l8250 - local.get $l8251 - i32.add - local.set $l8252 - local.get $l8251 - local.get $l8252 - i32.add - local.set $l8253 - local.get $l8252 - local.get $l8253 - i32.add - local.set $l8254 - local.get $l8253 - local.get $l8254 - i32.add - local.set $l8255 - local.get $l8254 - local.get $l8255 - i32.add - local.set $l8256 - local.get $l8255 - local.get $l8256 - i32.add - local.set $l8257 - local.get $l8256 - local.get $l8257 - i32.add - local.set $l8258 - local.get $l8257 - local.get $l8258 - i32.add - local.set $l8259 - local.get $l8258 - local.get $l8259 - i32.add - local.set $l8260 - local.get $l8259 - local.get $l8260 - i32.add - local.set $l8261 - local.get $l8260 - local.get $l8261 - i32.add - local.set $l8262 - local.get $l8261 - local.get $l8262 - i32.add - local.set $l8263 - local.get $l8262 - local.get $l8263 - i32.add - local.set $l8264 - local.get $l8263 - local.get $l8264 - i32.add - local.set $l8265 - local.get $l8264 - local.get $l8265 - i32.add - local.set $l8266 - local.get $l8265 - local.get $l8266 - i32.add - local.set $l8267 - local.get $l8266 - local.get $l8267 - i32.add - local.set $l8268 - local.get $l8267 - local.get $l8268 - i32.add - local.set $l8269 - local.get $l8268 - local.get $l8269 - i32.add - local.set $l8270 - local.get $l8269 - local.get $l8270 - i32.add - local.set $l8271 - local.get $l8270 - local.get $l8271 - i32.add - local.set $l8272 - local.get $l8271 - local.get $l8272 - i32.add - local.set $l8273 - local.get $l8272 - local.get $l8273 - i32.add - local.set $l8274 - local.get $l8273 - local.get $l8274 - i32.add - local.set $l8275 - local.get $l8274 - local.get $l8275 - i32.add - local.set $l8276 - local.get $l8275 - local.get $l8276 - i32.add - local.set $l8277 - local.get $l8276 - local.get $l8277 - i32.add - local.set $l8278 - local.get $l8277 - local.get $l8278 - i32.add - local.set $l8279 - local.get $l8278 - local.get $l8279 - i32.add - local.set $l8280 - local.get $l8279 - local.get $l8280 - i32.add - local.set $l8281 - local.get $l8280 - local.get $l8281 - i32.add - local.set $l8282 - local.get $l8281 - local.get $l8282 - i32.add - local.set $l8283 - local.get $l8282 - local.get $l8283 - i32.add - local.set $l8284 - local.get $l8283 - local.get $l8284 - i32.add - local.set $l8285 - local.get $l8284 - local.get $l8285 - i32.add - local.set $l8286 - local.get $l8285 - local.get $l8286 - i32.add - local.set $l8287 - local.get $l8286 - local.get $l8287 - i32.add - local.set $l8288 - local.get $l8287 - local.get $l8288 - i32.add - local.set $l8289 - local.get $l8288 - local.get $l8289 - i32.add - local.set $l8290 - local.get $l8289 - local.get $l8290 - i32.add - local.set $l8291 - local.get $l8290 - local.get $l8291 - i32.add - local.set $l8292 - local.get $l8291 - local.get $l8292 - i32.add - local.set $l8293 - local.get $l8292 - local.get $l8293 - i32.add - local.set $l8294 - local.get $l8293 - local.get $l8294 - i32.add - local.set $l8295 - local.get $l8294 - local.get $l8295 - i32.add - local.set $l8296 - local.get $l8295 - local.get $l8296 - i32.add - local.set $l8297 - local.get $l8296 - local.get $l8297 - i32.add - local.set $l8298 - local.get $l8297 - local.get $l8298 - i32.add - local.set $l8299 - local.get $l8298 - local.get $l8299 - i32.add - local.set $l8300 - local.get $l8299 - local.get $l8300 - i32.add - local.set $l8301 - local.get $l8300 - local.get $l8301 - i32.add - local.set $l8302 - local.get $l8301 - local.get $l8302 - i32.add - local.set $l8303 - local.get $l8302 - local.get $l8303 - i32.add - local.set $l8304 - local.get $l8303 - local.get $l8304 - i32.add - local.set $l8305 - local.get $l8304 - local.get $l8305 - i32.add - local.set $l8306 - local.get $l8305 - local.get $l8306 - i32.add - local.set $l8307 - local.get $l8306 - local.get $l8307 - i32.add - local.set $l8308 - local.get $l8307 - local.get $l8308 - i32.add - local.set $l8309 - local.get $l8308 - local.get $l8309 - i32.add - local.set $l8310 - local.get $l8309 - local.get $l8310 - i32.add - local.set $l8311 - local.get $l8310 - local.get $l8311 - i32.add - local.set $l8312 - local.get $l8311 - local.get $l8312 - i32.add - local.set $l8313 - local.get $l8312 - local.get $l8313 - i32.add - local.set $l8314 - local.get $l8313 - local.get $l8314 - i32.add - local.set $l8315 - local.get $l8314 - local.get $l8315 - i32.add - local.set $l8316 - local.get $l8315 - local.get $l8316 - i32.add - local.set $l8317 - local.get $l8316 - local.get $l8317 - i32.add - local.set $l8318 - local.get $l8317 - local.get $l8318 - i32.add - local.set $l8319 - local.get $l8318 - local.get $l8319 - i32.add - local.set $l8320 - local.get $l8319 - local.get $l8320 - i32.add - local.set $l8321 - local.get $l8320 - local.get $l8321 - i32.add - local.set $l8322 - local.get $l8321 - local.get $l8322 - i32.add - local.set $l8323 - local.get $l8322 - local.get $l8323 - i32.add - local.set $l8324 - local.get $l8323 - local.get $l8324 - i32.add - local.set $l8325 - local.get $l8324 - local.get $l8325 - i32.add - local.set $l8326 - local.get $l8325 - local.get $l8326 - i32.add - local.set $l8327 - local.get $l8326 - local.get $l8327 - i32.add - local.set $l8328 - local.get $l8327 - local.get $l8328 - i32.add - local.set $l8329 - local.get $l8328 - local.get $l8329 - i32.add - local.set $l8330 - local.get $l8329 - local.get $l8330 - i32.add - local.set $l8331 - local.get $l8330 - local.get $l8331 - i32.add - local.set $l8332 - local.get $l8331 - local.get $l8332 - i32.add - local.set $l8333 - local.get $l8332 - local.get $l8333 - i32.add - local.set $l8334 - local.get $l8333 - local.get $l8334 - i32.add - local.set $l8335 - local.get $l8334 - local.get $l8335 - i32.add - local.set $l8336 - local.get $l8335 - local.get $l8336 - i32.add - local.set $l8337 - local.get $l8336 - local.get $l8337 - i32.add - local.set $l8338 - local.get $l8337 - local.get $l8338 - i32.add - local.set $l8339 - local.get $l8338 - local.get $l8339 - i32.add - local.set $l8340 - local.get $l8339 - local.get $l8340 - i32.add - local.set $l8341 - local.get $l8340 - local.get $l8341 - i32.add - local.set $l8342 - local.get $l8341 - local.get $l8342 - i32.add - local.set $l8343 - local.get $l8342 - local.get $l8343 - i32.add - local.set $l8344 - local.get $l8343 - local.get $l8344 - i32.add - local.set $l8345 - local.get $l8344 - local.get $l8345 - i32.add - local.set $l8346 - local.get $l8345 - local.get $l8346 - i32.add - local.set $l8347 - local.get $l8346 - local.get $l8347 - i32.add - local.set $l8348 - local.get $l8347 - local.get $l8348 - i32.add - local.set $l8349 - local.get $l8348 - local.get $l8349 - i32.add - local.set $l8350 - local.get $l8349 - local.get $l8350 - i32.add - local.set $l8351 - local.get $l8350 - local.get $l8351 - i32.add - local.set $l8352 - local.get $l8351 - local.get $l8352 - i32.add - local.set $l8353 - local.get $l8352 - local.get $l8353 - i32.add - local.set $l8354 - local.get $l8353 - local.get $l8354 - i32.add - local.set $l8355 - local.get $l8354 - local.get $l8355 - i32.add - local.set $l8356 - local.get $l8355 - local.get $l8356 - i32.add - local.set $l8357 - local.get $l8356 - local.get $l8357 - i32.add - local.set $l8358 - local.get $l8357 - local.get $l8358 - i32.add - local.set $l8359 - local.get $l8358 - local.get $l8359 - i32.add - local.set $l8360 - local.get $l8359 - local.get $l8360 - i32.add - local.set $l8361 - local.get $l8360 - local.get $l8361 - i32.add - local.set $l8362 - local.get $l8361 - local.get $l8362 - i32.add - local.set $l8363 - local.get $l8362 - local.get $l8363 - i32.add - local.set $l8364 - local.get $l8363 - local.get $l8364 - i32.add - local.set $l8365 - local.get $l8364 - local.get $l8365 - i32.add - local.set $l8366 - local.get $l8365 - local.get $l8366 - i32.add - local.set $l8367 - local.get $l8366 - local.get $l8367 - i32.add - local.set $l8368 - local.get $l8367 - local.get $l8368 - i32.add - local.set $l8369 - local.get $l8368 - local.get $l8369 - i32.add - local.set $l8370 - local.get $l8369 - local.get $l8370 - i32.add - local.set $l8371 - local.get $l8370 - local.get $l8371 - i32.add - local.set $l8372 - local.get $l8371 - local.get $l8372 - i32.add - local.set $l8373 - local.get $l8372 - local.get $l8373 - i32.add - local.set $l8374 - local.get $l8373 - local.get $l8374 - i32.add - local.set $l8375 - local.get $l8374 - local.get $l8375 - i32.add - local.set $l8376 - local.get $l8375 - local.get $l8376 - i32.add - local.set $l8377 - local.get $l8376 - local.get $l8377 - i32.add - local.set $l8378 - local.get $l8377 - local.get $l8378 - i32.add - local.set $l8379 - local.get $l8378 - local.get $l8379 - i32.add - local.set $l8380 - local.get $l8379 - local.get $l8380 - i32.add - local.set $l8381 - local.get $l8380 - local.get $l8381 - i32.add - local.set $l8382 - local.get $l8381 - local.get $l8382 - i32.add - local.set $l8383 - local.get $l8382 - local.get $l8383 - i32.add - local.set $l8384 - local.get $l8383 - local.get $l8384 - i32.add - local.set $l8385 - local.get $l8384 - local.get $l8385 - i32.add - local.set $l8386 - local.get $l8385 - local.get $l8386 - i32.add - local.set $l8387 - local.get $l8386 - local.get $l8387 - i32.add - local.set $l8388 - local.get $l8387 - local.get $l8388 - i32.add - local.set $l8389 - local.get $l8388 - local.get $l8389 - i32.add - local.set $l8390 - local.get $l8389 - local.get $l8390 - i32.add - local.set $l8391 - local.get $l8390 - local.get $l8391 - i32.add - local.set $l8392 - local.get $l8391 - local.get $l8392 - i32.add - local.set $l8393 - local.get $l8392 - local.get $l8393 - i32.add - local.set $l8394 - local.get $l8393 - local.get $l8394 - i32.add - local.set $l8395 - local.get $l8394 - local.get $l8395 - i32.add - local.set $l8396 - local.get $l8395 - local.get $l8396 - i32.add - local.set $l8397 - local.get $l8396 - local.get $l8397 - i32.add - local.set $l8398 - local.get $l8397 - local.get $l8398 - i32.add - local.set $l8399 - local.get $l8398 - local.get $l8399 - i32.add - local.set $l8400 - local.get $l8399 - local.get $l8400 - i32.add - local.set $l8401 - local.get $l8400 - local.get $l8401 - i32.add - local.set $l8402 - local.get $l8401 - local.get $l8402 - i32.add - local.set $l8403 - local.get $l8402 - local.get $l8403 - i32.add - local.set $l8404 - local.get $l8403 - local.get $l8404 - i32.add - local.set $l8405 - local.get $l8404 - local.get $l8405 - i32.add - local.set $l8406 - local.get $l8405 - local.get $l8406 - i32.add - local.set $l8407 - local.get $l8406 - local.get $l8407 - i32.add - local.set $l8408 - local.get $l8407 - local.get $l8408 - i32.add - local.set $l8409 - local.get $l8408 - local.get $l8409 - i32.add - local.set $l8410 - local.get $l8409 - local.get $l8410 - i32.add - local.set $l8411 - local.get $l8410 - local.get $l8411 - i32.add - local.set $l8412 - local.get $l8411 - local.get $l8412 - i32.add - local.set $l8413 - local.get $l8412 - local.get $l8413 - i32.add - local.set $l8414 - local.get $l8413 - local.get $l8414 - i32.add - local.set $l8415 - local.get $l8414 - local.get $l8415 - i32.add - local.set $l8416 - local.get $l8415 - local.get $l8416 - i32.add - local.set $l8417 - local.get $l8416 - local.get $l8417 - i32.add - local.set $l8418 - local.get $l8417 - local.get $l8418 - i32.add - local.set $l8419 - local.get $l8418 - local.get $l8419 - i32.add - local.set $l8420 - local.get $l8419 - local.get $l8420 - i32.add - local.set $l8421 - local.get $l8420 - local.get $l8421 - i32.add - local.set $l8422 - local.get $l8421 - local.get $l8422 - i32.add - local.set $l8423 - local.get $l8422 - local.get $l8423 - i32.add - local.set $l8424 - local.get $l8423 - local.get $l8424 - i32.add - local.set $l8425 - local.get $l8424 - local.get $l8425 - i32.add - local.set $l8426 - local.get $l8425 - local.get $l8426 - i32.add - local.set $l8427 - local.get $l8426 - local.get $l8427 - i32.add - local.set $l8428 - local.get $l8427 - local.get $l8428 - i32.add - local.set $l8429 - local.get $l8428 - local.get $l8429 - i32.add - local.set $l8430 - local.get $l8429 - local.get $l8430 - i32.add - local.set $l8431 - local.get $l8430 - local.get $l8431 - i32.add - local.set $l8432 - local.get $l8431 - local.get $l8432 - i32.add - local.set $l8433 - local.get $l8432 - local.get $l8433 - i32.add - local.set $l8434 - local.get $l8433 - local.get $l8434 - i32.add - local.set $l8435 - local.get $l8434 - local.get $l8435 - i32.add - local.set $l8436 - local.get $l8435 - local.get $l8436 - i32.add - local.set $l8437 - local.get $l8436 - local.get $l8437 - i32.add - local.set $l8438 - local.get $l8437 - local.get $l8438 - i32.add - local.set $l8439 - local.get $l8438 - local.get $l8439 - i32.add - local.set $l8440 - local.get $l8439 - local.get $l8440 - i32.add - local.set $l8441 - local.get $l8440 - local.get $l8441 - i32.add - local.set $l8442 - local.get $l8441 - local.get $l8442 - i32.add - local.set $l8443 - local.get $l8442 - local.get $l8443 - i32.add - local.set $l8444 - local.get $l8443 - local.get $l8444 - i32.add - local.set $l8445 - local.get $l8444 - local.get $l8445 - i32.add - local.set $l8446 - local.get $l8445 - local.get $l8446 - i32.add - local.set $l8447 - local.get $l8446 - local.get $l8447 - i32.add - local.set $l8448 - local.get $l8447 - local.get $l8448 - i32.add - local.set $l8449 - local.get $l8448 - local.get $l8449 - i32.add - local.set $l8450 - local.get $l8449 - local.get $l8450 - i32.add - local.set $l8451 - local.get $l8450 - local.get $l8451 - i32.add - local.set $l8452 - local.get $l8451 - local.get $l8452 - i32.add - local.set $l8453 - local.get $l8452 - local.get $l8453 - i32.add - local.set $l8454 - local.get $l8453 - local.get $l8454 - i32.add - local.set $l8455 - local.get $l8454 - local.get $l8455 - i32.add - local.set $l8456 - local.get $l8455 - local.get $l8456 - i32.add - local.set $l8457 - local.get $l8456 - local.get $l8457 - i32.add - local.set $l8458 - local.get $l8457 - local.get $l8458 - i32.add - local.set $l8459 - local.get $l8458 - local.get $l8459 - i32.add - local.set $l8460 - local.get $l8459 - local.get $l8460 - i32.add - local.set $l8461 - local.get $l8460 - local.get $l8461 - i32.add - local.set $l8462 - local.get $l8461 - local.get $l8462 - i32.add - local.set $l8463 - local.get $l8462 - local.get $l8463 - i32.add - local.set $l8464 - local.get $l8463 - local.get $l8464 - i32.add - local.set $l8465 - local.get $l8464 - local.get $l8465 - i32.add - local.set $l8466 - local.get $l8465 - local.get $l8466 - i32.add - local.set $l8467 - local.get $l8466 - local.get $l8467 - i32.add - local.set $l8468 - local.get $l8467 - local.get $l8468 - i32.add - local.set $l8469 - local.get $l8468 - local.get $l8469 - i32.add - local.set $l8470 - local.get $l8469 - local.get $l8470 - i32.add - local.set $l8471 - local.get $l8470 - local.get $l8471 - i32.add - local.set $l8472 - local.get $l8471 - local.get $l8472 - i32.add - local.set $l8473 - local.get $l8472 - local.get $l8473 - i32.add - local.set $l8474 - local.get $l8473 - local.get $l8474 - i32.add - local.set $l8475 - local.get $l8474 - local.get $l8475 - i32.add - local.set $l8476 - local.get $l8475 - local.get $l8476 - i32.add - local.set $l8477 - local.get $l8476 - local.get $l8477 - i32.add - local.set $l8478 - local.get $l8477 - local.get $l8478 - i32.add - local.set $l8479 - local.get $l8478 - local.get $l8479 - i32.add - local.set $l8480 - local.get $l8479 - local.get $l8480 - i32.add - local.set $l8481 - local.get $l8480 - local.get $l8481 - i32.add - local.set $l8482 - local.get $l8481 - local.get $l8482 - i32.add - local.set $l8483 - local.get $l8482 - local.get $l8483 - i32.add - local.set $l8484 - local.get $l8483 - local.get $l8484 - i32.add - local.set $l8485 - local.get $l8484 - local.get $l8485 - i32.add - local.set $l8486 - local.get $l8485 - local.get $l8486 - i32.add - local.set $l8487 - local.get $l8486 - local.get $l8487 - i32.add - local.set $l8488 - local.get $l8487 - local.get $l8488 - i32.add - local.set $l8489 - local.get $l8488 - local.get $l8489 - i32.add - local.set $l8490 - local.get $l8489 - local.get $l8490 - i32.add - local.set $l8491 - local.get $l8490 - local.get $l8491 - i32.add - local.set $l8492 - local.get $l8491 - local.get $l8492 - i32.add - local.set $l8493 - local.get $l8492 - local.get $l8493 - i32.add - local.set $l8494 - local.get $l8493 - local.get $l8494 - i32.add - local.set $l8495 - local.get $l8494 - local.get $l8495 - i32.add - local.set $l8496 - local.get $l8495 - local.get $l8496 - i32.add - local.set $l8497 - local.get $l8496 - local.get $l8497 - i32.add - local.set $l8498 - local.get $l8497 - local.get $l8498 - i32.add - local.set $l8499 - local.get $l8498 - local.get $l8499 - i32.add - local.set $l8500 - local.get $l8499 - local.get $l8500 - i32.add - local.set $l8501 - local.get $l8500 - local.get $l8501 - i32.add - local.set $l8502 - local.get $l8501 - local.get $l8502 - i32.add - local.set $l8503 - local.get $l8502 - local.get $l8503 - i32.add - local.set $l8504 - local.get $l8503 - local.get $l8504 - i32.add - local.set $l8505 - local.get $l8504 - local.get $l8505 - i32.add - local.set $l8506 - local.get $l8505 - local.get $l8506 - i32.add - local.set $l8507 - local.get $l8506 - local.get $l8507 - i32.add - local.set $l8508 - local.get $l8507 - local.get $l8508 - i32.add - local.set $l8509 - local.get $l8508 - local.get $l8509 - i32.add - local.set $l8510 - local.get $l8509 - local.get $l8510 - i32.add - local.set $l8511 - local.get $l8510 - local.get $l8511 - i32.add - local.set $l8512 - local.get $l8511 - local.get $l8512 - i32.add - local.set $l8513 - local.get $l8512 - local.get $l8513 - i32.add - local.set $l8514 - local.get $l8513 - local.get $l8514 - i32.add - local.set $l8515 - local.get $l8514 - local.get $l8515 - i32.add - local.set $l8516 - local.get $l8515 - local.get $l8516 - i32.add - local.set $l8517 - local.get $l8516 - local.get $l8517 - i32.add - local.set $l8518 - local.get $l8517 - local.get $l8518 - i32.add - local.set $l8519 - local.get $l8518 - local.get $l8519 - i32.add - local.set $l8520 - local.get $l8519 - local.get $l8520 - i32.add - local.set $l8521 - local.get $l8520 - local.get $l8521 - i32.add - local.set $l8522 - local.get $l8521 - local.get $l8522 - i32.add - local.set $l8523 - local.get $l8522 - local.get $l8523 - i32.add - local.set $l8524 - local.get $l8523 - local.get $l8524 - i32.add - local.set $l8525 - local.get $l8524 - local.get $l8525 - i32.add - local.set $l8526 - local.get $l8525 - local.get $l8526 - i32.add - local.set $l8527 - local.get $l8526 - local.get $l8527 - i32.add - local.set $l8528 - local.get $l8527 - local.get $l8528 - i32.add - local.set $l8529 - local.get $l8528 - local.get $l8529 - i32.add - local.set $l8530 - local.get $l8529 - local.get $l8530 - i32.add - local.set $l8531 - local.get $l8530 - local.get $l8531 - i32.add - local.set $l8532 - local.get $l8531 - local.get $l8532 - i32.add - local.set $l8533 - local.get $l8532 - local.get $l8533 - i32.add - local.set $l8534 - local.get $l8533 - local.get $l8534 - i32.add - local.set $l8535 - local.get $l8534 - local.get $l8535 - i32.add - local.set $l8536 - local.get $l8535 - local.get $l8536 - i32.add - local.set $l8537 - local.get $l8536 - local.get $l8537 - i32.add - local.set $l8538 - local.get $l8537 - local.get $l8538 - i32.add - local.set $l8539 - local.get $l8538 - local.get $l8539 - i32.add - local.set $l8540 - local.get $l8539 - local.get $l8540 - i32.add - local.set $l8541 - local.get $l8540 - local.get $l8541 - i32.add - local.set $l8542 - local.get $l8541 - local.get $l8542 - i32.add - local.set $l8543 - local.get $l8542 - local.get $l8543 - i32.add - local.set $l8544 - local.get $l8543 - local.get $l8544 - i32.add - local.set $l8545 - local.get $l8544 - local.get $l8545 - i32.add - local.set $l8546 - local.get $l8545 - local.get $l8546 - i32.add - local.set $l8547 - local.get $l8546 - local.get $l8547 - i32.add - local.set $l8548 - local.get $l8547 - local.get $l8548 - i32.add - local.set $l8549 - local.get $l8548 - local.get $l8549 - i32.add - local.set $l8550 - local.get $l8549 - local.get $l8550 - i32.add - local.set $l8551 - local.get $l8550 - local.get $l8551 - i32.add - local.set $l8552 - local.get $l8551 - local.get $l8552 - i32.add - local.set $l8553 - local.get $l8552 - local.get $l8553 - i32.add - local.set $l8554 - local.get $l8553 - local.get $l8554 - i32.add - local.set $l8555 - local.get $l8554 - local.get $l8555 - i32.add - local.set $l8556 - local.get $l8555 - local.get $l8556 - i32.add - local.set $l8557 - local.get $l8556 - local.get $l8557 - i32.add - local.set $l8558 - local.get $l8557 - local.get $l8558 - i32.add - local.set $l8559 - local.get $l8558 - local.get $l8559 - i32.add - local.set $l8560 - local.get $l8559 - local.get $l8560 - i32.add - local.set $l8561 - local.get $l8560 - local.get $l8561 - i32.add - local.set $l8562 - local.get $l8561 - local.get $l8562 - i32.add - local.set $l8563 - local.get $l8562 - local.get $l8563 - i32.add - local.set $l8564 - local.get $l8563 - local.get $l8564 - i32.add - local.set $l8565 - local.get $l8564 - local.get $l8565 - i32.add - local.set $l8566 - local.get $l8565 - local.get $l8566 - i32.add - local.set $l8567 - local.get $l8566 - local.get $l8567 - i32.add - local.set $l8568 - local.get $l8567 - local.get $l8568 - i32.add - local.set $l8569 - local.get $l8568 - local.get $l8569 - i32.add - local.set $l8570 - local.get $l8569 - local.get $l8570 - i32.add - local.set $l8571 - local.get $l8570 - local.get $l8571 - i32.add - local.set $l8572 - local.get $l8571 - local.get $l8572 - i32.add - local.set $l8573 - local.get $l8572 - local.get $l8573 - i32.add - local.set $l8574 - local.get $l8573 - local.get $l8574 - i32.add - local.set $l8575 - local.get $l8574 - local.get $l8575 - i32.add - local.set $l8576 - local.get $l8575 - local.get $l8576 - i32.add - local.set $l8577 - local.get $l8576 - local.get $l8577 - i32.add - local.set $l8578 - local.get $l8577 - local.get $l8578 - i32.add - local.set $l8579 - local.get $l8578 - local.get $l8579 - i32.add - local.set $l8580 - local.get $l8579 - local.get $l8580 - i32.add - local.set $l8581 - local.get $l8580 - local.get $l8581 - i32.add - local.set $l8582 - local.get $l8581 - local.get $l8582 - i32.add - local.set $l8583 - local.get $l8582 - local.get $l8583 - i32.add - local.set $l8584 - local.get $l8583 - local.get $l8584 - i32.add - local.set $l8585 - local.get $l8584 - local.get $l8585 - i32.add - local.set $l8586 - local.get $l8585 - local.get $l8586 - i32.add - local.set $l8587 - local.get $l8586 - local.get $l8587 - i32.add - local.set $l8588 - local.get $l8587 - local.get $l8588 - i32.add - local.set $l8589 - local.get $l8588 - local.get $l8589 - i32.add - local.set $l8590 - local.get $l8589 - local.get $l8590 - i32.add - local.set $l8591 - local.get $l8590 - local.get $l8591 - i32.add - local.set $l8592 - local.get $l8591 - local.get $l8592 - i32.add - local.set $l8593 - local.get $l8592 - local.get $l8593 - i32.add - local.set $l8594 - local.get $l8593 - local.get $l8594 - i32.add - local.set $l8595 - local.get $l8594 - local.get $l8595 - i32.add - local.set $l8596 - local.get $l8595 - local.get $l8596 - i32.add - local.set $l8597 - local.get $l8596 - local.get $l8597 - i32.add - local.set $l8598 - local.get $l8597 - local.get $l8598 - i32.add - local.set $l8599 - local.get $l8598 - local.get $l8599 - i32.add - local.set $l8600 - local.get $l8599 - local.get $l8600 - i32.add - local.set $l8601 - local.get $l8600 - local.get $l8601 - i32.add - local.set $l8602 - local.get $l8601 - local.get $l8602 - i32.add - local.set $l8603 - local.get $l8602 - local.get $l8603 - i32.add - local.set $l8604 - local.get $l8603 - local.get $l8604 - i32.add - local.set $l8605 - local.get $l8604 - local.get $l8605 - i32.add - local.set $l8606 - local.get $l8605 - local.get $l8606 - i32.add - local.set $l8607 - local.get $l8606 - local.get $l8607 - i32.add - local.set $l8608 - local.get $l8607 - local.get $l8608 - i32.add - local.set $l8609 - local.get $l8608 - local.get $l8609 - i32.add - local.set $l8610 - local.get $l8609 - local.get $l8610 - i32.add - local.set $l8611 - local.get $l8610 - local.get $l8611 - i32.add - local.set $l8612 - local.get $l8611 - local.get $l8612 - i32.add - local.set $l8613 - local.get $l8612 - local.get $l8613 - i32.add - local.set $l8614 - local.get $l8613 - local.get $l8614 - i32.add - local.set $l8615 - local.get $l8614 - local.get $l8615 - i32.add - local.set $l8616 - local.get $l8615 - local.get $l8616 - i32.add - local.set $l8617 - local.get $l8616 - local.get $l8617 - i32.add - local.set $l8618 - local.get $l8617 - local.get $l8618 - i32.add - local.set $l8619 - local.get $l8618 - local.get $l8619 - i32.add - local.set $l8620 - local.get $l8619 - local.get $l8620 - i32.add - local.set $l8621 - local.get $l8620 - local.get $l8621 - i32.add - local.set $l8622 - local.get $l8621 - local.get $l8622 - i32.add - local.set $l8623 - local.get $l8622 - local.get $l8623 - i32.add - local.set $l8624 - local.get $l8623 - local.get $l8624 - i32.add - local.set $l8625 - local.get $l8624 - local.get $l8625 - i32.add - local.set $l8626 - local.get $l8625 - local.get $l8626 - i32.add - local.set $l8627 - local.get $l8626 - local.get $l8627 - i32.add - local.set $l8628 - local.get $l8627 - local.get $l8628 - i32.add - local.set $l8629 - local.get $l8628 - local.get $l8629 - i32.add - local.set $l8630 - local.get $l8629 - local.get $l8630 - i32.add - local.set $l8631 - local.get $l8630 - local.get $l8631 - i32.add - local.set $l8632 - local.get $l8631 - local.get $l8632 - i32.add - local.set $l8633 - local.get $l8632 - local.get $l8633 - i32.add - local.set $l8634 - local.get $l8633 - local.get $l8634 - i32.add - local.set $l8635 - local.get $l8634 - local.get $l8635 - i32.add - local.set $l8636 - local.get $l8635 - local.get $l8636 - i32.add - local.set $l8637 - local.get $l8636 - local.get $l8637 - i32.add - local.set $l8638 - local.get $l8637 - local.get $l8638 - i32.add - local.set $l8639 - local.get $l8638 - local.get $l8639 - i32.add - local.set $l8640 - local.get $l8639 - local.get $l8640 - i32.add - local.set $l8641 - local.get $l8640 - local.get $l8641 - i32.add - local.set $l8642 - local.get $l8641 - local.get $l8642 - i32.add - local.set $l8643 - local.get $l8642 - local.get $l8643 - i32.add - local.set $l8644 - local.get $l8643 - local.get $l8644 - i32.add - local.set $l8645 - local.get $l8644 - local.get $l8645 - i32.add - local.set $l8646 - local.get $l8645 - local.get $l8646 - i32.add - local.set $l8647 - local.get $l8646 - local.get $l8647 - i32.add - local.set $l8648 - local.get $l8647 - local.get $l8648 - i32.add - local.set $l8649 - local.get $l8648 - local.get $l8649 - i32.add - local.set $l8650 - local.get $l8649 - local.get $l8650 - i32.add - local.set $l8651 - local.get $l8650 - local.get $l8651 - i32.add - local.set $l8652 - local.get $l8651 - local.get $l8652 - i32.add - local.set $l8653 - local.get $l8652 - local.get $l8653 - i32.add - local.set $l8654 - local.get $l8653 - local.get $l8654 - i32.add - local.set $l8655 - local.get $l8654 - local.get $l8655 - i32.add - local.set $l8656 - local.get $l8655 - local.get $l8656 - i32.add - local.set $l8657 - local.get $l8656 - local.get $l8657 - i32.add - local.set $l8658 - local.get $l8657 - local.get $l8658 - i32.add - local.set $l8659 - local.get $l8658 - local.get $l8659 - i32.add - local.set $l8660 - local.get $l8659 - local.get $l8660 - i32.add - local.set $l8661 - local.get $l8660 - local.get $l8661 - i32.add - local.set $l8662 - local.get $l8661 - local.get $l8662 - i32.add - local.set $l8663 - local.get $l8662 - local.get $l8663 - i32.add - local.set $l8664 - local.get $l8663 - local.get $l8664 - i32.add - local.set $l8665 - local.get $l8664 - local.get $l8665 - i32.add - local.set $l8666 - local.get $l8665 - local.get $l8666 - i32.add - local.set $l8667 - local.get $l8666 - local.get $l8667 - i32.add - local.set $l8668 - local.get $l8667 - local.get $l8668 - i32.add - local.set $l8669 - local.get $l8668 - local.get $l8669 - i32.add - local.set $l8670 - local.get $l8669 - local.get $l8670 - i32.add - local.set $l8671 - local.get $l8670 - local.get $l8671 - i32.add - local.set $l8672 - local.get $l8671 - local.get $l8672 - i32.add - local.set $l8673 - local.get $l8672 - local.get $l8673 - i32.add - local.set $l8674 - local.get $l8673 - local.get $l8674 - i32.add - local.set $l8675 - local.get $l8674 - local.get $l8675 - i32.add - local.set $l8676 - local.get $l8675 - local.get $l8676 - i32.add - local.set $l8677 - local.get $l8676 - local.get $l8677 - i32.add - local.set $l8678 - local.get $l8677 - local.get $l8678 - i32.add - local.set $l8679 - local.get $l8678 - local.get $l8679 - i32.add - local.set $l8680 - local.get $l8679 - local.get $l8680 - i32.add - local.set $l8681 - local.get $l8680 - local.get $l8681 - i32.add - local.set $l8682 - local.get $l8681 - local.get $l8682 - i32.add - local.set $l8683 - local.get $l8682 - local.get $l8683 - i32.add - local.set $l8684 - local.get $l8683 - local.get $l8684 - i32.add - local.set $l8685 - local.get $l8684 - local.get $l8685 - i32.add - local.set $l8686 - local.get $l8685 - local.get $l8686 - i32.add - local.set $l8687 - local.get $l8686 - local.get $l8687 - i32.add - local.set $l8688 - local.get $l8687 - local.get $l8688 - i32.add - local.set $l8689 - local.get $l8688 - local.get $l8689 - i32.add - local.set $l8690 - local.get $l8689 - local.get $l8690 - i32.add - local.set $l8691 - local.get $l8690 - local.get $l8691 - i32.add - local.set $l8692 - local.get $l8691 - local.get $l8692 - i32.add - local.set $l8693 - local.get $l8692 - local.get $l8693 - i32.add - local.set $l8694 - local.get $l8693 - local.get $l8694 - i32.add - local.set $l8695 - local.get $l8694 - local.get $l8695 - i32.add - local.set $l8696 - local.get $l8695 - local.get $l8696 - i32.add - local.set $l8697 - local.get $l8696 - local.get $l8697 - i32.add - local.set $l8698 - local.get $l8697 - local.get $l8698 - i32.add - local.set $l8699 - local.get $l8698 - local.get $l8699 - i32.add - local.set $l8700 - local.get $l8699 - local.get $l8700 - i32.add - local.set $l8701 - local.get $l8700 - local.get $l8701 - i32.add - local.set $l8702 - local.get $l8701 - local.get $l8702 - i32.add - local.set $l8703 - local.get $l8702 - local.get $l8703 - i32.add - local.set $l8704 - local.get $l8703 - local.get $l8704 - i32.add - local.set $l8705 - local.get $l8704 - local.get $l8705 - i32.add - local.set $l8706 - local.get $l8705 - local.get $l8706 - i32.add - local.set $l8707 - local.get $l8706 - local.get $l8707 - i32.add - local.set $l8708 - local.get $l8707 - local.get $l8708 - i32.add - local.set $l8709 - local.get $l8708 - local.get $l8709 - i32.add - local.set $l8710 - local.get $l8709 - local.get $l8710 - i32.add - local.set $l8711 - local.get $l8710 - local.get $l8711 - i32.add - local.set $l8712 - local.get $l8711 - local.get $l8712 - i32.add - local.set $l8713 - local.get $l8712 - local.get $l8713 - i32.add - local.set $l8714 - local.get $l8713 - local.get $l8714 - i32.add - local.set $l8715 - local.get $l8714 - local.get $l8715 - i32.add - local.set $l8716 - local.get $l8715 - local.get $l8716 - i32.add - local.set $l8717 - local.get $l8716 - local.get $l8717 - i32.add - local.set $l8718 - local.get $l8717 - local.get $l8718 - i32.add - local.set $l8719 - local.get $l8718 - local.get $l8719 - i32.add - local.set $l8720 - local.get $l8719 - local.get $l8720 - i32.add - local.set $l8721 - local.get $l8720 - local.get $l8721 - i32.add - local.set $l8722 - local.get $l8721 - local.get $l8722 - i32.add - local.set $l8723 - local.get $l8722 - local.get $l8723 - i32.add - local.set $l8724 - local.get $l8723 - local.get $l8724 - i32.add - local.set $l8725 - local.get $l8724 - local.get $l8725 - i32.add - local.set $l8726 - local.get $l8725 - local.get $l8726 - i32.add - local.set $l8727 - local.get $l8726 - local.get $l8727 - i32.add - local.set $l8728 - local.get $l8727 - local.get $l8728 - i32.add - local.set $l8729 - local.get $l8728 - local.get $l8729 - i32.add - local.set $l8730 - local.get $l8729 - local.get $l8730 - i32.add - local.set $l8731 - local.get $l8730 - local.get $l8731 - i32.add - local.set $l8732 - local.get $l8731 - local.get $l8732 - i32.add - local.set $l8733 - local.get $l8732 - local.get $l8733 - i32.add - local.set $l8734 - local.get $l8733 - local.get $l8734 - i32.add - local.set $l8735 - local.get $l8734 - local.get $l8735 - i32.add - local.set $l8736 - local.get $l8735 - local.get $l8736 - i32.add - local.set $l8737 - local.get $l8736 - local.get $l8737 - i32.add - local.set $l8738 - local.get $l8737 - local.get $l8738 - i32.add - local.set $l8739 - local.get $l8738 - local.get $l8739 - i32.add - local.set $l8740 - local.get $l8739 - local.get $l8740 - i32.add - local.set $l8741 - local.get $l8740 - local.get $l8741 - i32.add - local.set $l8742 - local.get $l8741 - local.get $l8742 - i32.add - local.set $l8743 - local.get $l8742 - local.get $l8743 - i32.add - local.set $l8744 - local.get $l8743 - local.get $l8744 - i32.add - local.set $l8745 - local.get $l8744 - local.get $l8745 - i32.add - local.set $l8746 - local.get $l8745 - local.get $l8746 - i32.add - local.set $l8747 - local.get $l8746 - local.get $l8747 - i32.add - local.set $l8748 - local.get $l8747 - local.get $l8748 - i32.add - local.set $l8749 - local.get $l8748 - local.get $l8749 - i32.add - local.set $l8750 - local.get $l8749 - local.get $l8750 - i32.add - local.set $l8751 - local.get $l8750 - local.get $l8751 - i32.add - local.set $l8752 - local.get $l8751 - local.get $l8752 - i32.add - local.set $l8753 - local.get $l8752 - local.get $l8753 - i32.add - local.set $l8754 - local.get $l8753 - local.get $l8754 - i32.add - local.set $l8755 - local.get $l8754 - local.get $l8755 - i32.add - local.set $l8756 - local.get $l8755 - local.get $l8756 - i32.add - local.set $l8757 - local.get $l8756 - local.get $l8757 - i32.add - local.set $l8758 - local.get $l8757 - local.get $l8758 - i32.add - local.set $l8759 - local.get $l8758 - local.get $l8759 - i32.add - local.set $l8760 - local.get $l8759 - local.get $l8760 - i32.add - local.set $l8761 - local.get $l8760 - local.get $l8761 - i32.add - local.set $l8762 - local.get $l8761 - local.get $l8762 - i32.add - local.set $l8763 - local.get $l8762 - local.get $l8763 - i32.add - local.set $l8764 - local.get $l8763 - local.get $l8764 - i32.add - local.set $l8765 - local.get $l8764 - local.get $l8765 - i32.add - local.set $l8766 - local.get $l8765 - local.get $l8766 - i32.add - local.set $l8767 - local.get $l8766 - local.get $l8767 - i32.add - local.set $l8768 - local.get $l8767 - local.get $l8768 - i32.add - local.set $l8769 - local.get $l8768 - local.get $l8769 - i32.add - local.set $l8770 - local.get $l8769 - local.get $l8770 - i32.add - local.set $l8771 - local.get $l8770 - local.get $l8771 - i32.add - local.set $l8772 - local.get $l8771 - local.get $l8772 - i32.add - local.set $l8773 - local.get $l8772 - local.get $l8773 - i32.add - local.set $l8774 - local.get $l8773 - local.get $l8774 - i32.add - local.set $l8775 - local.get $l8774 - local.get $l8775 - i32.add - local.set $l8776 - local.get $l8775 - local.get $l8776 - i32.add - local.set $l8777 - local.get $l8776 - local.get $l8777 - i32.add - local.set $l8778 - local.get $l8777 - local.get $l8778 - i32.add - local.set $l8779 - local.get $l8778 - local.get $l8779 - i32.add - local.set $l8780 - local.get $l8779 - local.get $l8780 - i32.add - local.set $l8781 - local.get $l8780 - local.get $l8781 - i32.add - local.set $l8782 - local.get $l8781 - local.get $l8782 - i32.add - local.set $l8783 - local.get $l8782 - local.get $l8783 - i32.add - local.set $l8784 - local.get $l8783 - local.get $l8784 - i32.add - local.set $l8785 - local.get $l8784 - local.get $l8785 - i32.add - local.set $l8786 - local.get $l8785 - local.get $l8786 - i32.add - local.set $l8787 - local.get $l8786 - local.get $l8787 - i32.add - local.set $l8788 - local.get $l8787 - local.get $l8788 - i32.add - local.set $l8789 - local.get $l8788 - local.get $l8789 - i32.add - local.set $l8790 - local.get $l8789 - local.get $l8790 - i32.add - local.set $l8791 - local.get $l8790 - local.get $l8791 - i32.add - local.set $l8792 - local.get $l8791 - local.get $l8792 - i32.add - local.set $l8793 - local.get $l8792 - local.get $l8793 - i32.add - local.set $l8794 - local.get $l8793 - local.get $l8794 - i32.add - local.set $l8795 - local.get $l8794 - local.get $l8795 - i32.add - local.set $l8796 - local.get $l8795 - local.get $l8796 - i32.add - local.set $l8797 - local.get $l8796 - local.get $l8797 - i32.add - local.set $l8798 - local.get $l8797 - local.get $l8798 - i32.add - local.set $l8799 - local.get $l8798 - local.get $l8799 - i32.add - local.set $l8800 - local.get $l8799 - local.get $l8800 - i32.add - local.set $l8801 - local.get $l8800 - local.get $l8801 - i32.add - local.set $l8802 - local.get $l8801 - local.get $l8802 - i32.add - local.set $l8803 - local.get $l8802 - local.get $l8803 - i32.add - local.set $l8804 - local.get $l8803 - local.get $l8804 - i32.add - local.set $l8805 - local.get $l8804 - local.get $l8805 - i32.add - local.set $l8806 - local.get $l8805 - local.get $l8806 - i32.add - local.set $l8807 - local.get $l8806 - local.get $l8807 - i32.add - local.set $l8808 - local.get $l8807 - local.get $l8808 - i32.add - local.set $l8809 - local.get $l8808 - local.get $l8809 - i32.add - local.set $l8810 - local.get $l8809 - local.get $l8810 - i32.add - local.set $l8811 - local.get $l8810 - local.get $l8811 - i32.add - local.set $l8812 - local.get $l8811 - local.get $l8812 - i32.add - local.set $l8813 - local.get $l8812 - local.get $l8813 - i32.add - local.set $l8814 - local.get $l8813 - local.get $l8814 - i32.add - local.set $l8815 - local.get $l8814 - local.get $l8815 - i32.add - local.set $l8816 - local.get $l8815 - local.get $l8816 - i32.add - local.set $l8817 - local.get $l8816 - local.get $l8817 - i32.add - local.set $l8818 - local.get $l8817 - local.get $l8818 - i32.add - local.set $l8819 - local.get $l8818 - local.get $l8819 - i32.add - local.set $l8820 - local.get $l8819 - local.get $l8820 - i32.add - local.set $l8821 - local.get $l8820 - local.get $l8821 - i32.add - local.set $l8822 - local.get $l8821 - local.get $l8822 - i32.add - local.set $l8823 - local.get $l8822 - local.get $l8823 - i32.add - local.set $l8824 - local.get $l8823 - local.get $l8824 - i32.add - local.set $l8825 - local.get $l8824 - local.get $l8825 - i32.add - local.set $l8826 - local.get $l8825 - local.get $l8826 - i32.add - local.set $l8827 - local.get $l8826 - local.get $l8827 - i32.add - local.set $l8828 - local.get $l8827 - local.get $l8828 - i32.add - local.set $l8829 - local.get $l8828 - local.get $l8829 - i32.add - local.set $l8830 - local.get $l8829 - local.get $l8830 - i32.add - local.set $l8831 - local.get $l8830 - local.get $l8831 - i32.add - local.set $l8832 - local.get $l8831 - local.get $l8832 - i32.add - local.set $l8833 - local.get $l8832 - local.get $l8833 - i32.add - local.set $l8834 - local.get $l8833 - local.get $l8834 - i32.add - local.set $l8835 - local.get $l8834 - local.get $l8835 - i32.add - local.set $l8836 - local.get $l8835 - local.get $l8836 - i32.add - local.set $l8837 - local.get $l8836 - local.get $l8837 - i32.add - local.set $l8838 - local.get $l8837 - local.get $l8838 - i32.add - local.set $l8839 - local.get $l8838 - local.get $l8839 - i32.add - local.set $l8840 - local.get $l8839 - local.get $l8840 - i32.add - local.set $l8841 - local.get $l8840 - local.get $l8841 - i32.add - local.set $l8842 - local.get $l8841 - local.get $l8842 - i32.add - local.set $l8843 - local.get $l8842 - local.get $l8843 - i32.add - local.set $l8844 - local.get $l8843 - local.get $l8844 - i32.add - local.set $l8845 - local.get $l8844 - local.get $l8845 - i32.add - local.set $l8846 - local.get $l8845 - local.get $l8846 - i32.add - local.set $l8847 - local.get $l8846 - local.get $l8847 - i32.add - local.set $l8848 - local.get $l8847 - local.get $l8848 - i32.add - local.set $l8849 - local.get $l8848 - local.get $l8849 - i32.add - local.set $l8850 - local.get $l8849 - local.get $l8850 - i32.add - local.set $l8851 - local.get $l8850 - local.get $l8851 - i32.add - local.set $l8852 - local.get $l8851 - local.get $l8852 - i32.add - local.set $l8853 - local.get $l8852 - local.get $l8853 - i32.add - local.set $l8854 - local.get $l8853 - local.get $l8854 - i32.add - local.set $l8855 - local.get $l8854 - local.get $l8855 - i32.add - local.set $l8856 - local.get $l8855 - local.get $l8856 - i32.add - local.set $l8857 - local.get $l8856 - local.get $l8857 - i32.add - local.set $l8858 - local.get $l8857 - local.get $l8858 - i32.add - local.set $l8859 - local.get $l8858 - local.get $l8859 - i32.add - local.set $l8860 - local.get $l8859 - local.get $l8860 - i32.add - local.set $l8861 - local.get $l8860 - local.get $l8861 - i32.add - local.set $l8862 - local.get $l8861 - local.get $l8862 - i32.add - local.set $l8863 - local.get $l8862 - local.get $l8863 - i32.add - local.set $l8864 - local.get $l8863 - local.get $l8864 - i32.add - local.set $l8865 - local.get $l8864 - local.get $l8865 - i32.add - local.set $l8866 - local.get $l8865 - local.get $l8866 - i32.add - local.set $l8867 - local.get $l8866 - local.get $l8867 - i32.add - local.set $l8868 - local.get $l8867 - local.get $l8868 - i32.add - local.set $l8869 - local.get $l8868 - local.get $l8869 - i32.add - local.set $l8870 - local.get $l8869 - local.get $l8870 - i32.add - local.set $l8871 - local.get $l8870 - local.get $l8871 - i32.add - local.set $l8872 - local.get $l8871 - local.get $l8872 - i32.add - local.set $l8873 - local.get $l8872 - local.get $l8873 - i32.add - local.set $l8874 - local.get $l8873 - local.get $l8874 - i32.add - local.set $l8875 - local.get $l8874 - local.get $l8875 - i32.add - local.set $l8876 - local.get $l8875 - local.get $l8876 - i32.add - local.set $l8877 - local.get $l8876 - local.get $l8877 - i32.add - local.set $l8878 - local.get $l8877 - local.get $l8878 - i32.add - local.set $l8879 - local.get $l8878 - local.get $l8879 - i32.add - local.set $l8880 - local.get $l8879 - local.get $l8880 - i32.add - local.set $l8881 - local.get $l8880 - local.get $l8881 - i32.add - local.set $l8882 - local.get $l8881 - local.get $l8882 - i32.add - local.set $l8883 - local.get $l8882 - local.get $l8883 - i32.add - local.set $l8884 - local.get $l8883 - local.get $l8884 - i32.add - local.set $l8885 - local.get $l8884 - local.get $l8885 - i32.add - local.set $l8886 - local.get $l8885 - local.get $l8886 - i32.add - local.set $l8887 - local.get $l8886 - local.get $l8887 - i32.add - local.set $l8888 - local.get $l8887 - local.get $l8888 - i32.add - local.set $l8889 - local.get $l8888 - local.get $l8889 - i32.add - local.set $l8890 - local.get $l8889 - local.get $l8890 - i32.add - local.set $l8891 - local.get $l8890 - local.get $l8891 - i32.add - local.set $l8892 - local.get $l8891 - local.get $l8892 - i32.add - local.set $l8893 - local.get $l8892 - local.get $l8893 - i32.add - local.set $l8894 - local.get $l8893 - local.get $l8894 - i32.add - local.set $l8895 - local.get $l8894 - local.get $l8895 - i32.add - local.set $l8896 - local.get $l8895 - local.get $l8896 - i32.add - local.set $l8897 - local.get $l8896 - local.get $l8897 - i32.add - local.set $l8898 - local.get $l8897 - local.get $l8898 - i32.add - local.set $l8899 - local.get $l8898 - local.get $l8899 - i32.add - local.set $l8900 - local.get $l8899 - local.get $l8900 - i32.add - local.set $l8901 - local.get $l8900 - local.get $l8901 - i32.add - local.set $l8902 - local.get $l8901 - local.get $l8902 - i32.add - local.set $l8903 - local.get $l8902 - local.get $l8903 - i32.add - local.set $l8904 - local.get $l8903 - local.get $l8904 - i32.add - local.set $l8905 - local.get $l8904 - local.get $l8905 - i32.add - local.set $l8906 - local.get $l8905 - local.get $l8906 - i32.add - local.set $l8907 - local.get $l8906 - local.get $l8907 - i32.add - local.set $l8908 - local.get $l8907 - local.get $l8908 - i32.add - local.set $l8909 - local.get $l8908 - local.get $l8909 - i32.add - local.set $l8910 - local.get $l8909 - local.get $l8910 - i32.add - local.set $l8911 - local.get $l8910 - local.get $l8911 - i32.add - local.set $l8912 - local.get $l8911 - local.get $l8912 - i32.add - local.set $l8913 - local.get $l8912 - local.get $l8913 - i32.add - local.set $l8914 - local.get $l8913 - local.get $l8914 - i32.add - local.set $l8915 - local.get $l8914 - local.get $l8915 - i32.add - local.set $l8916 - local.get $l8915 - local.get $l8916 - i32.add - local.set $l8917 - local.get $l8916 - local.get $l8917 - i32.add - local.set $l8918 - local.get $l8917 - local.get $l8918 - i32.add - local.set $l8919 - local.get $l8918 - local.get $l8919 - i32.add - local.set $l8920 - local.get $l8919 - local.get $l8920 - i32.add - local.set $l8921 - local.get $l8920 - local.get $l8921 - i32.add - local.set $l8922 - local.get $l8921 - local.get $l8922 - i32.add - local.set $l8923 - local.get $l8922 - local.get $l8923 - i32.add - local.set $l8924 - local.get $l8923 - local.get $l8924 - i32.add - local.set $l8925 - local.get $l8924 - local.get $l8925 - i32.add - local.set $l8926 - local.get $l8925 - local.get $l8926 - i32.add - local.set $l8927 - local.get $l8926 - local.get $l8927 - i32.add - local.set $l8928 - local.get $l8927 - local.get $l8928 - i32.add - local.set $l8929 - local.get $l8928 - local.get $l8929 - i32.add - local.set $l8930 - local.get $l8929 - local.get $l8930 - i32.add - local.set $l8931 - local.get $l8930 - local.get $l8931 - i32.add - local.set $l8932 - local.get $l8931 - local.get $l8932 - i32.add - local.set $l8933 - local.get $l8932 - local.get $l8933 - i32.add - local.set $l8934 - local.get $l8933 - local.get $l8934 - i32.add - local.set $l8935 - local.get $l8934 - local.get $l8935 - i32.add - local.set $l8936 - local.get $l8935 - local.get $l8936 - i32.add - local.set $l8937 - local.get $l8936 - local.get $l8937 - i32.add - local.set $l8938 - local.get $l8937 - local.get $l8938 - i32.add - local.set $l8939 - local.get $l8938 - local.get $l8939 - i32.add - local.set $l8940 - local.get $l8939 - local.get $l8940 - i32.add - local.set $l8941 - local.get $l8940 - local.get $l8941 - i32.add - local.set $l8942 - local.get $l8941 - local.get $l8942 - i32.add - local.set $l8943 - local.get $l8942 - local.get $l8943 - i32.add - local.set $l8944 - local.get $l8943 - local.get $l8944 - i32.add - local.set $l8945 - local.get $l8944 - local.get $l8945 - i32.add - local.set $l8946 - local.get $l8945 - local.get $l8946 - i32.add - local.set $l8947 - local.get $l8946 - local.get $l8947 - i32.add - local.set $l8948 - local.get $l8947 - local.get $l8948 - i32.add - local.set $l8949 - local.get $l8948 - local.get $l8949 - i32.add - local.set $l8950 - local.get $l8949 - local.get $l8950 - i32.add - local.set $l8951 - local.get $l8950 - local.get $l8951 - i32.add - local.set $l8952 - local.get $l8951 - local.get $l8952 - i32.add - local.set $l8953 - local.get $l8952 - local.get $l8953 - i32.add - local.set $l8954 - local.get $l8953 - local.get $l8954 - i32.add - local.set $l8955 - local.get $l8954 - local.get $l8955 - i32.add - local.set $l8956 - local.get $l8955 - local.get $l8956 - i32.add - local.set $l8957 - local.get $l8956 - local.get $l8957 - i32.add - local.set $l8958 - local.get $l8957 - local.get $l8958 - i32.add - local.set $l8959 - local.get $l8958 - local.get $l8959 - i32.add - local.set $l8960 - local.get $l8959 - local.get $l8960 - i32.add - local.set $l8961 - local.get $l8960 - local.get $l8961 - i32.add - local.set $l8962 - local.get $l8961 - local.get $l8962 - i32.add - local.set $l8963 - local.get $l8962 - local.get $l8963 - i32.add - local.set $l8964 - local.get $l8963 - local.get $l8964 - i32.add - local.set $l8965 - local.get $l8964 - local.get $l8965 - i32.add - local.set $l8966 - local.get $l8965 - local.get $l8966 - i32.add - local.set $l8967 - local.get $l8966 - local.get $l8967 - i32.add - local.set $l8968 - local.get $l8967 - local.get $l8968 - i32.add - local.set $l8969 - local.get $l8968 - local.get $l8969 - i32.add - local.set $l8970 - local.get $l8969 - local.get $l8970 - i32.add - local.set $l8971 - local.get $l8970 - local.get $l8971 - i32.add - local.set $l8972 - local.get $l8971 - local.get $l8972 - i32.add - local.set $l8973 - local.get $l8972 - local.get $l8973 - i32.add - local.set $l8974 - local.get $l8973 - local.get $l8974 - i32.add - local.set $l8975 - local.get $l8974 - local.get $l8975 - i32.add - local.set $l8976 - local.get $l8975 - local.get $l8976 - i32.add - local.set $l8977 - local.get $l8976 - local.get $l8977 - i32.add - local.set $l8978 - local.get $l8977 - local.get $l8978 - i32.add - local.set $l8979 - local.get $l8978 - local.get $l8979 - i32.add - local.set $l8980 - local.get $l8979 - local.get $l8980 - i32.add - local.set $l8981 - local.get $l8980 - local.get $l8981 - i32.add - local.set $l8982 - local.get $l8981 - local.get $l8982 - i32.add - local.set $l8983 - local.get $l8982 - local.get $l8983 - i32.add - local.set $l8984 - local.get $l8983 - local.get $l8984 - i32.add - local.set $l8985 - local.get $l8984 - local.get $l8985 - i32.add - local.set $l8986 - local.get $l8985 - local.get $l8986 - i32.add - local.set $l8987 - local.get $l8986 - local.get $l8987 - i32.add - local.set $l8988 - local.get $l8987 - local.get $l8988 - i32.add - local.set $l8989 - local.get $l8988 - local.get $l8989 - i32.add - local.set $l8990 - local.get $l8989 - local.get $l8990 - i32.add - local.set $l8991 - local.get $l8990 - local.get $l8991 - i32.add - local.set $l8992 - local.get $l8991 - local.get $l8992 - i32.add - local.set $l8993 - local.get $l8992 - local.get $l8993 - i32.add - local.set $l8994 - local.get $l8993 - local.get $l8994 - i32.add - local.set $l8995 - local.get $l8994 - local.get $l8995 - i32.add - local.set $l8996 - local.get $l8995 - local.get $l8996 - i32.add - local.set $l8997 - local.get $l8996 - local.get $l8997 - i32.add - local.set $l8998 - local.get $l8997 - local.get $l8998 - i32.add - local.set $l8999 - local.get $l8998 - local.get $l8999 - i32.add - local.set $l9000 - local.get $l8999 - local.get $l9000 - i32.add - local.set $l9001 - local.get $l9000 - local.get $l9001 - i32.add - local.set $l9002 - local.get $l9001 - local.get $l9002 - i32.add - local.set $l9003 - local.get $l9002 - local.get $l9003 - i32.add - local.set $l9004 - local.get $l9003 - local.get $l9004 - i32.add - local.set $l9005 - local.get $l9004 - local.get $l9005 - i32.add - local.set $l9006 - local.get $l9005 - local.get $l9006 - i32.add - local.set $l9007 - local.get $l9006 - local.get $l9007 - i32.add - local.set $l9008 - local.get $l9007 - local.get $l9008 - i32.add - local.set $l9009 - local.get $l9008 - local.get $l9009 - i32.add - local.set $l9010 - local.get $l9009 - local.get $l9010 - i32.add - local.set $l9011 - local.get $l9010 - local.get $l9011 - i32.add - local.set $l9012 - local.get $l9011 - local.get $l9012 - i32.add - local.set $l9013 - local.get $l9012 - local.get $l9013 - i32.add - local.set $l9014 - local.get $l9013 - local.get $l9014 - i32.add - local.set $l9015 - local.get $l9014 - local.get $l9015 - i32.add - local.set $l9016 - local.get $l9015 - local.get $l9016 - i32.add - local.set $l9017 - local.get $l9016 - local.get $l9017 - i32.add - local.set $l9018 - local.get $l9017 - local.get $l9018 - i32.add - local.set $l9019 - local.get $l9018 - local.get $l9019 - i32.add - local.set $l9020 - local.get $l9019 - local.get $l9020 - i32.add - local.set $l9021 - local.get $l9020 - local.get $l9021 - i32.add - local.set $l9022 - local.get $l9021 - local.get $l9022 - i32.add - local.set $l9023 - local.get $l9022 - local.get $l9023 - i32.add - local.set $l9024 - local.get $l9023 - local.get $l9024 - i32.add - local.set $l9025 - local.get $l9024 - local.get $l9025 - i32.add - local.set $l9026 - local.get $l9025 - local.get $l9026 - i32.add - local.set $l9027 - local.get $l9026 - local.get $l9027 - i32.add - local.set $l9028 - local.get $l9027 - local.get $l9028 - i32.add - local.set $l9029 - local.get $l9028 - local.get $l9029 - i32.add - local.set $l9030 - local.get $l9029 - local.get $l9030 - i32.add - local.set $l9031 - local.get $l9030 - local.get $l9031 - i32.add - local.set $l9032 - local.get $l9031 - local.get $l9032 - i32.add - local.set $l9033 - local.get $l9032 - local.get $l9033 - i32.add - local.set $l9034 - local.get $l9033 - local.get $l9034 - i32.add - local.set $l9035 - local.get $l9034 - local.get $l9035 - i32.add - local.set $l9036 - local.get $l9035 - local.get $l9036 - i32.add - local.set $l9037 - local.get $l9036 - local.get $l9037 - i32.add - local.set $l9038 - local.get $l9037 - local.get $l9038 - i32.add - local.set $l9039 - local.get $l9038 - local.get $l9039 - i32.add - local.set $l9040 - local.get $l9039 - local.get $l9040 - i32.add - local.set $l9041 - local.get $l9040 - local.get $l9041 - i32.add - local.set $l9042 - local.get $l9041 - local.get $l9042 - i32.add - local.set $l9043 - local.get $l9042 - local.get $l9043 - i32.add - local.set $l9044 - local.get $l9043 - local.get $l9044 - i32.add - local.set $l9045 - local.get $l9044 - local.get $l9045 - i32.add - local.set $l9046 - local.get $l9045 - local.get $l9046 - i32.add - local.set $l9047 - local.get $l9046 - local.get $l9047 - i32.add - local.set $l9048 - local.get $l9047 - local.get $l9048 - i32.add - local.set $l9049 - local.get $l9048 - local.get $l9049 - i32.add - local.set $l9050 - local.get $l9049 - local.get $l9050 - i32.add - local.set $l9051 - local.get $l9050 - local.get $l9051 - i32.add - local.set $l9052 - local.get $l9051 - local.get $l9052 - i32.add - local.set $l9053 - local.get $l9052 - local.get $l9053 - i32.add - local.set $l9054 - local.get $l9053 - local.get $l9054 - i32.add - local.set $l9055 - local.get $l9054 - local.get $l9055 - i32.add - local.set $l9056 - local.get $l9055 - local.get $l9056 - i32.add - local.set $l9057 - local.get $l9056 - local.get $l9057 - i32.add - local.set $l9058 - local.get $l9057 - local.get $l9058 - i32.add - local.set $l9059 - local.get $l9058 - local.get $l9059 - i32.add - local.set $l9060 - local.get $l9059 - local.get $l9060 - i32.add - local.set $l9061 - local.get $l9060 - local.get $l9061 - i32.add - local.set $l9062 - local.get $l9061 - local.get $l9062 - i32.add - local.set $l9063 - local.get $l9062 - local.get $l9063 - i32.add - local.set $l9064 - local.get $l9063 - local.get $l9064 - i32.add - local.set $l9065 - local.get $l9064 - local.get $l9065 - i32.add - local.set $l9066 - local.get $l9065 - local.get $l9066 - i32.add - local.set $l9067 - local.get $l9066 - local.get $l9067 - i32.add - local.set $l9068 - local.get $l9067 - local.get $l9068 - i32.add - local.set $l9069 - local.get $l9068 - local.get $l9069 - i32.add - local.set $l9070 - local.get $l9069 - local.get $l9070 - i32.add - local.set $l9071 - local.get $l9070 - local.get $l9071 - i32.add - local.set $l9072 - local.get $l9071 - local.get $l9072 - i32.add - local.set $l9073 - local.get $l9072 - local.get $l9073 - i32.add - local.set $l9074 - local.get $l9073 - local.get $l9074 - i32.add - local.set $l9075 - local.get $l9074 - local.get $l9075 - i32.add - local.set $l9076 - local.get $l9075 - local.get $l9076 - i32.add - local.set $l9077 - local.get $l9076 - local.get $l9077 - i32.add - local.set $l9078 - local.get $l9077 - local.get $l9078 - i32.add - local.set $l9079 - local.get $l9078 - local.get $l9079 - i32.add - local.set $l9080 - local.get $l9079 - local.get $l9080 - i32.add - local.set $l9081 - local.get $l9080 - local.get $l9081 - i32.add - local.set $l9082 - local.get $l9081 - local.get $l9082 - i32.add - local.set $l9083 - local.get $l9082 - local.get $l9083 - i32.add - local.set $l9084 - local.get $l9083 - local.get $l9084 - i32.add - local.set $l9085 - local.get $l9084 - local.get $l9085 - i32.add - local.set $l9086 - local.get $l9085 - local.get $l9086 - i32.add - local.set $l9087 - local.get $l9086 - local.get $l9087 - i32.add - local.set $l9088 - local.get $l9087 - local.get $l9088 - i32.add - local.set $l9089 - local.get $l9088 - local.get $l9089 - i32.add - local.set $l9090 - local.get $l9089 - local.get $l9090 - i32.add - local.set $l9091 - local.get $l9090 - local.get $l9091 - i32.add - local.set $l9092 - local.get $l9091 - local.get $l9092 - i32.add - local.set $l9093 - local.get $l9092 - local.get $l9093 - i32.add - local.set $l9094 - local.get $l9093 - local.get $l9094 - i32.add - local.set $l9095 - local.get $l9094 - local.get $l9095 - i32.add - local.set $l9096 - local.get $l9095 - local.get $l9096 - i32.add - local.set $l9097 - local.get $l9096 - local.get $l9097 - i32.add - local.set $l9098 - local.get $l9097 - local.get $l9098 - i32.add - local.set $l9099 - local.get $l9098 - local.get $l9099 - i32.add - local.set $l9100 - local.get $l9099 - local.get $l9100 - i32.add - local.set $l9101 - local.get $l9100 - local.get $l9101 - i32.add - local.set $l9102 - local.get $l9101 - local.get $l9102 - i32.add - local.set $l9103 - local.get $l9102 - local.get $l9103 - i32.add - local.set $l9104 - local.get $l9103 - local.get $l9104 - i32.add - local.set $l9105 - local.get $l9104 - local.get $l9105 - i32.add - local.set $l9106 - local.get $l9105 - local.get $l9106 - i32.add - local.set $l9107 - local.get $l9106 - local.get $l9107 - i32.add - local.set $l9108 - local.get $l9107 - local.get $l9108 - i32.add - local.set $l9109 - local.get $l9108 - local.get $l9109 - i32.add - local.set $l9110 - local.get $l9109 - local.get $l9110 - i32.add - local.set $l9111 - local.get $l9110 - local.get $l9111 - i32.add - local.set $l9112 - local.get $l9111 - local.get $l9112 - i32.add - local.set $l9113 - local.get $l9112 - local.get $l9113 - i32.add - local.set $l9114 - local.get $l9113 - local.get $l9114 - i32.add - local.set $l9115 - local.get $l9114 - local.get $l9115 - i32.add - local.set $l9116 - local.get $l9115 - local.get $l9116 - i32.add - local.set $l9117 - local.get $l9116 - local.get $l9117 - i32.add - local.set $l9118 - local.get $l9117 - local.get $l9118 - i32.add - local.set $l9119 - local.get $l9118 - local.get $l9119 - i32.add - local.set $l9120 - local.get $l9119 - local.get $l9120 - i32.add - local.set $l9121 - local.get $l9120 - local.get $l9121 - i32.add - local.set $l9122 - local.get $l9121 - local.get $l9122 - i32.add - local.set $l9123 - local.get $l9122 - local.get $l9123 - i32.add - local.set $l9124 - local.get $l9123 - local.get $l9124 - i32.add - local.set $l9125 - local.get $l9124 - local.get $l9125 - i32.add - local.set $l9126 - local.get $l9125 - local.get $l9126 - i32.add - local.set $l9127 - local.get $l9126 - local.get $l9127 - i32.add - local.set $l9128 - local.get $l9127 - local.get $l9128 - i32.add - local.set $l9129 - local.get $l9128 - local.get $l9129 - i32.add - local.set $l9130 - local.get $l9129 - local.get $l9130 - i32.add - local.set $l9131 - local.get $l9130 - local.get $l9131 - i32.add - local.set $l9132 - local.get $l9131 - local.get $l9132 - i32.add - local.set $l9133 - local.get $l9132 - local.get $l9133 - i32.add - local.set $l9134 - local.get $l9133 - local.get $l9134 - i32.add - local.set $l9135 - local.get $l9134 - local.get $l9135 - i32.add - local.set $l9136 - local.get $l9135 - local.get $l9136 - i32.add - local.set $l9137 - local.get $l9136 - local.get $l9137 - i32.add - local.set $l9138 - local.get $l9137 - local.get $l9138 - i32.add - local.set $l9139 - local.get $l9138 - local.get $l9139 - i32.add - local.set $l9140 - local.get $l9139 - local.get $l9140 - i32.add - local.set $l9141 - local.get $l9140 - local.get $l9141 - i32.add - local.set $l9142 - local.get $l9141 - local.get $l9142 - i32.add - local.set $l9143 - local.get $l9142 - local.get $l9143 - i32.add - local.set $l9144 - local.get $l9143 - local.get $l9144 - i32.add - local.set $l9145 - local.get $l9144 - local.get $l9145 - i32.add - local.set $l9146 - local.get $l9145 - local.get $l9146 - i32.add - local.set $l9147 - local.get $l9146 - local.get $l9147 - i32.add - local.set $l9148 - local.get $l9147 - local.get $l9148 - i32.add - local.set $l9149 - local.get $l9148 - local.get $l9149 - i32.add - local.set $l9150 - local.get $l9149 - local.get $l9150 - i32.add - local.set $l9151 - local.get $l9150 - local.get $l9151 - i32.add - local.set $l9152 - local.get $l9151 - local.get $l9152 - i32.add - local.set $l9153 - local.get $l9152 - local.get $l9153 - i32.add - local.set $l9154 - local.get $l9153 - local.get $l9154 - i32.add - local.set $l9155 - local.get $l9154 - local.get $l9155 - i32.add - local.set $l9156 - local.get $l9155 - local.get $l9156 - i32.add - local.set $l9157 - local.get $l9156 - local.get $l9157 - i32.add - local.set $l9158 - local.get $l9157 - local.get $l9158 - i32.add - local.set $l9159 - local.get $l9158 - local.get $l9159 - i32.add - local.set $l9160 - local.get $l9159 - local.get $l9160 - i32.add - local.set $l9161 - local.get $l9160 - local.get $l9161 - i32.add - local.set $l9162 - local.get $l9161 - local.get $l9162 - i32.add - local.set $l9163 - local.get $l9162 - local.get $l9163 - i32.add - local.set $l9164 - local.get $l9163 - local.get $l9164 - i32.add - local.set $l9165 - local.get $l9164 - local.get $l9165 - i32.add - local.set $l9166 - local.get $l9165 - local.get $l9166 - i32.add - local.set $l9167 - local.get $l9166 - local.get $l9167 - i32.add - local.set $l9168 - local.get $l9167 - local.get $l9168 - i32.add - local.set $l9169 - local.get $l9168 - local.get $l9169 - i32.add - local.set $l9170 - local.get $l9169 - local.get $l9170 - i32.add - local.set $l9171 - local.get $l9170 - local.get $l9171 - i32.add - local.set $l9172 - local.get $l9171 - local.get $l9172 - i32.add - local.set $l9173 - local.get $l9172 - local.get $l9173 - i32.add - local.set $l9174 - local.get $l9173 - local.get $l9174 - i32.add - local.set $l9175 - local.get $l9174 - local.get $l9175 - i32.add - local.set $l9176 - local.get $l9175 - local.get $l9176 - i32.add - local.set $l9177 - local.get $l9176 - local.get $l9177 - i32.add - local.set $l9178 - local.get $l9177 - local.get $l9178 - i32.add - local.set $l9179 - local.get $l9178 - local.get $l9179 - i32.add - local.set $l9180 - local.get $l9179 - local.get $l9180 - i32.add - local.set $l9181 - local.get $l9180 - local.get $l9181 - i32.add - local.set $l9182 - local.get $l9181 - local.get $l9182 - i32.add - local.set $l9183 - local.get $l9182 - local.get $l9183 - i32.add - local.set $l9184 - local.get $l9183 - local.get $l9184 - i32.add - local.set $l9185 - local.get $l9184 - local.get $l9185 - i32.add - local.set $l9186 - local.get $l9185 - local.get $l9186 - i32.add - local.set $l9187 - local.get $l9186 - local.get $l9187 - i32.add - local.set $l9188 - local.get $l9187 - local.get $l9188 - i32.add - local.set $l9189 - local.get $l9188 - local.get $l9189 - i32.add - local.set $l9190 - local.get $l9189 - local.get $l9190 - i32.add - local.set $l9191 - local.get $l9190 - local.get $l9191 - i32.add - local.set $l9192 - local.get $l9191 - local.get $l9192 - i32.add - local.set $l9193 - local.get $l9192 - local.get $l9193 - i32.add - local.set $l9194 - local.get $l9193 - local.get $l9194 - i32.add - local.set $l9195 - local.get $l9194 - local.get $l9195 - i32.add - local.set $l9196 - local.get $l9195 - local.get $l9196 - i32.add - local.set $l9197 - local.get $l9196 - local.get $l9197 - i32.add - local.set $l9198 - local.get $l9197 - local.get $l9198 - i32.add - local.set $l9199 - local.get $l9198 - local.get $l9199 - i32.add - local.set $l9200 - local.get $l9199 - local.get $l9200 - i32.add - local.set $l9201 - local.get $l9200 - local.get $l9201 - i32.add - local.set $l9202 - local.get $l9201 - local.get $l9202 - i32.add - local.set $l9203 - local.get $l9202 - local.get $l9203 - i32.add - local.set $l9204 - local.get $l9203 - local.get $l9204 - i32.add - local.set $l9205 - local.get $l9204 - local.get $l9205 - i32.add - local.set $l9206 - local.get $l9205 - local.get $l9206 - i32.add - local.set $l9207 - local.get $l9206 - local.get $l9207 - i32.add - local.set $l9208 - local.get $l9207 - local.get $l9208 - i32.add - local.set $l9209 - local.get $l9208 - local.get $l9209 - i32.add - local.set $l9210 - local.get $l9209 - local.get $l9210 - i32.add - local.set $l9211 - local.get $l9210 - local.get $l9211 - i32.add - local.set $l9212 - local.get $l9211 - local.get $l9212 - i32.add - local.set $l9213 - local.get $l9212 - local.get $l9213 - i32.add - local.set $l9214 - local.get $l9213 - local.get $l9214 - i32.add - local.set $l9215 - local.get $l9214 - local.get $l9215 - i32.add - local.set $l9216 - local.get $l9215 - local.get $l9216 - i32.add - local.set $l9217 - local.get $l9216 - local.get $l9217 - i32.add - local.set $l9218 - local.get $l9217 - local.get $l9218 - i32.add - local.set $l9219 - local.get $l9218 - local.get $l9219 - i32.add - local.set $l9220 - local.get $l9219 - local.get $l9220 - i32.add - local.set $l9221 - local.get $l9220 - local.get $l9221 - i32.add - local.set $l9222 - local.get $l9221 - local.get $l9222 - i32.add - local.set $l9223 - local.get $l9222 - local.get $l9223 - i32.add - local.set $l9224 - local.get $l9223 - local.get $l9224 - i32.add - local.set $l9225 - local.get $l9224 - local.get $l9225 - i32.add - local.set $l9226 - local.get $l9225 - local.get $l9226 - i32.add - local.set $l9227 - local.get $l9226 - local.get $l9227 - i32.add - local.set $l9228 - local.get $l9227 - local.get $l9228 - i32.add - local.set $l9229 - local.get $l9228 - local.get $l9229 - i32.add - local.set $l9230 - local.get $l9229 - local.get $l9230 - i32.add - local.set $l9231 - local.get $l9230 - local.get $l9231 - i32.add - local.set $l9232 - local.get $l9231 - local.get $l9232 - i32.add - local.set $l9233 - local.get $l9232 - local.get $l9233 - i32.add - local.set $l9234 - local.get $l9233 - local.get $l9234 - i32.add - local.set $l9235 - local.get $l9234 - local.get $l9235 - i32.add - local.set $l9236 - local.get $l9235 - local.get $l9236 - i32.add - local.set $l9237 - local.get $l9236 - local.get $l9237 - i32.add - local.set $l9238 - local.get $l9237 - local.get $l9238 - i32.add - local.set $l9239 - local.get $l9238 - local.get $l9239 - i32.add - local.set $l9240 - local.get $l9239 - local.get $l9240 - i32.add - local.set $l9241 - local.get $l9240 - local.get $l9241 - i32.add - local.set $l9242 - local.get $l9241 - local.get $l9242 - i32.add - local.set $l9243 - local.get $l9242 - local.get $l9243 - i32.add - local.set $l9244 - local.get $l9243 - local.get $l9244 - i32.add - local.set $l9245 - local.get $l9244 - local.get $l9245 - i32.add - local.set $l9246 - local.get $l9245 - local.get $l9246 - i32.add - local.set $l9247 - local.get $l9246 - local.get $l9247 - i32.add - local.set $l9248 - local.get $l9247 - local.get $l9248 - i32.add - local.set $l9249 - local.get $l9248 - local.get $l9249 - i32.add - local.set $l9250 - local.get $l9249 - local.get $l9250 - i32.add - local.set $l9251 - local.get $l9250 - local.get $l9251 - i32.add - local.set $l9252 - local.get $l9251 - local.get $l9252 - i32.add - local.set $l9253 - local.get $l9252 - local.get $l9253 - i32.add - local.set $l9254 - local.get $l9253 - local.get $l9254 - i32.add - local.set $l9255 - local.get $l9254 - local.get $l9255 - i32.add - local.set $l9256 - local.get $l9255 - local.get $l9256 - i32.add - local.set $l9257 - local.get $l9256 - local.get $l9257 - i32.add - local.set $l9258 - local.get $l9257 - local.get $l9258 - i32.add - local.set $l9259 - local.get $l9258 - local.get $l9259 - i32.add - local.set $l9260 - local.get $l9259 - local.get $l9260 - i32.add - local.set $l9261 - local.get $l9260 - local.get $l9261 - i32.add - local.set $l9262 - local.get $l9261 - local.get $l9262 - i32.add - local.set $l9263 - local.get $l9262 - local.get $l9263 - i32.add - local.set $l9264 - local.get $l9263 - local.get $l9264 - i32.add - local.set $l9265 - local.get $l9264 - local.get $l9265 - i32.add - local.set $l9266 - local.get $l9265 - local.get $l9266 - i32.add - local.set $l9267 - local.get $l9266 - local.get $l9267 - i32.add - local.set $l9268 - local.get $l9267 - local.get $l9268 - i32.add - local.set $l9269 - local.get $l9268 - local.get $l9269 - i32.add - local.set $l9270 - local.get $l9269 - local.get $l9270 - i32.add - local.set $l9271 - local.get $l9270 - local.get $l9271 - i32.add - local.set $l9272 - local.get $l9271 - local.get $l9272 - i32.add - local.set $l9273 - local.get $l9272 - local.get $l9273 - i32.add - local.set $l9274 - local.get $l9273 - local.get $l9274 - i32.add - local.set $l9275 - local.get $l9274 - local.get $l9275 - i32.add - local.set $l9276 - local.get $l9275 - local.get $l9276 - i32.add - local.set $l9277 - local.get $l9276 - local.get $l9277 - i32.add - local.set $l9278 - local.get $l9277 - local.get $l9278 - i32.add - local.set $l9279 - local.get $l9278 - local.get $l9279 - i32.add - local.set $l9280 - local.get $l9279 - local.get $l9280 - i32.add - local.set $l9281 - local.get $l9280 - local.get $l9281 - i32.add - local.set $l9282 - local.get $l9281 - local.get $l9282 - i32.add - local.set $l9283 - local.get $l9282 - local.get $l9283 - i32.add - local.set $l9284 - local.get $l9283 - local.get $l9284 - i32.add - local.set $l9285 - local.get $l9284 - local.get $l9285 - i32.add - local.set $l9286 - local.get $l9285 - local.get $l9286 - i32.add - local.set $l9287 - local.get $l9286 - local.get $l9287 - i32.add - local.set $l9288 - local.get $l9287 - local.get $l9288 - i32.add - local.set $l9289 - local.get $l9288 - local.get $l9289 - i32.add - local.set $l9290 - local.get $l9289 - local.get $l9290 - i32.add - local.set $l9291 - local.get $l9290 - local.get $l9291 - i32.add - local.set $l9292 - local.get $l9291 - local.get $l9292 - i32.add - local.set $l9293 - local.get $l9292 - local.get $l9293 - i32.add - local.set $l9294 - local.get $l9293 - local.get $l9294 - i32.add - local.set $l9295 - local.get $l9294 - local.get $l9295 - i32.add - local.set $l9296 - local.get $l9295 - local.get $l9296 - i32.add - local.set $l9297 - local.get $l9296 - local.get $l9297 - i32.add - local.set $l9298 - local.get $l9297 - local.get $l9298 - i32.add - local.set $l9299 - local.get $l9298 - local.get $l9299 - i32.add - local.set $l9300 - local.get $l9299 - local.get $l9300 - i32.add - local.set $l9301 - local.get $l9300 - local.get $l9301 - i32.add - local.set $l9302 - local.get $l9301 - local.get $l9302 - i32.add - local.set $l9303 - local.get $l9302 - local.get $l9303 - i32.add - local.set $l9304 - local.get $l9303 - local.get $l9304 - i32.add - local.set $l9305 - local.get $l9304 - local.get $l9305 - i32.add - local.set $l9306 - local.get $l9305 - local.get $l9306 - i32.add - local.set $l9307 - local.get $l9306 - local.get $l9307 - i32.add - local.set $l9308 - local.get $l9307 - local.get $l9308 - i32.add - local.set $l9309 - local.get $l9308 - local.get $l9309 - i32.add - local.set $l9310 - local.get $l9309 - local.get $l9310 - i32.add - local.set $l9311 - local.get $l9310 - local.get $l9311 - i32.add - local.set $l9312 - local.get $l9311 - local.get $l9312 - i32.add - local.set $l9313 - local.get $l9312 - local.get $l9313 - i32.add - local.set $l9314 - local.get $l9313 - local.get $l9314 - i32.add - local.set $l9315 - local.get $l9314 - local.get $l9315 - i32.add - local.set $l9316 - local.get $l9315 - local.get $l9316 - i32.add - local.set $l9317 - local.get $l9316 - local.get $l9317 - i32.add - local.set $l9318 - local.get $l9317 - local.get $l9318 - i32.add - local.set $l9319 - local.get $l9318 - local.get $l9319 - i32.add - local.set $l9320 - local.get $l9319 - local.get $l9320 - i32.add - local.set $l9321 - local.get $l9320 - local.get $l9321 - i32.add - local.set $l9322 - local.get $l9321 - local.get $l9322 - i32.add - local.set $l9323 - local.get $l9322 - local.get $l9323 - i32.add - local.set $l9324 - local.get $l9323 - local.get $l9324 - i32.add - local.set $l9325 - local.get $l9324 - local.get $l9325 - i32.add - local.set $l9326 - local.get $l9325 - local.get $l9326 - i32.add - local.set $l9327 - local.get $l9326 - local.get $l9327 - i32.add - local.set $l9328 - local.get $l9327 - local.get $l9328 - i32.add - local.set $l9329 - local.get $l9328 - local.get $l9329 - i32.add - local.set $l9330 - local.get $l9329 - local.get $l9330 - i32.add - local.set $l9331 - local.get $l9330 - local.get $l9331 - i32.add - local.set $l9332 - local.get $l9331 - local.get $l9332 - i32.add - local.set $l9333 - local.get $l9332 - local.get $l9333 - i32.add - local.set $l9334 - local.get $l9333 - local.get $l9334 - i32.add - local.set $l9335 - local.get $l9334 - local.get $l9335 - i32.add - local.set $l9336 - local.get $l9335 - local.get $l9336 - i32.add - local.set $l9337 - local.get $l9336 - local.get $l9337 - i32.add - local.set $l9338 - local.get $l9337 - local.get $l9338 - i32.add - local.set $l9339 - local.get $l9338 - local.get $l9339 - i32.add - local.set $l9340 - local.get $l9339 - local.get $l9340 - i32.add - local.set $l9341 - local.get $l9340 - local.get $l9341 - i32.add - local.set $l9342 - local.get $l9341 - local.get $l9342 - i32.add - local.set $l9343 - local.get $l9342 - local.get $l9343 - i32.add - local.set $l9344 - local.get $l9343 - local.get $l9344 - i32.add - local.set $l9345 - local.get $l9344 - local.get $l9345 - i32.add - local.set $l9346 - local.get $l9345 - local.get $l9346 - i32.add - local.set $l9347 - local.get $l9346 - local.get $l9347 - i32.add - local.set $l9348 - local.get $l9347 - local.get $l9348 - i32.add - local.set $l9349 - local.get $l9348 - local.get $l9349 - i32.add - local.set $l9350 - local.get $l9349 - local.get $l9350 - i32.add - local.set $l9351 - local.get $l9350 - local.get $l9351 - i32.add - local.set $l9352 - local.get $l9351 - local.get $l9352 - i32.add - local.set $l9353 - local.get $l9352 - local.get $l9353 - i32.add - local.set $l9354 - local.get $l9353 - local.get $l9354 - i32.add - local.set $l9355 - local.get $l9354 - local.get $l9355 - i32.add - local.set $l9356 - local.get $l9355 - local.get $l9356 - i32.add - local.set $l9357 - local.get $l9356 - local.get $l9357 - i32.add - local.set $l9358 - local.get $l9357 - local.get $l9358 - i32.add - local.set $l9359 - local.get $l9358 - local.get $l9359 - i32.add - local.set $l9360 - local.get $l9359 - local.get $l9360 - i32.add - local.set $l9361 - local.get $l9360 - local.get $l9361 - i32.add - local.set $l9362 - local.get $l9361 - local.get $l9362 - i32.add - local.set $l9363 - local.get $l9362 - local.get $l9363 - i32.add - local.set $l9364 - local.get $l9363 - local.get $l9364 - i32.add - local.set $l9365 - local.get $l9364 - local.get $l9365 - i32.add - local.set $l9366 - local.get $l9365 - local.get $l9366 - i32.add - local.set $l9367 - local.get $l9366 - local.get $l9367 - i32.add - local.set $l9368 - local.get $l9367 - local.get $l9368 - i32.add - local.set $l9369 - local.get $l9368 - local.get $l9369 - i32.add - local.set $l9370 - local.get $l9369 - local.get $l9370 - i32.add - local.set $l9371 - local.get $l9370 - local.get $l9371 - i32.add - local.set $l9372 - local.get $l9371 - local.get $l9372 - i32.add - local.set $l9373 - local.get $l9372 - local.get $l9373 - i32.add - local.set $l9374 - local.get $l9373 - local.get $l9374 - i32.add - local.set $l9375 - local.get $l9374 - local.get $l9375 - i32.add - local.set $l9376 - local.get $l9375 - local.get $l9376 - i32.add - local.set $l9377 - local.get $l9376 - local.get $l9377 - i32.add - local.set $l9378 - local.get $l9377 - local.get $l9378 - i32.add - local.set $l9379 - local.get $l9378 - local.get $l9379 - i32.add - local.set $l9380 - local.get $l9379 - local.get $l9380 - i32.add - local.set $l9381 - local.get $l9380 - local.get $l9381 - i32.add - local.set $l9382 - local.get $l9381 - local.get $l9382 - i32.add - local.set $l9383 - local.get $l9382 - local.get $l9383 - i32.add - local.set $l9384 - local.get $l9383 - local.get $l9384 - i32.add - local.set $l9385 - local.get $l9384 - local.get $l9385 - i32.add - local.set $l9386 - local.get $l9385 - local.get $l9386 - i32.add - local.set $l9387 - local.get $l9386 - local.get $l9387 - i32.add - local.set $l9388 - local.get $l9387 - local.get $l9388 - i32.add - local.set $l9389 - local.get $l9388 - local.get $l9389 - i32.add - local.set $l9390 - local.get $l9389 - local.get $l9390 - i32.add - local.set $l9391 - local.get $l9390 - local.get $l9391 - i32.add - local.set $l9392 - local.get $l9391 - local.get $l9392 - i32.add - local.set $l9393 - local.get $l9392 - local.get $l9393 - i32.add - local.set $l9394 - local.get $l9393 - local.get $l9394 - i32.add - local.set $l9395 - local.get $l9394 - local.get $l9395 - i32.add - local.set $l9396 - local.get $l9395 - local.get $l9396 - i32.add - local.set $l9397 - local.get $l9396 - local.get $l9397 - i32.add - local.set $l9398 - local.get $l9397 - local.get $l9398 - i32.add - local.set $l9399 - local.get $l9398 - local.get $l9399 - i32.add - local.set $l9400 - local.get $l9399 - local.get $l9400 - i32.add - local.set $l9401 - local.get $l9400 - local.get $l9401 - i32.add - local.set $l9402 - local.get $l9401 - local.get $l9402 - i32.add - local.set $l9403 - local.get $l9402 - local.get $l9403 - i32.add - local.set $l9404 - local.get $l9403 - local.get $l9404 - i32.add - local.set $l9405 - local.get $l9404 - local.get $l9405 - i32.add - local.set $l9406 - local.get $l9405 - local.get $l9406 - i32.add - local.set $l9407 - local.get $l9406 - local.get $l9407 - i32.add - local.set $l9408 - local.get $l9407 - local.get $l9408 - i32.add - local.set $l9409 - local.get $l9408 - local.get $l9409 - i32.add - local.set $l9410 - local.get $l9409 - local.get $l9410 - i32.add - local.set $l9411 - local.get $l9410 - local.get $l9411 - i32.add - local.set $l9412 - local.get $l9411 - local.get $l9412 - i32.add - local.set $l9413 - local.get $l9412 - local.get $l9413 - i32.add - local.set $l9414 - local.get $l9413 - local.get $l9414 - i32.add - local.set $l9415 - local.get $l9414 - local.get $l9415 - i32.add - local.set $l9416 - local.get $l9415 - local.get $l9416 - i32.add - local.set $l9417 - local.get $l9416 - local.get $l9417 - i32.add - local.set $l9418 - local.get $l9417 - local.get $l9418 - i32.add - local.set $l9419 - local.get $l9418 - local.get $l9419 - i32.add - local.set $l9420 - local.get $l9419 - local.get $l9420 - i32.add - local.set $l9421 - local.get $l9420 - local.get $l9421 - i32.add - local.set $l9422 - local.get $l9421 - local.get $l9422 - i32.add - local.set $l9423 - local.get $l9422 - local.get $l9423 - i32.add - local.set $l9424 - local.get $l9423 - local.get $l9424 - i32.add - local.set $l9425 - local.get $l9424 - local.get $l9425 - i32.add - local.set $l9426 - local.get $l9425 - local.get $l9426 - i32.add - local.set $l9427 - local.get $l9426 - local.get $l9427 - i32.add - local.set $l9428 - local.get $l9427 - local.get $l9428 - i32.add - local.set $l9429 - local.get $l9428 - local.get $l9429 - i32.add - local.set $l9430 - local.get $l9429 - local.get $l9430 - i32.add - local.set $l9431 - local.get $l9430 - local.get $l9431 - i32.add - local.set $l9432 - local.get $l9431 - local.get $l9432 - i32.add - local.set $l9433 - local.get $l9432 - local.get $l9433 - i32.add - local.set $l9434 - local.get $l9433 - local.get $l9434 - i32.add - local.set $l9435 - local.get $l9434 - local.get $l9435 - i32.add - local.set $l9436 - local.get $l9435 - local.get $l9436 - i32.add - local.set $l9437 - local.get $l9436 - local.get $l9437 - i32.add - local.set $l9438 - local.get $l9437 - local.get $l9438 - i32.add - local.set $l9439 - local.get $l9438 - local.get $l9439 - i32.add - local.set $l9440 - local.get $l9439 - local.get $l9440 - i32.add - local.set $l9441 - local.get $l9440 - local.get $l9441 - i32.add - local.set $l9442 - local.get $l9441 - local.get $l9442 - i32.add - local.set $l9443 - local.get $l9442 - local.get $l9443 - i32.add - local.set $l9444 - local.get $l9443 - local.get $l9444 - i32.add - local.set $l9445 - local.get $l9444 - local.get $l9445 - i32.add - local.set $l9446 - local.get $l9445 - local.get $l9446 - i32.add - local.set $l9447 - local.get $l9446 - local.get $l9447 - i32.add - local.set $l9448 - local.get $l9447 - local.get $l9448 - i32.add - local.set $l9449 - local.get $l9448 - local.get $l9449 - i32.add - local.set $l9450 - local.get $l9449 - local.get $l9450 - i32.add - local.set $l9451 - local.get $l9450 - local.get $l9451 - i32.add - local.set $l9452 - local.get $l9451 - local.get $l9452 - i32.add - local.set $l9453 - local.get $l9452 - local.get $l9453 - i32.add - local.set $l9454 - local.get $l9453 - local.get $l9454 - i32.add - local.set $l9455 - local.get $l9454 - local.get $l9455 - i32.add - local.set $l9456 - local.get $l9455 - local.get $l9456 - i32.add - local.set $l9457 - local.get $l9456 - local.get $l9457 - i32.add - local.set $l9458 - local.get $l9457 - local.get $l9458 - i32.add - local.set $l9459 - local.get $l9458 - local.get $l9459 - i32.add - local.set $l9460 - local.get $l9459 - local.get $l9460 - i32.add - local.set $l9461 - local.get $l9460 - local.get $l9461 - i32.add - local.set $l9462 - local.get $l9461 - local.get $l9462 - i32.add - local.set $l9463 - local.get $l9462 - local.get $l9463 - i32.add - local.set $l9464 - local.get $l9463 - local.get $l9464 - i32.add - local.set $l9465 - local.get $l9464 - local.get $l9465 - i32.add - local.set $l9466 - local.get $l9465 - local.get $l9466 - i32.add - local.set $l9467 - local.get $l9466 - local.get $l9467 - i32.add - local.set $l9468 - local.get $l9467 - local.get $l9468 - i32.add - local.set $l9469 - local.get $l9468 - local.get $l9469 - i32.add - local.set $l9470 - local.get $l9469 - local.get $l9470 - i32.add - local.set $l9471 - local.get $l9470 - local.get $l9471 - i32.add - local.set $l9472 - local.get $l9471 - local.get $l9472 - i32.add - local.set $l9473 - local.get $l9472 - local.get $l9473 - i32.add - local.set $l9474 - local.get $l9473 - local.get $l9474 - i32.add - local.set $l9475 - local.get $l9474 - local.get $l9475 - i32.add - local.set $l9476 - local.get $l9475 - local.get $l9476 - i32.add - local.set $l9477 - local.get $l9476 - local.get $l9477 - i32.add - local.set $l9478 - local.get $l9477 - local.get $l9478 - i32.add - local.set $l9479 - local.get $l9478 - local.get $l9479 - i32.add - local.set $l9480 - local.get $l9479 - local.get $l9480 - i32.add - local.set $l9481 - local.get $l9480 - local.get $l9481 - i32.add - local.set $l9482 - local.get $l9481 - local.get $l9482 - i32.add - local.set $l9483 - local.get $l9482 - local.get $l9483 - i32.add - local.set $l9484 - local.get $l9483 - local.get $l9484 - i32.add - local.set $l9485 - local.get $l9484 - local.get $l9485 - i32.add - local.set $l9486 - local.get $l9485 - local.get $l9486 - i32.add - local.set $l9487 - local.get $l9486 - local.get $l9487 - i32.add - local.set $l9488 - local.get $l9487 - local.get $l9488 - i32.add - local.set $l9489 - local.get $l9488 - local.get $l9489 - i32.add - local.set $l9490 - local.get $l9489 - local.get $l9490 - i32.add - local.set $l9491 - local.get $l9490 - local.get $l9491 - i32.add - local.set $l9492 - local.get $l9491 - local.get $l9492 - i32.add - local.set $l9493 - local.get $l9492 - local.get $l9493 - i32.add - local.set $l9494 - local.get $l9493 - local.get $l9494 - i32.add - local.set $l9495 - local.get $l9494 - local.get $l9495 - i32.add - local.set $l9496 - local.get $l9495 - local.get $l9496 - i32.add - local.set $l9497 - local.get $l9496 - local.get $l9497 - i32.add - local.set $l9498 - local.get $l9497 - local.get $l9498 - i32.add - local.set $l9499 - local.get $l9498 - local.get $l9499 - i32.add - local.set $l9500 - local.get $l9499 - local.get $l9500 - i32.add - local.set $l9501 - local.get $l9500 - local.get $l9501 - i32.add - local.set $l9502 - local.get $l9501 - local.get $l9502 - i32.add - local.set $l9503 - local.get $l9502 - local.get $l9503 - i32.add - local.set $l9504 - local.get $l9503 - local.get $l9504 - i32.add - local.set $l9505 - local.get $l9504 - local.get $l9505 - i32.add - local.set $l9506 - local.get $l9505 - local.get $l9506 - i32.add - local.set $l9507 - local.get $l9506 - local.get $l9507 - i32.add - local.set $l9508 - local.get $l9507 - local.get $l9508 - i32.add - local.set $l9509 - local.get $l9508 - local.get $l9509 - i32.add - local.set $l9510 - local.get $l9509 - local.get $l9510 - i32.add - local.set $l9511 - local.get $l9510 - local.get $l9511 - i32.add - local.set $l9512 - local.get $l9511 - local.get $l9512 - i32.add - local.set $l9513 - local.get $l9512 - local.get $l9513 - i32.add - local.set $l9514 - local.get $l9513 - local.get $l9514 - i32.add - local.set $l9515 - local.get $l9514 - local.get $l9515 - i32.add - local.set $l9516 - local.get $l9515 - local.get $l9516 - i32.add - local.set $l9517 - local.get $l9516 - local.get $l9517 - i32.add - local.set $l9518 - local.get $l9517 - local.get $l9518 - i32.add - local.set $l9519 - local.get $l9518 - local.get $l9519 - i32.add - local.set $l9520 - local.get $l9519 - local.get $l9520 - i32.add - local.set $l9521 - local.get $l9520 - local.get $l9521 - i32.add - local.set $l9522 - local.get $l9521 - local.get $l9522 - i32.add - local.set $l9523 - local.get $l9522 - local.get $l9523 - i32.add - local.set $l9524 - local.get $l9523 - local.get $l9524 - i32.add - local.set $l9525 - local.get $l9524 - local.get $l9525 - i32.add - local.set $l9526 - local.get $l9525 - local.get $l9526 - i32.add - local.set $l9527 - local.get $l9526 - local.get $l9527 - i32.add - local.set $l9528 - local.get $l9527 - local.get $l9528 - i32.add - local.set $l9529 - local.get $l9528 - local.get $l9529 - i32.add - local.set $l9530 - local.get $l9529 - local.get $l9530 - i32.add - local.set $l9531 - local.get $l9530 - local.get $l9531 - i32.add - local.set $l9532 - local.get $l9531 - local.get $l9532 - i32.add - local.set $l9533 - local.get $l9532 - local.get $l9533 - i32.add - local.set $l9534 - local.get $l9533 - local.get $l9534 - i32.add - local.set $l9535 - local.get $l9534 - local.get $l9535 - i32.add - local.set $l9536 - local.get $l9535 - local.get $l9536 - i32.add - local.set $l9537 - local.get $l9536 - local.get $l9537 - i32.add - local.set $l9538 - local.get $l9537 - local.get $l9538 - i32.add - local.set $l9539 - local.get $l9538 - local.get $l9539 - i32.add - local.set $l9540 - local.get $l9539 - local.get $l9540 - i32.add - local.set $l9541 - local.get $l9540 - local.get $l9541 - i32.add - local.set $l9542 - local.get $l9541 - local.get $l9542 - i32.add - local.set $l9543 - local.get $l9542 - local.get $l9543 - i32.add - local.set $l9544 - local.get $l9543 - local.get $l9544 - i32.add - local.set $l9545 - local.get $l9544 - local.get $l9545 - i32.add - local.set $l9546 - local.get $l9545 - local.get $l9546 - i32.add - local.set $l9547 - local.get $l9546 - local.get $l9547 - i32.add - local.set $l9548 - local.get $l9547 - local.get $l9548 - i32.add - local.set $l9549 - local.get $l9548 - local.get $l9549 - i32.add - local.set $l9550 - local.get $l9549 - local.get $l9550 - i32.add - local.set $l9551 - local.get $l9550 - local.get $l9551 - i32.add - local.set $l9552 - local.get $l9551 - local.get $l9552 - i32.add - local.set $l9553 - local.get $l9552 - local.get $l9553 - i32.add - local.set $l9554 - local.get $l9553 - local.get $l9554 - i32.add - local.set $l9555 - local.get $l9554 - local.get $l9555 - i32.add - local.set $l9556 - local.get $l9555 - local.get $l9556 - i32.add - local.set $l9557 - local.get $l9556 - local.get $l9557 - i32.add - local.set $l9558 - local.get $l9557 - local.get $l9558 - i32.add - local.set $l9559 - local.get $l9558 - local.get $l9559 - i32.add - local.set $l9560 - local.get $l9559 - local.get $l9560 - i32.add - local.set $l9561 - local.get $l9560 - local.get $l9561 - i32.add - local.set $l9562 - local.get $l9561 - local.get $l9562 - i32.add - local.set $l9563 - local.get $l9562 - local.get $l9563 - i32.add - local.set $l9564 - local.get $l9563 - local.get $l9564 - i32.add - local.set $l9565 - local.get $l9564 - local.get $l9565 - i32.add - local.set $l9566 - local.get $l9565 - local.get $l9566 - i32.add - local.set $l9567 - local.get $l9566 - local.get $l9567 - i32.add - local.set $l9568 - local.get $l9567 - local.get $l9568 - i32.add - local.set $l9569 - local.get $l9568 - local.get $l9569 - i32.add - local.set $l9570 - local.get $l9569 - local.get $l9570 - i32.add - local.set $l9571 - local.get $l9570 - local.get $l9571 - i32.add - local.set $l9572 - local.get $l9571 - local.get $l9572 - i32.add - local.set $l9573 - local.get $l9572 - local.get $l9573 - i32.add - local.set $l9574 - local.get $l9573 - local.get $l9574 - i32.add - local.set $l9575 - local.get $l9574 - local.get $l9575 - i32.add - local.set $l9576 - local.get $l9575 - local.get $l9576 - i32.add - local.set $l9577 - local.get $l9576 - local.get $l9577 - i32.add - local.set $l9578 - local.get $l9577 - local.get $l9578 - i32.add - local.set $l9579 - local.get $l9578 - local.get $l9579 - i32.add - local.set $l9580 - local.get $l9579 - local.get $l9580 - i32.add - local.set $l9581 - local.get $l9580 - local.get $l9581 - i32.add - local.set $l9582 - local.get $l9581 - local.get $l9582 - i32.add - local.set $l9583 - local.get $l9582 - local.get $l9583 - i32.add - local.set $l9584 - local.get $l9583 - local.get $l9584 - i32.add - local.set $l9585 - local.get $l9584 - local.get $l9585 - i32.add - local.set $l9586 - local.get $l9585 - local.get $l9586 - i32.add - local.set $l9587 - local.get $l9586 - local.get $l9587 - i32.add - local.set $l9588 - local.get $l9587 - local.get $l9588 - i32.add - local.set $l9589 - local.get $l9588 - local.get $l9589 - i32.add - local.set $l9590 - local.get $l9589 - local.get $l9590 - i32.add - local.set $l9591 - local.get $l9590 - local.get $l9591 - i32.add - local.set $l9592 - local.get $l9591 - local.get $l9592 - i32.add - local.set $l9593 - local.get $l9592 - local.get $l9593 - i32.add - local.set $l9594 - local.get $l9593 - local.get $l9594 - i32.add - local.set $l9595 - local.get $l9594 - local.get $l9595 - i32.add - local.set $l9596 - local.get $l9595 - local.get $l9596 - i32.add - local.set $l9597 - local.get $l9596 - local.get $l9597 - i32.add - local.set $l9598 - local.get $l9597 - local.get $l9598 - i32.add - local.set $l9599 - local.get $l9598 - local.get $l9599 - i32.add - local.set $l9600 - local.get $l9599 - local.get $l9600 - i32.add - local.set $l9601 - local.get $l9600 - local.get $l9601 - i32.add - local.set $l9602 - local.get $l9601 - local.get $l9602 - i32.add - local.set $l9603 - local.get $l9602 - local.get $l9603 - i32.add - local.set $l9604 - local.get $l9603 - local.get $l9604 - i32.add - local.set $l9605 - local.get $l9604 - local.get $l9605 - i32.add - local.set $l9606 - local.get $l9605 - local.get $l9606 - i32.add - local.set $l9607 - local.get $l9606 - local.get $l9607 - i32.add - local.set $l9608 - local.get $l9607 - local.get $l9608 - i32.add - local.set $l9609 - local.get $l9608 - local.get $l9609 - i32.add - local.set $l9610 - local.get $l9609 - local.get $l9610 - i32.add - local.set $l9611 - local.get $l9610 - local.get $l9611 - i32.add - local.set $l9612 - local.get $l9611 - local.get $l9612 - i32.add - local.set $l9613 - local.get $l9612 - local.get $l9613 - i32.add - local.set $l9614 - local.get $l9613 - local.get $l9614 - i32.add - local.set $l9615 - local.get $l9614 - local.get $l9615 - i32.add - local.set $l9616 - local.get $l9615 - local.get $l9616 - i32.add - local.set $l9617 - local.get $l9616 - local.get $l9617 - i32.add - local.set $l9618 - local.get $l9617 - local.get $l9618 - i32.add - local.set $l9619 - local.get $l9618 - local.get $l9619 - i32.add - local.set $l9620 - local.get $l9619 - local.get $l9620 - i32.add - local.set $l9621 - local.get $l9620 - local.get $l9621 - i32.add - local.set $l9622 - local.get $l9621 - local.get $l9622 - i32.add - local.set $l9623 - local.get $l9622 - local.get $l9623 - i32.add - local.set $l9624 - local.get $l9623 - local.get $l9624 - i32.add - local.set $l9625 - local.get $l9624 - local.get $l9625 - i32.add - local.set $l9626 - local.get $l9625 - local.get $l9626 - i32.add - local.set $l9627 - local.get $l9626 - local.get $l9627 - i32.add - local.set $l9628 - local.get $l9627 - local.get $l9628 - i32.add - local.set $l9629 - local.get $l9628 - local.get $l9629 - i32.add - local.set $l9630 - local.get $l9629 - local.get $l9630 - i32.add - local.set $l9631 - local.get $l9630 - local.get $l9631 - i32.add - local.set $l9632 - local.get $l9631 - local.get $l9632 - i32.add - local.set $l9633 - local.get $l9632 - local.get $l9633 - i32.add - local.set $l9634 - local.get $l9633 - local.get $l9634 - i32.add - local.set $l9635 - local.get $l9634 - local.get $l9635 - i32.add - local.set $l9636 - local.get $l9635 - local.get $l9636 - i32.add - local.set $l9637 - local.get $l9636 - local.get $l9637 - i32.add - local.set $l9638 - local.get $l9637 - local.get $l9638 - i32.add - local.set $l9639 - local.get $l9638 - local.get $l9639 - i32.add - local.set $l9640 - local.get $l9639 - local.get $l9640 - i32.add - local.set $l9641 - local.get $l9640 - local.get $l9641 - i32.add - local.set $l9642 - local.get $l9641 - local.get $l9642 - i32.add - local.set $l9643 - local.get $l9642 - local.get $l9643 - i32.add - local.set $l9644 - local.get $l9643 - local.get $l9644 - i32.add - local.set $l9645 - local.get $l9644 - local.get $l9645 - i32.add - local.set $l9646 - local.get $l9645 - local.get $l9646 - i32.add - local.set $l9647 - local.get $l9646 - local.get $l9647 - i32.add - local.set $l9648 - local.get $l9647 - local.get $l9648 - i32.add - local.set $l9649 - local.get $l9648 - local.get $l9649 - i32.add - local.set $l9650 - local.get $l9649 - local.get $l9650 - i32.add - local.set $l9651 - local.get $l9650 - local.get $l9651 - i32.add - local.set $l9652 - local.get $l9651 - local.get $l9652 - i32.add - local.set $l9653 - local.get $l9652 - local.get $l9653 - i32.add - local.set $l9654 - local.get $l9653 - local.get $l9654 - i32.add - local.set $l9655 - local.get $l9654 - local.get $l9655 - i32.add - local.set $l9656 - local.get $l9655 - local.get $l9656 - i32.add - local.set $l9657 - local.get $l9656 - local.get $l9657 - i32.add - local.set $l9658 - local.get $l9657 - local.get $l9658 - i32.add - local.set $l9659 - local.get $l9658 - local.get $l9659 - i32.add - local.set $l9660 - local.get $l9659 - local.get $l9660 - i32.add - local.set $l9661 - local.get $l9660 - local.get $l9661 - i32.add - local.set $l9662 - local.get $l9661 - local.get $l9662 - i32.add - local.set $l9663 - local.get $l9662 - local.get $l9663 - i32.add - local.set $l9664 - local.get $l9663 - local.get $l9664 - i32.add - local.set $l9665 - local.get $l9664 - local.get $l9665 - i32.add - local.set $l9666 - local.get $l9665 - local.get $l9666 - i32.add - local.set $l9667 - local.get $l9666 - local.get $l9667 - i32.add - local.set $l9668 - local.get $l9667 - local.get $l9668 - i32.add - local.set $l9669 - local.get $l9668 - local.get $l9669 - i32.add - local.set $l9670 - local.get $l9669 - local.get $l9670 - i32.add - local.set $l9671 - local.get $l9670 - local.get $l9671 - i32.add - local.set $l9672 - local.get $l9671 - local.get $l9672 - i32.add - local.set $l9673 - local.get $l9672 - local.get $l9673 - i32.add - local.set $l9674 - local.get $l9673 - local.get $l9674 - i32.add - local.set $l9675 - local.get $l9674 - local.get $l9675 - i32.add - local.set $l9676 - local.get $l9675 - local.get $l9676 - i32.add - local.set $l9677 - local.get $l9676 - local.get $l9677 - i32.add - local.set $l9678 - local.get $l9677 - local.get $l9678 - i32.add - local.set $l9679 - local.get $l9678 - local.get $l9679 - i32.add - local.set $l9680 - local.get $l9679 - local.get $l9680 - i32.add - local.set $l9681 - local.get $l9680 - local.get $l9681 - i32.add - local.set $l9682 - local.get $l9681 - local.get $l9682 - i32.add - local.set $l9683 - local.get $l9682 - local.get $l9683 - i32.add - local.set $l9684 - local.get $l9683 - local.get $l9684 - i32.add - local.set $l9685 - local.get $l9684 - local.get $l9685 - i32.add - local.set $l9686 - local.get $l9685 - local.get $l9686 - i32.add - local.set $l9687 - local.get $l9686 - local.get $l9687 - i32.add - local.set $l9688 - local.get $l9687 - local.get $l9688 - i32.add - local.set $l9689 - local.get $l9688 - local.get $l9689 - i32.add - local.set $l9690 - local.get $l9689 - local.get $l9690 - i32.add - local.set $l9691 - local.get $l9690 - local.get $l9691 - i32.add - local.set $l9692 - local.get $l9691 - local.get $l9692 - i32.add - local.set $l9693 - local.get $l9692 - local.get $l9693 - i32.add - local.set $l9694 - local.get $l9693 - local.get $l9694 - i32.add - local.set $l9695 - local.get $l9694 - local.get $l9695 - i32.add - local.set $l9696 - local.get $l9695 - local.get $l9696 - i32.add - local.set $l9697 - local.get $l9696 - local.get $l9697 - i32.add - local.set $l9698 - local.get $l9697 - local.get $l9698 - i32.add - local.set $l9699 - local.get $l9698 - local.get $l9699 - i32.add - local.set $l9700 - local.get $l9699 - local.get $l9700 - i32.add - local.set $l9701 - local.get $l9700 - local.get $l9701 - i32.add - local.set $l9702 - local.get $l9701 - local.get $l9702 - i32.add - local.set $l9703 - local.get $l9702 - local.get $l9703 - i32.add - local.set $l9704 - local.get $l9703 - local.get $l9704 - i32.add - local.set $l9705 - local.get $l9704 - local.get $l9705 - i32.add - local.set $l9706 - local.get $l9705 - local.get $l9706 - i32.add - local.set $l9707 - local.get $l9706 - local.get $l9707 - i32.add - local.set $l9708 - local.get $l9707 - local.get $l9708 - i32.add - local.set $l9709 - local.get $l9708 - local.get $l9709 - i32.add - local.set $l9710 - local.get $l9709 - local.get $l9710 - i32.add - local.set $l9711 - local.get $l9710 - local.get $l9711 - i32.add - local.set $l9712 - local.get $l9711 - local.get $l9712 - i32.add - local.set $l9713 - local.get $l9712 - local.get $l9713 - i32.add - local.set $l9714 - local.get $l9713 - local.get $l9714 - i32.add - local.set $l9715 - local.get $l9714 - local.get $l9715 - i32.add - local.set $l9716 - local.get $l9715 - local.get $l9716 - i32.add - local.set $l9717 - local.get $l9716 - local.get $l9717 - i32.add - local.set $l9718 - local.get $l9717 - local.get $l9718 - i32.add - local.set $l9719 - local.get $l9718 - local.get $l9719 - i32.add - local.set $l9720 - local.get $l9719 - local.get $l9720 - i32.add - local.set $l9721 - local.get $l9720 - local.get $l9721 - i32.add - local.set $l9722 - local.get $l9721 - local.get $l9722 - i32.add - local.set $l9723 - local.get $l9722 - local.get $l9723 - i32.add - local.set $l9724 - local.get $l9723 - local.get $l9724 - i32.add - local.set $l9725 - local.get $l9724 - local.get $l9725 - i32.add - local.set $l9726 - local.get $l9725 - local.get $l9726 - i32.add - local.set $l9727 - local.get $l9726 - local.get $l9727 - i32.add - local.set $l9728 - local.get $l9727 - local.get $l9728 - i32.add - local.set $l9729 - local.get $l9728 - local.get $l9729 - i32.add - local.set $l9730 - local.get $l9729 - local.get $l9730 - i32.add - local.set $l9731 - local.get $l9730 - local.get $l9731 - i32.add - local.set $l9732 - local.get $l9731 - local.get $l9732 - i32.add - local.set $l9733 - local.get $l9732 - local.get $l9733 - i32.add - local.set $l9734 - local.get $l9733 - local.get $l9734 - i32.add - local.set $l9735 - local.get $l9734 - local.get $l9735 - i32.add - local.set $l9736 - local.get $l9735 - local.get $l9736 - i32.add - local.set $l9737 - local.get $l9736 - local.get $l9737 - i32.add - local.set $l9738 - local.get $l9737 - local.get $l9738 - i32.add - local.set $l9739 - local.get $l9738 - local.get $l9739 - i32.add - local.set $l9740 - local.get $l9739 - local.get $l9740 - i32.add - local.set $l9741 - local.get $l9740 - local.get $l9741 - i32.add - local.set $l9742 - local.get $l9741 - local.get $l9742 - i32.add - local.set $l9743 - local.get $l9742 - local.get $l9743 - i32.add - local.set $l9744 - local.get $l9743 - local.get $l9744 - i32.add - local.set $l9745 - local.get $l9744 - local.get $l9745 - i32.add - local.set $l9746 - local.get $l9745 - local.get $l9746 - i32.add - local.set $l9747 - local.get $l9746 - local.get $l9747 - i32.add - local.set $l9748 - local.get $l9747 - local.get $l9748 - i32.add - local.set $l9749 - local.get $l9748 - local.get $l9749 - i32.add - local.set $l9750 - local.get $l9749 - local.get $l9750 - i32.add - local.set $l9751 - local.get $l9750 - local.get $l9751 - i32.add - local.set $l9752 - local.get $l9751 - local.get $l9752 - i32.add - local.set $l9753 - local.get $l9752 - local.get $l9753 - i32.add - local.set $l9754 - local.get $l9753 - local.get $l9754 - i32.add - local.set $l9755 - local.get $l9754 - local.get $l9755 - i32.add - local.set $l9756 - local.get $l9755 - local.get $l9756 - i32.add - local.set $l9757 - local.get $l9756 - local.get $l9757 - i32.add - local.set $l9758 - local.get $l9757 - local.get $l9758 - i32.add - local.set $l9759 - local.get $l9758 - local.get $l9759 - i32.add - local.set $l9760 - local.get $l9759 - local.get $l9760 - i32.add - local.set $l9761 - local.get $l9760 - local.get $l9761 - i32.add - local.set $l9762 - local.get $l9761 - local.get $l9762 - i32.add - local.set $l9763 - local.get $l9762 - local.get $l9763 - i32.add - local.set $l9764 - local.get $l9763 - local.get $l9764 - i32.add - local.set $l9765 - local.get $l9764 - local.get $l9765 - i32.add - local.set $l9766 - local.get $l9765 - local.get $l9766 - i32.add - local.set $l9767 - local.get $l9766 - local.get $l9767 - i32.add - local.set $l9768 - local.get $l9767 - local.get $l9768 - i32.add - local.set $l9769 - local.get $l9768 - local.get $l9769 - i32.add - local.set $l9770 - local.get $l9769 - local.get $l9770 - i32.add - local.set $l9771 - local.get $l9770 - local.get $l9771 - i32.add - local.set $l9772 - local.get $l9771 - local.get $l9772 - i32.add - local.set $l9773 - local.get $l9772 - local.get $l9773 - i32.add - local.set $l9774 - local.get $l9773 - local.get $l9774 - i32.add - local.set $l9775 - local.get $l9774 - local.get $l9775 - i32.add - local.set $l9776 - local.get $l9775 - local.get $l9776 - i32.add - local.set $l9777 - local.get $l9776 - local.get $l9777 - i32.add - local.set $l9778 - local.get $l9777 - local.get $l9778 - i32.add - local.set $l9779 - local.get $l9778 - local.get $l9779 - i32.add - local.set $l9780 - local.get $l9779 - local.get $l9780 - i32.add - local.set $l9781 - local.get $l9780 - local.get $l9781 - i32.add - local.set $l9782 - local.get $l9781 - local.get $l9782 - i32.add - local.set $l9783 - local.get $l9782 - local.get $l9783 - i32.add - local.set $l9784 - local.get $l9783 - local.get $l9784 - i32.add - local.set $l9785 - local.get $l9784 - local.get $l9785 - i32.add - local.set $l9786 - local.get $l9785 - local.get $l9786 - i32.add - local.set $l9787 - local.get $l9786 - local.get $l9787 - i32.add - local.set $l9788 - local.get $l9787 - local.get $l9788 - i32.add - local.set $l9789 - local.get $l9788 - local.get $l9789 - i32.add - local.set $l9790 - local.get $l9789 - local.get $l9790 - i32.add - local.set $l9791 - local.get $l9790 - local.get $l9791 - i32.add - local.set $l9792 - local.get $l9791 - local.get $l9792 - i32.add - local.set $l9793 - local.get $l9792 - local.get $l9793 - i32.add - local.set $l9794 - local.get $l9793 - local.get $l9794 - i32.add - local.set $l9795 - local.get $l9794 - local.get $l9795 - i32.add - local.set $l9796 - local.get $l9795 - local.get $l9796 - i32.add - local.set $l9797 - local.get $l9796 - local.get $l9797 - i32.add - local.set $l9798 - local.get $l9797 - local.get $l9798 - i32.add - local.set $l9799 - local.get $l9798 - local.get $l9799 - i32.add - local.set $l9800 - local.get $l9799 - local.get $l9800 - i32.add - local.set $l9801 - local.get $l9800 - local.get $l9801 - i32.add - local.set $l9802 - local.get $l9801 - local.get $l9802 - i32.add - local.set $l9803 - local.get $l9802 - local.get $l9803 - i32.add - local.set $l9804 - local.get $l9803 - local.get $l9804 - i32.add - local.set $l9805 - local.get $l9804 - local.get $l9805 - i32.add - local.set $l9806 - local.get $l9805 - local.get $l9806 - i32.add - local.set $l9807 - local.get $l9806 - local.get $l9807 - i32.add - local.set $l9808 - local.get $l9807 - local.get $l9808 - i32.add - local.set $l9809 - local.get $l9808 - local.get $l9809 - i32.add - local.set $l9810 - local.get $l9809 - local.get $l9810 - i32.add - local.set $l9811 - local.get $l9810 - local.get $l9811 - i32.add - local.set $l9812 - local.get $l9811 - local.get $l9812 - i32.add - local.set $l9813 - local.get $l9812 - local.get $l9813 - i32.add - local.set $l9814 - local.get $l9813 - local.get $l9814 - i32.add - local.set $l9815 - local.get $l9814 - local.get $l9815 - i32.add - local.set $l9816 - local.get $l9815 - local.get $l9816 - i32.add - local.set $l9817 - local.get $l9816 - local.get $l9817 - i32.add - local.set $l9818 - local.get $l9817 - local.get $l9818 - i32.add - local.set $l9819 - local.get $l9818 - local.get $l9819 - i32.add - local.set $l9820 - local.get $l9819 - local.get $l9820 - i32.add - local.set $l9821 - local.get $l9820 - local.get $l9821 - i32.add - local.set $l9822 - local.get $l9821 - local.get $l9822 - i32.add - local.set $l9823 - local.get $l9822 - local.get $l9823 - i32.add - local.set $l9824 - local.get $l9823 - local.get $l9824 - i32.add - local.set $l9825 - local.get $l9824 - local.get $l9825 - i32.add - local.set $l9826 - local.get $l9825 - local.get $l9826 - i32.add - local.set $l9827 - local.get $l9826 - local.get $l9827 - i32.add - local.set $l9828 - local.get $l9827 - local.get $l9828 - i32.add - local.set $l9829 - local.get $l9828 - local.get $l9829 - i32.add - local.set $l9830 - local.get $l9829 - local.get $l9830 - i32.add - local.set $l9831 - local.get $l9830 - local.get $l9831 - i32.add - local.set $l9832 - local.get $l9831 - local.get $l9832 - i32.add - local.set $l9833 - local.get $l9832 - local.get $l9833 - i32.add - local.set $l9834 - local.get $l9833 - local.get $l9834 - i32.add - local.set $l9835 - local.get $l9834 - local.get $l9835 - i32.add - local.set $l9836 - local.get $l9835 - local.get $l9836 - i32.add - local.set $l9837 - local.get $l9836 - local.get $l9837 - i32.add - local.set $l9838 - local.get $l9837 - local.get $l9838 - i32.add - local.set $l9839 - local.get $l9838 - local.get $l9839 - i32.add - local.set $l9840 - local.get $l9839 - local.get $l9840 - i32.add - local.set $l9841 - local.get $l9840 - local.get $l9841 - i32.add - local.set $l9842 - local.get $l9841 - local.get $l9842 - i32.add - local.set $l9843 - local.get $l9842 - local.get $l9843 - i32.add - local.set $l9844 - local.get $l9843 - local.get $l9844 - i32.add - local.set $l9845 - local.get $l9844 - local.get $l9845 - i32.add - local.set $l9846 - local.get $l9845 - local.get $l9846 - i32.add - local.set $l9847 - local.get $l9846 - local.get $l9847 - i32.add - local.set $l9848 - local.get $l9847 - local.get $l9848 - i32.add - local.set $l9849 - local.get $l9848 - local.get $l9849 - i32.add - local.set $l9850 - local.get $l9849 - local.get $l9850 - i32.add - local.set $l9851 - local.get $l9850 - local.get $l9851 - i32.add - local.set $l9852 - local.get $l9851 - local.get $l9852 - i32.add - local.set $l9853 - local.get $l9852 - local.get $l9853 - i32.add - local.set $l9854 - local.get $l9853 - local.get $l9854 - i32.add - local.set $l9855 - local.get $l9854 - local.get $l9855 - i32.add - local.set $l9856 - local.get $l9855 - local.get $l9856 - i32.add - local.set $l9857 - local.get $l9856 - local.get $l9857 - i32.add - local.set $l9858 - local.get $l9857 - local.get $l9858 - i32.add - local.set $l9859 - local.get $l9858 - local.get $l9859 - i32.add - local.set $l9860 - local.get $l9859 - local.get $l9860 - i32.add - local.set $l9861 - local.get $l9860 - local.get $l9861 - i32.add - local.set $l9862 - local.get $l9861 - local.get $l9862 - i32.add - local.set $l9863 - local.get $l9862 - local.get $l9863 - i32.add - local.set $l9864 - local.get $l9863 - local.get $l9864 - i32.add - local.set $l9865 - local.get $l9864 - local.get $l9865 - i32.add - local.set $l9866 - local.get $l9865 - local.get $l9866 - i32.add - local.set $l9867 - local.get $l9866 - local.get $l9867 - i32.add - local.set $l9868 - local.get $l9867 - local.get $l9868 - i32.add - local.set $l9869 - local.get $l9868 - local.get $l9869 - i32.add - local.set $l9870 - local.get $l9869 - local.get $l9870 - i32.add - local.set $l9871 - local.get $l9870 - local.get $l9871 - i32.add - local.set $l9872 - local.get $l9871 - local.get $l9872 - i32.add - local.set $l9873 - local.get $l9872 - local.get $l9873 - i32.add - local.set $l9874 - local.get $l9873 - local.get $l9874 - i32.add - local.set $l9875 - local.get $l9874 - local.get $l9875 - i32.add - local.set $l9876 - local.get $l9875 - local.get $l9876 - i32.add - local.set $l9877 - local.get $l9876 - local.get $l9877 - i32.add - local.set $l9878 - local.get $l9877 - local.get $l9878 - i32.add - local.set $l9879 - local.get $l9878 - local.get $l9879 - i32.add - local.set $l9880 - local.get $l9879 - local.get $l9880 - i32.add - local.set $l9881 - local.get $l9880 - local.get $l9881 - i32.add - local.set $l9882 - local.get $l9881 - local.get $l9882 - i32.add - local.set $l9883 - local.get $l9882 - local.get $l9883 - i32.add - local.set $l9884 - local.get $l9883 - local.get $l9884 - i32.add - local.set $l9885 - local.get $l9884 - local.get $l9885 - i32.add - local.set $l9886 - local.get $l9885 - local.get $l9886 - i32.add - local.set $l9887 - local.get $l9886 - local.get $l9887 - i32.add - local.set $l9888 - local.get $l9887 - local.get $l9888 - i32.add - local.set $l9889 - local.get $l9888 - local.get $l9889 - i32.add - local.set $l9890 - local.get $l9889 - local.get $l9890 - i32.add - local.set $l9891 - local.get $l9890 - local.get $l9891 - i32.add - local.set $l9892 - local.get $l9891 - local.get $l9892 - i32.add - local.set $l9893 - local.get $l9892 - local.get $l9893 - i32.add - local.set $l9894 - local.get $l9893 - local.get $l9894 - i32.add - local.set $l9895 - local.get $l9894 - local.get $l9895 - i32.add - local.set $l9896 - local.get $l9895 - local.get $l9896 - i32.add - local.set $l9897 - local.get $l9896 - local.get $l9897 - i32.add - local.set $l9898 - local.get $l9897 - local.get $l9898 - i32.add - local.set $l9899 - local.get $l9898 - local.get $l9899 - i32.add - local.set $l9900 - local.get $l9899 - local.get $l9900 - i32.add - local.set $l9901 - local.get $l9900 - local.get $l9901 - i32.add - local.set $l9902 - local.get $l9901 - local.get $l9902 - i32.add - local.set $l9903 - local.get $l9902 - local.get $l9903 - i32.add - local.set $l9904 - local.get $l9903 - local.get $l9904 - i32.add - local.set $l9905 - local.get $l9904 - local.get $l9905 - i32.add - local.set $l9906 - local.get $l9905 - local.get $l9906 - i32.add - local.set $l9907 - local.get $l9906 - local.get $l9907 - i32.add - local.set $l9908 - local.get $l9907 - local.get $l9908 - i32.add - local.set $l9909 - local.get $l9908 - local.get $l9909 - i32.add - local.set $l9910 - local.get $l9909 - local.get $l9910 - i32.add - local.set $l9911 - local.get $l9910 - local.get $l9911 - i32.add - local.set $l9912 - local.get $l9911 - local.get $l9912 - i32.add - local.set $l9913 - local.get $l9912 - local.get $l9913 - i32.add - local.set $l9914 - local.get $l9913 - local.get $l9914 - i32.add - local.set $l9915 - local.get $l9914 - local.get $l9915 - i32.add - local.set $l9916 - local.get $l9915 - local.get $l9916 - i32.add - local.set $l9917 - local.get $l9916 - local.get $l9917 - i32.add - local.set $l9918 - local.get $l9917 - local.get $l9918 - i32.add - local.set $l9919 - local.get $l9918 - local.get $l9919 - i32.add - local.set $l9920 - local.get $l9919 - local.get $l9920 - i32.add - local.set $l9921 - local.get $l9920 - local.get $l9921 - i32.add - local.set $l9922 - local.get $l9921 - local.get $l9922 - i32.add - local.set $l9923 - local.get $l9922 - local.get $l9923 - i32.add - local.set $l9924 - local.get $l9923 - local.get $l9924 - i32.add - local.set $l9925 - local.get $l9924 - local.get $l9925 - i32.add - local.set $l9926 - local.get $l9925 - local.get $l9926 - i32.add - local.set $l9927 - local.get $l9926 - local.get $l9927 - i32.add - local.set $l9928 - local.get $l9927 - local.get $l9928 - i32.add - local.set $l9929 - local.get $l9928 - local.get $l9929 - i32.add - local.set $l9930 - local.get $l9929 - local.get $l9930 - i32.add - local.set $l9931 - local.get $l9930 - local.get $l9931 - i32.add - local.set $l9932 - local.get $l9931 - local.get $l9932 - i32.add - local.set $l9933 - local.get $l9932 - local.get $l9933 - i32.add - local.set $l9934 - local.get $l9933 - local.get $l9934 - i32.add - local.set $l9935 - local.get $l9934 - local.get $l9935 - i32.add - local.set $l9936 - local.get $l9935 - local.get $l9936 - i32.add - local.set $l9937 - local.get $l9936 - local.get $l9937 - i32.add - local.set $l9938 - local.get $l9937 - local.get $l9938 - i32.add - local.set $l9939 - local.get $l9938 - local.get $l9939 - i32.add - local.set $l9940 - local.get $l9939 - local.get $l9940 - i32.add - local.set $l9941 - local.get $l9940 - local.get $l9941 - i32.add - local.set $l9942 - local.get $l9941 - local.get $l9942 - i32.add - local.set $l9943 - local.get $l9942 - local.get $l9943 - i32.add - local.set $l9944 - local.get $l9943 - local.get $l9944 - i32.add - local.set $l9945 - local.get $l9944 - local.get $l9945 - i32.add - local.set $l9946 - local.get $l9945 - local.get $l9946 - i32.add - local.set $l9947 - local.get $l9946 - local.get $l9947 - i32.add - local.set $l9948 - local.get $l9947 - local.get $l9948 - i32.add - local.set $l9949 - local.get $l9948 - local.get $l9949 - i32.add - local.set $l9950 - local.get $l9949 - local.get $l9950 - i32.add - local.set $l9951 - local.get $l9950 - local.get $l9951 - i32.add - local.set $l9952 - local.get $l9951 - local.get $l9952 - i32.add - local.set $l9953 - local.get $l9952 - local.get $l9953 - i32.add - local.set $l9954 - local.get $l9953 - local.get $l9954 - i32.add - local.set $l9955 - local.get $l9954 - local.get $l9955 - i32.add - local.set $l9956 - local.get $l9955 - local.get $l9956 - i32.add - local.set $l9957 - local.get $l9956 - local.get $l9957 - i32.add - local.set $l9958 - local.get $l9957 - local.get $l9958 - i32.add - local.set $l9959 - local.get $l9958 - local.get $l9959 - i32.add - local.set $l9960 - local.get $l9959 - local.get $l9960 - i32.add - local.set $l9961 - local.get $l9960 - local.get $l9961 - i32.add - local.set $l9962 - local.get $l9961 - local.get $l9962 - i32.add - local.set $l9963 - local.get $l9962 - local.get $l9963 - i32.add - local.set $l9964 - local.get $l9963 - local.get $l9964 - i32.add - local.set $l9965 - local.get $l9964 - local.get $l9965 - i32.add - local.set $l9966 - local.get $l9965 - local.get $l9966 - i32.add - local.set $l9967 - local.get $l9966 - local.get $l9967 - i32.add - local.set $l9968 - local.get $l9967 - local.get $l9968 - i32.add - local.set $l9969 - local.get $l9968 - local.get $l9969 - i32.add - local.set $l9970 - local.get $l9969 - local.get $l9970 - i32.add - local.set $l9971 - local.get $l9970 - local.get $l9971 - i32.add - local.set $l9972 - local.get $l9971 - local.get $l9972 - i32.add - local.set $l9973 - local.get $l9972 - local.get $l9973 - i32.add - local.set $l9974 - local.get $l9973 - local.get $l9974 - i32.add - local.set $l9975 - local.get $l9974 - local.get $l9975 - i32.add - local.set $l9976 - local.get $l9975 - local.get $l9976 - i32.add - local.set $l9977 - local.get $l9976 - local.get $l9977 - i32.add - local.set $l9978 - local.get $l9977 - local.get $l9978 - i32.add - local.set $l9979 - local.get $l9978 - local.get $l9979 - i32.add - local.set $l9980 - local.get $l9979 - local.get $l9980 - i32.add - local.set $l9981 - local.get $l9980 - local.get $l9981 - i32.add - local.set $l9982 - local.get $l9981 - local.get $l9982 - i32.add - local.set $l9983 - local.get $l9982 - local.get $l9983 - i32.add - local.set $l9984 - local.get $l9983 - local.get $l9984 - i32.add - local.set $l9985 - local.get $l9984 - local.get $l9985 - i32.add - local.set $l9986 - local.get $l9985 - local.get $l9986 - i32.add - local.set $l9987 - local.get $l9986 - local.get $l9987 - i32.add - local.set $l9988 - local.get $l9987 - local.get $l9988 - i32.add - local.set $l9989 - local.get $l9988 - local.get $l9989 - i32.add - local.set $l9990 - local.get $l9989 - local.get $l9990 - i32.add - local.set $l9991 - local.get $l9990 - local.get $l9991 - i32.add - local.set $l9992 - local.get $l9991 - local.get $l9992 - i32.add - local.set $l9993 - local.get $l9992 - local.get $l9993 - i32.add - local.set $l9994 - local.get $l9993 - local.get $l9994 - i32.add - local.set $l9995 - local.get $l9994 - local.get $l9995 - i32.add - local.set $l9996 - local.get $l9995 - local.get $l9996 - i32.add - local.set $l9997 - local.get $l9996 - local.get $l9997 - i32.add - local.set $l9998 - local.get $l9997 - local.get $l9998 - i32.add - local.set $l9999 - ;; Return the last local variable - local.get $l9999 - ) -) diff --git a/src/test/app/wasm_fixtures/wat/locals_10k.zip b/src/test/app/wasm_fixtures/wat/locals_10k.zip new file mode 100644 index 0000000000..22aad2db51 Binary files /dev/null and b/src/test/app/wasm_fixtures/wat/locals_10k.zip differ diff --git a/src/test/basics/Buffer_test.cpp b/src/test/basics/Buffer_test.cpp index f5f626133f..95a8853975 100644 --- a/src/test/basics/Buffer_test.cpp +++ b/src/test/basics/Buffer_test.cpp @@ -9,8 +9,8 @@ namespace test { struct Buffer_test : beast::unit_test::suite { - bool - sane(Buffer const& b) const + static bool + sane(Buffer const& b) { if (b.empty()) return b.data() == nullptr; @@ -26,7 +26,7 @@ struct Buffer_test : beast::unit_test::suite 0xac, 0x2d, 0x89, 0x4d, 0x19, 0x9c, 0xf0, 0x2c, 0x15, 0xd1, 0xf9, 0x9b, 0x66, 0xd2, 0x30, 0xd3}; - Buffer b0; + Buffer const b0; BEAST_EXPECT(sane(b0)); BEAST_EXPECT(b0.empty()); @@ -105,7 +105,7 @@ struct Buffer_test : beast::unit_test::suite { // Move-construct from empty buf Buffer x; - Buffer y{std::move(x)}; + Buffer const y{std::move(x)}; BEAST_EXPECT(sane(x)); // NOLINT(bugprone-use-after-move) BEAST_EXPECT(x.empty()); // NOLINT(bugprone-use-after-move) BEAST_EXPECT(sane(y)); @@ -115,7 +115,7 @@ struct Buffer_test : beast::unit_test::suite { // Move-construct from non-empty buf Buffer x{b1}; - Buffer y{std::move(x)}; + Buffer const y{std::move(x)}; BEAST_EXPECT(sane(x)); // NOLINT(bugprone-use-after-move) BEAST_EXPECT(x.empty()); // NOLINT(bugprone-use-after-move) BEAST_EXPECT(sane(y)); diff --git a/src/test/basics/Expected_test.cpp b/src/test/basics/Expected_test.cpp index 2caa15816f..fa35946624 100644 --- a/src/test/basics/Expected_test.cpp +++ b/src/test/basics/Expected_test.cpp @@ -46,7 +46,7 @@ struct Expected_test : beast::unit_test::suite BEAST_EXPECT(expected.value() == "Valid value"); BEAST_EXPECT(*expected == "Valid value"); BEAST_EXPECT(expected->at(0) == 'V'); - std::string mv = std::move(*expected); + std::string const mv = std::move(*expected); BEAST_EXPECT(mv == "Valid value"); bool throwOccurred = false; diff --git a/src/test/basics/FileUtilities_test.cpp b/src/test/basics/FileUtilities_test.cpp index 3d6f9b754b..b63f8baf0a 100644 --- a/src/test/basics/FileUtilities_test.cpp +++ b/src/test/basics/FileUtilities_test.cpp @@ -17,7 +17,7 @@ public: constexpr char const* expectedContents = "This file is very short. That's all we need."; - FileDirGuard file( + FileDirGuard const file( *this, "test_file", "test.txt", "This is temporary text that should get overwritten"); error_code ec; diff --git a/src/test/basics/IOUAmount_test.cpp b/src/test/basics/IOUAmount_test.cpp index 73ab0343cd..d0e272c28b 100644 --- a/src/test/basics/IOUAmount_test.cpp +++ b/src/test/basics/IOUAmount_test.cpp @@ -55,7 +55,7 @@ public: using beast::zero; { - IOUAmount z(zero); + IOUAmount const z(zero); BEAST_EXPECT(z == zero); BEAST_EXPECT(z >= zero); BEAST_EXPECT(z <= zero); @@ -94,9 +94,11 @@ public: BEAST_EXPECT(z >= z); BEAST_EXPECT(z <= z); BEAST_EXPECT(z == -z); + // NOLINTBEGIN(misc-redundant-expression) unexpected(z > z); unexpected(z < z); unexpected(z != z); + // NOLINTEND(misc-redundant-expression) unexpected(z != -z); BEAST_EXPECT(n < z); @@ -150,7 +152,7 @@ public: for (auto const mantissaSize : {MantissaRange::small, MantissaRange::large}) { - NumberMantissaScaleGuard mg(mantissaSize); + NumberMantissaScaleGuard const mg(mantissaSize); test(IOUAmount(-2, 0), "-2"); test(IOUAmount(0, 0), "0"); @@ -181,14 +183,14 @@ public: { // multiply by a number that would overflow the mantissa, then // divide by the same number, and check we didn't lose any value - IOUAmount bigMan(maxMantissa, 0); + IOUAmount const bigMan(maxMantissa, 0); BEAST_EXPECT(bigMan == mulRatio(bigMan, maxUInt, maxUInt, true)); // rounding mode shouldn't matter as the result is exact BEAST_EXPECT(bigMan == mulRatio(bigMan, maxUInt, maxUInt, false)); } { // Similar test as above, but for negative values - IOUAmount bigMan(-maxMantissa, 0); + IOUAmount const bigMan(-maxMantissa, 0); BEAST_EXPECT(bigMan == mulRatio(bigMan, maxUInt, maxUInt, true)); // rounding mode shouldn't matter as the result is exact BEAST_EXPECT(bigMan == mulRatio(bigMan, maxUInt, maxUInt, false)); @@ -196,7 +198,7 @@ public: { // small amounts - IOUAmount tiny(minMantissa, minExponent); + IOUAmount const tiny(minMantissa, minExponent); // Round up should give the smallest allowable number BEAST_EXPECT(tiny == mulRatio(tiny, 1, maxUInt, true)); BEAST_EXPECT(tiny == mulRatio(tiny, maxUInt - 1, maxUInt, true)); @@ -205,7 +207,7 @@ public: BEAST_EXPECT(beast::zero == mulRatio(tiny, maxUInt - 1, maxUInt, false)); // tiny negative numbers - IOUAmount tinyNeg(-minMantissa, minExponent); + IOUAmount const tinyNeg(-minMantissa, minExponent); // Round up should give zero BEAST_EXPECT(beast::zero == mulRatio(tinyNeg, 1, maxUInt, true)); BEAST_EXPECT(beast::zero == mulRatio(tinyNeg, maxUInt - 1, maxUInt, true)); @@ -216,20 +218,20 @@ public: { // rounding { - IOUAmount one(1, 0); + IOUAmount const one(1, 0); auto const rup = mulRatio(one, maxUInt - 1, maxUInt, true); auto const rdown = mulRatio(one, maxUInt - 1, maxUInt, false); BEAST_EXPECT(rup.mantissa() - rdown.mantissa() == 1); } { - IOUAmount big(maxMantissa, maxExponent); + IOUAmount const big(maxMantissa, maxExponent); auto const rup = mulRatio(big, maxUInt - 1, maxUInt, true); auto const rdown = mulRatio(big, maxUInt - 1, maxUInt, false); BEAST_EXPECT(rup.mantissa() - rdown.mantissa() == 1); } { - IOUAmount negOne(-1, 0); + IOUAmount const negOne(-1, 0); auto const rup = mulRatio(negOne, maxUInt - 1, maxUInt, true); auto const rdown = mulRatio(negOne, maxUInt - 1, maxUInt, false); BEAST_EXPECT(rup.mantissa() - rdown.mantissa() == 1); diff --git a/src/test/basics/IntrusiveShared_test.cpp b/src/test/basics/IntrusiveShared_test.cpp index 5a460a6044..52cb8f5c1c 100644 --- a/src/test/basics/IntrusiveShared_test.cpp +++ b/src/test/basics/IntrusiveShared_test.cpp @@ -191,16 +191,16 @@ public: testcase("Basics"); { - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; - TIBase b; + TIBase const b; BEAST_EXPECT(b.use_count() == 1); b.addWeakRef(); BEAST_EXPECT(b.use_count() == 1); auto s = b.releaseStrongRef(); BEAST_EXPECT(s == ReleaseStrongRefAction::partialDestroy); BEAST_EXPECT(b.use_count() == 0); - TIBase* pb = &b; + TIBase const* pb = &b; partialDestructorFinished(&pb); BEAST_EXPECT(!pb); auto w = b.releaseWeakRef(); @@ -210,7 +210,7 @@ public: std::vector> strong; std::vector> weak; { - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; using enum TrackedState; auto b = make_SharedIntrusive(); @@ -251,7 +251,7 @@ public: BEAST_EXPECT(TIBase::getState(id) == deleted); } { - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; using enum TrackedState; auto b = make_SharedIntrusive(); @@ -275,7 +275,7 @@ public: BEAST_EXPECT(TIBase::getState(id) == deleted); } { - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; using enum TrackedState; using swu = SharedWeakUnion; @@ -309,7 +309,7 @@ public: { // Testing SharedWeakUnion assignment operator - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; auto strong1 = make_SharedIntrusive(); auto strong2 = make_SharedIntrusive(); @@ -338,7 +338,7 @@ public: // 2) Test self-assignment BEAST_EXPECT(union1.isStrong()); BEAST_EXPECT(TIBase::getState(id1) == TrackedState::alive); - int initialRefCount = strong1->use_count(); + int const initialRefCount = strong1->use_count(); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wself-assign-overloaded" union1 = union1; // Self-assignment @@ -374,7 +374,7 @@ public: using enum TrackedState; - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; auto strong = make_SharedIntrusive(); WeakIntrusive weak{strong}; @@ -441,7 +441,7 @@ public: using enum TrackedState; - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; auto strong = make_SharedIntrusive(); WeakIntrusive weak{strong}; @@ -486,12 +486,12 @@ public: // and check that the invariants hold. using enum TrackedState; - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; std::atomic destructionState{0}; // returns destructorRan and partialDestructorRan (in that order) auto getDestructorState = [&]() -> std::pair { - int s = destructionState.load(std::memory_order_relaxed); + int const s = destructionState.load(std::memory_order_relaxed); return {(s & 1) != 0, (s & 2) != 0}; }; auto setDestructorRan = [&]() -> void { @@ -592,6 +592,7 @@ public: } }; std::vector threads; + threads.reserve(numThreads); for (int i = 0; i < numThreads; ++i) { threads.emplace_back(cloneAndDestroy, i); @@ -619,12 +620,12 @@ public: using enum TrackedState; - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; std::atomic destructionState{0}; // returns destructorRan and partialDestructorRan (in that order) auto getDestructorState = [&]() -> std::pair { - int s = destructionState.load(std::memory_order_relaxed); + int const s = destructionState.load(std::memory_order_relaxed); return {(s & 1) != 0, (s & 2) != 0}; }; auto setDestructorRan = [&]() -> void { @@ -737,6 +738,7 @@ public: } }; std::vector threads; + threads.reserve(numThreads); for (int i = 0; i < numThreads; ++i) { threads.emplace_back(cloneAndDestroy, i); @@ -759,12 +761,12 @@ public: using enum TrackedState; - TIBase::ResetStatesGuard rsg{true}; + TIBase::ResetStatesGuard const rsg{true}; std::atomic destructionState{0}; // returns destructorRan and partialDestructorRan (in that order) auto getDestructorState = [&]() -> std::pair { - int s = destructionState.load(std::memory_order_relaxed); + int const s = destructionState.load(std::memory_order_relaxed); return {(s & 1) != 0, (s & 2) != 0}; }; auto setDestructorRan = [&]() -> void { @@ -830,7 +832,7 @@ public: // Multiple threads all create a weak pointer from the same // strong pointer - WeakIntrusive weak{toLock[threadId]}; + WeakIntrusive const weak{toLock[threadId]}; for (int wi = 0; wi < lockWeakLoopIters; ++wi) { BEAST_EXPECT(!weak.expired()); @@ -845,6 +847,7 @@ public: } }; std::vector threads; + threads.reserve(numThreads); for (int i = 0; i < numThreads; ++i) { threads.emplace_back(lockAndDestroy, i); diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 02a1e49232..71b4b388db 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -37,7 +37,8 @@ public: auto const minMantissa = Number::minMantissa(); try { - Number x = Number{false, minMantissa * 10, 32768, Number::normalized{}}; + [[maybe_unused]] Number const x = + Number{false, minMantissa * 10, 32768, Number::normalized{}}; } catch (std::overflow_error const&) { @@ -86,7 +87,7 @@ public: try { [[maybe_unused]] - Number q = Number{false, minMantissa, 32767, Number::normalized{}} * 100; + Number const q = Number{false, minMantissa, 32767, Number::normalized{}} * 100; } catch (std::overflow_error const&) { @@ -279,7 +280,7 @@ public: {Number{Number::maxRep}, Number{6, -1}, Number{Number::maxRep - 1}}, {Number{false, Number::maxRep + 1, 0, Number::normalized{}}, Number{1, 0}, - Number{Number::maxRep / 10 + 1, 1}}, + Number{(Number::maxRep / 10) + 1, 1}}, {Number{false, Number::maxRep + 1, 0, Number::normalized{}}, Number{3, 0}, Number{Number::maxRep}}, @@ -332,7 +333,7 @@ public: }; auto const maxMantissa = Number::maxMantissa(); - saveNumberRoundMode save{Number::setround(Number::to_nearest)}; + saveNumberRoundMode const save{Number::setround(Number::to_nearest)}; { auto const cSmall = std::to_array({ {Number{7}, Number{8}, Number{56}}, @@ -456,7 +457,7 @@ public: // 99'999'999'999'999'999'800'000'000'000'000'000'100 {Number{false, maxMantissa, 0, Number::normalized{}}, Number{false, maxMantissa, 0, Number::normalized{}}, - Number{false, maxMantissa / 10 - 1, 20, Number::normalized{}}}, + Number{false, (maxMantissa / 10) - 1, 20, Number::normalized{}}}, // Maximum int64 range // 85'070'591'730'234'615'847'396'907'784'232'501'249 {Number{Number::maxRep, 0}, @@ -523,7 +524,7 @@ public: // 99'999'999'999'999'999'800'000'000'000'000'000'100 {Number{false, maxMantissa, 0, Number::normalized{}}, Number{false, maxMantissa, 0, Number::normalized{}}, - Number{false, maxMantissa / 10 - 1, 20, Number::normalized{}}}, + Number{false, (maxMantissa / 10) - 1, 20, Number::normalized{}}}, // Maximum int64 range // 85'070'591'730'234'615'847'396'907'784'232'501'249 {Number{Number::maxRep, 0}, @@ -642,7 +643,7 @@ public: test(cLarge); } }; - saveNumberRoundMode save{Number::setround(Number::to_nearest)}; + saveNumberRoundMode const save{Number::setround(Number::to_nearest)}; { auto const cSmall = std::to_array( {{Number{1}, Number{2}, Number{5, -1}}, @@ -857,7 +858,7 @@ public: test(cSmall); if (Number::getMantissaScale() != MantissaRange::small) { - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); test(cLarge); } bool caught = false; @@ -928,7 +929,7 @@ public: { testcase << "test_power1 " << to_string(Number::getMantissaScale()); using Case = std::tuple; - Case c[]{ + Case const c[]{ {Number{64}, 0, Number{1}}, {Number{64}, 1, Number{64}}, {Number{64}, 2, Number{4096}}, @@ -946,7 +947,7 @@ public: { testcase << "test_power2 " << to_string(Number::getMantissaScale()); using Case = std::tuple; - Case c[]{ + Case const c[]{ {Number{1}, 3, 7, Number{1}}, {Number{-1}, 1, 0, Number{1}}, {Number{-1, -1}, 1, 0, Number{0}}, @@ -992,24 +993,24 @@ public: { testcase << "testConversions " << to_string(Number::getMantissaScale()); - IOUAmount x{5, 6}; - Number y = x; + IOUAmount const x{5, 6}; + Number const y = x; BEAST_EXPECT((y == Number{5, 6})); - IOUAmount z{y}; + IOUAmount const z{y}; BEAST_EXPECT(x == z); - XRPAmount xrp{500}; - STAmount st = xrp; - Number n = st; + XRPAmount const xrp{500}; + STAmount const st = xrp; + Number const n = st; BEAST_EXPECT(XRPAmount{n} == xrp); - IOUAmount x0{0, 0}; - Number y0 = x0; + IOUAmount const x0{0, 0}; + Number const y0 = x0; BEAST_EXPECT((y0 == Number{0})); - IOUAmount z0{y0}; + IOUAmount const z0{y0}; BEAST_EXPECT(x0 == z0); - XRPAmount xrp0{0}; - Number n0 = xrp0; + XRPAmount const xrp0{0}; + Number const n0 = xrp0; BEAST_EXPECT(n0 == Number{0}); - XRPAmount xrp1{n0}; + XRPAmount const xrp1{n0}; BEAST_EXPECT(xrp1 == xrp0); } @@ -1018,9 +1019,9 @@ public: { testcase << "test_to_integer " << to_string(Number::getMantissaScale()); using Case = std::tuple; - saveNumberRoundMode save{Number::setround(Number::to_nearest)}; + saveNumberRoundMode const save{Number::setround(Number::to_nearest)}; { - Case c[]{ + Case const c[]{ {Number{0}, 0}, {Number{1}, 1}, {Number{2}, 2}, @@ -1058,7 +1059,7 @@ public: auto prev_mode = Number::setround(Number::towards_zero); BEAST_EXPECT(prev_mode == Number::to_nearest); { - Case c[]{ + Case const c[]{ {Number{0}, 0}, {Number{1}, 1}, {Number{2}, 2}, @@ -1096,7 +1097,7 @@ public: prev_mode = Number::setround(Number::downward); BEAST_EXPECT(prev_mode == Number::towards_zero); { - Case c[]{ + Case const c[]{ {Number{0}, 0}, {Number{1}, 1}, {Number{2}, 2}, @@ -1134,7 +1135,7 @@ public: prev_mode = Number::setround(Number::upward); BEAST_EXPECT(prev_mode == Number::downward); { - Case c[]{ + Case const c[]{ {Number{0}, 0}, {Number{1}, 1}, {Number{2}, 2}, @@ -1185,7 +1186,7 @@ public: test_squelch() { testcase << "test_squelch " << to_string(Number::getMantissaScale()); - Number limit{1, -6}; + Number const limit{1, -6}; BEAST_EXPECT((squelch(Number{2, -6}, limit) == Number{2, -6})); BEAST_EXPECT((squelch(Number{1, -6}, limit) == Number{1, -6})); BEAST_EXPECT((squelch(Number{9, -7}, limit) == Number{0})); @@ -1233,15 +1234,15 @@ public: test(Number::max(), "9999999999999999e32768"); test(Number::lowest(), "-9999999999999999e32768"); { - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); auto const maxMantissa = Number::maxMantissa(); BEAST_EXPECT(maxMantissa == 9'999'999'999'999'999); test( - Number{false, maxMantissa * 1000 + 999, -3, Number::normalized()}, + Number{false, (maxMantissa * 1000) + 999, -3, Number::normalized()}, "9999999999999999"); test( - Number{true, maxMantissa * 1000 + 999, -3, Number::normalized()}, + Number{true, (maxMantissa * 1000) + 999, -3, Number::normalized()}, "-9999999999999999"); test(Number{std::numeric_limits::max(), -3}, "9223372036854775"); @@ -1263,7 +1264,7 @@ public: test(Number::max(), "9223372036854775807e32768"); test(Number::lowest(), "-9223372036854775807e32768"); { - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); auto const maxMantissa = Number::maxMantissa(); BEAST_EXPECT(maxMantissa == 9'999'999'999'999'999'999ULL); @@ -1314,7 +1315,7 @@ public: test_stream() { testcase << "test_stream " << to_string(Number::getMantissaScale()); - Number x{100}; + Number const x{100}; std::ostringstream os; os << x; BEAST_EXPECT(os.str() == to_string(x)); @@ -1325,7 +1326,7 @@ public: { testcase << "test_inc_dec " << to_string(Number::getMantissaScale()); Number x{100}; - Number y = +x; + Number const y = +x; BEAST_EXPECT(x == y); BEAST_EXPECT(x++ == y); BEAST_EXPECT(x == Number{101}); @@ -1336,7 +1337,7 @@ public: void test_toSTAmount() { - NumberSO stNumberSO{true}; + NumberSO const stNumberSO{true}; Issue const issue; Number const n{7'518'783'80596, -5}; saveNumberRoundMode const save{Number::setround(Number::to_nearest)}; @@ -1478,7 +1479,7 @@ public: { for (auto const& [mode, val] : roundings) { - NumberRoundModeGuard g{mode}; + NumberRoundModeGuard const g{mode}; auto const res = static_cast(num); BEAST_EXPECTS( res == val, @@ -1496,7 +1497,7 @@ public: // Control case BEAST_EXPECT(Number::maxMantissa() > 10); - Number ten{10}; + Number const ten{10}; BEAST_EXPECT(ten.exponent() <= 0); if (scale == MantissaRange::small) @@ -1528,7 +1529,7 @@ public: // 85'070'591'730'234'615'847'396'907'784'232'501'249 - 38 digits BEAST_EXPECT((power(maxInt64, 2) == Number{85'070'591'730'234'615'85, 19})); - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); auto const maxMantissa = Number::maxMantissa(); Number const max = Number{false, maxMantissa, 0, Number::normalized{}}; @@ -1537,7 +1538,7 @@ public: // 99'999'999'999'999'999'800'000'000'000'000'000'100 - also 38 // digits BEAST_EXPECT( - (power(max, 2) == Number{false, maxMantissa / 10 - 1, 20, Number::normalized{}})); + (power(max, 2) == Number{false, (maxMantissa / 10) - 1, 20, Number::normalized{}})); } } @@ -1616,7 +1617,7 @@ public: { for (auto const scale : {MantissaRange::small, MantissaRange::large}) { - NumberMantissaScaleGuard sg(scale); + NumberMantissaScaleGuard const sg(scale); testZero(); test_limits(); testToString(); diff --git a/src/test/basics/PerfLog_test.cpp b/src/test/basics/PerfLog_test.cpp index ce0109c53d..470a52d220 100644 --- a/src/test/basics/PerfLog_test.cpp +++ b/src/test/basics/PerfLog_test.cpp @@ -29,7 +29,7 @@ class PerfLog_test : public beast::unit_test::suite // We're only using Env for its Journal. That Journal gives better // coverage in unit tests. test::jtx::Env env_{*this, test::jtx::envconfig(), nullptr, beast::severities::kDisabled}; - beast::Journal j_{env_.app().journal("PerfLog_test")}; + beast::Journal j_{env_.app().getJournal("PerfLog_test")}; struct Fixture { @@ -63,21 +63,21 @@ class PerfLog_test : public beast::unit_test::suite stopSignaled = true; } - path - logDir() const + static path + logDir() { using namespace boost::filesystem; return temp_directory_path() / "perf_log_test_dir"; } - path - logFile() const + static path + logFile() { return logDir() / "perf_log.txt"; } - std::chrono::milliseconds - logInterval() const + static std::chrono::milliseconds + logInterval() { return std::chrono::milliseconds{10}; } @@ -96,8 +96,8 @@ class PerfLog_test : public beast::unit_test::suite // Block until the log file has grown in size, indicating that the // PerfLog has written new values to the file and _should_ have the // latest update. - void - wait() const + static void + wait() { using namespace boost::filesystem; diff --git a/src/test/basics/StringUtilities_test.cpp b/src/test/basics/StringUtilities_test.cpp index 78719e47c6..fb7cdb3d69 100644 --- a/src/test/basics/StringUtilities_test.cpp +++ b/src/test/basics/StringUtilities_test.cpp @@ -279,7 +279,7 @@ public: } { - std::string strUrl("s://" + std::string(8192, ':')); + std::string const strUrl("s://" + std::string(8192, ':')); parsedURL pUrl; BEAST_EXPECT(!parseUrl(pUrl, strUrl)); } diff --git a/src/test/basics/Units_test.cpp b/src/test/basics/Units_test.cpp index 9693c6d181..6bb7f400cc 100644 --- a/src/test/basics/Units_test.cpp +++ b/src/test/basics/Units_test.cpp @@ -14,7 +14,7 @@ private: using FeeLevel32 = FeeLevel; { - XRPAmount x{100}; + XRPAmount const x{100}; BEAST_EXPECT(x.drops() == 100); BEAST_EXPECT((std::is_same_v)); auto y = 4u * x; @@ -25,8 +25,8 @@ private: BEAST_EXPECT(z.value() == 1600); BEAST_EXPECT((std::is_same_v)); - FeeLevel32 f{10}; - FeeLevel32 baseFee{100}; + FeeLevel32 const f{10}; + FeeLevel32 const baseFee{100}; auto drops = mulDiv(baseFee, x, f); @@ -39,15 +39,15 @@ private: BEAST_EXPECT((std::is_same_v, XRPAmount>)); } { - XRPAmount x{100}; + XRPAmount const x{100}; BEAST_EXPECT(x.value() == 100); BEAST_EXPECT((std::is_same_v)); auto y = 4u * x; BEAST_EXPECT(y.value() == 400); BEAST_EXPECT((std::is_same_v)); - FeeLevel64 f{10}; - FeeLevel64 baseFee{100}; + FeeLevel64 const f{10}; + FeeLevel64 const baseFee{100}; auto drops = mulDiv(baseFee, x, f); @@ -59,16 +59,16 @@ private: BEAST_EXPECT((std::is_same_v, XRPAmount>)); } { - FeeLevel64 x{1024}; + FeeLevel64 const x{1024}; BEAST_EXPECT(x.value() == 1024); BEAST_EXPECT((std::is_same_v)); - std::uint64_t m = 4; + std::uint64_t const m = 4; auto y = m * x; BEAST_EXPECT(y.value() == 4096); BEAST_EXPECT((std::is_same_v)); - XRPAmount basefee{10}; - FeeLevel64 referencefee{256}; + XRPAmount const basefee{10}; + FeeLevel64 const referencefee{256}; auto drops = mulDiv(x, basefee, referencefee); @@ -88,56 +88,56 @@ private: using FeeLevel32 = FeeLevel; { - FeeLevel32 x{std::numeric_limits::max()}; + FeeLevel32 const x{std::numeric_limits::max()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::uintValue); BEAST_EXPECT(y == Json::Value{x.fee()}); } { - FeeLevel32 x{std::numeric_limits::min()}; + FeeLevel32 const x{std::numeric_limits::min()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::uintValue); BEAST_EXPECT(y == Json::Value{x.fee()}); } { - FeeLevel64 x{std::numeric_limits::max()}; + FeeLevel64 const x{std::numeric_limits::max()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::uintValue); BEAST_EXPECT(y == Json::Value{std::numeric_limits::max()}); } { - FeeLevel64 x{std::numeric_limits::min()}; + FeeLevel64 const x{std::numeric_limits::min()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::uintValue); BEAST_EXPECT(y == Json::Value{0}); } { - FeeLevelDouble x{std::numeric_limits::max()}; + FeeLevelDouble const x{std::numeric_limits::max()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::realValue); BEAST_EXPECT(y == Json::Value{std::numeric_limits::max()}); } { - FeeLevelDouble x{std::numeric_limits::min()}; + FeeLevelDouble const x{std::numeric_limits::min()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::realValue); BEAST_EXPECT(y == Json::Value{std::numeric_limits::min()}); } { - XRPAmount x{std::numeric_limits::max()}; + XRPAmount const x{std::numeric_limits::max()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::intValue); BEAST_EXPECT(y == Json::Value{std::numeric_limits::max()}); } { - XRPAmount x{std::numeric_limits::min()}; + XRPAmount const x{std::numeric_limits::min()}; auto y = x.jsonClipped(); BEAST_EXPECT(y.type() == Json::intValue); BEAST_EXPECT(y == Json::Value{std::numeric_limits::min()}); @@ -156,7 +156,7 @@ private: auto explicitmake = [&](auto x) -> FeeLevel64 { return FeeLevel64{x}; }; [[maybe_unused]] - FeeLevel64 defaulted; + FeeLevel64 const defaulted{}; FeeLevel64 test{0}; BEAST_EXPECT(test.fee() == 0); @@ -241,7 +241,7 @@ private: auto explicitmake = [&](auto x) -> FeeLevelDouble { return FeeLevelDouble{x}; }; [[maybe_unused]] - FeeLevelDouble defaulted; + FeeLevelDouble const defaulted{}; FeeLevelDouble test{0}; BEAST_EXPECT(test.fee() == 0); diff --git a/src/test/basics/XRPAmount_test.cpp b/src/test/basics/XRPAmount_test.cpp index 58b15b5d2d..ad81050558 100644 --- a/src/test/basics/XRPAmount_test.cpp +++ b/src/test/basics/XRPAmount_test.cpp @@ -127,7 +127,7 @@ public: // since some of them are templated, but not used anywhere else. auto make = [&](auto x) -> XRPAmount { return XRPAmount{x}; }; - XRPAmount defaulted{}; + XRPAmount const defaulted{}; (void)defaulted; XRPAmount test{0}; BEAST_EXPECT(test.drops() == 0); @@ -230,7 +230,8 @@ public: { // Similar test as above, but for negative values - XRPAmount big(minXRP); + XRPAmount big(minXRP); // NOLINT(misc-const-correctness): const breaks overflow check + // at end of this scope BEAST_EXPECT(big == mulRatio(big, maxUInt32, maxUInt32, true)); // rounding mode shouldn't matter as the result is exact BEAST_EXPECT(big == mulRatio(big, maxUInt32, maxUInt32, false)); @@ -244,7 +245,7 @@ public: { // small amounts - XRPAmount tiny(1); + XRPAmount const tiny(1); // Round up should give the smallest allowable number BEAST_EXPECT(tiny == mulRatio(tiny, 1, maxUInt32, true)); // rounding down should be zero @@ -252,7 +253,7 @@ public: BEAST_EXPECT(beast::zero == mulRatio(tiny, maxUInt32 - 1, maxUInt32, false)); // tiny negative numbers - XRPAmount tinyNeg(-1); + XRPAmount const tinyNeg(-1); // Round up should give zero BEAST_EXPECT(beast::zero == mulRatio(tinyNeg, 1, maxUInt32, true)); BEAST_EXPECT(beast::zero == mulRatio(tinyNeg, maxUInt32 - 1, maxUInt32, true)); @@ -262,21 +263,21 @@ public: { // rounding { - XRPAmount one(1); + XRPAmount const one(1); auto const rup = mulRatio(one, maxUInt32 - 1, maxUInt32, true); auto const rdown = mulRatio(one, maxUInt32 - 1, maxUInt32, false); BEAST_EXPECT(rup.drops() - rdown.drops() == 1); } { - XRPAmount big(maxXRP); + XRPAmount const big(maxXRP); auto const rup = mulRatio(big, maxUInt32 - 1, maxUInt32, true); auto const rdown = mulRatio(big, maxUInt32 - 1, maxUInt32, false); BEAST_EXPECT(rup.drops() - rdown.drops() == 1); } { - XRPAmount negOne(-1); + XRPAmount const negOne(-1); auto const rup = mulRatio(negOne, maxUInt32 - 1, maxUInt32, true); auto const rdown = mulRatio(negOne, maxUInt32 - 1, maxUInt32, false); BEAST_EXPECT(rup.drops() - rdown.drops() == 1); @@ -297,7 +298,7 @@ public: { // underflow - XRPAmount bigNegative(minXRP + 10); + XRPAmount const bigNegative(minXRP + 10); BEAST_EXPECT(mulRatio(bigNegative, 2, 1, true) == minXRP); } } // namespace xrpl diff --git a/src/test/basics/base58_test.cpp b/src/test/basics/base58_test.cpp index ca62ac02ef..52d06b324d 100644 --- a/src/test/basics/base58_test.cpp +++ b/src/test/basics/base58_test.cpp @@ -162,7 +162,7 @@ class base58_test : public beast::unit_test::suite for (int i = 0; i < iters; ++i) { std::uint64_t const d = dist(eng); - if (!d) + if (d == 0u) continue; auto bigInt = multiprecision_utils::randomBigInt(); auto const boostBigInt = multiprecision_utils::toBoostMP( diff --git a/src/test/basics/base_uint_test.cpp b/src/test/basics/base_uint_test.cpp index c8f931e2b5..139c635e5f 100644 --- a/src/test/basics/base_uint_test.cpp +++ b/src/test/basics/base_uint_test.cpp @@ -120,7 +120,7 @@ struct base_uint_test : beast::unit_test::suite // used to verify set insertion (hashing required) std::unordered_set> uset; - Blob raw{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + Blob const raw{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; BEAST_EXPECT(test96::bytes == raw.size()); test96 u{raw}; @@ -144,7 +144,7 @@ struct base_uint_test : beast::unit_test::suite // back into another base_uint (w) for comparison with the original nonhash<96> h{}; hash_append(h, u); - test96 w{std::vector(h.data_.begin(), h.data_.end())}; + test96 const w{std::vector(h.data_.begin(), h.data_.end())}; BEAST_EXPECT(w == u); test96 v{~u}; @@ -200,7 +200,7 @@ struct base_uint_test : beast::unit_test::suite zp1++; test96 zm1{z}; zm1--; - test96 x{zm1 ^ zp1}; + test96 const x{zm1 ^ zp1}; uset.insert(x); BEAST_EXPECTS(to_string(x) == "FFFFFFFFFFFFFFFFFFFFFFFE", to_string(x)); BEAST_EXPECTS(to_short_string(x) == "FFFFFFFF...", to_short_string(x)); @@ -285,8 +285,8 @@ struct base_uint_test : beast::unit_test::suite { // Try to prevent constant evaluation. std::vector str(23, '7'); - std::string_view sView(str.data(), str.size()); - [[maybe_unused]] test96 t96(sView); + std::string_view const sView(str.data(), str.size()); + [[maybe_unused]] test96 const t96(sView); } catch (std::invalid_argument const& e) { @@ -303,8 +303,8 @@ struct base_uint_test : beast::unit_test::suite // Try to prevent constant evaluation. std::vector str(23, '7'); str.push_back('G'); - std::string_view sView(str.data(), str.size()); - [[maybe_unused]] test96 t96(sView); + std::string_view const sView(str.data(), str.size()); + [[maybe_unused]] test96 const t96(sView); } catch (std::range_error const& e) { diff --git a/src/test/basics/hardened_hash_test.cpp b/src/test/basics/hardened_hash_test.cpp index 1a6609ac29..3910e5e414 100644 --- a/src/test/basics/hardened_hash_test.cpp +++ b/src/test/basics/hardened_hash_test.cpp @@ -189,13 +189,13 @@ public: check_container() { { - C> c; + C> const c; } pass(); { - C> c; + C> const c; } pass(); diff --git a/src/test/beast/IPEndpoint_test.cpp b/src/test/beast/IPEndpoint_test.cpp index 6276f7cd96..ce01743896 100644 --- a/src/test/beast/IPEndpoint_test.cpp +++ b/src/test/beast/IPEndpoint_test.cpp @@ -51,7 +51,7 @@ public: BEAST_EXPECT(AddressV4{0x01020304}.to_uint() == 0x01020304); { - AddressV4::bytes_type d = {{1, 2, 3, 4}}; + AddressV4::bytes_type const d = {{1, 2, 3, 4}}; BEAST_EXPECT(AddressV4{d}.to_uint() == 0x01020304); unexpected(is_unspecified(AddressV4{d})); @@ -110,7 +110,7 @@ public: { testcase("AddressV4::Bytes"); - AddressV4::bytes_type d1 = {{10, 0, 0, 1}}; + AddressV4::bytes_type const d1 = {{10, 0, 0, 1}}; AddressV4 v4{d1}; BEAST_EXPECT(v4.to_bytes()[0] == 10); BEAST_EXPECT(v4.to_bytes()[1] == 0); @@ -136,8 +136,8 @@ public: testcase("Address"); boost::system::error_code ec; - Address result{boost::asio::ip::make_address("1.2.3.4", ec)}; - AddressV4::bytes_type d = {{1, 2, 3, 4}}; + Address const result{boost::asio::ip::make_address("1.2.3.4", ec)}; + AddressV4::bytes_type const d = {{1, 2, 3, 4}}; BEAST_EXPECT(!ec); BEAST_EXPECT(result.is_v4() && result.to_v4() == AddressV4{d}); } @@ -286,7 +286,7 @@ public: BEAST_EXPECTS(to_string(ep) == "::ffff:166.78.151.147", to_string(ep)); // a private IPv6 - AddressV6::bytes_type d2 = {{253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}; + AddressV6::bytes_type const d2 = {{253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}; ep = Endpoint(AddressV6{d2}); BEAST_EXPECT(!is_unspecified(ep)); BEAST_EXPECT(!is_public(ep)); diff --git a/src/test/beast/LexicalCast_test.cpp b/src/test/beast/LexicalCast_test.cpp index 5cfc73a6f6..aa3ccfe64e 100644 --- a/src/test/beast/LexicalCast_test.cpp +++ b/src/test/beast/LexicalCast_test.cpp @@ -224,7 +224,7 @@ public: while (i <= std::numeric_limits::max()) { - std::int16_t j = static_cast(i); + std::int16_t const j = static_cast(i); auto actual = std::to_string(j); diff --git a/src/test/beast/aged_associative_container_test.cpp b/src/test/beast/aged_associative_container_test.cpp index 690f03cd49..c47b41478b 100644 --- a/src/test/beast/aged_associative_container_test.cpp +++ b/src/test/beast/aged_associative_container_test.cpp @@ -523,7 +523,7 @@ public: testArrayCreate(); template - typename std::enable_if::type + typename std::enable_if::type testArrayCreate() { } @@ -915,7 +915,7 @@ typename std::enable_if::type aged_associative_container_test_base::testConstructInitList() { using Traits = TestTraits; - typename Traits::ManualClock clock; + typename Traits::ManualClock const clock; // testcase (Traits::name() + " init-list"); testcase("init-list"); @@ -931,7 +931,7 @@ typename std::enable_if::type aged_associative_container_test_base::testConstructInitList() { using Traits = TestTraits; - typename Traits::ManualClock clock; + typename Traits::ManualClock const clock; // testcase (Traits::name() + " init-list"); testcase("init-list"); @@ -1033,8 +1033,8 @@ aged_associative_container_test_base::testIterator() using const_iterator = decltype(c.cbegin()); // Should be able to construct or assign an iterator from an iterator. - iterator nnIt_0{c.begin()}; - iterator nnIt_1{nnIt_0}; + iterator const nnIt_0{c.begin()}; + iterator const nnIt_1{nnIt_0}; BEAST_EXPECT(nnIt_0 == nnIt_1); iterator nnIt_2; nnIt_2 = nnIt_1; @@ -1042,8 +1042,8 @@ aged_associative_container_test_base::testIterator() // Should be able to construct or assign a const_iterator from a // const_iterator. - const_iterator ccIt_0{c.cbegin()}; - const_iterator ccIt_1{ccIt_0}; + const_iterator const ccIt_0{c.cbegin()}; + const_iterator const ccIt_1{ccIt_0}; BEAST_EXPECT(ccIt_0 == ccIt_1); const_iterator ccIt_2; ccIt_2 = ccIt_1; @@ -1054,8 +1054,8 @@ aged_associative_container_test_base::testIterator() BEAST_EXPECT(ccIt_1 == nnIt_1); // Should be able to construct a const_iterator from an iterator. - const_iterator ncIt_3{c.begin()}; - const_iterator ncIt_4{nnIt_0}; + const_iterator const ncIt_3{c.begin()}; + const_iterator const ncIt_4{nnIt_0}; BEAST_EXPECT(ncIt_3 == ncIt_4); const_iterator ncIt_5; ncIt_5 = nnIt_2; @@ -1098,8 +1098,8 @@ aged_associative_container_test_base::testReverseIterator() // Should be able to construct or assign a reverse_iterator from a // reverse_iterator. - reverse_iterator rNrNit_0{c.rbegin()}; - reverse_iterator rNrNit_1{rNrNit_0}; + reverse_iterator const rNrNit_0{c.rbegin()}; + reverse_iterator const rNrNit_1{rNrNit_0}; BEAST_EXPECT(rNrNit_0 == rNrNit_1); reverse_iterator xXrNit_2; xXrNit_2 = rNrNit_1; @@ -1107,8 +1107,8 @@ aged_associative_container_test_base::testReverseIterator() // Should be able to construct or assign a const_reverse_iterator from a // const_reverse_iterator - const_reverse_iterator rCrCit_0{c.crbegin()}; - const_reverse_iterator rCrCit_1{rCrCit_0}; + const_reverse_iterator const rCrCit_0{c.crbegin()}; + const_reverse_iterator const rCrCit_1{rCrCit_0}; BEAST_EXPECT(rCrCit_0 == rCrCit_1); const_reverse_iterator xXrCit_2; xXrCit_2 = rCrCit_1; @@ -1120,8 +1120,8 @@ aged_associative_container_test_base::testReverseIterator() // Should be able to construct or assign a const_reverse_iterator from a // reverse_iterator - const_reverse_iterator rNrCit_0{c.rbegin()}; - const_reverse_iterator rNrCit_1{rNrNit_0}; + const_reverse_iterator const rNrCit_0{c.rbegin()}; + const_reverse_iterator const rNrCit_1{rNrNit_0}; BEAST_EXPECT(rNrCit_0 == rNrCit_1); xXrCit_2 = rNrNit_1; BEAST_EXPECT(rNrCit_1 == xXrCit_2); @@ -1132,10 +1132,10 @@ aged_associative_container_test_base::testReverseIterator() // const_iterator. // Should be able to construct or assign reverse_iterators from // non-reverse iterators. - reverse_iterator fNrNit_0{c.begin()}; - const_reverse_iterator fNrCit_0{c.begin()}; + reverse_iterator const fNrNit_0{c.begin()}; + const_reverse_iterator const fNrCit_0{c.begin()}; BEAST_EXPECT(fNrNit_0 == fNrCit_0); - const_reverse_iterator fCrCit_0{c.cbegin()}; + const_reverse_iterator const fCrCit_0{c.cbegin()}; BEAST_EXPECT(fNrCit_0 == fCrCit_0); // None of these should compile because they construct a non-reverse @@ -1146,7 +1146,7 @@ aged_associative_container_test_base::testReverseIterator() // You should not be able to assign an iterator to a reverse_iterator or // vise-versa. So the following lines should not compile. - iterator xXfNit_0; + iterator const xXfNit_0; // xXfNit_0 = xXrNit_2; // xXrNit_2 = xXfNit_0; } @@ -1297,7 +1297,7 @@ aged_associative_container_test_base::testChronological() for (auto iter(v.crbegin()); iter != v.crend(); ++iter) { using iterator = typename decltype(c)::iterator; - iterator found(c.find(Traits::extract(*iter))); + iterator const found(c.find(Traits::extract(*iter))); BEAST_EXPECT(found != c.cend()); if (found == c.cend()) @@ -1317,7 +1317,7 @@ aged_associative_container_test_base::testChronological() for (auto iter(v.cbegin()); iter != v.cend(); ++iter) { using const_iterator = typename decltype(c)::const_iterator; - const_iterator found(c.find(Traits::extract(*iter))); + const_iterator const found(c.find(Traits::extract(*iter))); BEAST_EXPECT(found != c.cend()); if (found == c.cend()) @@ -1362,7 +1362,7 @@ aged_associative_container_test_base::testArrayCreate() { // Copy construct key typename Traits::template Cont<> c(clock); - for (auto e : v) + for (auto const& e : v) c[e.first] = e.second; checkContents(c, v); } @@ -1642,7 +1642,7 @@ aged_associative_container_test_base::testCompare() // testcase (Traits::name() + " array create"); testcase("array create"); - typename Traits::template Cont<> c1(v.begin(), v.end(), clock); + typename Traits::template Cont<> const c1(v.begin(), v.end(), clock); typename Traits::template Cont<> c2(v.begin(), v.end(), clock); c2.erase(c2.cbegin()); @@ -1672,7 +1672,7 @@ aged_associative_container_test_base::testObservers() // testcase (Traits::name() + " observers"); testcase("observers"); - typename Traits::template Cont<> c(clock); + typename Traits::template Cont<> const c(clock); c.key_comp(); c.value_comp(); @@ -1690,7 +1690,7 @@ aged_associative_container_test_base::testObservers() // testcase (Traits::name() + " observers"); testcase("observers"); - typename Traits::template Cont<> c(clock); + typename Traits::template Cont<> const c(clock); c.hash_function(); c.key_eq(); diff --git a/src/test/beast/beast_Journal_test.cpp b/src/test/beast/beast_Journal_test.cpp index cb190e57a0..35ab3640bd 100644 --- a/src/test/beast/beast_Journal_test.cpp +++ b/src/test/beast/beast_Journal_test.cpp @@ -50,7 +50,7 @@ public: using namespace beast::severities; sink.threshold(kInfo); - Journal j(sink); + Journal const j(sink); j.trace() << " "; BEAST_EXPECT(sink.count() == 0); diff --git a/src/test/beast/beast_PropertyStream_test.cpp b/src/test/beast/beast_PropertyStream_test.cpp index 35aa91d18e..9e76749218 100644 --- a/src/test/beast/beast_PropertyStream_test.cpp +++ b/src/test/beast/beast_PropertyStream_test.cpp @@ -67,7 +67,7 @@ public: { try { - Source* source(root.find_one(name)); + Source const* source(root.find_one(name)); BEAST_EXPECT(source == expected); } catch (...) @@ -82,7 +82,7 @@ public: { try { - Source* source(root.find_path(path)); + Source const* source(root.find_path(path)); BEAST_EXPECT(source == expected); } catch (...) @@ -97,7 +97,7 @@ public: { try { - Source* source(root.find_one_deep(name)); + Source const* source(root.find_one_deep(name)); BEAST_EXPECT(source == expected); } catch (...) diff --git a/src/test/beast/beast_io_latency_probe_test.cpp b/src/test/beast/beast_io_latency_probe_test.cpp index f2423550d3..dfa18e6770 100644 --- a/src/test/beast/beast_io_latency_probe_test.cpp +++ b/src/test/beast/beast_io_latency_probe_test.cpp @@ -50,7 +50,7 @@ class io_latency_probe_test : public beast::unit_test::suite, public beast::test bool done = false; boost::system::error_code wait_err; - while (--num_samples) + while (--num_samples > 0u) { auto const start{MeasureClock::now()}; done = false; @@ -60,7 +60,7 @@ class io_latency_probe_test : public beast::unit_test::suite, public beast::test wait_err = ec; auto const end{MeasureClock::now()}; elapsed_times_.emplace_back(end - start); - std::lock_guard lk{mtx}; + std::lock_guard const lk{mtx}; done = true; cv.notify_one(); }); @@ -157,7 +157,8 @@ class io_latency_probe_test : public beast::unit_test::suite, public beast::test auto interval = 99ms; auto probe_duration = 1s; - size_t expected_probe_count_max = (probe_duration / interval); + size_t const expected_probe_count_max = (probe_duration / interval); + // NOLINTNEXTLINE(misc-const-correctness) size_t expected_probe_count_min = expected_probe_count_max; #ifdef XRPL_RUNNING_IN_CI // adjust min expected based on measurements diff --git a/src/test/conditions/PreimageSha256_test.cpp b/src/test/conditions/PreimageSha256_test.cpp index 973f714ba4..374b6eb925 100644 --- a/src/test/conditions/PreimageSha256_test.cpp +++ b/src/test/conditions/PreimageSha256_test.cpp @@ -149,7 +149,7 @@ class PreimageSha256_test : public beast::unit_test::suite "9CF1D5F810302" "0000"}}; - for (auto x : others) + for (auto const& x : others) { std::error_code ec; diff --git a/src/test/consensus/ByzantineFailureSim_test.cpp b/src/test/consensus/ByzantineFailureSim_test.cpp index 245c52d9e3..f86ae556bf 100644 --- a/src/test/consensus/ByzantineFailureSim_test.cpp +++ b/src/test/consensus/ByzantineFailureSim_test.cpp @@ -39,7 +39,7 @@ class ByzantineFailureSim_test : public beast::unit_test::suite f.trustAndConnect(f + d + e + g, delay); g.trustAndConnect(g + a + f, delay); - PeerGroup network = a + b + c + d + e + f + g; + PeerGroup const network = a + b + c + d + e + f + g; StreamCollector sc{std::cout}; diff --git a/src/test/consensus/Consensus_test.cpp b/src/test/consensus/Consensus_test.cpp index a096b82365..8b562454e3 100644 --- a/src/test/consensus/Consensus_test.cpp +++ b/src/test/consensus/Consensus_test.cpp @@ -144,7 +144,7 @@ public: testcase("standalone"); Sim s; - PeerGroup peers = s.createGroup(1); + PeerGroup const peers = s.createGroup(1); Peer* peer = peers[0]; peer->targetLedgers = 1; peer->start(); @@ -235,7 +235,7 @@ public: // All peers are in sync even with a slower peer 0 if (BEAST_EXPECT(sim.synchronized())) { - for (Peer* peer : network) + for (Peer const* peer : network) { auto const& lcl = peer->lastClosedLedger; BEAST_EXPECT(lcl.id() == peer->prevLedgerID()); @@ -292,7 +292,7 @@ public: // Verify all peers have same LCL but are missing // transaction 0,1 which was not received by all peers // before the ledger closed - for (Peer* peer : network) + for (Peer const* peer : network) { // Closed ledger has all but transaction 0,1 auto const& lcl = peer->lastClosedLedger; @@ -317,7 +317,7 @@ public: BEAST_EXPECT(slowPeer->prevProposers == fast.size()); } - for (Peer* peer : fast) + for (Peer const* peer : fast) { // Due to the network link delay settings // Peer 0 initially proposes {0} @@ -388,8 +388,8 @@ public: Sim sim; PeerGroup groupA = sim.createGroup(2); - PeerGroup groupB = sim.createGroup(2); - PeerGroup groupC = sim.createGroup(2); + PeerGroup const groupB = sim.createGroup(2); + PeerGroup const groupC = sim.createGroup(2); PeerGroup network = groupA + groupB + groupC; network.trust(network); @@ -397,7 +397,7 @@ public: // Run consensus without skew until we have a short close time // resolution - Peer* firstPeer = *groupA.begin(); + Peer const* firstPeer = *groupA.begin(); while (firstPeer->lastClosedLedger.closeTimeResolution() >= parms.proposeFRESHNESS) sim.run(1); @@ -412,7 +412,7 @@ public: // All nodes agreed to disagree on the close time if (BEAST_EXPECT(sim.synchronized())) { - for (Peer* peer : network) + for (Peer const* peer : network) BEAST_EXPECT(!peer->lastClosedLedger.closeAgree()); } } @@ -457,13 +457,13 @@ public: Sim sim; PeerGroup minority = sim.createGroup(2); - PeerGroup majorityA = sim.createGroup(3); - PeerGroup majorityB = sim.createGroup(5); + PeerGroup const majorityA = sim.createGroup(3); + PeerGroup const majorityB = sim.createGroup(5); PeerGroup majority = majorityA + majorityB; - PeerGroup network = minority + majority; + PeerGroup const network = minority + majority; - SimDuration delay = round(0.2 * parms.ledgerGRANULARITY); + SimDuration const delay = round(0.2 * parms.ledgerGRANULARITY); minority.trustAndConnect(minority + majorityA, delay); majority.trustAndConnect(majority, delay); @@ -556,10 +556,10 @@ public: Sim sim; PeerGroup loner = sim.createGroup(1); - PeerGroup friends = sim.createGroup(3); + PeerGroup const friends = sim.createGroup(3); loner.trust(loner + friends); - PeerGroup others = sim.createGroup(6); + PeerGroup const others = sim.createGroup(6); PeerGroup clique = friends + others; clique.trust(clique); @@ -581,7 +581,7 @@ public: sim.run(2); // Check all peers recovered - for (Peer* p : network) + for (Peer const* p : network) BEAST_EXPECT(p->prevLedgerID() == network[0]->prevLedgerID()); } } @@ -596,7 +596,7 @@ public: // This is a specialized test engineered to yield ledgers with different // close times even though the peers believe they had close time // consensus on the ledger. - ConsensusParms parms; + ConsensusParms const parms; Sim sim; @@ -634,7 +634,7 @@ public: NetClock::duration when = network[0]->now().time_since_epoch(); // Check we are before the 30s to 20s transition - NetClock::duration resolution = network[0]->lastClosedLedger.closeTimeResolution(); + NetClock::duration const resolution = network[0]->lastClosedLedger.closeTimeResolution(); BEAST_EXPECT(resolution == NetClock::duration{30s}); while (((when % NetClock::duration{30s}) != NetClock::duration{15s}) || @@ -650,7 +650,7 @@ public: { // close time should be ahead of clock time since we engineered // the close time to round up - for (Peer* peer : network) + for (Peer const* peer : network) { BEAST_EXPECT(peer->lastClosedLedger.closeTime() > peer->now()); BEAST_EXPECT(peer->lastClosedLedger.closeAgree()); @@ -692,26 +692,26 @@ public: using namespace std::chrono; testcase("fork"); - std::uint32_t numPeers = 10; + std::uint32_t const numPeers = 10; // Vary overlap between two UNLs for (std::uint32_t overlap = 0; overlap <= numPeers; ++overlap) { ConsensusParms const parms{}; Sim sim; - std::uint32_t numA = (numPeers - overlap) / 2; - std::uint32_t numB = numPeers - numA - overlap; + std::uint32_t const numA = (numPeers - overlap) / 2; + std::uint32_t const numB = numPeers - numA - overlap; - PeerGroup aOnly = sim.createGroup(numA); - PeerGroup bOnly = sim.createGroup(numB); - PeerGroup commonOnly = sim.createGroup(overlap); + PeerGroup const aOnly = sim.createGroup(numA); + PeerGroup const bOnly = sim.createGroup(numB); + PeerGroup const commonOnly = sim.createGroup(overlap); PeerGroup a = aOnly + commonOnly; PeerGroup b = bOnly + commonOnly; - PeerGroup network = a + b; + PeerGroup const network = a + b; - SimDuration delay = round(0.2 * parms.ledgerGRANULARITY); + SimDuration const delay = round(0.2 * parms.ledgerGRANULARITY); a.trustAndConnect(a, delay); b.trustAndConnect(b, delay); @@ -721,7 +721,7 @@ public: { // Nodes have only seen transactions from their neighbors peer->openTxs.insert(Tx{static_cast(peer->id)}); - for (Peer* to : sim.trustGraph.trustedPeers(peer)) + for (Peer const* to : sim.trustGraph.trustedPeers(peer)) peer->openTxs.insert(Tx{static_cast(to->id)}); } sim.run(1); @@ -759,7 +759,7 @@ public: validators.trust(validators); center.trust(validators); - SimDuration delay = round(0.2 * parms.ledgerGRANULARITY); + SimDuration const delay = round(0.2 * parms.ledgerGRANULARITY); validators.connect(center, delay); center[0]->runAsValidator = false; @@ -866,7 +866,7 @@ public: Sim sim; // Goes A->B->D - PeerGroup groupABD = sim.createGroup(2); + PeerGroup const groupABD = sim.createGroup(2); // Single node that initially fully validates C before the split PeerGroup groupCfast = sim.createGroup(1); // Generates C, but fails to fully validate before the split @@ -875,8 +875,8 @@ public: PeerGroup groupNotFastC = groupABD + groupCsplit; PeerGroup network = groupABD + groupCsplit + groupCfast; - SimDuration delay = round(0.2 * parms.ledgerGRANULARITY); - SimDuration fDelay = round(0.1 * parms.ledgerGRANULARITY); + SimDuration const delay = round(0.2 * parms.ledgerGRANULARITY); + SimDuration const fDelay = round(0.1 * parms.ledgerGRANULARITY); network.trust(network); // C must have a shorter delay to see all the validations before the @@ -987,14 +987,14 @@ public: ConsensusParms const parms{}; Sim sim; - SimDuration delay = round(0.2 * parms.ledgerGRANULARITY); + SimDuration const delay = round(0.2 * parms.ledgerGRANULARITY); PeerGroup behind = sim.createGroup(3); - PeerGroup ahead = sim.createGroup(2); + PeerGroup const ahead = sim.createGroup(2); PeerGroup network = ahead + behind; hash_set trustedKeys; - for (Peer* p : network) + for (Peer const* p : network) trustedKeys.insert(p->key); for (Peer* p : network) p->trustedKeys = trustedKeys; @@ -1061,7 +1061,7 @@ public: Tx const txFollowingTrue{97}; Tx const txFollowingFalse{96}; int const numPeers = 100; - ConsensusParms p; + ConsensusParms const p; std::size_t peersUnchanged = 0; auto logs = std::make_unique(beast::severities::kError); @@ -1295,10 +1295,10 @@ public: for (int i = 0; i < 1; ++i) { - BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i, false, p)); - BEAST_EXPECT(!followingFalse.updateVote(250 + 10 * i, false, p)); + BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i), false, p)); + BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i), false, p)); BEAST_EXPECT(proposingTrue.getOurVote() == true); BEAST_EXPECT(proposingFalse.getOurVote() == false); @@ -1333,10 +1333,10 @@ public: } for (int i = 1; i < 3; ++i) { - BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i, false, p)); - BEAST_EXPECT(!followingFalse.updateVote(250 + 10 * i, false, p)); + BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i), false, p)); + BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i), false, p)); BEAST_EXPECT(proposingTrue.getOurVote() == true); BEAST_EXPECT(proposingFalse.getOurVote() == false); @@ -1369,10 +1369,10 @@ public: } for (int i = 3; i < 5; ++i) { - BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i, true, p)); - BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i, false, p)); - BEAST_EXPECT(!followingFalse.updateVote(250 + 10 * i, false, p)); + BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i), true, p)); + BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i), false, p)); + BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i), false, p)); BEAST_EXPECT(proposingTrue.getOurVote() == true); BEAST_EXPECT(proposingFalse.getOurVote() == false); diff --git a/src/test/consensus/DistributedValidatorsSim_test.cpp b/src/test/consensus/DistributedValidatorsSim_test.cpp index b430a63880..f510e00628 100644 --- a/src/test/consensus/DistributedValidatorsSim_test.cpp +++ b/src/test/consensus/DistributedValidatorsSim_test.cpp @@ -155,9 +155,9 @@ class DistributedValidators_test : public beast::unit_test::suite sim.run(1); // Run for 10 minutes, submitting 100 tx/second - std::chrono::nanoseconds simDuration = 10min; - std::chrono::nanoseconds quiet = 10s; - Rate rate{100, 1000ms}; + std::chrono::nanoseconds const simDuration = 10min; + std::chrono::nanoseconds const quiet = 10s; + Rate const rate{100, 1000ms}; // Initialize timers HeartbeatTimer heart(sim.scheduler); diff --git a/src/test/consensus/LedgerTiming_test.cpp b/src/test/consensus/LedgerTiming_test.cpp index 945f6b4ff0..8313ffd0d4 100644 --- a/src/test/consensus/LedgerTiming_test.cpp +++ b/src/test/consensus/LedgerTiming_test.cpp @@ -1,6 +1,5 @@ -#include - #include +#include namespace xrpl { namespace test { @@ -67,7 +66,7 @@ class LedgerTiming_test : public beast::unit_test::suite using namespace std::chrono_literals; // A closeTime equal to the epoch is not modified using tp = NetClock::time_point; - tp def; + tp const def; BEAST_EXPECT(def == roundCloseTime(def, 30s)); // Otherwise, the closeTime is rounded to the nearest diff --git a/src/test/consensus/LedgerTrie_test.cpp b/src/test/consensus/LedgerTrie_test.cpp index 7fd8c71b64..0836b9c342 100644 --- a/src/test/consensus/LedgerTrie_test.cpp +++ b/src/test/consensus/LedgerTrie_test.cpp @@ -278,7 +278,7 @@ class LedgerTrie_test : public beast::unit_test::suite LedgerHistoryHelper h; BEAST_EXPECT(t.empty()); - Ledger genesis = h[""]; + Ledger const genesis = h[""]; t.insert(genesis); BEAST_EXPECT(!t.empty()); t.remove(genesis); @@ -344,7 +344,7 @@ class LedgerTrie_test : public beast::unit_test::suite using Seq = Ledger::Seq; // Empty { - LedgerTrie t; + LedgerTrie const t; BEAST_EXPECT(t.getPreferred(Seq{0}) == std::nullopt); BEAST_EXPECT(t.getPreferred(Seq{2}) == std::nullopt); } @@ -352,7 +352,7 @@ class LedgerTrie_test : public beast::unit_test::suite { LedgerTrie t; LedgerHistoryHelper h; - Ledger genesis = h[""]; + Ledger const genesis = h[""]; t.insert(genesis); // NOLINTNEXTLINE(bugprone-unchecked-optional-access) @@ -670,11 +670,11 @@ class LedgerTrie_test : public beast::unit_test::suite { // pick a random ledger history std::string curr; - char depth = depthDist(gen); + char const depth = depthDist(gen); char offset = 0; for (char d = 0; d < depth; ++d) { - char a = offset + widthDist(gen); + char const a = offset + widthDist(gen); curr += a; offset = (a + 1) * width; } diff --git a/src/test/consensus/NegativeUNL_test.cpp b/src/test/consensus/NegativeUNL_test.cpp index 46c6936809..0f97704755 100644 --- a/src/test/consensus/NegativeUNL_test.cpp +++ b/src/test/consensus/NegativeUNL_test.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include @@ -211,7 +210,11 @@ class NegativeUNL_test : public beast::unit_test::suite std::vector publicKeys = createPublicKeys(3); // genesis ledger auto l = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); // Record the public keys and ledger sequences of expected negative UNL // validators when we build the ledger history @@ -219,7 +222,7 @@ class NegativeUNL_test : public beast::unit_test::suite { //(1) the ledger after genesis, not a flag ledger - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); auto txDisable_0 = createTx(true, l->seq(), publicKeys[0]); auto txReEnable_1 = createTx(false, l->seq(), publicKeys[1]); @@ -236,7 +239,7 @@ class NegativeUNL_test : public beast::unit_test::suite // generate more ledgers for (auto i = 0; i < 256 - 2; ++i) { - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -258,7 +261,7 @@ class NegativeUNL_test : public beast::unit_test::suite { BEAST_EXPECT(l->validatorToDisable() == publicKeys[0]); //++ first ToDisable Tx in ledger's TxSet - uint256 txID = txDisable_0.getTransactionID(); + uint256 const txID = txDisable_0.getTransactionID(); BEAST_EXPECT(l->txExists(txID)); } } @@ -271,7 +274,7 @@ class NegativeUNL_test : public beast::unit_test::suite BEAST_EXPECT(good_size); if (good_size) BEAST_EXPECT(l->validatorToDisable() == publicKeys[0]); - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -323,7 +326,7 @@ class NegativeUNL_test : public beast::unit_test::suite BEAST_EXPECT(l->validatorToDisable() == publicKeys[1]); BEAST_EXPECT(l->validatorToReEnable() == publicKeys[0]); } - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -365,7 +368,7 @@ class NegativeUNL_test : public beast::unit_test::suite BEAST_EXPECT(l->negativeUNL().count(publicKeys[1])); BEAST_EXPECT(l->validatorToDisable() == publicKeys[0]); } - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -414,7 +417,7 @@ class NegativeUNL_test : public beast::unit_test::suite BEAST_EXPECT(l->negativeUNL().count(publicKeys[1])); BEAST_EXPECT(l->validatorToReEnable() == publicKeys[0]); } - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -456,7 +459,7 @@ class NegativeUNL_test : public beast::unit_test::suite BEAST_EXPECT(l->negativeUNL().count(publicKeys[1])); BEAST_EXPECT(l->validatorToReEnable() == publicKeys[1]); } - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -470,7 +473,7 @@ class NegativeUNL_test : public beast::unit_test::suite for (auto i = 0; i < 256; ++i) { BEAST_EXPECT(negUnlSizeTest(l, 0, false, false)); - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); } BEAST_EXPECT(l->isFlagLedger()); l->updateNegativeUNL(); @@ -543,7 +546,8 @@ struct NetworkHistory static uint256 fake_amendment; // So we have different genesis ledgers auto l = std::make_shared( create_genesis, - env.app().config(), + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), std::vector{fake_amendment++}, env.app().getNodeFamily()); history.push_back(l); @@ -553,7 +557,7 @@ struct NetworkHistory int nidx = 0; while (l->seq() <= param.numLedgers) { - l = std::make_shared(*l, env.app().timeKeeper().closeTime()); + l = std::make_shared(*l, env.app().getTimeKeeper().closeTime()); history.push_back(l); if (l->isFlagLedger()) @@ -601,7 +605,11 @@ struct NetworkHistory { static auto keyPair = randomKeyPair(KeyType::secp256k1); return std::make_shared( - env.app().timeKeeper().now(), keyPair.first, keyPair.second, v, [&](STValidation& v) { + env.app().getTimeKeeper().now(), + keyPair.first, + keyPair.second, + v, + [&](STValidation& v) { v.setFieldH256(sfLedgerHash, ledger->header().hash); v.setFieldU32(sfLedgerSequence, ledger->seq()); v.setFlag(vfFullValidation); @@ -620,7 +628,7 @@ struct NetworkHistory walkHistoryAndAddValidations(NeedValidation&& needVal) { std::uint32_t curr = 0; - std::size_t need = 256 + 1; + std::size_t const need = 256 + 1; // only last 256 + 1 ledgers need validations if (history.size() > need) curr = history.size() - need; @@ -694,14 +702,14 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite testcase("Create UNLModify Tx"); jtx::Env env(*this); - NodeID myId(0xA0); + NodeID const myId(0xA0); NegativeUNLVote vote(myId, env.journal); // one add, one remove auto txSet = std::make_shared(SHAMapType::TRANSACTION, env.app().getNodeFamily()); - PublicKey toDisableKey(derivePublicKey(KeyType::ed25519, randomSecretKey())); - PublicKey toReEnableKey(derivePublicKey(KeyType::ed25519, randomSecretKey())); - LedgerIndex seq(1234); + PublicKey const toDisableKey(derivePublicKey(KeyType::ed25519, randomSecretKey())); + PublicKey const toReEnableKey(derivePublicKey(KeyType::ed25519, randomSecretKey())); + LedgerIndex const seq(1234); BEAST_EXPECT(countTx(txSet) == 0); vote.addTx(seq, toDisableKey, NegativeUNLVote::ToDisable, txSet); BEAST_EXPECT(countTx(txSet) == 1); @@ -715,16 +723,16 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite testPickOneCandidate() { testcase("Pick One Candidate"); - jtx::Env env(*this); + jtx::Env const env(*this); - NodeID myId(0xA0); - NegativeUNLVote vote(myId, env.journal); + NodeID const myId(0xA0); + NegativeUNLVote const vote(myId, env.journal); - uint256 pad_0(0); - uint256 pad_f = ~pad_0; - NodeID n_1(1); - NodeID n_2(2); - NodeID n_3(3); + uint256 const pad_0(0); + uint256 const pad_f = ~pad_0; + NodeID const n_1(1); + NodeID const n_2(2); + NodeID const n_3(3); std::vector candidates({n_1}); BEAST_EXPECT(vote.choose(pad_0, candidates) == n_1); BEAST_EXPECT(vote.choose(pad_f, candidates) == n_1); @@ -782,7 +790,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite history.walkHistoryAndAddValidations( [&](std::shared_ptr const& l, std::size_t idx) -> bool { // skip half my validations. - return !(history.UNLNodeIDs[idx] == myId && l->seq() % 2 == 0); + return history.UNLNodeIDs[idx] != myId || l->seq() % 2 != 0; }); NegativeUNLVote vote(myId, history.env.journal); BEAST_EXPECT(!vote.buildScoreTable( @@ -795,7 +803,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite // 5. local node had enough validations but on a wrong chain NetworkHistory history = {*this, {10, 0, false, false, 256 + 2}}; // We need two chains for these tests - bool wrongChainSuccess = history.goodHistory; + bool const wrongChainSuccess = history.goodHistory; BEAST_EXPECT(wrongChainSuccess); NetworkHistory::LedgerHistory wrongChain = std::move(history.history); // Create a new chain and use it as the one that majority of nodes @@ -806,7 +814,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite if (history.goodHistory && wrongChainSuccess) { NodeID myId = history.UNLNodeIDs[3]; - NodeID badNode = history.UNLNodeIDs[4]; + NodeID const badNode = history.UNLNodeIDs[4]; history.walkHistoryAndAddValidations( [&](std::shared_ptr const& l, std::size_t idx) -> bool { // everyone but me @@ -817,9 +825,9 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite // a node double validates for (auto& l : wrongChain) { - RCLValidation v1(history.createSTVal(l, myId)); + RCLValidation const v1(history.createSTVal(l, myId)); history.validations.add(myId, v1); - RCLValidation v2(history.createSTVal(l, badNode)); + RCLValidation const v2(history.createSTVal(l, badNode)); history.validations.add(badNode, v2); } @@ -890,7 +898,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite * @param numReEnable number of ReEnable candidates expected * @return true if the number of candidates meets expectation */ - bool + static bool checkCandidateSizes( NegativeUNLVote& vote, hash_set const& unl, @@ -901,8 +909,8 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { auto [disableCandidates, reEnableCandidates] = vote.findAllCandidates(unl, negUnl, scoreTable); - bool rightDisable = disableCandidates.size() == numDisable; - bool rightReEnable = reEnableCandidates.size() == numReEnable; + bool const rightDisable = disableCandidates.size() == numDisable; + bool const rightReEnable = reEnableCandidates.size() == numReEnable; return rightDisable && rightReEnable; }; @@ -1001,9 +1009,9 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { // 2 new validators - NodeID new_1(0xbead); - NodeID new_2(0xbeef); - hash_set nowTrusted = {new_1, new_2}; + NodeID const new_1(0xbead); + NodeID const new_2(0xbeef); + hash_set const nowTrusted = {new_1, new_2}; hash_set UNL_temp = history.UNLNodeIDSet; UNL_temp.insert(new_1); UNL_temp.insert(new_2); @@ -1057,13 +1065,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite * negativeUNLMinLocalValsToVote */ - jtx::Env env(*this); + jtx::Env const env(*this); - NodeID myId(0xA0); + NodeID const myId(0xA0); NegativeUNLVote vote(myId, env.journal); - std::array unlSizes = {34, 35, 80}; - std::array nUnlPercent = {0, 50, 100}; + std::array const unlSizes = {34, 35, 80}; + std::array const nUnlPercent = {0, 50, 100}; std::array scores = { 0, NegativeUNLVote::negativeUNLLowWaterMark - 1, @@ -1083,7 +1091,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite hash_set& negUnl, hash_map& scoreTable) { std::vector nodeIDs; - std::vector keys = createPublicKeys(unl_size); + std::vector const keys = createPublicKeys(unl_size); for (auto const& k : keys) { nodeIDs.emplace_back(calcNodeID(k)); @@ -1145,7 +1153,7 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite hash_set& negUnl, hash_map& scoreTable) { std::vector nodeIDs; - std::vector keys = createPublicKeys(unl_size); + std::vector const keys = createPublicKeys(unl_size); for (auto const& k : keys) { nodeIDs.emplace_back(calcNodeID(k)); @@ -1213,9 +1221,9 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite testNewValidators() { testcase("New Validators"); - jtx::Env env(*this); + jtx::Env const env(*this); - NodeID myId(0xA0); + NodeID const myId(0xA0); NegativeUNLVote vote(myId, env.journal); // test cases: @@ -1224,9 +1232,9 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite // add a new one and some already added // purge and see some are expired - NodeID n1(0xA1); - NodeID n2(0xA2); - NodeID n3(0xA3); + NodeID const n1(0xA1); + NodeID const n2(0xA2); + NodeID const n3(0xA3); vote.newValidators(2, {n1}); BEAST_EXPECT(vote.newValidators_.size() == 1); @@ -1293,7 +1301,7 @@ class NegativeUNLVoteScoreTable_test : public beast::unit_test::suite * -- unl size: 10, 34, 35, 50 * -- score pattern: all 0, all 50%, all 100%, two 0% two 50% rest 100% */ - std::array unlSizes = {10, 34, 35, 50}; + std::array const unlSizes = {10, 34, 35, 50}; std::array, 4> scorePattern = { {{{0, 0, 0}}, {{50, 50, 50}}, {{100, 100, 100}}, {{0, 50, 100}}}}; @@ -1322,9 +1330,9 @@ class NegativeUNLVoteScoreTable_test : public beast::unit_test::suite k = 2; } - bool add_50 = scorePattern[sp][k] == 50 && l->seq() % 2 == 0; - bool add_100 = scorePattern[sp][k] == 100; - bool add_me = history.UNLNodeIDs[idx] == myId; + bool const add_50 = scorePattern[sp][k] == 50 && l->seq() % 2 == 0; + bool const add_100 = scorePattern[sp][k] == 100; + bool const add_me = history.UNLNodeIDs[idx] == myId; return add_50 || add_100 || add_me; }); @@ -1670,11 +1678,15 @@ class NegativeUNLVoteFilterValidations_test : public beast::unit_test::suite testcase("Filter Validations"); jtx::Env env(*this); auto l = std::make_shared( - create_genesis, env.app().config(), std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{env.app().config().features}, + env.app().config().FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); auto createSTVal = [&](std::pair const& keys) { return std::make_shared( - env.app().timeKeeper().now(), + env.app().getTimeKeeper().now(), keys.first, keys.second, calcNodeID(keys.first), @@ -1686,8 +1698,8 @@ class NegativeUNLVoteFilterValidations_test : public beast::unit_test::suite }; // create keys and validations - std::uint32_t numNodes = 10; - std::uint32_t negUnlSize = 3; + std::uint32_t const numNodes = 10; + std::uint32_t const negUnlSize = 3; std::vector cfgKeys; hash_set activeValidators; hash_set nUnlKeys; @@ -1705,15 +1717,15 @@ class NegativeUNLVoteFilterValidations_test : public beast::unit_test::suite } // setup the ValidatorList - auto& validators = env.app().validators(); + auto& validators = env.app().getValidators(); auto& local = *nUnlKeys.begin(); - std::vector cfgPublishers; + std::vector const cfgPublishers; validators.load(local, cfgKeys, cfgPublishers); validators.updateTrusted( activeValidators, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); BEAST_EXPECT(validators.getTrustedMasterKeys().size() == numNodes); validators.setNegativeUNL(nUnlKeys); @@ -1753,9 +1765,9 @@ negUnlSizeTest( bool hasToDisable, bool hasToReEnable) { - bool sameSize = l->negativeUNL().size() == size; - bool sameToDisable = (l->validatorToDisable() != std::nullopt) == hasToDisable; - bool sameToReEnable = (l->validatorToReEnable() != std::nullopt) == hasToReEnable; + bool const sameSize = l->negativeUNL().size() == size; + bool const sameToDisable = (l->validatorToDisable() != std::nullopt) == hasToDisable; + bool const sameToReEnable = (l->validatorToReEnable() != std::nullopt) == hasToReEnable; return sameSize && sameToDisable && sameToReEnable; } @@ -1797,7 +1809,7 @@ VerifyPubKeyAndSeq( auto s = makeSlice(d); if (!publicKeyType(s)) return false; - PublicKey pk(s); + PublicKey const pk(s); auto it = nUnlLedgerSeq.find(pk); if (it == nUnlLedgerSeq.end()) return false; @@ -1823,13 +1835,13 @@ std::vector createPublicKeys(std::size_t n) { std::vector keys; - std::size_t ss = 33; + std::size_t const ss = 33; std::vector data(ss, 0); data[0] = 0xED; for (int i = 0; i < n; ++i) { data[1]++; - Slice s(data.data(), ss); + Slice const s(data.data(), ss); keys.emplace_back(s); } return keys; diff --git a/src/test/consensus/Validations_test.cpp b/src/test/consensus/Validations_test.cpp index cf4498bd52..fef6e79036 100644 --- a/src/test/consensus/Validations_test.cpp +++ b/src/test/consensus/Validations_test.cpp @@ -233,12 +233,12 @@ class Validations_test : public beast::unit_test::suite testcase("Add validation"); LedgerHistoryHelper h; - Ledger ledgerA = h["a"]; + Ledger const ledgerA = h["a"]; Ledger ledgerAB = h["ab"]; Ledger ledgerAZ = h["az"]; Ledger ledgerABC = h["abc"]; - Ledger ledgerABCD = h["abcd"]; - Ledger ledgerABCDE = h["abcde"]; + Ledger const ledgerABCD = h["abcd"]; + Ledger const ledgerABCDE = h["abcde"]; { TestHarness harness(h.oracle); @@ -296,7 +296,7 @@ class Validations_test : public beast::unit_test::suite // Process validations out of order with shifted times TestHarness harness(h.oracle); - Node n = harness.makeNode(); + Node const n = harness.makeNode(); // Establish a new current validation BEAST_EXPECT(ValStatus::current == harness.add(n.validate(ledgerA))); @@ -312,7 +312,7 @@ class Validations_test : public beast::unit_test::suite { // Test stale on arrival validations TestHarness harness(h.oracle); - Node n = harness.makeNode(); + Node const n = harness.makeNode(); BEAST_EXPECT( ValStatus::stale == @@ -364,19 +364,19 @@ class Validations_test : public beast::unit_test::suite LedgerHistoryHelper h; Ledger ledgerA = h["a"]; - Ledger ledgerAB = h["ab"]; + Ledger const ledgerAB = h["ab"]; using Trigger = std::function; - std::vector triggers = { + std::vector const triggers = { [&](TestValidations& vals) { vals.currentTrusted(); }, [&](TestValidations& vals) { vals.getCurrentNodeIDs(); }, [&](TestValidations& vals) { vals.getPreferred(genesisLedger); }, [&](TestValidations& vals) { vals.getNodesAfter(ledgerA, ledgerA.id()); }}; - for (Trigger trigger : triggers) + for (Trigger const& trigger : triggers) { TestHarness harness(h.oracle); - Node n = harness.makeNode(); + Node const n = harness.makeNode(); BEAST_EXPECT(ValStatus::current == harness.add(n.validate(ledgerAB))); trigger(harness.vals()); @@ -405,39 +405,41 @@ class Validations_test : public beast::unit_test::suite testcase("Get nodes after"); LedgerHistoryHelper h; - Ledger ledgerA = h["a"]; - Ledger ledgerAB = h["ab"]; - Ledger ledgerABC = h["abc"]; - Ledger ledgerAD = h["ad"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerAB = h["ab"]; + Ledger const ledgerABC = h["abc"]; + Ledger const ledgerAD = h["ad"]; TestHarness harness(h.oracle); - Node a = harness.makeNode(), b = harness.makeNode(), c = harness.makeNode(), - d = harness.makeNode(); - c.untrust(); + Node const trustedNode1 = harness.makeNode(); + Node const trustedNode2 = harness.makeNode(); + Node const trustedNode3 = harness.makeNode(); + + Node notTrustedNode = harness.makeNode(); + notTrustedNode.untrust(); // first round a,b,c agree, d has is partial - BEAST_EXPECT(ValStatus::current == harness.add(a.validate(ledgerA))); - BEAST_EXPECT(ValStatus::current == harness.add(b.validate(ledgerA))); - BEAST_EXPECT(ValStatus::current == harness.add(c.validate(ledgerA))); - BEAST_EXPECT(ValStatus::current == harness.add(d.partial(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode1.validate(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode2.validate(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(notTrustedNode.validate(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode3.partial(ledgerA))); for (Ledger const& ledger : {ledgerA, ledgerAB, ledgerABC, ledgerAD}) BEAST_EXPECT(harness.vals().getNodesAfter(ledger, ledger.id()) == 0); harness.clock().advance(5s); - BEAST_EXPECT(ValStatus::current == harness.add(a.validate(ledgerAB))); - BEAST_EXPECT(ValStatus::current == harness.add(b.validate(ledgerABC))); - BEAST_EXPECT(ValStatus::current == harness.add(c.validate(ledgerAB))); - BEAST_EXPECT(ValStatus::current == harness.add(d.partial(ledgerABC))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode1.validate(ledgerAB))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode2.validate(ledgerABC))); + BEAST_EXPECT(ValStatus::current == harness.add(notTrustedNode.validate(ledgerAB))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode3.partial(ledgerABC))); BEAST_EXPECT(harness.vals().getNodesAfter(ledgerA, ledgerA.id()) == 3); BEAST_EXPECT(harness.vals().getNodesAfter(ledgerAB, ledgerAB.id()) == 2); BEAST_EXPECT(harness.vals().getNodesAfter(ledgerABC, ledgerABC.id()) == 0); BEAST_EXPECT(harness.vals().getNodesAfter(ledgerAD, ledgerAD.id()) == 0); - // If given a ledger inconsistent with the id, is still able to check - // using slower method + // If given a ledger inconsistent with the id, is still able to check using slower method BEAST_EXPECT(harness.vals().getNodesAfter(ledgerAD, ledgerA.id()) == 1); BEAST_EXPECT(harness.vals().getNodesAfter(ledgerAD, ledgerAB.id()) == 2); } @@ -449,12 +451,13 @@ class Validations_test : public beast::unit_test::suite testcase("Current trusted validations"); LedgerHistoryHelper h; - Ledger ledgerA = h["a"]; - Ledger ledgerB = h["b"]; - Ledger ledgerAC = h["ac"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerB = h["b"]; + Ledger const ledgerAC = h["ac"]; TestHarness harness(h.oracle); - Node a = harness.makeNode(), b = harness.makeNode(); + Node const a = harness.makeNode(); + Node b = harness.makeNode(); b.untrust(); BEAST_EXPECT(ValStatus::current == harness.add(a.validate(ledgerA))); @@ -487,8 +490,8 @@ class Validations_test : public beast::unit_test::suite testcase("Current public keys"); LedgerHistoryHelper h; - Ledger ledgerA = h["a"]; - Ledger ledgerAC = h["ac"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerAC = h["ac"]; TestHarness harness(h.oracle); Node a = harness.makeNode(), b = harness.makeNode(); @@ -567,8 +570,9 @@ class Validations_test : public beast::unit_test::suite sorted(harness.vals().getTrustedForLedger(id, seq)) == sorted(expectedValidations)); - std::uint32_t baseFee = 0; + std::uint32_t const baseFee = 0; std::vector expectedFees; + expectedFees.reserve(expectedValidations.size()); for (auto const& val : expectedValidations) { expectedFees.push_back(val.loadFee().value_or(baseFee)); @@ -579,9 +583,9 @@ class Validations_test : public beast::unit_test::suite }; //---------------------------------------------------------------------- - Ledger ledgerA = h["a"]; - Ledger ledgerB = h["b"]; - Ledger ledgerAC = h["ac"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerB = h["b"]; + Ledger const ledgerAC = h["ac"]; // Add a dummy ID to cover unknown ledger identifiers trustedValidations[{Ledger::ID{100}, Ledger::Seq{100}}] = {}; @@ -688,14 +692,16 @@ class Validations_test : public beast::unit_test::suite LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(), b = harness.makeNode(), c = harness.makeNode(); - c.untrust(); + Node const trustedNode1 = harness.makeNode(); + Node const trustedNode2 = harness.makeNode(); + Node notTrustedNode = harness.makeNode(); + notTrustedNode.untrust(); - Ledger ledgerA = h["a"]; - Ledger ledgerAB = h["ab"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerAB = h["ab"]; hash_map expected; - for (auto const& node : {a, b, c}) + for (auto const& node : {trustedNode1, trustedNode2, notTrustedNode}) { auto const val = node.validate(ledgerA); BEAST_EXPECT(ValStatus::current == harness.add(val)); @@ -705,9 +711,9 @@ class Validations_test : public beast::unit_test::suite // Send in a new validation for a, saving the new one into the expected // map after setting the proper prior ledger ID it replaced harness.clock().advance(1s); - auto newVal = a.validate(ledgerAB); + auto newVal = trustedNode1.validate(ledgerAB); BEAST_EXPECT(ValStatus::current == harness.add(newVal)); - expected.find(a.nodeID())->second = newVal; + expected.find(trustedNode1.nodeID())->second = newVal; } void @@ -718,14 +724,17 @@ class Validations_test : public beast::unit_test::suite LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(), b = harness.makeNode(), c = harness.makeNode(), - d = harness.makeNode(); - c.untrust(); + Node const trustedNode1 = harness.makeNode(); + Node const trustedNode2 = harness.makeNode(); + Node const trustedNode3 = harness.makeNode(); - Ledger ledgerA = h["a"]; - Ledger ledgerB = h["b"]; - Ledger ledgerAC = h["ac"]; - Ledger ledgerACD = h["acd"]; + Node notTrustedNode = harness.makeNode(); + notTrustedNode.untrust(); + + Ledger const ledgerA = h["a"]; + Ledger const ledgerB = h["b"]; + Ledger const ledgerAC = h["ac"]; + Ledger const ledgerACD = h["acd"]; using Seq = Ledger::Seq; @@ -735,7 +744,7 @@ class Validations_test : public beast::unit_test::suite BEAST_EXPECT(harness.vals().getPreferred(ledgerA) == std::nullopt); // Single ledger - BEAST_EXPECT(ValStatus::current == harness.add(a.validate(ledgerB))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode1.validate(ledgerB))); BEAST_EXPECT(harness.vals().getPreferred(ledgerA) == pref(ledgerB)); BEAST_EXPECT(harness.vals().getPreferred(ledgerB) == pref(ledgerB)); @@ -744,21 +753,21 @@ class Validations_test : public beast::unit_test::suite // Untrusted doesn't impact preferred ledger // (ledgerB has tie-break over ledgerA) - BEAST_EXPECT(ValStatus::current == harness.add(b.validate(ledgerA))); - BEAST_EXPECT(ValStatus::current == harness.add(c.validate(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode2.validate(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(notTrustedNode.validate(ledgerA))); BEAST_EXPECT(ledgerB.id() > ledgerA.id()); BEAST_EXPECT(harness.vals().getPreferred(ledgerA) == pref(ledgerB)); BEAST_EXPECT(harness.vals().getPreferred(ledgerB) == pref(ledgerB)); // Partial does break ties - BEAST_EXPECT(ValStatus::current == harness.add(d.partial(ledgerA))); + BEAST_EXPECT(ValStatus::current == harness.add(trustedNode3.partial(ledgerA))); BEAST_EXPECT(harness.vals().getPreferred(ledgerA) == pref(ledgerA)); BEAST_EXPECT(harness.vals().getPreferred(ledgerB) == pref(ledgerA)); harness.clock().advance(5s); // Parent of preferred-> stick with ledger - for (auto const& node : {a, b, c, d}) + for (auto const& node : {trustedNode1, trustedNode2, notTrustedNode, trustedNode3}) BEAST_EXPECT(ValStatus::current == harness.add(node.validate(ledgerAC))); // Parent of preferred stays put BEAST_EXPECT(harness.vals().getPreferred(ledgerA) == pref(ledgerA)); @@ -769,7 +778,7 @@ class Validations_test : public beast::unit_test::suite // Any later grandchild or different chain is preferred harness.clock().advance(5s); - for (auto const& node : {a, b, c, d}) + for (auto const& node : {trustedNode1, trustedNode2, notTrustedNode, trustedNode3}) BEAST_EXPECT(ValStatus::current == harness.add(node.validate(ledgerACD))); for (auto const& ledger : {ledgerA, ledgerB, ledgerACD}) BEAST_EXPECT(harness.vals().getPreferred(ledger) == pref(ledgerACD)); @@ -783,11 +792,11 @@ class Validations_test : public beast::unit_test::suite LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(); + Node const a = harness.makeNode(); - Ledger ledgerA = h["a"]; - Ledger ledgerB = h["b"]; - Ledger ledgerC = h["c"]; + Ledger const ledgerA = h["a"]; + Ledger const ledgerB = h["b"]; + Ledger const ledgerC = h["c"]; using ID = Ledger::ID; using Seq = Ledger::Seq; @@ -829,14 +838,14 @@ class Validations_test : public beast::unit_test::suite LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(); - Node b = harness.makeNode(); + Node const a = harness.makeNode(); + Node const b = harness.makeNode(); using ID = Ledger::ID; using Seq = Ledger::Seq; // Validate the ledger before it is actually available - Validation val = a.validate(ID{2}, Seq{2}, 0s, 0s, true); + Validation const val = a.validate(ID{2}, Seq{2}, 0s, 0s, true); BEAST_EXPECT(ValStatus::current == harness.add(val)); // Validation is available @@ -853,13 +862,13 @@ class Validations_test : public beast::unit_test::suite BEAST_EXPECT(harness.vals().getPreferred(genesisLedger) == std::make_pair(Seq{2}, ID{3})); // Create the ledger - Ledger ledgerAB = h["ab"]; + Ledger const ledgerAB = h["ab"]; // Now it should be available BEAST_EXPECT(harness.vals().getNodesAfter(genesisLedger, ID{0}) == 1); // Create a validation that is not available harness.clock().advance(5s); - Validation val2 = a.validate(ID{4}, Seq{4}, 0s, 0s, true); + Validation const val2 = a.validate(ID{4}, Seq{4}, 0s, 0s, true); BEAST_EXPECT(ValStatus::current == harness.add(val2)); BEAST_EXPECT(harness.vals().numTrustedForLedger(ID{4}) == 1); BEAST_EXPECT( @@ -867,7 +876,7 @@ class Validations_test : public beast::unit_test::suite std::make_pair(ledgerAB.seq(), ledgerAB.id())); // Another node requesting that ledger still doesn't change things - Validation val3 = b.validate(ID{4}, Seq{4}, 0s, 0s, true); + Validation const val3 = b.validate(ID{4}, Seq{4}, 0s, 0s, true); BEAST_EXPECT(ValStatus::current == harness.add(val3)); BEAST_EXPECT(harness.vals().numTrustedForLedger(ID{4}) == 2); BEAST_EXPECT( @@ -876,7 +885,7 @@ class Validations_test : public beast::unit_test::suite // Switch to validation that is available harness.clock().advance(5s); - Ledger ledgerABCDE = h["abcde"]; + Ledger const ledgerABCDE = h["abcde"]; BEAST_EXPECT(ValStatus::current == harness.add(a.partial(ledgerABCDE))); BEAST_EXPECT(ValStatus::current == harness.add(b.partial(ledgerABCDE))); BEAST_EXPECT( @@ -890,9 +899,9 @@ class Validations_test : public beast::unit_test::suite testcase("NumTrustedForLedger"); LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(); - Node b = harness.makeNode(); - Ledger ledgerA = h["a"]; + Node const a = harness.makeNode(); + Node const b = harness.makeNode(); + Ledger const ledgerA = h["a"]; BEAST_EXPECT(ValStatus::current == harness.add(a.partial(ledgerA))); BEAST_EXPECT(harness.vals().numTrustedForLedger(ledgerA.id()) == 0); @@ -911,7 +920,7 @@ class Validations_test : public beast::unit_test::suite beast::manual_clock clock; SeqEnforcer enforcer; - ValidationParms p; + ValidationParms const p; BEAST_EXPECT(enforcer(clock.now(), Seq{1}, p)); BEAST_EXPECT(enforcer(clock.now(), Seq{10}, p)); @@ -933,9 +942,9 @@ class Validations_test : public beast::unit_test::suite TestValidations& vals, hash_set const& listed, std::vector const& trustedVals) { - Ledger::ID testID = + Ledger::ID const testID = trustedVals.empty() ? this->genesisLedger.id() : trustedVals[0].ledgerID(); - Ledger::Seq testSeq = + Ledger::Seq const testSeq = trustedVals.empty() ? this->genesisLedger.seq() : trustedVals[0].seq(); BEAST_EXPECT(vals.currentTrusted() == trustedVals); BEAST_EXPECT(vals.getCurrentNodeIDs() == listed); @@ -957,12 +966,12 @@ class Validations_test : public beast::unit_test::suite // Trusted to untrusted LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(); - Ledger ledgerAB = h["ab"]; - Validation v = a.validate(ledgerAB); + Node const a = harness.makeNode(); + Ledger const ledgerAB = h["ab"]; + Validation const v = a.validate(ledgerAB); BEAST_EXPECT(ValStatus::current == harness.add(v)); - hash_set listed({a.nodeID()}); + hash_set const listed({a.nodeID()}); std::vector trustedVals({v}); checker(harness.vals(), listed, trustedVals); @@ -977,11 +986,11 @@ class Validations_test : public beast::unit_test::suite TestHarness harness(h.oracle); Node a = harness.makeNode(); a.untrust(); - Ledger ledgerAB = h["ab"]; - Validation v = a.validate(ledgerAB); + Ledger const ledgerAB = h["ab"]; + Validation const v = a.validate(ledgerAB); BEAST_EXPECT(ValStatus::current == harness.add(v)); - hash_set listed({a.nodeID()}); + hash_set const listed({a.nodeID()}); std::vector trustedVals; checker(harness.vals(), listed, trustedVals); @@ -994,11 +1003,11 @@ class Validations_test : public beast::unit_test::suite // Trusted but not acquired -> untrusted LedgerHistoryHelper h; TestHarness harness(h.oracle); - Node a = harness.makeNode(); - Validation v = a.validate(Ledger::ID{2}, Ledger::Seq{2}, 0s, 0s, true); + Node const a = harness.makeNode(); + Validation const v = a.validate(Ledger::ID{2}, Ledger::Seq{2}, 0s, 0s, true); BEAST_EXPECT(ValStatus::current == harness.add(v)); - hash_set listed({a.nodeID()}); + hash_set const listed({a.nodeID()}); std::vector trustedVals({v}); auto& vals = harness.vals(); BEAST_EXPECT(vals.currentTrusted() == trustedVals); diff --git a/src/test/core/ClosureCounter_test.cpp b/src/test/core/ClosureCounter_test.cpp index fe3f0a219f..088b7b9ff9 100644 --- a/src/test/core/ClosureCounter_test.cpp +++ b/src/test/core/ClosureCounter_test.cpp @@ -17,7 +17,7 @@ class ClosureCounter_test : public beast::unit_test::suite // We're only using Env for its Journal. That Journal gives better // coverage in unit tests. test::jtx::Env env_{*this, jtx::envconfig(), nullptr, beast::severities::kDisabled}; - beast::Journal j{env_.app().journal("ClosureCounter_test")}; + beast::Journal j{env_.app().getJournal("ClosureCounter_test")}; void testConstruction() @@ -299,7 +299,7 @@ class ClosureCounter_test : public beast::unit_test::suite BEAST_EXPECT(voidCounter.count() == 0); // Wait for the thread to exit. - while (threadExited == false) + while (!threadExited) ; localThread.join(); } diff --git a/src/test/core/Config_test.cpp b/src/test/core/Config_test.cpp index e9f7354482..a7f44836d5 100644 --- a/src/test/core/Config_test.cpp +++ b/src/test/core/Config_test.cpp @@ -268,7 +268,7 @@ public: Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [server] port_rpc port_peer @@ -297,15 +297,15 @@ port_wss_admin auto const cwd = current_path(); // Test both config file names. - char const* configFiles[] = {Config::configFileName, Config::configLegacyName}; + std::string_view const configFiles[] = {Config::configFileName, Config::configLegacyName}; // Config file in current directory. for (auto const& configFile : configFiles) { // Use a temporary directory for testing. - beast::temp_dir td; + beast::temp_dir const td; current_path(td.path()); - path const f = td.file(configFile); + path const f = td.file(std::string{configFile}); std::ofstream o(f.string()); o << detail::configContents("", ""); o.close(); @@ -325,13 +325,13 @@ port_wss_admin { // Point the current working directory to a temporary directory, so // we don't pick up an actual config file from the repository root. - beast::temp_dir td; + beast::temp_dir const td; current_path(td.path()); // The XDG config directory is set: the config file must be in a // subdirectory named after the system. { - beast::temp_dir tc; + beast::temp_dir const tc; // Set the HOME and XDG_CONFIG_HOME environment variables. The // HOME variable is not used when XDG_CONFIG_HOME is set, but @@ -344,7 +344,7 @@ port_wss_admin // Create the config file in '${XDG_CONFIG_HOME}/[systemName]'. path p = tc.file(systemName()); create_directory(p); - p = tc.file(systemName() + "/" + configFile); + p = tc.file(systemName() + "/" + std::string{configFile}); std::ofstream o(p.string()); o << detail::configContents("", ""); o.close(); @@ -358,14 +358,14 @@ port_wss_admin "/Users/dummy/xrpld/config/log/debug.log"); // Restore the environment variables. - h ? setenv("HOME", h, 1) : unsetenv("HOME"); - x ? setenv("XDG_CONFIG_HOME", x, 1) : unsetenv("XDG_CONFIG_HOME"); + (h != nullptr) ? setenv("HOME", h, 1) : unsetenv("HOME"); + (x != nullptr) ? setenv("XDG_CONFIG_HOME", x, 1) : unsetenv("XDG_CONFIG_HOME"); } // The XDG config directory is not set: the config file must be in a // subdirectory named .config followed by the system name. { - beast::temp_dir tc; + beast::temp_dir const tc; // Set only the HOME environment variable. char const* h = getenv("HOME"); @@ -380,7 +380,7 @@ port_wss_admin s += "/" + systemName(); p = tc.file(s); create_directory(p); - p = tc.file(s + "/" + configFile); + p = tc.file(s + "/" + std::string{configFile}); std::ofstream o(p.string()); o << detail::configContents("", ""); o.close(); @@ -394,8 +394,8 @@ port_wss_admin "/Users/dummy/xrpld/config/log/debug.log"); // Restore the environment variables. - h ? setenv("HOME", h, 1) : unsetenv("HOME"); - if (x) + (h != nullptr) ? setenv("HOME", h, 1) : unsetenv("HOME"); + if (x != nullptr) setenv("XDG_CONFIG_HOME", x, 1); } } @@ -626,7 +626,7 @@ main { // load validators from config into single section Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validators] n949f75evCHwgyP4fPVgaHqNHxUVN15PsJEZ3B3HnXPcPjcZAoy7 n9MD5h24qrQqiyBC8aeqqCWvpiBiYQ3jxSr91uiDvmrkyHRdYLUj @@ -644,7 +644,7 @@ nHBu9PTL9dn2GuZtdW4U2WzBwffyX9qsQCd9CNU4Z5YG3PQfViM8 { // load validator list sites and keys from config Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -674,7 +674,7 @@ trust-these-validators.gov { // load validator list sites and keys from config Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -705,7 +705,7 @@ trust-these-validators.gov // load should throw if [validator_list_threshold] is greater than // the number of [validator_list_keys] Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -734,7 +734,7 @@ trust-these-validators.gov { // load should throw if [validator_list_threshold] is malformed Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -763,7 +763,7 @@ value = 2 { // load should throw if [validator_list_threshold] is negative Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -790,7 +790,7 @@ trust-these-validators.gov // load should throw if [validator_list_sites] is configured but // [validator_list_keys] is not Config c; - std::string toLoad(R"xrpldConfig( + std::string const toLoad(R"xrpldConfig( [validator_list_sites] xrpl-validators.com trust-these-validators.gov @@ -958,7 +958,7 @@ trust-these-validators.gov // load should throw if [validators], [validator_keys] and // [validator_list_keys] are missing from xrpld.cfg and // validators file - Config c; + Config const c; boost::format cc("[validators_file]\n%1%\n"); std::string error; detail::ValidatorsTxtGuard const vtg(*this, "test_cfg", "validators.cfg"); @@ -968,7 +968,7 @@ trust-these-validators.gov "[validators], [validator_keys] or [validator_list_keys] " "section: " + vtg.validatorsFile(); - std::ofstream o(vtg.validatorsFile()); + std::ofstream const o(vtg.validatorsFile()); try { Config c2; @@ -1141,7 +1141,7 @@ trust-these-validators.gov Config cfg; /* NOTE: this string includes some explicit * space chars in order to verify proper trimming */ - std::string toLoad( + std::string const toLoad( R"( [port_rpc])" "\x20" @@ -1182,7 +1182,7 @@ r.ripple.com 51235 Config cfg; /* NOTE: this string includes some explicit * space chars in order to verify proper trimming */ - std::string toLoad( + std::string const toLoad( R"( [port_rpc])" "\x20" @@ -1261,7 +1261,7 @@ r.ripple.com:51235 bool had_comment; }; - std::array tests = { + std::array const tests = { {{"password = aaaa\\#bbbb", "password", "aaaa#bbbb", false}, {"password = aaaa#bbbb", "password", "aaaa", true}, {"password = aaaa #bbbb", "password", "aaaa", true}, @@ -1419,7 +1419,7 @@ r.ripple.com:51235 bool shouldPass; }; - std::vector units = { + std::vector const units = { {"seconds", 1, 15 * 60, false}, {"minutes", 60, 14, false}, {"minutes", 60, 15, true}, diff --git a/src/test/core/Coroutine_test.cpp b/src/test/core/Coroutine_test.cpp index 73dc3c2f8f..4cfb86f931 100644 --- a/src/test/core/Coroutine_test.cpp +++ b/src/test/core/Coroutine_test.cpp @@ -34,7 +34,7 @@ public: void signal() { - std::lock_guard lk(mutex_); + std::lock_guard const lk(mutex_); signaled_ = true; cv_.notify_all(); } diff --git a/src/test/core/JobQueue_test.cpp b/src/test/core/JobQueue_test.cpp index bf6a5590e6..13142c299f 100644 --- a/src/test/core/JobQueue_test.cpp +++ b/src/test/core/JobQueue_test.cpp @@ -23,7 +23,7 @@ class JobQueue_test : public beast::unit_test::suite jQueue.addJob(jtCLIENT, "JobAddTest1", [&jobRan]() { jobRan = true; }) == true); // Wait for the Job to run. - while (jobRan == false) + while (!jobRan) ; } { diff --git a/src/test/core/SociDB_test.cpp b/src/test/core/SociDB_test.cpp index 66b368176d..c58c34756a 100644 --- a/src/test/core/SociDB_test.cpp +++ b/src/test/core/SociDB_test.cpp @@ -7,6 +7,8 @@ #include #include +#include + namespace xrpl { class SociDB_test final : public TestSuite { @@ -87,7 +89,7 @@ public: for (auto const& i : d) { - DBConfig sc(c, i.first); + DBConfig const sc(c, i.first); BEAST_EXPECT(boost::ends_with(sc.connectionString(), i.first + i.second)); } } @@ -97,7 +99,7 @@ public: testcase("open"); BasicConfig c; setupSQLiteConfig(c, getDatabasePath()); - DBConfig sc(c, "SociTestDB"); + DBConfig const sc(c, "SociTestDB"); std::vector const stringData({"String1", "String2", "String3"}); std::vector const intData({1, 2, 3}); auto checkValues = [this, &stringData, &intData](soci::session& s) { @@ -142,7 +144,7 @@ public: { namespace bfs = boost::filesystem; // Remove the database - bfs::path dbPath(sc.connectionString()); + bfs::path const dbPath(sc.connectionString()); if (bfs::is_regular_file(dbPath)) bfs::remove(dbPath); } @@ -154,7 +156,7 @@ public: testcase("select"); BasicConfig c; setupSQLiteConfig(c, getDatabasePath()); - DBConfig sc(c, "SociTestDB"); + DBConfig const sc(c, "SociTestDB"); std::vector const ubid( {(std::uint64_t)std::numeric_limits::max(), 20, 30}); std::vector const bid({-10, -20, -30}); @@ -272,7 +274,7 @@ public: { namespace bfs = boost::filesystem; // Remove the database - bfs::path dbPath(sc.connectionString()); + bfs::path const dbPath(sc.connectionString()); if (bfs::is_regular_file(dbPath)) bfs::remove(dbPath); } @@ -283,11 +285,12 @@ public: testcase("deleteWithSubselect"); BasicConfig c; setupSQLiteConfig(c, getDatabasePath()); - DBConfig sc(c, "SociTestDB"); + DBConfig const sc(c, "SociTestDB"); { soci::session s; sc.open(s); - char const* dbInit[] = { + + std::string_view const dbInit[] = { "BEGIN TRANSACTION;", "CREATE TABLE Ledgers ( \ LedgerHash CHARACTER(64) PRIMARY KEY, \ @@ -323,7 +326,7 @@ public: } namespace bfs = boost::filesystem; // Remove the database - bfs::path dbPath(sc.connectionString()); + bfs::path const dbPath(sc.connectionString()); if (bfs::is_regular_file(dbPath)) bfs::remove(dbPath); } diff --git a/src/test/core/Workers_test.cpp b/src/test/core/Workers_test.cpp index 65245b8c94..6631cff1c4 100644 --- a/src/test/core/Workers_test.cpp +++ b/src/test/core/Workers_test.cpp @@ -88,7 +88,7 @@ public: void processTask(int instance) override { - std::lock_guard lk{mut}; + std::lock_guard const lk{mut}; if (--count == 0) cv.notify_all(); } @@ -106,7 +106,7 @@ public: std::to_string(tc3)); TestCallback cb; - std::unique_ptr perfLog = std::make_unique(); + std::unique_ptr const perfLog = std::make_unique(); Workers w(cb, perfLog.get(), "Test", tc1); BEAST_EXPECT(w.getNumberOfThreads() == tc1); diff --git a/src/test/csf/BasicNetwork.h b/src/test/csf/BasicNetwork.h index 697b20c2c7..85c77ac47d 100644 --- a/src/test/csf/BasicNetwork.h +++ b/src/test/csf/BasicNetwork.h @@ -199,7 +199,7 @@ BasicNetwork::disconnect(Peer const& peer1, Peer const& peer2) { if (!links_.disconnect(peer1, peer2)) return false; - bool r = links_.disconnect(peer2, peer1); + bool const r = links_.disconnect(peer2, peer1); (void)r; assert(r); return true; diff --git a/src/test/csf/Digraph_test.cpp b/src/test/csf/Digraph_test.cpp index a183234903..1c34bbcfec 100644 --- a/src/test/csf/Digraph_test.cpp +++ b/src/test/csf/Digraph_test.cpp @@ -57,7 +57,7 @@ public: // only 'a' has out edges BEAST_EXPECT(graph.outVertices().size() == 1); - std::vector expected = {'b', 'c'}; + std::vector const expected = {'b', 'c'}; BEAST_EXPECT((graph.outVertices('a') == expected)); BEAST_EXPECT(graph.outVertices('b').size() == 0); @@ -66,7 +66,7 @@ public: std::stringstream ss; graph.saveDot(ss, [](char v) { return v; }); - std::string expectedDot = + std::string const expectedDot = "digraph {\n" "a -> b;\n" "a -> c;\n" diff --git a/src/test/csf/Histogram.h b/src/test/csf/Histogram.h index 9e7b471a2b..cbc2d42d6c 100644 --- a/src/test/csf/Histogram.h +++ b/src/test/csf/Histogram.h @@ -92,7 +92,7 @@ public: percentile(float p) const { assert(p >= 0 && p <= 1); - std::size_t pos = std::round(p * samples); + std::size_t const pos = std::round(p * samples); if (counts_.empty()) return T{}; diff --git a/src/test/csf/Peer.h b/src/test/csf/Peer.h index c36d600e6c..fb1238990e 100644 --- a/src/test/csf/Peer.h +++ b/src/test/csf/Peer.h @@ -231,7 +231,7 @@ struct Peer // Number of proposers in the prior round std::size_t prevProposers = 0; // Duration of prior round - std::chrono::milliseconds prevRoundTime; + std::chrono::milliseconds prevRoundTime{}; // Quorum of validations needed for a ledger to be fully validated // TODO: Use the logic in ValidatorList to set this dynamically @@ -501,16 +501,10 @@ struct Peer NetClock::duration const& closeResolution, ConsensusCloseTimes const& rawCloseTimes, ConsensusMode const& mode, - Json::Value&& consensusJson) + Json::Value const& consensusJson) { onAccept( - result, - prevLedger, - closeResolution, - rawCloseTimes, - mode, - std::move(consensusJson), - validating()); + result, prevLedger, closeResolution, rawCloseTimes, mode, consensusJson, validating()); } void @@ -520,10 +514,10 @@ struct Peer NetClock::duration const& closeResolution, ConsensusCloseTimes const& rawCloseTimes, ConsensusMode const& mode, - Json::Value&& consensusJson, + Json::Value const& consensusJson, bool const validating) { - schedule(delays.ledgerAccept, [=, this]() { + schedule(delays.ledgerAccept, [mode, result, prevLedger, closeResolution, this]() { bool const proposing = mode == ConsensusMode::proposing; bool const consensusFail = result.state == ConsensusState::MovedOn; @@ -550,9 +544,9 @@ struct Peer if (runAsValidator && isCompatible && !consensusFail && validations.canValidateSeq(newLedger.seq())) { - bool isFull = proposing; + bool const isFull = proposing; - Validation v{newLedger.id(), newLedger.seq(), now(), now(), key, id, isFull}; + Validation const v{newLedger.id(), newLedger.seq(), now(), now(), key, id, isFull}; // share the new validation; it is trusted by the receiver share(v); // we trust ourselves @@ -880,7 +874,7 @@ struct Peer issue(StartRound{bestLCL, lastClosedLedger}); // Not yet modeling dynamic UNL. - hash_set nowUntrusted; + hash_set const nowUntrusted; consensus.startRound(now(), bestLCL, lastClosedLedger, nowUntrusted, runAsValidator, {}); } diff --git a/src/test/csf/PeerGroup.h b/src/test/csf/PeerGroup.h index e900ab9934..5df6de84a6 100644 --- a/src/test/csf/PeerGroup.h +++ b/src/test/csf/PeerGroup.h @@ -313,8 +313,8 @@ randomRankedTrust( Generator& g) { std::vector const groups = randomRankedGroups(peers, ranks, numGroups, sizeDist, g); + std::uniform_int_distribution u(0, groups.size() - 1); // NOLINT(misc-const-correctness) - std::uniform_int_distribution u(0, groups.size() - 1); for (auto& peer : peers) { for (auto& target : groups[u(g)]) @@ -337,8 +337,8 @@ randomRankedConnect( SimDuration delay) { std::vector const groups = randomRankedGroups(peers, ranks, numGroups, sizeDist, g); + std::uniform_int_distribution u(0, groups.size() - 1); // NOLINT(misc-const-correctness) - std::uniform_int_distribution u(0, groups.size() - 1); for (auto& peer : peers) { for (auto& target : groups[u(g)]) diff --git a/src/test/csf/Sim.h b/src/test/csf/Sim.h index 3525258c59..e5f64cae1f 100644 --- a/src/test/csf/Sim.h +++ b/src/test/csf/Sim.h @@ -129,8 +129,8 @@ public: Nodes in the group are synchronized if they share the same last fully validated and last generated ledger. */ - bool - synchronized(PeerGroup const& g) const; + static bool + synchronized(PeerGroup const& g); /** Check whether all peers in the network are synchronized */ diff --git a/src/test/csf/TrustGraph.h b/src/test/csf/TrustGraph.h index bae0be4af7..3f1fcae0c1 100644 --- a/src/test/csf/TrustGraph.h +++ b/src/test/csf/TrustGraph.h @@ -122,9 +122,9 @@ public: { auto const& unlA = uniqueUNLs[i]; auto const& unlB = uniqueUNLs[j]; - double rhs = 2.0 * (1. - quorum) * std::max(unlA.size(), unlB.size()); + double const rhs = 2.0 * (1. - quorum) * std::max(unlA.size(), unlB.size()); - int intersectionSize = std::count_if( + int const intersectionSize = std::count_if( unlA.begin(), unlA.end(), [&](Peer p) { return unlB.find(p) != unlB.end(); }); if (intersectionSize < rhs) diff --git a/src/test/csf/Tx.h b/src/test/csf/Tx.h index f919b650db..81393f7bda 100644 --- a/src/test/csf/Tx.h +++ b/src/test/csf/Tx.h @@ -100,7 +100,8 @@ public: { } - TxSet(MutableTxSet&& m) : txs_{std::move(m.txs_)}, id_{calcID(txs_)} + TxSet(MutableTxSet&& m) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) + : txs_{m.txs_}, id_{calcID(txs_)} { } @@ -161,7 +162,7 @@ private: TxSetType txs_; //! The unique ID of this tx set - ID id_; + ID id_{}; }; //------------------------------------------------------------------------------ diff --git a/src/test/csf/impl/Sim.cpp b/src/test/csf/impl/Sim.cpp index 4fbee56f0f..a775dd30ff 100644 --- a/src/test/csf/impl/Sim.cpp +++ b/src/test/csf/impl/Sim.cpp @@ -33,7 +33,7 @@ Sim::synchronized() const } bool -Sim::synchronized(PeerGroup const& g) const +Sim::synchronized(PeerGroup const& g) { if (g.size() < 1) return true; diff --git a/src/test/csf/impl/ledgers.cpp b/src/test/csf/impl/ledgers.cpp index 33e9b123c5..9b0a4e3973 100644 --- a/src/test/csf/impl/ledgers.cpp +++ b/src/test/csf/impl/ledgers.cpp @@ -42,14 +42,14 @@ mismatch(Ledger const& a, Ledger const& b) // end is 1 past end of range Seq start{0}; - Seq end = std::min(a.seq() + Seq{1}, b.seq() + Seq{1}); + Seq const end = std::min(a.seq() + Seq{1}, b.seq() + Seq{1}); // Find mismatch in [start,end) // Binary search Seq count = end - start; while (count > Seq{0}) { - Seq step = count / Seq{2}; + Seq const step = count / Seq{2}; Seq curr = start + step; if (a[curr] == b[curr]) { @@ -123,7 +123,7 @@ LedgerOracle::lookup(Ledger::ID const& id) const } std::size_t -LedgerOracle::branches(std::set const& ledgers) const +LedgerOracle::branches(std::set const& ledgers) { // Tips always maintains the Ledgers with largest sequence number // along all known chains. diff --git a/src/test/csf/ledgers.h b/src/test/csf/ledgers.h index 9da1c2182a..67a7427af6 100644 --- a/src/test/csf/ledgers.h +++ b/src/test/csf/ledgers.h @@ -2,13 +2,12 @@ #include -#include - #include #include #include #include #include +#include #include @@ -278,8 +277,8 @@ public: O \--> B */ - std::size_t - branches(std::set const& ledgers) const; + static std::size_t + branches(std::set const& ledgers); }; /** Helper for writing unit tests with controlled ledger histories. diff --git a/src/test/csf/random.h b/src/test/csf/random.h index fc5098af32..f3ecca1dbc 100644 --- a/src/test/csf/random.h +++ b/src/test/csf/random.h @@ -25,7 +25,7 @@ random_weighted_shuffle(std::vector v, std::vector w, G& g) for (int i = 0; i < v.size() - 1; ++i) { // pick a random item weighted by w - std::discrete_distribution<> dd(w.begin() + i, w.end()); + std::discrete_distribution<> dd(w.begin() + i, w.end()); // NOLINT(misc-const-correctness) auto idx = dd(g); std::swap(v[i], v[idx]); std::swap(w[i], w[idx]); diff --git a/src/test/csf/timers.h b/src/test/csf/timers.h index c8d71d5b7a..beb4e142d9 100644 --- a/src/test/csf/timers.h +++ b/src/test/csf/timers.h @@ -47,11 +47,11 @@ public: beat(SimTime when) { using namespace std::chrono; - RealTime realTime = RealClock::now(); - SimTime simTime = when; + RealTime const realTime = RealClock::now(); + SimTime const simTime = when; - RealDuration realDuration = realTime - startRealTime_; - SimDuration simDuration = simTime - startSimTime_; + RealDuration const realDuration = realTime - startRealTime_; + SimDuration const simDuration = simTime - startSimTime_; out_ << "Heartbeat. Time Elapsed: {sim: " << duration_cast(simDuration).count() << "s | real: " << duration_cast(realDuration).count() << "s}\n" << std::flush; diff --git a/src/test/jtx/AMMTest.h b/src/test/jtx/AMMTest.h index 78e26b9e40..a311d9c638 100644 --- a/src/test/jtx/AMMTest.h +++ b/src/test/jtx/AMMTest.h @@ -96,11 +96,11 @@ protected: class AMMTest : public jtx::AMMTestBase { protected: - XRPAmount - reserve(jtx::Env& env, std::uint32_t count) const; + static XRPAmount + reserve(jtx::Env& env, std::uint32_t count); - XRPAmount - ammCrtFee(jtx::Env& env) const; + static XRPAmount + ammCrtFee(jtx::Env& env); /* Path_test */ /************************************************/ @@ -127,7 +127,7 @@ protected: void signal() { - std::lock_guard lk(mutex_); + std::lock_guard const lk(mutex_); signaled_ = true; cv_.notify_all(); } diff --git a/src/test/jtx/CaptureLogs.h b/src/test/jtx/CaptureLogs.h index 8419c4dc70..8c8da6817b 100644 --- a/src/test/jtx/CaptureLogs.h +++ b/src/test/jtx/CaptureLogs.h @@ -37,14 +37,14 @@ class CaptureLogs : public Logs void write(beast::severities::Severity level, std::string const& text) override { - std::lock_guard lock(strmMutex_); + std::lock_guard const lock(strmMutex_); strm_ << text; } void writeAlways(beast::severities::Severity level, std::string const& text) override { - std::lock_guard lock(strmMutex_); + std::lock_guard const lock(strmMutex_); strm_ << text; } }; diff --git a/src/test/jtx/Env.h b/src/test/jtx/Env.h index 2ac0ca7435..b494ade31c 100644 --- a/src/test/jtx/Env.h +++ b/src/test/jtx/Env.h @@ -11,17 +11,17 @@ #include #include -#include #include #include -#include #include +#include #include #include #include #include #include +#include #include #include #include @@ -189,7 +189,7 @@ public: beast::severities::Severity thresh = beast::severities::kError) : test(suite_) , bundle_(suite_, std::move(config), std::move(logs), thresh) - , journal{bundle_.app->journal("Env")} + , journal{bundle_.app->getJournal("Env")} { memoize(Account::master); Pathfinder::initPathTable(); @@ -328,7 +328,7 @@ public: std::shared_ptr current() const { - return app().openLedger().current(); + return app().getOpenLedger().current(); } /** Returns the last closed ledger. @@ -510,6 +510,7 @@ public: */ // VFALCO NOTE This should return a unit-less amount PrettyAmount + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) balance(Account const& account, Asset const& asset) const; PrettyAmount diff --git a/src/test/jtx/Env_ss.h b/src/test/jtx/Env_ss.h index 9db96d5907..d6f5fd1a29 100644 --- a/src/test/jtx/Env_ss.h +++ b/src/test/jtx/Env_ss.h @@ -24,7 +24,7 @@ private: operator=(SignSubmitRunner&&) = delete; SignSubmitRunner(Env& env, JTx&& jt, std::source_location loc) - : env_(env), jt_(jt), loc_(loc) + : env_(env), jt_(std::move(jt)), loc_(loc) { } diff --git a/src/test/jtx/Env_test.cpp b/src/test/jtx/Env_test.cpp index bd40ac9a81..4e9f0d99e2 100644 --- a/src/test/jtx/Env_test.cpp +++ b/src/test/jtx/Env_test.cpp @@ -28,7 +28,7 @@ public: } // Declarations in Account.h - void + static void testAccount() { using namespace jtx; @@ -37,7 +37,7 @@ public: Account b(a); a = b; a = std::move(b); - Account c(std::move(a)); + Account const c(std::move(a)); } Account("alice"); // NOLINT(bugprone-unused-raii) Account("alice", KeyType::secp256k1); // NOLINT(bugprone-unused-raii) @@ -635,9 +635,10 @@ public: std::uint32_t const aliceSeq = env.seq("alice"); // Sign jsonNoop. - Json::Value jsonNoop = env.json(noop("alice"), fee(baseFee), seq(aliceSeq), sig("alice")); + Json::Value const jsonNoop = + env.json(noop("alice"), fee(baseFee), seq(aliceSeq), sig("alice")); // Re-sign jsonNoop. - JTx jt = env.jt(jsonNoop); + JTx const jt = env.jt(jsonNoop); env(jt); } @@ -752,7 +753,7 @@ public: Env env{*this, missingSomeFeatures}; BEAST_EXPECT(env.app().config().features.size() == (supported.count() - 2)); foreachFeature(supported, [&](uint256 const& f) { - bool hasnot = (f == featureDynamicMPT || f == featureTokenEscrow); + bool const hasnot = (f == featureDynamicMPT || f == featureTokenEscrow); this->BEAST_EXPECT(hasnot != hasFeature(env, f)); }); } @@ -771,7 +772,7 @@ public: BEAST_EXPECT(hasFeature(env, *neverSupportedFeat)); foreachFeature(supported, [&](uint256 const& f) { - bool has = (f == featureDynamicMPT || f == featureTokenEscrow); + bool const has = (f == featureDynamicMPT || f == featureTokenEscrow); this->BEAST_EXPECT(has == hasFeature(env, f)); }); } @@ -787,7 +788,7 @@ public: BEAST_EXPECT(env.app().config().features.size() == (supported.count() - 2 + 1)); BEAST_EXPECT(hasFeature(env, *neverSupportedFeat)); foreachFeature(supported, [&](uint256 const& f) { - bool hasnot = (f == featureDynamicMPT || f == featureTokenEscrow); + bool const hasnot = (f == featureDynamicMPT || f == featureTokenEscrow); this->BEAST_EXPECT(hasnot != hasFeature(env, f)); }); } @@ -811,7 +812,7 @@ public: testExceptionalShutdown() { except([this] { - jtx::Env env{ + jtx::Env const env{ *this, jtx::envconfig([](std::unique_ptr cfg) { (*cfg).deprecatedClearSection("port_rpc"); diff --git a/src/test/jtx/Oracle.h b/src/test/jtx/Oracle.h index 8efd17802c..7924d278e5 100644 --- a/src/test/jtx/Oracle.h +++ b/src/test/jtx/Oracle.h @@ -99,7 +99,7 @@ private: static inline std::uint32_t fee = 0; Env& env_; AccountID owner_; - std::uint32_t documentID_; + std::uint32_t documentID_{}; private: void diff --git a/src/test/jtx/TestHelpers.h b/src/test/jtx/TestHelpers.h index 2836748ec3..4da086b05b 100644 --- a/src/test/jtx/TestHelpers.h +++ b/src/test/jtx/TestHelpers.h @@ -317,7 +317,7 @@ template Json::Value getAccountLines(Env& env, AccountID const& acctId, IOU... ious) { - auto const jrr = getAccountLines(env, acctId); + auto jrr = getAccountLines(env, acctId); Json::Value res; for (auto const& line : jrr[jss::lines]) { @@ -559,7 +559,6 @@ allPathElements(AccountID const& a, Issue const& iss); namespace check { /** Create a check. */ -// clang-format off template requires std::is_same_v Json::Value @@ -572,7 +571,6 @@ create(A const& account, A const& dest, STAmount const& sendMax) jv[sfTransactionType.jsonName] = jss::CheckCreate; return jv; } -// clang-format on inline Json::Value create(jtx::Account const& account, jtx::Account const& dest, STAmount const& sendMax) @@ -598,7 +596,7 @@ checkMetrics( std::uint64_t expectedMedFeeLevel = minEscalationFeeLevel.fee(), std::source_location const location = std::source_location::current()) { - int line = location.line(); + int const line = location.line(); char const* file = location.file_name(); FeeLevel64 const expectedMin{expectedMinFeeLevel}; FeeLevel64 const expectedMed{expectedMedFeeLevel}; diff --git a/src/test/jtx/TrustedPublisherServer.h b/src/test/jtx/TrustedPublisherServer.h index dc7682bb72..d36babf380 100644 --- a/src/test/jtx/TrustedPublisherServer.h +++ b/src/test/jtx/TrustedPublisherServer.h @@ -170,7 +170,7 @@ public: } data.pop_back(); data += "]}"; - std::string blob = base64_encode(data); + std::string const blob = base64_encode(data); return std::make_pair(data, blob); }(); auto const sig = strHex(sign(keys.first, keys.second, makeSlice(data))); @@ -198,7 +198,7 @@ public: } data.pop_back(); data += "]}"; - std::string blob = base64_encode(data); + std::string const blob = base64_encode(data); auto const sig = strHex(sign(keys.first, keys.second, makeSlice(data))); blobInfo.emplace_back(blob, sig); } @@ -562,7 +562,7 @@ private: res.result(http::status::ok); res.insert("Content-Type", "text/example"); // if huge was requested, lie about content length - std::uint64_t cl = boost::starts_with(path, "/textfile/huge") + std::uint64_t const cl = boost::starts_with(path, "/textfile/huge") ? std::numeric_limits::max() : 1024; res.content_length(cl); diff --git a/src/test/jtx/amount.h b/src/test/jtx/amount.h index c4e97502db..1912f01330 100644 --- a/src/test/jtx/amount.h +++ b/src/test/jtx/amount.h @@ -196,8 +196,8 @@ public: PrettyAmount operator()(Number v, Number::rounding_mode rounding = Number::getround()) const { - NumberRoundModeGuard mg(rounding); - STAmount amount{asset_, v * scale_}; + NumberRoundModeGuard const mg(rounding); + STAmount const amount{asset_, v * scale_}; return {amount, ""}; } diff --git a/src/test/jtx/flags.h b/src/test/jtx/flags.h index 3dde1fa414..a203f1461e 100644 --- a/src/test/jtx/flags.h +++ b/src/test/jtx/flags.h @@ -12,7 +12,7 @@ namespace detail { class flags_helper { protected: - std::uint32_t mask_; + std::uint32_t mask_{0}; private: void @@ -79,7 +79,7 @@ private: protected: template - flags_helper(Args... args) : mask_(0) + flags_helper(Args... args) { set_args(args...); } diff --git a/src/test/jtx/impl/AMM.cpp b/src/test/jtx/impl/AMM.cpp index 6b2042efda..fe8fb8c443 100644 --- a/src/test/jtx/impl/AMM.cpp +++ b/src/test/jtx/impl/AMM.cpp @@ -443,7 +443,7 @@ AMM::deposit( // If including asset1In and asset2In or tokens as // deposit min amounts then must set the flags // explicitly instead of relying on this logic. - if (!(jvFlags & tfDepositSubTx)) + if ((jvFlags & tfDepositSubTx) == 0u) { if (tokens && !asset1In) { @@ -573,7 +573,7 @@ AMM::withdraw( std::uint32_t jvFlags = 0; if (flags) jvFlags = *flags; - if (!(jvFlags & tfWithdrawSubTx)) + if ((jvFlags & tfWithdrawSubTx) == 0u) { if (tokens && !asset1Out) { @@ -677,13 +677,13 @@ AMM::bid(BidArg const& arg) }; if (arg.bidMin) { - STAmount saTokens = getBid(*arg.bidMin); + STAmount const saTokens = getBid(*arg.bidMin); saTokens.setJson(jv[jss::BidMin]); bidMin_ = saTokens.iou(); } if (arg.bidMax) { - STAmount saTokens = getBid(*arg.bidMax); + STAmount const saTokens = getBid(*arg.bidMax); saTokens.setJson(jv[jss::BidMax]); bidMax_ = saTokens.iou(); } @@ -775,7 +775,7 @@ AMM::expectAuctionSlot(auto&& cb) const // to avoid the failure. auto const slotFee = auctionSlot[~sfDiscountedFee].value_or(0); auto const slotInterval = ammAuctionTimeSlot( - env_.app().timeKeeper().now().time_since_epoch().count(), auctionSlot); + env_.app().getTimeKeeper().now().time_since_epoch().count(), auctionSlot); auto const slotPrice = auctionSlot[sfPrice].iou(); auto const authAccounts = auctionSlot.getFieldArray(sfAuthAccounts); return cb(slotFee, slotInterval, slotPrice, authAccounts); diff --git a/src/test/jtx/impl/AMMTest.cpp b/src/test/jtx/impl/AMMTest.cpp index ab8c1578a3..9d9a537210 100644 --- a/src/test/jtx/impl/AMMTest.cpp +++ b/src/test/jtx/impl/AMMTest.cpp @@ -119,7 +119,7 @@ AMMTestBase::testAMM(std::function const& cb, TestAM return defXRP; return a + XRP(1000); } - auto const defIOU = STAmount{a.issue(), 30000}; + auto defIOU = STAmount{a.issue(), 30000}; if (a <= defIOU) return defIOU; return a + STAmount{a.issue(), 1000}; @@ -149,13 +149,13 @@ AMMTestBase::testAMM(std::function const& cb, TestAM } XRPAmount -AMMTest::reserve(jtx::Env& env, std::uint32_t count) const +AMMTest::reserve(jtx::Env& env, std::uint32_t count) { return env.current()->fees().accountReserve(count); } XRPAmount -AMMTest::ammCrtFee(jtx::Env& env) const +AMMTest::ammCrtFee(jtx::Env& env) { return env.current()->fees().increment; } diff --git a/src/test/jtx/impl/Env.cpp b/src/test/jtx/impl/Env.cpp index 3217f67cbe..a6344b5ab1 100644 --- a/src/test/jtx/impl/Env.cpp +++ b/src/test/jtx/impl/Env.cpp @@ -61,7 +61,7 @@ Env::AppBundle::AppBundle( config->SSL_VERIFY_DIR, config->SSL_VERIFY_FILE, config->SSL_VERIFY, debugLog()); owned = make_Application(std::move(config), std::move(logs), std::move(timeKeeper_)); app = owned.get(); - app->logs().threshold(thresh); + app->getLogs().threshold(thresh); if (!app->setup({})) Throw("Env::AppBundle: setup failed"); timeKeeper->set(app->getLedgerMaster().getClosedLedger()->header().closeTime); @@ -76,7 +76,7 @@ Env::AppBundle::~AppBundle() client.reset(); // Make sure all jobs finish, otherwise tests // might not get the coverage they expect. - if (app) + if (app != nullptr) { app->getJobQueue().rendezvous(); app->signalStop("~AppBundle"); @@ -218,6 +218,7 @@ Env::balance(Account const& account, MPTIssue const& mptIssue) const } PrettyAmount +// NOLINTNEXTLINE(readability-convert-member-functions-to-static) Env::balance(Account const& account, Asset const& asset) const { return std::visit([&](auto const& issue) { return balance(account, issue); }, asset.value()); @@ -468,7 +469,7 @@ Env::postconditions( // we didn't get the expected result. return; } - if (trace_) + if (trace_ != 0) { if (trace_ > 0) --trace_; @@ -511,7 +512,7 @@ Env::autofill_sig(JTx& jt) { auto& jv = jt.jv; - scope_success success([&]() { + scope_success const success([&]() { // Call all the post-signers after the main signers or autofill are done for (auto const& signer : jt.postSigners) signer(*this, jt); @@ -560,7 +561,7 @@ Env::autofill(JTx& jt) if (jt.fill_netid) { - uint32_t networkID = app().getNetworkIDService().getNetworkID(); + uint32_t const networkID = app().getNetworkIDService().getNetworkID(); if (!jv.isMember(jss::NetworkID) && networkID > 1024) jv[jss::NetworkID] = std::to_string(networkID); } @@ -636,14 +637,14 @@ Env::do_rpc( std::vector const& args, std::unordered_map const& headers) { - auto response = rpcClient(args, app().config(), app().logs(), apiVersion, headers); + auto response = rpcClient(args, app().config(), app().getLogs(), apiVersion, headers); for (unsigned ctr = 0; (ctr < retries_) and (response.first == rpcINTERNAL); ++ctr) { JLOG(journal.error()) << "Env::do_rpc error, retrying, attempt #" << ctr + 1 << " ..."; std::this_thread::sleep_for(std::chrono::milliseconds(500)); - response = rpcClient(args, app().config(), app().logs(), apiVersion, headers); + response = rpcClient(args, app().config(), app().getLogs(), apiVersion, headers); } return response.second; diff --git a/src/test/jtx/impl/Oracle.cpp b/src/test/jtx/impl/Oracle.cpp index 8bc456cd4e..d48432e8e4 100644 --- a/src/test/jtx/impl/Oracle.cpp +++ b/src/test/jtx/impl/Oracle.cpp @@ -12,7 +12,7 @@ namespace test { namespace jtx { namespace oracle { -Oracle::Oracle(Env& env, CreateArg const& arg, bool submit) : env_(env), documentID_{} +Oracle::Oracle(Env& env, CreateArg const& arg, bool submit) : env_(env) { // LastUpdateTime is checked to be in range // {close-maxLastUpdateTimeDelta, close+maxLastUpdateTimeDelta}. @@ -258,7 +258,7 @@ Oracle::set(UpdateArg const& arg) return s; assert(s.size() <= 20); // anything else must be 160-bit hex string - return strHex(s).append(40 - s.size() * 2, '0'); + return strHex(s).append(40 - (s.size() * 2), '0'); }; for (auto const& data : arg.series) { diff --git a/src/test/jtx/impl/WSClient.cpp b/src/test/jtx/impl/WSClient.cpp index ebe4721d60..0c9b72c4d0 100644 --- a/src/test/jtx/impl/WSClient.cpp +++ b/src/test/jtx/impl/WSClient.cpp @@ -272,7 +272,7 @@ private: rb_.consume(rb_.size()); auto m = std::make_shared(std::move(jv)); { - std::lock_guard lock(m_); + std::lock_guard const lock(m_); msgs_.push_front(m); cv_.notify_all(); } @@ -286,7 +286,7 @@ private: void on_read_done() { - std::lock_guard lock(m0_); + std::lock_guard const lock(m0_); b0_ = true; cv0_.notify_all(); } diff --git a/src/test/jtx/impl/directory.cpp b/src/test/jtx/impl/directory.cpp index bf63bc523b..da0a338e7c 100644 --- a/src/test/jtx/impl/directory.cpp +++ b/src/test/jtx/impl/directory.cpp @@ -15,7 +15,7 @@ bumpLastPage( std::function adjust) -> Expected { Expected res{}; - env.app().openLedger().modify([&](OpenView& view, beast::Journal j) -> bool { + env.app().getOpenLedger().modify([&](OpenView& view, beast::Journal j) -> bool { Sandbox sb(&view, tapNONE); // Find the root page diff --git a/src/test/jtx/impl/mpt.cpp b/src/test/jtx/impl/mpt.cpp index a6283bb6f9..0a6af63450 100644 --- a/src/test/jtx/impl/mpt.cpp +++ b/src/test/jtx/impl/mpt.cpp @@ -45,7 +45,7 @@ MPTTester::MPTTester(Env& env, Account const& issuer, MPTInit const& arg) if (arg.fund) { env_.fund(arg.xrp, issuer_); - for (auto it : holders_) + for (auto const& it : holders_) env_.fund(arg.xrpHolders, it.second); } if (close_) @@ -53,7 +53,7 @@ MPTTester::MPTTester(Env& env, Account const& issuer, MPTInit const& arg) if (arg.fund) { env_.require(owners(issuer_, 0)); - for (auto it : holders_) + for (auto const& it : holders_) { if (issuer_.id() == it.second.id()) Throw("Issuer can't be holder"); @@ -140,7 +140,7 @@ MPTTester::create(MPTCreate const& arg) if (id_) Throw("MPT can't be reused"); id_ = makeMptID(env_.seq(issuer_), issuer_); - Json::Value jv = createJV( + Json::Value const jv = createJV( {.issuer = issuer_, .maxAmt = arg.maxAmt, .assetScale = arg.assetScale, @@ -217,7 +217,7 @@ MPTTester::destroy(MPTDestroy const& arg) { if (!arg.id && !id_) Throw("MPT has not been created"); - Json::Value jv = + Json::Value const jv = destroyJV({.issuer = arg.issuer ? arg.issuer : issuer_, .id = arg.id ? arg.id : id_}); submit(arg, jv); } @@ -251,7 +251,7 @@ MPTTester::authorize(MPTAuthorize const& arg) { if (!arg.id && !id_) Throw("MPT has not been created"); - Json::Value jv = authorizeJV({ + Json::Value const jv = authorizeJV({ .account = arg.account ? arg.account : issuer_, .holder = arg.holder, .id = arg.id ? arg.id : id_, @@ -361,7 +361,7 @@ MPTTester::set(MPTSet const& arg) { if (!arg.id && !id_) Throw("MPT has not been created"); - Json::Value jv = setJV( + Json::Value const jv = setJV( {.account = arg.account ? arg.account : issuer_, .holder = arg.holder, .id = arg.id ? arg.id : id_, @@ -370,7 +370,7 @@ MPTTester::set(MPTSet const& arg) .metadata = arg.metadata, .delegate = arg.delegate, .domainID = arg.domainID}); - if (submit(arg, jv) == tesSUCCESS && (arg.flags.value_or(0) || arg.mutableFlags)) + if (submit(arg, jv) == tesSUCCESS && ((arg.flags.value_or(0) != 0u) || arg.mutableFlags)) { auto require = [&](std::optional const& holder, bool unchanged) { auto flags = getFlags(holder); diff --git a/src/test/jtx/impl/multisign.cpp b/src/test/jtx/impl/multisign.cpp index ae39382824..8e3c37f68c 100644 --- a/src/test/jtx/impl/multisign.cpp +++ b/src/test/jtx/impl/multisign.cpp @@ -78,12 +78,12 @@ msig::operator()(Env& env, JTx& jt) const jo[jss::Account] = e.acct.human(); jo[jss::SigningPubKey] = strHex(e.sig.pk().slice()); - Serializer ss{buildMultiSigningData(*st, e.acct.id())}; + Serializer const ss{buildMultiSigningData(*st, e.acct.id())}; auto const sig = xrpl::sign(*publicKeyType(e.sig.pk().slice()), e.sig.sk(), ss.slice()); jo[sfTxnSignature.getJsonName()] = strHex(Slice{sig.data(), sig.size()}); } }; - if (!subField) + if (subField == nullptr) { jt.mainSigners.emplace_back(callback); } diff --git a/src/test/jtx/impl/offer.cpp b/src/test/jtx/impl/offer.cpp index 251b659f3b..5a2264601a 100644 --- a/src/test/jtx/impl/offer.cpp +++ b/src/test/jtx/impl/offer.cpp @@ -17,7 +17,7 @@ offer( jv[jss::Account] = account.human(); jv[jss::TakerPays] = takerPays.getJson(JsonOptions::none); jv[jss::TakerGets] = takerGets.getJson(JsonOptions::none); - if (flags) + if (flags != 0u) jv[jss::Flags] = flags; jv[jss::TransactionType] = jss::OfferCreate; return jv; diff --git a/src/test/jtx/impl/paths.cpp b/src/test/jtx/impl/paths.cpp index e26f214fe4..af72b8bd5a 100644 --- a/src/test/jtx/impl/paths.cpp +++ b/src/test/jtx/impl/paths.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include @@ -30,7 +30,7 @@ paths::operator()(Env& env, JTx& jt) const } Pathfinder pf( - std::make_shared(env.current(), env.app().journal("RippleLineCache")), + std::make_shared(env.current(), env.app().getJournal("RippleLineCache")), from, to, in_.currency, diff --git a/src/test/jtx/impl/permissioned_dex.cpp b/src/test/jtx/impl/permissioned_dex.cpp index 87b7896663..494ea897d4 100644 --- a/src/test/jtx/impl/permissioned_dex.cpp +++ b/src/test/jtx/impl/permissioned_dex.cpp @@ -20,7 +20,7 @@ setupDomain( env.fund(XRP(100000), domainOwner); env.close(); - pdomain::Credentials credentials{{domainOwner, credType}}; + pdomain::Credentials const credentials{{domainOwner, credType}}; env(pdomain::setTx(domainOwner, credentials)); auto const objects = pdomain::getObjects(domainOwner, env); diff --git a/src/test/jtx/impl/quality2.cpp b/src/test/jtx/impl/quality2.cpp index c202592b9d..9da366d4c2 100644 --- a/src/test/jtx/impl/quality2.cpp +++ b/src/test/jtx/impl/quality2.cpp @@ -8,12 +8,14 @@ namespace test { namespace jtx { qualityInPercent::qualityInPercent(double percent) + // NOLINTNEXTLINE(cppcoreguidelines-use-default-member-init) : qIn_(static_cast((percent / 100) * QUALITY_ONE)) { assert(percent <= 400 && percent >= 0); } qualityOutPercent::qualityOutPercent(double percent) + // NOLINTNEXTLINE(cppcoreguidelines-use-default-member-init) : qOut_(static_cast((percent / 100) * QUALITY_ONE)) { assert(percent <= 400 && percent >= 0); diff --git a/src/test/jtx/impl/sig.cpp b/src/test/jtx/impl/sig.cpp index 850c5af781..1bdadc0bd3 100644 --- a/src/test/jtx/impl/sig.cpp +++ b/src/test/jtx/impl/sig.cpp @@ -10,7 +10,7 @@ sig::operator()(Env&, JTx& jt) const { if (!manual_) return; - if (!subField_) + if (subField_ == nullptr) jt.fill_sig = false; if (account_) { @@ -22,7 +22,7 @@ sig::operator()(Env&, JTx& jt) const jtx::sign(jtx.jv, account, sigObject); }; - if (!subField_) + if (subField_ == nullptr) { jt.mainSigners.emplace_back(callback); } diff --git a/src/test/jtx/impl/xchain_bridge.cpp b/src/test/jtx/impl/xchain_bridge.cpp index c2617f5073..72d932463f 100644 --- a/src/test/jtx/impl/xchain_bridge.cpp +++ b/src/test/jtx/impl/xchain_bridge.cpp @@ -413,7 +413,6 @@ XChainBridgeObjects::XChainBridgeObjects() } return r; }()) - , quorum(UT_XCHAIN_DEFAULT_QUORUM) , reward(XRP(1)) , split_reward_quorum(divide(reward, STAmount(UT_XCHAIN_DEFAULT_QUORUM), reward.issue())) , split_reward_everyone(divide(reward, STAmount(UT_XCHAIN_DEFAULT_NUM_SIGNERS), reward.issue())) @@ -431,7 +430,7 @@ XChainBridgeObjects::XChainBridgeObjects() void XChainBridgeObjects::createMcBridgeObjects(Env& mcEnv) { - STAmount xrp_funds{XRP(10000)}; + STAmount const xrp_funds{XRP(10000)}; mcEnv.fund(xrp_funds, mcDoor, mcAlice, mcBob, mcCarol, mcGw); // Signer's list must match the attestation signers @@ -448,7 +447,7 @@ XChainBridgeObjects::createMcBridgeObjects(Env& mcEnv) void XChainBridgeObjects::createScBridgeObjects(Env& scEnv) { - STAmount xrp_funds{XRP(10000)}; + STAmount const xrp_funds{XRP(10000)}; scEnv.fund(xrp_funds, scDoor, scAlice, scBob, scCarol, scGw, scAttester, scReward); // Signer's list must match the attestation signers diff --git a/src/test/jtx/mpt.h b/src/test/jtx/mpt.h index 3368d129c1..3990dd3087 100644 --- a/src/test/jtx/mpt.h +++ b/src/test/jtx/mpt.h @@ -291,7 +291,7 @@ private: env_.require(owners(issuer_, *arg.ownerCount)); if (arg.holderCount) { - for (auto it : holders_) + for (auto const& it : holders_) env_.require(owners(it.second, *arg.holderCount)); } return err; diff --git a/src/test/jtx/multisign.h b/src/test/jtx/multisign.h index 56d0b10906..b3f38cc453 100644 --- a/src/test/jtx/multisign.h +++ b/src/test/jtx/multisign.h @@ -22,7 +22,7 @@ struct signer std::optional tag; signer(Account account_, std::uint32_t weight_ = 1, std::optional tag_ = std::nullopt) - : weight(weight_), account(std::move(account_)), tag(std::move(tag_)) + : weight(weight_), account(std::move(account_)), tag(tag_) { } }; diff --git a/src/test/jtx/quality.h b/src/test/jtx/quality.h index 34c960224f..2da83eeef5 100644 --- a/src/test/jtx/quality.h +++ b/src/test/jtx/quality.h @@ -25,7 +25,7 @@ public: class qualityInPercent { private: - std::uint32_t qIn_; + std::uint32_t qIn_; // NOLINT(cppcoreguidelines-use-default-member-init) public: explicit qualityInPercent(double percent); @@ -53,7 +53,7 @@ public: class qualityOutPercent { private: - std::uint32_t qOut_; + std::uint32_t qOut_; // NOLINT(cppcoreguidelines-use-default-member-init) public: explicit qualityOutPercent(double percent); diff --git a/src/test/jtx/utility.h b/src/test/jtx/utility.h index 895d00f12b..15c323f047 100644 --- a/src/test/jtx/utility.h +++ b/src/test/jtx/utility.h @@ -2,9 +2,8 @@ #include -#include - #include +#include #include #include diff --git a/src/test/jtx/vault.h b/src/test/jtx/vault.h index 43f975323a..748d3341a5 100644 --- a/src/test/jtx/vault.h +++ b/src/test/jtx/vault.h @@ -38,7 +38,7 @@ struct Vault uint256 id; }; - Json::Value + static Json::Value set(SetArgs const& args); struct DeleteArgs @@ -47,7 +47,7 @@ struct Vault uint256 id; }; - Json::Value + static Json::Value del(DeleteArgs const& args); struct DepositArgs @@ -57,7 +57,7 @@ struct Vault STAmount amount; }; - Json::Value + static Json::Value deposit(DepositArgs const& args); struct WithdrawArgs @@ -67,7 +67,7 @@ struct Vault STAmount amount; }; - Json::Value + static Json::Value withdraw(WithdrawArgs const& args); struct ClawbackArgs @@ -78,7 +78,7 @@ struct Vault std::optional amount{}; }; - Json::Value + static Json::Value clawback(ClawbackArgs const& args); }; diff --git a/src/test/jtx/xchain_bridge.h b/src/test/jtx/xchain_bridge.h index 698426c59c..1270d03ed6 100644 --- a/src/test/jtx/xchain_bridge.h +++ b/src/test/jtx/xchain_bridge.h @@ -170,7 +170,7 @@ struct XChainBridgeObjects std::vector const alt_signers; std::vector const payee; std::vector const payees; - std::uint32_t const quorum; + std::uint32_t const quorum{UT_XCHAIN_DEFAULT_QUORUM}; STAmount const reward; // 1 xrp STAmount const split_reward_quorum; // 250,000 drops diff --git a/src/test/ledger/BookDirs_test.cpp b/src/test/ledger/BookDirs_test.cpp index d7841fe502..e8733d159d 100644 --- a/src/test/ledger/BookDirs_test.cpp +++ b/src/test/ledger/BookDirs_test.cpp @@ -19,7 +19,7 @@ struct BookDirs_test : public beast::unit_test::suite env.close(); { - Book book(xrpIssue(), USD.issue(), std::nullopt); + Book const book(xrpIssue(), USD.issue(), std::nullopt); { auto d = BookDirs(*env.current(), book); BEAST_EXPECT(std::begin(d) == std::end(d)); diff --git a/src/test/ledger/Directory_test.cpp b/src/test/ledger/Directory_test.cpp index 18649a20a8..4115d03c19 100644 --- a/src/test/ledger/Directory_test.cpp +++ b/src/test/ledger/Directory_test.cpp @@ -37,7 +37,7 @@ struct Directory_test : public beast::unit_test::suite // Insert n empty pages, numbered [0, ... n - 1], in the // specified directory: - void + static void makePages(Sandbox& sb, uint256 const& base, std::uint64_t n) { for (std::uint64_t i = 0; i < n; ++i) @@ -204,7 +204,7 @@ struct Directory_test : public beast::unit_test::suite BEAST_EXPECT(dirIsEmpty(*env.closed(), keylet::ownerDir(alice))); - for (auto c : currencies) + for (auto const& c : currencies) { env(trust(charlie, c(50))); env.close(); @@ -274,7 +274,7 @@ struct Directory_test : public beast::unit_test::suite { for (int i = 0; i < dirNodeMaxEntries; ++i) { - env(offer_cancel(alice, firstOfferSeq + page * dirNodeMaxEntries + i)); + env(offer_cancel(alice, firstOfferSeq + (page * dirNodeMaxEntries) + i)); env.close(); } } @@ -282,7 +282,7 @@ struct Directory_test : public beast::unit_test::suite // All the offers have been cancelled, so the book // should have no entries and be empty: { - Sandbox sb(env.closed().get(), tapNONE); + Sandbox const sb(env.closed().get(), tapNONE); uint256 const bookBase = getBookBase({xrpIssue(), USD.issue(), std::nullopt}); BEAST_EXPECT(dirIsEmpty(sb, keylet::page(bookBase))); diff --git a/src/test/ledger/PaymentSandbox_test.cpp b/src/test/ledger/PaymentSandbox_test.cpp index a5023aa328..ab01c4852e 100644 --- a/src/test/ledger/PaymentSandbox_test.cpp +++ b/src/test/ledger/PaymentSandbox_test.cpp @@ -65,7 +65,7 @@ class PaymentSandbox_test : public beast::unit_test::suite env(offer(snd, USD_gw1(2), USD_gw2(2)), txflags(tfPassive)); env(offer(snd, USD_gw2(2), USD_gw1(2)), txflags(tfPassive)); - PathSet paths(Path(gw1, USD_gw2, gw2), Path(gw2, USD_gw1, gw1)); + PathSet const paths(Path(gw1, USD_gw2, gw2), Path(gw2, USD_gw1, gw1)); env(pay(snd, rcv, any(USD_gw1(4))), json(paths.json()), @@ -88,7 +88,7 @@ class PaymentSandbox_test : public beast::unit_test::suite env.fund(XRP(10000), alice, gw1, gw2); - auto j = env.app().journal("View"); + auto j = env.app().getJournal("View"); auto const USD_gw1 = gw1["USD"]; auto const USD_gw2 = gw2["USD"]; @@ -266,16 +266,16 @@ class PaymentSandbox_test : public beast::unit_test::suite using namespace jtx; - Env env(*this, features); + Env const env(*this, features); Account const gw("gw"); Account const alice("alice"); auto const USD = gw["USD"]; auto const issue = USD.issue(); - STAmount tinyAmt( + STAmount const tinyAmt( issue, STAmount::cMinValue, STAmount::cMinOffset + 1, false, STAmount::unchecked{}); - STAmount hugeAmt( + STAmount const hugeAmt( issue, STAmount::cMaxValue, STAmount::cMaxOffset - 1, false, STAmount::unchecked{}); ApplyViewImpl av(&*env.current(), tapNONE); @@ -333,7 +333,7 @@ class PaymentSandbox_test : public beast::unit_test::suite testcase("balanceHook"); using namespace jtx; - Env env(*this, features); + Env const env(*this, features); Account const gw("gw"); auto const USD = gw["USD"]; diff --git a/src/test/ledger/PendingSaves_test.cpp b/src/test/ledger/PendingSaves_test.cpp index ddf371e913..5e08fc53e4 100644 --- a/src/test/ledger/PendingSaves_test.cpp +++ b/src/test/ledger/PendingSaves_test.cpp @@ -1,6 +1,5 @@ -#include - #include +#include namespace xrpl { namespace test { diff --git a/src/test/ledger/SkipList_test.cpp b/src/test/ledger/SkipList_test.cpp index 8430db3904..a2695bfce8 100644 --- a/src/test/ledger/SkipList_test.cpp +++ b/src/test/ledger/SkipList_test.cpp @@ -1,8 +1,7 @@ #include -#include - #include +#include #include namespace xrpl { @@ -16,13 +15,17 @@ class SkipList_test : public beast::unit_test::suite jtx::Env env(*this); std::vector> history; { - Config config; + Config const config; auto prev = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); history.push_back(prev); for (auto i = 0; i < 1023; ++i) { - auto next = std::make_shared(*prev, env.app().timeKeeper().closeTime()); + auto next = std::make_shared(*prev, env.app().getTimeKeeper().closeTime()); next->updateSkipList(); history.push_back(next); prev = next; diff --git a/src/test/ledger/View_test.cpp b/src/test/ledger/View_test.cpp index f57cb609cc..d2d930732e 100644 --- a/src/test/ledger/View_test.cpp +++ b/src/test/ledger/View_test.cpp @@ -1,9 +1,9 @@ #include -#include #include #include +#include #include #include #include @@ -114,12 +114,17 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Config config; + Config const config; std::shared_ptr const genesis = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); - auto const ledger = std::make_shared(*genesis, env.app().timeKeeper().closeTime()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); + auto const ledger = + std::make_shared(*genesis, env.app().getTimeKeeper().closeTime()); wipe(*ledger); - ReadView& v = *ledger; + ReadView const& v = *ledger; succ(v, 0, std::nullopt); ledger->rawInsert(sle(1, 1)); BEAST_EXPECT(v.exists(k(1))); @@ -147,7 +152,7 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - wipe(env.app().openLedger()); + wipe(env.app().getOpenLedger()); auto const open = env.current(); ApplyViewImpl v(&*open, tapNONE); succ(v, 0, std::nullopt); @@ -180,7 +185,7 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - wipe(env.app().openLedger()); + wipe(env.app().getOpenLedger()); auto const open = env.current(); ApplyViewImpl v0(&*open, tapNONE); v0.insert(sle(1)); @@ -246,7 +251,7 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - wipe(env.app().openLedger()); + wipe(env.app().getOpenLedger()); auto const open = env.current(); ApplyViewImpl v0(&*open, tapNONE); v0.rawInsert(sle(1, 1)); @@ -315,7 +320,7 @@ class View_test : public beast::unit_test::suite using namespace std::chrono; { Env env(*this); - wipe(env.app().openLedger()); + wipe(env.app().getOpenLedger()); auto const open = env.current(); OpenView v0(open.get()); BEAST_EXPECT(v0.seq() != 98); @@ -333,7 +338,7 @@ class View_test : public beast::unit_test::suite BEAST_EXPECT(v2.seq() == v1.seq()); BEAST_EXPECT(v2.flags() == tapRETRY); - Sandbox v3(&v2); + Sandbox const v3(&v2); BEAST_EXPECT(v3.seq() == v2.seq()); BEAST_EXPECT(v3.parentCloseTime() == v2.parentCloseTime()); BEAST_EXPECT(v3.flags() == tapRETRY); @@ -344,7 +349,7 @@ class View_test : public beast::unit_test::suite BEAST_EXPECT(v2.seq() == v0.seq()); BEAST_EXPECT(v2.parentCloseTime() == v0.parentCloseTime()); BEAST_EXPECT(v2.flags() == tapRETRY); - PaymentSandbox v3(&v2); + PaymentSandbox const v3(&v2); BEAST_EXPECT(v3.seq() == v2.seq()); BEAST_EXPECT(v3.parentCloseTime() == v2.parentCloseTime()); BEAST_EXPECT(v3.flags() == v2.flags()); @@ -377,10 +382,15 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Config config; + Config const config; std::shared_ptr const genesis = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); - auto const ledger = std::make_shared(*genesis, env.app().timeKeeper().closeTime()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); + auto const ledger = + std::make_shared(*genesis, env.app().getTimeKeeper().closeTime()); auto setup = [&ledger](std::vector const& vec) { wipe(*ledger); @@ -581,10 +591,15 @@ class View_test : public beast::unit_test::suite using namespace jtx; Env env(*this); - Config config; + Config const config; std::shared_ptr const genesis = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); - auto const ledger = std::make_shared(*genesis, env.app().timeKeeper().closeTime()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); + auto const ledger = + std::make_shared(*genesis, env.app().getTimeKeeper().closeTime()); auto setup123 = [&ledger, this]() { // erase middle element wipe(*ledger); @@ -927,14 +942,18 @@ class View_test : public beast::unit_test::suite // erase the item, apply. { Env env(*this); - Config config; + Config const config; std::shared_ptr const genesis = std::make_shared( - create_genesis, config, std::vector{}, env.app().getNodeFamily()); + create_genesis, + Rules{config.features}, + config.FEES.toFees(), + std::vector{}, + env.app().getNodeFamily()); auto const ledger = - std::make_shared(*genesis, env.app().timeKeeper().closeTime()); + std::make_shared(*genesis, env.app().getTimeKeeper().closeTime()); wipe(*ledger); ledger->rawInsert(sle(1)); - ReadView& v0 = *ledger; + ReadView const& v0 = *ledger; ApplyViewImpl v1(&v0, tapNONE); { Sandbox v2(&v1); @@ -947,9 +966,9 @@ class View_test : public beast::unit_test::suite // Make sure OpenLedger::empty works { Env env(*this); - BEAST_EXPECT(env.app().openLedger().empty()); + BEAST_EXPECT(env.app().getOpenLedger().empty()); env.fund(XRP(10000), Account("test")); - BEAST_EXPECT(!env.app().openLedger().empty()); + BEAST_EXPECT(!env.app().getOpenLedger().empty()); } } diff --git a/src/test/nodestore/Backend_test.cpp b/src/test/nodestore/Backend_test.cpp index 19f3bc43e5..101138de88 100644 --- a/src/test/nodestore/Backend_test.cpp +++ b/src/test/nodestore/Backend_test.cpp @@ -26,7 +26,7 @@ public: testcase("Backend type=" + type); Section params; - beast::temp_dir tempDir; + beast::temp_dir const tempDir; params.set("type", type); params.set("path", tempDir.path()); diff --git a/src/test/nodestore/Basics_test.cpp b/src/test/nodestore/Basics_test.cpp index e37544f58e..c9755d04d7 100644 --- a/src/test/nodestore/Basics_test.cpp +++ b/src/test/nodestore/Basics_test.cpp @@ -38,7 +38,7 @@ public: for (int i = 0; i < batch.size(); ++i) { - EncodedBlob encoded(batch[i]); + EncodedBlob const encoded(batch[i]); DecodedBlob decoded(encoded.getKey(), encoded.getData(), encoded.getSize()); diff --git a/src/test/nodestore/Database_test.cpp b/src/test/nodestore/Database_test.cpp index 6943f0733e..43bda9dcae 100644 --- a/src/test/nodestore/Database_test.cpp +++ b/src/test/nodestore/Database_test.cpp @@ -191,7 +191,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -220,7 +220,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -249,7 +249,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -278,7 +278,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -306,7 +306,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -334,7 +334,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -362,7 +362,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -390,7 +390,7 @@ public: try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -445,7 +445,7 @@ public: } try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -468,7 +468,7 @@ public: } try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -491,7 +491,7 @@ public: } try { - Env env( + Env const env( *this, std::move(p), std::make_unique(expected, &found), @@ -515,7 +515,7 @@ public: { DummyScheduler scheduler; - beast::temp_dir node_db; + beast::temp_dir const node_db; Section srcParams; srcParams.set("type", srcBackendType); srcParams.set("path", node_db.path()); @@ -538,7 +538,7 @@ public: Manager::instance().make_Database(megabytes(4), scheduler, 2, srcParams, journal_); // Set up the destination database - beast::temp_dir dest_db; + beast::temp_dir const dest_db; Section destParams; destParams.set("type", destBackendType); destParams.set("path", dest_db.path()); @@ -572,11 +572,11 @@ public: { DummyScheduler scheduler; - std::string s = "NodeStore backend '" + type + "'"; + std::string const s = "NodeStore backend '" + type + "'"; testcase(s); - beast::temp_dir node_db; + beast::temp_dir const node_db; Section nodeParams; nodeParams.set("type", type); nodeParams.set("path", node_db.path()); @@ -639,7 +639,7 @@ public: try { nodeParams.set("earliest_seq", "0"); - std::unique_ptr db = Manager::instance().make_Database( + std::unique_ptr const db = Manager::instance().make_Database( megabytes(4), scheduler, 2, nodeParams, journal_); } catch (std::runtime_error const& e) @@ -662,7 +662,7 @@ public: { // Set to default earliest ledger sequence nodeParams.set("earliest_seq", std::to_string(XRP_LEDGER_EARLIEST_SEQ)); - std::unique_ptr db2 = Manager::instance().make_Database( + std::unique_ptr const db2 = Manager::instance().make_Database( megabytes(4), scheduler, 2, nodeParams, journal_); } catch (std::runtime_error const& e) diff --git a/src/test/nodestore/NuDBFactory_test.cpp b/src/test/nodestore/NuDBFactory_test.cpp index 9a9b7d83bd..3e6b68c9e5 100644 --- a/src/test/nodestore/NuDBFactory_test.cpp +++ b/src/test/nodestore/NuDBFactory_test.cpp @@ -17,7 +17,7 @@ class NuDBFactory_test : public TestBase { private: // Helper function to create a Section with specified parameters - Section + static Section createSection(std::string const& path, std::string const& blockSize = "") { Section params; @@ -76,12 +76,12 @@ private: std::string const& expectedMessage) { test::StreamSink sink(level); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; auto backend = Manager::instance().make_Backend(params, megabytes(4), scheduler, journal); - std::string logOutput = sink.messages().str(); + std::string const logOutput = sink.messages().str(); BEAST_EXPECT(logOutput.find(expectedMessage) != std::string::npos); } @@ -89,17 +89,17 @@ private: void testPowerOfTwoValidation(std::string const& size, bool shouldWork) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), size); test::StreamSink sink(beast::severities::kWarning); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; auto backend = Manager::instance().make_Backend(params, megabytes(4), scheduler, journal); - std::string logOutput = sink.messages().str(); - bool hasWarning = logOutput.find("Invalid nudb_block_size") != std::string::npos; + std::string const logOutput = sink.messages().str(); + bool const hasWarning = logOutput.find("Invalid nudb_block_size") != std::string::npos; BEAST_EXPECT(hasWarning == !shouldWork); } @@ -110,7 +110,7 @@ public: { testcase("Default block size (no nudb_block_size specified)"); - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path()); // Should work with default 4096 block size @@ -122,18 +122,18 @@ public: { testcase("Valid block sizes"); - std::vector validSizes = {4096, 8192, 16384, 32768}; + std::vector const validSizes = {4096, 8192, 16384, 32768}; for (auto const& size : validSizes) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), to_string(size)); BEAST_EXPECT(testBackendFunctionality(params, size)); } // Empty value is ignored by the config parser, so uses the // default - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), ""); BEAST_EXPECT(testBackendFunctionality(params, 4096)); @@ -144,7 +144,7 @@ public: { testcase("Invalid block sizes"); - std::vector invalidSizes = { + std::vector const invalidSizes = { "2048", // Too small "1024", // Too small "65536", // Too large @@ -161,7 +161,7 @@ public: for (auto const& size : invalidSizes) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), size); // Fails @@ -169,14 +169,14 @@ public: } // Test whitespace cases separately since lexical_cast may handle them - std::vector whitespaceInvalidSizes = { + std::vector const whitespaceInvalidSizes = { "4096 ", // Trailing space - might be handled by lexical_cast " 4096" // Leading space - might be handled by lexical_cast }; for (auto const& size : whitespaceInvalidSizes) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), size); // Fails @@ -191,7 +191,7 @@ public: // Test valid custom block size logging { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), "8192"); testLogMessage(params, beast::severities::kInfo, "Using custom NuDB block size: 8192"); @@ -199,11 +199,11 @@ public: // Test invalid block size failure { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), "5000"); test::StreamSink sink(beast::severities::kWarning); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; try @@ -214,7 +214,7 @@ public: } catch (std::exception const& e) { - std::string logOutput{e.what()}; + std::string const logOutput{e.what()}; BEAST_EXPECT(logOutput.find("Invalid nudb_block_size: 5000") != std::string::npos); BEAST_EXPECT( logOutput.find("Must be power of 2 between 4096 and 32768") != @@ -224,11 +224,11 @@ public: // Test non-numeric value failure { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), "invalid"); test::StreamSink sink(beast::severities::kWarning); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; try @@ -240,7 +240,7 @@ public: } catch (std::exception const& e) { - std::string logOutput{e.what()}; + std::string const logOutput{e.what()}; BEAST_EXPECT( logOutput.find("Invalid nudb_block_size value: invalid") != std::string::npos); } @@ -253,7 +253,7 @@ public: testcase("Power of 2 validation logic"); // Test edge cases around valid range - std::vector> testCases = { + std::vector> const testCases = { {"4095", false}, // Just below minimum {"4096", true}, // Minimum valid {"4097", false}, // Just above minimum, not power of 2 @@ -267,13 +267,13 @@ public: for (auto const& [size, shouldWork] : testCases) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), size); // We test the validation logic by catching exceptions for invalid // values test::StreamSink sink(beast::severities::kWarning); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; try @@ -284,7 +284,7 @@ public: } catch (std::exception const& e) { - std::string logOutput{e.what()}; + std::string const logOutput{e.what()}; BEAST_EXPECT(logOutput.find("Invalid nudb_block_size") != std::string::npos); } } @@ -295,7 +295,7 @@ public: { testcase("Both constructor variants work with custom block size"); - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), "16384"); DummyScheduler scheduler; @@ -321,13 +321,13 @@ public: testcase("Configuration parsing edge cases"); // Test that whitespace is handled correctly - std::vector validFormats = { + std::vector const validFormats = { "8192" // Basic valid format }; // Test whitespace handling separately since lexical_cast behavior may // vary - std::vector whitespaceFormats = { + std::vector const whitespaceFormats = { " 8192", // Leading space - may or may not be handled by // lexical_cast "8192 " // Trailing space - may or may not be handled by @@ -337,19 +337,19 @@ public: // Test basic valid format for (auto const& format : validFormats) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), format); test::StreamSink sink(beast::severities::kInfo); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; auto backend = Manager::instance().make_Backend(params, megabytes(4), scheduler, journal); // Should log success message for valid values - std::string logOutput = sink.messages().str(); - bool hasSuccessMessage = + std::string const logOutput = sink.messages().str(); + bool const hasSuccessMessage = logOutput.find("Using custom NuDB block size") != std::string::npos; BEAST_EXPECT(hasSuccessMessage); } @@ -358,12 +358,12 @@ public: // them for (auto const& format : whitespaceFormats) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), format); // Use a lower threshold to capture both info and warning messages test::StreamSink sink(beast::severities::kDebug); - beast::Journal journal(sink); + beast::Journal const journal(sink); DummyScheduler scheduler; try @@ -385,11 +385,11 @@ public: { testcase("Data persistence with different block sizes"); - std::vector blockSizes = {"4096", "8192", "16384", "32768"}; + std::vector const blockSizes = {"4096", "8192", "16384", "32768"}; for (auto const& size : blockSizes) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; auto params = createSection(tempDir.path(), size); DummyScheduler scheduler; diff --git a/src/test/nodestore/TestBase.h b/src/test/nodestore/TestBase.h index cb2a8e3bd5..893e06579c 100644 --- a/src/test/nodestore/TestBase.h +++ b/src/test/nodestore/TestBase.h @@ -187,7 +187,7 @@ public: for (int i = 0; i < batch.size(); ++i) { - std::shared_ptr object = db.fetchNodeObject(batch[i]->getHash(), 0); + std::shared_ptr const object = db.fetchNodeObject(batch[i]->getHash(), 0); if (object != nullptr) pCopy->push_back(object); diff --git a/src/test/nodestore/Timing_test.cpp b/src/test/nodestore/Timing_test.cpp index d5c89dbcc9..fb60e6c7a5 100644 --- a/src/test/nodestore/Timing_test.cpp +++ b/src/test/nodestore/Timing_test.cpp @@ -111,7 +111,7 @@ public: { b.clear(); b.reserve(size); - while (size--) + while ((size--) != 0u) b.emplace_back(obj(n++)); } }; @@ -524,7 +524,7 @@ public: , seq1_(1) , gen_(id + 1) , rand_(0, 99) - , recent_(params.items, params.items * 2 - 1) + , recent_(params.items, (params.items * 2) - 1) , older_(0, params.items - 1) { } @@ -643,9 +643,9 @@ public: Params params{}; params.items = default_items; params.threads = threads; - for (auto i = default_repeat; i--;) + for (auto i = default_repeat; (i--) != 0u;) { - beast::temp_dir tempDir; + beast::temp_dir const tempDir; Section config = parse(config_string); config.set("path", tempDir.path()); std::stringstream ss; @@ -672,7 +672,7 @@ public: items Number of objects to create in the database */ - std::string default_args = + std::string const default_args = "type=nudb" #if XRPL_ROCKSDB_AVAILABLE ";type=rocksdb,open_files=2000,filter_bits=12,cache_mb=256," diff --git a/src/test/nodestore/import_test.cpp b/src/test/nodestore/import_test.cpp index e5f281486b..6d336c1f51 100644 --- a/src/test/nodestore/import_test.cpp +++ b/src/test/nodestore/import_test.cpp @@ -71,7 +71,7 @@ template std::ostream& pretty_time(std::ostream& os, std::chrono::duration d) { - save_stream_state _(os); + save_stream_state const _(os); using namespace std::chrono; if (d < microseconds{1}) { @@ -332,8 +332,8 @@ public: options.create_if_missing = false; options.max_open_files = 2000; // 5000? rocksdb::DB* pdb = nullptr; - rocksdb::Status status = rocksdb::DB::OpenForReadOnly(options, from_path, &pdb); - if (!status.ok() || !pdb) + rocksdb::Status const status = rocksdb::DB::OpenForReadOnly(options, from_path, &pdb); + if (!status.ok() || (pdb == nullptr)) Throw("Can't open '" + from_path + "': " + status.ToString()); db.reset(pdb); } @@ -374,7 +374,7 @@ public: void const* const key = it->key().data(); void const* const data = it->value().data(); auto const size = it->value().size(); - std::unique_ptr clean(new char[size]); + std::unique_ptr const clean(new char[size]); std::memcpy(clean.get(), data, size); filter_inner(clean.get(), size); auto const out = nodeobject_compress(clean.get(), size, buf); @@ -458,7 +458,7 @@ public: // Create empty buckets for (std::size_t i = 0; i < bn; ++i) { - bucket b(kh.block_size, buf.get() + i * kh.block_size, empty); + bucket const b(kh.block_size, buf.get() + (i * kh.block_size), empty); } // Insert all keys into buckets // Iterate Data File @@ -484,10 +484,10 @@ public: std::uint8_t const* const key = is.data(dh.key_size); auto const h = hash(key, kh.key_size, kh.salt); auto const n = bucket_index(h, kh.buckets, kh.modulus); - p(log, npass * df_size + r.offset()); + p(log, (npass * df_size) + r.offset()); if (n < b0 || n >= b1) continue; - bucket b(kh.block_size, buf.get() + (n - b0) * kh.block_size); + bucket b(kh.block_size, buf.get() + ((n - b0) * kh.block_size)); maybe_spill(b, dw, ec); if (ec) Throw(ec); diff --git a/src/test/overlay/ProtocolVersion_test.cpp b/src/test/overlay/ProtocolVersion_test.cpp index f0d02edbca..fc25812cbb 100644 --- a/src/test/overlay/ProtocolVersion_test.cpp +++ b/src/test/overlay/ProtocolVersion_test.cpp @@ -42,20 +42,14 @@ public: // Empty string check("", ""); - // clang-format off - check( - "RTXP/1.1,RTXP/1.2,RTXP/1.3,XRPL/2.1,XRPL/2.0,/XRPL/3.0", - "XRPL/2.0,XRPL/2.1"); - check( - "RTXP/0.9,RTXP/1.01,XRPL/0.3,XRPL/2.01,websocket", - ""); + check("RTXP/1.1,RTXP/1.2,RTXP/1.3,XRPL/2.1,XRPL/2.0,/XRPL/3.0", "XRPL/2.0,XRPL/2.1"); + check("RTXP/0.9,RTXP/1.01,XRPL/0.3,XRPL/2.01,websocket", ""); check( "XRPL/2.0,XRPL/2.0,XRPL/19.4,XRPL/7.89,XRPL/XRPL/3.0,XRPL/2.01", "XRPL/2.0,XRPL/7.89,XRPL/19.4"); check( "XRPL/2.0,XRPL/3.0,XRPL/4,XRPL/,XRPL,OPT XRPL/2.2,XRPL/5.67", "XRPL/2.0,XRPL/3.0,XRPL/5.67"); - // clang-format on } { diff --git a/src/test/overlay/TMGetObjectByHash_test.cpp b/src/test/overlay/TMGetObjectByHash_test.cpp index 0624c7b088..a2a934f182 100644 --- a/src/test/overlay/TMGetObjectByHash_test.cpp +++ b/src/test/overlay/TMGetObjectByHash_test.cpp @@ -95,15 +95,15 @@ class TMGetObjectByHash_test : public beast::unit_test::suite std::shared_ptr createPeer(jtx::Env& env) { - auto& overlay = dynamic_cast(env.app().overlay()); + auto& overlay = dynamic_cast(env.app().getOverlay()); boost::beast::http::request request; auto stream_ptr = std::make_unique(socket_type(env.app().getIOContext()), *context_); - beast::IP::Endpoint local(boost::asio::ip::make_address("172.1.1.1"), 51235); - beast::IP::Endpoint remote(boost::asio::ip::make_address("172.1.1.2"), 51235); + beast::IP::Endpoint const local(boost::asio::ip::make_address("172.1.1.1"), 51235); + beast::IP::Endpoint const remote(boost::asio::ip::make_address("172.1.1.2"), 51235); - PublicKey key(std::get<0>(randomKeyPair(KeyType::ed25519))); + PublicKey const key(std::get<0>(randomKeyPair(KeyType::ed25519))); auto consumer = overlay.resourceManager().newInboundEndpoint(remote); auto [slot, _] = overlay.peerFinder().new_inbound_slot(local, remote); @@ -121,7 +121,7 @@ class TMGetObjectByHash_test : public beast::unit_test::suite return peer; } - std::shared_ptr + static std::shared_ptr createRequest(size_t const numObjects, Env& env) { // Store objects in the NodeStore that will be found during the query @@ -132,7 +132,7 @@ class TMGetObjectByHash_test : public beast::unit_test::suite hashes.reserve(numObjects); for (int i = 0; i < numObjects; ++i) { - uint256 hash(xrpl::sha512Half(i)); + uint256 const hash(xrpl::sha512Half(i)); hashes.push_back(hash); Blob data(100, static_cast(i % 256)); diff --git a/src/test/overlay/cluster_test.cpp b/src/test/overlay/cluster_test.cpp index 6fa4604f78..6fc7f3f59b 100644 --- a/src/test/overlay/cluster_test.cpp +++ b/src/test/overlay/cluster_test.cpp @@ -29,7 +29,7 @@ public: return cluster; } - PublicKey + static PublicKey randomNode() { return derivePublicKey(KeyType::secp256k1, randomSecretKey()); @@ -113,7 +113,7 @@ public: auto const node = randomNode(); auto const name = toBase58(TokenType::NodePublic, node); - std::uint32_t load = 0; + std::uint32_t const load = 0; NetClock::time_point tick = {}; // Initial update diff --git a/src/test/overlay/compression_test.cpp b/src/test/overlay/compression_test.cpp index f784a91350..4ffc805726 100644 --- a/src/test/overlay/compression_test.cpp +++ b/src/test/overlay/compression_test.cpp @@ -4,7 +4,6 @@ #include #include -#include #include #include #include @@ -15,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -117,7 +117,7 @@ public: decompressed.begin())); } - std::shared_ptr + static std::shared_ptr buildManifests(int n) { auto manifests = std::make_shared(); @@ -143,7 +143,7 @@ public: return manifests; } - std::shared_ptr + static std::shared_ptr buildEndpoints(int n) { auto endpoints = std::make_shared(); @@ -163,7 +163,7 @@ public: buildTransaction(Logs& logs) { Env env(*this, envconfig()); - int fund = 10000; + int const fund = 10000; auto const alice = Account("alice"); auto const bob = Account("bob"); env.fund(XRP(fund), "alice", "bob"); @@ -196,7 +196,7 @@ public: return transaction; } - std::shared_ptr + static std::shared_ptr buildGetLedger() { auto getLedger = std::make_shared(); @@ -205,7 +205,7 @@ public: uint256 const hash(xrpl::sha512Half(123456789)); getLedger->set_ledgerhash(hash.begin(), hash.size()); getLedger->set_ledgerseq(123456789); - xrpl::SHAMapNodeID sha(64, hash); + xrpl::SHAMapNodeID const sha(64, hash); getLedger->add_nodeids(sha.getRawString()); getLedger->set_requestcookie(123456789); getLedger->set_querytype(protocol::qtINDIRECT); @@ -213,7 +213,7 @@ public: return getLedger; } - std::shared_ptr + static std::shared_ptr buildLedgerData(uint32_t n, Logs& logs) { auto ledgerData = std::make_shared(); @@ -251,7 +251,7 @@ public: return ledgerData; } - std::shared_ptr + static std::shared_ptr buildGetObjectByHash() { auto getObject = std::make_shared(); @@ -268,7 +268,7 @@ public: uint256 hash(xrpl::sha512Half(i)); auto object = getObject->add_objects(); object->set_hash(hash.data(), hash.size()); - xrpl::SHAMapNodeID sha(64, hash); + xrpl::SHAMapNodeID const sha(64, hash); object->set_nodeid(sha.getRawString()); object->set_index(""); object->set_data(""); @@ -277,7 +277,7 @@ public: return getObject; } - std::shared_ptr + static std::shared_ptr buildValidatorList() { auto list = std::make_shared(); @@ -295,7 +295,7 @@ public: st.add(s); list->set_manifest(s.data(), s.size()); list->set_version(3); - STObject signature(sfSignature); + STObject const signature(sfSignature); xrpl::sign(st, HashPrefix::manifest, KeyType::ed25519, std::get<1>(signing)); Serializer s1; st.add(s1); @@ -304,7 +304,7 @@ public: return list; } - std::shared_ptr + static std::shared_ptr buildValidatorListCollection() { auto list = std::make_shared(); @@ -322,7 +322,7 @@ public: st.add(s); list->set_manifest(s.data(), s.size()); list->set_version(4); - STObject signature(sfSignature); + STObject const signature(sfSignature); xrpl::sign(st, HashPrefix::manifest, KeyType::ed25519, std::get<1>(signing)); Serializer s1; st.add(s1); @@ -338,14 +338,14 @@ public: auto thresh = beast::severities::Severity::kInfo; auto logs = std::make_unique(thresh); - protocol::TMManifests manifests; - protocol::TMEndpoints endpoints; - protocol::TMTransaction transaction; - protocol::TMGetLedger get_ledger; - protocol::TMLedgerData ledger_data; - protocol::TMGetObjectByHash get_object; - protocol::TMValidatorList validator_list; - protocol::TMValidatorListCollection validator_list_collection; + protocol::TMManifests const manifests; + protocol::TMEndpoints const endpoints; + protocol::TMTransaction const transaction; + protocol::TMGetLedger const get_ledger; + protocol::TMLedgerData const ledger_data; + protocol::TMGetObjectByHash const get_object; + protocol::TMValidatorList const validator_list; + protocol::TMValidatorListCollection const validator_list_collection; // 4.5KB doTest(buildManifests(20), protocol::mtMANIFESTS, 4, "TMManifests20"); @@ -399,7 +399,7 @@ public: return env; }; auto handshake = [&](int outboundEnable, int inboundEnable) { - beast::IP::Address addr = boost::asio::ip::make_address("172.1.1.100"); + beast::IP::Address const addr = boost::asio::ip::make_address("172.1.1.100"); auto env = getEnv(outboundEnable); auto request = xrpl::makeRequest( diff --git a/src/test/overlay/reduce_relay_test.cpp b/src/test/overlay/reduce_relay_test.cpp index 8e50415aa9..4a8d62fbc2 100644 --- a/src/test/overlay/reduce_relay_test.cpp +++ b/src/test/overlay/reduce_relay_test.cpp @@ -120,7 +120,7 @@ public: uint256 const& getClosedLedgerHash() const override { - static uint256 hash{}; + static uint256 const hash{}; return hash; } bool @@ -362,7 +362,7 @@ public: { for (auto id : peers) { - assert(links_.find(id) != links_.end()); + assert(links_.contains(id)); f(*links_[id], message_); } } @@ -481,7 +481,7 @@ public: onMessage(protocol::TMSquelch const& squelch) override { auto validator = squelch.validatorpubkey(); - PublicKey key(Slice(validator.data(), validator.size())); + PublicKey const key(Slice(validator.data(), validator.size())); if (squelch.squelch()) { squelch_.addSquelch(key, std::chrono::seconds{squelch.squelchduration()}); @@ -507,7 +507,7 @@ class OverlaySim : public Overlay, public reduce_relay::SquelchHandler public: using id_t = Peer::id_t; using clock_type = ManualClock; - OverlaySim(Application& app) : slots_(app.logs(), *this, app.config()), logs_(app.logs()) + OverlaySim(Application& app) : slots_(app, *this, app.config()), registry_(app) { } @@ -561,7 +561,7 @@ public: Peer::id_t id = 0; if (peersCache_.empty() || !useCache) { - peer = std::make_shared(*this, logs_.journal("Squelch")); + peer = std::make_shared(*this, registry_.getJournal("Squelch")); id = peer->id(); } else @@ -637,7 +637,7 @@ public: getSelectedPeer(PublicKey const& validator) { auto selected = slots_.getSelected(validator); - assert(selected.size()); + assert(!selected.empty()); return *selected.begin(); } @@ -673,7 +673,7 @@ private: Peers peers_; Peers peersCache_; reduce_relay::Slots slots_; - Logs& logs_; + ServiceRegistry& registry_; }; class Network @@ -776,7 +776,7 @@ public: squelch.set_squelch(false); for (auto& v : validators_) { - PublicKey key = v; + PublicKey const key = v; squelch.clear_validatorpubkey(); squelch.set_validatorpubkey(key.data(), key.size()); v.for_links({peer}, [&](Link& l, MessageSPtr) { @@ -785,7 +785,7 @@ public: } } - void + static void for_rand(std::uint32_t min, std::uint32_t max, std::function f) { auto size = max - min; @@ -879,14 +879,14 @@ protected: } /** Send squelch (if duration is set) or unsquelch (if duration not set) */ - Peer::id_t + static Peer::id_t sendSquelch( PublicKey const& validator, PeerWPtr const& peerPtr, std::optional duration) { protocol::TMSquelch squelch; - bool res = duration ? true : false; + bool const res = static_cast(duration); squelch.set_squelch(res); squelch.set_validatorpubkey(validator.data(), validator.size()); if (res) @@ -992,7 +992,7 @@ protected: if (events[EventType::PeerDisconnected].state_ == State::On) { auto& event = events[EventType::PeerDisconnected]; - bool allCounting = network_.allCounting(event.peer_); + bool const allCounting = network_.allCounting(event.peer_); network_.overlay().deletePeer( event.peer_, [&](PublicKey const& v, PeerWPtr const& peerPtr) { if (event.isSelected_) @@ -1004,8 +1004,8 @@ protected: // take place because there is no peers in Squelched state in // any of the slots where the peer is in Selected state // (allCounting is true) - bool handled = (event.isSelected_ == false && !event.handled_) || - (event.isSelected_ == true && (event.handled_ || allCounting)); + bool const handled = (!event.isSelected_ && !event.handled_) || + (event.isSelected_ && (event.handled_ || allCounting)); BEAST_EXPECT(handled); event.state_ = State::Off; event.isSelected_ = false; @@ -1047,7 +1047,7 @@ protected: sendSquelch(validator, ptr, {}); } }); - bool handled = (event.handled_ && event.state_ == State::WaitReset) || + bool const handled = (event.handled_ && event.state_ == State::WaitReset) || (!event.handled_ && !mustHandle); BEAST_EXPECT(handled); } @@ -1055,7 +1055,7 @@ protected: (event.state_ == State::On && (now - event.time_ > (reduce_relay::IDLED + seconds(2))))) { - bool handled = event.state_ == State::WaitReset || !event.handled_; + bool const handled = event.state_ == State::WaitReset || !event.handled_; BEAST_EXPECT(handled); event.state_ = State::Off; event.isSelected_ = false; @@ -1270,7 +1270,7 @@ protected: doTest("Test Config - squelch enabled (legacy)", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string const toLoad(R"rippleConfig( [reduce_relay] vp_enable=1 )rippleConfig"); @@ -1303,7 +1303,7 @@ vp_enable=0 doTest("Test Config - squelch enabled", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string const toLoad(R"rippleConfig( [reduce_relay] vp_base_squelch_enable=1 )rippleConfig"); @@ -1315,7 +1315,7 @@ vp_base_squelch_enable=1 doTest("Test Config - squelch disabled", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string const toLoad(R"rippleConfig( [reduce_relay] vp_base_squelch_enable=0 )rippleConfig"); @@ -1327,7 +1327,7 @@ vp_base_squelch_enable=0 doTest("Test Config - legacy and new", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string const toLoad(R"rippleConfig( [reduce_relay] vp_base_squelch_enable=0 vp_enable=0 @@ -1406,7 +1406,7 @@ vp_base_squelch_max_selected_peers=2 auto createSlots = [&](bool baseSquelchEnabled) -> reduce_relay::Slots { env_.app().config().VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE = baseSquelchEnabled; return reduce_relay::Slots( - env_.app().logs(), network_.overlay(), env_.app().config()); + env_.app(), network_.overlay(), env_.app().config()); }; // base squelching must not be ready if squelching is disabled BEAST_EXPECT(!createSlots(false).baseSquelchReady()); @@ -1432,10 +1432,10 @@ vp_base_squelch_max_selected_peers=2 doTest("Duplicate Message", log, [&](bool log) { network_.reset(); // update message count for the same peer/validator - std::int16_t nMessages = 5; + std::int16_t const nMessages = 5; for (int i = 0; i < nMessages; i++) { - uint256 key(i); + uint256 const key(i); network_.overlay().updateSlotAndSquelch( key, network_.validator(0), 0, [&](PublicKey const&, PeerWPtr, std::uint32_t) { }); @@ -1445,7 +1445,7 @@ vp_base_squelch_max_selected_peers=2 // hence '-1'. BEAST_EXPECT(std::get<1>(peers[0]) == (nMessages - 1)); // add duplicate - uint256 key(nMessages - 1); + uint256 const key(nMessages - 1); network_.overlay().updateSlotAndSquelch( key, network_.validator(0), 0, [&](PublicKey const&, PeerWPtr, std::uint32_t) {}); // confirm the same number of messages @@ -1487,8 +1487,7 @@ vp_base_squelch_max_selected_peers=2 auto run = [&](int npeers) { handler.maxDuration_ = 0; - reduce_relay::Slots slots( - env_.app().logs(), handler, env_.app().config()); + reduce_relay::Slots slots(env_.app(), handler, env_.app().config()); // 1st message from a new peer switches the slot // to counting state and resets the counts of all peers + // MAX_MESSAGE_THRESHOLD + 1 messages to reach the threshold @@ -1499,7 +1498,7 @@ vp_base_squelch_max_selected_peers=2 { // make unique message hash to make the // slot's internal hash router accept the message - std::uint64_t mid = m * 1000 + peer; + std::uint64_t const mid = (m * 1000) + peer; uint256 const message{mid}; slots.updateSlotAndSquelch( message, validator, peer, protocol::MessageType::mtVALIDATION); @@ -1569,7 +1568,7 @@ vp_base_squelch_max_selected_peers=2 env_.app().config().COMPRESSION = c.COMPRESSION; }; auto handshake = [&](int outboundEnable, int inboundEnable) { - beast::IP::Address addr = boost::asio::ip::make_address("172.1.1.100"); + beast::IP::Address const addr = boost::asio::ip::make_address("172.1.1.100"); setEnv(outboundEnable); auto request = xrpl::makeRequest( @@ -1623,7 +1622,7 @@ public: void run() override { - bool log = false; + bool const log = false; testConfig(log); testInitialRound(log); testPeerUnsquelchedTooSoon(log); @@ -1650,7 +1649,7 @@ class reduce_relay_simulate_test : public reduce_relay_test void run() override { - bool log = false; + bool const log = false; testRandom(log); } }; diff --git a/src/test/overlay/short_read_test.cpp b/src/test/overlay/short_read_test.cpp index d96f67c8a1..0c8b7f8a43 100644 --- a/src/test/overlay/short_read_test.cpp +++ b/src/test/overlay/short_read_test.cpp @@ -56,7 +56,7 @@ private: using boost::asio::buffer; using boost::asio::buffer_copy; using boost::asio::buffer_size; - boost::asio::const_buffer buf(s.data(), s.size()); + boost::asio::const_buffer const buf(s.data(), s.size()); sb.commit(buffer_copy(sb.prepare(buffer_size(buf)), buf)); } @@ -100,14 +100,14 @@ private: void add(std::shared_ptr const& child) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.emplace(child.get(), child); } void remove(Child* child) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.erase(child); if (list_.empty()) cond_.notify_one(); @@ -118,7 +118,7 @@ private: { std::vector> v; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); v.reserve(list_.size()); if (closed_) return; @@ -636,7 +636,7 @@ public: void run() override { - Server s(*this); + Server const s(*this); Client c(*this, s.endpoint()); c.wait(); pass(); diff --git a/src/test/overlay/tx_reduce_relay_test.cpp b/src/test/overlay/tx_reduce_relay_test.cpp index 11b5c95a4e..abb1632858 100644 --- a/src/test/overlay/tx_reduce_relay_test.cpp +++ b/src/test/overlay/tx_reduce_relay_test.cpp @@ -151,7 +151,7 @@ private: void addPeer(jtx::Env& env, std::vector>& peers, std::uint16_t& nDisabled) { - auto& overlay = dynamic_cast(env.app().overlay()); + auto& overlay = dynamic_cast(env.app().getOverlay()); boost::beast::http::request request; (nDisabled == 0) ? request.insert("X-Protocol-Ctl", makeFeaturesRequestHeader(false, false, true, false)) @@ -159,10 +159,11 @@ private: auto stream_ptr = std::make_unique( socket_type(std::forward(env.app().getIOContext())), *context_); - beast::IP::Endpoint local(boost::asio::ip::make_address("172.1.1." + std::to_string(lid_))); - beast::IP::Endpoint remote( + beast::IP::Endpoint const local( + boost::asio::ip::make_address("172.1.1." + std::to_string(lid_))); + beast::IP::Endpoint const remote( boost::asio::ip::make_address("172.1.1." + std::to_string(rid_))); - PublicKey key(std::get<0>(randomKeyPair(KeyType::ed25519))); + PublicKey const key(std::get<0>(randomKeyPair(KeyType::ed25519))); auto consumer = overlay.resourceManager().newInboundEndpoint(remote); auto [slot, _] = overlay.peerFinder().new_inbound_slot(local, remote); auto const peer = std::make_shared( @@ -216,7 +217,7 @@ private: m.set_rawtransaction(s.data(), s.size()); m.set_deferred(false); m.set_status(protocol::TransactionStatus::tsNEW); - env.app().overlay().relay(uint256{0}, m, toSkip); + env.app().getOverlay().relay(uint256{0}, m, toSkip); BEAST_EXPECT(PeerTest::sendTx_ == expectRelay && PeerTest::queueTx_ == expectQueue); } } @@ -224,7 +225,7 @@ private: void run() override { - bool log = false; + bool const log = false; std::set skip = {0, 1, 2, 3, 4}; testConfig(log); // relay to all peers, no hash queue diff --git a/src/test/peerfinder/Livecache_test.cpp b/src/test/peerfinder/Livecache_test.cpp index b2d0eeeaf1..d12da84ffd 100644 --- a/src/test/peerfinder/Livecache_test.cpp +++ b/src/test/peerfinder/Livecache_test.cpp @@ -33,7 +33,7 @@ public: void add(beast::IP::Endpoint ep, C& c, std::uint32_t hops = 0) { - Endpoint cep{ep, hops}; + Endpoint const cep{ep, hops}; c.insert(cep); } diff --git a/src/test/peerfinder/PeerFinder_test.cpp b/src/test/peerfinder/PeerFinder_test.cpp index c39564c54c..a787a38e14 100644 --- a/src/test/peerfinder/PeerFinder_test.cpp +++ b/src/test/peerfinder/PeerFinder_test.cpp @@ -411,7 +411,7 @@ public: (c.PEERS_MAX == max && c.PEERS_IN_MAX == 0 && c.PEERS_OUT_MAX == 0) || (c.PEERS_IN_MAX == *maxIn && c.PEERS_OUT_MAX == *maxOut)); - Config config = Config::makeConfig(c, port, false, 0); + Config const config = Config::makeConfig(c, port, false, 0); Counts counts; counts.onConfig(config); diff --git a/src/test/protocol/Hooks_test.cpp b/src/test/protocol/Hooks_test.cpp index a280fd6bd4..53f20a2b5e 100644 --- a/src/test/protocol/Hooks_test.cpp +++ b/src/test/protocol/Hooks_test.cpp @@ -23,7 +23,7 @@ class Hooks_test : public beast::unit_test::suite using namespace test::jtx; - std::vector> fields_to_test = { + std::vector> const fields_to_test = { sfHookResult, sfHookStateChangeCount, sfHookEmitCount, @@ -116,7 +116,7 @@ class Hooks_test : public beast::unit_test::suite } case STI_UINT256: { - uint256 u = uint256::fromVoid( + uint256 const u = uint256::fromVoid( "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBE" "EFDEADBEEF"); dummy.setFieldH256(f, u); @@ -126,7 +126,7 @@ class Hooks_test : public beast::unit_test::suite } case STI_VL: { - std::vector v{1, 2, 3}; + std::vector const v{1, 2, 3}; dummy.setFieldVL(f, v); BEAST_EXPECT(dummy.getFieldVL(f) == v); BEAST_EXPECT(dummy.isFieldPresent(f)); @@ -135,7 +135,8 @@ class Hooks_test : public beast::unit_test::suite case STI_ACCOUNT: { // NOLINTNEXTLINE(bugprone-unchecked-optional-access) - AccountID id = *parseBase58("rwfSjJNK2YQuN64bSWn7T2eY9FJAyAPYJT"); + AccountID const id = + *parseBase58("rwfSjJNK2YQuN64bSWn7T2eY9FJAyAPYJT"); dummy.setAccountID(f, id); BEAST_EXPECT(dummy.getAccountID(f) == id); BEAST_EXPECT(dummy.isFieldPresent(f)); diff --git a/src/test/protocol/InnerObjectFormats_test.cpp b/src/test/protocol/InnerObjectFormats_test.cpp index c06524b90e..2961e90db7 100644 --- a/src/test/protocol/InnerObjectFormats_test.cpp +++ b/src/test/protocol/InnerObjectFormats_test.cpp @@ -155,7 +155,7 @@ public: using namespace InnerObjectFormatsUnitTestDetail; // Instantiate a jtx::Env so debugLog writes are exercised. - test::jtx::Env env(*this); + test::jtx::Env const env(*this); for (auto const& test : testArray) { @@ -166,7 +166,7 @@ public: Throw( "Internal InnerObjectFormatsParsedJSON error. Bad JSON."); } - STParsedJSONObject parsed("request", req); + STParsedJSONObject const parsed("request", req); bool const noObj = !parsed.object.has_value(); if (noObj == test.expectFail) { diff --git a/src/test/protocol/Issue_test.cpp b/src/test/protocol/Issue_test.cpp index 2321da4a6e..eddaf1c6d8 100644 --- a/src/test/protocol/Issue_test.cpp +++ b/src/test/protocol/Issue_test.cpp @@ -42,7 +42,7 @@ public: BEAST_EXPECT(u3 >= u2); BEAST_EXPECT(u3 > u2); - std::hash hash; + std::hash const hash; BEAST_EXPECT(hash(u1) == hash(u1)); BEAST_EXPECT(hash(u2) == hash(u2)); @@ -83,7 +83,7 @@ public: BEAST_EXPECT(Issue(c1, i3) >= Issue(c1, i2)); BEAST_EXPECT(Issue(c1, i3) > Issue(c1, i2)); - std::hash hash; + std::hash const hash; BEAST_EXPECT(hash(Issue(c1, i1)) == hash(Issue(c1, i1))); BEAST_EXPECT(hash(Issue(c1, i2)) == hash(Issue(c1, i2))); @@ -394,10 +394,10 @@ public: Currency const c3(3); AccountID const i3(3); - Issue a1(c1, i1); - Issue a2(c1, i2); - Issue a3(c2, i2); - Issue a4(c3, i2); + Issue const a1(c1, i1); + Issue const a2(c1, i2); + Issue const a3(c2, i2); + Issue const a4(c3, i2); uint256 const domain1{1}; uint256 const domain2{2}; @@ -477,7 +477,7 @@ public: BEAST_EXPECT(Book(a3, a4, domain2) > Book(a2, a3, domain1)); } - std::hash hash; + std::hash const hash; // log << std::hex << hash (Book (a1, a2)); // log << std::hex << hash (Book (a1, a2)); diff --git a/src/test/protocol/MultiApiJson_test.cpp b/src/test/protocol/MultiApiJson_test.cpp index 0da511b976..5aafa19771 100644 --- a/src/test/protocol/MultiApiJson_test.cpp +++ b/src/test/protocol/MultiApiJson_test.cpp @@ -236,7 +236,7 @@ struct MultiApiJson_test : beast::unit_test::suite std::forward(v).visit(), // [](auto...) {}); }; - }(std::move(std::as_const(s1)))); + }(std::move(std::as_const(s1)))); // NOLINT(performance-move-const-arg) } { @@ -867,22 +867,22 @@ struct MultiApiJson_test : beast::unit_test::suite return !requires { std::forward(v).visit(1, [](Json::Value const&&) {}); }; - }(std::move(std::as_const(s1)))); + }(std::move(std::as_const(s1)))); // NOLINT(performance-move-const-arg) static_assert([](auto&& v) { return requires { std::forward(v).visit(1, [](Json::Value const&) {}); }; - }(std::move(std::as_const(s1)))); + }(std::move(std::as_const(s1)))); // NOLINT(performance-move-const-arg) static_assert([](auto&& v) { return !requires { std::forward(v).visit()(1, [](Json::Value const&&) {}); }; - }(std::move(std::as_const(s1)))); + }(std::move(std::as_const(s1)))); // NOLINT(performance-move-const-arg) static_assert([](auto&& v) { return requires { std::forward(v).visit()(1, [](Json::Value const&) {}); }; - }(std::move(std::as_const(s1)))); + }(std::move(std::as_const(s1)))); // NOLINT(performance-move-const-arg) // Missing const static_assert([](auto&& v) { diff --git a/src/test/protocol/PublicKey_test.cpp b/src/test/protocol/PublicKey_test.cpp index 053e945a7b..79ab589404 100644 --- a/src/test/protocol/PublicKey_test.cpp +++ b/src/test/protocol/PublicKey_test.cpp @@ -46,7 +46,7 @@ public: } } - blob + static blob sig(std::string const& hex) { blob b; @@ -54,7 +54,7 @@ public: return b; } - bool + static bool check(std::optional answer, std::string const& s) { return ecdsaCanonicality(makeSlice(sig(s))) == answer; @@ -304,7 +304,7 @@ public: auto s = good; // Remove all characters from the string in random order: - std::hash r; + std::hash const r; while (!s.empty()) { @@ -421,7 +421,7 @@ public: KeyType::secp256k1, generateSecretKey(KeyType::secp256k1, generateSeed("masterpassphrase"))); - PublicKey pk2(pk1); + PublicKey const pk2(pk1); BEAST_EXPECT(pk1 == pk2); BEAST_EXPECT(pk2 == pk1); diff --git a/src/test/protocol/Quality_test.cpp b/src/test/protocol/Quality_test.cpp index 1dbbbfdf3d..f421f98c94 100644 --- a/src/test/protocol/Quality_test.cpp +++ b/src/test/protocol/Quality_test.cpp @@ -66,7 +66,7 @@ public: { // 1 in, 1 out: - Quality q(Amounts(amount(1), amount(1))); + Quality const q(Amounts(amount(1), amount(1))); ceil_in( q, @@ -95,7 +95,7 @@ public: { // 1 in, 2 out: - Quality q(Amounts(amount(1), amount(2))); + Quality const q(Amounts(amount(1), amount(2))); ceil_in( q, @@ -124,7 +124,7 @@ public: { // 2 in, 1 out: - Quality q(Amounts(amount(2), amount(1))); + Quality const q(Amounts(amount(2), amount(1))); ceil_in( q, @@ -159,7 +159,7 @@ public: { // 1 in, 1 out: - Quality q(Amounts(amount(1), amount(1))); + Quality const q(Amounts(amount(1), amount(1))); ceil_out( q, @@ -188,7 +188,7 @@ public: { // 1 in, 2 out: - Quality q(Amounts(amount(1), amount(2))); + Quality const q(Amounts(amount(1), amount(2))); ceil_out( q, @@ -217,7 +217,7 @@ public: { // 2 in, 1 out: - Quality q(Amounts(amount(2), amount(1))); + Quality const q(Amounts(amount(2), amount(1))); ceil_out( q, @@ -251,7 +251,7 @@ public: testcase("raw"); { - Quality q(0x5d048191fb9130daull); // 126836389.7680090 + Quality const q(0x5d048191fb9130daull); // 126836389.7680090 Amounts const value( amount(349469768), // 349.469768 XRP raw(2755280000000000ull, -15)); // 2.75528 @@ -266,7 +266,7 @@ public: { testcase("round"); - Quality q(0x59148191fb913522ull); // 57719.63525051682 + Quality const q(0x59148191fb913522ull); // 57719.63525051682 BEAST_EXPECT(q.round(3).rate().getText() == "57800"); BEAST_EXPECT(q.round(4).rate().getText() == "57720"); BEAST_EXPECT(q.round(5).rate().getText() == "57720"); diff --git a/src/test/protocol/STAmount_test.cpp b/src/test/protocol/STAmount_test.cpp index c9382d508a..2c2e005146 100644 --- a/src/test/protocol/STAmount_test.cpp +++ b/src/test/protocol/STAmount_test.cpp @@ -21,14 +21,14 @@ public: } //-------------------------------------------------------------------------- - STAmount + static STAmount roundSelf(STAmount const& amount) { if (amount.native()) return amount; std::uint64_t mantissa = amount.mantissa(); - std::uint64_t valueDigits = mantissa % 1000000000; + std::uint64_t const valueDigits = mantissa % 1000000000; if (valueDigits == 1) { @@ -67,15 +67,15 @@ public: roundTest(int n, int d, int m) { // check STAmount rounding - STAmount num(noIssue(), n); - STAmount den(noIssue(), d); - STAmount mul(noIssue(), m); - STAmount quot = divide(STAmount(n), STAmount(d), noIssue()); - STAmount res = roundSelf(multiply(quot, mul, noIssue())); + STAmount const num(noIssue(), n); + STAmount const den(noIssue(), d); + STAmount const mul(noIssue(), m); + STAmount const quot = divide(STAmount(n), STAmount(d), noIssue()); + STAmount const res = roundSelf(multiply(quot, mul, noIssue())); BEAST_EXPECT(!res.native()); - STAmount cmp(noIssue(), (n * m) / d); + STAmount const cmp(noIssue(), (n * m) / d); BEAST_EXPECT(!cmp.native()); @@ -93,13 +93,14 @@ public: void mulTest(int a, int b) { - STAmount aa(noIssue(), a); - STAmount bb(noIssue(), b); - STAmount prod1(multiply(aa, bb, noIssue())); + STAmount const aa(noIssue(), a); + STAmount const bb(noIssue(), b); + STAmount const prod1(multiply(aa, bb, noIssue())); BEAST_EXPECT(!prod1.native()); - STAmount prod2(noIssue(), static_cast(a) * static_cast(b)); + STAmount const prod2( + noIssue(), static_cast(a) * static_cast(b)); if (prod1 != prod2) { @@ -196,7 +197,11 @@ public: testNativeCurrency() { testcase("native currency"); - STAmount zeroSt, one(1), hundred(100); + + STAmount const zeroSt; + STAmount const one(1); + STAmount const hundred(100); + // VFALCO NOTE Why repeat "STAmount fail" so many times?? unexpected(serializeAndDeserialize(zeroSt) != zeroSt, "STAmount fail"); unexpected(serializeAndDeserialize(one) != one, "STAmount fail"); @@ -206,60 +211,60 @@ public: unexpected(zeroSt != beast::zero, "STAmount fail"); unexpected(one == beast::zero, "STAmount fail"); unexpected(hundred == beast::zero, "STAmount fail"); - unexpected((zeroSt < zeroSt), "STAmount fail"); + unexpected((zeroSt < zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt < one), "STAmount fail"); unexpected(!(zeroSt < hundred), "STAmount fail"); unexpected((one < zeroSt), "STAmount fail"); - unexpected((one < one), "STAmount fail"); + unexpected((one < one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one < hundred), "STAmount fail"); unexpected((hundred < zeroSt), "STAmount fail"); unexpected((hundred < one), "STAmount fail"); - unexpected((hundred < hundred), "STAmount fail"); - unexpected((zeroSt > zeroSt), "STAmount fail"); + unexpected((hundred < hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected((zeroSt > zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt > one), "STAmount fail"); unexpected((zeroSt > hundred), "STAmount fail"); unexpected(!(one > zeroSt), "STAmount fail"); - unexpected((one > one), "STAmount fail"); + unexpected((one > one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one > hundred), "STAmount fail"); unexpected(!(hundred > zeroSt), "STAmount fail"); unexpected(!(hundred > one), "STAmount fail"); - unexpected((hundred > hundred), "STAmount fail"); - unexpected(!(zeroSt <= zeroSt), "STAmount fail"); + unexpected((hundred > hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt <= zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt <= one), "STAmount fail"); unexpected(!(zeroSt <= hundred), "STAmount fail"); unexpected((one <= zeroSt), "STAmount fail"); - unexpected(!(one <= one), "STAmount fail"); + unexpected(!(one <= one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one <= hundred), "STAmount fail"); unexpected((hundred <= zeroSt), "STAmount fail"); unexpected((hundred <= one), "STAmount fail"); - unexpected(!(hundred <= hundred), "STAmount fail"); - unexpected(!(zeroSt >= zeroSt), "STAmount fail"); + unexpected(!(hundred <= hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt >= zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt >= one), "STAmount fail"); unexpected((zeroSt >= hundred), "STAmount fail"); unexpected(!(one >= zeroSt), "STAmount fail"); - unexpected(!(one >= one), "STAmount fail"); + unexpected(!(one >= one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one >= hundred), "STAmount fail"); unexpected(!(hundred >= zeroSt), "STAmount fail"); unexpected(!(hundred >= one), "STAmount fail"); - unexpected(!(hundred >= hundred), "STAmount fail"); - unexpected(!(zeroSt == zeroSt), "STAmount fail"); + unexpected(!(hundred >= hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt == zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt == one), "STAmount fail"); unexpected((zeroSt == hundred), "STAmount fail"); unexpected((one == zeroSt), "STAmount fail"); - unexpected(!(one == one), "STAmount fail"); + unexpected(!(one == one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one == hundred), "STAmount fail"); unexpected((hundred == zeroSt), "STAmount fail"); unexpected((hundred == one), "STAmount fail"); - unexpected(!(hundred == hundred), "STAmount fail"); - unexpected((zeroSt != zeroSt), "STAmount fail"); + unexpected(!(hundred == hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected((zeroSt != zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt != one), "STAmount fail"); unexpected(!(zeroSt != hundred), "STAmount fail"); unexpected(!(one != zeroSt), "STAmount fail"); - unexpected((one != one), "STAmount fail"); + unexpected((one != one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one != hundred), "STAmount fail"); unexpected(!(hundred != zeroSt), "STAmount fail"); unexpected(!(hundred != one), "STAmount fail"); - unexpected((hundred != hundred), "STAmount fail"); + unexpected((hundred != hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(STAmount().getText() != "0", "STAmount fail"); unexpected(STAmount(31).getText() != "31", "STAmount fail"); unexpected(STAmount(310).getText() != "310", "STAmount fail"); @@ -279,7 +284,11 @@ public: testCustomCurrency() { testcase("custom currency"); - STAmount zeroSt(noIssue()), one(noIssue(), 1), hundred(noIssue(), 100); + + STAmount const zeroSt(noIssue()); + STAmount const one(noIssue(), 1); + STAmount const hundred(noIssue(), 100); + unexpected(serializeAndDeserialize(zeroSt) != zeroSt, "STAmount fail"); unexpected(serializeAndDeserialize(one) != one, "STAmount fail"); unexpected(serializeAndDeserialize(hundred) != hundred, "STAmount fail"); @@ -288,60 +297,60 @@ public: unexpected(zeroSt != beast::zero, "STAmount fail"); unexpected(one == beast::zero, "STAmount fail"); unexpected(hundred == beast::zero, "STAmount fail"); - unexpected((zeroSt < zeroSt), "STAmount fail"); + unexpected((zeroSt < zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt < one), "STAmount fail"); unexpected(!(zeroSt < hundred), "STAmount fail"); unexpected((one < zeroSt), "STAmount fail"); - unexpected((one < one), "STAmount fail"); + unexpected((one < one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one < hundred), "STAmount fail"); unexpected((hundred < zeroSt), "STAmount fail"); unexpected((hundred < one), "STAmount fail"); - unexpected((hundred < hundred), "STAmount fail"); - unexpected((zeroSt > zeroSt), "STAmount fail"); + unexpected((hundred < hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected((zeroSt > zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt > one), "STAmount fail"); unexpected((zeroSt > hundred), "STAmount fail"); unexpected(!(one > zeroSt), "STAmount fail"); - unexpected((one > one), "STAmount fail"); + unexpected((one > one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one > hundred), "STAmount fail"); unexpected(!(hundred > zeroSt), "STAmount fail"); unexpected(!(hundred > one), "STAmount fail"); - unexpected((hundred > hundred), "STAmount fail"); - unexpected(!(zeroSt <= zeroSt), "STAmount fail"); + unexpected((hundred > hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt <= zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt <= one), "STAmount fail"); unexpected(!(zeroSt <= hundred), "STAmount fail"); unexpected((one <= zeroSt), "STAmount fail"); - unexpected(!(one <= one), "STAmount fail"); + unexpected(!(one <= one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one <= hundred), "STAmount fail"); unexpected((hundred <= zeroSt), "STAmount fail"); unexpected((hundred <= one), "STAmount fail"); - unexpected(!(hundred <= hundred), "STAmount fail"); - unexpected(!(zeroSt >= zeroSt), "STAmount fail"); + unexpected(!(hundred <= hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt >= zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt >= one), "STAmount fail"); unexpected((zeroSt >= hundred), "STAmount fail"); unexpected(!(one >= zeroSt), "STAmount fail"); - unexpected(!(one >= one), "STAmount fail"); + unexpected(!(one >= one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one >= hundred), "STAmount fail"); unexpected(!(hundred >= zeroSt), "STAmount fail"); unexpected(!(hundred >= one), "STAmount fail"); - unexpected(!(hundred >= hundred), "STAmount fail"); - unexpected(!(zeroSt == zeroSt), "STAmount fail"); + unexpected(!(hundred >= hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected(!(zeroSt == zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((zeroSt == one), "STAmount fail"); unexpected((zeroSt == hundred), "STAmount fail"); unexpected((one == zeroSt), "STAmount fail"); - unexpected(!(one == one), "STAmount fail"); + unexpected(!(one == one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected((one == hundred), "STAmount fail"); unexpected((hundred == zeroSt), "STAmount fail"); unexpected((hundred == one), "STAmount fail"); - unexpected(!(hundred == hundred), "STAmount fail"); - unexpected((zeroSt != zeroSt), "STAmount fail"); + unexpected(!(hundred == hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) + unexpected((zeroSt != zeroSt), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(zeroSt != one), "STAmount fail"); unexpected(!(zeroSt != hundred), "STAmount fail"); unexpected(!(one != zeroSt), "STAmount fail"); - unexpected((one != one), "STAmount fail"); + unexpected((one != one), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(!(one != hundred), "STAmount fail"); unexpected(!(hundred != zeroSt), "STAmount fail"); unexpected(!(hundred != one), "STAmount fail"); - unexpected((hundred != hundred), "STAmount fail"); + unexpected((hundred != hundred), "STAmount fail"); // NOLINT(misc-redundant-expression) unexpected(STAmount(noIssue()).getText() != "0", "STAmount fail"); unexpected(STAmount(noIssue(), 31).getText() != "31", "STAmount fail"); unexpected(STAmount(noIssue(), 31, 1).getText() != "310", "STAmount fail"); @@ -382,7 +391,8 @@ public: divide(STAmount(noIssue(), 60), STAmount(noIssue(), 3), xrpIssue()).getText() != "20", "STAmount divide fail"); - STAmount a1(noIssue(), 60), a2(noIssue(), 10, -1); + STAmount const a1(noIssue(), 60); + STAmount const a2(noIssue(), 10, -1); unexpected( divide(a2, a1, noIssue()) != amountFromQuality(getRate(a1, a2)), @@ -464,14 +474,14 @@ public: { testcase("underflow"); - STAmount bigNative(STAmount::cMaxNative / 2); - STAmount bigValue( + STAmount const bigNative(STAmount::cMaxNative / 2); + STAmount const bigValue( noIssue(), (STAmount::cMinValue + STAmount::cMaxValue) / 2, STAmount::cMaxOffset - 1); - STAmount smallValue( + STAmount const smallValue( noIssue(), (STAmount::cMinValue + STAmount::cMaxValue) / 2, STAmount::cMinOffset + 1); - STAmount zeroSt(noIssue(), 0); + STAmount const zeroSt(noIssue(), 0); - STAmount smallXSmall = multiply(smallValue, smallValue, noIssue()); + STAmount const smallXSmall = multiply(smallValue, smallValue, noIssue()); BEAST_EXPECT(smallXSmall == beast::zero); @@ -822,43 +832,43 @@ public: // Adding zero { - STAmount amt1(XRPAmount(0)); - STAmount amt2(XRPAmount(1000)); + STAmount const amt1(XRPAmount(0)); + STAmount const amt2(XRPAmount(1000)); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding zero { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(XRPAmount(0)); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(XRPAmount(0)); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding two positive XRP amounts { - STAmount amt1(XRPAmount(500)); - STAmount amt2(XRPAmount(1500)); + STAmount const amt1(XRPAmount(500)); + STAmount const amt2(XRPAmount(1500)); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding two negative XRP amounts { - STAmount amt1(XRPAmount(-500)); - STAmount amt2(XRPAmount(-1500)); + STAmount const amt1(XRPAmount(-500)); + STAmount const amt2(XRPAmount(-1500)); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding a positive and a negative XRP amount { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(XRPAmount(-1000)); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(XRPAmount(-1000)); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Overflow check for max XRP amounts { - STAmount amt1(std::numeric_limits::max()); - STAmount amt2(XRPAmount(1)); + STAmount const amt1(std::numeric_limits::max()); + STAmount const amt2(XRPAmount(1)); BEAST_EXPECT(canAdd(amt1, amt2) == false); } @@ -866,7 +876,7 @@ public: { STAmount amt1(std::numeric_limits::max()); amt1 += XRPAmount(1); - STAmount amt2(XRPAmount(-1)); + STAmount const amt2(XRPAmount(-1)); BEAST_EXPECT(canAdd(amt1, amt2) == false); } } @@ -881,50 +891,50 @@ public: // Adding two IOU amounts { - STAmount amt1(usd, 500); - STAmount amt2(usd, 1500); + STAmount const amt1(usd, 500); + STAmount const amt2(usd, 1500); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding a positive and a negative IOU amount { - STAmount amt1(usd, 1000); - STAmount amt2(usd, -1000); + STAmount const amt1(usd, 1000); + STAmount const amt2(usd, -1000); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Overflow check for max IOU amounts { - STAmount amt1(usd, std::numeric_limits::max()); - STAmount amt2(usd, 1); + STAmount const amt1(usd, std::numeric_limits::max()); + STAmount const amt2(usd, 1); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Overflow check for min IOU amounts { - STAmount amt1(usd, std::numeric_limits::min()); - STAmount amt2(usd, -1); + STAmount const amt1(usd, std::numeric_limits::min()); + STAmount const amt2(usd, -1); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Adding XRP and IOU { - STAmount amt1(XRPAmount(1)); - STAmount amt2(usd, 1); + STAmount const amt1(XRPAmount(1)); + STAmount const amt2(usd, 1); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Adding different IOU issues (non zero) { - STAmount amt1(usd, 1000); - STAmount amt2(eur, 500); + STAmount const amt1(usd, 1000); + STAmount const amt2(eur, 500); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Adding different IOU issues (zero) { - STAmount amt1(usd, 0); - STAmount amt2(eur, 500); + STAmount const amt1(usd, 0); + STAmount const amt2(eur, 500); BEAST_EXPECT(canAdd(amt1, amt2) == false); } } @@ -939,43 +949,43 @@ public: // Adding zero { - STAmount amt1(mpt, 0); - STAmount amt2(mpt, 1000); + STAmount const amt1(mpt, 0); + STAmount const amt2(mpt, 1000); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding zero { - STAmount amt1(mpt, 1000); - STAmount amt2(mpt, 0); + STAmount const amt1(mpt, 1000); + STAmount const amt2(mpt, 0); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding two positive MPT amounts { - STAmount amt1(mpt, 500); - STAmount amt2(mpt, 1500); + STAmount const amt1(mpt, 500); + STAmount const amt2(mpt, 1500); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding two negative MPT amounts { - STAmount amt1(mpt, -500); - STAmount amt2(mpt, -1500); + STAmount const amt1(mpt, -500); + STAmount const amt2(mpt, -1500); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Adding a positive and a negative MPT amount { - STAmount amt1(mpt, 1000); - STAmount amt2(mpt, -1000); + STAmount const amt1(mpt, 1000); + STAmount const amt2(mpt, -1000); BEAST_EXPECT(canAdd(amt1, amt2) == true); } // Overflow check for max MPT amounts { - STAmount amt1(mpt, std::numeric_limits::max()); - STAmount amt2(mpt, 1); + STAmount const amt1(mpt, std::numeric_limits::max()); + STAmount const amt2(mpt, 1); BEAST_EXPECT(canAdd(amt1, amt2) == false); } @@ -985,22 +995,22 @@ public: // Adding MPT and XRP { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(mpt, 1000); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(mpt, 1000); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Adding different MPT issues (non zero) { - STAmount amt1(mpt2, 500); - STAmount amt2(mpt, 500); + STAmount const amt1(mpt2, 500); + STAmount const amt2(mpt, 500); BEAST_EXPECT(canAdd(amt1, amt2) == false); } // Adding different MPT issues (non zero) { - STAmount amt1(mpt2, 0); - STAmount amt2(mpt, 500); + STAmount const amt1(mpt2, 0); + STAmount const amt2(mpt, 500); BEAST_EXPECT(canAdd(amt1, amt2) == false); } } @@ -1012,36 +1022,36 @@ public: // Subtracting zero { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(XRPAmount(0)); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(XRPAmount(0)); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting zero { - STAmount amt1(XRPAmount(0)); - STAmount amt2(XRPAmount(1000)); + STAmount const amt1(XRPAmount(0)); + STAmount const amt2(XRPAmount(1000)); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting two positive XRP amounts { - STAmount amt1(XRPAmount(1500)); - STAmount amt2(XRPAmount(500)); + STAmount const amt1(XRPAmount(1500)); + STAmount const amt2(XRPAmount(500)); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting two negative XRP amounts { - STAmount amt1(XRPAmount(-1500)); - STAmount amt2(XRPAmount(-500)); + STAmount const amt1(XRPAmount(-1500)); + STAmount const amt2(XRPAmount(-500)); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting a positive and a negative XRP amount { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(XRPAmount(-1000)); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(XRPAmount(-1000)); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } @@ -1049,14 +1059,14 @@ public: { STAmount amt1(std::numeric_limits::max()); amt1 += XRPAmount(1); - STAmount amt2(XRPAmount(1)); + STAmount const amt2(XRPAmount(1)); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Overflow check for max XRP amounts { - STAmount amt1(std::numeric_limits::max()); - STAmount amt2(XRPAmount(-1)); + STAmount const amt1(std::numeric_limits::max()); + STAmount const amt2(XRPAmount(-1)); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } } @@ -1070,29 +1080,29 @@ public: // Subtracting two IOU amounts { - STAmount amt1(usd, 1500); - STAmount amt2(usd, 500); + STAmount const amt1(usd, 1500); + STAmount const amt2(usd, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting XRP and IOU { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(usd, 1000); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(usd, 1000); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting different IOU issues (non zero) { - STAmount amt1(usd, 1000); - STAmount amt2(eur, 500); + STAmount const amt1(usd, 1000); + STAmount const amt2(eur, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting different IOU issues (zero) { - STAmount amt1(usd, 0); - STAmount amt2(eur, 500); + STAmount const amt1(usd, 0); + STAmount const amt2(eur, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } } @@ -1107,36 +1117,36 @@ public: // Subtracting zero { - STAmount amt1(mpt, 1000); - STAmount amt2(mpt, 0); + STAmount const amt1(mpt, 1000); + STAmount const amt2(mpt, 0); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting zero { - STAmount amt1(mpt, 0); - STAmount amt2(mpt, 1000); + STAmount const amt1(mpt, 0); + STAmount const amt2(mpt, 1000); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting two positive MPT amounts { - STAmount amt1(mpt, 1500); - STAmount amt2(mpt, 500); + STAmount const amt1(mpt, 1500); + STAmount const amt2(mpt, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting two negative MPT amounts { - STAmount amt1(mpt, -1500); - STAmount amt2(mpt, -500); + STAmount const amt1(mpt, -1500); + STAmount const amt2(mpt, -500); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } // Subtracting a positive and a negative MPT amount { - STAmount amt1(mpt, 1000); - STAmount amt2(mpt, -1000); + STAmount const amt1(mpt, 1000); + STAmount const amt2(mpt, -1000); BEAST_EXPECT(canSubtract(amt1, amt2) == true); } @@ -1146,29 +1156,29 @@ public: // Overflow check for max positive MPT amounts (should fail) { - STAmount amt1(mpt, std::numeric_limits::max()); - STAmount amt2(mpt, -2); + STAmount const amt1(mpt, std::numeric_limits::max()); + STAmount const amt2(mpt, -2); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting MPT and XRP { - STAmount amt1(XRPAmount(1000)); - STAmount amt2(mpt, 1000); + STAmount const amt1(XRPAmount(1000)); + STAmount const amt2(mpt, 1000); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting different MPT issues (non zero) { - STAmount amt1(mpt, 1000); - STAmount amt2(mpt2, 500); + STAmount const amt1(mpt, 1000); + STAmount const amt2(mpt2, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } // Subtracting different MPT issues (zero) { - STAmount amt1(mpt, 0); - STAmount amt2(mpt2, 500); + STAmount const amt1(mpt, 0); + STAmount const amt2(mpt2, 500); BEAST_EXPECT(canSubtract(amt1, amt2) == false); } } diff --git a/src/test/protocol/STInteger_test.cpp b/src/test/protocol/STInteger_test.cpp index 937dbd1a7f..4a0204d349 100644 --- a/src/test/protocol/STInteger_test.cpp +++ b/src/test/protocol/STInteger_test.cpp @@ -12,14 +12,14 @@ struct STInteger_test : public beast::unit_test::suite testUInt8() { testcase("UInt8"); - STUInt8 u8(255); + STUInt8 const u8(255); BEAST_EXPECT(u8.value() == 255); BEAST_EXPECT(u8.getText() == "255"); BEAST_EXPECT(u8.getSType() == STI_UINT8); BEAST_EXPECT(u8.getJson(JsonOptions::none) == 255); // there is some special handling for sfTransactionResult - STUInt8 tr(sfTransactionResult, 0); + STUInt8 const tr(sfTransactionResult, 0); BEAST_EXPECT(tr.value() == 0); BEAST_EXPECT( tr.getText() == "The transaction was applied. Only final in a validated ledger."); @@ -27,7 +27,7 @@ struct STInteger_test : public beast::unit_test::suite BEAST_EXPECT(tr.getJson(JsonOptions::none) == "tesSUCCESS"); // invalid transaction result - STUInt8 tr2(sfTransactionResult, 255); + STUInt8 const tr2(sfTransactionResult, 255); BEAST_EXPECT(tr2.value() == 255); BEAST_EXPECT(tr2.getText() == "255"); BEAST_EXPECT(tr2.getSType() == STI_UINT8); @@ -38,21 +38,21 @@ struct STInteger_test : public beast::unit_test::suite testUInt16() { testcase("UInt16"); - STUInt16 u16(65535); + STUInt16 const u16(65535); BEAST_EXPECT(u16.value() == 65535); BEAST_EXPECT(u16.getText() == "65535"); BEAST_EXPECT(u16.getSType() == STI_UINT16); BEAST_EXPECT(u16.getJson(JsonOptions::none) == 65535); // there is some special handling for sfLedgerEntryType - STUInt16 let(sfLedgerEntryType, ltACCOUNT_ROOT); + STUInt16 const let(sfLedgerEntryType, ltACCOUNT_ROOT); BEAST_EXPECT(let.value() == ltACCOUNT_ROOT); BEAST_EXPECT(let.getText() == "AccountRoot"); BEAST_EXPECT(let.getSType() == STI_UINT16); BEAST_EXPECT(let.getJson(JsonOptions::none) == "AccountRoot"); // there is some special handling for sfTransactionType - STUInt16 tlt(sfTransactionType, ttPAYMENT); + STUInt16 const tlt(sfTransactionType, ttPAYMENT); BEAST_EXPECT(tlt.value() == ttPAYMENT); BEAST_EXPECT(tlt.getText() == "Payment"); BEAST_EXPECT(tlt.getSType() == STI_UINT16); @@ -63,19 +63,19 @@ struct STInteger_test : public beast::unit_test::suite testUInt32() { testcase("UInt32"); - STUInt32 u32(4'294'967'295u); + STUInt32 const u32(4'294'967'295u); BEAST_EXPECT(u32.value() == 4'294'967'295u); BEAST_EXPECT(u32.getText() == "4294967295"); BEAST_EXPECT(u32.getSType() == STI_UINT32); BEAST_EXPECT(u32.getJson(JsonOptions::none) == 4'294'967'295u); // there is some special handling for sfPermissionValue - STUInt32 pv(sfPermissionValue, ttPAYMENT + 1); + STUInt32 const pv(sfPermissionValue, ttPAYMENT + 1); BEAST_EXPECT(pv.value() == ttPAYMENT + 1); BEAST_EXPECT(pv.getText() == "Payment"); BEAST_EXPECT(pv.getSType() == STI_UINT32); BEAST_EXPECT(pv.getJson(JsonOptions::none) == "Payment"); - STUInt32 pv2(sfPermissionValue, PaymentMint); + STUInt32 const pv2(sfPermissionValue, PaymentMint); BEAST_EXPECT(pv2.value() == PaymentMint); BEAST_EXPECT(pv2.getText() == "PaymentMint"); BEAST_EXPECT(pv2.getSType() == STI_UINT32); @@ -86,7 +86,7 @@ struct STInteger_test : public beast::unit_test::suite testUInt64() { testcase("UInt64"); - STUInt64 u64(0xFFFFFFFFFFFFFFFFull); + STUInt64 const u64(0xFFFFFFFFFFFFFFFFull); BEAST_EXPECT(u64.value() == 0xFFFFFFFFFFFFFFFFull); BEAST_EXPECT(u64.getText() == "18446744073709551615"); BEAST_EXPECT(u64.getSType() == STI_UINT64); @@ -96,7 +96,7 @@ struct STInteger_test : public beast::unit_test::suite BEAST_EXPECT(jsonVal.isString()); BEAST_EXPECT(jsonVal.asString() == "ffffffffffffffff"); - STUInt64 u64_2(sfMaximumAmount, 0xFFFFFFFFFFFFFFFFull); + STUInt64 const u64_2(sfMaximumAmount, 0xFFFFFFFFFFFFFFFFull); BEAST_EXPECT(u64_2.value() == 0xFFFFFFFFFFFFFFFFull); BEAST_EXPECT(u64_2.getText() == "18446744073709551615"); BEAST_EXPECT(u64_2.getSType() == STI_UINT64); @@ -109,7 +109,7 @@ struct STInteger_test : public beast::unit_test::suite testcase("Int32"); { int const minInt32 = -2147483648; - STInt32 i32(minInt32); + STInt32 const i32(minInt32); BEAST_EXPECT(i32.value() == minInt32); BEAST_EXPECT(i32.getText() == "-2147483648"); BEAST_EXPECT(i32.getSType() == STI_INT32); @@ -118,7 +118,7 @@ struct STInteger_test : public beast::unit_test::suite { int const maxInt32 = 2147483647; - STInt32 i32(maxInt32); + STInt32 const i32(maxInt32); BEAST_EXPECT(i32.value() == maxInt32); BEAST_EXPECT(i32.getText() == "2147483647"); BEAST_EXPECT(i32.getSType() == STI_INT32); diff --git a/src/test/protocol/STIssue_test.cpp b/src/test/protocol/STIssue_test.cpp index 7e6fe5487c..2ffdb1d9af 100644 --- a/src/test/protocol/STIssue_test.cpp +++ b/src/test/protocol/STIssue_test.cpp @@ -22,7 +22,7 @@ public: { issue = xrpIssue(); issue.account = alice; - STIssue stissue(sfAsset, Asset{issue}); + STIssue const stissue(sfAsset, Asset{issue}); fail("Inconsistent XRP Issue doesn't fail"); } catch (...) @@ -34,7 +34,7 @@ public: { issue = USD; issue.account = xrpAccount(); - STIssue stissue(sfAsset, Asset{issue}); + STIssue const stissue(sfAsset, Asset{issue}); fail("Inconsistent IOU Issue doesn't fail"); } catch (...) @@ -51,7 +51,7 @@ public: base_uint<320> uint; (void)uint.parseHex(data); SerialIter iter(Slice(uint.data(), uint.size())); - STIssue stissue(iter, sfAsset); + STIssue const stissue(iter, sfAsset); fail("Inconsistent IOU Issue doesn't fail on serializer"); } catch (...) @@ -61,7 +61,7 @@ public: try { - STIssue stissue(sfAsset, Asset{xrpIssue()}); + STIssue const stissue(sfAsset, Asset{xrpIssue()}); } catch (...) { @@ -70,7 +70,7 @@ public: try { - STIssue stissue(sfAsset, Asset{USD}); + STIssue const stissue(sfAsset, Asset{USD}); } catch (...) { @@ -85,7 +85,7 @@ public: base_uint<320> uint; (void)uint.parseHex(data); SerialIter iter(Slice(uint.data(), uint.size())); - STIssue stissue(iter, sfAsset); + STIssue const stissue(iter, sfAsset); BEAST_EXPECT(stissue.value() == USD); } catch (...) @@ -99,7 +99,7 @@ public: base_uint<160> uint; (void)uint.parseHex(data); SerialIter iter(Slice(uint.data(), uint.size())); - STIssue stissue(iter, sfAsset); + STIssue const stissue(iter, sfAsset); BEAST_EXPECT(stissue.value() == xrpCurrency()); } catch (...) diff --git a/src/test/protocol/STNumber_test.cpp b/src/test/protocol/STNumber_test.cpp index 9d43ace638..3b794b23b5 100644 --- a/src/test/protocol/STNumber_test.cpp +++ b/src/test/protocol/STNumber_test.cpp @@ -45,19 +45,19 @@ struct STNumber_test : public beast::unit_test::suite 0, 1, std::numeric_limits::max()}; - for (std::int64_t mantissa : mantissas) + for (std::int64_t const mantissa : mantissas) testCombo(Number{mantissa}); std::initializer_list const exponents = { Number::minExponent, -1, 0, 1, Number::maxExponent - 1}; - for (std::int32_t exponent : exponents) + for (std::int32_t const exponent : exponents) testCombo(Number{123, exponent}); { STAmount const strikePrice{noIssue(), 100}; STNumber const factor{sfNumber, 100}; auto const iouValue = strikePrice.iou(); - IOUAmount totalValue{iouValue * factor}; + IOUAmount const totalValue{iouValue * factor}; STAmount const totalAmount{totalValue, strikePrice.issue()}; BEAST_EXPECT(totalAmount == Number{10'000}); } @@ -95,7 +95,7 @@ struct STNumber_test : public beast::unit_test::suite BEAST_EXPECT(numberFromJson(sfNumber, "-0.000e6") == STNumber(sfNumber, 0)); { - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); // maxint64 9,223,372,036,854,775,807 auto const maxInt = std::to_string(std::numeric_limits::max()); // minint64 -9,223,372,036,854,775,808 @@ -276,7 +276,7 @@ struct STNumber_test : public beast::unit_test::suite for (auto const scale : {MantissaRange::small, MantissaRange::large}) { - NumberMantissaScaleGuard sg(scale); + NumberMantissaScaleGuard const sg(scale); testcase << to_string(Number::getMantissaScale()); doRun(); } diff --git a/src/test/protocol/STObject_test.cpp b/src/test/protocol/STObject_test.cpp index 0faa1946a9..135c577fb4 100644 --- a/src/test/protocol/STObject_test.cpp +++ b/src/test/protocol/STObject_test.cpp @@ -13,7 +13,8 @@ public: unexpected(sfGeneric.isUseful(), "sfGeneric must not be useful"); { // Try to put sfGeneric in an SOTemplate. - except([&]() { SOTemplate elements{{sfGeneric, soeREQUIRED}}; }); + except( + [&]() { SOTemplate const elements{{sfGeneric, soeREQUIRED}}; }); } unexpected(sfInvalid.isUseful(), "sfInvalid must not be useful"); @@ -31,12 +32,13 @@ public: } { // Try to put sfInvalid in an SOTemplate. - except([&]() { SOTemplate elements{{sfInvalid, soeREQUIRED}}; }); + except( + [&]() { SOTemplate const elements{{sfInvalid, soeREQUIRED}}; }); } { // Try to put the same SField into an SOTemplate twice. except([&]() { - SOTemplate elements{ + SOTemplate const elements{ {sfAccount, soeREQUIRED}, {sfAccount, soeREQUIRED}, }; @@ -59,7 +61,7 @@ public: }; STObject object1(elements, sfTestObject); - STObject object2(object1); + STObject const object2(object1); unexpected(object1.getSerializer() != object2.getSerializer(), "STObject error 1"); @@ -106,7 +108,7 @@ public: for (int i = 0; i < 1000; i++) { - Blob j(i, 2); + Blob const j(i, 2); object1.setFieldVL(sfTestVL, j); @@ -114,7 +116,7 @@ public: object1.add(s); SerialIter it(s.slice()); - STObject object3(elements, it, sfTestObject); + STObject const object3(elements, it, sfTestObject); unexpected(object1.getFieldVL(sfTestVL) != j, "STObject error"); @@ -134,7 +136,7 @@ public: object1.add(s); SerialIter it(s.slice()); - STObject object3(elements, it, sfTestObject); + STObject const object3(elements, it, sfTestObject); auto const& uints1 = object1.getFieldV256(sfTestV256); auto const& uints3 = object3.getFieldV256(sfTestV256); @@ -475,7 +477,7 @@ public: run() override { // Instantiate a jtx::Env so debugLog writes are exercised. - test::jtx::Env env(*this); + test::jtx::Env const env(*this); testFields(); testSerialization(); diff --git a/src/test/protocol/STParsedJSON_test.cpp b/src/test/protocol/STParsedJSON_test.cpp index 18e695d25d..1c86a90348 100644 --- a/src/test/protocol/STParsedJSON_test.cpp +++ b/src/test/protocol/STParsedJSON_test.cpp @@ -11,7 +11,7 @@ namespace xrpl { class STParsedJSON_test : public beast::unit_test::suite { - bool + static bool parseJSONString(std::string const& json, Json::Value& to) { Json::Reader reader; @@ -71,7 +71,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfCloseResolution] = -1; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -79,7 +79,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfCloseResolution] = 256; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -87,7 +87,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfCloseResolution] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -95,7 +95,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfCloseResolution] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -154,7 +154,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerEntryType] = -1; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -162,7 +162,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerEntryType] = 65536; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -170,7 +170,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerEntryType] = "65536"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -178,7 +178,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerEntryType] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -186,7 +186,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerEntryType] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -194,7 +194,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTransferFee] = "Payment"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -240,7 +240,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNetworkID] = -1; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -248,7 +248,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNetworkID] = "4294967296"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -256,7 +256,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNetworkID] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -264,7 +264,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNetworkID] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -298,7 +298,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = -1; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -309,7 +309,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = "10000000000000000"; // uint64 max + 1 (in hex) - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -317,7 +317,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = "0xabcdefabcdef"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -325,7 +325,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = "abcdefga"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -333,7 +333,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -341,7 +341,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfIndexNext] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -359,7 +359,7 @@ class STParsedJSON_test : public beast::unit_test::suite BEAST_EXPECT(obj.object->isFieldPresent(sfEmailHash)); // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH128(sfEmailHash).size() == 16); - std::array expected = { + std::array const expected = { 0x01, 0x23, 0x45, @@ -403,7 +403,8 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h128 = obj.object->getFieldH128(sfEmailHash); BEAST_EXPECT(h128.size() == 16); - bool allZero = std::all_of(h128.begin(), h128.end(), [](auto b) { return b == 0; }); + bool const allZero = + std::all_of(h128.begin(), h128.end(), [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -411,7 +412,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = "0123456789ABCDEF0123456789ABCDE"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -419,7 +420,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = "nothexstring"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -427,7 +428,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = "01234567"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -435,7 +436,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = "0123456789ABCDEF0123456789ABCDEF00"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -443,7 +444,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -451,7 +452,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfEmailHash] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -469,9 +470,9 @@ class STParsedJSON_test : public beast::unit_test::suite BEAST_EXPECT(obj.object->isFieldPresent(sfTakerPaysCurrency)); // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH160(sfTakerPaysCurrency).size() == 20); - std::array expected = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, - 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67}; + std::array const expected = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, + 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67}; // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH160(sfTakerPaysCurrency) == uint160{expected}); } @@ -498,7 +499,8 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h160 = obj.object->getFieldH160(sfTakerPaysCurrency); BEAST_EXPECT(h160.size() == 20); - bool allZero = std::all_of(h160.begin(), h160.end(), [](auto b) { return b == 0; }); + bool const allZero = + std::all_of(h160.begin(), h160.end(), [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -506,7 +508,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTakerPaysCurrency] = "nothexstring"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -514,7 +516,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTakerPaysCurrency] = "01234567"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -522,7 +524,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTakerPaysCurrency] = "0123456789ABCDEF0123456789ABCDEF0123456789"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -530,7 +532,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTakerPaysCurrency] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -538,7 +540,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTakerPaysCurrency] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -556,9 +558,9 @@ class STParsedJSON_test : public beast::unit_test::suite BEAST_EXPECT(obj.object->isFieldPresent(sfMPTokenIssuanceID)); // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH192(sfMPTokenIssuanceID).size() == 24); - std::array expected = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + std::array const expected = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH192(sfMPTokenIssuanceID) == uint192{expected}); } @@ -586,7 +588,8 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h192 = obj.object->getFieldH192(sfMPTokenIssuanceID); BEAST_EXPECT(h192.size() == 24); - bool allZero = std::all_of(h192.begin(), h192.end(), [](auto b) { return b == 0; }); + bool const allZero = + std::all_of(h192.begin(), h192.end(), [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -594,7 +597,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDE"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -602,7 +605,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = "nothexstring"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -610,7 +613,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = "01234567"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -618,7 +621,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF00"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -626,7 +629,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -634,7 +637,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfMPTokenIssuanceID] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -655,10 +658,10 @@ class STParsedJSON_test : public beast::unit_test::suite BEAST_EXPECT(obj.object->isFieldPresent(sfLedgerHash)); // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH256(sfLedgerHash).size() == 32); - std::array expected = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + std::array const expected = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, + 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; // NOLINTNEXTLINE(bugprone-unchecked-optional-access) BEAST_EXPECT(obj.object->getFieldH256(sfLedgerHash) == uint256{expected}); } @@ -687,7 +690,8 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h256 = obj.object->getFieldH256(sfLedgerHash); BEAST_EXPECT(h256.size() == 32); - bool allZero = std::all_of(h256.begin(), h256.end(), [](auto b) { return b == 0; }); + bool const allZero = + std::all_of(h256.begin(), h256.end(), [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -697,7 +701,7 @@ class STParsedJSON_test : public beast::unit_test::suite j[sfLedgerHash] = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD" "E"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -705,7 +709,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerHash] = "nothexstring"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -713,7 +717,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerHash] = "01234567"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -723,7 +727,7 @@ class STParsedJSON_test : public beast::unit_test::suite j[sfLedgerHash] = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD" "EF00"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -731,7 +735,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerHash] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -739,7 +743,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLedgerHash] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -810,7 +814,7 @@ class STParsedJSON_test : public beast::unit_test::suite // Test with string negative value { Json::Value j; - int value = -2147483648; + int const value = -2147483648; j[sfLoanScale] = std::to_string(value); STParsedJSONObject obj("Test", j); BEAST_EXPECT(obj.object.has_value()); @@ -826,7 +830,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLoanScale] = "-2147483649"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -834,7 +838,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLoanScale] = 2147483648u; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -842,7 +846,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLoanScale] = "2147483648"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -850,7 +854,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLoanScale] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -858,7 +862,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfLoanScale] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -918,7 +922,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfPublicKey] = "XYZ123"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -926,7 +930,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfPublicKey] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -934,7 +938,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfPublicKey] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -967,7 +971,7 @@ class STParsedJSON_test : public beast::unit_test::suite // Test empty array for Vector256 (should be valid, size 0) { Json::Value j; - Json::Value arr(Json::arrayValue); + Json::Value const arr(Json::arrayValue); j[sfHashes] = arr; STParsedJSONObject obj("Test", j); BEAST_EXPECT(obj.object.has_value()); @@ -984,7 +988,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value arr(Json::arrayValue); arr.append("nothexstring"); j[sfHashes] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -994,7 +998,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value arr(Json::arrayValue); arr.append("0123456789ABCDEF"); // too short for uint256 j[sfHashes] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1004,7 +1008,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value arr(Json::arrayValue); arr.append(12345); j[sfHashes] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1012,7 +1016,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfHashes] = "notanarray"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1024,7 +1028,7 @@ class STParsedJSON_test : public beast::unit_test::suite objElem["foo"] = "bar"; arr.append(objElem); j[sfHashes] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1064,7 +1068,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = "notAValidBase58Account"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1072,7 +1076,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = "001122334455"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1080,7 +1084,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = "000102030405060708090A0B0C0D0E0F101112131415"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1088,7 +1092,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = "000102030405060708090A0B0C0D0E0F1011121G"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1096,7 +1100,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = ""; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1104,7 +1108,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1112,7 +1116,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAccount] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1164,7 +1168,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfBaseAsset] = "USDD"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1185,7 +1189,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfBaseAsset] = "0123456789AB"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1193,7 +1197,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfBaseAsset] = "0123456789ABCDEF0123456789"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1214,7 +1218,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfBaseAsset] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1222,7 +1226,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfBaseAsset] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1259,7 +1263,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAmount] = "123.45"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1267,7 +1271,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAmount] = ""; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1275,7 +1279,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAmount] = "notanumber"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1283,7 +1287,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAmount] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1349,7 +1353,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfPaths] = "notanarray"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1359,7 +1363,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append("notanarray"); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1372,7 +1376,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1387,7 +1391,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1402,7 +1406,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1416,7 +1420,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1430,7 +1434,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1444,7 +1448,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1458,7 +1462,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1472,7 +1476,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value pathset(Json::arrayValue); pathset.append(path); j[sfPaths] = pathset; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1544,7 +1548,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value issue(Json::objectValue); issue["issuer"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1554,7 +1558,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value issue(Json::objectValue); issue["currency"] = "USD"; j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1565,7 +1569,7 @@ class STParsedJSON_test : public beast::unit_test::suite issue["currency"] = "USDD"; issue["issuer"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1576,7 +1580,7 @@ class STParsedJSON_test : public beast::unit_test::suite issue["currency"] = "USD"; issue["issuer"] = "notAValidIssuer"; j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1587,7 +1591,7 @@ class STParsedJSON_test : public beast::unit_test::suite issue["currency"] = Json::Value(Json::arrayValue); issue["issuer"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1598,7 +1602,7 @@ class STParsedJSON_test : public beast::unit_test::suite issue["currency"] = "USD"; issue["issuer"] = Json::Value(Json::objectValue); j[sfAsset] = issue; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1606,7 +1610,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfAsset] = "notanobject"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1676,7 +1680,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; bridge["IssuingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1691,7 +1695,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; bridge["IssuingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1709,7 +1713,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = lockingChainIssue; bridge["IssuingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1727,7 +1731,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = lockingChainIssue; bridge["LockingChainDoor"] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1738,7 +1742,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = "notanobject"; bridge["IssuingChainIssue"] = "notanobject"; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1754,7 +1758,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = lockingChainIssue; bridge["IssuingChainIssue"] = asset; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1770,7 +1774,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = lockingChainIssue; bridge["IssuingChainIssue"] = asset; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1787,7 +1791,7 @@ class STParsedJSON_test : public beast::unit_test::suite bridge["LockingChainIssue"] = lockingChainIssue; bridge["IssuingChainIssue"] = asset; j[sfXChainBridge] = bridge; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1795,7 +1799,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfXChainBridge] = "notanobject"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1880,7 +1884,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNumber] = "notanumber"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1888,7 +1892,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNumber] = Json::Value(Json::arrayValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1896,7 +1900,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNumber] = Json::Value(Json::objectValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1904,7 +1908,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfNumber] = ""; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } } @@ -1932,7 +1936,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTransactionMetaData] = "notanobject"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1942,7 +1946,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value arr(Json::arrayValue); arr.append(1); j[sfTransactionMetaData] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1950,7 +1954,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfTransactionMetaData] = Json::Value(Json::nullValue); - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -1962,7 +1966,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value* current = &obj; for (int i = 0; i < 63; ++i) { - Json::Value next(Json::objectValue); + Json::Value const next(Json::objectValue); (*current)[sfTransactionMetaData] = next; current = &((*current)[sfTransactionMetaData]); } @@ -1981,13 +1985,13 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value* current = &obj; for (int i = 0; i < 64; ++i) { - Json::Value next(Json::objectValue); + Json::Value const next(Json::objectValue); (*current)[sfTransactionMetaData] = next; current = &((*current)[sfTransactionMetaData]); } (*current)[sfTransactionResult.getJsonName()] = 1; j[sfTransactionMetaData] = obj; - STParsedJSONObject parsed("Test", j); + STParsedJSONObject const parsed("Test", j); BEAST_EXPECT(!parsed.object.has_value()); } } @@ -2025,7 +2029,7 @@ class STParsedJSON_test : public beast::unit_test::suite Json::Value arr(Json::arrayValue); arr.append("notanobject"); j[sfSignerEntries] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -2037,7 +2041,7 @@ class STParsedJSON_test : public beast::unit_test::suite elem["invalidField"] = 1; arr.append(elem); j[sfSignerEntries] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -2050,7 +2054,7 @@ class STParsedJSON_test : public beast::unit_test::suite elem[sfNetworkID] = 3; arr.append(elem); j[sfSignerEntries] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -2058,7 +2062,7 @@ class STParsedJSON_test : public beast::unit_test::suite { Json::Value j; j[sfSignerEntries] = "notanarray"; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } @@ -2071,14 +2075,14 @@ class STParsedJSON_test : public beast::unit_test::suite elem[sfTransactionResult] = "notanint"; arr.append(elem); j[sfSignerEntries] = arr; - STParsedJSONObject obj("Test", j); + STParsedJSONObject const obj("Test", j); BEAST_EXPECT(!obj.object.has_value()); } // Test with empty array for Array (should be valid) { Json::Value j; - Json::Value arr(Json::arrayValue); + Json::Value const arr(Json::arrayValue); j[sfSignerEntries] = arr; STParsedJSONObject obj("Test", j); BEAST_EXPECT(obj.object.has_value()); @@ -2093,7 +2097,7 @@ class STParsedJSON_test : public beast::unit_test::suite obj.append(Json::Value(Json::objectValue)); obj[0u][sfTransactionResult] = 1; j[sfSignerEntries] = obj; - STParsedJSONObject parsed("Test", j); + STParsedJSONObject const parsed("Test", j); BEAST_EXPECT(!parsed.object.has_value()); } @@ -2113,22 +2117,22 @@ class STParsedJSON_test : public beast::unit_test::suite them. */ - std::string faulty( + std::string const faulty( "{\"Template\":[{" "\"ModifiedNode\":{\"Sequence\":1}, " "\"DeletedNode\":{\"Sequence\":1}" "}]}"); - std::unique_ptr so; + std::unique_ptr const so; Json::Value faultyJson; - bool parsedOK(parseJSONString(faulty, faultyJson)); + bool const parsedOK(parseJSONString(faulty, faultyJson)); unexpected(!parsedOK, "failed to parse"); - STParsedJSONObject parsed("test", faultyJson); + STParsedJSONObject const parsed("test", faultyJson); BEAST_EXPECT(!parsed.object); } catch (std::runtime_error& e) { - std::string what(e.what()); + std::string const what(e.what()); unexpected(what.find("First level children of `Template`") != 0); } } @@ -2380,7 +2384,7 @@ class STParsedJSON_test : public beast::unit_test::suite run() override { // Instantiate a jtx::Env so debugLog writes are exercised. - test::jtx::Env env(*this); + test::jtx::Env const env(*this); testUInt8(); testUInt16(); testUInt32(); diff --git a/src/test/protocol/STTx_test.cpp b/src/test/protocol/STTx_test.cpp index 93cfd16d3d..0804c89bd4 100644 --- a/src/test/protocol/STTx_test.cpp +++ b/src/test/protocol/STTx_test.cpp @@ -1149,7 +1149,7 @@ public: // Construct an SOTemplate to get the ball rolling on building // an STObject that can contain an STArray. - SOTemplate recurse{ + SOTemplate const recurse{ {sfTransactionMetaData, soeOPTIONAL}, {sfTransactionHash, soeOPTIONAL}, {sfTemplate, soeOPTIONAL}, @@ -1211,7 +1211,7 @@ public: // Make an otherwise legit STTx with a duplicate field. Should // generate an exception when we deserialize. auto const keypair = randomKeyPair(KeyType::secp256k1); - STTx acctSet(ttACCOUNT_SET, [&keypair](auto& obj) { + STTx const acctSet(ttACCOUNT_SET, [&keypair](auto& obj) { obj.setAccountID(sfAccount, calcAccountID(keypair.first)); obj.setFieldU32(sfSequence, 7); obj.setFieldAmount(sfFee, STAmount(2557891634ull)); @@ -1329,7 +1329,7 @@ public: Serializer rawTxn; j.add(rawTxn); SerialIter sit(rawTxn.slice()); - STTx copy(sit); + STTx const copy(sit); if (copy != j) { @@ -1466,7 +1466,7 @@ public: auto const id2 = calcAccountID(kp2.first); // Get the stream of the transaction for use in multi-signing. - Serializer s = buildMultiSigningData(txn, id2); + Serializer const s = buildMultiSigningData(txn, id2); auto const saMultiSignature = sign(kp2.first, kp2.second, s.slice()); @@ -1497,7 +1497,7 @@ public: bool serialized = false; try { - STTx copy(sit); + STTx const copy(sit); serialized = true; } catch (std::exception const&) diff --git a/src/test/protocol/SecretKey_test.cpp b/src/test/protocol/SecretKey_test.cpp index e42bec3363..9072f5c0d9 100644 --- a/src/test/protocol/SecretKey_test.cpp +++ b/src/test/protocol/SecretKey_test.cpp @@ -216,7 +216,7 @@ public: auto s = good; // Remove all characters from the string in random order: - std::hash r; + std::hash const r; while (!s.empty()) { diff --git a/src/test/protocol/SeqProxy_test.cpp b/src/test/protocol/SeqProxy_test.cpp index 9096fe7daf..7e7a21ab6e 100644 --- a/src/test/protocol/SeqProxy_test.cpp +++ b/src/test/protocol/SeqProxy_test.cpp @@ -42,7 +42,7 @@ struct SeqProxy_test : public beast::unit_test::suite } // Verify streaming. - bool + static bool streamTest(SeqProxy seqProx) { std::string const type{seqProx.isSeq() ? "sequence" : "ticket"}; diff --git a/src/test/protocol/Serializer_test.cpp b/src/test/protocol/Serializer_test.cpp index c5b56c3029..e4eaac8a58 100644 --- a/src/test/protocol/Serializer_test.cpp +++ b/src/test/protocol/Serializer_test.cpp @@ -17,7 +17,7 @@ struct Serializer_test : public beast::unit_test::suite 0, 1, std::numeric_limits::max()}; - for (std::int32_t value : values) + for (std::int32_t const value : values) { Serializer s; s.add32(value); @@ -33,7 +33,7 @@ struct Serializer_test : public beast::unit_test::suite 0, 1, std::numeric_limits::max()}; - for (std::int64_t value : values) + for (std::int64_t const value : values) { Serializer s; s.add64(value); diff --git a/src/test/protocol/TER_test.cpp b/src/test/protocol/TER_test.cpp index cf88a570c5..2ad4b634aa 100644 --- a/src/test/protocol/TER_test.cpp +++ b/src/test/protocol/TER_test.cpp @@ -13,7 +13,7 @@ struct TER_test : public beast::unit_test::suite { for (auto i = -400; i < 400; ++i) { - TER t = TER::fromInt(i); + TER const t = TER::fromInt(i); auto inRange = isTelLocal(t) || isTemMalformed(t) || isTefFailure(t) || isTerRetry(t) || isTesSuccess(t) || isTecClaim(t); @@ -75,7 +75,7 @@ struct TER_test : public beast::unit_test::suite std::enable_if_t testIterate(Tup const& tup, beast::unit_test::suite& s) { - Func func; + Func const func; func(tup, s); testIterate(tup, s); } @@ -89,7 +89,7 @@ struct TER_test : public beast::unit_test::suite std::enable_if_t testIterate(Tup const& tup, beast::unit_test::suite& s) { - Func func; + Func const func; func(tup, s); testIterate::value - 1, I2 - 1, Func>(tup, s); } @@ -103,7 +103,7 @@ struct TER_test : public beast::unit_test::suite std::enable_if_t testIterate(Tup const& tup, beast::unit_test::suite& s) { - Func func; + Func const func; func(tup, s); } diff --git a/src/test/resource/Logic_test.cpp b/src/test/resource/Logic_test.cpp index c555b92860..12c1e631e2 100644 --- a/src/test/resource/Logic_test.cpp +++ b/src/test/resource/Logic_test.cpp @@ -44,7 +44,7 @@ public: //-------------------------------------------------------------------------- - void + static void createGossip(Gossip& gossip) { std::uint8_t const v(10 + rand_int(9)); @@ -54,7 +54,8 @@ public: { Gossip::Item item; item.balance = 100 + rand_int(499); - beast::IP::AddressV4::bytes_type d = {{192, 0, 2, static_cast(v + i)}}; + beast::IP::AddressV4::bytes_type const d = { + {192, 0, 2, static_cast(v + i)}}; item.address = beast::IP::Endpoint{beast::IP::AddressV4{d}}; gossip.items.push_back(item); } @@ -79,7 +80,7 @@ public: Charge const fee(dropThreshold + 1); beast::IP::Endpoint const addr(beast::IP::Endpoint::from_string("192.0.2.2")); - std::function ep = limited + std::function const ep = limited ? std::bind(&TestLogic::newInboundEndpoint, &logic, std::placeholders::_1) : std::bind(&TestLogic::newUnlimitedEndpoint, &logic, std::placeholders::_1); @@ -147,7 +148,7 @@ public: // Make sure the consumer is on the blacklist for a while. { - Consumer c(logic.newInboundEndpoint(addr)); + Consumer const c(logic.newInboundEndpoint(addr)); logic.periodicActivity(); if (c.disposition() != drop) { @@ -174,7 +175,7 @@ public: { ++logic.clock(); logic.periodicActivity(); - Consumer c(logic.newInboundEndpoint(addr)); + Consumer const c(logic.newInboundEndpoint(addr)); if (c.disposition() != drop) { readmitted = true; @@ -182,7 +183,7 @@ public: } } } - if (readmitted == false) + if (!readmitted) { fail("Dropped Consumer left on blacklist too long"); return; @@ -218,7 +219,7 @@ public: Gossip g; Gossip::Item item; item.balance = 100; - beast::IP::AddressV4::bytes_type d = {{192, 0, 2, 1}}; + beast::IP::AddressV4::bytes_type const d = {{192, 0, 2, 1}}; item.address = beast::IP::Endpoint{beast::IP::AddressV4{d}}; g.items.push_back(item); @@ -235,9 +236,9 @@ public: TestLogic logic(j); { - beast::IP::Endpoint address(beast::IP::Endpoint::from_string("192.0.2.1")); + beast::IP::Endpoint const address(beast::IP::Endpoint::from_string("192.0.2.1")); Consumer c(logic.newInboundEndpoint(address)); - Charge fee(1000); + Charge const fee(1000); JLOG(j.info()) << "Charging " << c.to_string() << " " << fee << " per second"; c.charge(fee); for (int i = 0; i < 128; ++i) @@ -249,9 +250,9 @@ public: } { - beast::IP::Endpoint address(beast::IP::Endpoint::from_string("192.0.2.2")); + beast::IP::Endpoint const address(beast::IP::Endpoint::from_string("192.0.2.2")); Consumer c(logic.newInboundEndpoint(address)); - Charge fee(1000); + Charge const fee(1000); JLOG(j.info()) << "Charging " << c.to_string() << " " << fee << " per second"; for (int i = 0; i < 128; ++i) { diff --git a/src/test/rpc/AccountCurrencies_test.cpp b/src/test/rpc/AccountCurrencies_test.cpp index bb8ccf0a85..009af9d454 100644 --- a/src/test/rpc/AccountCurrencies_test.cpp +++ b/src/test/rpc/AccountCurrencies_test.cpp @@ -165,7 +165,8 @@ class AccountCurrencies_test : public beast::unit_test::suite env(pay(gw, alice, gw["USA"](50))); // USA should now be missing from receive_currencies result = env.rpc("json", "account_currencies", to_string(params))[jss::result]; - decltype(gwCurrencies) gwCurrenciesNoUSA(gwCurrencies.begin() + 1, gwCurrencies.end()); + decltype(gwCurrencies) + const gwCurrenciesNoUSA(gwCurrencies.begin() + 1, gwCurrencies.end()); BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA)); BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies)); diff --git a/src/test/rpc/AccountObjects_test.cpp b/src/test/rpc/AccountObjects_test.cpp index 435bbd37d5..b6e8f6fa76 100644 --- a/src/test/rpc/AccountObjects_test.cpp +++ b/src/test/rpc/AccountObjects_test.cpp @@ -107,7 +107,7 @@ public: // test error on no account { - Json::Value params; + Json::Value const params; auto resp = env.rpc("json", "account_objects", to_string(params)); BEAST_EXPECT(resp[jss::result][jss::error_message] == "Missing field 'account'."); } @@ -488,7 +488,7 @@ public: params[jss::type] = jss::nft_page; auto resp = env.rpc("json", "account_objects", to_string(params)); BEAST_EXPECT(!resp.isMember(jss::marker)); - Json::Value& aobjs = resp[jss::result][jss::account_objects]; + Json::Value const& aobjs = resp[jss::result][jss::account_objects]; BEAST_EXPECT(aobjs.size() == 2); } // test stepped one-at-a-time with limit=1, resume from prev marker @@ -1276,7 +1276,7 @@ public: // valid, because when dirIndex = 0, we will use root key to find // dir. { - std::string s = "0," + entryIndex; + std::string const s = "0," + entryIndex; Json::Value params; params[jss::account] = bob.human(); params[jss::limit] = limit; @@ -1313,7 +1313,7 @@ public: auto resp = env.rpc("json", "account_objects", to_string(params)); auto& accountObjects = resp[jss::result][jss::account_objects]; BEAST_EXPECT(!resp[jss::result].isMember(jss::error)); - BEAST_EXPECT(accountObjects.size() == accountObjectSize - limit * 2); + BEAST_EXPECT(accountObjects.size() == accountObjectSize - (limit * 2)); BEAST_EXPECT(!resp[jss::result].isMember(jss::marker)); } diff --git a/src/test/rpc/AccountTx_test.cpp b/src/test/rpc/AccountTx_test.cpp index a11f957628..2470ec3c4c 100644 --- a/src/test/rpc/AccountTx_test.cpp +++ b/src/test/rpc/AccountTx_test.cpp @@ -97,7 +97,7 @@ class AccountTx_test : public beast::unit_test::suite cfg->FEES.reference_fee = 10; return cfg; })); - Account A1{"A1"}; + Account const A1{"A1"}; env.fund(XRP(10000), A1); env.close(); @@ -541,7 +541,7 @@ class AccountTx_test : public beast::unit_test::suite // PayChan { - std::uint32_t payChanSeq{env.seq(alice)}; + std::uint32_t const payChanSeq{env.seq(alice)}; Json::Value payChanCreate; payChanCreate[jss::TransactionType] = jss::PaymentChannelCreate; payChanCreate[jss::Account] = alice.human(); diff --git a/src/test/rpc/BookChanges_test.cpp b/src/test/rpc/BookChanges_test.cpp index 6bd71b141b..0618f4e7d0 100644 --- a/src/test/rpc/BookChanges_test.cpp +++ b/src/test/rpc/BookChanges_test.cpp @@ -78,7 +78,7 @@ public: featurePermissionedDEX}; Env env(*this, all); - PermissionedDEX permDex(env); + PermissionedDEX const permDex(env); auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] = permDex; auto wsc = makeWSClient(env.app().config()); diff --git a/src/test/rpc/Book_test.cpp b/src/test/rpc/Book_test.cpp index 8136af310a..5e149ebc0e 100644 --- a/src/test/rpc/Book_test.cpp +++ b/src/test/rpc/Book_test.cpp @@ -15,7 +15,7 @@ namespace test { class Book_test : public beast::unit_test::suite { - std::string + static std::string getBookDir( jtx::Env& env, Issue const& in, @@ -877,9 +877,9 @@ public: testcase("TrackOffers"); using namespace jtx; Env env(*this); - Account gw{"gw"}; - Account alice{"alice"}; - Account bob{"bob"}; + Account const gw{"gw"}; + Account const alice{"alice"}; + Account const bob{"bob"}; auto wsc = makeWSClient(env.app().config()); env.fund(XRP(20000), alice, bob, gw); env.close(); @@ -1186,8 +1186,8 @@ public: testcase("BookOffersRPC Errors"); using namespace jtx; Env env(*this); - Account gw{"gw"}; - Account alice{"alice"}; + Account const gw{"gw"}; + Account const alice{"alice"}; env.fund(XRP(10000), alice, gw); env.close(); auto USD = gw["USD"]; @@ -1515,7 +1515,7 @@ public: testcase("BookOffer Limits"); using namespace jtx; Env env{*this, asAdmin ? envconfig() : envconfig(no_admin)}; - Account gw{"gw"}; + Account const gw{"gw"}; env.fund(XRP(200000), gw); // Note that calls to env.close() fail without admin permission. if (asAdmin) @@ -1524,7 +1524,7 @@ public: auto USD = gw["USD"]; for (auto i = 0; i <= RPC::Tuning::bookOffers.rmax; i++) - env(offer(gw, XRP(50 + 1 * i), USD(1.0 + 0.1 * i))); + env(offer(gw, XRP(50 + (1 * i)), USD(1.0 + (0.1 * i)))); if (asAdmin) env.close(); @@ -1562,7 +1562,7 @@ public: featurePermissionedDEX}; Env env(*this, all); - PermissionedDEX permDex(env); + PermissionedDEX const permDex(env); auto const alice = permDex.alice; auto const bob = permDex.bob; auto const carol = permDex.carol; @@ -1685,7 +1685,7 @@ public: featurePermissionedDEX}; Env env(*this, all); - PermissionedDEX permDex(env); + PermissionedDEX const permDex(env); auto const alice = permDex.alice; auto const bob = permDex.bob; auto const carol = permDex.carol; diff --git a/src/test/rpc/DeliveredAmount_test.cpp b/src/test/rpc/DeliveredAmount_test.cpp index 00f8c54ee5..358657a6c3 100644 --- a/src/test/rpc/DeliveredAmount_test.cpp +++ b/src/test/rpc/DeliveredAmount_test.cpp @@ -76,7 +76,8 @@ public: bool checkExpectedCounters() const { - return !numExpectedAvailable_ && !numExpectedNotSet_ && !numExpectedSetUnavailable_; + return (numExpectedAvailable_ == 0) && (numExpectedNotSet_ == 0) && + (numExpectedSetUnavailable_ == 0); } // Check if the transaction has `delivered_amount` in the metaData as @@ -89,7 +90,7 @@ public: if (t[jss::TransactionType].asString() != jss::Payment) return true; - bool isSet = metaData.isMember(jss::delivered_amount); + bool const isSet = metaData.isMember(jss::delivered_amount); bool isSetUnavailable = false; bool isSetAvailable = false; if (isSet) diff --git a/src/test/rpc/DepositAuthorized_test.cpp b/src/test/rpc/DepositAuthorized_test.cpp index 87951e397c..7921d063c9 100644 --- a/src/test/rpc/DepositAuthorized_test.cpp +++ b/src/test/rpc/DepositAuthorized_test.cpp @@ -191,14 +191,14 @@ public: } { // Request an invalid ledger. - Json::Value args{depositAuthArgs(alice, becky, "-1")}; + Json::Value const args{depositAuthArgs(alice, becky, "-1")}; Json::Value const result{env.rpc("json", "deposit_authorized", args.toStyledString())}; verifyErr( result, "invalidParams", "Invalid field 'ledger_index', not string or number."); } { // Request a ledger that doesn't exist yet as a string. - Json::Value args{depositAuthArgs(alice, becky, "17")}; + Json::Value const args{depositAuthArgs(alice, becky, "17")}; Json::Value const result{env.rpc("json", "deposit_authorized", args.toStyledString())}; verifyErr(result, "lgrNotFound", "ledgerNotFound"); } @@ -211,7 +211,7 @@ public: } { // alice is not yet funded. - Json::Value args{depositAuthArgs(alice, becky)}; + Json::Value const args{depositAuthArgs(alice, becky)}; Json::Value const result{env.rpc("json", "deposit_authorized", args.toStyledString())}; verifyErr(result, "srcActNotFound", "Source account not found."); } @@ -219,7 +219,7 @@ public: env.close(); { // becky is not yet funded. - Json::Value args{depositAuthArgs(alice, becky)}; + Json::Value const args{depositAuthArgs(alice, becky)}; Json::Value const result{env.rpc("json", "deposit_authorized", args.toStyledString())}; verifyErr(result, "dstActNotFound", "Destination account not found."); } @@ -227,7 +227,7 @@ public: env.close(); { // Once becky is funded try it again and see it succeed. - Json::Value args{depositAuthArgs(alice, becky)}; + Json::Value const args{depositAuthArgs(alice, becky)}; Json::Value const result{env.rpc("json", "deposit_authorized", args.toStyledString())}; validateDepositAuthResult(result, true); } diff --git a/src/test/rpc/Feature_test.cpp b/src/test/rpc/Feature_test.cpp index 0050429c99..657eda2c1c 100644 --- a/src/test/rpc/Feature_test.cpp +++ b/src/test/rpc/Feature_test.cpp @@ -105,7 +105,7 @@ class Feature_test : public beast::unit_test::suite } // Test an arbitrary unknown feature - uint256 zero{0}; + uint256 const zero{0}; BEAST_EXPECT(featureToName(zero) == to_string(zero)); BEAST_EXPECT( featureToName(zero) == @@ -143,8 +143,9 @@ class Feature_test : public beast::unit_test::suite return; // default config - so all should be disabled, and // supported. Some may be vetoed. - bool expectVeto = (votes.at(feature[jss::name].asString()) == VoteBehavior::DefaultNo); - bool expectObsolete = + bool const expectVeto = + (votes.at(feature[jss::name].asString()) == VoteBehavior::DefaultNo); + bool const expectObsolete = (votes.at(feature[jss::name].asString()) == VoteBehavior::Obsolete); BEAST_EXPECTS( feature.isMember(jss::enabled) && !feature[jss::enabled].asBool(), @@ -278,8 +279,8 @@ class Feature_test : public beast::unit_test::suite (void)id.parseHex(it.key().asString().c_str()); if (!BEAST_EXPECT((*it).isMember(jss::name))) return; - bool expectEnabled = env.app().getAmendmentTable().isEnabled(id); - bool expectSupported = env.app().getAmendmentTable().isSupported(id); + bool const expectEnabled = env.app().getAmendmentTable().isEnabled(id); + bool const expectSupported = env.app().getAmendmentTable().isSupported(id); BEAST_EXPECTS( (*it).isMember(jss::enabled) && (*it)[jss::enabled].asBool() == expectEnabled, (*it)[jss::name].asString() + " enabled"); @@ -339,10 +340,12 @@ class Feature_test : public beast::unit_test::suite (void)id.parseHex(it.key().asString().c_str()); if (!BEAST_EXPECT((*it).isMember(jss::name))) return; - bool expectEnabled = env.app().getAmendmentTable().isEnabled(id); - bool expectSupported = env.app().getAmendmentTable().isSupported(id); - bool expectVeto = (votes.at((*it)[jss::name].asString()) == VoteBehavior::DefaultNo); - bool expectObsolete = (votes.at((*it)[jss::name].asString()) == VoteBehavior::Obsolete); + bool const expectEnabled = env.app().getAmendmentTable().isEnabled(id); + bool const expectSupported = env.app().getAmendmentTable().isSupported(id); + bool const expectVeto = + (votes.at((*it)[jss::name].asString()) == VoteBehavior::DefaultNo); + bool const expectObsolete = + (votes.at((*it)[jss::name].asString()) == VoteBehavior::Obsolete); BEAST_EXPECTS( (*it).isMember(jss::enabled) && (*it)[jss::enabled].asBool() == expectEnabled, (*it)[jss::name].asString() + " enabled"); @@ -421,8 +424,9 @@ class Feature_test : public beast::unit_test::suite { if (!BEAST_EXPECT(feature.isMember(jss::name))) return; - bool expectVeto = (votes.at(feature[jss::name].asString()) == VoteBehavior::DefaultNo); - bool expectObsolete = + bool const expectVeto = + (votes.at(feature[jss::name].asString()) == VoteBehavior::DefaultNo); + bool const expectObsolete = (votes.at(feature[jss::name].asString()) == VoteBehavior::Obsolete); BEAST_EXPECTS( (expectVeto || expectObsolete) ^ feature.isMember(jss::majority), diff --git a/src/test/rpc/GatewayBalances_test.cpp b/src/test/rpc/GatewayBalances_test.cpp index 0deb1fc627..b6efea17fc 100644 --- a/src/test/rpc/GatewayBalances_test.cpp +++ b/src/test/rpc/GatewayBalances_test.cpp @@ -231,7 +231,7 @@ public: using namespace jtx; // Ensure MPT is enabled - FeatureBitset features = testable_amendments() | featureMPTokensV1; + FeatureBitset const features = testable_amendments() | featureMPTokensV1; Env env(*this, features); Account const alice{"alice"}; diff --git a/src/test/rpc/GetAggregatePrice_test.cpp b/src/test/rpc/GetAggregatePrice_test.cpp index 5facd683a5..1d14678f76 100644 --- a/src/test/rpc/GetAggregatePrice_test.cpp +++ b/src/test/rpc/GetAggregatePrice_test.cpp @@ -34,7 +34,7 @@ public: BEAST_EXPECT(ret[jss::error_message].asString() == "Missing field 'quote_asset'."); // invalid base_asset, quote_asset - std::vector invalidAsset = { + std::vector const invalidAsset = { NoneTag, 1, -1, @@ -76,7 +76,7 @@ public: ret = Oracle::aggregatePrice(env, "XRP", "USD", {{{owner, 2}}}); BEAST_EXPECT(ret[jss::error].asString() == "objectNotFound"); // invalid values - std::vector invalidDocument = {NoneTag, 1.2, -1, "", "none", "1.2"}; + std::vector const invalidDocument = {NoneTag, 1.2, -1, "", "none", "1.2"}; for (auto const& v : invalidDocument) { ret = Oracle::aggregatePrice(env, "XRP", "USD", {{{owner, v}}}); @@ -97,7 +97,7 @@ public: // oracles have wrong asset pair env.fund(XRP(1'000), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .series = {{"XRP", "EUR", 740, 1}}, @@ -106,7 +106,7 @@ public: BEAST_EXPECT(ret[jss::error].asString() == "objectNotFound"); // invalid trim value - std::vector invalidTrim = {NoneTag, 0, 26, -1, 1.2, "", "none", "1.2"}; + std::vector const invalidTrim = {NoneTag, 0, 26, -1, 1.2, "", "none", "1.2"}; for (auto const& v : invalidTrim) { ret = @@ -115,7 +115,7 @@ public: } // invalid time threshold value - std::vector invalidTime = {NoneTag, -1, 1.2, "", "none", "1.2"}; + std::vector const invalidTime = {NoneTag, -1, 1.2, "", "none", "1.2"}; for (auto const& v : invalidTime) { ret = Oracle::aggregatePrice( @@ -134,7 +134,7 @@ public: { Account const owner(std::to_string(i)); env.fund(XRP(1'000), owner); - Oracle oracle(env, {.owner = owner, .documentID = i, .fee = baseFee}); + Oracle const oracle(env, {.owner = owner, .documentID = i, .fee = baseFee}); oracles.emplace_back(owner, oracle.documentID()); } auto const ret = Oracle::aggregatePrice(env, "XRP", "USD", oracles); @@ -156,7 +156,7 @@ public: Account const owner{std::to_string(i)}; env.fund(XRP(1'000), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .documentID = rand(), @@ -178,7 +178,7 @@ public: // the global mantissa size. And since it's a thread-local, // overriding it locally won't make a difference either. // This will mean all RPC will use the default of "large". - NumberMantissaScaleGuard mg(mantissaSize); + NumberMantissaScaleGuard const mg(mantissaSize); Env env(*this, feats); OraclesData oracles; diff --git a/src/test/rpc/GetCounts_test.cpp b/src/test/rpc/GetCounts_test.cpp index 07c29e3648..d0729b3f56 100644 --- a/src/test/rpc/GetCounts_test.cpp +++ b/src/test/rpc/GetCounts_test.cpp @@ -32,8 +32,8 @@ class GetCounts_test : public beast::unit_test::suite // create some transactions env.close(); - Account alice{"alice"}; - Account bob{"bob"}; + Account const alice{"alice"}; + Account const bob{"bob"}; env.fund(XRP(10000), alice, bob); env.trust(alice["USD"](1000), bob); for (auto i = 0; i < 20; ++i) diff --git a/src/test/rpc/JSONRPC_test.cpp b/src/test/rpc/JSONRPC_test.cpp index 87c7d3dcd0..b9d4ee4a98 100644 --- a/src/test/rpc/JSONRPC_test.cpp +++ b/src/test/rpc/JSONRPC_test.cpp @@ -2119,7 +2119,7 @@ public: jt.jv.removeMember(jss::Fee); jt.jv.removeMember(jss::TxnSignature); req[jss::tx_json] = jt.jv; - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2189,7 +2189,7 @@ public: alice)); req[jss::tx_json] = jt.jv; - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2216,7 +2216,7 @@ public: { Json::Value req; Json::Reader().parse("{ \"fee_mult_max\" : 1, \"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2236,7 +2236,7 @@ public: "{ \"fee_mult_max\" : 3, \"fee_div_max\" : 2, " "\"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2253,7 +2253,7 @@ public: { Json::Value req; Json::Reader().parse("{ \"fee_mult_max\" : 0, \"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2274,7 +2274,7 @@ public: "{ \"fee_mult_max\" : 3, \"fee_div_max\" : 6, " "\"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2293,7 +2293,7 @@ public: "{ \"fee_mult_max\" : 0, \"fee_div_max\" : 2, " "\"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2312,7 +2312,7 @@ public: "{ \"fee_mult_max\" : 10, \"fee_div_max\" : 0, " "\"tx_json\" : { } } ", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2330,7 +2330,7 @@ public: Json::Value req; test::jtx::Account const alice("alice"); req[jss::tx_json] = test::jtx::acctdelete(env.master.human(), alice.human()); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2367,7 +2367,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2389,7 +2389,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2417,7 +2417,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2440,7 +2440,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2463,7 +2463,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2486,7 +2486,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2509,7 +2509,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2530,7 +2530,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2552,7 +2552,7 @@ public: "tx_json" : { } })", req); - Json::Value result = checkFee( + Json::Value const result = checkFee( req, Role::ADMIN, true, @@ -2648,7 +2648,7 @@ public: env(noop(env.master), fee(47)); } - Env_ss envs(env); + Env_ss const envs(env); Json::Value toSign; toSign[jss::tx_json] = noop(env.master); @@ -2732,7 +2732,7 @@ public: env(pay(g, env.master, USD(50))); env.close(); - ProcessTransactionFn processTxn = fakeProcessTransaction; + ProcessTransactionFn const processTxn = fakeProcessTransaction; // A list of all the functions we want to test. using signFunc = Json::Value (*)( @@ -2773,7 +2773,7 @@ public: static Role const testedRoles[] = { Role::GUEST, Role::USER, Role::ADMIN, Role::FORBID}; - for (Role testRole : testedRoles) + for (Role const testRole : testedRoles) { Json::Value result; auto const signFn = get<0>(testFunc); diff --git a/src/test/rpc/KeyGeneration_test.cpp b/src/test/rpc/KeyGeneration_test.cpp index e4af2608b7..87d2ded7ad 100644 --- a/src/test/rpc/KeyGeneration_test.cpp +++ b/src/test/rpc/KeyGeneration_test.cpp @@ -98,7 +98,7 @@ public: params.isMember(jss::key_type) ? params[jss::key_type] : "secp256k1"); BEAST_EXPECT(!result.isMember(jss::warning)); - std::string seed = result[jss::master_seed].asString(); + std::string const seed = result[jss::master_seed].asString(); result = walletPropose(params); diff --git a/src/test/rpc/LedgerEntry_test.cpp b/src/test/rpc/LedgerEntry_test.cpp index eec114b71c..bd053d71c9 100644 --- a/src/test/rpc/LedgerEntry_test.cpp +++ b/src/test/rpc/LedgerEntry_test.cpp @@ -131,7 +131,7 @@ class LedgerEntry_test : public beast::unit_test::suite } } - std::vector + static std::vector getBadValues(FieldType fieldType) { static Json::Value const injectObject = []() { @@ -172,7 +172,7 @@ class LedgerEntry_test : public beast::unit_test::suite }; auto remove = [&](std::vector indices) -> std::vector { - std::unordered_set indexSet(indices.begin(), indices.end()); + std::unordered_set const indexSet(indices.begin(), indices.end()); std::vector values; values.reserve(allBadValues.size() - indexSet.size()); for (std::size_t i = 0; i < allBadValues.size(); ++i) @@ -225,7 +225,7 @@ class LedgerEntry_test : public beast::unit_test::suite } } - Json::Value + static Json::Value getCorrectValue(Json::StaticString fieldName) { static Json::Value const twoAccountArray = []() { @@ -595,7 +595,7 @@ class LedgerEntry_test : public beast::unit_test::suite } { // Check malformed cases - Json::Value jvParams; + Json::Value const jvParams; testMalformedField( env, jvParams, jss::account_root, FieldType::AccountField, "malformedAddress"); } @@ -673,7 +673,7 @@ class LedgerEntry_test : public beast::unit_test::suite view.rawInsert(sle); return true; }; - env.app().openLedger().modify(amendments); + env.app().getOpenLedger().modify(amendments); } Json::Value jvParams; @@ -699,7 +699,7 @@ class LedgerEntry_test : public beast::unit_test::suite Account const alice{"alice"}; env.fund(XRP(10000), alice); env.close(); - AMM amm(env, alice, XRP(10), alice["USD"](1000)); + AMM const amm(env, alice, XRP(10), alice["USD"](1000)); env.close(); { @@ -1561,7 +1561,7 @@ class LedgerEntry_test : public beast::unit_test::suite view.rawInsert(sle); return true; }; - env.app().openLedger().modify(nUNL); + env.app().getOpenLedger().modify(nUNL); } Json::Value jvParams; @@ -1961,7 +1961,7 @@ class LedgerEntry_test : public beast::unit_test::suite } { // Malformed DID index - Json::Value jvParams; + Json::Value const jvParams; testMalformedField( env, jvParams, jss::did, FieldType::AccountField, "malformedAddress"); } @@ -1977,7 +1977,7 @@ class LedgerEntry_test : public beast::unit_test::suite Env env(*this); Account const owner("owner"); env.fund(XRP(1'000), owner); - Oracle oracle( + Oracle const oracle( env, {.owner = owner, .fee = static_cast(env.current()->fees().base.drops())}); { @@ -2008,11 +2008,11 @@ class LedgerEntry_test : public beast::unit_test::suite Account const owner(std::string("owner") + std::to_string(i)); env.fund(XRP(1'000), owner); // different accounts can have the same asset pair - Oracle oracle(env, {.owner = owner, .documentID = i, .fee = baseFee}); + Oracle const oracle(env, {.owner = owner, .documentID = i, .fee = baseFee}); accounts.push_back(owner.id()); oracles.push_back(oracle.documentID()); // same account can have different asset pair - Oracle oracle1(env, {.owner = owner, .documentID = i + 10, .fee = baseFee}); + Oracle const oracle1(env, {.owner = owner, .documentID = i + 10, .fee = baseFee}); accounts.push_back(owner.id()); oracles.push_back(oracle1.documentID()); } @@ -2102,7 +2102,7 @@ class LedgerEntry_test : public beast::unit_test::suite } { // Malformed MPTIssuance index - Json::Value jvParams; + Json::Value const jvParams; testMalformedField( env, jvParams, jss::mptoken, FieldType::HashOrObjectField, "malformedRequest"); } @@ -2189,7 +2189,7 @@ class LedgerEntry_test : public beast::unit_test::suite Account const bob{"bob"}; Env env{*this, envconfig([](auto cfg) { - cfg->START_UP = StartUpType::FRESH; + cfg->START_UP = StartUpType::Fresh; return cfg; })}; @@ -2382,7 +2382,7 @@ class LedgerEntry_test : public beast::unit_test::suite Account const bob{"bob"}; Env env{*this, envconfig([](auto cfg) { - cfg->START_UP = StartUpType::FRESH; + cfg->START_UP = StartUpType::Fresh; return cfg; })}; diff --git a/src/test/rpc/LedgerRPC_test.cpp b/src/test/rpc/LedgerRPC_test.cpp index 2f4a63a090..8f965aa2cf 100644 --- a/src/test/rpc/LedgerRPC_test.cpp +++ b/src/test/rpc/LedgerRPC_test.cpp @@ -40,7 +40,7 @@ class LedgerRPC_test : public beast::unit_test::suite // Corrupt a valid address by replacing the 10th character with '!'. // '!' is not part of the ripple alphabet. - std::string + static std::string makeBadAddress(std::string good) { std::string ret = std::move(good); diff --git a/src/test/rpc/LedgerRequest_test.cpp b/src/test/rpc/LedgerRequest_test.cpp index 18c717ec19..4462c1f039 100644 --- a/src/test/rpc/LedgerRequest_test.cpp +++ b/src/test/rpc/LedgerRequest_test.cpp @@ -102,7 +102,7 @@ public: } { - std::string ledgerHash(64, 'q'); + std::string const ledgerHash(64, 'q'); auto const result = env.rpc("ledger_request", ledgerHash); @@ -113,7 +113,7 @@ public: } { - std::string ledgerHash(64, '1'); + std::string const ledgerHash(64, '1'); auto const result = env.rpc("ledger_request", ledgerHash); diff --git a/src/test/rpc/Peers_test.cpp b/src/test/rpc/Peers_test.cpp index d72ad6d878..984e767516 100644 --- a/src/test/rpc/Peers_test.cpp +++ b/src/test/rpc/Peers_test.cpp @@ -31,10 +31,10 @@ class Peers_test : public beast::unit_test::suite { auto kp = generateKeyPair(KeyType::secp256k1, generateSeed("seed" + std::to_string(i))); - std::string name = "Node " + std::to_string(i); + std::string const name = "Node " + std::to_string(i); using namespace std::chrono_literals; - env.app().cluster().update(kp.first, name, 200, env.timeKeeper().now() - 10s); + env.app().getCluster().update(kp.first, name, 200, env.timeKeeper().now() - 10s); nodes.insert(std::make_pair(toBase58(TokenType::NodePublic, kp.first), name)); } diff --git a/src/test/rpc/RPCCall_test.cpp b/src/test/rpc/RPCCall_test.cpp index e4ef3aca6a..ae876dded4 100644 --- a/src/test/rpc/RPCCall_test.cpp +++ b/src/test/rpc/RPCCall_test.cpp @@ -5854,7 +5854,7 @@ public: apiVersion <= RPC::apiMaximumValidVersion)) return; - test::jtx::Env env(*this, makeNetworkConfig(11111)); // Used only for its Journal. + test::jtx::Env const env(*this, makeNetworkConfig(11111)); // Used only for its Journal. // For each RPCCall test. for (RPCCallTestData const& rpcCallTest : rpcCallTestArray) diff --git a/src/test/rpc/Roles_test.cpp b/src/test/rpc/Roles_test.cpp index a4f9de2284..e3d90a9c56 100644 --- a/src/test/rpc/Roles_test.cpp +++ b/src/test/rpc/Roles_test.cpp @@ -12,7 +12,7 @@ namespace test { class Roles_test : public beast::unit_test::suite { - bool + static bool isValidIpAddress(std::string const& addr) { boost::system::error_code ec; diff --git a/src/test/rpc/ServerInfo_test.cpp b/src/test/rpc/ServerInfo_test.cpp index 5bb2c31757..978b995ce8 100644 --- a/src/test/rpc/ServerInfo_test.cpp +++ b/src/test/rpc/ServerInfo_test.cpp @@ -93,7 +93,7 @@ admin = 127.0.0.1 Env env(*this); // Call NetworkOPs directly and set the admin flag to false. - auto const result = env.app().getOPs().getServerInfo(true, false, 0); + auto const result = env.app().getOPs().getServerInfo(true, false, false); // Expect that the admin ports are not included in the result. auto const& ports = result[jss::ports]; BEAST_EXPECT(ports.isArray() && ports.size() == 0); diff --git a/src/test/rpc/Simulate_test.cpp b/src/test/rpc/Simulate_test.cpp index 74f9b03111..0581313e7a 100644 --- a/src/test/rpc/Simulate_test.cpp +++ b/src/test/rpc/Simulate_test.cpp @@ -131,8 +131,8 @@ class Simulate_test : public beast::unit_test::suite BEAST_EXPECTS(env.current()->txCount() == 0, std::to_string(env.current()->txCount())); } - Json::Value - getJsonMetadata(Json::Value txResult) const + static Json::Value + getJsonMetadata(Json::Value txResult) { if (txResult.isMember(jss::meta_blob)) { @@ -1127,7 +1127,7 @@ class Simulate_test : public beast::unit_test::suite tx[jss::TransactionType] = jss::NFTokenMint; tx[sfNFTokenTaxon] = 1; - Json::Value nftokenId = to_string(token::getNextID(env, alice, 1)); + Json::Value const nftokenId = to_string(token::getNextID(env, alice, 1)); // test nft synthetic testTxJsonMetadataField(env, tx, validateOutput, jss::nftoken_id, nftokenId); } @@ -1137,7 +1137,7 @@ class Simulate_test : public beast::unit_test::suite tx[jss::Account] = alice.human(); tx[jss::TransactionType] = jss::MPTokenIssuanceCreate; - Json::Value mptIssuanceId = to_string(makeMptID(env.seq(alice), alice)); + Json::Value const mptIssuanceId = to_string(makeMptID(env.seq(alice), alice)); // test mpt issuance id testTxJsonMetadataField( env, tx, validateOutput, jss::mpt_issuance_id, mptIssuanceId); diff --git a/src/test/rpc/Status_test.cpp b/src/test/rpc/Status_test.cpp index 01fc81430f..a4a7b8c961 100644 --- a/src/test/rpc/Status_test.cpp +++ b/src/test/rpc/Status_test.cpp @@ -136,7 +136,8 @@ private: expect(m == message, m + " != " + message); auto d = error[jss::data]; - size_t s1 = d.size(), s2 = messages.size(); + size_t const s1 = d.size(); + size_t const s2 = messages.size(); expect( s1 == s2, prefix + "Data sizes differ " + std::to_string(s1) + " != " + std::to_string(s2)); diff --git a/src/test/rpc/Subscribe_test.cpp b/src/test/rpc/Subscribe_test.cpp index dcb5ab8afd..33876b9dbb 100644 --- a/src/test/rpc/Subscribe_test.cpp +++ b/src/test/rpc/Subscribe_test.cpp @@ -461,7 +461,7 @@ public: if (!jv.isMember(jss::validated_hash)) return false; - uint32_t netID = env.app().getNetworkIDService().getNetworkID(); + uint32_t const netID = env.app().getNetworkIDService().getNetworkID(); if (!jv.isMember(jss::network_id) || jv[jss::network_id] != netID) return false; @@ -800,9 +800,9 @@ public: using IdxHashVec = std::vector>; Account alice("alice"); - Account bob("bob"); + Account const bob("bob"); Account carol("carol"); - Account david("david"); + Account const david("david"); /////////////////////////////////////////////////////////////////// /* @@ -836,8 +836,8 @@ public: idx = r[jss::account_history_tx_index].asInt(); if (r.isMember(jss::account_history_tx_first)) first_flag = true; - bool boundary = r.isMember(jss::account_history_boundary); - int ledger_idx = r[jss::ledger_index].asInt(); + bool const boundary = r.isMember(jss::account_history_boundary); + int const ledger_idx = r[jss::ledger_index].asInt(); if (r.isMember(jss::transaction) && r[jss::transaction].isMember(jss::hash)) { auto t{r[jss::transaction]}; @@ -948,7 +948,7 @@ public: // (-10, "E5B8B...", true, 4 auto checkBoundary = [](IdxHashVec const& vec, bool /* forward */) { - size_t num_tx = vec.size(); + size_t const num_tx = vec.size(); for (size_t i = 0; i < num_tx; ++i) { auto [idx, hash, boundary, ledger] = vec[i]; @@ -1091,7 +1091,7 @@ public: auto wscAccount = makeWSClient(env.app().config()); auto wscTxHistory = makeWSClient(env.app().config()); - std::array accounts = {alice, bob}; + std::array const accounts = {alice, bob}; env.fund(XRP(222222), accounts); BEAST_EXPECT(env.syncClose()); @@ -1159,7 +1159,7 @@ public: Env env(*this, single_thread_io(envconfig())); auto const USD_a = alice["USD"]; - std::array accounts = {alice, carol}; + std::array const accounts = {alice, carol}; env.fund(XRP(333333), accounts); env.trust(USD_a(20000), carol); BEAST_EXPECT(env.syncClose()); @@ -1196,7 +1196,7 @@ public: * long transaction history */ Env env(*this, single_thread_io(envconfig())); - std::array accounts = {alice, carol}; + std::array const accounts = {alice, carol}; env.fund(XRP(444444), accounts); BEAST_EXPECT(env.syncClose()); @@ -1250,7 +1250,7 @@ public: featurePermissionedDEX}; Env env(*this, single_thread_io(envconfig()), all); - PermissionedDEX permDex(env); + PermissionedDEX const permDex(env); auto const alice = permDex.alice; auto const bob = permDex.bob; auto const carol = permDex.carol; diff --git a/src/test/rpc/TransactionEntry_test.cpp b/src/test/rpc/TransactionEntry_test.cpp index 14e75d04da..6421587478 100644 --- a/src/test/rpc/TransactionEntry_test.cpp +++ b/src/test/rpc/TransactionEntry_test.cpp @@ -211,8 +211,8 @@ class TransactionEntry_test : public beast::unit_test::suite BEAST_EXPECT(clHash["result"] == resIndex); }; - Account A1{"A1"}; - Account A2{"A2"}; + Account const A1{"A1"}; + Account const A2{"A2"}; env.fund(XRP(10000), A1); auto fund_1_tx = to_string(env.tx()->getTransactionID()); diff --git a/src/test/rpc/Transaction_test.cpp b/src/test/rpc/Transaction_test.cpp index 2709900bf1..9f06607729 100644 --- a/src/test/rpc/Transaction_test.cpp +++ b/src/test/rpc/Transaction_test.cpp @@ -19,7 +19,7 @@ namespace xrpl { class Transaction_test : public beast::unit_test::suite { - std::unique_ptr + static std::unique_ptr makeNetworkConfig(uint32_t networkID) { using namespace test::jtx; @@ -91,7 +91,7 @@ class Transaction_test : public beast::unit_test::suite result[jss::result][jss::status] == jss::error && result[jss::result][jss::error] == NOT_FOUND); - if (deltaEndSeq) + if (deltaEndSeq != 0) { BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool()); } @@ -283,7 +283,7 @@ class Transaction_test : public beast::unit_test::suite char const* EXCESSIVE = RPC::get_error_info(rpcEXCESSIVE_LGR_RANGE).token; Env env{*this, makeNetworkConfig(11111)}; - uint32_t netID = env.app().getNetworkIDService().getNetworkID(); + uint32_t const netID = env.app().getNetworkIDService().getNetworkID(); auto const alice = Account("alice"); env.fund(XRP(1000), alice); @@ -306,7 +306,7 @@ class Transaction_test : public beast::unit_test::suite { auto const& tx = txns[i]; auto const& meta = metas[i]; - uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex); + uint32_t const txnIdx = meta->getFieldU32(sfTransactionIndex); auto const result = env.rpc( COMMAND, // NOLINTNEXTLINE(bugprone-unchecked-optional-access) @@ -332,7 +332,7 @@ class Transaction_test : public beast::unit_test::suite result[jss::result][jss::status] == jss::error && result[jss::result][jss::error] == NOT_FOUND); - if (deltaEndSeq) + if (deltaEndSeq != 0) { BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool()); } @@ -347,7 +347,7 @@ class Transaction_test : public beast::unit_test::suite { // auto const& tx = txns[i]; auto const& meta = metas[i]; - uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex); + uint32_t const txnIdx = meta->getFieldU32(sfTransactionIndex); auto const result = env.rpc( COMMAND, // NOLINTNEXTLINE(bugprone-unchecked-optional-access) @@ -407,7 +407,7 @@ class Transaction_test : public beast::unit_test::suite // field. (Tests parameter parsing) { auto const& meta = metas[0]; - uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex); + uint32_t const txnIdx = meta->getFieldU32(sfTransactionIndex); auto const result = env.rpc( COMMAND, // NOLINTNEXTLINE(bugprone-unchecked-optional-access) @@ -500,7 +500,7 @@ class Transaction_test : public beast::unit_test::suite using namespace test::jtx; using std::to_string; - Env env{*this, makeNetworkConfig(11111)}; + Env const env{*this, makeNetworkConfig(11111)}; // Test case 1: Valid input values auto const expected11 = std::optional("CFFFFFFFFFFFFFFF"); @@ -583,7 +583,7 @@ class Transaction_test : public beast::unit_test::suite using namespace test::jtx; // Use a Concise Transaction Identifier to request a transaction. - for (uint32_t netID : {11111, 65535, 65536}) + for (uint32_t const netID : {11111, 65535, 65536}) { Env env{*this, makeNetworkConfig(netID)}; BEAST_EXPECT(netID == env.app().getNetworkIDService().getNetworkID()); @@ -655,7 +655,7 @@ class Transaction_test : public beast::unit_test::suite // test that if the network is 65535 the ctid is not in the response // Using a hash to request the transaction, test the network ID // boundary where the CTID is (not) in the response. - for (uint32_t netID : {2, 1024, 65535, 65536}) + for (uint32_t const netID : {2, 1024, 65535, 65536}) { Env env{*this, makeNetworkConfig(netID)}; BEAST_EXPECT(netID == env.app().getNetworkIDService().getNetworkID()); @@ -691,7 +691,7 @@ class Transaction_test : public beast::unit_test::suite // test the wrong network ID was submitted { Env env{*this, makeNetworkConfig(21337)}; - uint32_t netID = env.app().getNetworkIDService().getNetworkID(); + uint32_t const netID = env.app().getNetworkIDService().getNetworkID(); auto const alice = Account("alice"); auto const bob = Account("bob"); @@ -743,9 +743,9 @@ class Transaction_test : public beast::unit_test::suite // Payment env(pay(alice, gw, XRP(100))); - std::shared_ptr txn = env.tx(); + std::shared_ptr const txn = env.tx(); env.close(); - std::shared_ptr meta = + std::shared_ptr const meta = env.closed()->txRead(env.tx()->getTransactionID()).second; Json::Value expected = txn->getJson(JsonOptions::none); @@ -817,7 +817,8 @@ class Transaction_test : public beast::unit_test::suite to_string(txn->getTransactionID()) == "3F8BDE5A5F82C4F4708E5E9255B713E303E6E1A371FD5C7A704AFD1387C23981"); env.close(); - std::shared_ptr meta = env.closed()->txRead(txn->getTransactionID()).second; + std::shared_ptr const meta = + env.closed()->txRead(txn->getTransactionID()).second; std::string const expected_tx_blob = serializeHex(*txn); std::string const expected_meta_blob = serializeHex(*meta); diff --git a/src/test/rpc/ValidatorRPC_test.cpp b/src/test/rpc/ValidatorRPC_test.cpp index 43ba188f6a..6c6a75dd01 100644 --- a/src/test/rpc/ValidatorRPC_test.cpp +++ b/src/test/rpc/ValidatorRPC_test.cpp @@ -27,7 +27,7 @@ public: for (bool const isAdmin : {true, false}) { - for (std::string cmd : {"validators", "validator_list_sites"}) + for (std::string const cmd : {"validators", "validator_list_sites"}) { Env env{*this, isAdmin ? envconfig() : envconfig(no_admin)}; env.set_retries(isAdmin ? 5 : 0); @@ -122,7 +122,7 @@ public: auto k2 = randomKeyPair(KeyType::ed25519).first; disabledKeys.insert(k1); disabledKeys.insert(k2); - env.app().validators().setNegativeUNL(disabledKeys); + env.app().getValidators().setNegativeUNL(disabledKeys); auto const jrr = env.rpc("validators")[jss::result]; auto& jrrnUnl = jrr[jss::NegativeUNL]; @@ -138,7 +138,7 @@ public: } disabledKeys.clear(); - env.app().validators().setNegativeUNL(disabledKeys); + env.app().getValidators().setNegativeUNL(disabledKeys); auto const jrrUpdated = env.rpc("validators")[jss::result]; BEAST_EXPECT(jrrUpdated[jss::NegativeUNL].isNull()); } @@ -154,7 +154,7 @@ public: }; // Validator keys that will be in the published list - std::vector validators = { + std::vector const validators = { TrustedPublisherServer::randomValidator(), TrustedPublisherServer::randomValidator()}; std::set expectedKeys; for (auto const& val : validators) @@ -192,8 +192,8 @@ public: }), }; - env.app().validatorSites().start(); - env.app().validatorSites().join(); + env.app().getValidatorSites().start(); + env.app().getValidatorSites().join(); { auto const jrr = env.rpc("server_info")[jss::result]; @@ -252,8 +252,8 @@ public: }), }; - env.app().validatorSites().start(); - env.app().validatorSites().join(); + env.app().getValidatorSites().start(); + env.app().getValidatorSites().join(); { auto const jrr = env.rpc("server_info")[jss::result]; @@ -315,17 +315,17 @@ public: }), }; - env.app().validatorSites().start(); - env.app().validatorSites().join(); + env.app().getValidatorSites().start(); + env.app().getValidatorSites().join(); hash_set startKeys; for (auto const& val : validators) startKeys.insert(calcNodeID(val.masterPublic)); - env.app().validators().updateTrusted( + env.app().getValidators().updateTrusted( startKeys, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); { @@ -408,17 +408,17 @@ public: }), }; - env.app().validatorSites().start(); - env.app().validatorSites().join(); + env.app().getValidatorSites().start(); + env.app().getValidatorSites().join(); hash_set startKeys; for (auto const& val : validators) startKeys.insert(calcNodeID(val.masterPublic)); - env.app().validators().updateTrusted( + env.app().getValidators().updateTrusted( startKeys, env.timeKeeper().now(), env.app().getOPs(), - env.app().overlay(), + env.app().getOverlay(), env.app().getHashRouter()); { diff --git a/src/test/rpc/Version_test.cpp b/src/test/rpc/Version_test.cpp index 7fa6720f83..c12e397459 100644 --- a/src/test/rpc/Version_test.cpp +++ b/src/test/rpc/Version_test.cpp @@ -77,13 +77,13 @@ class Version_test : public beast::unit_test::suite { testcase("test getAPIVersionNumber function"); - unsigned int versionIfUnspecified = + unsigned int const versionIfUnspecified = RPC::apiVersionIfUnspecified < RPC::apiMinimumSupportedVersion ? RPC::apiInvalidVersion : RPC::apiVersionIfUnspecified; - Json::Value j_array = Json::Value(Json::arrayValue); - Json::Value j_null = Json::Value(Json::nullValue); + Json::Value const j_array = Json::Value(Json::arrayValue); + Json::Value const j_null = Json::Value(Json::nullValue); BEAST_EXPECT(RPC::getAPIVersionNumber(j_array, false) == versionIfUnspecified); BEAST_EXPECT(RPC::getAPIVersionNumber(j_null, false) == versionIfUnspecified); @@ -185,7 +185,7 @@ class Version_test : public beast::unit_test::suite { testcase("config test"); { - Config c; + Config const c; BEAST_EXPECT(c.BETA_RPC_API == false); } diff --git a/src/test/server/ServerStatus_test.cpp b/src/test/server/ServerStatus_test.cpp index 178b85b3e4..b7c9825a55 100644 --- a/src/test/server/ServerStatus_test.cpp +++ b/src/test/server/ServerStatus_test.cpp @@ -33,7 +33,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en { }; - auto + static auto makeConfig(std::string const& proto, bool admin = true, bool credentials = false) { auto const section_name = boost::starts_with(proto, "h") ? "port_rpc" : "port_ws"; @@ -69,7 +69,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en return p; } - auto + static auto makeWSUpgrade(std::string const& host, uint16_t port) { using namespace boost::asio; @@ -97,7 +97,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en return req; } - auto + static auto makeHTTPRequest( std::string const& host, uint16_t port, @@ -217,7 +217,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en return; } - auto + static auto makeAdminRequest( jtx::Env& env, std::string const& proto, @@ -572,7 +572,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en // for zero limit, pick an arbitrary nonzero number of clients - all // should connect fine. - int testTo = (limit == 0) ? 50 : limit + 1; + int const testTo = (limit == 0) ? 50 : limit + 1; while (connectionCount < testTo) { clients.emplace_back( @@ -1106,7 +1106,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en boost::system::error_code ec; doHTTPRequest(env, yield, false, resp, ec); BEAST_EXPECT(resp.result() == boost::beast::http::status::internal_server_error); - std::regex body{"Server cannot accept clients"}; + std::regex const body{"Server cannot accept clients"}; BEAST_EXPECT(std::regex_search(resp.body(), body)); } diff --git a/src/test/server/Server_test.cpp b/src/test/server/Server_test.cpp index bce8bced60..97a822fd76 100644 --- a/src/test/server/Server_test.cpp +++ b/src/test/server/Server_test.cpp @@ -91,13 +91,13 @@ public: struct TestHandler { - bool + static bool onAccept(Session& session, boost::asio::ip::tcp::endpoint endpoint) { return true; } - Handoff + static Handoff onHandoff( Session& session, std::unique_ptr const& bundle, @@ -107,7 +107,7 @@ public: return Handoff{}; } - Handoff + static Handoff onHandoff( Session& session, http_request_type const& request, @@ -116,7 +116,7 @@ public: return Handoff{}; } - void + static void onRequest(Session& session) { session.write(std::string("Hello, world!\n")); @@ -282,7 +282,7 @@ public: TestSink sink{*this}; TestThread thread; sink.threshold(beast::severities::Severity::kAll); - beast::Journal journal{sink}; + beast::Journal const journal{sink}; TestHandler handler; auto s = make_Server(handler, thread.get_io_context(), journal); std::vector serverPort(1); @@ -303,13 +303,13 @@ public: testcase("stress test"); struct NullHandler { - bool + static bool onAccept(Session& session, boost::asio::ip::tcp::endpoint endpoint) { return true; } - Handoff + static Handoff onHandoff( Session& session, std::unique_ptr const& bundle, @@ -319,7 +319,7 @@ public: return Handoff{}; } - Handoff + static Handoff onHandoff( Session& session, http_request_type const& request, @@ -377,7 +377,7 @@ public: std::string messages; except([&] { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { (*cfg).deprecatedClearSection("port_rpc"); @@ -388,7 +388,7 @@ public: BEAST_EXPECT(messages.find("Missing 'ip' in [port_rpc]") != std::string::npos); except([&] { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { (*cfg).deprecatedClearSection("port_rpc"); @@ -400,7 +400,7 @@ public: BEAST_EXPECT(messages.find("Missing 'port' in [port_rpc]") != std::string::npos); except([&] { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { (*cfg).deprecatedClearSection("port_rpc"); @@ -414,7 +414,7 @@ public: messages.find("Invalid value '0' for key 'port' in [port_rpc]") == std::string::npos); except([&] { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { (*cfg)["server"].set("port", "0"); @@ -426,7 +426,7 @@ public: messages.find("Invalid value '0' for key 'port' in [server]") != std::string::npos); except([&] { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { (*cfg).deprecatedClearSection("port_rpc"); @@ -442,7 +442,7 @@ public: except([&] // this creates a standard test config without the server // section { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { cfg = std::make_unique(); @@ -471,7 +471,7 @@ public: except([&] // this creates a standard test config without some of the // port sections { - Env env{ + Env const env{ *this, envconfig([](std::unique_ptr cfg) { cfg = std::make_unique(); diff --git a/src/test/shamap/FetchPack_test.cpp b/src/test/shamap/FetchPack_test.cpp index 471ad91e95..1cf7d97b33 100644 --- a/src/test/shamap/FetchPack_test.cpp +++ b/src/test/shamap/FetchPack_test.cpp @@ -53,7 +53,7 @@ public: std::optional getNode(SHAMapHash const& nodeHash) const override { - Map::iterator it = mMap.find(nodeHash); + Map::iterator const it = mMap.find(nodeHash); if (it == mMap.end()) { JLOG(mJournal.fatal()) << "Test filter missing node"; @@ -66,7 +66,7 @@ public: beast::Journal mJournal; }; - boost::intrusive_ptr + static boost::intrusive_ptr make_random_item(beast::xor_shift_engine& r) { Serializer s; @@ -75,10 +75,10 @@ public: return make_shamapitem(s.getSHA512Half(), s.slice()); } - void + static void add_random_items(std::size_t n, Table& t, beast::xor_shift_engine& r) { - while (n--) + while ((n--) != 0u) { auto const result(t.addItem(SHAMapNodeType::tnACCOUNT_STATE, make_random_item(r))); assert(result); @@ -100,7 +100,7 @@ public: test::SuiteJournal journal("FetchPack_test", *this); TestNodeFamily f(journal); - std::shared_ptr t1(std::make_shared
(SHAMapType::FREE, f)); + std::shared_ptr
const t1(std::make_shared
(SHAMapType::FREE, f)); pass(); diff --git a/src/test/shamap/SHAMapSync_test.cpp b/src/test/shamap/SHAMapSync_test.cpp index a8f3a478b2..6374e49e71 100644 --- a/src/test/shamap/SHAMapSync_test.cpp +++ b/src/test/shamap/SHAMapSync_test.cpp @@ -30,7 +30,7 @@ public: { // add a bunch of random states to a map, then remove them // map should be the same - SHAMapHash beforeHash = map.getHash(); + SHAMapHash const beforeHash = map.getHash(); std::list items; @@ -74,7 +74,7 @@ public: SHAMap source(SHAMapType::FREE, f); SHAMap destination(SHAMapType::FREE, f2); - int items = 10000; + int const items = 10000; for (int i = 0; i < items; ++i) { source.addItem(SHAMapNodeType::tnACCOUNT_STATE, makeRandomAS()); @@ -96,10 +96,6 @@ public: source.walkMap(missingNodes, 2048); BEAST_EXPECT(missingNodes.empty()); - std::vector nodeIDs, gotNodeIDs; - std::vector gotNodes; - std::vector hashes; - destination.setSynching(); { diff --git a/src/test/shamap/SHAMap_test.cpp b/src/test/shamap/SHAMap_test.cpp index b16f7b157f..1c6d62be97 100644 --- a/src/test/shamap/SHAMap_test.cpp +++ b/src/test/shamap/SHAMap_test.cpp @@ -175,8 +175,8 @@ public: testcase("snapshot unbacked"); } - SHAMapHash mapHash = sMap.getHash(); - std::shared_ptr map2 = sMap.snapShot(false); + SHAMapHash const mapHash = sMap.getHash(); + std::shared_ptr const map2 = sMap.snapShot(false); map2->invariants(); unexpected(sMap.getHash() != mapHash, "bad snapshot"); unexpected(map2->getHash() != mapHash, "bad snapshot"); @@ -370,7 +370,7 @@ class SHAMapPathProof_test : public beast::unit_test::suite path->insert(path->begin(), path->front()); BEAST_EXPECT(!map.verifyProofPath(root, k, *path)); // wrong key - uint256 wrongKey(c + 1); + uint256 const wrongKey(c + 1); BEAST_EXPECT(!map.getProofPath(wrongKey)); } if (c == 99) diff --git a/src/test/unit_test/SuiteJournal.h b/src/test/unit_test/SuiteJournal.h index 1eeefb68aa..93005401e6 100644 --- a/src/test/unit_test/SuiteJournal.h +++ b/src/test/unit_test/SuiteJournal.h @@ -70,7 +70,7 @@ SuiteJournalSink::writeAlways(beast::severities::Severity level, std::string con }(); static std::mutex log_mutex; - std::lock_guard lock(log_mutex); + std::lock_guard const lock(log_mutex); suite_.log << s << partition_ << text << std::endl; } @@ -87,11 +87,7 @@ public: : sink_(partition, threshold, suite), journal_(sink_) { } - // Clang 10.0.0 and 10.0.1 disagree about formatting operator& - // TBD Re-enable formatting when we upgrade to clang 11 - // clang-format off - operator beast::Journal &() - // clang-format on + operator beast::Journal&() { return journal_; } diff --git a/src/test/unit_test/multi_runner.cpp b/src/test/unit_test/multi_runner.cpp index 239564bd7c..e4fb1c4f45 100644 --- a/src/test/unit_test/multi_runner.cpp +++ b/src/test/unit_test/multi_runner.cpp @@ -154,7 +154,7 @@ template std::size_t multi_runner_base::inner::tests() const { - std::lock_guard l{m_}; + std::lock_guard const l{m_}; return results_.total; } @@ -162,7 +162,7 @@ template std::size_t multi_runner_base::inner::suites() const { - std::lock_guard l{m_}; + std::lock_guard const l{m_}; return results_.suites; } @@ -184,7 +184,7 @@ template void multi_runner_base::inner::add(results const& r) { - std::lock_guard l{m_}; + std::lock_guard const l{m_}; results_.merge(r); } @@ -193,7 +193,7 @@ template void multi_runner_base::inner::print_results(S& s) { - std::lock_guard l{m_}; + std::lock_guard const l{m_}; results_.print(s); } @@ -326,7 +326,7 @@ void multi_runner_base::message_queue_send(MessageType mt, std::string const& s) { // must use a mutex since the two "sends" must happen in order - std::lock_guard l{inner_->m_}; + std::lock_guard const l{inner_->m_}; message_queue_->send(&mt, sizeof(mt), /*priority*/ 0); message_queue_->send(s.c_str(), s.size(), /*priority*/ 0); } @@ -386,7 +386,7 @@ multi_runner_parent::multi_runner_parent() : os_(std::cout) if (!recvd_size) continue; assert(recvd_size == 1); - MessageType mt{*reinterpret_cast(buf.data())}; + MessageType const mt{*reinterpret_cast(buf.data())}; this->message_queue_->receive(buf.data(), buf.size(), recvd_size, priority); if (recvd_size) diff --git a/src/tests/libxrpl/basics/MallocTrim.cpp b/src/tests/libxrpl/basics/MallocTrim.cpp index 483cf37fe2..93ed48b885 100644 --- a/src/tests/libxrpl/basics/MallocTrim.cpp +++ b/src/tests/libxrpl/basics/MallocTrim.cpp @@ -52,8 +52,8 @@ TEST(parseStatmRSSkB, standard_format) // Test standard format: size resident shared text lib data dt // Assuming 4KB page size: resident=1000 pages = 4000 KB { - std::string statm = "25365 1000 2377 0 0 5623 0"; - long result = parseStatmRSSkB(statm); + std::string const statm = "25365 1000 2377 0 0 5623 0"; + long const result = parseStatmRSSkB(statm); // Note: actual result depends on system page size // On most systems it's 4KB, so 1000 pages = 4000 KB EXPECT_GT(result, 0); @@ -61,57 +61,57 @@ TEST(parseStatmRSSkB, standard_format) // Test with newline { - std::string statm = "12345 2000 1234 0 0 3456 0\n"; - long result = parseStatmRSSkB(statm); + std::string const statm = "12345 2000 1234 0 0 3456 0\n"; + long const result = parseStatmRSSkB(statm); EXPECT_GT(result, 0); } // Test with tabs { - std::string statm = "12345\t2000\t1234\t0\t0\t3456\t0"; - long result = parseStatmRSSkB(statm); + std::string const statm = "12345\t2000\t1234\t0\t0\t3456\t0"; + long const result = parseStatmRSSkB(statm); EXPECT_GT(result, 0); } // Test zero resident pages { - std::string statm = "25365 0 2377 0 0 5623 0"; - long result = parseStatmRSSkB(statm); + std::string const statm = "25365 0 2377 0 0 5623 0"; + long const result = parseStatmRSSkB(statm); EXPECT_EQ(result, 0); } // Test with extra whitespace { - std::string statm = " 25365 1000 2377 "; - long result = parseStatmRSSkB(statm); + std::string const statm = " 25365 1000 2377 "; + long const result = parseStatmRSSkB(statm); EXPECT_GT(result, 0); } // Test empty string { - std::string statm; - long result = parseStatmRSSkB(statm); + std::string const statm; + long const result = parseStatmRSSkB(statm); EXPECT_EQ(result, -1); } // Test malformed data (only one field) { - std::string statm = "25365"; - long result = parseStatmRSSkB(statm); + std::string const statm = "25365"; + long const result = parseStatmRSSkB(statm); EXPECT_EQ(result, -1); } // Test malformed data (non-numeric) { - std::string statm = "abc def ghi"; - long result = parseStatmRSSkB(statm); + std::string const statm = "abc def ghi"; + long const result = parseStatmRSSkB(statm); EXPECT_EQ(result, -1); } // Test malformed data (second field non-numeric) { - std::string statm = "25365 abc 2377"; - long result = parseStatmRSSkB(statm); + std::string const statm = "25365 abc 2377"; + long const result = parseStatmRSSkB(statm); EXPECT_EQ(result, -1); } } @@ -119,9 +119,9 @@ TEST(parseStatmRSSkB, standard_format) TEST(mallocTrim, without_debug_logging) { - beast::Journal journal{beast::Journal::getNullSink()}; + beast::Journal const journal{beast::Journal::getNullSink()}; - MallocTrimReport report = mallocTrim("without_debug", journal); + MallocTrimReport const report = mallocTrim("without_debug", journal); #if defined(__GLIBC__) && BOOST_OS_LINUX EXPECT_EQ(report.supported, true); @@ -142,8 +142,8 @@ TEST(mallocTrim, without_debug_logging) TEST(mallocTrim, empty_tag) { - beast::Journal journal{beast::Journal::getNullSink()}; - MallocTrimReport report = mallocTrim("", journal); + beast::Journal const journal{beast::Journal::getNullSink()}; + MallocTrimReport const report = mallocTrim("", journal); #if defined(__GLIBC__) && BOOST_OS_LINUX EXPECT_EQ(report.supported, true); @@ -171,9 +171,9 @@ TEST(mallocTrim, with_debug_logging) }; DebugSink sink; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; - MallocTrimReport report = mallocTrim("debug_test", journal); + MallocTrimReport const report = mallocTrim("debug_test", journal); #if defined(__GLIBC__) && BOOST_OS_LINUX EXPECT_EQ(report.supported, true); @@ -192,12 +192,12 @@ TEST(mallocTrim, with_debug_logging) TEST(mallocTrim, repeated_calls) { - beast::Journal journal{beast::Journal::getNullSink()}; + beast::Journal const journal{beast::Journal::getNullSink()}; // Call malloc_trim multiple times to ensure it's safe for (int i = 0; i < 5; ++i) { - MallocTrimReport report = mallocTrim("iteration_" + std::to_string(i), journal); + MallocTrimReport const report = mallocTrim("iteration_" + std::to_string(i), journal); #if defined(__GLIBC__) && BOOST_OS_LINUX EXPECT_EQ(report.supported, true); diff --git a/src/tests/libxrpl/basics/Mutex.cpp b/src/tests/libxrpl/basics/Mutex.cpp index 3bcee92276..9f58799fe7 100644 --- a/src/tests/libxrpl/basics/Mutex.cpp +++ b/src/tests/libxrpl/basics/Mutex.cpp @@ -183,7 +183,7 @@ TEST_F(MutexConstCorrectnessTest, non_const_allows_modification) TEST_F(MutexConstCorrectnessTest, const_reference_provides_const_access) { - Mutex> m({1, 2, 3, 4, 5, 6}); + Mutex> const m({1, 2, 3, 4, 5, 6}); Mutex> const& const_ref = m; auto lock = const_ref.lock(); static_assert(std::is_const_v>); @@ -225,7 +225,7 @@ struct MutexSharedMutexTest : ::testing::Test TEST_F(MutexSharedMutexTest, shared_lock_for_const_access) { - Mutex m(100); + Mutex const m(100); Mutex const& const_ref = m; auto lock = const_ref.lock(); EXPECT_EQ(*lock, 100); diff --git a/src/tests/libxrpl/basics/RangeSet.cpp b/src/tests/libxrpl/basics/RangeSet.cpp index d0fc656368..41a33133f2 100644 --- a/src/tests/libxrpl/basics/RangeSet.cpp +++ b/src/tests/libxrpl/basics/RangeSet.cpp @@ -17,7 +17,7 @@ TEST(RangeSet, prevMissing) RangeSet set; for (std::uint32_t i = 0; i < 10; ++i) - set.insert(range(10 * i, 10 * i + 5)); + set.insert(range(10 * i, (10 * i) + 5)); for (std::uint32_t i = 1; i < 100; ++i) { diff --git a/src/tests/libxrpl/basics/scope.cpp b/src/tests/libxrpl/basics/scope.cpp index 8efa4a84b1..067698bce4 100644 --- a/src/tests/libxrpl/basics/scope.cpp +++ b/src/tests/libxrpl/basics/scope.cpp @@ -10,7 +10,7 @@ TEST(scope, scope_exit) // unless release() is called int i = 0; { - scope_exit x{[&i]() { i = 1; }}; + scope_exit const x{[&i]() { i = 1; }}; } EXPECT_EQ(i, 1); { @@ -32,7 +32,7 @@ TEST(scope, scope_exit) { try { - scope_exit x{[&i]() { i = 5; }}; + scope_exit const x{[&i]() { i = 5; }}; throw 1; } catch (...) // NOLINT(bugprone-empty-catch) @@ -60,7 +60,7 @@ TEST(scope, scope_fail) // if an exception is unwinding, unless release() is called int i = 0; { - scope_fail x{[&i]() { i = 1; }}; + scope_fail const x{[&i]() { i = 1; }}; } EXPECT_EQ(i, 0); { @@ -82,7 +82,7 @@ TEST(scope, scope_fail) { try { - scope_fail x{[&i]() { i = 5; }}; + scope_fail const x{[&i]() { i = 5; }}; throw 1; } catch (...) // NOLINT(bugprone-empty-catch) @@ -110,7 +110,7 @@ TEST(scope, scope_success) // if an exception is not unwinding, unless release() is called int i = 0; { - scope_success x{[&i]() { i = 1; }}; + scope_success const x{[&i]() { i = 1; }}; } EXPECT_EQ(i, 1); { @@ -132,7 +132,7 @@ TEST(scope, scope_success) { try { - scope_success x{[&i]() { i = 5; }}; + scope_success const x{[&i]() { i = 5; }}; throw 1; } catch (...) // NOLINT(bugprone-empty-catch) diff --git a/src/tests/libxrpl/basics/tagged_integer.cpp b/src/tests/libxrpl/basics/tagged_integer.cpp index 09f8b6787b..85a246428b 100644 --- a/src/tests/libxrpl/basics/tagged_integer.cpp +++ b/src/tests/libxrpl/basics/tagged_integer.cpp @@ -147,7 +147,7 @@ TEST(tagged_integer, increment_decrement_operators) TEST(tagged_integer, arithmetic_operators) { - TagInt a{-2}; + TagInt const a{-2}; EXPECT_EQ(+a, TagInt{-2}); EXPECT_EQ(-a, TagInt{2}); EXPECT_EQ(TagInt{-3} + TagInt{4}, TagInt{1}); diff --git a/src/tests/libxrpl/json/Value.cpp b/src/tests/libxrpl/json/Value.cpp index a7b7387ba1..194c677024 100644 --- a/src/tests/libxrpl/json/Value.cpp +++ b/src/tests/libxrpl/json/Value.cpp @@ -38,7 +38,7 @@ TEST(json_value, construct_and_compare_Json_StaticString) EXPECT_EQ(test1, test2); EXPECT_NE(test1, test3); - std::string str{sample}; + std::string const str{sample}; EXPECT_EQ(str, test2); EXPECT_NE(str, test3); EXPECT_EQ(test2, str); @@ -52,7 +52,7 @@ TEST(json_value, different_types) auto testCopy = [](Json::ValueType typ) { Json::Value val{typ}; - Json::Value cpy{val}; + Json::Value const cpy{val}; EXPECT_EQ(val.type(), typ); EXPECT_EQ(cpy.type(), typ); return val; @@ -135,7 +135,7 @@ TEST(json_value, different_types) { Json::Value const staticStrV{staticStr}; { - Json::Value cpy{staticStrV}; + Json::Value const cpy{staticStrV}; EXPECT_EQ(staticStrV.type(), Json::stringValue); EXPECT_EQ(cpy.type(), Json::stringValue); } @@ -209,10 +209,10 @@ TEST(json_value, compare_strings) SCOPED_TRACE(line); EXPECT_EQ((lhs == rhs), lhsEqRhs); EXPECT_NE((lhs != rhs), lhsEqRhs); - EXPECT_EQ((lhs < rhs), (!(lhsEqRhs || !lhsLtRhs))); + EXPECT_EQ((lhs < rhs), (!lhsEqRhs && lhsLtRhs)); EXPECT_EQ((lhs <= rhs), (lhsEqRhs || lhsLtRhs)); EXPECT_EQ((lhs >= rhs), (lhsEqRhs || !lhsLtRhs)); - EXPECT_EQ((lhs > rhs), (!(lhsEqRhs || lhsLtRhs))); + EXPECT_EQ((lhs > rhs), (!lhsEqRhs && !lhsLtRhs)); }; Json::Value const null0; @@ -588,13 +588,13 @@ TEST(json_value, bad_json) TEST(json_value, edge_cases) { - std::uint32_t max_uint = std::numeric_limits::max(); - std::int32_t max_int = std::numeric_limits::max(); - std::int32_t min_int = std::numeric_limits::min(); + std::uint32_t const max_uint = std::numeric_limits::max(); + std::int32_t const max_int = std::numeric_limits::max(); + std::int32_t const min_int = std::numeric_limits::min(); - std::uint32_t a_uint = max_uint - 1978; - std::int32_t a_large_int = max_int - 1978; - std::int32_t a_small_int = min_int + 1978; + std::uint32_t const a_uint = max_uint - 1978; + std::int32_t const a_large_int = max_int - 1978; + std::int32_t const a_small_int = min_int + 1978; { std::string json = "{\"max_uint\":" + std::to_string(max_uint); @@ -628,7 +628,7 @@ TEST(json_value, edge_cases) EXPECT_LT(j1["a_small_int"], a_uint); } - std::uint64_t overflow = std::uint64_t(max_uint) + 1; + std::uint64_t const overflow = std::uint64_t(max_uint) + 1; { std::string json = "{\"overflow\":"; json += std::to_string(overflow); @@ -640,7 +640,7 @@ TEST(json_value, edge_cases) EXPECT_FALSE(r2.parse(json, j2)); } - std::int64_t underflow = std::int64_t(min_int) - 1; + std::int64_t const underflow = std::int64_t(min_int) - 1; { std::string json = "{\"underflow\":"; json += std::to_string(underflow); @@ -739,7 +739,7 @@ TEST(json_value, copy) EXPECT_TRUE(v1.isDouble()); EXPECT_EQ(v1.asDouble(), 2.5); - Json::Value v2 = v1; + Json::Value const v2 = v1; EXPECT_TRUE(v1.isDouble()); EXPECT_EQ(v1.asDouble(), 2.5); EXPECT_TRUE(v2.isDouble()); @@ -819,7 +819,7 @@ TEST(json_value, comparisons) b["a"] = Json::Int(-1); testGreaterThan("negative"); - Json::Int big = std::numeric_limits::max(); + Json::Int const big = std::numeric_limits::max(); Json::UInt bigger = big; bigger++; @@ -859,7 +859,7 @@ TEST(json_value, conversions) // TODO: What's the thinking here? { // null - Json::Value val; + Json::Value const val; EXPECT_TRUE(val.isNull()); // val.asCString() should trigger an assertion failure EXPECT_EQ(val.asString(), ""); @@ -880,7 +880,7 @@ TEST(json_value, conversions) } { // int - Json::Value val = -1234; + Json::Value const val = -1234; EXPECT_TRUE(val.isInt()); // val.asCString() should trigger an assertion failure EXPECT_EQ(val.asString(), "-1234"); @@ -901,7 +901,7 @@ TEST(json_value, conversions) } { // uint - Json::Value val = 1234U; + Json::Value const val = 1234U; EXPECT_TRUE(val.isUInt()); // val.asCString() should trigger an assertion failure EXPECT_EQ(val.asString(), "1234"); @@ -922,7 +922,7 @@ TEST(json_value, conversions) } { // real - Json::Value val = 2.0; + Json::Value const val = 2.0; EXPECT_TRUE(val.isDouble()); // val.asCString() should trigger an assertion failure EXPECT_TRUE(std::regex_match(val.asString(), std::regex("^2\\.0*$"))); @@ -943,7 +943,7 @@ TEST(json_value, conversions) } { // numeric string - Json::Value val = "54321"; + Json::Value const val = "54321"; EXPECT_TRUE(val.isString()); EXPECT_EQ(strcmp(val.asCString(), "54321"), 0); EXPECT_EQ(val.asString(), "54321"); @@ -964,7 +964,7 @@ TEST(json_value, conversions) } { // non-numeric string - Json::Value val(Json::stringValue); + Json::Value const val(Json::stringValue); EXPECT_TRUE(val.isString()); EXPECT_EQ(val.asCString(), nullptr); EXPECT_EQ(val.asString(), ""); @@ -985,7 +985,7 @@ TEST(json_value, conversions) } { // bool false - Json::Value val = false; + Json::Value const val = false; EXPECT_TRUE(val.isBool()); // val.asCString() should trigger an assertion failure EXPECT_EQ(val.asString(), "false"); @@ -1006,7 +1006,7 @@ TEST(json_value, conversions) } { // bool true - Json::Value val = true; + Json::Value const val = true; EXPECT_TRUE(val.isBool()); // val.asCString() should trigger an assertion failure EXPECT_EQ(val.asString(), "true"); @@ -1027,7 +1027,7 @@ TEST(json_value, conversions) } { // array type - Json::Value val(Json::arrayValue); + Json::Value const val(Json::arrayValue); EXPECT_TRUE(val.isArray()); // val.asCString should trigger an assertion failure EXPECT_THROW(val.asString(), Json::error); @@ -1048,7 +1048,7 @@ TEST(json_value, conversions) } { // object type - Json::Value val(Json::objectValue); + Json::Value const val(Json::objectValue); EXPECT_TRUE(val.isObject()); // val.asCString should trigger an assertion failure EXPECT_THROW(val.asString(), Json::error); diff --git a/src/tests/libxrpl/net/HTTPClient.cpp b/src/tests/libxrpl/net/HTTPClient.cpp index 36159cb089..de567a93ab 100644 --- a/src/tests/libxrpl/net/HTTPClient.cpp +++ b/src/tests/libxrpl/net/HTTPClient.cpp @@ -267,7 +267,7 @@ protected: TEST_F(HTTPClientTest, case_insensitive_content_length) { // Test different cases of Content-Length header - std::vector headerCases = { + std::vector const headerCases = { "Content-Length", // Standard case "content-length", // Lowercase - this tests the regex icase fix "CONTENT-LENGTH", // Uppercase @@ -278,7 +278,7 @@ TEST_F(HTTPClientTest, case_insensitive_content_length) for (auto const& headerName : headerCases) { TestHTTPServer server; - std::string testBody = "Hello World!"; + std::string const testBody = "Hello World!"; server.setResponseBody(testBody); server.setHeader(headerName, std::to_string(testBody.size())); @@ -287,7 +287,7 @@ TEST_F(HTTPClientTest, case_insensitive_content_length) std::string resultData; boost::system::error_code resultError; - bool testCompleted = + bool const testCompleted = runHTTPTest(server, "/test", completed, resultStatus, resultData, resultError); // Verify results EXPECT_TRUE(testCompleted); @@ -300,7 +300,7 @@ TEST_F(HTTPClientTest, case_insensitive_content_length) TEST_F(HTTPClientTest, basic_http_request) { TestHTTPServer server; - std::string testBody = "Test response body"; + std::string const testBody = "Test response body"; server.setResponseBody(testBody); server.setHeader("Content-Type", "text/plain"); @@ -309,7 +309,7 @@ TEST_F(HTTPClientTest, basic_http_request) std::string resultData; boost::system::error_code resultError; - bool testCompleted = + bool const testCompleted = runHTTPTest(server, "/basic", completed, resultStatus, resultData, resultError); EXPECT_TRUE(testCompleted); @@ -329,7 +329,7 @@ TEST_F(HTTPClientTest, empty_response) std::string resultData; boost::system::error_code resultError; - bool testCompleted = + bool const testCompleted = runHTTPTest(server, "/empty", completed, resultStatus, resultData, resultError); EXPECT_TRUE(testCompleted); @@ -340,7 +340,7 @@ TEST_F(HTTPClientTest, empty_response) TEST_F(HTTPClientTest, different_status_codes) { - std::vector statusCodes = {200, 404, 500}; + std::vector const statusCodes = {200, 404, 500}; for (auto status : statusCodes) { @@ -353,7 +353,7 @@ TEST_F(HTTPClientTest, different_status_codes) std::string resultData; boost::system::error_code resultError; - bool testCompleted = + bool const testCompleted = runHTTPTest(server, "/status", completed, resultStatus, resultData, resultError); EXPECT_TRUE(testCompleted); diff --git a/src/tests/libxrpl/protocol_autogen/.clang-tidy b/src/tests/libxrpl/protocol_autogen/.clang-tidy new file mode 100644 index 0000000000..fbc003598d --- /dev/null +++ b/src/tests/libxrpl/protocol_autogen/.clang-tidy @@ -0,0 +1,3 @@ +# This disables all checks for this directory and its subdirectories +Checks: "-*" +InheritParentConfig: false diff --git a/src/tests/libxrpl/protocol_autogen/STObjectValidation.cpp b/src/tests/libxrpl/protocol_autogen/STObjectValidation.cpp deleted file mode 100644 index 5c100364dc..0000000000 --- a/src/tests/libxrpl/protocol_autogen/STObjectValidation.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include -#include - -#include - -namespace xrpl { -TEST(STObjectValidation, validate_required_field) -{ - SOTemplate format{{sfFlags, soeREQUIRED}}; - STObject obj(sfGeneric); - obj.setFieldU32(sfFlags, 0); - EXPECT_TRUE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_missing_required_field) -{ - SOTemplate format{{sfFlags, soeREQUIRED}}; - STObject obj(sfGeneric); - EXPECT_FALSE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_optional_field) -{ - SOTemplate format{{sfFlags, soeOPTIONAL}}; - STObject obj(sfGeneric); - obj.setFieldU32(sfFlags, 0); - EXPECT_TRUE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_missing_optional_field) -{ - SOTemplate format{{sfFlags, soeOPTIONAL}}; - STObject obj(sfGeneric); - EXPECT_TRUE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_mpt_amount_supported) -{ - SOTemplate format{{sfAmount, soeREQUIRED, soeMPTSupported}}; - STObject obj(sfGeneric); - obj.setFieldAmount(sfAmount, STAmount{MPTAmount{Number{1}}, MPTIssue{}}); - EXPECT_TRUE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_mpt_amount_not_supported) -{ - SOTemplate format{{sfAmount, soeREQUIRED, soeMPTNotSupported}}; - STObject obj(sfGeneric); - obj.setFieldAmount(sfAmount, STAmount{MPTAmount{Number{1}}, MPTIssue{}}); - EXPECT_FALSE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_mpt_issue_supported) -{ - SOTemplate format{{sfAsset, soeREQUIRED, soeMPTSupported}}; - STObject obj(sfGeneric); - obj.setFieldIssue(sfAsset, STIssue{sfAsset, MPTIssue{}}); - EXPECT_TRUE(protocol_autogen::validateSTObject(obj, format)); -} - -TEST(STObjectValidation, validate_mpt_issue_not_supported) -{ - SOTemplate format{{sfAsset, soeREQUIRED, soeMPTNotSupported}}; - STObject obj(sfGeneric); - obj.setFieldIssue(sfAsset, STIssue{sfAsset, MPTIssue{}}); - EXPECT_FALSE(protocol_autogen::validateSTObject(obj, format)); -} -} // namespace xrpl diff --git a/src/tests/libxrpl/protocol_autogen/ledger_entries/FeeSettingsTests.cpp b/src/tests/libxrpl/protocol_autogen/ledger_entries/FeeSettingsTests.cpp index 479d0c56c6..6d593bb138 100644 --- a/src/tests/libxrpl/protocol_autogen/ledger_entries/FeeSettingsTests.cpp +++ b/src/tests/libxrpl/protocol_autogen/ledger_entries/FeeSettingsTests.cpp @@ -27,6 +27,9 @@ TEST(FeeSettingsTests, BuilderSettersRoundTrip) auto const baseFeeDropsValue = canonical_AMOUNT(); auto const reserveBaseDropsValue = canonical_AMOUNT(); auto const reserveIncrementDropsValue = canonical_AMOUNT(); + auto const extensionComputeLimitValue = canonical_UINT32(); + auto const extensionSizeLimitValue = canonical_UINT32(); + auto const gasPriceValue = canonical_UINT32(); auto const previousTxnIDValue = canonical_UINT256(); auto const previousTxnLgrSeqValue = canonical_UINT32(); @@ -40,6 +43,9 @@ TEST(FeeSettingsTests, BuilderSettersRoundTrip) builder.setBaseFeeDrops(baseFeeDropsValue); builder.setReserveBaseDrops(reserveBaseDropsValue); builder.setReserveIncrementDrops(reserveIncrementDropsValue); + builder.setExtensionComputeLimit(extensionComputeLimitValue); + builder.setExtensionSizeLimit(extensionSizeLimitValue); + builder.setGasPrice(gasPriceValue); builder.setPreviousTxnID(previousTxnIDValue); builder.setPreviousTxnLgrSeq(previousTxnLgrSeqValue); @@ -108,6 +114,30 @@ TEST(FeeSettingsTests, BuilderSettersRoundTrip) EXPECT_TRUE(entry.hasReserveIncrementDrops()); } + { + auto const& expected = extensionComputeLimitValue; + auto const actualOpt = entry.getExtensionComputeLimit(); + ASSERT_TRUE(actualOpt.has_value()); + expectEqualField(expected, *actualOpt, "sfExtensionComputeLimit"); + EXPECT_TRUE(entry.hasExtensionComputeLimit()); + } + + { + auto const& expected = extensionSizeLimitValue; + auto const actualOpt = entry.getExtensionSizeLimit(); + ASSERT_TRUE(actualOpt.has_value()); + expectEqualField(expected, *actualOpt, "sfExtensionSizeLimit"); + EXPECT_TRUE(entry.hasExtensionSizeLimit()); + } + + { + auto const& expected = gasPriceValue; + auto const actualOpt = entry.getGasPrice(); + ASSERT_TRUE(actualOpt.has_value()); + expectEqualField(expected, *actualOpt, "sfGasPrice"); + EXPECT_TRUE(entry.hasGasPrice()); + } + { auto const& expected = previousTxnIDValue; auto const actualOpt = entry.getPreviousTxnID(); @@ -144,6 +174,9 @@ TEST(FeeSettingsTests, BuilderFromSleRoundTrip) auto const baseFeeDropsValue = canonical_AMOUNT(); auto const reserveBaseDropsValue = canonical_AMOUNT(); auto const reserveIncrementDropsValue = canonical_AMOUNT(); + auto const extensionComputeLimitValue = canonical_UINT32(); + auto const extensionSizeLimitValue = canonical_UINT32(); + auto const gasPriceValue = canonical_UINT32(); auto const previousTxnIDValue = canonical_UINT256(); auto const previousTxnLgrSeqValue = canonical_UINT32(); @@ -156,6 +189,9 @@ TEST(FeeSettingsTests, BuilderFromSleRoundTrip) sle->at(sfBaseFeeDrops) = baseFeeDropsValue; sle->at(sfReserveBaseDrops) = reserveBaseDropsValue; sle->at(sfReserveIncrementDrops) = reserveIncrementDropsValue; + sle->at(sfExtensionComputeLimit) = extensionComputeLimitValue; + sle->at(sfExtensionSizeLimit) = extensionSizeLimitValue; + sle->at(sfGasPrice) = gasPriceValue; sle->at(sfPreviousTxnID) = previousTxnIDValue; sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue; @@ -259,6 +295,45 @@ TEST(FeeSettingsTests, BuilderFromSleRoundTrip) expectEqualField(expected, *fromBuilderOpt, "sfReserveIncrementDrops"); } + { + auto const& expected = extensionComputeLimitValue; + + auto const fromSleOpt = entryFromSle.getExtensionComputeLimit(); + auto const fromBuilderOpt = entryFromBuilder.getExtensionComputeLimit(); + + ASSERT_TRUE(fromSleOpt.has_value()); + ASSERT_TRUE(fromBuilderOpt.has_value()); + + expectEqualField(expected, *fromSleOpt, "sfExtensionComputeLimit"); + expectEqualField(expected, *fromBuilderOpt, "sfExtensionComputeLimit"); + } + + { + auto const& expected = extensionSizeLimitValue; + + auto const fromSleOpt = entryFromSle.getExtensionSizeLimit(); + auto const fromBuilderOpt = entryFromBuilder.getExtensionSizeLimit(); + + ASSERT_TRUE(fromSleOpt.has_value()); + ASSERT_TRUE(fromBuilderOpt.has_value()); + + expectEqualField(expected, *fromSleOpt, "sfExtensionSizeLimit"); + expectEqualField(expected, *fromBuilderOpt, "sfExtensionSizeLimit"); + } + + { + auto const& expected = gasPriceValue; + + auto const fromSleOpt = entryFromSle.getGasPrice(); + auto const fromBuilderOpt = entryFromBuilder.getGasPrice(); + + ASSERT_TRUE(fromSleOpt.has_value()); + ASSERT_TRUE(fromBuilderOpt.has_value()); + + expectEqualField(expected, *fromSleOpt, "sfGasPrice"); + expectEqualField(expected, *fromBuilderOpt, "sfGasPrice"); + } + { auto const& expected = previousTxnIDValue; @@ -351,6 +426,12 @@ TEST(FeeSettingsTests, OptionalFieldsReturnNullopt) EXPECT_FALSE(entry.getReserveBaseDrops().has_value()); EXPECT_FALSE(entry.hasReserveIncrementDrops()); EXPECT_FALSE(entry.getReserveIncrementDrops().has_value()); + EXPECT_FALSE(entry.hasExtensionComputeLimit()); + EXPECT_FALSE(entry.getExtensionComputeLimit().has_value()); + EXPECT_FALSE(entry.hasExtensionSizeLimit()); + EXPECT_FALSE(entry.getExtensionSizeLimit().has_value()); + EXPECT_FALSE(entry.hasGasPrice()); + EXPECT_FALSE(entry.getGasPrice().has_value()); EXPECT_FALSE(entry.hasPreviousTxnID()); EXPECT_FALSE(entry.getPreviousTxnID().has_value()); EXPECT_FALSE(entry.hasPreviousTxnLgrSeq()); diff --git a/src/tests/libxrpl/protocol_autogen/main.cpp b/src/tests/libxrpl/protocol_autogen/main.cpp deleted file mode 100644 index 5142bbe08a..0000000000 --- a/src/tests/libxrpl/protocol_autogen/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int -main(int argc, char** argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/tests/libxrpl/protocol_autogen/transactions/SetFeeTests.cpp b/src/tests/libxrpl/protocol_autogen/transactions/SetFeeTests.cpp index 981bf72ea7..244e059cf4 100644 --- a/src/tests/libxrpl/protocol_autogen/transactions/SetFeeTests.cpp +++ b/src/tests/libxrpl/protocol_autogen/transactions/SetFeeTests.cpp @@ -37,6 +37,9 @@ TEST(TransactionsSetFeeTests, BuilderSettersRoundTrip) auto const baseFeeDropsValue = canonical_AMOUNT(); auto const reserveBaseDropsValue = canonical_AMOUNT(); auto const reserveIncrementDropsValue = canonical_AMOUNT(); + auto const extensionComputeLimitValue = canonical_UINT32(); + auto const extensionSizeLimitValue = canonical_UINT32(); + auto const gasPriceValue = canonical_UINT32(); SetFeeBuilder builder{ accountValue, @@ -53,6 +56,9 @@ TEST(TransactionsSetFeeTests, BuilderSettersRoundTrip) builder.setBaseFeeDrops(baseFeeDropsValue); builder.setReserveBaseDrops(reserveBaseDropsValue); builder.setReserveIncrementDrops(reserveIncrementDropsValue); + builder.setExtensionComputeLimit(extensionComputeLimitValue); + builder.setExtensionSizeLimit(extensionSizeLimitValue); + builder.setGasPrice(gasPriceValue); auto tx = builder.build(publicKey, secretKey); @@ -134,6 +140,30 @@ TEST(TransactionsSetFeeTests, BuilderSettersRoundTrip) EXPECT_TRUE(tx.hasReserveIncrementDrops()); } + { + auto const& expected = extensionComputeLimitValue; + auto const actualOpt = tx.getExtensionComputeLimit(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfExtensionComputeLimit should be present"; + expectEqualField(expected, *actualOpt, "sfExtensionComputeLimit"); + EXPECT_TRUE(tx.hasExtensionComputeLimit()); + } + + { + auto const& expected = extensionSizeLimitValue; + auto const actualOpt = tx.getExtensionSizeLimit(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfExtensionSizeLimit should be present"; + expectEqualField(expected, *actualOpt, "sfExtensionSizeLimit"); + EXPECT_TRUE(tx.hasExtensionSizeLimit()); + } + + { + auto const& expected = gasPriceValue; + auto const actualOpt = tx.getGasPrice(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfGasPrice should be present"; + expectEqualField(expected, *actualOpt, "sfGasPrice"); + EXPECT_TRUE(tx.hasGasPrice()); + } + } // 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper, @@ -158,6 +188,9 @@ TEST(TransactionsSetFeeTests, BuilderFromStTxRoundTrip) auto const baseFeeDropsValue = canonical_AMOUNT(); auto const reserveBaseDropsValue = canonical_AMOUNT(); auto const reserveIncrementDropsValue = canonical_AMOUNT(); + auto const extensionComputeLimitValue = canonical_UINT32(); + auto const extensionSizeLimitValue = canonical_UINT32(); + auto const gasPriceValue = canonical_UINT32(); // Build an initial transaction SetFeeBuilder initialBuilder{ @@ -174,6 +207,9 @@ TEST(TransactionsSetFeeTests, BuilderFromStTxRoundTrip) initialBuilder.setBaseFeeDrops(baseFeeDropsValue); initialBuilder.setReserveBaseDrops(reserveBaseDropsValue); initialBuilder.setReserveIncrementDrops(reserveIncrementDropsValue); + initialBuilder.setExtensionComputeLimit(extensionComputeLimitValue); + initialBuilder.setExtensionSizeLimit(extensionSizeLimitValue); + initialBuilder.setGasPrice(gasPriceValue); auto initialTx = initialBuilder.build(publicKey, secretKey); @@ -248,6 +284,27 @@ TEST(TransactionsSetFeeTests, BuilderFromStTxRoundTrip) expectEqualField(expected, *actualOpt, "sfReserveIncrementDrops"); } + { + auto const& expected = extensionComputeLimitValue; + auto const actualOpt = rebuiltTx.getExtensionComputeLimit(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfExtensionComputeLimit should be present"; + expectEqualField(expected, *actualOpt, "sfExtensionComputeLimit"); + } + + { + auto const& expected = extensionSizeLimitValue; + auto const actualOpt = rebuiltTx.getExtensionSizeLimit(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfExtensionSizeLimit should be present"; + expectEqualField(expected, *actualOpt, "sfExtensionSizeLimit"); + } + + { + auto const& expected = gasPriceValue; + auto const actualOpt = rebuiltTx.getGasPrice(); + ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfGasPrice should be present"; + expectEqualField(expected, *actualOpt, "sfGasPrice"); + } + } // 3) Verify wrapper throws when constructed from wrong transaction type. @@ -319,6 +376,12 @@ TEST(TransactionsSetFeeTests, OptionalFieldsReturnNullopt) EXPECT_FALSE(tx.getReserveBaseDrops().has_value()); EXPECT_FALSE(tx.hasReserveIncrementDrops()); EXPECT_FALSE(tx.getReserveIncrementDrops().has_value()); + EXPECT_FALSE(tx.hasExtensionComputeLimit()); + EXPECT_FALSE(tx.getExtensionComputeLimit().has_value()); + EXPECT_FALSE(tx.hasExtensionSizeLimit()); + EXPECT_FALSE(tx.getExtensionSizeLimit().has_value()); + EXPECT_FALSE(tx.hasGasPrice()); + EXPECT_FALSE(tx.getGasPrice().has_value()); } } diff --git a/src/xrpld/app/consensus/RCLConsensus.cpp b/src/xrpld/app/consensus/RCLConsensus.cpp index 5a3d53dae0..b7b0919aad 100644 --- a/src/xrpld/app/consensus/RCLConsensus.cpp +++ b/src/xrpld/app/consensus/RCLConsensus.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -11,7 +10,6 @@ #include #include #include -#include #include #include @@ -20,6 +18,8 @@ #include #include #include +#include +#include #include #include #include @@ -137,7 +137,7 @@ RCLConsensus::Adaptor::share(RCLCxPeerPos const& peerPos) prop.set_closetime(proposal.closeTime().time_since_epoch().count()); prop.set_currenttxhash(proposal.position().begin(), proposal.position().size()); - prop.set_previousledger(proposal.prevLedger().begin(), proposal.position().size()); + prop.set_previousledger(proposal.prevLedger().begin(), proposal.prevLedger().size()); auto const pk = peerPos.publicKey().slice(); prop.set_nodepubkey(pk.data(), pk.size()); @@ -145,7 +145,7 @@ RCLConsensus::Adaptor::share(RCLCxPeerPos const& peerPos) auto const sig = peerPos.signature(); prop.set_signature(sig.data(), sig.size()); - app_.overlay().relay(prop, peerPos.suppressionID(), peerPos.publicKey()); + app_.getOverlay().relay(prop, peerPos.suppressionID(), peerPos.publicKey()); } void @@ -159,9 +159,9 @@ RCLConsensus::Adaptor::share(RCLCxTx const& tx) protocol::TMTransaction msg; msg.set_rawtransaction(slice.data(), slice.size()); msg.set_status(protocol::tsNEW); - msg.set_receivetimestamp(app_.timeKeeper().now().time_since_epoch().count()); - static std::set skip{}; - app_.overlay().relay(tx.id(), msg, skip); + msg.set_receivetimestamp(app_.getTimeKeeper().now().time_since_epoch().count()); + static std::set const skip{}; + app_.getOverlay().relay(tx.id(), msg, skip); } else { @@ -207,7 +207,7 @@ RCLConsensus::Adaptor::propose(RCLCxPeerPos::Proposal const& proposal) app_.getHashRouter().addSuppression(suppression); - app_.overlay().broadcast(prop); + app_.getOverlay().broadcast(prop); } void @@ -229,7 +229,7 @@ RCLConsensus::Adaptor::acquireTxSet(RCLTxSet::ID const& setId) bool RCLConsensus::Adaptor::hasOpenTransactions() const { - return !app_.openLedger().empty(); + return !app_.getOpenLedger().empty(); } std::size_t @@ -284,7 +284,7 @@ RCLConsensus::Adaptor::onClose( // Tell the ledger master not to acquire the ledger we're probably building ledgerMaster_.setBuildingLedger(prevLedger->header().seq + 1); - auto initialLedger = app_.openLedger().current(); + auto initialLedger = app_.getOpenLedger().current(); auto initialSet = std::make_shared(SHAMapType::TRANSACTION, app_.getNodeFamily()); initialSet->setUnbacked(); @@ -308,9 +308,9 @@ RCLConsensus::Adaptor::onClose( // previous ledger was flag ledger, add fee and amendment // pseudo-transactions auto validations = - app_.validators().negativeUNLFilter(app_.getValidations().getTrustedForLedger( + app_.getValidators().negativeUNLFilter(app_.getValidations().getTrustedForLedger( prevLedger->header().parentHash, prevLedger->seq() - 1)); - if (validations.size() >= app_.validators().quorum()) + if (validations.size() >= app_.getValidators().quorum()) { feeVote_->doVoting(prevLedger, validations, initialSet); app_.getAmendmentTable().doVoting(prevLedger, validations, initialSet, j_); @@ -323,7 +323,7 @@ RCLConsensus::Adaptor::onClose( // add negative UNL pseudo-transactions nUnlVote_.doVoting( prevLedger, - app_.validators().getTrustedMasterKeys(), + app_.getValidators().getTrustedMasterKeys(), app_.getValidations(), initialSet); } @@ -355,7 +355,7 @@ RCLConsensus::Adaptor::onClose( RCLCxPeerPos::Proposal::seqJoin, setHash, closeTime, - app_.timeKeeper().closeTime(), + app_.getTimeKeeper().closeTime(), validatorKeys_.nodeID}}; } @@ -496,7 +496,7 @@ RCLConsensus::Adaptor::doAccept( censorshipDetector_.check( std::move(accepted), - [curr = built.seq(), j = app_.journal("CensorshipDetector"), &failed]( + [curr = built.seq(), j = app_.getJournal("CensorshipDetector"), &failed]( uint256 const& id, LedgerIndex seq) { if (failed.contains(id)) return true; @@ -592,7 +592,7 @@ RCLConsensus::Adaptor::doAccept( { rules.emplace(app_.config().features); } - app_.openLedger().accept( + app_.getOpenLedger().accept( app_, *rules, built.ledger_, @@ -620,7 +620,7 @@ RCLConsensus::Adaptor::doAccept( ledgerMaster_.getClosedLedger()->header().hash == built.id(), "xrpl::RCLConsensus::Adaptor::doAccept : ledger hash match"); XRPL_ASSERT( - app_.openLedger().current()->header().parentHash == built.id(), + app_.getOpenLedger().current()->header().parentHash == built.id(), "xrpl::RCLConsensus::Adaptor::doAccept : parent hash match"); } @@ -655,7 +655,7 @@ RCLConsensus::Adaptor::doAccept( JLOG(j_.info()) << "Our close offset is estimated at " << offset.count() << " (" << closeCount << ")"; - app_.timeKeeper().adjustCloseTime(offset); + app_.getTimeKeeper().adjustCloseTime(offset); } } @@ -677,7 +677,7 @@ RCLConsensus::Adaptor::notify( } s.set_ledgerseq(ledger.seq()); - s.set_networktime(app_.timeKeeper().now().time_since_epoch().count()); + s.set_networktime(app_.getTimeKeeper().now().time_since_epoch().count()); s.set_ledgerhashprevious( ledger.parentID().begin(), std::decay_t::bytes); s.set_ledgerhash(ledger.id().begin(), std::decay_t::bytes); @@ -695,7 +695,7 @@ RCLConsensus::Adaptor::notify( } s.set_firstseq(uMin); s.set_lastseq(uMax); - app_.overlay().foreach(send_always(std::make_shared(s, protocol::mtSTATUS_CHANGE))); + app_.getOverlay().foreach(send_always(std::make_shared(s, protocol::mtSTATUS_CHANGE))); JLOG(j_.trace()) << "send status change to peer"; } @@ -751,7 +751,7 @@ RCLConsensus::Adaptor::validate(RCLCxLedger const& ledger, RCLTxSet const& txns, { using namespace std::chrono_literals; - auto validationTime = app_.timeKeeper().closeTime(); + auto validationTime = app_.getTimeKeeper().closeTime(); if (validationTime <= lastValidationTime_) validationTime = lastValidationTime_ + 1s; lastValidationTime_ = validationTime; @@ -827,7 +827,7 @@ RCLConsensus::Adaptor::validate(RCLCxLedger const& ledger, RCLTxSet const& txns, // Broadcast to all our peers: protocol::TMValidation val; val.set_validation(serialized.data(), serialized.size()); - app_.overlay().broadcast(val); + app_.getOverlay().broadcast(val); // Publish to all our subscribers: app_.getOPs().pubValidation(v); @@ -853,7 +853,7 @@ RCLConsensus::getJson(bool full) const { Json::Value ret; { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; ret = consensus_.getJson(full); } ret["validating"] = adaptor_.validating(); @@ -867,7 +867,7 @@ RCLConsensus::timerEntry( { try { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; consensus_.timerEntry(now, clog); } catch (SHAMapMissingNode const& mn) @@ -886,7 +886,7 @@ RCLConsensus::gotTxSet(NetClock::time_point const& now, RCLTxSet const& txSet) { try { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; consensus_.gotTxSet(now, txSet); } catch (SHAMapMissingNode const& mn) @@ -904,14 +904,14 @@ RCLConsensus::simulate( NetClock::time_point const& now, std::optional consensusDelay) { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; consensus_.simulate(now, consensusDelay); } bool RCLConsensus::peerProposal(NetClock::time_point const& now, RCLCxPeerPos const& newProposal) { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; return consensus_.peerProposal(now, newProposal); } @@ -925,11 +925,11 @@ RCLConsensus::Adaptor::preStartRound(RCLCxLedger const& prevLgr, hash_set> RCLConsensus::Adaptor::getQuorumKeys() const { - return app_.validators().getQuorumKeys(); + return app_.getValidators().getQuorumKeys(); } std::size_t @@ -997,7 +997,7 @@ RCLConsensus::Adaptor::validator() const void RCLConsensus::Adaptor::updateOperatingMode(std::size_t const positions) const { - if (!positions && app_.getOPs().isFull()) + if ((positions == 0u) && app_.getOPs().isFull()) app_.getOPs().setMode(OperatingMode::CONNECTED); } @@ -1010,7 +1010,7 @@ RCLConsensus::startRound( hash_set const& nowTrusted, std::unique_ptr const& clog) { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; consensus_.startRound( now, prevLgrId, prevLgr, nowUntrusted, adaptor_.preStartRound(prevLgr, nowTrusted), clog); } diff --git a/src/xrpld/app/consensus/RCLConsensus.h b/src/xrpld/app/consensus/RCLConsensus.h index 15d36a1aa6..c965ed3d87 100644 --- a/src/xrpld/app/consensus/RCLConsensus.h +++ b/src/xrpld/app/consensus/RCLConsensus.h @@ -472,7 +472,7 @@ public: RCLCxLedger::ID prevLedgerID() const { - std::lock_guard _{mutex_}; + std::lock_guard const _{mutex_}; return consensus_.prevLedgerID(); } diff --git a/src/xrpld/app/consensus/RCLCxLedger.h b/src/xrpld/app/consensus/RCLCxLedger.h index 6b96fc8af3..09111ebdb6 100644 --- a/src/xrpld/app/consensus/RCLCxLedger.h +++ b/src/xrpld/app/consensus/RCLCxLedger.h @@ -1,8 +1,8 @@ #pragma once -#include #include +#include #include #include diff --git a/src/xrpld/app/consensus/RCLCxPeerPos.cpp b/src/xrpld/app/consensus/RCLCxPeerPos.cpp index cdb8350468..8f99dceea8 100644 --- a/src/xrpld/app/consensus/RCLCxPeerPos.cpp +++ b/src/xrpld/app/consensus/RCLCxPeerPos.cpp @@ -10,13 +10,13 @@ RCLCxPeerPos::RCLCxPeerPos( PublicKey const& publicKey, Slice const& signature, uint256 const& suppression, - Proposal&& proposal) - : publicKey_(publicKey), suppression_(suppression), proposal_(std::move(proposal)) + Proposal const& proposal) // trivially copyable + : publicKey_(publicKey), suppression_(suppression), proposal_(proposal) { // The maximum allowed size of a signature is 72 bytes; we verify // this elsewhere, but we want to be extra careful here: XRPL_ASSERT( - signature.size() != 0 && signature.size() <= signature_.capacity(), + !signature.empty() && signature.size() <= signature_.capacity(), "xrpl::RCLCxPeerPos::RCLCxPeerPos : valid signature size"); if (!signature.empty() && signature.size() <= signature_.capacity()) @@ -34,7 +34,7 @@ RCLCxPeerPos::getJson() const { auto ret = proposal().getJson(); - if (publicKey().size()) + if (publicKey().size() != 0u) ret[jss::peer_id] = toBase58(TokenType::NodePublic, publicKey()); return ret; diff --git a/src/xrpld/app/consensus/RCLCxPeerPos.h b/src/xrpld/app/consensus/RCLCxPeerPos.h index 5dad4a33eb..e334320826 100644 --- a/src/xrpld/app/consensus/RCLCxPeerPos.h +++ b/src/xrpld/app/consensus/RCLCxPeerPos.h @@ -40,7 +40,7 @@ public: PublicKey const& publicKey, Slice const& signature, uint256 const& suppress, - Proposal&& proposal); + Proposal const& proposal); // trivially copyable //! Verify the signing hash of the proposal bool diff --git a/src/xrpld/app/consensus/RCLValidations.cpp b/src/xrpld/app/consensus/RCLValidations.cpp index a968acb1a7..7bc16f194e 100644 --- a/src/xrpld/app/consensus/RCLValidations.cpp +++ b/src/xrpld/app/consensus/RCLValidations.cpp @@ -6,7 +6,6 @@ #include #include -#include #include #include #include @@ -100,7 +99,7 @@ RCLValidationsAdaptor::RCLValidationsAdaptor(Application& app, beast::Journal j) NetClock::time_point RCLValidationsAdaptor::now() const { - return app_.timeKeeper().closeTime(); + return app_.getTimeKeeper().closeTime(); } std::optional @@ -132,7 +131,7 @@ RCLValidationsAdaptor::acquire(LedgerHash const& hash) XRPL_ASSERT( ledger->header().hash == hash, "xrpl::RCLValidationsAdaptor::acquire : ledger hash match"); - return RCLValidatedLedger(std::move(ledger), j_); + return RCLValidatedLedger(ledger, j_); } void @@ -148,14 +147,14 @@ handleNewValidation( auto const seq = val->getFieldU32(sfLedgerSequence); // Ensure validation is marked as trusted if signer currently trusted - auto masterKey = app.validators().getTrustedKey(signingKey); + auto masterKey = app.getValidators().getTrustedKey(signingKey); if (!val->isTrusted() && masterKey) val->setTrusted(); // If not currently trusted, see if signer is currently listed if (!masterKey) - masterKey = app.validators().getListedKey(signingKey); + masterKey = app.getValidators().getListedKey(signingKey); auto& validations = app.getValidations(); diff --git a/src/xrpld/app/consensus/RCLValidations.h b/src/xrpld/app/consensus/RCLValidations.h index 35c1686f9e..8da82e6425 100644 --- a/src/xrpld/app/consensus/RCLValidations.h +++ b/src/xrpld/app/consensus/RCLValidations.h @@ -1,8 +1,8 @@ #pragma once -#include #include +#include #include #include #include diff --git a/src/xrpld/app/ledger/ConsensusTransSetSF.cpp b/src/xrpld/app/ledger/ConsensusTransSetSF.cpp index 48080aaedb..5fd614a1d9 100644 --- a/src/xrpld/app/ledger/ConsensusTransSetSF.cpp +++ b/src/xrpld/app/ledger/ConsensusTransSetSF.cpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -12,7 +11,7 @@ namespace xrpl { ConsensusTransSetSF::ConsensusTransSetSF(Application& app, NodeCache& nodeCache) - : app_(app), m_nodeCache(nodeCache), j_(app.journal("TransactionAcquire")) + : app_(app), m_nodeCache(nodeCache), j_(app.getJournal("TransactionAcquire")) { } @@ -37,7 +36,7 @@ ConsensusTransSetSF::gotNode( try { // skip prefix - Serializer s(nodeData.data() + 4, nodeData.size() - 4); + Serializer const s(nodeData.data() + 4, nodeData.size() - 4); SerialIter sit(s.slice()); auto stx = std::make_shared(std::ref(sit)); XRPL_ASSERT( diff --git a/src/xrpld/app/ledger/InboundLedger.h b/src/xrpld/app/ledger/InboundLedger.h index ef1362365d..b17b59b27f 100644 --- a/src/xrpld/app/ledger/InboundLedger.h +++ b/src/xrpld/app/ledger/InboundLedger.h @@ -1,11 +1,11 @@ #pragma once -#include #include #include #include #include +#include #include #include @@ -152,11 +152,11 @@ private: clock_type::time_point mLastAction; std::shared_ptr mLedger; - bool mHaveHeader; - bool mHaveState; - bool mHaveTransactions; - bool mSignaled; - bool mByHash; + bool mHaveHeader{false}; + bool mHaveState{false}; + bool mHaveTransactions{false}; + bool mSignaled{false}; + bool mByHash{true}; std::uint32_t mSeq; Reason const mReason; @@ -168,7 +168,7 @@ private: std::mutex mReceivedDataLock; std::vector, std::shared_ptr>> mReceivedData; - bool mReceiveDispatched; + bool mReceiveDispatched{false}; std::unique_ptr mPeerSet; }; diff --git a/src/xrpld/app/ledger/LedgerHistory.cpp b/src/xrpld/app/ledger/LedgerHistory.cpp index 5ff5555fff..969511db4c 100644 --- a/src/xrpld/app/ledger/LedgerHistory.cpp +++ b/src/xrpld/app/ledger/LedgerHistory.cpp @@ -1,7 +1,8 @@ #include +#include #include +#include -#include #include #include #include @@ -19,14 +20,14 @@ LedgerHistory::LedgerHistory(beast::insight::Collector::ptr const& collector, Ap app_.config().getValueFor(SizedItem::ledgerSize), std::chrono::seconds{app_.config().getValueFor(SizedItem::ledgerAge)}, stopwatch(), - app_.journal("TaggedCache")) + app_.getJournal("TaggedCache")) , m_consensus_validated( "ConsensusValidated", 64, std::chrono::minutes{5}, stopwatch(), - app_.journal("TaggedCache")) - , j_(app.journal("LedgerHistory")) + app_.getJournal("TaggedCache")) + , j_(app.getJournal("LedgerHistory")) { } @@ -39,7 +40,7 @@ LedgerHistory::insert(std::shared_ptr const& ledger, bool validate XRPL_ASSERT( ledger->stateMap().getHash().isNonZero(), "xrpl::LedgerHistory::insert : nonzero hash"); - std::unique_lock sl(m_ledgers_by_hash.peekMutex()); + std::unique_lock const sl(m_ledgers_by_hash.peekMutex()); bool const alreadyHad = m_ledgers_by_hash.canonicalize_replace_cache(ledger->header().hash, ledger); @@ -52,7 +53,7 @@ LedgerHistory::insert(std::shared_ptr const& ledger, bool validate LedgerHash LedgerHistory::getLedgerHash(LedgerIndex index) { - std::unique_lock sl(m_ledgers_by_hash.peekMutex()); + std::unique_lock const sl(m_ledgers_by_hash.peekMutex()); if (auto it = mLedgersByIndex.find(index); it != mLedgersByIndex.end()) return it->second; return {}; @@ -67,13 +68,15 @@ LedgerHistory::getLedgerBySeq(LedgerIndex index) if (it != mLedgersByIndex.end()) { - uint256 hash = it->second; + uint256 const hash = it->second; sl.unlock(); return getLedgerByHash(hash); } } - std::shared_ptr ret = loadByIndex(index, app_); + Rules const rules{app_.config().features}; + Fees const fees = app_.config().FEES.toFees(); + std::shared_ptr ret = loadByIndex(index, rules, fees, app_); if (!ret) return ret; @@ -83,7 +86,7 @@ LedgerHistory::getLedgerBySeq(LedgerIndex index) { // Add this ledger to the local tracking by index - std::unique_lock sl(m_ledgers_by_hash.peekMutex()); + std::unique_lock const sl(m_ledgers_by_hash.peekMutex()); XRPL_ASSERT( ret->isImmutable(), "xrpl::LedgerHistory::getLedgerBySeq : immutable result ledger"); @@ -111,7 +114,9 @@ LedgerHistory::getLedgerByHash(LedgerHash const& hash) return ret; } - ret = loadByHash(hash, app_); + Rules const rules{app_.config().features}; + Fees const fees = app_.config().FEES.toFees(); + ret = loadByHash(hash, rules, fees, app_); if (!ret) return ret; @@ -400,11 +405,11 @@ LedgerHistory::builtLedger( uint256 const& consensusHash, Json::Value consensus) { - LedgerIndex index = ledger->header().seq; - LedgerHash hash = ledger->header().hash; + LedgerIndex const index = ledger->header().seq; + LedgerHash const hash = ledger->header().hash; XRPL_ASSERT(!hash.isZero(), "xrpl::LedgerHistory::builtLedger : nonzero hash"); - std::unique_lock sl(m_consensus_validated.peekMutex()); + std::unique_lock const sl(m_consensus_validated.peekMutex()); auto entry = std::make_shared(); m_consensus_validated.canonicalize_replace_client(index, entry); @@ -439,11 +444,11 @@ LedgerHistory::validatedLedger( std::shared_ptr const& ledger, std::optional const& consensusHash) { - LedgerIndex index = ledger->header().seq; - LedgerHash hash = ledger->header().hash; + LedgerIndex const index = ledger->header().seq; + LedgerHash const hash = ledger->header().hash; XRPL_ASSERT(!hash.isZero(), "xrpl::LedgerHistory::validatedLedger : nonzero hash"); - std::unique_lock sl(m_consensus_validated.peekMutex()); + std::unique_lock const sl(m_consensus_validated.peekMutex()); auto entry = std::make_shared(); m_consensus_validated.canonicalize_replace_client(index, entry); @@ -477,7 +482,7 @@ LedgerHistory::validatedLedger( bool LedgerHistory::fixIndex(LedgerIndex ledgerIndex, LedgerHash const& ledgerHash) { - std::unique_lock sl(m_ledgers_by_hash.peekMutex()); + std::unique_lock const sl(m_ledgers_by_hash.peekMutex()); auto it = mLedgersByIndex.find(ledgerIndex); if ((it != mLedgersByIndex.end()) && (it->second != ledgerHash)) @@ -491,7 +496,7 @@ LedgerHistory::fixIndex(LedgerIndex ledgerIndex, LedgerHash const& ledgerHash) void LedgerHistory::clearLedgerCachePrior(LedgerIndex seq) { - for (LedgerHash it : m_ledgers_by_hash.getKeys()) + for (LedgerHash const it : m_ledgers_by_hash.getKeys()) { auto const ledger = getLedgerByHash(it); if (!ledger || ledger->header().seq < seq) diff --git a/src/xrpld/app/ledger/LedgerHistory.h b/src/xrpld/app/ledger/LedgerHistory.h index 6ec279b28a..b988d152ad 100644 --- a/src/xrpld/app/ledger/LedgerHistory.h +++ b/src/xrpld/app/ledger/LedgerHistory.h @@ -1,9 +1,9 @@ #pragma once -#include #include #include +#include #include #include diff --git a/src/xrpld/app/ledger/LedgerHolder.h b/src/xrpld/app/ledger/LedgerHolder.h index 8d2ac9f308..bf9d478c40 100644 --- a/src/xrpld/app/ledger/LedgerHolder.h +++ b/src/xrpld/app/ledger/LedgerHolder.h @@ -28,7 +28,7 @@ public: LogicError("LedgerHolder::set with nullptr"); if (!ledger->isImmutable()) LogicError("LedgerHolder::set with mutable Ledger"); - std::lock_guard sl(m_lock); + std::lock_guard const sl(m_lock); m_heldLedger = std::move(ledger); } @@ -36,14 +36,14 @@ public: std::shared_ptr get() { - std::lock_guard sl(m_lock); + std::lock_guard const sl(m_lock); return m_heldLedger; } bool empty() { - std::lock_guard sl(m_lock); + std::lock_guard const sl(m_lock); return m_heldLedger == nullptr; } diff --git a/src/xrpld/app/ledger/LedgerMaster.h b/src/xrpld/app/ledger/LedgerMaster.h index c25e553455..e598787047 100644 --- a/src/xrpld/app/ledger/LedgerMaster.h +++ b/src/xrpld/app/ledger/LedgerMaster.h @@ -2,17 +2,18 @@ #include #include -#include #include #include #include #include -#include +#include #include #include #include #include +#include +#include #include #include #include @@ -386,7 +387,7 @@ private: void collect_metrics() { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); m_stats.validatedLedgerAge.set(getValidatedLedgerAge().count()); m_stats.publishedLedgerAge.set(getPublishedLedgerAge().count()); } diff --git a/src/xrpld/app/ledger/LedgerPersistence.h b/src/xrpld/app/ledger/LedgerPersistence.h new file mode 100644 index 0000000000..e131932af4 --- /dev/null +++ b/src/xrpld/app/ledger/LedgerPersistence.h @@ -0,0 +1,90 @@ +#pragma once + +#include + +#include +#include + +namespace xrpl { + +class ServiceRegistry; +struct Fees; + +/** Save, or arrange to save, a fully-validated ledger. + + @param registry The service registry providing access to required services. + @param ledger The fully-validated ledger to save. + @param isSynchronous If true, wait for the save to complete. + @param isCurrent If true, the ledger is the current validated ledger. + + @return false on error. +*/ +bool +pendSaveValidated( + ServiceRegistry& registry, + std::shared_ptr const& ledger, + bool isSynchronous, + bool isCurrent); + +/** Make ledger using info loaded from database. + + @param info Ledger information. + @param rules Rules to use (may be overwritten by setup()). + @param fees Fees to use (may be overwritten by setup()). + @param registry Service registry for dependency injection. + @param acquire Acquire the ledger if not found locally. + @return Shared pointer to the ledger. +*/ +std::shared_ptr +loadLedgerHelper( + LedgerHeader const& info, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire); + +/** Load a ledger by its sequence number. + + @param ledgerIndex The sequence number of the ledger to load. + @param rules Rules to use (may be overwritten by setup()). + @param fees Fees to use (may be overwritten by setup()). + @param registry Service registry for dependency injection. + @param acquire Acquire the ledger if not found locally. + @return Shared pointer to the ledger, or nullptr if not found. +*/ +std::shared_ptr +loadByIndex( + std::uint32_t ledgerIndex, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire = true); + +/** Load a ledger by its hash. + + @param ledgerHash The hash of the ledger to load. + @param rules Rules to use (may be overwritten by setup()). + @param fees Fees to use (may be overwritten by setup()). + @param registry Service registry for dependency injection. + @param acquire Acquire the ledger if not found locally. + @return Shared pointer to the ledger, or nullptr if not found. +*/ +std::shared_ptr +loadByHash( + uint256 const& ledgerHash, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire = true); + +/** Fetch the ledger with the highest sequence contained in the database. + + @param rules Rules to use (may be overwritten by setup()). + @param fees Fees to use (may be overwritten by setup()). + @param registry Service registry for dependency injection. + @return Tuple of (ledger, sequence, hash), or empty if not found. +*/ +std::tuple, std::uint32_t, uint256> +getLatestLedger(Rules const& rules, Fees const& fees, ServiceRegistry& registry); + +} // namespace xrpl diff --git a/src/xrpld/app/ledger/LedgerReplay.h b/src/xrpld/app/ledger/LedgerReplay.h index f4cbf9c69e..a2b2e60e8e 100644 --- a/src/xrpld/app/ledger/LedgerReplay.h +++ b/src/xrpld/app/ledger/LedgerReplay.h @@ -4,6 +4,7 @@ #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/LedgerReplayer.h b/src/xrpld/app/ledger/LedgerReplayer.h index 218d22fb07..ce2acb0699 100644 --- a/src/xrpld/app/ledger/LedgerReplayer.h +++ b/src/xrpld/app/ledger/LedgerReplayer.h @@ -103,21 +103,21 @@ public: std::size_t tasksSize() const { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); return tasks_.size(); } std::size_t deltasSize() const { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); return deltas_.size(); } std::size_t skipListsSize() const { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); return skipLists_.size(); } diff --git a/src/xrpld/app/ledger/LedgerToJson.h b/src/xrpld/app/ledger/LedgerToJson.h index 9def1c3826..3686311656 100644 --- a/src/xrpld/app/ledger/LedgerToJson.h +++ b/src/xrpld/app/ledger/LedgerToJson.h @@ -1,11 +1,11 @@ #pragma once -#include #include #include #include #include +#include #include namespace xrpl { diff --git a/src/xrpld/app/ledger/LocalTxs.h b/src/xrpld/app/ledger/LocalTxs.h index 34dfede40f..cb17be5bdb 100644 --- a/src/xrpld/app/ledger/LocalTxs.h +++ b/src/xrpld/app/ledger/LocalTxs.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include #include #include diff --git a/src/xrpld/app/ledger/OpenLedger.h b/src/xrpld/app/ledger/OpenLedger.h index 76123bafae..5b1d611b44 100644 --- a/src/xrpld/app/ledger/OpenLedger.h +++ b/src/xrpld/app/ledger/OpenLedger.h @@ -1,7 +1,5 @@ #pragma once -#include -#include #include #include @@ -9,6 +7,8 @@ #include #include #include +#include +#include #include #include diff --git a/src/xrpld/app/ledger/OrderBookDBImpl.cpp b/src/xrpld/app/ledger/OrderBookDBImpl.cpp index 2691935911..ffd8499aba 100644 --- a/src/xrpld/app/ledger/OrderBookDBImpl.cpp +++ b/src/xrpld/app/ledger/OrderBookDBImpl.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include #include @@ -14,7 +13,7 @@ OrderBookDBImpl::OrderBookDBImpl(ServiceRegistry& registry, OrderBookDBConfig co , pathSearchMax_(config.pathSearchMax) , standalone_(config.standalone) , seq_(0) - , j_(registry.journal("OrderBookDB")) + , j_(registry.getJournal("OrderBookDB")) { } @@ -27,7 +26,7 @@ make_OrderBookDB(ServiceRegistry& registry, OrderBookDBConfig const& config) void OrderBookDBImpl::setup(std::shared_ptr const& ledger) { - if (!standalone_ && registry_.getOPs().isNeedNetworkLedger()) + if (!standalone_ && registry_.get().getOPs().isNeedNetworkLedger()) { JLOG(j_.warn()) << "Eliding full order book update: no ledger"; return; @@ -57,8 +56,10 @@ OrderBookDBImpl::setup(std::shared_ptr const& ledger) } else { - registry_.getJobQueue().addJob( - jtUPDATE_PF, "OrderBookUpd" + std::to_string(ledger->seq()), [this, ledger]() { + // Shorten job name to fit Linux 15-char thread name limit with "j:" prefix + // "OB" + seq (max 9 digits) = 11 chars, + "j:" = 13 chars (fits in 15) + registry_.get().getJobQueue().addJob( + jtUPDATE_PF, "OB" + std::to_string(ledger->seq() % 1000000000), [this, ledger]() { update(ledger); }); } @@ -96,7 +97,7 @@ OrderBookDBImpl::update(std::shared_ptr const& ledger) { for (auto& sle : ledger->sles) { - if (registry_.isStopping()) + if (registry_.get().isStopping()) { JLOG(j_.info()) << "Update halted because the process is stopping"; seq_.store(0); @@ -161,22 +162,22 @@ OrderBookDBImpl::update(std::shared_ptr const& ledger) JLOG(j_.debug()) << "Update completed (" << ledger->seq() << "): " << cnt << " books found"; { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); allBooks_.swap(allBooks); xrpBooks_.swap(xrpBooks); domainBooks_.swap(domainBooks); xrpDomainBooks_.swap(xrpDomainBooks); } - registry_.getLedgerMaster().newOrderBookDB(); + registry_.get().getLedgerMaster().newOrderBookDB(); } void OrderBookDBImpl::addOrderBook(Book const& book) { - bool toXRP = isXRP(book.out); + bool const toXRP = isXRP(book.out); - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (book.domain) { @@ -204,7 +205,7 @@ OrderBookDBImpl::getBooksByTakerPays(Issue const& issue, std::optional std::vector ret; { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto getBooks = [&](auto const& container, auto const& key) { if (auto it = container.find(key); it != container.end()) @@ -233,7 +234,7 @@ OrderBookDBImpl::getBooksByTakerPays(Issue const& issue, std::optional int OrderBookDBImpl::getBookSize(Issue const& issue, std::optional const& domain) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (!domain) { @@ -250,9 +251,9 @@ OrderBookDBImpl::getBookSize(Issue const& issue, std::optional const& d } bool -OrderBookDBImpl::isBookToXRP(Issue const& issue, std::optional domain) +OrderBookDBImpl::isBookToXRP(Issue const& issue, std::optional const& domain) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (domain) return xrpDomainBooks_.contains({issue, *domain}); return xrpBooks_.contains(issue); @@ -261,7 +262,7 @@ OrderBookDBImpl::isBookToXRP(Issue const& issue, std::optional domain) BookListeners::pointer OrderBookDBImpl::makeBookListeners(Book const& book) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto ret = getBookListeners(book); if (!ret) @@ -282,7 +283,7 @@ BookListeners::pointer OrderBookDBImpl::getBookListeners(Book const& book) { BookListeners::pointer ret; - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto it0 = mListeners.find(book); if (it0 != mListeners.end()) @@ -299,7 +300,7 @@ OrderBookDBImpl::processTxn( AcceptedLedgerTx const& alTx, MultiApiJson const& jvObj) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); // For this particular transaction, maintain the set of unique // subscriptions that have already published it. This prevents sending diff --git a/src/xrpld/app/ledger/OrderBookDBImpl.h b/src/xrpld/app/ledger/OrderBookDBImpl.h index d9043f942e..4dd413438e 100644 --- a/src/xrpld/app/ledger/OrderBookDBImpl.h +++ b/src/xrpld/app/ledger/OrderBookDBImpl.h @@ -48,7 +48,7 @@ public: getBookSize(Issue const& issue, std::optional const& domain = std::nullopt) override; bool - isBookToXRP(Issue const& issue, std::optional domain = std::nullopt) override; + isBookToXRP(Issue const& issue, std::optional const& domain = std::nullopt) override; // OrderBookDBImpl-specific methods void @@ -67,7 +67,7 @@ public: makeBookListeners(Book const&) override; private: - ServiceRegistry& registry_; + std::reference_wrapper registry_; int const pathSearchMax_; bool const standalone_; diff --git a/src/xrpld/app/ledger/detail/BuildLedger.cpp b/src/xrpld/app/ledger/detail/BuildLedger.cpp index 5ad72c7a69..3b48ab13c5 100644 --- a/src/xrpld/app/ledger/detail/BuildLedger.cpp +++ b/src/xrpld/app/ledger/detail/BuildLedger.cpp @@ -1,10 +1,10 @@ #include -#include #include #include #include -#include +#include +#include #include #include @@ -138,11 +138,11 @@ applyTransactions( count += changes; // A non-retry pass made no changes - if (!changes && !certainRetry) + if ((changes == 0) && !certainRetry) break; // Stop retriable passes - if (!changes || (pass >= LEDGER_RETRY_PASSES)) + if ((changes == 0) || (pass >= LEDGER_RETRY_PASSES)) certainRetry = false; } diff --git a/src/xrpld/app/ledger/detail/InboundLedger.cpp b/src/xrpld/app/ledger/detail/InboundLedger.cpp index 9f7312ea34..2402b5b561 100644 --- a/src/xrpld/app/ledger/detail/InboundLedger.cpp +++ b/src/xrpld/app/ledger/detail/InboundLedger.cpp @@ -6,7 +6,6 @@ #include #include -#include #include #include #include @@ -66,16 +65,10 @@ InboundLedger::InboundLedger( hash, ledgerAcquireTimeout, {jtLEDGER_DATA, "InboundLedger", 5}, - app.journal("InboundLedger")) + app.getJournal("InboundLedger")) , m_clock(clock) - , mHaveHeader(false) - , mHaveState(false) - , mHaveTransactions(false) - , mSignaled(false) - , mByHash(true) , mSeq(seq) , mReason(reason) - , mReceiveDispatched(false) , mPeerSet(std::move(peerSet)) { JLOG(journal_.trace()) << "Acquiring ledger " << hash_; @@ -121,14 +114,14 @@ InboundLedger::getPeerCount() const { auto const& peerIds = mPeerSet->getPeerIds(); return std::count_if(peerIds.begin(), peerIds.end(), [this](auto id) { - return (app_.overlay().findPeerByShortID(id) != nullptr); + return (app_.getOverlay().findPeerByShortID(id) != nullptr); }); } void InboundLedger::update(std::uint32_t seq) { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); // If we didn't know the sequence number, but now do, save it if ((seq != 0) && (mSeq == 0)) @@ -141,7 +134,7 @@ InboundLedger::update(std::uint32_t seq) bool InboundLedger::checkLocal() { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); if (!isDone()) { if (mLedger) @@ -224,8 +217,9 @@ InboundLedger::tryDB(NodeStore::Database& srcDB) { auto makeLedger = [&, this](Blob const& data) { JLOG(journal_.trace()) << "Ledger header found in fetch pack"; + Rules const rules{app_.config().features}; mLedger = std::make_shared( - deserializePrefixedHeader(makeSlice(data)), app_.config(), app_.getNodeFamily()); + deserializePrefixedHeader(makeSlice(data)), rules, app_.getNodeFamily()); if (mLedger->header().hash != hash_ || (mSeq != 0 && mSeq != mLedger->header().seq)) { // We know for a fact the ledger can never be acquired @@ -363,7 +357,7 @@ InboundLedger::onTimer(bool wasProgress, ScopedLockType&) mByHash = true; - std::size_t pc = getPeerCount(); + std::size_t const pc = getPeerCount(); JLOG(journal_.debug()) << "No progress(" << pc << ") for ledger " << hash_; // addPeers triggers if the reason is not HISTORY @@ -529,7 +523,7 @@ InboundLedger::trigger(std::shared_ptr const& peer, TriggerReason reason) auto packet = std::make_shared(tmBH, protocol::mtGET_OBJECTS); auto const& peerIds = mPeerSet->getPeerIds(); std::for_each(peerIds.begin(), peerIds.end(), [this, &packet](auto id) { - if (auto p = app_.overlay().findPeerByShortID(id)) + if (auto p = app_.getOverlay().findPeerByShortID(id)) { mByHash = false; p->send(packet); @@ -777,7 +771,8 @@ InboundLedger::takeHeader(std::string const& data) return true; auto* f = &app_.getNodeFamily(); - mLedger = std::make_shared(deserializeHeader(makeSlice(data)), app_.config(), *f); + Rules const rules{app_.config().features}; + mLedger = std::make_shared(deserializeHeader(makeSlice(data)), rules, *f); if (mLedger->header().hash != hash_ || (mSeq != 0 && mSeq != mLedger->header().seq)) { JLOG(journal_.warn()) << "Acquire hash mismatch: " << mLedger->header().hash @@ -995,7 +990,7 @@ InboundLedger::gotData( std::weak_ptr peer, std::shared_ptr const& data) { - std::lock_guard sl(mReceivedDataLock); + std::lock_guard const sl(mReceivedDataLock); if (isDone()) return false; @@ -1031,7 +1026,7 @@ InboundLedger::processData(std::shared_ptr peer, protocol::TMLedgerData& p SHAMapAddNode san; - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); try { @@ -1083,7 +1078,7 @@ InboundLedger::processData(std::shared_ptr peer, protocol::TMLedgerData& p return -1; } - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); // Verify node IDs and data are complete for (auto const& node : packet.nodes()) @@ -1207,7 +1202,7 @@ InboundLedger::runData() data.clear(); { - std::lock_guard sl(mReceivedDataLock); + std::lock_guard const sl(mReceivedDataLock); if (mReceivedData.empty()) { @@ -1222,7 +1217,7 @@ InboundLedger::runData() { if (auto peer = entry.first.lock()) { - int count = processData(peer, *(entry.second)); + int const count = processData(peer, *(entry.second)); dataCounts.update(std::move(peer), count); } } @@ -1241,7 +1236,7 @@ InboundLedger::getJson(int) { Json::Value ret(Json::objectValue); - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); ret[jss::hash] = to_string(hash_); diff --git a/src/xrpld/app/ledger/detail/InboundLedgers.cpp b/src/xrpld/app/ledger/detail/InboundLedgers.cpp index be7577a2c3..f147a35ca4 100644 --- a/src/xrpld/app/ledger/detail/InboundLedgers.cpp +++ b/src/xrpld/app/ledger/detail/InboundLedgers.cpp @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -38,7 +37,7 @@ public: std::unique_ptr peerSetBuilder) : app_(app) , fetchRate_(clock.now()) - , j_(app.journal("InboundLedger")) + , j_(app.getJournal("InboundLedger")) , m_clock(clock) , mRecentFailures(clock) , mCounter(collector->make_counter("ledger_fetches")) @@ -111,7 +110,7 @@ public: if (pendingAcquires_.contains(hash)) return; pendingAcquires_.insert(hash); - scope_unlock unlock(lock); + scope_unlock const unlock(lock); acquire(hash, seq, reason); } catch (std::exception const& e) @@ -134,7 +133,7 @@ public: std::shared_ptr ret; { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); auto it = mLedgers.find(hash); if (it != mLedgers.end()) @@ -198,7 +197,7 @@ public: void logFailure(uint256 const& h, std::uint32_t seq) override { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); mRecentFailures.emplace(h, seq); } @@ -206,7 +205,7 @@ public: bool isFailure(uint256 const& h) override { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); beast::expire(mRecentFailures, kReacquireInterval); return mRecentFailures.find(h) != mRecentFailures.end(); @@ -251,7 +250,7 @@ public: void clearFailures() override { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); mRecentFailures.clear(); mLedgers.clear(); @@ -260,7 +259,7 @@ public: std::size_t fetchRate() override { - std::lock_guard lock(fetchRateMutex_); + std::lock_guard const lock(fetchRateMutex_); return 60 * fetchRate_.value(m_clock.now()); } @@ -269,7 +268,7 @@ public: void onLedgerFetched() override { - std::lock_guard lock(fetchRateMutex_); + std::lock_guard const lock(fetchRateMutex_); fetchRate_.add(1, m_clock.now()); } @@ -281,7 +280,7 @@ public: std::vector>> acqs; { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); acqs.reserve(mLedgers.size()); for (auto const& it : mLedgers) @@ -305,7 +304,7 @@ public: for (auto const& it : acqs) { // getJson is expensive, so call without the lock - std::uint32_t seq = it.second->getSeq(); + std::uint32_t const seq = it.second->getSeq(); if (seq > 1) { ret[std::to_string(seq)] = it.second->getJson(0); @@ -324,7 +323,7 @@ public: { std::vector> acquires; { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); acquires.reserve(mLedgers.size()); for (auto const& it : mLedgers) @@ -353,7 +352,7 @@ public: std::size_t total = 0; { - ScopedLockType sl(mLock); + ScopedLockType const sl(mLock); MapType::iterator it(mLedgers.begin()); total = mLedgers.size(); @@ -394,7 +393,7 @@ public: void stop() override { - ScopedLockType lock(mLock); + ScopedLockType const lock(mLock); stopping_ = true; mLedgers.clear(); mRecentFailures.clear(); @@ -403,7 +402,7 @@ public: std::size_t cacheSize() override { - ScopedLockType lock(mLock); + ScopedLockType const lock(mLock); return mLedgers.size(); } diff --git a/src/xrpld/app/ledger/detail/InboundTransactions.cpp b/src/xrpld/app/ledger/detail/InboundTransactions.cpp index f27f2c33f0..cc3585a3fb 100644 --- a/src/xrpld/app/ledger/detail/InboundTransactions.cpp +++ b/src/xrpld/app/ledger/detail/InboundTransactions.cpp @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -54,7 +53,7 @@ public: , m_zeroSet(m_map[uint256()]) , m_gotSet(std::move(gotSet)) , m_peerSetBuilder(std::move(peerSetBuilder)) - , j_(app_.journal("InboundTransactions")) + , j_(app_.getJournal("InboundTransactions")) { m_zeroSet.mSet = std::make_shared(SHAMapType::TRANSACTION, uint256(), app_.getNodeFamily()); @@ -65,7 +64,7 @@ public: getAcquire(uint256 const& hash) { { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto it = m_map.find(hash); @@ -81,7 +80,7 @@ public: TransactionAcquire::pointer ta; { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (auto it = m_map.find(hash); it != m_map.end()) { @@ -119,12 +118,12 @@ public: std::shared_ptr peer, std::shared_ptr packet_ptr) override { - protocol::TMLedgerData& packet = *packet_ptr; + protocol::TMLedgerData const& packet = *packet_ptr; JLOG(j_.trace()) << "Got data (" << packet.nodes().size() << ") for acquiring ledger: " << hash; - TransactionAcquire::pointer ta = getAcquire(hash); + TransactionAcquire::pointer const ta = getAcquire(hash); if (ta == nullptr) { @@ -164,7 +163,7 @@ public: bool isNew = true; { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto& inboundSet = m_map[hash]; @@ -189,7 +188,7 @@ public: void newRound(std::uint32_t seq) override { - std::lock_guard lock(mLock); + std::lock_guard const lock(mLock); // Protect zero set from expiration m_zeroSet.mSeq = seq; @@ -201,7 +200,7 @@ public: auto it = m_map.begin(); std::uint32_t const minSeq = (seq < setKeepRounds) ? 0 : (seq - setKeepRounds); - std::uint32_t maxSeq = seq + setKeepRounds; + std::uint32_t const maxSeq = seq + setKeepRounds; while (it != m_map.end()) { @@ -220,7 +219,7 @@ public: void stop() override { - std::lock_guard lock(mLock); + std::lock_guard const lock(mLock); stopping_ = true; m_map.clear(); } diff --git a/src/xrpld/app/ledger/detail/LedgerCleaner.cpp b/src/xrpld/app/ledger/detail/LedgerCleaner.cpp index 3052f787dc..a0d168f299 100644 --- a/src/xrpld/app/ledger/detail/LedgerCleaner.cpp +++ b/src/xrpld/app/ledger/detail/LedgerCleaner.cpp @@ -1,6 +1,8 @@ #include #include #include +#include +#include #include #include @@ -74,7 +76,7 @@ public: { JLOG(j_.info()) << "Stopping"; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); shouldExit_ = true; wakeup_.notify_one(); } @@ -90,7 +92,7 @@ public: void onWrite(beast::PropertyStream::Map& map) override { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (maxRange_ == 0) { @@ -122,7 +124,7 @@ public: app_.getLedgerMaster().getFullValidatedRange(minRange, maxRange); { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); maxRange_ = maxRange; minRange_ = minRange; @@ -261,7 +263,9 @@ private: return false; } - auto dbLedger = loadByIndex(ledgerIndex, app_); + Rules const rules{app_.config().features}; + Fees const fees = app_.config().FEES.toFees(); + auto const dbLedger = loadByIndex(ledgerIndex, rules, fees, app_); if (!dbLedger || (dbLedger->header().hash != ledgerHash) || (dbLedger->header().parentHash != nodeLedger->header().parentHash)) { @@ -276,7 +280,7 @@ private: doTxns = true; } - if (doNodes && !nodeLedger->walkLedger(app_.journal("Ledger"))) + if (doNodes && !nodeLedger->walkLedger(app_.getJournal("Ledger"))) { JLOG(j_.debug()) << "Ledger " << ledgerIndex << " is missing nodes"; app_.getLedgerMaster().clearLedger(ledgerIndex); @@ -323,8 +327,8 @@ private: // No. Try to get another ledger that might have the hash we // need: compute the index and hash of a ledger that will have // the hash we need. - LedgerIndex refIndex = getCandidateLedger(ledgerIndex); - LedgerHash refHash = getLedgerHash(referenceLedger, refIndex); + LedgerIndex const refIndex = getCandidateLedger(ledgerIndex); + LedgerHash const refHash = getLedgerHash(referenceLedger, refIndex); bool const nonzero(refHash.isNonZero()); XRPL_ASSERT(nonzero, "xrpl::LedgerCleanerImp::getHash : nonzero hash"); @@ -350,7 +354,7 @@ private: doLedgerCleaner() { auto shouldExit = [this] { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return shouldExit_; }; @@ -371,7 +375,7 @@ private: } { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if ((minRange_ > maxRange_) || (maxRange_ == 0) || (minRange_ == 0)) { minRange_ = maxRange_ = 0; @@ -399,7 +403,7 @@ private: if (fail) { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); ++failures_; } // Wait for acquiring to catch up to us @@ -408,7 +412,7 @@ private: else { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (ledgerIndex == minRange_) ++minRange_; if (ledgerIndex == maxRange_) diff --git a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp index cb2e2e57ea..f829e58830 100644 --- a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp +++ b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp @@ -21,7 +21,7 @@ LedgerDeltaAcquire::LedgerDeltaAcquire( ledgerHash, LedgerReplayParameters::SUB_TASK_TIMEOUT, {jtREPLAY_TASK, "LedReplDelta", LedgerReplayParameters::MAX_QUEUED_TASKS}, - app.journal("LedgerReplayDelta")) + app.getJournal("LedgerReplayDelta")) , inboundLedgers_(inboundLedgers) , ledgerSeq_(ledgerSeq) , peerSet_(std::move(peerSet)) @@ -124,7 +124,8 @@ LedgerDeltaAcquire::processData( if (info.seq == ledgerSeq_) { // create a temporary ledger for building a LedgerReplay object later - replayTemp_ = std::make_shared(info, app_.config(), app_.getNodeFamily()); + Rules const rules{app_.config().features}; + replayTemp_ = std::make_shared(info, rules, app_.getNodeFamily()); if (replayTemp_) { complete_ = true; @@ -177,7 +178,7 @@ LedgerDeltaAcquire::tryBuild(std::shared_ptr const& parent) parent->header().hash == replayTemp_->header().parentHash, "xrpl::LedgerDeltaAcquire::tryBuild : parent hash match"); // build ledger - LedgerReplay replayData(parent, replayTemp_, std::move(orderedTxns_)); + LedgerReplay const replayData(parent, replayTemp_, std::move(orderedTxns_)); fullLedger_ = buildLedger(replayData, tapNONE, app_, journal_); if (fullLedger_ && fullLedger_->header().hash == hash_) { diff --git a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h index 2877d997e6..9ac58c2e7c 100644 --- a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h +++ b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h @@ -1,11 +1,11 @@ #pragma once #include -#include #include #include #include +#include #include diff --git a/src/xrpld/app/ledger/detail/LedgerMaster.cpp b/src/xrpld/app/ledger/detail/LedgerMaster.cpp index 42d7f2ec6e..876a7e0578 100644 --- a/src/xrpld/app/ledger/detail/LedgerMaster.cpp +++ b/src/xrpld/app/ledger/detail/LedgerMaster.cpp @@ -1,20 +1,18 @@ #include -#include #include +#include #include #include -#include #include #include #include #include #include -#include #include #include #include +#include -#include #include #include #include @@ -22,7 +20,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -94,7 +94,7 @@ LedgerMaster::LedgerMaster( 65536, std::chrono::seconds{45}, stopwatch, - app_.journal("TaggedCache")) + app_.getJournal("TaggedCache")) , m_stats(std::bind(&LedgerMaster::collect_metrics, this), collector) { } @@ -102,7 +102,7 @@ LedgerMaster::LedgerMaster( LedgerIndex LedgerMaster::getCurrentLedgerIndex() { - return app_.openLedger().current()->header().seq; + return app_.getOpenLedger().current()->header().seq; } LedgerIndex @@ -122,7 +122,7 @@ LedgerMaster::isCompatible(ReadView const& view, beast::Journal::Stream s, char } { - std::lock_guard sl(m_mutex); + std::lock_guard const sl(m_mutex); if ((mLastValidLedger.second != 0) && !areCompatible(mLastValidLedger.first, mLastValidLedger.second, view, s, reason)) @@ -138,14 +138,14 @@ std::chrono::seconds LedgerMaster::getPublishedLedgerAge() { using namespace std::chrono_literals; - std::chrono::seconds pubClose{mPubLedgerClose.load()}; + std::chrono::seconds const pubClose{mPubLedgerClose.load()}; if (pubClose == 0s) { JLOG(m_journal.debug()) << "No published ledger"; return weeks{2}; } - std::chrono::seconds ret = app_.timeKeeper().closeTime().time_since_epoch(); + std::chrono::seconds ret = app_.getTimeKeeper().closeTime().time_since_epoch(); ret -= pubClose; ret = (ret > 0s) ? ret : 0s; static std::chrono::seconds lastRet = -1s; @@ -163,14 +163,14 @@ LedgerMaster::getValidatedLedgerAge() { using namespace std::chrono_literals; - std::chrono::seconds valClose{mValidLedgerSign.load()}; + std::chrono::seconds const valClose{mValidLedgerSign.load()}; if (valClose == 0s) { JLOG(m_journal.debug()) << "No validated ledger"; return weeks{2}; } - std::chrono::seconds ret = app_.timeKeeper().closeTime().time_since_epoch(); + std::chrono::seconds ret = app_.getTimeKeeper().closeTime().time_since_epoch(); ret -= valClose; ret = (ret > 0s) ? ret : 0s; static std::chrono::seconds lastRet = -1s; @@ -193,9 +193,9 @@ LedgerMaster::isCaughtUp(std::string& reason) reason = "No recently-published ledger"; return false; } - std::uint32_t validClose = mValidLedgerSign.load(); - std::uint32_t pubClose = mPubLedgerClose.load(); - if (!validClose || !pubClose) + std::uint32_t const validClose = mValidLedgerSign.load(); + std::uint32_t const pubClose = mPubLedgerClose.load(); + if ((validClose == 0u) || (pubClose == 0u)) { reason = "No published ledger"; return false; @@ -216,7 +216,7 @@ LedgerMaster::setValidLedger(std::shared_ptr const& l) if (!standalone_) { - auto validations = app_.validators().negativeUNLFilter( + auto validations = app_.getValidators().negativeUNLFilter( app_.getValidations().getTrustedForLedger(l->header().hash, l->header().seq)); times.reserve(validations.size()); for (auto const& val : validations) @@ -228,7 +228,7 @@ LedgerMaster::setValidLedger(std::shared_ptr const& l) NetClock::time_point signTime; - if (!times.empty() && times.size() >= app_.validators().quorum()) + if (!times.empty() && times.size() >= app_.getValidators().quorum()) { // Calculate the sample median std::sort(times.begin(), times.end()); @@ -301,7 +301,7 @@ LedgerMaster::setPubLedger(std::shared_ptr const& l) void LedgerMaster::addHeldTransaction(std::shared_ptr const& transaction) { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); mHeldTransactions.insert(transaction->getSTransaction()); } @@ -329,7 +329,7 @@ LedgerMaster::canBeCurrent(std::shared_ptr const& ledger) // we perform this check. Otherwise, we only do it if we've built a // few ledgers as our clock can be off when we first start up - auto closeTime = app_.timeKeeper().closeTime(); + auto closeTime = app_.getTimeKeeper().closeTime(); auto ledgerClose = ledger->header().parentCloseTime; using namespace std::chrono_literals; @@ -384,7 +384,7 @@ LedgerMaster::switchLCL(std::shared_ptr const& lastClosed) LogicError("The new last closed ledger is open!"); { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); mClosedLedger.set(lastClosed); } @@ -408,9 +408,9 @@ LedgerMaster::fixIndex(LedgerIndex ledgerIndex, LedgerHash const& ledgerHash) bool LedgerMaster::storeLedger(std::shared_ptr ledger) { - bool validated = ledger->header().validated; + bool const validated = ledger->header().validated; // Returns true if we already had the ledger - return mLedgerHistory.insert(std::move(ledger), validated); + return mLedgerHistory.insert(ledger, validated); } /** Apply held transactions to the open ledger @@ -422,10 +422,10 @@ void LedgerMaster::applyHeldTransactions() { CanonicalTXSet const set = [this]() { - std::lock_guard sl(m_mutex); + std::lock_guard const sl(m_mutex); // VFALCO NOTE The hash for an open ledger is undefined so we use // something that is a reasonable substitute. - CanonicalTXSet set(app_.openLedger().current()->header().parentHash); + CanonicalTXSet set(app_.getOpenLedger().current()->header().parentHash); std::swap(mHeldTransactions, set); return set; }(); @@ -437,7 +437,7 @@ LedgerMaster::applyHeldTransactions() std::shared_ptr LedgerMaster::popAcctTransaction(std::shared_ptr const& tx) { - std::lock_guard sl(m_mutex); + std::lock_guard const sl(m_mutex); return mHeldTransactions.popAcctTransaction(tx); } @@ -451,14 +451,14 @@ LedgerMaster::setBuildingLedger(LedgerIndex i) bool LedgerMaster::haveLedger(std::uint32_t seq) { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); return boost::icl::contains(mCompleteLedgers, seq); } void LedgerMaster::clearLedger(std::uint32_t seq) { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); mCompleteLedgers.erase(seq); } @@ -485,7 +485,7 @@ LedgerMaster::isValidated(ReadView const& ledger) if (hash) { XRPL_ASSERT(hash->isNonZero(), "xrpl::LedgerMaster::isValidated : nonzero hash"); - uint256 valHash = app_.getRelationalDatabase().getHashByIndex(seq); + uint256 const valHash = app_.getRelationalDatabase().getHashByIndex(seq); if (valHash == ledger.header().hash) { // SQL database doesn't match ledger chain @@ -514,12 +514,12 @@ LedgerMaster::getFullValidatedRange(std::uint32_t& minVal, std::uint32_t& maxVal // published ledger which is. maxVal = mPubLedgerSeq.load(); - if (!maxVal) + if (maxVal == 0u) return false; std::optional maybeMin; { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); maybeMin = prevMissing(mCompleteLedgers, maxVal); } @@ -545,7 +545,7 @@ LedgerMaster::getValidatedRange(std::uint32_t& minVal, std::uint32_t& maxVal) // Remove from the validated range any ledger sequences that may not be // fully updated in the database yet - auto const pendingSaves = app_.pendingSaves().getSnapshot(); + auto const pendingSaves = app_.getPendingSaves().getSnapshot(); if (!pendingSaves.empty() && ((minVal != 0) || (maxVal != 0))) { @@ -614,7 +614,7 @@ LedgerMaster::tryFill(std::shared_ptr ledger) while (!app_.getJobQueue().isStopping() && seq > 0) { { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); minHas = seq; --seq; @@ -630,7 +630,7 @@ LedgerMaster::tryFill(std::shared_ptr ledger) return; { - std::lock_guard ml(mCompleteLock); + std::lock_guard const ml(mCompleteLock); mCompleteLedgers.insert(range(minHas, maxHas)); } maxHas = minHas; @@ -658,11 +658,11 @@ LedgerMaster::tryFill(std::shared_ptr ledger) } { - std::lock_guard ml(mCompleteLock); + std::lock_guard const ml(mCompleteLock); mCompleteLedgers.insert(range(minHas, maxHas)); } { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); mFillInProgress = 0; tryAdvance(); } @@ -687,12 +687,12 @@ LedgerMaster::getFetchPack(LedgerIndex missing, InboundLedger::Reason reason) std::shared_ptr target; { int maxScore = 0; - auto peerList = app_.overlay().getActivePeers(); + auto peerList = app_.getOverlay().getActivePeers(); for (auto const& peer : peerList) { if (peer->hasRange(missing, missing + 1)) { - int score = peer->getScore(true); + int const score = peer->getScore(true); if (!target || (score > maxScore)) { target = peer; @@ -791,7 +791,8 @@ LedgerMaster::setFullLedger( { // Check the SQL database's entry for the sequence before this // ledger, if it's not this ledger's parent, invalidate it - uint256 prevHash = app_.getRelationalDatabase().getHashByIndex(ledger->header().seq - 1); + uint256 const prevHash = + app_.getRelationalDatabase().getHashByIndex(ledger->header().seq - 1); if (prevHash.isNonZero() && prevHash != ledger->header().parentHash) clearLedger(ledger->header().seq - 1); } @@ -799,12 +800,12 @@ LedgerMaster::setFullLedger( pendSaveValidated(app_, ledger, isSynchronous, isCurrent); { - std::lock_guard ml(mCompleteLock); + std::lock_guard const ml(mCompleteLock); mCompleteLedgers.insert(ledger->header().seq); } { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (ledger->header().seq > mValidLedgerSeq) setValidLedger(ledger); @@ -849,12 +850,12 @@ LedgerMaster::checkAccept(uint256 const& hash, std::uint32_t seq) if (seq < mValidLedgerSeq) return; - auto validations = app_.validators().negativeUNLFilter( + auto validations = app_.getValidators().negativeUNLFilter( app_.getValidations().getTrustedForLedger(hash, seq)); valCount = validations.size(); - if (valCount >= app_.validators().quorum()) + if (valCount >= app_.getValidators().quorum()) { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (seq > mLastValidLedger.second) mLastValidLedger = std::make_pair(hash, seq); } @@ -874,8 +875,8 @@ LedgerMaster::checkAccept(uint256 const& hash, std::uint32_t seq) if ((seq != 0) && (getValidLedgerIndex() == 0)) { // Set peers converged early if we can - if (valCount >= app_.validators().quorum()) - app_.overlay().checkTracking(seq); + if (valCount >= app_.getValidators().quorum()) + app_.getOverlay().checkTracking(seq); } // FIXME: We may not want to fetch a ledger with just one @@ -895,7 +896,7 @@ LedgerMaster::checkAccept(uint256 const& hash, std::uint32_t seq) std::size_t LedgerMaster::getNeededValidations() { - return standalone_ ? 0 : app_.validators().quorum(); + return standalone_ ? 0 : app_.getValidators().quorum(); } void @@ -908,13 +909,13 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) // Can we advance the last fully-validated ledger? If so, can we // publish? - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (ledger->header().seq <= mValidLedgerSeq) return; auto const minVal = getNeededValidations(); - auto validations = app_.validators().negativeUNLFilter( + auto validations = app_.getValidators().negativeUNLFilter( app_.getValidations().getTrustedForLedger(ledger->header().hash, ledger->header().seq)); auto const tvc = validations.size(); if (tvc < minVal) // nothing we can do @@ -978,7 +979,7 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) // before checking the version information to accumulate more validation // messages. - auto currentTime = app_.timeKeeper().now(); + auto currentTime = app_.getTimeKeeper().now(); bool needPrint = false; // The variable upgradeWarningPrevTime_ will be set when and only when @@ -1007,7 +1008,7 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) { constexpr std::size_t reportingPercent = 90; constexpr std::size_t cutoffPercent = 60; - auto const unlSize{app_.validators().getQuorumKeys().second.size()}; + auto const unlSize{app_.getValidators().getQuorumKeys().second.size()}; needPrint = unlSize > 0 && calculatePercent(vals.size(), unlSize) >= reportingPercent && calculatePercent(higherVersionCount, rippledCount) >= cutoffPercent; @@ -1054,7 +1055,7 @@ LedgerMaster::consensusBuilt( if (ledger->header().seq <= mValidLedgerSeq) { - auto stream = app_.journal("LedgerConsensus").info(); + auto stream = app_.getJournal("LedgerConsensus").info(); JLOG(stream) << "Consensus built old ledger: " << ledger->header().seq << " <= " << mValidLedgerSeq; return; @@ -1065,7 +1066,7 @@ LedgerMaster::consensusBuilt( if (ledger->header().seq <= mValidLedgerSeq) { - auto stream = app_.journal("LedgerConsensus").debug(); + auto stream = app_.getJournal("LedgerConsensus").debug(); JLOG(stream) << "Consensus ledger fully validated"; return; } @@ -1073,7 +1074,8 @@ LedgerMaster::consensusBuilt( // This ledger cannot be the new fully-validated ledger, but // maybe we saved up validations for some other ledger that can be - auto validations = app_.validators().negativeUNLFilter(app_.getValidations().currentTrusted()); + auto validations = + app_.getValidators().negativeUNLFilter(app_.getValidations().currentTrusted()); // Track validation counts with sequence numbers class valSeq @@ -1130,7 +1132,7 @@ LedgerMaster::consensusBuilt( if (maxSeq > mValidLedgerSeq) { - auto stream = app_.journal("LedgerConsensus").debug(); + auto stream = app_.getJournal("LedgerConsensus").debug(); JLOG(stream) << "Consensus triggered check of ledger"; checkAccept(maxLedger, maxSeq); } @@ -1199,9 +1201,9 @@ LedgerMaster::findNewLedgersToPublish(std::unique_lock& sl auto pubSeq = mPubLedgerSeq + 1; // Next sequence to publish auto valLedger = mValidLedger.get(); - std::uint32_t valSeq = valLedger->header().seq; + std::uint32_t const valSeq = valLedger->header().seq; - scope_unlock sul{sl}; + scope_unlock const sul{sl}; try { for (std::uint32_t seq = pubSeq; seq <= valSeq; ++seq) @@ -1301,7 +1303,7 @@ LedgerMaster::findNewLedgersToPublish(std::unique_lock& sl void LedgerMaster::tryAdvance() { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); // Can't advance without at least one fully-valid ledger mAdvanceWork = true; @@ -1336,7 +1338,7 @@ void LedgerMaster::updatePaths() { { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (app_.getOPs().isNeedNetworkLedger()) { --mPathFindThread; @@ -1351,7 +1353,7 @@ LedgerMaster::updatePaths() JLOG(m_journal.debug()) << "updatePaths running"; std::shared_ptr lastLedger; { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (!mValidLedger.empty() && (!mPathLedger || (mPathLedger->header().seq != mValidLedgerSeq))) @@ -1361,7 +1363,7 @@ LedgerMaster::updatePaths() } else if (mPathFindNewRequest) { // We have a new request but no new ledger - lastLedger = app_.openLedger().current(); + lastLedger = app_.getOpenLedger().current(); } else { // Nothing to do @@ -1375,12 +1377,12 @@ LedgerMaster::updatePaths() if (!standalone_) { // don't pathfind with a ledger that's more than 60 seconds old using namespace std::chrono; - auto age = time_point_cast(app_.timeKeeper().closeTime()) - + auto age = time_point_cast(app_.getTimeKeeper().closeTime()) - lastLedger->header().closeTime; if (age > 1min) { JLOG(m_journal.debug()) << "Published ledger too old for updating paths"; - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); --mPathFindThread; mPathLedger.reset(); return; @@ -1389,9 +1391,9 @@ LedgerMaster::updatePaths() try { - auto& pathRequests = app_.getPathRequests(); + auto& pathRequests = app_.getPathRequestManager(); { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (!pathRequests.requestsPending()) { --mPathFindThread; @@ -1405,7 +1407,7 @@ LedgerMaster::updatePaths() JLOG(m_journal.debug()) << "Updating paths"; pathRequests.updateAll(lastLedger); - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); if (!pathRequests.requestsPending()) { JLOG(m_journal.debug()) << "No path requests left. No need for further updating " @@ -1449,7 +1451,7 @@ LedgerMaster::newPathRequest() bool LedgerMaster::isNewPathRequest() { - std::lock_guard ml(m_mutex); + std::lock_guard const ml(m_mutex); bool const ret = mPathFindNewRequest; mPathFindNewRequest = false; return ret; @@ -1471,7 +1473,7 @@ LedgerMaster::newOrderBookDB() bool LedgerMaster::newPFWork(char const* name, std::unique_lock&) { - if (!app_.isStopping() && mPathFindThread < 2 && app_.getPathRequests().requestsPending()) + if (!app_.isStopping() && mPathFindThread < 2 && app_.getPathRequestManager().requestsPending()) { JLOG(m_journal.debug()) << "newPFWork: Creating job. path find threads: " << mPathFindThread; @@ -1495,7 +1497,7 @@ LedgerMaster::peekMutex() std::shared_ptr LedgerMaster::getCurrentLedger() { - return app_.openLedger().current(); + return app_.getOpenLedger().current(); } std::shared_ptr @@ -1522,21 +1524,21 @@ LedgerMaster::getValidatedRules() std::shared_ptr LedgerMaster::getPublishedLedger() { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); return mPubLedger; } std::string LedgerMaster::getCompleteLedgers() { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); return to_string(mCompleteLedgers); } std::optional LedgerMaster::getCloseTimeBySeq(LedgerIndex ledgerIndex) { - uint256 hash = getHashBySeq(ledgerIndex); + uint256 const hash = getHashBySeq(ledgerIndex); return hash.isNonZero() ? getCloseTimeByHash(hash, ledgerIndex) : std::nullopt; } @@ -1600,7 +1602,7 @@ LedgerMaster::walkHashBySeq( // The hash is not in the reference ledger. Get another ledger which can // be located easily and should contain the hash. - LedgerIndex refIndex = getCandidateLedger(index); + LedgerIndex const refIndex = getCandidateLedger(index); auto const refHash = hashOfSeq(*referenceLedger, refIndex, m_journal); XRPL_ASSERT(refHash, "xrpl::LedgerMaster::walkHashBySeq : found ledger"); if (refHash) @@ -1688,7 +1690,7 @@ LedgerMaster::getLedgerByHash(uint256 const& hash) void LedgerMaster::setLedgerRangePresent(std::uint32_t minV, std::uint32_t maxV) { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); mCompleteLedgers.insert(range(minV, maxV)); } @@ -1708,7 +1710,7 @@ LedgerMaster::getCacheHitRate() void LedgerMaster::clearPriorLedgers(LedgerIndex seq) { - std::lock_guard sl(mCompleteLock); + std::lock_guard const sl(mCompleteLock); if (seq > 0) mCompleteLedgers.erase(range(0u, seq - 1)); } @@ -1738,7 +1740,7 @@ LedgerMaster::fetchForHistory( InboundLedger::Reason reason, std::unique_lock& sl) { - scope_unlock sul{sl}; + scope_unlock const sul{sl}; if (auto hash = getLedgerHashForHistory(missing, reason)) { XRPL_ASSERT(hash->isNonZero(), "xrpl::LedgerMaster::fetchForHistory : found ledger"); @@ -1769,7 +1771,7 @@ LedgerMaster::fetchForHistory( setFullLedger(ledger, false, false); int fillInProgress = 0; { - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); mHistLedger = ledger; fillInProgress = mFillInProgress; } @@ -1778,7 +1780,7 @@ LedgerMaster::fetchForHistory( { { // Previous ledger is in DB - std::lock_guard lock(m_mutex); + std::lock_guard const lock(m_mutex); mFillInProgress = seq; } app_.getJobQueue().addJob( @@ -1798,7 +1800,7 @@ LedgerMaster::fetchForHistory( { for (std::uint32_t i = 0; i < fetchSz; ++i) { - std::uint32_t seq = missing - i; + std::uint32_t const seq = missing - i; if (auto h = getLedgerHashForHistory(seq, reason)) { XRPL_ASSERT( @@ -1847,10 +1849,10 @@ LedgerMaster::doAdvance(std::unique_lock& sl) (app_.getNodeStore().getWriteLoad() < MAX_WRITE_LOAD_ACQUIRE)) { // We are in sync, so can acquire - InboundLedger::Reason reason = InboundLedger::Reason::HISTORY; + InboundLedger::Reason const reason = InboundLedger::Reason::HISTORY; std::optional missing; { - std::lock_guard sll(mCompleteLock); + std::lock_guard const sll(mCompleteLock); missing = prevMissing( mCompleteLedgers, mPubLedger->header().seq, @@ -1897,7 +1899,7 @@ LedgerMaster::doAdvance(std::unique_lock& sl) for (auto const& ledger : pubLedgers) { { - scope_unlock sul{sl}; + scope_unlock const sul{sl}; JLOG(m_journal.debug()) << "tryAdvance publishing seq " << ledger->header().seq; setFullLedger(ledger, true, true); } @@ -1905,7 +1907,7 @@ LedgerMaster::doAdvance(std::unique_lock& sl) setPubLedger(ledger); { - scope_unlock sul{sl}; + scope_unlock const sul{sl}; app_.getOPs().pubLedger(ledger); } } @@ -2086,7 +2088,7 @@ LedgerMaster::makeFetchPack( // the same process adding the previous ledger to the FetchPack. do { - std::uint32_t lSeq = want->header().seq; + std::uint32_t const lSeq = want->header().seq; { // Serialize the ledger header: diff --git a/src/xrpld/app/ledger/detail/LedgerPersistence.cpp b/src/xrpld/app/ledger/detail/LedgerPersistence.cpp new file mode 100644 index 0000000000..91de010f1d --- /dev/null +++ b/src/xrpld/app/ledger/detail/LedgerPersistence.cpp @@ -0,0 +1,172 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +static bool +saveValidatedLedger( + ServiceRegistry& registry, + std::shared_ptr const& ledger, + bool current) +{ + auto j = registry.getJournal("Ledger"); + auto seq = ledger->header().seq; + if (!registry.getPendingSaves().startWork(seq)) + { + // The save was completed synchronously + JLOG(j.debug()) << "Save aborted"; + return true; + } + + auto& db = registry.getRelationalDatabase(); + + auto const res = db.saveValidatedLedger(ledger, current); + + // Clients can now trust the database for + // information about this ledger sequence. + registry.getPendingSaves().finishWork(seq); + return res; +} + +bool +pendSaveValidated( + ServiceRegistry& registry, + std::shared_ptr const& ledger, + bool isSynchronous, + bool isCurrent) +{ + if (!registry.getHashRouter().setFlags(ledger->header().hash, HashRouterFlags::SAVED)) + { + // We have tried to save this ledger recently + auto stream = registry.getJournal("Ledger").debug(); + JLOG(stream) << "Double pend save for " << ledger->header().seq; + + if (!isSynchronous || !registry.getPendingSaves().pending(ledger->header().seq)) + { + // Either we don't need it to be finished + // or it is finished + return true; + } + } + + XRPL_ASSERT(ledger->isImmutable(), "xrpl::pendSaveValidated : immutable ledger"); + + if (!registry.getPendingSaves().shouldWork(ledger->header().seq, isSynchronous)) + { + auto stream = registry.getJournal("Ledger").debug(); + JLOG(stream) << "Pend save with seq in pending saves " << ledger->header().seq; + + return true; + } + + // See if we can use the JobQueue. + if (!isSynchronous && + registry.getJobQueue().addJob( + isCurrent ? jtPUBLEDGER : jtPUBOLDLEDGER, + "Pub" + std::to_string(ledger->seq()), + [®istry, ledger, isCurrent]() { saveValidatedLedger(registry, ledger, isCurrent); })) + { + return true; + } + + // The JobQueue won't do the Job. Do the save synchronously. + return saveValidatedLedger(registry, ledger, isCurrent); +} + +std::shared_ptr +loadLedgerHelper( + LedgerHeader const& info, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire) +{ + bool loaded = false; + auto ledger = std::make_shared( + info, + loaded, + acquire, + rules, + fees, + registry.getNodeFamily(), + registry.getJournal("Ledger")); + + if (!loaded) + ledger.reset(); + + return ledger; +} + +static void +finishLoadByIndexOrHash(std::shared_ptr const& ledger, beast::Journal j) +{ + if (!ledger) + return; + + XRPL_ASSERT( + ledger->header().seq < XRP_LEDGER_EARLIEST_FEES || ledger->read(keylet::fees()), + "xrpl::finishLoadByIndexOrHash : valid ledger fees"); + ledger->setImmutable(); + + JLOG(j.trace()) << "Loaded ledger: " << to_string(ledger->header().hash); + + ledger->setFull(); +} + +std::tuple, std::uint32_t, uint256> +getLatestLedger(Rules const& rules, Fees const& fees, ServiceRegistry& registry) +{ + std::optional const info = registry.getRelationalDatabase().getNewestLedgerInfo(); + if (!info) + return {std::shared_ptr(), {}, {}}; + return {loadLedgerHelper(*info, rules, fees, registry, true), info->seq, info->hash}; +} + +std::shared_ptr +loadByIndex( + std::uint32_t ledgerIndex, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire) +{ + if (std::optional info = + registry.getRelationalDatabase().getLedgerInfoByIndex(ledgerIndex)) + { + std::shared_ptr ledger = loadLedgerHelper(*info, rules, fees, registry, acquire); + finishLoadByIndexOrHash(ledger, registry.getJournal("Ledger")); + return ledger; + } + return {}; +} + +std::shared_ptr +loadByHash( + uint256 const& ledgerHash, + Rules const& rules, + Fees const& fees, + ServiceRegistry& registry, + bool acquire) +{ + if (std::optional info = + registry.getRelationalDatabase().getLedgerInfoByHash(ledgerHash)) + { + std::shared_ptr ledger = loadLedgerHelper(*info, rules, fees, registry, acquire); + finishLoadByIndexOrHash(ledger, registry.getJournal("Ledger")); + XRPL_ASSERT( + !ledger || ledger->header().hash == ledgerHash, + "xrpl::loadByHash : ledger hash match if loaded"); + return ledger; + } + return {}; +} + +} // namespace xrpl diff --git a/src/xrpld/app/ledger/detail/LedgerReplay.cpp b/src/xrpld/app/ledger/detail/LedgerReplay.cpp index d115402115..a02267e4a1 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplay.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplay.cpp @@ -1,6 +1,7 @@ -#include #include +#include + namespace xrpl { LedgerReplay::LedgerReplay( diff --git a/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp b/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp index 93cf0e5cce..93d7ac0d2f 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp @@ -10,7 +10,7 @@ namespace xrpl { LedgerReplayMsgHandler::LedgerReplayMsgHandler(Application& app, LedgerReplayer& replayer) - : app_(app), replayer_(replayer), journal_(app.journal("LedgerReplayMsgHandler")) + : app_(app), replayer_(replayer), journal_(app.getJournal("LedgerReplayMsgHandler")) { } @@ -82,7 +82,7 @@ bool LedgerReplayMsgHandler::processProofPathResponse( std::shared_ptr const& msg) { - protocol::TMProofPathResponse& reply = *msg; + protocol::TMProofPathResponse const& reply = *msg; if (reply.has_error() || !reply.has_key() || !reply.has_ledgerhash() || !reply.has_type() || !reply.has_ledgerheader() || reply.path_size() == 0) { @@ -98,7 +98,7 @@ LedgerReplayMsgHandler::processProofPathResponse( // deserialize the header auto info = deserializeHeader({reply.ledgerheader().data(), reply.ledgerheader().size()}); - uint256 replyHash(reply.ledgerhash()); + uint256 const replyHash(reply.ledgerhash()); if (calculateLedgerHash(info) != replyHash) { JLOG(journal_.debug()) << "Bad message: Hash mismatch"; @@ -106,7 +106,7 @@ LedgerReplayMsgHandler::processProofPathResponse( } info.hash = replyHash; - uint256 key(reply.key()); + uint256 const key(reply.key()); if (key != keylet::skip().key) { JLOG(journal_.debug()) << "Bad message: we only support the short skip list for now. " @@ -151,7 +151,7 @@ protocol::TMReplayDeltaResponse LedgerReplayMsgHandler::processReplayDeltaRequest( std::shared_ptr const& msg) { - protocol::TMReplayDeltaRequest& packet = *msg; + protocol::TMReplayDeltaRequest const& packet = *msg; protocol::TMReplayDeltaResponse reply; if (!packet.has_ledgerhash() || packet.ledgerhash().size() != uint256::size()) @@ -190,7 +190,7 @@ bool LedgerReplayMsgHandler::processReplayDeltaResponse( std::shared_ptr const& msg) { - protocol::TMReplayDeltaResponse& reply = *msg; + protocol::TMReplayDeltaResponse const& reply = *msg; if (reply.has_error() || !reply.has_ledgerheader()) { JLOG(journal_.debug()) << "Bad message: Error reply"; @@ -198,7 +198,7 @@ LedgerReplayMsgHandler::processReplayDeltaResponse( } auto info = deserializeHeader({reply.ledgerheader().data(), reply.ledgerheader().size()}); - uint256 replyHash(reply.ledgerhash()); + uint256 const replyHash(reply.ledgerhash()); if (calculateLedgerHash(info) != replyHash) { JLOG(journal_.debug()) << "Bad message: Hash mismatch"; @@ -217,7 +217,8 @@ LedgerReplayMsgHandler::processReplayDeltaResponse( // -- TxShaMapItem for building a ShaMap for verification // -- Tx // -- TxMetaData for Tx ordering - Serializer shaMapItemData(reply.transaction(i).data(), reply.transaction(i).size()); + Serializer const shaMapItemData( + reply.transaction(i).data(), reply.transaction(i).size()); SerialIter txMetaSit(makeSlice(reply.transaction(i))); SerialIter txSit(txMetaSit.getSlice(txMetaSit.getVLDataLength())); diff --git a/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp b/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp index b878c840dd..f393c7fca8 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp @@ -73,7 +73,7 @@ LedgerReplayTask::LedgerReplayTask( parameter.finishHash_, LedgerReplayParameters::TASK_TIMEOUT, {jtREPLAY_TASK, "LedReplTask", LedgerReplayParameters::MAX_QUEUED_TASKS}, - app.journal("LedgerReplayTask")) + app.getJournal("LedgerReplayTask")) , inboundLedgers_(inboundLedgers) , replayer_(replayer) , parameter_(parameter) @@ -96,7 +96,7 @@ LedgerReplayTask::init() { JLOG(journal_.debug()) << "Task start " << hash_; - std::weak_ptr wptr = shared_from_this(); + std::weak_ptr const wptr = shared_from_this(); skipListAcquirer_->addDataCallback([wptr](bool good, uint256 const& hash) { if (auto sptr = wptr.lock(); sptr) { @@ -163,7 +163,8 @@ LedgerReplayTask::tryAdvance(ScopedLockType& sl) << ", deltaIndex=" << deltaToBuild_ << ", totalDeltas=" << deltas_.size() << ", parent " << (parent_ ? parent_->header().hash : uint256()); - bool shouldTry = parent_ && parameter_.full_ && parameter_.totalLedgers_ - 1 == deltas_.size(); + bool const shouldTry = + parent_ && parameter_.full_ && parameter_.totalLedgers_ - 1 == deltas_.size(); if (!shouldTry) return; @@ -204,7 +205,7 @@ LedgerReplayTask::updateSkipList( std::vector const& sList) { { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); if (isDone()) return; if (!parameter_.update(hash, seq, sList)) @@ -245,7 +246,7 @@ LedgerReplayTask::pmDowncast() void LedgerReplayTask::addDelta(std::shared_ptr const& delta) { - std::weak_ptr wptr = shared_from_this(); + std::weak_ptr const wptr = shared_from_this(); delta->addDataCallback(parameter_.reason_, [wptr](bool good, uint256 const& hash) { if (auto sptr = wptr.lock(); sptr) { @@ -260,7 +261,7 @@ LedgerReplayTask::addDelta(std::shared_ptr const& delta) } }); - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); if (!isDone()) { JLOG(journal_.trace()) << "addDelta task " << hash_ << " deltaIndex=" << deltaToBuild_ @@ -276,7 +277,7 @@ LedgerReplayTask::addDelta(std::shared_ptr const& delta) bool LedgerReplayTask::finished() const { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); return isDone(); } diff --git a/src/xrpld/app/ledger/detail/LedgerReplayer.cpp b/src/xrpld/app/ledger/detail/LedgerReplayer.cpp index 553ff91174..ae3552f258 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayer.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayer.cpp @@ -11,13 +11,13 @@ LedgerReplayer::LedgerReplayer( : app_(app) , inboundLedgers_(inboundLedgers) , peerSetBuilder_(std::move(peerSetBuilder)) - , j_(app.journal("LedgerReplayer")) + , j_(app.getJournal("LedgerReplayer")) { } LedgerReplayer::~LedgerReplayer() { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); tasks_.clear(); } @@ -32,13 +32,14 @@ LedgerReplayer::replay( totalNumLedgers <= LedgerReplayParameters::MAX_TASK_SIZE, "xrpl::LedgerReplayer::replay : valid inputs"); + // NOLINTNEXTLINE(misc-const-correctness) LedgerReplayTask::TaskParameter parameter(r, finishLedgerHash, totalNumLedgers); std::shared_ptr task; std::shared_ptr skipList; bool newSkipList = false; { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); if (app_.isStopping()) return; if (tasks_.size() >= LedgerReplayParameters::MAX_TASKS) @@ -117,7 +118,7 @@ LedgerReplayer::createDeltas(std::shared_ptr task) std::shared_ptr delta; bool newDelta = false; { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); if (app_.isStopping()) return; auto i = deltas_.find(*skipListItem); @@ -147,7 +148,7 @@ LedgerReplayer::gotSkipList( { std::shared_ptr skipList = {}; { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); auto i = skipLists_.find(info.hash); if (i == skipLists_.end()) return; @@ -170,7 +171,7 @@ LedgerReplayer::gotReplayDelta( { std::shared_ptr delta = {}; { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); auto i = deltas_.find(info.hash); if (i == deltas_.end()) return; @@ -191,7 +192,7 @@ LedgerReplayer::sweep() { auto const start = std::chrono::steady_clock::now(); { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); JLOG(j_.debug()) << "Sweeping, LedgerReplayer has " << tasks_.size() << " tasks, " << skipLists_.size() << " skipLists, and " << deltas_.size() << " deltas."; @@ -237,7 +238,7 @@ LedgerReplayer::stop() { JLOG(j_.info()) << "Stopping..."; { - std::lock_guard lock(mtx_); + std::lock_guard const lock(mtx_); std::for_each(tasks_.begin(), tasks_.end(), [](auto& i) { i->cancel(); }); tasks_.clear(); auto lockAndCancel = [](auto& i) { diff --git a/src/xrpld/app/ledger/detail/LedgerToJson.cpp b/src/xrpld/app/ledger/detail/LedgerToJson.cpp index ff8e7e55e9..a48756f9b6 100644 --- a/src/xrpld/app/ledger/detail/LedgerToJson.cpp +++ b/src/xrpld/app/ledger/detail/LedgerToJson.cpp @@ -18,19 +18,19 @@ namespace { bool isFull(LedgerFill const& fill) { - return fill.options & LedgerFill::full; + return (fill.options & LedgerFill::full) != 0; } bool isExpanded(LedgerFill const& fill) { - return isFull(fill) || (fill.options & LedgerFill::expand); + return isFull(fill) || ((fill.options & LedgerFill::expand) != 0); } bool isBinary(LedgerFill const& fill) { - return fill.options & LedgerFill::binary; + return (fill.options & LedgerFill::binary) != 0; } void @@ -173,7 +173,7 @@ fillJsonTx( } } - if ((fill.options & LedgerFill::ownerFunds) && txn->getTxnType() == ttOFFER_CREATE) + if (((fill.options & LedgerFill::ownerFunds) != 0) && txn->getTxnType() == ttOFFER_CREATE) { auto const account = txn->getAccountID(sfAccount); auto const amount = txn->getFieldAmount(sfTakerGets); @@ -216,7 +216,7 @@ fillJsonTx(Json::Value& json, LedgerFill const& fill) catch (std::exception const& ex) { // Nothing the user can do about this. - if (fill.context) + if (fill.context != nullptr) { JLOG(fill.context->j.error()) << "Exception in " << __func__ << ": " << ex.what(); } @@ -304,13 +304,14 @@ fillJson(Json::Value& json, LedgerFill const& fill) !fill.ledger.open(), fill.ledger.header(), bFull, - (fill.context ? fill.context->apiVersion : RPC::apiMaximumSupportedVersion)); + ((fill.context != nullptr) ? fill.context->apiVersion + : RPC::apiMaximumSupportedVersion)); } - if (bFull || fill.options & LedgerFill::dumpTxrp) + if (bFull || ((fill.options & LedgerFill::dumpTxrp) != 0)) fillJsonTx(json, fill); - if (bFull || fill.options & LedgerFill::dumpState) + if (bFull || ((fill.options & LedgerFill::dumpState) != 0)) fillJsonState(json, fill); } @@ -322,7 +323,7 @@ addJson(Json::Value& json, LedgerFill const& fill) auto& object = json[jss::ledger] = Json::objectValue; fillJson(object, fill); - if ((fill.options & LedgerFill::dumpQueue) && !fill.txQueue.empty()) + if (((fill.options & LedgerFill::dumpQueue) != 0) && !fill.txQueue.empty()) fillJsonQueue(json, fill); } diff --git a/src/xrpld/app/ledger/detail/LocalTxs.cpp b/src/xrpld/app/ledger/detail/LocalTxs.cpp index 8eb821a6c9..38969a092c 100644 --- a/src/xrpld/app/ledger/detail/LocalTxs.cpp +++ b/src/xrpld/app/ledger/detail/LocalTxs.cpp @@ -1,6 +1,6 @@ -#include #include +#include #include /* @@ -94,7 +94,7 @@ public: void push_back(LedgerIndex index, std::shared_ptr const& txn) override { - std::lock_guard lock(m_lock); + std::lock_guard const lock(m_lock); m_txns.emplace_back(index, txn); } @@ -107,7 +107,7 @@ public: // Get the set of local transactions as a canonical // set (so they apply in a valid order) { - std::lock_guard lock(m_lock); + std::lock_guard const lock(m_lock); for (auto const& it : m_txns) tset.insert(it.getTX()); @@ -121,7 +121,7 @@ public: void sweep(ReadView const& view) override { - std::lock_guard lock(m_lock); + std::lock_guard const lock(m_lock); m_txns.remove_if([&view](auto const& txn) { if (txn.isExpired(view.header().seq)) @@ -158,7 +158,7 @@ public: std::size_t size() override { - std::lock_guard lock(m_lock); + std::lock_guard const lock(m_lock); return m_txns.size(); } diff --git a/src/xrpld/app/ledger/detail/OpenLedger.cpp b/src/xrpld/app/ledger/detail/OpenLedger.cpp index a26751bc64..dfce2278a5 100644 --- a/src/xrpld/app/ledger/detail/OpenLedger.cpp +++ b/src/xrpld/app/ledger/detail/OpenLedger.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -24,26 +25,26 @@ OpenLedger::OpenLedger( bool OpenLedger::empty() const { - std::lock_guard lock(modify_mutex_); + std::lock_guard const lock(modify_mutex_); return current_->txCount() == 0; } std::shared_ptr OpenLedger::current() const { - std::lock_guard lock(current_mutex_); + std::lock_guard const lock(current_mutex_); return current_; } bool OpenLedger::modify(modify_type const& f) { - std::lock_guard lock1(modify_mutex_); + std::lock_guard const lock1(modify_mutex_); auto next = std::make_shared(*current_); auto const changed = f(*next, j_); if (changed) { - std::lock_guard lock2(current_mutex_); + std::lock_guard const lock2(current_mutex_); current_ = std::move(next); } return changed; @@ -72,7 +73,7 @@ OpenLedger::accept( // Block calls to modify, otherwise // new tx going into the open ledger // would get lost. - std::lock_guard lock1(modify_mutex_); + std::lock_guard const lock1(modify_mutex_); // Apply tx from the current open view if (!current_->txs.empty()) { @@ -124,13 +125,13 @@ OpenLedger::accept( tx->add(s); msg.set_rawtransaction(s.data(), s.size()); msg.set_status(protocol::tsNEW); - msg.set_receivetimestamp(app.timeKeeper().now().time_since_epoch().count()); - app.overlay().relay(txId, msg, *toSkip); + msg.set_receivetimestamp(app.getTimeKeeper().now().time_since_epoch().count()); + app.getOverlay().relay(txId, msg, *toSkip); } } // Switch to the new open view - std::lock_guard lock2(current_mutex_); + std::lock_guard const lock2(current_mutex_); current_ = std::move(next); } diff --git a/src/xrpld/app/ledger/detail/SkipListAcquire.cpp b/src/xrpld/app/ledger/detail/SkipListAcquire.cpp index 2191ef965a..20d63bcb64 100644 --- a/src/xrpld/app/ledger/detail/SkipListAcquire.cpp +++ b/src/xrpld/app/ledger/detail/SkipListAcquire.cpp @@ -16,7 +16,7 @@ SkipListAcquire::SkipListAcquire( ledgerHash, LedgerReplayParameters::SUB_TASK_TIMEOUT, {jtREPLAY_TASK, "SkipListAcq", LedgerReplayParameters::MAX_QUEUED_TASKS}, - app.journal("LedgerReplaySkipList")) + app.getJournal("LedgerReplaySkipList")) , inboundLedgers_(inboundLedgers) , peerSet_(std::move(peerSet)) { @@ -151,7 +151,7 @@ SkipListAcquire::addDataCallback(OnSkipListDataCB&& cb) std::shared_ptr SkipListAcquire::getData() const { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); return data_; } diff --git a/src/xrpld/app/ledger/detail/SkipListAcquire.h b/src/xrpld/app/ledger/detail/SkipListAcquire.h index 5a79e8ae5c..da62578d41 100644 --- a/src/xrpld/app/ledger/detail/SkipListAcquire.h +++ b/src/xrpld/app/ledger/detail/SkipListAcquire.h @@ -1,10 +1,10 @@ #pragma once #include -#include #include #include +#include #include namespace xrpl { diff --git a/src/xrpld/app/ledger/detail/TimeoutCounter.cpp b/src/xrpld/app/ledger/detail/TimeoutCounter.cpp index e2d4409717..216771e60d 100644 --- a/src/xrpld/app/ledger/detail/TimeoutCounter.cpp +++ b/src/xrpld/app/ledger/detail/TimeoutCounter.cpp @@ -15,10 +15,6 @@ TimeoutCounter::TimeoutCounter( : app_(app) , journal_(journal) , hash_(hash) - , timeouts_(0) - , complete_(false) - , failed_(false) - , progress_(false) , timerInterval_(interval) , queueJobParameter_(std::move(jobParameter)) , timer_(app_.getIOContext()) @@ -96,7 +92,7 @@ TimeoutCounter::invokeOnTimer() void TimeoutCounter::cancel() { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); if (!isDone()) { failed_ = true; diff --git a/src/xrpld/app/ledger/detail/TimeoutCounter.h b/src/xrpld/app/ledger/detail/TimeoutCounter.h index 5f5ccb2f43..a7e4c043be 100644 --- a/src/xrpld/app/ledger/detail/TimeoutCounter.h +++ b/src/xrpld/app/ledger/detail/TimeoutCounter.h @@ -59,6 +59,8 @@ public: virtual void cancel(); + virtual ~TimeoutCounter() = default; + protected: using ScopedLockType = std::unique_lock; @@ -76,8 +78,6 @@ protected: QueueJobParameter&& jobParameter, beast::Journal journal); - virtual ~TimeoutCounter() = default; - /** Schedule a call to queueJob() after mTimerInterval. */ void setTimer(ScopedLockType&); @@ -109,11 +109,11 @@ protected: /** The hash of the object (in practice, always a ledger) we are trying to * fetch. */ uint256 const hash_; - int timeouts_; - bool complete_; - bool failed_; + int timeouts_{0}; + bool complete_{false}; + bool failed_{false}; /** Whether forward progress has been made. */ - bool progress_; + bool progress_{false}; /** The minimum time to wait between calls to execute(). */ std::chrono::milliseconds timerInterval_; diff --git a/src/xrpld/app/ledger/detail/TransactionAcquire.cpp b/src/xrpld/app/ledger/detail/TransactionAcquire.cpp index 18c5066064..d2561718a3 100644 --- a/src/xrpld/app/ledger/detail/TransactionAcquire.cpp +++ b/src/xrpld/app/ledger/detail/TransactionAcquire.cpp @@ -30,8 +30,7 @@ TransactionAcquire::TransactionAcquire( hash, TX_ACQUIRE_TIMEOUT, {jtTXN_DATA, "TxAcq", {}}, - app.journal("TransactionAcquire")) - , mHaveRoot(false) + app.getJournal("TransactionAcquire")) , mPeerSet(std::move(peerSet)) { mMap = std::make_shared(SHAMapType::TRANSACTION, hash, app_.getNodeFamily()); @@ -162,7 +161,7 @@ TransactionAcquire::takeNodes( std::vector> const& data, std::shared_ptr const& peer) { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); if (complete_) { @@ -241,7 +240,7 @@ TransactionAcquire::init(int numPeers) void TransactionAcquire::stillNeed() { - ScopedLockType sl(mtx_); + ScopedLockType const sl(mtx_); timeouts_ = std::min(timeouts_, NORM_TIMEOUTS); failed_ = false; diff --git a/src/xrpld/app/ledger/detail/TransactionAcquire.h b/src/xrpld/app/ledger/detail/TransactionAcquire.h index a39f6a2f35..f29a01fca4 100644 --- a/src/xrpld/app/ledger/detail/TransactionAcquire.h +++ b/src/xrpld/app/ledger/detail/TransactionAcquire.h @@ -31,7 +31,7 @@ public: private: std::shared_ptr mMap; - bool mHaveRoot; + bool mHaveRoot{false}; std::unique_ptr mPeerSet; void diff --git a/src/xrpld/app/ledger/detail/TransactionMaster.cpp b/src/xrpld/app/ledger/detail/TransactionMaster.cpp index b45dbd5ba9..4be3c95993 100644 --- a/src/xrpld/app/ledger/detail/TransactionMaster.cpp +++ b/src/xrpld/app/ledger/detail/TransactionMaster.cpp @@ -15,7 +15,7 @@ TransactionMaster::TransactionMaster(Application& app) 65536, std::chrono::minutes{30}, stopwatch(), - mApp.journal("TaggedCache")) + mApp.getJournal("TaggedCache")) { } @@ -110,7 +110,7 @@ TransactionMaster::fetch( } else { - if (uCommitLedger) + if (uCommitLedger != 0u) iTx->setStatus(COMMITTED, uCommitLedger); txn = iTx->getSTransaction(); diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index 048ef0d9b4..6d02ea38ae 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -3,11 +3,11 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -21,13 +21,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include #include @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -170,7 +171,7 @@ public: std::unique_ptr m_nodeStore; NodeFamily nodeFamily_; std::unique_ptr m_orderBookDB; - std::unique_ptr m_pathRequests; + std::unique_ptr m_pathRequestManager; std::unique_ptr m_ledgerMaster; std::unique_ptr ledgerCleaner_; std::unique_ptr m_inboundLedgers; @@ -330,8 +331,8 @@ public: , m_orderBookDB(make_OrderBookDB(*this, {config_->PATH_SEARCH_MAX, config_->standalone()})) - , m_pathRequests( - std::make_unique( + , m_pathRequestManager( + std::make_unique( *this, logs_->journal("PathRequest"), m_collectorManager->collector())) @@ -488,7 +489,7 @@ public: } Logs& - logs() override + getLogs() override { return *logs_; } @@ -512,7 +513,7 @@ public: } TimeKeeper& - timeKeeper() override + getTimeKeeper() override { return *timeKeeper_; } @@ -660,14 +661,14 @@ public: return *m_orderBookDB; } - PathRequests& - getPathRequests() override + PathRequestManager& + getPathRequestManager() override { - return *m_pathRequests; + return *m_pathRequestManager; } CachedSLEs& - cachedSLEs() override + getCachedSLEs() override { return cachedSLEs_; } @@ -703,37 +704,37 @@ public: } ValidatorList& - validators() override + getValidators() override { return *validators_; } ValidatorSite& - validatorSites() override + getValidatorSites() override { return *validatorSites_; } ManifestCache& - validatorManifests() override + getValidatorManifests() override { return *validatorManifests_; } ManifestCache& - publisherManifests() override + getPublisherManifests() override { return *publisherManifests_; } Cluster& - cluster() override + getCluster() override { return *cluster_; } PeerReservationTable& - peerReservations() override + getPeerReservations() override { return *peerReservations_; } @@ -745,25 +746,25 @@ public: } PendingSaves& - pendingSaves() override + getPendingSaves() override { return pendingSaves_; } OpenLedger& - openLedger() override + getOpenLedger() override { return *openLedger_; } OpenLedger const& - openLedger() const override + getOpenLedger() const override { return *openLedger_; } Overlay& - overlay() override + getOverlay() override { XRPL_ASSERT(overlay_, "xrpl::ApplicationImp::overlay : non-null overlay"); return *overlay_; @@ -781,8 +782,7 @@ public: { XRPL_ASSERT( relationalDatabase_, - "xrpl::ApplicationImp::getRelationalDatabase : non-null " - "relational database"); + "xrpl::ApplicationImp::getRelationalDatabase : non-null relational database"); return *relationalDatabase_; } @@ -797,7 +797,7 @@ public: serverOkay(std::string& reason) override; beast::Journal - journal(std::string const& name) override; + getJournal(std::string const& name) override; //-------------------------------------------------------------------------- @@ -1073,7 +1073,7 @@ public: } virtual std::optional const& - trapTxID() const override + getTrapTxID() const override { return trapTxID_; } @@ -1109,7 +1109,7 @@ private: setMaxDisallowedLedger(); Application& - app() override + getApp() override { return *this; } @@ -1213,22 +1213,22 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) auto const startUp = config_->START_UP; JLOG(m_journal.debug()) << "startUp: " << startUp; - if (startUp == StartUpType::FRESH) + if (startUp == StartUpType::Fresh) { JLOG(m_journal.info()) << "Starting new Ledger"; startGenesisLedger(); } else if ( - startUp == StartUpType::LOAD || startUp == StartUpType::LOAD_FILE || - startUp == StartUpType::REPLAY) + startUp == StartUpType::Load || startUp == StartUpType::LoadFile || + startUp == StartUpType::Replay) { JLOG(m_journal.info()) << "Loading specified Ledger"; if (!loadOldLedger( config_->START_LEDGER, - startUp == StartUpType::REPLAY, - startUp == StartUpType::LOAD_FILE, + startUp == StartUpType::Replay, + startUp == StartUpType::LoadFile, config_->TRAP_TX_HASH)) { JLOG(m_journal.error()) << "The specified ledger could not be loaded."; @@ -1244,7 +1244,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) } } } - else if (startUp == StartUpType::NETWORK) + else if (startUp == StartUpType::Network) { // This should probably become the default once we have a stable // network. @@ -1411,7 +1411,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) // // Execute start up rpc commands. // - for (auto cmd : config_->section(SECTION_RPC_STARTUP).lines()) + for (auto const& cmd : config_->section(SECTION_RPC_STARTUP).lines()) { Json::Reader jrReader; Json::Value jvCommand; @@ -1430,7 +1430,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) Resource::Charge loadType = Resource::feeReferenceRPC; Resource::Consumer c; RPC::JsonContext context{ - {journal("RPCHandler"), + {getJournal("RPCHandler"), *this, loadType, getOPs(), @@ -1546,11 +1546,11 @@ ApplicationImp::run() // TODO Store manifests in manifests.sqlite instead of wallet.db validatorManifests_->save(getWalletDB(), "ValidatorManifests", [this](PublicKey const& pubKey) { - return validators().listed(pubKey); + return getValidators().listed(pubKey); }); publisherManifests_->save(getWalletDB(), "PublisherManifests", [this](PublicKey const& pubKey) { - return validators().trustedPublisher(pubKey); + return getValidators().trustedPublisher(pubKey); }); // The order of these stop calls is delicate. @@ -1635,15 +1635,19 @@ ApplicationImp::fdRequired() const void ApplicationImp::startGenesisLedger() { - std::vector const initialAmendments = (config_->START_UP == StartUpType::FRESH) + std::vector const initialAmendments = (config_->START_UP == StartUpType::Fresh) ? m_amendmentTable->getDesired() : std::vector{}; - std::shared_ptr const genesis = - std::make_shared(create_genesis, *config_, initialAmendments, nodeFamily_); + std::shared_ptr const genesis = std::make_shared( + create_genesis, + Rules{config_->features}, + config_->FEES.toFees(), + initialAmendments, + nodeFamily_); m_ledgerMaster->storeLedger(genesis); - auto const next = std::make_shared(*genesis, timeKeeper().closeTime()); + auto const next = std::make_shared(*genesis, getTimeKeeper().closeTime()); next->updateSkipList(); XRPL_ASSERT( next->header().seq < XRP_LEDGER_EARLIEST_FEES || next->read(keylet::fees()), @@ -1657,11 +1661,12 @@ ApplicationImp::startGenesisLedger() std::shared_ptr ApplicationImp::getLastFullLedger() { - auto j = journal("Ledger"); + auto j = getJournal("Ledger"); try { - auto const [ledger, seq, hash] = getLatestLedger(*this); + auto const [ledger, seq, hash] = + getLatestLedger(Rules{config_->features}, config_->FEES.toFees(), *this); if (!ledger) return ledger; @@ -1729,7 +1734,7 @@ ApplicationImp::loadLedgerFromFile(std::string const& name) ledger = ledger.get()["ledger"]; std::uint32_t seq = 1; - auto closeTime = timeKeeper().closeTime(); + auto closeTime = getTimeKeeper().closeTime(); using namespace std::chrono_literals; auto closeTimeResolution = 30s; bool closeTimeEstimated = false; @@ -1772,7 +1777,8 @@ ApplicationImp::loadLedgerFromFile(std::string const& name) return nullptr; } - auto loadLedger = std::make_shared(seq, closeTime, *config_, nodeFamily_); + auto loadLedger = std::make_shared( + seq, closeTime, Rules{config_->features}, config_->FEES.toFees(), nodeFamily_); loadLedger->setTotalDrops(totalDrops); for (Json::UInt index = 0; index < ledger.get().size(); ++index) @@ -1805,7 +1811,7 @@ ApplicationImp::loadLedgerFromFile(std::string const& name) // VFALCO TODO This is the only place that // constructor is used, try to remove it - STLedgerEntry sle(*stp.object, uIndex); + STLedgerEntry const sle(*stp.object, uIndex); if (!loadLedger->addSLE(sle)) { @@ -1852,7 +1858,8 @@ ApplicationImp::loadOldLedger( if (hash.parseHex(ledgerID)) { - loadLedger = loadByHash(hash, *this); + loadLedger = + loadByHash(hash, Rules{config_->features}, config_->FEES.toFees(), *this); if (!loadLedger) { @@ -1879,7 +1886,10 @@ ApplicationImp::loadOldLedger( std::uint32_t index = 0; if (beast::lexicalCastChecked(index, ledgerID)) - loadLedger = loadByIndex(index, *this); + { + loadLedger = + loadByIndex(index, Rules{config_->features}, config_->FEES.toFees(), *this); + } } if (!loadLedger) @@ -1894,7 +1904,11 @@ ApplicationImp::loadOldLedger( JLOG(m_journal.info()) << "Loading parent ledger"; - loadLedger = loadByHash(replayLedger->header().parentHash, *this); + loadLedger = loadByHash( + replayLedger->header().parentHash, + Rules{config_->features}, + config_->FEES.toFees(), + *this); if (!loadLedger) { JLOG(m_journal.info()) << "Loading parent ledger from node store"; @@ -1952,7 +1966,7 @@ ApplicationImp::loadOldLedger( // LCOV_EXCL_STOP } - if (!loadLedger->walkLedger(journal("Ledger"), true)) + if (!loadLedger->walkLedger(getJournal("Ledger"), true)) { // LCOV_EXCL_START JLOG(m_journal.fatal()) << "Ledger is missing nodes."; @@ -1963,10 +1977,13 @@ ApplicationImp::loadOldLedger( // LCOV_EXCL_STOP } - if (!loadLedger->assertSensible(journal("Ledger"))) + if (!loadLedger->isSensible()) { // LCOV_EXCL_START - JLOG(m_journal.fatal()) << "Ledger is not sensible."; + Json::Value j = getJson({*loadLedger, {}}); + j[jss::accountTreeHash] = to_string(loadLedger->header().accountHash); + j[jss::transTreeHash] = to_string(loadLedger->header().txHash); + JLOG(m_journal.fatal()) << "Ledger is not sensible: " << j; UNREACHABLE( "xrpl::ApplicationImp::loadOldLedger : ledger is not " "sensible"); @@ -2081,7 +2098,7 @@ ApplicationImp::serverOkay(std::string& reason) } beast::Journal -ApplicationImp::journal(std::string const& name) +ApplicationImp::getJournal(std::string const& name) { return logs_->journal(name); } @@ -2127,7 +2144,7 @@ fixConfigPorts(Config& config, Endpoints const& endpoints) if (optPort) { std::uint16_t const port = beast::lexicalCast(*optPort); - if (!port) + if (port == 0u) section.set("port", std::to_string(ep.port())); } } diff --git a/src/xrpld/app/main/Application.h b/src/xrpld/app/main/Application.h index 0000ae010b..45bd94adce 100644 --- a/src/xrpld/app/main/Application.h +++ b/src/xrpld/app/main/Application.h @@ -18,16 +18,16 @@ namespace xrpl { namespace unl { class Manager; -} +} // namespace unl namespace Resource { class Manager; -} +} // namespace Resource namespace NodeStore { class Database; } // namespace NodeStore namespace perf { class PerfLog; -} +} // namespace perf // VFALCO TODO Fix forward declares required for header dependency loops class AmendmentTable; @@ -66,7 +66,7 @@ class NetworkOPs; class OpenLedger; class OrderBookDB; class Overlay; -class PathRequests; +class PathRequestManager; class PendingSaves; class PublicKey; class ServerHandler; diff --git a/src/xrpld/app/main/BasicApp.cpp b/src/xrpld/app/main/BasicApp.cpp index be0c158b85..2c5a2b0364 100644 --- a/src/xrpld/app/main/BasicApp.cpp +++ b/src/xrpld/app/main/BasicApp.cpp @@ -9,7 +9,7 @@ BasicApp::BasicApp(std::size_t numberOfThreads) work_.emplace(boost::asio::make_work_guard(io_context_)); threads_.reserve(numberOfThreads); - while (numberOfThreads--) + while ((numberOfThreads--) != 0u) { threads_.emplace_back([this, numberOfThreads]() { beast::setCurrentThreadName("io svc #" + std::to_string(numberOfThreads)); diff --git a/src/xrpld/app/main/GRPCServer.cpp b/src/xrpld/app/main/GRPCServer.cpp index a9810ae22b..a6c0c933be 100644 --- a/src/xrpld/app/main/GRPCServer.cpp +++ b/src/xrpld/app/main/GRPCServer.cpp @@ -16,8 +16,8 @@ getEndpoint(std::string const& peer) { try { - std::size_t first = peer.find_first_of(":"); - std::size_t last = peer.find_last_of(":"); + std::size_t const first = peer.find_first_of(':'); + std::size_t const last = peer.find_last_of(':'); std::string peerClean(peer); if (first != last) { @@ -56,7 +56,7 @@ GRPCServerImpl::CallData::CallData( , bindListener_(std::move(bindListener)) , handler_(std::move(handler)) , forward_(std::move(forward)) - , requiredCondition_(std::move(requiredCondition)) + , requiredCondition_(requiredCondition) , loadType_(std::move(loadType)) , secureGatewayIPs_(secureGatewayIPs) { @@ -88,7 +88,7 @@ GRPCServerImpl::CallData::process() // sanity check BOOST_ASSERT(!finished_); - std::shared_ptr> thisShared = this->shared_from_this(); + std::shared_ptr> const thisShared = this->shared_from_this(); // Need to set finished to true before processing the response, // because as soon as the response is posted to the completion @@ -107,7 +107,7 @@ GRPCServerImpl::CallData::process() // If coro is null, then the JobQueue has already been shutdown if (!coro) { - grpc::Status status{grpc::StatusCode::INTERNAL, "Job Queue is already stopped"}; + grpc::Status const status{grpc::StatusCode::INTERNAL, "Job Queue is already stopped"}; responder_.FinishWithError(status, this); } } @@ -119,10 +119,10 @@ GRPCServerImpl::CallData::process(std::shared_ptr::process(std::shared_ptr context{ - {app_.journal("gRPCServer"), + {app_.getJournal("gRPCServer"), app_, loadType, app_.getOPs(), @@ -162,12 +162,12 @@ GRPCServerImpl::CallData::process(std::shared_ptr::process(std::shared_ptr::getUsage() Throw("Failed to get client endpoint"); } -GRPCServerImpl::GRPCServerImpl(Application& app) : app_(app), journal_(app_.journal("gRPC Server")) +GRPCServerImpl::GRPCServerImpl(Application& app) + : app_(app), journal_(app_.getJournal("gRPC Server")) { // if present, get endpoint from config if (app_.config().exists(SECTION_PORT_GRPC)) @@ -301,7 +302,7 @@ GRPCServerImpl::GRPCServerImpl(Application& app) : app_(app), journal_(app_.jour return; try { - boost::asio::ip::tcp::endpoint endpoint( + boost::asio::ip::tcp::endpoint const endpoint( boost::asio::ip::make_address(*optIp), std::stoi(*optPort)); std::stringstream ss; diff --git a/src/xrpld/app/main/LoadManager.cpp b/src/xrpld/app/main/LoadManager.cpp index f0fc4085ac..47948a4031 100644 --- a/src/xrpld/app/main/LoadManager.cpp +++ b/src/xrpld/app/main/LoadManager.cpp @@ -35,7 +35,7 @@ LoadManager::~LoadManager() void LoadManager::activateStallDetector() { - std::lock_guard sl(mutex_); + std::lock_guard const sl(mutex_); armed_ = true; lastHeartbeat_ = std::chrono::steady_clock::now(); } @@ -44,7 +44,7 @@ void LoadManager::heartbeat() { auto const heartbeat = std::chrono::steady_clock::now(); - std::lock_guard sl(mutex_); + std::lock_guard const sl(mutex_); lastHeartbeat_ = heartbeat; } @@ -63,7 +63,7 @@ void LoadManager::stop() { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); stop_ = true; // There is at most one thread waiting on this condition. cv_.notify_all(); diff --git a/src/xrpld/app/main/Main.cpp b/src/xrpld/app/main/Main.cpp index 03f8076ed1..f3953823dd 100644 --- a/src/xrpld/app/main/Main.cpp +++ b/src/xrpld/app/main/Main.cpp @@ -215,7 +215,7 @@ public: namespace test { extern std::atomic envUseIPv4; -} +} // namespace test template static bool @@ -257,11 +257,11 @@ runUnitTests( if (!child && num_jobs == 1) { - multi_runner_parent parent_runner; + multi_runner_parent const parent_runner; multi_runner_child child_runner{num_jobs, quiet, log}; child_runner.arg(argument); - multi_selector pred(pattern); + multi_selector const pred(pattern); auto const any_failed = child_runner.run_multi(pred) || anyMissing(child_runner, pred); if (any_failed) @@ -282,6 +282,7 @@ runUnitTests( args.emplace_back("--unittest-child"); } + children.reserve(num_jobs); for (std::size_t i = 0; i < num_jobs; ++i) { children.emplace_back( @@ -295,7 +296,7 @@ runUnitTests( try { c.wait(); - if (c.exit_code()) + if (c.exit_code() != 0) ++bad_child_exits; } catch (...) @@ -309,7 +310,7 @@ runUnitTests( parent_runner.add_failures(terminated_child_exits); anyMissing(parent_runner, multi_selector(pattern)); - if (parent_runner.any_failed() || bad_child_exits) + if (parent_runner.any_failed() || (bad_child_exits != 0)) return EXIT_FAILURE; return EXIT_SUCCESS; } @@ -613,7 +614,7 @@ run(int argc, char** argv) if (vm.contains("start")) { - config->START_UP = StartUpType::FRESH; + config->START_UP = StartUpType::Fresh; } if (vm.contains("import")) @@ -624,7 +625,7 @@ run(int argc, char** argv) config->START_LEDGER = vm["ledger"].as(); if (vm.contains("replay")) { - config->START_UP = StartUpType::REPLAY; + config->START_UP = StartUpType::Replay; if (vm.contains("trap_tx_hash")) { uint256 tmp = {}; @@ -644,17 +645,17 @@ run(int argc, char** argv) } else { - config->START_UP = StartUpType::LOAD; + config->START_UP = StartUpType::Load; } } else if (vm.contains("ledgerfile")) { config->START_LEDGER = vm["ledgerfile"].as(); - config->START_UP = StartUpType::LOAD_FILE; + config->START_UP = StartUpType::LoadFile; } else if (vm.contains("load") || config->FAST_LOAD) { - config->START_UP = StartUpType::LOAD; + config->START_UP = StartUpType::Load; } if (vm.contains("trap_tx_hash") && !vm.contains("replay")) @@ -665,13 +666,13 @@ run(int argc, char** argv) if (vm.contains("net") && !config->FAST_LOAD) { - if ((config->START_UP == StartUpType::LOAD) || (config->START_UP == StartUpType::REPLAY)) + if ((config->START_UP == StartUpType::Load) || (config->START_UP == StartUpType::Replay)) { std::cerr << "Net and load/replay options are incompatible" << std::endl; return -1; } - config->START_UP = StartUpType::NETWORK; + config->START_UP = StartUpType::Network; } if (vm.contains("valid")) @@ -752,8 +753,6 @@ run(int argc, char** argv) // No arguments. Run server. if (!vm.contains("parameters")) { - // TODO: this comment can be removed in a future release - - // say 1.7 or higher if (config->had_trailing_comments()) { JLOG(logs->journal("Application").warn()) @@ -781,7 +780,7 @@ run(int argc, char** argv) // With our configuration parsed, ensure we have // enough file descriptors available: - if (!adjustDescriptorLimit(app->fdRequired(), app->logs().journal("Application"))) + if (!adjustDescriptorLimit(app->fdRequired(), app->getJournal("Application"))) return -1; // Start the server diff --git a/src/xrpld/app/misc/DeliverMax.h b/src/xrpld/app/misc/DeliverMax.h index 1b4241f091..7fec517d28 100644 --- a/src/xrpld/app/misc/DeliverMax.h +++ b/src/xrpld/app/misc/DeliverMax.h @@ -4,7 +4,7 @@ namespace Json { class Value; -} +} // namespace Json namespace xrpl { diff --git a/src/xrpld/app/misc/FeeVoteImpl.cpp b/src/xrpld/app/misc/FeeVoteImpl.cpp index eb0ce5617b..8014ea4eed 100644 --- a/src/xrpld/app/misc/FeeVoteImpl.cpp +++ b/src/xrpld/app/misc/FeeVoteImpl.cpp @@ -1,7 +1,8 @@ -#include #include +#include #include +#include #include #include @@ -305,7 +306,7 @@ FeeVoteImpl::doVoting( JLOG(journal_.warn()) << "We are voting for a fee change: " << baseFee.first << "/" << baseReserve.first << "/" << incReserve.first; - STTx feeTx(ttFEE, [=, &rules](auto& obj) { + STTx const feeTx(ttFEE, [=, &rules](auto& obj) { obj[sfAccount] = AccountID(); obj[sfLedgerSequence] = seq; if (rules.enabled(featureXRPFees)) @@ -323,7 +324,7 @@ FeeVoteImpl::doVoting( baseReserve.first.dropsAs(baseReserveVote.current()); obj[sfReserveIncrement] = incReserve.first.dropsAs(incReserveVote.current()); - obj[sfReferenceFeeUnits] = Config::FEE_UNITS_DEPRECATED; + obj[sfReferenceFeeUnits] = FEE_UNITS_DEPRECATED; } if (rules.enabled(featureSmartEscrow)) { @@ -333,7 +334,7 @@ FeeVoteImpl::doVoting( } }); - uint256 txID = feeTx.getTransactionID(); + uint256 const txID = feeTx.getTransactionID(); JLOG(journal_.warn()) << "Vote: " << txID; diff --git a/src/xrpld/app/misc/NegativeUNLVote.cpp b/src/xrpld/app/misc/NegativeUNLVote.cpp index 8f0ba5255a..212cfaa2e9 100644 --- a/src/xrpld/app/misc/NegativeUNLVote.cpp +++ b/src/xrpld/app/misc/NegativeUNLVote.cpp @@ -1,7 +1,7 @@ #include -#include #include +#include #include namespace xrpl { @@ -90,7 +90,7 @@ NegativeUNLVote::addTx( NegativeUNLModify modify, std::shared_ptr const& initialSet) { - STTx negUnlTx(ttUNL_MODIFY, [&](auto& obj) { + STTx const negUnlTx(ttUNL_MODIFY, [&](auto& obj) { obj.setFieldU8(sfUNLModifyDisabling, modify == ToDisable ? 1 : 0); obj.setFieldU32(sfLedgerSequence, seq); obj.setFieldVL(sfUNLModifyValidator, vp.slice()); @@ -118,7 +118,7 @@ NegativeUNLVote::choose(uint256 const& randomPadData, std::vector const& { XRPL_ASSERT(!candidates.empty(), "xrpl::NegativeUNLVote::choose : non-empty input"); static_assert(NodeID::bytes <= uint256::bytes); - NodeID randomPad = NodeID::fromVoid(randomPadData.data()); + NodeID const randomPad = NodeID::fromVoid(randomPadData.data()); NodeID txNodeID = candidates[0]; for (int j = 1; j < candidates.size(); ++j) { @@ -285,7 +285,7 @@ NegativeUNLVote::findAllCandidates( void NegativeUNLVote::newValidators(LedgerIndex seq, hash_set const& nowTrusted) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); for (auto const& n : nowTrusted) { if (!newValidators_.contains(n)) @@ -299,7 +299,7 @@ NegativeUNLVote::newValidators(LedgerIndex seq, hash_set const& nowTrust void NegativeUNLVote::purgeNewValidators(LedgerIndex seq) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto i = newValidators_.begin(); while (i != newValidators_.end()) { diff --git a/src/xrpld/app/misc/NegativeUNLVote.h b/src/xrpld/app/misc/NegativeUNLVote.h index 601ac7d060..2cc63cf8c5 100644 --- a/src/xrpld/app/misc/NegativeUNLVote.h +++ b/src/xrpld/app/misc/NegativeUNLVote.h @@ -1,8 +1,7 @@ #pragma once -#include - #include +#include #include #include #include @@ -140,7 +139,7 @@ private: * @param candidates the vector of candidates * @return the picked candidate */ - NodeID + static NodeID choose(uint256 const& randomPadData, std::vector const& candidates); /** diff --git a/src/xrpld/app/misc/NetworkOPs.cpp b/src/xrpld/app/misc/NetworkOPs.cpp index 29be555568..84ddb6b5f1 100644 --- a/src/xrpld/app/misc/NetworkOPs.cpp +++ b/src/xrpld/app/misc/NetworkOPs.cpp @@ -177,7 +177,7 @@ class NetworkOPsImp final : public NetworkOPs CounterData getCounterData() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return {counters_, mode_, start_, initialSyncUs_}; } }; @@ -189,7 +189,7 @@ class NetworkOPsImp final : public NetworkOPs ServerFeeSummary( XRPAmount fee, - TxQ::Metrics&& escalationMetrics, + TxQ::Metrics escalationMetrics, // trivially copyable LoadFeeTrack const& loadFeeTrack); bool operator!=(ServerFeeSummary const& b) const; @@ -216,27 +216,27 @@ public: JobQueue& job_queue, LedgerMaster& ledgerMaster, ValidatorKeys const& validatorKeys, - boost::asio::io_context& io_svc, + boost::asio::io_context& ioCtx, beast::Journal journal, beast::insight::Collector::ptr const& collector) : registry_(registry) , m_journal(journal) , m_localTX(make_LocalTxs()) , mMode(start_valid ? OperatingMode::FULL : OperatingMode::DISCONNECTED) - , heartbeatTimer_(io_svc) - , clusterTimer_(io_svc) - , accountHistoryTxTimer_(io_svc) + , heartbeatTimer_(ioCtx) + , clusterTimer_(ioCtx) + , accountHistoryTxTimer_(ioCtx) , mConsensus( - registry_.app(), + registry_.get().getApp(), make_FeeVote( - setup_FeeVote(registry_.app().config().section("voting")), - registry_.logs().journal("FeeVote")), + setup_FeeVote(registry_.get().getApp().config().section("voting")), + registry_.get().getJournal("FeeVote")), ledgerMaster, *m_localTX, registry.getInboundTransactions(), beast::get_abstract_clock(), validatorKeys, - registry_.logs().journal("LedgerConsensus")) + registry_.get().getJournal("LedgerConsensus")) , validatorPK_( validatorKeys.keys ? validatorKeys.keys->publicKey : decltype(validatorPK_){}) , validatorMasterPK_( @@ -690,7 +690,7 @@ private: void setAccountHistoryJobTimer(SubAccountHistoryInfoWeak subInfo); - ServiceRegistry& registry_; + std::reference_wrapper registry_; beast::Journal m_journal; std::unique_ptr m_localTX; @@ -877,7 +877,7 @@ NetworkOPsImp::getHostId(bool forAdmin) // For non-admin uses hash the node public key into a // single RFC1751 word: static std::string const shroudedHostId = [this]() { - auto const& id = registry_.app().nodeIdentity(); + auto const& id = registry_.get().getApp().nodeIdentity(); return RFC1751::getWordFromBlob(id.first.data(), id.first.size()); }(); @@ -891,7 +891,7 @@ NetworkOPsImp::setStateTimer() setHeartbeatTimer(); // Only do this work if a cluster is configured - if (registry_.cluster().size() != 0) + if (registry_.get().getCluster().size() != 0) setClusterTimer(); } @@ -969,13 +969,13 @@ NetworkOPsImp::processHeartbeatTimer() { RclConsensusLogger clog("Heartbeat Timer", mConsensus.validating(), m_journal); { - std::unique_lock lock{registry_.app().getMasterMutex()}; + std::unique_lock lock{registry_.get().getApp().getMasterMutex()}; // VFALCO NOTE This is for diagnosing a crash on exit - LoadManager& mgr(registry_.getLoadManager()); + LoadManager& mgr(registry_.get().getLoadManager()); mgr.heartbeat(); - std::size_t const numPeers = registry_.overlay().size(); + std::size_t const numPeers = registry_.get().getOverlay().size(); // do we have sufficient peers? If not, we are disconnected. if (numPeers < minPeerCount_) @@ -1031,7 +1031,7 @@ NetworkOPsImp::processHeartbeatTimer() CLOG(clog.ss()) << ". "; } - mConsensus.timerEntry(registry_.timeKeeper().closeTime(), clog.ss()); + mConsensus.timerEntry(registry_.get().getTimeKeeper().closeTime(), clog.ss()); CLOG(clog.ss()) << "consensus phase " << to_string(mLastConsensusPhase); ConsensusPhase const currPhase = mConsensus.phase(); @@ -1049,17 +1049,18 @@ NetworkOPsImp::processHeartbeatTimer() void NetworkOPsImp::processClusterTimer() { - if (registry_.cluster().size() == 0) + if (registry_.get().getCluster().size() == 0) return; using namespace std::chrono_literals; - bool const update = registry_.cluster().update( - registry_.app().nodeIdentity().first, + bool const update = registry_.get().getCluster().update( + registry_.get().getApp().nodeIdentity().first, "", - (m_ledgerMaster.getValidatedLedgerAge() <= 4min) ? registry_.getFeeTrack().getLocalFee() - : 0, - registry_.timeKeeper().now()); + (m_ledgerMaster.getValidatedLedgerAge() <= 4min) + ? registry_.get().getFeeTrack().getLocalFee() + : 0, + registry_.get().getTimeKeeper().now()); if (!update) { @@ -1069,7 +1070,7 @@ NetworkOPsImp::processClusterTimer() } protocol::TMCluster cluster; - registry_.cluster().for_each([&cluster](ClusterNode const& node) { + registry_.get().getCluster().for_each([&cluster](ClusterNode const& node) { protocol::TMClusterNode& n = *cluster.add_clusternodes(); n.set_publickey(toBase58(TokenType::NodePublic, node.identity())); n.set_reporttime(node.getReportTime().time_since_epoch().count()); @@ -1078,14 +1079,14 @@ NetworkOPsImp::processClusterTimer() n.set_nodename(node.name()); }); - Resource::Gossip gossip = registry_.getResourceManager().exportConsumers(); + Resource::Gossip const gossip = registry_.get().getResourceManager().exportConsumers(); for (auto& item : gossip.items) { protocol::TMLoadSource& node = *cluster.add_loadsources(); node.set_name(to_string(item.address)); node.set_cost(item.balance); } - registry_.overlay().foreach( + registry_.get().getOverlay().foreach( send_if(std::make_shared(cluster, protocol::mtCLUSTER), peer_in_cluster())); setClusterTimer(); } @@ -1131,7 +1132,7 @@ NetworkOPsImp::submitTransaction(std::shared_ptr const& iTrans) auto const trans = sterilize(*iTrans); auto const txid = trans->getTransactionID(); - auto const flags = registry_.getHashRouter().getFlags(txid); + auto const flags = registry_.get().getHashRouter().getFlags(txid); if ((flags & HashRouterFlags::BAD) != HashRouterFlags::UNDEFINED) { @@ -1141,8 +1142,8 @@ NetworkOPsImp::submitTransaction(std::shared_ptr const& iTrans) try { - auto const [validity, reason] = - checkValidity(registry_.getHashRouter(), *trans, m_ledgerMaster.getValidatedRules()); + auto const [validity, reason] = checkValidity( + registry_.get().getHashRouter(), *trans, m_ledgerMaster.getValidatedRules()); if (validity != Validity::Valid) { @@ -1159,7 +1160,7 @@ NetworkOPsImp::submitTransaction(std::shared_ptr const& iTrans) std::string reason; - auto tx = std::make_shared(trans, reason, registry_.app()); + auto tx = std::make_shared(trans, reason, registry_.get().getApp()); m_job_queue.addJob(jtTRANSACTION, "SubmitTxn", [this, tx]() { auto t = tx; @@ -1170,7 +1171,7 @@ NetworkOPsImp::submitTransaction(std::shared_ptr const& iTrans) bool NetworkOPsImp::preProcessTransaction(std::shared_ptr& transaction) { - auto const newFlags = registry_.getHashRouter().getFlags(transaction->getID()); + auto const newFlags = registry_.get().getHashRouter().getFlags(transaction->getID()); if ((newFlags & HashRouterFlags::BAD) != HashRouterFlags::UNDEFINED) { @@ -1191,14 +1192,15 @@ NetworkOPsImp::preProcessTransaction(std::shared_ptr& transaction) { transaction->setStatus(INVALID); transaction->setResult(temINVALID_FLAG); - registry_.getHashRouter().setFlags(transaction->getID(), HashRouterFlags::BAD); + registry_.get().getHashRouter().setFlags(transaction->getID(), HashRouterFlags::BAD); return false; } // NOTE ximinez - I think this check is redundant, // but I'm not 100% sure yet. // If so, only cost is looking up HashRouter flags. - auto const [validity, reason] = checkValidity(registry_.getHashRouter(), sttx, view->rules()); + auto const [validity, reason] = + checkValidity(registry_.get().getHashRouter(), sttx, view->rules()); XRPL_ASSERT( validity == Validity::Valid, "xrpl::NetworkOPsImp::processTransaction : valid validity"); @@ -1208,12 +1210,12 @@ NetworkOPsImp::preProcessTransaction(std::shared_ptr& transaction) JLOG(m_journal.info()) << "Transaction has bad signature: " << reason; transaction->setStatus(INVALID); transaction->setResult(temBAD_SIGNATURE); - registry_.getHashRouter().setFlags(transaction->getID(), HashRouterFlags::BAD); + registry_.get().getHashRouter().setFlags(transaction->getID(), HashRouterFlags::BAD); return false; } // canonicalize can change our pointer - registry_.getMasterTransaction().canonicalize(&transaction); + registry_.get().getMasterTransaction().canonicalize(&transaction); return true; } @@ -1247,7 +1249,7 @@ NetworkOPsImp::doTransactionAsync( bool bUnlimited, FailHard failType) { - std::lock_guard lock(mMutex); + std::lock_guard const lock(mMutex); if (transaction->getApplying()) return; @@ -1320,7 +1322,7 @@ NetworkOPsImp::processTransactionSet(CanonicalTXSet const& set) for (auto const& [_, tx] : set) { std::string reason; - auto transaction = std::make_shared(tx, reason, registry_.app()); + auto transaction = std::make_shared(tx, reason, registry_.get().getApp()); if (transaction->getStatus() == INVALID) { @@ -1328,7 +1330,7 @@ NetworkOPsImp::processTransactionSet(CanonicalTXSet const& set) { JLOG(m_journal.trace()) << "Exception checking transaction: " << reason; } - registry_.getHashRouter().setFlags(tx->getTransactionID(), HashRouterFlags::BAD); + registry_.get().getHashRouter().setFlags(tx->getTransactionID(), HashRouterFlags::BAD); continue; } @@ -1406,13 +1408,12 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) batchLock.unlock(); { - std::unique_lock masterLock{registry_.app().getMasterMutex(), std::defer_lock}; + std::unique_lock masterLock{registry_.get().getApp().getMasterMutex(), std::defer_lock}; bool changed = false; { std::unique_lock ledgerLock{m_ledgerMaster.peekMutex(), std::defer_lock}; std::lock(masterLock, ledgerLock); - - registry_.openLedger().modify([&](OpenView& view, beast::Journal j) { + registry_.get().getOpenLedger().modify([&](OpenView& view, beast::Journal j) { for (TransactionStatus& e : transactions) { // we check before adding to the batch @@ -1423,8 +1424,8 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) if (e.failType == FailHard::yes) flags |= tapFAIL_HARD; - auto const result = registry_.getTxQ().apply( - registry_.app(), view, e.transaction->getSTransaction(), flags, j); + auto const result = registry_.get().getTxQ().apply( + registry_.get().getApp(), view, e.transaction->getSTransaction(), flags, j); e.result = result.ter; e.applied = result.applied; changed = changed || result.applied; @@ -1439,8 +1440,8 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) if (auto const l = m_ledgerMaster.getValidatedLedger()) validatedLedgerIndex = l->header().seq; - auto newOL = registry_.openLedger().current(); - for (TransactionStatus& e : transactions) + auto newOL = registry_.get().getOpenLedger().current(); + for (TransactionStatus const& e : transactions) { e.transaction->clearSubmitResult(); @@ -1453,7 +1454,10 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) e.transaction->setResult(e.result); if (isTemMalformed(e.result)) - registry_.getHashRouter().setFlags(e.transaction->getID(), HashRouterFlags::BAD); + { + registry_.get().getHashRouter().setFlags( + e.transaction->getID(), HashRouterFlags::BAD); + } #ifdef DEBUG if (!isTesSuccess(e.result)) @@ -1467,7 +1471,7 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) } #endif - bool addLocal = e.local; + bool const addLocal = e.local; if (isTesSuccess(e.result)) { @@ -1488,7 +1492,7 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) batchLock.lock(); std::string reason; auto const trans = sterilize(*txNext); - auto t = std::make_shared(trans, reason, registry_.app()); + auto t = std::make_shared(trans, reason, registry_.get().getApp()); if (t->getApplying()) break; submit_held.emplace_back(t, false, false, FailHard::no); @@ -1542,7 +1546,7 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) // up!) // if (e.local || (ledgersLeft && ledgersLeft <= LocalTxs::holdLedgers) || - registry_.getHashRouter().setFlags( + registry_.get().getHashRouter().setFlags( e.transaction->getID(), HashRouterFlags::HELD)) { // transaction should be held @@ -1579,7 +1583,8 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) (e.result == terQUEUED)) && !enforceFailHard) { - auto const toSkip = registry_.getHashRouter().shouldRelay(e.transaction->getID()); + auto const toSkip = + registry_.get().getHashRouter().shouldRelay(e.transaction->getID()); if (auto const sttx = *(e.transaction->getSTransaction()); toSkip && // Skip relaying if it's an inner batch txn. The flag should // only be set if the Batch feature is enabled. If Batch is @@ -1594,18 +1599,19 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) tx.set_rawtransaction(s.data(), s.size()); tx.set_status(protocol::tsCURRENT); tx.set_receivetimestamp( - registry_.timeKeeper().now().time_since_epoch().count()); + registry_.get().getTimeKeeper().now().time_since_epoch().count()); tx.set_deferred(e.result == terQUEUED); // FIXME: This should be when we received it - registry_.overlay().relay(e.transaction->getID(), tx, *toSkip); + registry_.get().getOverlay().relay(e.transaction->getID(), tx, *toSkip); e.transaction->setBroadcast(); } } if (validatedLedgerIndex) { - auto [fee, accountSeq, availableSeq] = registry_.getTxQ().getTxRequiredFeeAndSeq( - *newOL, e.transaction->getSTransaction()); + auto [fee, accountSeq, availableSeq] = + registry_.get().getTxQ().getTxRequiredFeeAndSeq( + *newOL, e.transaction->getSTransaction()); e.transaction->setCurrentLedgerState( *validatedLedgerIndex, fee, accountSeq, availableSeq); } @@ -1614,7 +1620,7 @@ NetworkOPsImp::apply(std::unique_lock& batchLock) batchLock.lock(); - for (TransactionStatus& e : transactions) + for (TransactionStatus const& e : transactions) e.transaction->clearApplying(); if (!submit_held.empty()) @@ -1689,12 +1695,12 @@ NetworkOPsImp::getOwnerInfo(std::shared_ptr lpLedger, AccountID uNodeDir = sleNode->getFieldU64(sfIndexNext); - if (uNodeDir) + if (uNodeDir != 0u) { sleNode = lpLedger->read(keylet::page(root, uNodeDir)); XRPL_ASSERT(sleNode, "xrpl::NetworkOPsImp::getOwnerInfo : read next page"); } - } while (uNodeDir); + } while (uNodeDir != 0u); } return jvObjects; @@ -1776,14 +1782,14 @@ NetworkOPsImp::checkLastClosedLedger(Overlay::PeerSequence const& peerList, uint return false; uint256 closedLedger = ourClosed->header().hash; - uint256 prevClosedLedger = ourClosed->header().parentHash; + uint256 const prevClosedLedger = ourClosed->header().parentHash; JLOG(m_journal.trace()) << "OurClosed: " << closedLedger; JLOG(m_journal.trace()) << "PrevClosed: " << prevClosedLedger; //------------------------------------------------------------------------- // Determine preferred last closed ledger - auto& validations = registry_.getValidations(); + auto& validations = registry_.get().getValidations(); JLOG(m_journal.debug()) << "ValidationTrie " << Json::Compact(validations.getJsonTrie()); // Will rely on peer LCL if no trusted validations exist @@ -1794,7 +1800,7 @@ NetworkOPsImp::checkLastClosedLedger(Overlay::PeerSequence const& peerList, uint for (auto& peer : peerList) { - uint256 peerLedger = peer->getClosedLedgerHash(); + uint256 const peerLedger = peer->getClosedLedgerHash(); if (peerLedger.isNonZero()) ++peerCounts[peerLedger]; @@ -1803,7 +1809,7 @@ NetworkOPsImp::checkLastClosedLedger(Overlay::PeerSequence const& peerList, uint for (auto const& it : peerCounts) JLOG(m_journal.debug()) << "L: " << it.first << " n=" << it.second; - uint256 preferredLCL = validations.getPreferredLCL( + uint256 const preferredLCL = validations.getPreferredLCL( RCLValidatedLedger{ourClosed, validations.adaptor().journal()}, m_ledgerMaster.getValidLedgerIndex(), peerCounts); @@ -1831,7 +1837,7 @@ NetworkOPsImp::checkLastClosedLedger(Overlay::PeerSequence const& peerList, uint if (!consensus) { - consensus = registry_.getInboundLedgers().acquire( + consensus = registry_.get().getInboundLedgers().acquire( closedLedger, 0, InboundLedger::Reason::CONSENSUS); } @@ -1874,7 +1880,7 @@ NetworkOPsImp::switchLastClosedLedger(std::shared_ptr const& newLC clearNeedNetworkLedger(); // Update fee computations. - registry_.getTxQ().processClosedLedger(registry_.app(), *newLCL, true); + registry_.get().getTxQ().processClosedLedger(registry_.get().getApp(), *newLCL, true); // Caller must own master lock { @@ -1882,18 +1888,18 @@ NetworkOPsImp::switchLastClosedLedger(std::shared_ptr const& newLC // open ledger. Then apply local tx. auto retries = m_localTX->getTxSet(); - auto const lastVal = registry_.getLedgerMaster().getValidatedLedger(); + auto const lastVal = registry_.get().getLedgerMaster().getValidatedLedger(); std::optional rules; if (lastVal) { - rules = makeRulesGivenLedger(*lastVal, registry_.app().config().features); + rules = makeRulesGivenLedger(*lastVal, registry_.get().getApp().config().features); } else { - rules.emplace(registry_.app().config().features); + rules.emplace(registry_.get().getApp().config().features); } - registry_.openLedger().accept( - registry_.app(), + registry_.get().getOpenLedger().accept( + registry_.get().getApp(), *rules, newLCL, OrderedTxs({}), @@ -1903,7 +1909,7 @@ NetworkOPsImp::switchLastClosedLedger(std::shared_ptr const& newLC "jump", [&](OpenView& view, beast::Journal j) { // Stuff the ledger with transactions from the queue. - return registry_.getTxQ().accept(registry_.app(), view); + return registry_.get().getTxQ().accept(registry_.get().getApp(), view); }); } @@ -1912,12 +1918,11 @@ NetworkOPsImp::switchLastClosedLedger(std::shared_ptr const& newLC protocol::TMStatusChange s; s.set_newevent(protocol::neSWITCHED_LEDGER); s.set_ledgerseq(newLCL->header().seq); - s.set_networktime(registry_.timeKeeper().now().time_since_epoch().count()); + s.set_networktime(registry_.get().getTimeKeeper().now().time_since_epoch().count()); s.set_ledgerhashprevious( newLCL->header().parentHash.begin(), newLCL->header().parentHash.size()); s.set_ledgerhash(newLCL->header().hash.begin(), newLCL->header().hash.size()); - - registry_.overlay().foreach( + registry_.get().getOverlay().foreach( send_always(std::make_shared(s, protocol::mtSTATUS_CHANGE))); } @@ -1958,23 +1963,24 @@ NetworkOPsImp::beginConsensus( "xrpl::NetworkOPsImp::beginConsensus : closedLedger parent matches " "hash"); - registry_.validators().setNegativeUNL(prevLedger->negativeUNL()); - TrustChanges const changes = registry_.validators().updateTrusted( - registry_.getValidations().getCurrentNodeIDs(), + registry_.get().getValidators().setNegativeUNL(prevLedger->negativeUNL()); + TrustChanges const changes = registry_.get().getValidators().updateTrusted( + registry_.get().getValidations().getCurrentNodeIDs(), closingInfo.parentCloseTime, *this, - registry_.overlay(), - registry_.getHashRouter()); + registry_.get().getOverlay(), + registry_.get().getHashRouter()); if (!changes.added.empty() || !changes.removed.empty()) { - registry_.getValidations().trustChanged(changes.added, changes.removed); + registry_.get().getValidations().trustChanged(changes.added, changes.removed); // Update the AmendmentTable so it tracks the current validators. - registry_.getAmendmentTable().trustChanged(registry_.validators().getQuorumKeys().second); + registry_.get().getAmendmentTable().trustChanged( + registry_.get().getValidators().getQuorumKeys().second); } mConsensus.startRound( - registry_.timeKeeper().closeTime(), + registry_.get().getTimeKeeper().closeTime(), networkClosed, prevLedger, changes.removed, @@ -2014,33 +2020,30 @@ NetworkOPsImp::processTrustedProposal(RCLCxPeerPos peerPos) return false; } - return mConsensus.peerProposal(registry_.timeKeeper().closeTime(), peerPos); + return mConsensus.peerProposal(registry_.get().getTimeKeeper().closeTime(), peerPos); } void NetworkOPsImp::mapComplete(std::shared_ptr const& map, bool fromAcquire) { // We now have an additional transaction set - // either created locally during the consensus process - // or acquired from a peer - // Inform peers we have this set protocol::TMHaveTransactionSet msg; msg.set_hash(map->getHash().as_uint256().begin(), 256 / 8); msg.set_status(protocol::tsHAVE); - registry_.overlay().foreach(send_always(std::make_shared(msg, protocol::mtHAVE_SET))); + registry_.get().getOverlay().foreach( + send_always(std::make_shared(msg, protocol::mtHAVE_SET))); // We acquired it because consensus asked us to if (fromAcquire) - mConsensus.gotTxSet(registry_.timeKeeper().closeTime(), RCLTxSet{map}); + mConsensus.gotTxSet(registry_.get().getTimeKeeper().closeTime(), RCLTxSet{map}); } void NetworkOPsImp::endConsensus(std::unique_ptr const& clog) { - uint256 deadLedger = m_ledgerMaster.getClosedLedger()->header().parentHash; - - for (auto const& it : registry_.overlay().getActivePeers()) + uint256 const deadLedger = m_ledgerMaster.getClosedLedger()->header().parentHash; + for (auto const& it : registry_.get().getOverlay().getActivePeers()) { if (it && (it->getClosedLedgerHash() == deadLedger)) { @@ -2050,7 +2053,8 @@ NetworkOPsImp::endConsensus(std::unique_ptr const& clog) } uint256 networkClosed; - bool ledgerChange = checkLastClosedLedger(registry_.overlay().getActivePeers(), networkClosed); + bool const ledgerChange = + checkLastClosedLedger(registry_.get().getOverlay().getActivePeers(), networkClosed); if (networkClosed.isZero()) { @@ -2080,7 +2084,7 @@ NetworkOPsImp::endConsensus(std::unique_ptr const& clog) // Note: Do not go to FULL if we don't have the previous ledger // check if the ledger is bad enough to go to CONNECTED -- TODO auto current = m_ledgerMaster.getCurrentLedger(); - if (registry_.timeKeeper().now() < + if (registry_.get().getTimeKeeper().now() < (current->header().parentCloseTime + 2 * current->header().closeTimeResolution)) { setMode(OperatingMode::FULL); @@ -2103,7 +2107,7 @@ void NetworkOPsImp::pubManifest(Manifest const& mo) { // VFALCO consider std::shared_mutex - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mStreamMaps[sManifests].empty()) { @@ -2138,12 +2142,12 @@ NetworkOPsImp::pubManifest(Manifest const& mo) NetworkOPsImp::ServerFeeSummary::ServerFeeSummary( XRPAmount fee, - TxQ::Metrics&& escalationMetrics, + TxQ::Metrics escalationMetrics, // trivially copyable LoadFeeTrack const& loadFeeTrack) : loadFactorServer{loadFeeTrack.getLoadFactor()} , loadBaseServer{loadFeeTrack.getLoadBase()} , baseFee{fee} - , em{std::move(escalationMetrics)} + , em{escalationMetrics} { } @@ -2181,16 +2185,16 @@ NetworkOPsImp::pubServer() // list into a local array while holding the lock then release // the lock and call send on everyone. // - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mStreamMaps[sServer].empty()) { Json::Value jvObj(Json::objectValue); ServerFeeSummary f{ - registry_.openLedger().current()->fees().base, - registry_.getTxQ().getMetrics(*registry_.openLedger().current()), - registry_.getFeeTrack()}; + registry_.get().getOpenLedger().current()->fees().base, + registry_.get().getTxQ().getMetrics(*registry_.get().getOpenLedger().current()), + registry_.get().getFeeTrack()}; jvObj[jss::type] = "serverStatus"; jvObj[jss::server_status] = strOperatingMode(); @@ -2219,7 +2223,7 @@ NetworkOPsImp::pubServer() for (auto i = mStreamMaps[sServer].begin(); i != mStreamMaps[sServer].end();) { - InfoSub::pointer p = i->second.lock(); + InfoSub::pointer const p = i->second.lock(); // VFALCO TODO research the possibility of using thread queues and // linearizing the deletion of subscribers with the @@ -2240,7 +2244,7 @@ NetworkOPsImp::pubServer() void NetworkOPsImp::pubConsensus(ConsensusPhase phase) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); auto& streamMap = mStreamMaps[sConsensusPhase]; if (!streamMap.empty()) @@ -2268,7 +2272,7 @@ void NetworkOPsImp::pubValidation(std::shared_ptr const& val) { // VFALCO consider std::shared_mutex - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mStreamMaps[sValidations].empty()) { @@ -2284,7 +2288,7 @@ NetworkOPsImp::pubValidation(std::shared_ptr const& val) jvObj[jss::flags] = val->getFlags(); jvObj[jss::signing_time] = *(*val)[~sfSigningTime]; jvObj[jss::data] = strHex(val->getSerializer().slice()); - jvObj[jss::network_id] = registry_.getNetworkIDService().getNetworkID(); + jvObj[jss::network_id] = registry_.get().getNetworkIDService().getNetworkID(); if (auto version = (*val)[~sfServerVersion]) jvObj[jss::server_version] = std::to_string(*version); @@ -2295,7 +2299,7 @@ NetworkOPsImp::pubValidation(std::shared_ptr const& val) if (auto hash = (*val)[~sfValidatedHash]) jvObj[jss::validated_hash] = strHex(*hash); - auto const masterKey = registry_.validatorManifests().getMasterKey(signerPublic); + auto const masterKey = registry_.get().getValidatorManifests().getMasterKey(signerPublic); if (masterKey != signerPublic) jvObj[jss::master_key] = toBase58(TokenType::NodePublic, masterKey); @@ -2383,7 +2387,7 @@ NetworkOPsImp::pubValidation(std::shared_ptr const& val) void NetworkOPsImp::pubPeerStatus(std::function const& func) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mStreamMaps[sPeerStatus].empty()) { @@ -2393,7 +2397,7 @@ NetworkOPsImp::pubPeerStatus(std::function const& func) for (auto i = mStreamMaps[sPeerStatus].begin(); i != mStreamMaps[sPeerStatus].end();) { - InfoSub::pointer p = i->second.lock(); + InfoSub::pointer const p = i->second.lock(); if (p) { @@ -2414,12 +2418,12 @@ NetworkOPsImp::setMode(OperatingMode om) using namespace std::chrono_literals; if (om == OperatingMode::CONNECTED) { - if (registry_.getLedgerMaster().getValidatedLedgerAge() < 1min) + if (registry_.get().getLedgerMaster().getValidatedLedgerAge() < 1min) om = OperatingMode::SYNCING; } else if (om == OperatingMode::SYNCING) { - if (registry_.getLedgerMaster().getValidatedLedgerAge() >= 1min) + if (registry_.get().getLedgerMaster().getValidatedLedgerAge() >= 1min) om = OperatingMode::CONNECTED; } @@ -2454,8 +2458,8 @@ NetworkOPsImp::recvValidation(std::shared_ptr const& val, std::str { pendingValidations_.insert(val->getLedgerHash()); } - scope_unlock unlock(lock); - handleNewValidation(registry_.app(), val, source, bypassAccept, m_journal); + scope_unlock const unlock(lock); + handleNewValidation(registry_.get().getApp(), val, source, bypassAccept, m_journal); } catch (std::exception const& e) { @@ -2478,7 +2482,7 @@ NetworkOPsImp::recvValidation(std::shared_ptr const& val, std::str JLOG(m_journal.debug()) << [this, &val]() -> auto { std::stringstream ss; ss << "VALIDATION: " << val->render() << " master_key: "; - auto master = registry_.validators().getTrustedKey(val->getSignerPublic()); + auto master = registry_.get().getValidators().getTrustedKey(val->getSignerPublic()); if (master) { ss << toBase58(TokenType::NodePublic, *master); @@ -2492,7 +2496,7 @@ NetworkOPsImp::recvValidation(std::shared_ptr const& val, std::str // We will always relay trusted validations; if configured, we will // also relay all untrusted validations. - return registry_.app().config().RELAY_UNTRUSTED_VALIDATIONS == 1 || val->isTrusted(); + return registry_.get().getApp().config().RELAY_UNTRUSTED_VALIDATIONS == 1 || val->isTrusted(); } Json::Value @@ -2534,7 +2538,8 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) "One or more unsupported amendments have reached majority. " "Upgrade to the latest version before they are activated " "to avoid being amendment blocked."; - if (auto const expected = registry_.getAmendmentTable().firstUnsupportedExpected()) + if (auto const expected = + registry_.get().getAmendmentTable().firstUnsupportedExpected()) { auto& d = w[jss::details] = Json::objectValue; d[jss::expected_date] = expected->time_since_epoch().count(); @@ -2542,7 +2547,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) } } - if (warnings.size()) + if (warnings.size() != 0u) info[jss::warnings] = std::move(warnings); } @@ -2551,8 +2556,8 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) info[jss::hostid] = getHostId(admin); // domain: if configured with a domain, report it: - if (!registry_.app().config().SERVER_DOMAIN.empty()) - info[jss::server_domain] = registry_.app().config().SERVER_DOMAIN; + if (!registry_.get().getApp().config().SERVER_DOMAIN.empty()) + info[jss::server_domain] = registry_.get().getApp().config().SERVER_DOMAIN; info[jss::build_version] = BuildInfo::getVersionString(); @@ -2564,14 +2569,15 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) if (needNetworkLedger_) info[jss::network_ledger] = "waiting"; - info[jss::validation_quorum] = static_cast(registry_.validators().quorum()); + info[jss::validation_quorum] = + static_cast(registry_.get().getValidators().quorum()); if (admin) { // Note: By default the node size is "tiny". When parsing it's an error if the final // NODE_SIZE is over 4 so below code should be safe. // NOLINTNEXTLINE(bugprone-switch-missing-default-case) - switch (registry_.app().config().NODE_SIZE) + switch (registry_.get().getApp().config().NODE_SIZE) { case 0: info[jss::node_size] = "tiny"; @@ -2590,7 +2596,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) break; } - auto when = registry_.validators().expires(); + auto when = registry_.get().getValidators().expires(); if (!human) { @@ -2608,7 +2614,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) { auto& x = (info[jss::validator_list] = Json::objectValue); - x[jss::count] = static_cast(registry_.validators().count()); + x[jss::count] = static_cast(registry_.get().getValidators().count()); if (when) { @@ -2621,7 +2627,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) { x[jss::expiration] = to_string(*when); - if (*when > registry_.timeKeeper().now()) + if (*when > registry_.get().getTimeKeeper().now()) { x[jss::status] = "active"; } @@ -2647,12 +2653,13 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) x[jss::branch] = xrpl::git::getBuildBranch(); } } - info[jss::io_latency_ms] = static_cast(registry_.app().getIOLatency().count()); + info[jss::io_latency_ms] = + static_cast(registry_.get().getApp().getIOLatency().count()); if (admin) { - if (auto const localPubKey = registry_.validators().localPublicKey(); - localPubKey && registry_.app().getValidationPublicKey()) + if (auto const localPubKey = registry_.get().getValidators().localPublicKey(); + localPubKey && registry_.get().getApp().getValidationPublicKey()) { info[jss::pubkey_validator] = toBase58(TokenType::NodePublic, localPubKey.value()); } @@ -2664,17 +2671,18 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) if (counters) { - info[jss::counters] = registry_.getPerfLog().countersJson(); + info[jss::counters] = registry_.get().getPerfLog().countersJson(); Json::Value nodestore(Json::objectValue); - registry_.getNodeStore().getCountsJson(nodestore); + registry_.get().getNodeStore().getCountsJson(nodestore); info[jss::counters][jss::nodestore] = nodestore; - info[jss::current_activities] = registry_.getPerfLog().currentJson(); + info[jss::current_activities] = registry_.get().getPerfLog().currentJson(); } - info[jss::pubkey_node] = toBase58(TokenType::NodePublic, registry_.app().nodeIdentity().first); + info[jss::pubkey_node] = + toBase58(TokenType::NodePublic, registry_.get().getApp().nodeIdentity().first); - info[jss::complete_ledgers] = registry_.getLedgerMaster().getCompleteLedgers(); + info[jss::complete_ledgers] = registry_.get().getLedgerMaster().getCompleteLedgers(); if (amendmentBlocked_) info[jss::amendment_blocked] = true; @@ -2684,7 +2692,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) if (fp != 0) info[jss::fetch_pack] = Json::UInt(fp); - info[jss::peers] = Json::UInt(registry_.overlay().size()); + info[jss::peers] = Json::UInt(registry_.get().getOverlay().size()); Json::Value lastClose = Json::objectValue; lastClose[jss::proposers] = Json::UInt(mConsensus.prevProposers()); @@ -2706,13 +2714,14 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) if (admin) info[jss::load] = m_job_queue.getJson(); - if (auto const netid = registry_.overlay().networkID()) + if (auto const netid = registry_.get().getOverlay().networkID()) info[jss::network_id] = static_cast(*netid); - auto const escalationMetrics = registry_.getTxQ().getMetrics(*registry_.openLedger().current()); + auto const escalationMetrics = + registry_.get().getTxQ().getMetrics(*registry_.get().getOpenLedger().current()); - auto const loadFactorServer = registry_.getFeeTrack().getLoadFactor(); - auto const loadBaseServer = registry_.getFeeTrack().getLoadBase(); + auto const loadFactorServer = registry_.get().getFeeTrack().getLoadFactor(); + auto const loadBaseServer = registry_.get().getFeeTrack().getLoadBase(); /* Scale the escalated fee level to unitless "load factor". In practice, this just strips the units, but it will continue to work correctly if either base value ever changes. */ @@ -2749,13 +2758,13 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) if (admin) { - std::uint32_t fee = registry_.getFeeTrack().getLocalFee(); + std::uint32_t fee = registry_.get().getFeeTrack().getLocalFee(); if (fee != loadBaseServer) info[jss::load_factor_local] = static_cast(fee) / loadBaseServer; - fee = registry_.getFeeTrack().getRemoteFee(); + fee = registry_.get().getFeeTrack().getRemoteFee(); if (fee != loadBaseServer) info[jss::load_factor_net] = static_cast(fee) / loadBaseServer; - fee = registry_.getFeeTrack().getClusterFee(); + fee = registry_.get().getFeeTrack().getClusterFee(); if (fee != loadBaseServer) info[jss::load_factor_cluster] = static_cast(fee) / loadBaseServer; } @@ -2820,7 +2829,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) l[jss::gas_price] = lpClosed->fees().gasPrice; } - if (auto const closeOffset = registry_.timeKeeper().closeOffset(); + if (auto const closeOffset = registry_.get().getTimeKeeper().closeOffset(); std::abs(closeOffset.count()) >= 60) l[jss::close_time_offset] = static_cast(closeOffset.count()); @@ -2833,7 +2842,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) else { auto lCloseTime = lpClosed->header().closeTime; - auto closeTime = registry_.timeKeeper().closeTime(); + auto closeTime = registry_.get().getTimeKeeper().closeTime(); if (lCloseTime <= closeTime) { using namespace std::chrono_literals; @@ -2865,10 +2874,11 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) accounting_.json(info); info[jss::uptime] = UptimeClock::now().time_since_epoch().count(); - info[jss::jq_trans_overflow] = std::to_string(registry_.overlay().getJqTransOverflow()); - info[jss::peer_disconnects] = std::to_string(registry_.overlay().getPeerDisconnect()); + info[jss::jq_trans_overflow] = + std::to_string(registry_.get().getOverlay().getJqTransOverflow()); + info[jss::peer_disconnects] = std::to_string(registry_.get().getOverlay().getPeerDisconnect()); info[jss::peer_disconnects_resources] = - std::to_string(registry_.overlay().getPeerDisconnectCharges()); + std::to_string(registry_.get().getOverlay().getPeerDisconnectCharges()); // This array must be sorted in increasing order. static constexpr std::array protocols{ @@ -2876,7 +2886,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) static_assert(std::is_sorted(std::begin(protocols), std::end(protocols))); { Json::Value ports{Json::arrayValue}; - for (auto const& port : registry_.getServerHandler().setup().ports) + for (auto const& port : registry_.get().getServerHandler().setup().ports) { // Don't publish admin ports for non-admin users if (!admin && @@ -2900,9 +2910,9 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) } } - if (registry_.app().config().exists(SECTION_PORT_GRPC)) + if (registry_.get().getApp().config().exists(SECTION_PORT_GRPC)) { - auto const& grpcSection = registry_.app().config().section(SECTION_PORT_GRPC); + auto const& grpcSection = registry_.get().getApp().config().section(SECTION_PORT_GRPC); auto const optPort = grpcSection.get("port"); if (optPort && grpcSection.get("ip")) { @@ -2921,13 +2931,13 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) void NetworkOPsImp::clearLedgerFetch() { - registry_.getInboundLedgers().clearFailures(); + registry_.get().getInboundLedgers().clearFailures(); } Json::Value NetworkOPsImp::getLedgerFetchInfo() { - return registry_.getInboundLedgers().getInfo(); + return registry_.get().getInboundLedgers().getInfo(); } void @@ -2946,7 +2956,7 @@ NetworkOPsImp::pubProposedTransaction( MultiApiJson jvObj = transJson(transaction, result, false, ledger, std::nullopt); { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); auto it = mStreamMaps[sRTTransactions].begin(); while (it != mStreamMaps[sRTTransactions].end()) @@ -2977,11 +2987,11 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) // Holes are filled across connection loss or other catastrophe std::shared_ptr alpAccepted = - registry_.getAcceptedLedgerCache().fetch(lpAccepted->header().hash); + registry_.get().getAcceptedLedgerCache().fetch(lpAccepted->header().hash); if (!alpAccepted) { alpAccepted = std::make_shared(lpAccepted); - registry_.getAcceptedLedgerCache().canonicalize_replace_client( + registry_.get().getAcceptedLedgerCache().canonicalize_replace_client( lpAccepted->header().hash, alpAccepted); } @@ -2993,7 +3003,7 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) JLOG(m_journal.debug()) << "Publishing ledger " << lpAccepted->header().seq << " " << lpAccepted->header().hash; - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mStreamMaps[sLedger].empty()) { @@ -3005,10 +3015,10 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) jvObj[jss::ledger_time] = Json::Value::UInt(lpAccepted->header().closeTime.time_since_epoch().count()); - jvObj[jss::network_id] = registry_.getNetworkIDService().getNetworkID(); + jvObj[jss::network_id] = registry_.get().getNetworkIDService().getNetworkID(); if (!lpAccepted->rules().enabled(featureXRPFees)) - jvObj[jss::fee_ref] = Config::FEE_UNITS_DEPRECATED; + jvObj[jss::fee_ref] = FEE_UNITS_DEPRECATED; jvObj[jss::fee_base] = lpAccepted->fees().base.jsonClipped(); jvObj[jss::reserve_base] = lpAccepted->fees().reserve.jsonClipped(); jvObj[jss::reserve_inc] = lpAccepted->fees().increment.jsonClipped(); @@ -3023,13 +3033,14 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) if (mMode >= OperatingMode::SYNCING) { - jvObj[jss::validated_ledgers] = registry_.getLedgerMaster().getCompleteLedgers(); + jvObj[jss::validated_ledgers] = + registry_.get().getLedgerMaster().getCompleteLedgers(); } auto it = mStreamMaps[sLedger].begin(); while (it != mStreamMaps[sLedger].end()) { - InfoSub::pointer p = it->second.lock(); + InfoSub::pointer const p = it->second.lock(); if (p) { p->send(jvObj, true); @@ -3044,12 +3055,12 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) if (!mStreamMaps[sBookChanges].empty()) { - Json::Value jvObj = xrpl::RPC::computeBookChanges(lpAccepted); + Json::Value const jvObj = xrpl::RPC::computeBookChanges(lpAccepted); auto it = mStreamMaps[sBookChanges].begin(); while (it != mStreamMaps[sBookChanges].end()) { - InfoSub::pointer p = it->second.lock(); + InfoSub::pointer const p = it->second.lock(); if (p) { p->send(jvObj, true); @@ -3094,10 +3105,10 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) void NetworkOPsImp::reportFeeChange() { - ServerFeeSummary f{ - registry_.openLedger().current()->fees().base, - registry_.getTxQ().getMetrics(*registry_.openLedger().current()), - registry_.getFeeTrack()}; + ServerFeeSummary const f{ + registry_.get().getOpenLedger().current()->fees().base, + registry_.get().getTxQ().getMetrics(*registry_.get().getOpenLedger().current()), + registry_.get().getFeeTrack()}; // only schedule the job if something has changed if (f != mLastFeeSummary) @@ -3158,7 +3169,7 @@ NetworkOPsImp::transJson( lookup.second && lookup.second->isFieldPresent(sfTransactionIndex)) { uint32_t const txnSeq = lookup.second->getFieldU32(sfTransactionIndex); - uint32_t netID = registry_.getNetworkIDService().getNetworkID(); + uint32_t netID = registry_.get().getNetworkIDService().getNetworkID(); if (transaction->isFieldPresent(sfNetworkID)) netID = transaction->getFieldU32(sfNetworkID); @@ -3197,8 +3208,8 @@ NetworkOPsImp::transJson( // If the offer create is not self funded then add the owner balance if (account != amount.issue().account) { - auto const ownerFunds = - accountFunds(*ledger, account, amount, fhIGNORE_FREEZE, registry_.journal("View")); + auto const ownerFunds = accountFunds( + *ledger, account, amount, fhIGNORE_FREEZE, registry_.get().getJournal("View")); jvObj[jss::transaction][jss::owner_funds] = ownerFunds.getText(); } } @@ -3238,7 +3249,7 @@ NetworkOPsImp::pubValidatedTransaction( MultiApiJson jvObj = transJson(stTxn, trResult, true, ledger, metaRef); { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); auto it = mStreamMaps[sTransactions].begin(); while (it != mStreamMaps[sTransactions].end()) @@ -3279,7 +3290,7 @@ NetworkOPsImp::pubValidatedTransaction( } if (transaction.getResult() == tesSUCCESS) - registry_.getOrderBookDB().processTxn(ledger, transaction, jvObj); + registry_.get().getOrderBookDB().processTxn(ledger, transaction, jvObj); pubAccountTransaction(ledger, transaction, last); } @@ -3297,7 +3308,7 @@ NetworkOPsImp::pubAccountTransaction( std::vector accountHistoryNotify; auto const currLedgerSeq = ledger->seq(); { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (!mSubAccount.empty() || !mSubRTAccount.empty() || !mSubAccountHistory.empty()) { @@ -3310,7 +3321,7 @@ NetworkOPsImp::pubAccountTransaction( while (it != simiIt->second.end()) { - InfoSub::pointer p = it->second.lock(); + InfoSub::pointer const p = it->second.lock(); if (p) { @@ -3330,7 +3341,7 @@ NetworkOPsImp::pubAccountTransaction( auto it = simiIt->second.begin(); while (it != simiIt->second.end()) { - InfoSub::pointer p = it->second.lock(); + InfoSub::pointer const p = it->second.lock(); if (p) { @@ -3430,7 +3441,7 @@ NetworkOPsImp::pubProposedAccountTransaction( std::vector accountHistoryNotify; { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); if (mSubRTAccount.empty()) return; @@ -3446,7 +3457,7 @@ NetworkOPsImp::pubProposedAccountTransaction( while (it != simiIt->second.end()) { - InfoSub::pointer p = it->second.lock(); + InfoSub::pointer const p = it->second.lock(); if (p) { @@ -3514,7 +3525,7 @@ NetworkOPsImp::subAccount( isrListener->insertSubAccountInfo(naAccountID, rt); } - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); for (auto const& naAccountID : vnaAccountIDs) { @@ -3557,7 +3568,7 @@ NetworkOPsImp::unsubAccountInternal( hash_set const& vnaAccountIDs, bool rt) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); SubInfoMapType& subMap = rt ? mSubRTAccount : mSubAccount; @@ -3586,7 +3597,7 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) static auto const databaseType = [&]() -> DatabaseType { // Use a dynamic_cast to return DatabaseType::None // on failure. - if (dynamic_cast(®istry_.getRelationalDatabase())) + if (dynamic_cast(®istry_.get().getRelationalDatabase())) { return DatabaseType::Sqlite; } @@ -3608,7 +3619,7 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) // LCOV_EXCL_STOP } - registry_.getJobQueue().addJob( + registry_.get().getJobQueue().addJob( jtCLIENT_ACCT_HIST, "HistTxStream", [this, dbType = databaseType, subInfo]() { auto const& accountId = subInfo.index_->accountId_; auto& lastLedgerSeq = subInfo.index_->historyLastLedgerSeq_; @@ -3689,11 +3700,10 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) switch (dbType) { case Sqlite: { - auto db = - safe_downcast(®istry_.getRelationalDatabase()); - RelationalDatabase::AccountTxPageOptions options{ - accountId, minLedger, maxLedger, marker, 0, true}; - return db->newestAccountTxPage(options); + auto& db = registry_.get().getRelationalDatabase(); + RelationalDatabase::AccountTxPageOptions const options{ + accountId, {minLedger, maxLedger}, marker, 0, true}; + return db.newestAccountTxPage(options); } // LCOV_EXCL_START default: { @@ -3735,7 +3745,8 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) std::uint32_t validatedMin = UINT_MAX; std::uint32_t validatedMax = 0; auto haveSomeValidatedLedgers = - registry_.getLedgerMaster().getValidatedRange(validatedMin, validatedMax); + registry_.get().getLedgerMaster().getValidatedRange( + validatedMin, validatedMax); return haveSomeValidatedLedgers && validatedMin <= startLedgerSeq && lastLedgerSeq <= validatedMax; @@ -3769,7 +3780,7 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) auto const& txns = dbResult->first; marker = dbResult->second; - size_t num_txns = txns.size(); + size_t const num_txns = txns.size(); for (size_t i = 0; i < num_txns; ++i) { auto const& [tx, meta] = txns[i]; @@ -3782,7 +3793,7 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) return; } auto curTxLedger = - registry_.getLedgerMaster().getLedgerBySeq(tx->getLedger()); + registry_.get().getLedgerMaster().getLedgerBySeq(tx->getLedger()); if (!curTxLedger) { // LCOV_EXCL_START @@ -3795,7 +3806,7 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) return; // LCOV_EXCL_STOP } - std::shared_ptr stTxn = tx->getSTransaction(); + std::shared_ptr const stTxn = tx->getSTransaction(); if (!stTxn) { // LCOV_EXCL_START @@ -3914,7 +3925,7 @@ NetworkOPsImp::subAccountHistory(InfoSub::ref isrListener, AccountID const& acco return rpcINVALID_PARAMS; } - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); SubAccountHistoryInfoWeak ahi{isrListener, std::make_shared(accountId)}; auto simIterator = mSubAccountHistory.find(accountId); if (simIterator == mSubAccountHistory.end()) @@ -3928,7 +3939,7 @@ NetworkOPsImp::subAccountHistory(InfoSub::ref isrListener, AccountID const& acco simIterator->second.emplace(isrListener->getSeq(), ahi); } - auto const ledger = registry_.getLedgerMaster().getValidatedLedger(); + auto const ledger = registry_.get().getLedgerMaster().getValidatedLedger(); if (ledger) { subAccountHistoryStart(ledger, ahi); @@ -3961,7 +3972,7 @@ NetworkOPsImp::unsubAccountHistoryInternal( AccountID const& account, bool historyOnly) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); auto simIterator = mSubAccountHistory.find(account); if (simIterator != mSubAccountHistory.end()) { @@ -3988,7 +3999,7 @@ NetworkOPsImp::unsubAccountHistoryInternal( bool NetworkOPsImp::subBook(InfoSub::ref isrListener, Book const& book) { - if (auto listeners = registry_.getOrderBookDB().makeBookListeners(book)) + if (auto listeners = registry_.get().getOrderBookDB().makeBookListeners(book)) { listeners->addSubscriber(isrListener); } @@ -4004,7 +4015,7 @@ NetworkOPsImp::subBook(InfoSub::ref isrListener, Book const& book) bool NetworkOPsImp::unsubBook(std::uint64_t uSeq, Book const& book) { - if (auto listeners = registry_.getOrderBookDB().getBookListeners(book)) + if (auto listeners = registry_.get().getOrderBookDB().getBookListeners(book)) listeners->removeSubscriber(uSeq); return true; @@ -4023,7 +4034,7 @@ NetworkOPsImp::acceptLedger(std::optional consensusDe // FIXME Could we improve on this and remove the need for a specialized // API in Consensus? beginConsensus(m_ledgerMaster.getClosedLedger()->header().hash, {}); - mConsensus.simulate(registry_.timeKeeper().closeTime(), consensusDelay); + mConsensus.simulate(registry_.get().getTimeKeeper().closeTime(), consensusDelay); return m_ledgerMaster.getCurrentLedger()->header().seq; } @@ -4038,11 +4049,11 @@ NetworkOPsImp::subLedger(InfoSub::ref isrListener, Json::Value& jvResult) jvResult[jss::ledger_time] = Json::Value::UInt(lpClosed->header().closeTime.time_since_epoch().count()); if (!lpClosed->rules().enabled(featureXRPFees)) - jvResult[jss::fee_ref] = Config::FEE_UNITS_DEPRECATED; + jvResult[jss::fee_ref] = FEE_UNITS_DEPRECATED; jvResult[jss::fee_base] = lpClosed->fees().base.jsonClipped(); jvResult[jss::reserve_base] = lpClosed->fees().reserve.jsonClipped(); jvResult[jss::reserve_inc] = lpClosed->fees().increment.jsonClipped(); - jvResult[jss::network_id] = registry_.getNetworkIDService().getNetworkID(); + jvResult[jss::network_id] = registry_.get().getNetworkIDService().getNetworkID(); if (lpClosed->rules().enabled(featureSmartEscrow)) { jvResult[jss::extension_compute] = lpClosed->fees().extensionComputeLimit; @@ -4053,10 +4064,10 @@ NetworkOPsImp::subLedger(InfoSub::ref isrListener, Json::Value& jvResult) if ((mMode >= OperatingMode::SYNCING) && !isNeedNetworkLedger()) { - jvResult[jss::validated_ledgers] = registry_.getLedgerMaster().getCompleteLedgers(); + jvResult[jss::validated_ledgers] = registry_.get().getLedgerMaster().getCompleteLedgers(); } - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sLedger].emplace(isrListener->getSeq(), isrListener).second; } @@ -4064,7 +4075,7 @@ NetworkOPsImp::subLedger(InfoSub::ref isrListener, Json::Value& jvResult) bool NetworkOPsImp::subBookChanges(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sBookChanges].emplace(isrListener->getSeq(), isrListener).second; } @@ -4072,23 +4083,23 @@ NetworkOPsImp::subBookChanges(InfoSub::ref isrListener) bool NetworkOPsImp::unsubLedger(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sLedger].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sLedger].erase(uSeq) != 0u; } // <-- bool: true=erased, false=was not there bool NetworkOPsImp::unsubBookChanges(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sBookChanges].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sBookChanges].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subManifests(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sManifests].emplace(isrListener->getSeq(), isrListener).second; } @@ -4096,8 +4107,8 @@ NetworkOPsImp::subManifests(InfoSub::ref isrListener) bool NetworkOPsImp::unsubManifests(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sManifests].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sManifests].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there @@ -4112,16 +4123,16 @@ NetworkOPsImp::subServer(InfoSub::ref isrListener, Json::Value& jvResult, bool a // CHECKME: is it necessary to provide a random number here? beast::rngfill(uRandom.begin(), uRandom.size(), crypto_prng()); - auto const& feeTrack = registry_.getFeeTrack(); + auto const& feeTrack = registry_.get().getFeeTrack(); jvResult[jss::random] = to_string(uRandom); jvResult[jss::server_status] = strOperatingMode(admin); jvResult[jss::load_base] = feeTrack.getLoadBase(); jvResult[jss::load_factor] = feeTrack.getLoadFactor(); jvResult[jss::hostid] = getHostId(admin); jvResult[jss::pubkey_node] = - toBase58(TokenType::NodePublic, registry_.app().nodeIdentity().first); + toBase58(TokenType::NodePublic, registry_.get().getApp().nodeIdentity().first); - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sServer].emplace(isrListener->getSeq(), isrListener).second; } @@ -4129,15 +4140,15 @@ NetworkOPsImp::subServer(InfoSub::ref isrListener, Json::Value& jvResult, bool a bool NetworkOPsImp::unsubServer(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sServer].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sServer].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subTransactions(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sTransactions].emplace(isrListener->getSeq(), isrListener).second; } @@ -4145,15 +4156,15 @@ NetworkOPsImp::subTransactions(InfoSub::ref isrListener) bool NetworkOPsImp::unsubTransactions(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sTransactions].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sTransactions].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subRTTransactions(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sRTTransactions].emplace(isrListener->getSeq(), isrListener).second; } @@ -4161,15 +4172,15 @@ NetworkOPsImp::subRTTransactions(InfoSub::ref isrListener) bool NetworkOPsImp::unsubRTTransactions(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sRTTransactions].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sRTTransactions].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subValidations(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sValidations].emplace(isrListener->getSeq(), isrListener).second; } @@ -4183,15 +4194,15 @@ NetworkOPsImp::stateAccounting(Json::Value& obj) bool NetworkOPsImp::unsubValidations(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sValidations].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sValidations].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subPeerStatus(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sPeerStatus].emplace(isrListener->getSeq(), isrListener).second; } @@ -4199,15 +4210,15 @@ NetworkOPsImp::subPeerStatus(InfoSub::ref isrListener) bool NetworkOPsImp::unsubPeerStatus(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sPeerStatus].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sPeerStatus].erase(uSeq) != 0u; } // <-- bool: true=added, false=already there bool NetworkOPsImp::subConsensus(InfoSub::ref isrListener) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); return mStreamMaps[sConsensusPhase].emplace(isrListener->getSeq(), isrListener).second; } @@ -4215,16 +4226,16 @@ NetworkOPsImp::subConsensus(InfoSub::ref isrListener) bool NetworkOPsImp::unsubConsensus(std::uint64_t uSeq) { - std::lock_guard sl(mSubLock); - return mStreamMaps[sConsensusPhase].erase(uSeq); + std::lock_guard const sl(mSubLock); + return mStreamMaps[sConsensusPhase].erase(uSeq) != 0u; } InfoSub::pointer NetworkOPsImp::findRpcSub(std::string const& strUrl) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); - subRpcMapType::iterator it = mRpcSubMap.find(strUrl); + subRpcMapType::iterator const it = mRpcSubMap.find(strUrl); if (it != mRpcSubMap.end()) return it->second; @@ -4235,7 +4246,7 @@ NetworkOPsImp::findRpcSub(std::string const& strUrl) InfoSub::pointer NetworkOPsImp::addRpcSub(std::string const& strUrl, InfoSub::ref rspEntry) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); mRpcSubMap.emplace(strUrl, rspEntry); @@ -4245,7 +4256,7 @@ NetworkOPsImp::addRpcSub(std::string const& strUrl, InfoSub::ref rspEntry) bool NetworkOPsImp::tryRemoveRpcSub(std::string const& strUrl) { - std::lock_guard sl(mSubLock); + std::lock_guard const sl(mSubLock); auto pInfo = findRpcSub(strUrl); if (!pInfo) @@ -4306,7 +4317,7 @@ NetworkOPsImp::getBookPage( STAmount saDirRate; auto const rate = transferRate(view, book.out.account); - auto viewJ = registry_.journal("View"); + auto viewJ = registry_.get().getJournal("View"); while (!bDone && iLimit-- > 0) { @@ -4433,7 +4444,7 @@ NetworkOPsImp::getBookPage( .setJson(jvOffer[jss::taker_pays_funded]); } - STAmount saOwnerPays = (parityRate == offerRate) + STAmount const saOwnerPays = (parityRate == offerRate) ? saTakerGetsFunded : std::min(saOwnerFunds, multiply(saTakerGetsFunded, offerRate)); @@ -4606,7 +4617,7 @@ NetworkOPsImp::collect_metrics() std::chrono::steady_clock::now() - start); counters[static_cast(mode)].dur += current; - std::lock_guard lock(m_statsMutex); + std::lock_guard const lock(m_statsMutex); m_stats.disconnected_duration.set( counters[static_cast(OperatingMode::DISCONNECTED)].dur.count()); m_stats.connected_duration.set( @@ -4634,7 +4645,7 @@ NetworkOPsImp::StateAccounting::mode(OperatingMode om) { auto now = std::chrono::steady_clock::now(); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); ++counters_[static_cast(om)].transitions; if (om == OperatingMode::FULL && counters_[static_cast(om)].transitions == 1) { @@ -4667,7 +4678,7 @@ NetworkOPsImp::StateAccounting::json(Json::Value& obj) const state[jss::duration_us] = std::to_string(counters[i].dur.count()); } obj[jss::server_state_duration_us] = std::to_string(current.count()); - if (initialSync) + if (initialSync != 0u) obj[jss::initial_sync_duration_us] = std::to_string(initialSync); } @@ -4679,11 +4690,11 @@ make_NetworkOPs( NetworkOPs::clock_type& clock, bool standalone, std::size_t minPeerCount, - bool startvalid, - JobQueue& job_queue, + bool startValid, + JobQueue& jobQueue, LedgerMaster& ledgerMaster, ValidatorKeys const& validatorKeys, - boost::asio::io_context& io_svc, + boost::asio::io_context& ioCtx, beast::Journal journal, beast::insight::Collector::ptr const& collector) { @@ -4692,11 +4703,11 @@ make_NetworkOPs( clock, standalone, minPeerCount, - startvalid, - job_queue, + startValid, + jobQueue, ledgerMaster, validatorKeys, - io_svc, + ioCtx, journal, collector); } diff --git a/src/xrpld/app/misc/SHAMapStore.h b/src/xrpld/app/misc/SHAMapStore.h index 67477593cb..b377538f62 100644 --- a/src/xrpld/app/misc/SHAMapStore.h +++ b/src/xrpld/app/misc/SHAMapStore.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include #include #include diff --git a/src/xrpld/app/misc/SHAMapStoreImp.cpp b/src/xrpld/app/misc/SHAMapStoreImp.cpp index 13746369f5..140f260d56 100644 --- a/src/xrpld/app/misc/SHAMapStoreImp.cpp +++ b/src/xrpld/app/misc/SHAMapStoreImp.cpp @@ -16,14 +16,14 @@ namespace xrpl { void SHAMapStoreImp::SavedStateDB::init(BasicConfig const& config, std::string const& dbName) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); initStateDB(sqlDb_, config, dbName); } LedgerIndex SHAMapStoreImp::SavedStateDB::getCanDelete() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return xrpl::getCanDelete(sqlDb_); } @@ -31,7 +31,7 @@ SHAMapStoreImp::SavedStateDB::getCanDelete() LedgerIndex SHAMapStoreImp::SavedStateDB::setCanDelete(LedgerIndex canDelete) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return xrpl::setCanDelete(sqlDb_, canDelete); } @@ -39,7 +39,7 @@ SHAMapStoreImp::SavedStateDB::setCanDelete(LedgerIndex canDelete) SavedState SHAMapStoreImp::SavedStateDB::getState() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return xrpl::getSavedState(sqlDb_); } @@ -47,14 +47,14 @@ SHAMapStoreImp::SavedStateDB::getState() void SHAMapStoreImp::SavedStateDB::setState(SavedState const& state) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); xrpl::setSavedState(sqlDb_, state); } void SHAMapStoreImp::SavedStateDB::setLastRotated(LedgerIndex seq) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); xrpl::setLastRotated(sqlDb_, seq); } @@ -93,7 +93,7 @@ SHAMapStoreImp::SHAMapStoreImp( get_if_exists(section, "online_delete", deleteInterval_); - if (deleteInterval_) + if (deleteInterval_ != 0u) { // Configuration that affects the behavior of online delete get_if_exists(section, "delete_batch", deleteBatch_); @@ -138,7 +138,7 @@ SHAMapStoreImp::makeNodeStore(int readThreads) auto nscfg = app_.config().section(ConfigSection::nodeDatabase()); std::unique_ptr db; - if (deleteInterval_) + if (deleteInterval_ != 0u) { SavedState state = state_db_.getState(); auto writableBackend = makeBackendRotating(state.writableDb); @@ -158,7 +158,7 @@ SHAMapStoreImp::makeNodeStore(int readThreads) std::move(writableBackend), std::move(archiveBackend), nscfg, - app_.logs().journal(nodeStoreName_)); + app_.getJournal(nodeStoreName_)); fdRequired_ += dbr->fdRequired(); dbRotating_ = dbr.get(); db.reset(dynamic_cast(dbr.release())); @@ -170,7 +170,7 @@ SHAMapStoreImp::makeNodeStore(int readThreads) scheduler_, readThreads, nscfg, - app_.logs().journal(nodeStoreName_)); + app_.getJournal(nodeStoreName_)); fdRequired_ += db->fdRequired(); } return db; @@ -180,7 +180,7 @@ void SHAMapStoreImp::onLedgerClosed(std::shared_ptr const& ledger) { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); newLedger_ = ledger; working_ = true; } @@ -209,7 +209,7 @@ SHAMapStoreImp::copyNode(std::uint64_t& nodeCount, SHAMapTreeNode const& node) // Copy a single record from node to dbRotating_ dbRotating_->fetchNodeObject( node.getHash().as_uint256(), 0, NodeStore::FetchType::synchronous, true); - if (!(++nodeCount % checkHealthInterval_)) + if ((++nodeCount % checkHealthInterval_) == 0u) { if (healthWait() == stopping) return false; @@ -254,7 +254,7 @@ SHAMapStoreImp::run() } LedgerIndex const validatedSeq = validatedLedger->header().seq; - if (!lastRotated) + if (lastRotated == 0u) { lastRotated = validatedSeq; state_db_.setLastRotated(lastRotated); @@ -338,7 +338,7 @@ SHAMapStoreImp::run() void SHAMapStoreImp::dbPaths() { - Section section{app_.config().section(ConfigSection::nodeDatabase())}; + Section const section{app_.config().section(ConfigSection::nodeDatabase())}; boost::filesystem::path dbPath = get(section, "path"); if (boost::filesystem::exists(dbPath)) @@ -386,15 +386,15 @@ SHAMapStoreImp::dbPaths() it != boost::filesystem::directory_iterator(); ++it) { - if (!state.writableDb.compare(it->path().string())) + if (state.writableDb.compare(it->path().string()) == 0) { writableDbExists = true; } - else if (!state.archiveDb.compare(it->path().string())) + else if (state.archiveDb.compare(it->path().string()) == 0) { archiveDbExists = true; } - else if (!dbPrefix_.compare(it->path().stem().string())) + else if (dbPrefix_.compare(it->path().stem().string()) == 0) { pathsToDelete.push_back(it->path()); } @@ -426,7 +426,7 @@ SHAMapStoreImp::dbPaths() } // The necessary directories exist. Now, remove any others. - for (boost::filesystem::path& p : pathsToDelete) + for (boost::filesystem::path const& p : pathsToDelete) boost::filesystem::remove_all(p); } @@ -453,7 +453,7 @@ SHAMapStoreImp::makeBackendRotating(std::string path) section, megabytes(app_.config().getValueFor(SizedItem::burstSize, std::nullopt)), scheduler_, - app_.logs().journal(nodeStoreName_))}; + app_.getJournal(nodeStoreName_))}; backend->open(); return backend; } @@ -595,7 +595,7 @@ SHAMapStoreImp::stop() if (thread_.joinable()) { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); stop_ = true; cond_.notify_one(); } @@ -608,7 +608,7 @@ SHAMapStoreImp::minimumOnline() const { // minimumOnline_ with 0 value is equivalent to unknown/not set. // Don't attempt to acquire ledgers if that value is unknown. - if (deleteInterval_ && minimumOnline_) + if ((deleteInterval_ != 0u) && (minimumOnline_ != 0u)) return minimumOnline_.load(); return app_.getLedgerMaster().minSqlSeq(); } diff --git a/src/xrpld/app/misc/TxQ.h b/src/xrpld/app/misc/TxQ.h index 4f02d6d617..772d51b959 100644 --- a/src/xrpld/app/misc/TxQ.h +++ b/src/xrpld/app/misc/TxQ.h @@ -146,23 +146,23 @@ public: explicit Metrics() = default; /// Number of transactions in the queue - std::size_t txCount; + std::size_t txCount{}; /// Max transactions currently allowed in queue std::optional txQMaxSize; /// Number of transactions currently in the open ledger - std::size_t txInLedger; + std::size_t txInLedger{}; /// Number of transactions expected per ledger - std::size_t txPerLedger; + std::size_t txPerLedger{}; /// Reference transaction fee level - FeeLevel64 referenceFeeLevel; + FeeLevel64 referenceFeeLevel{}; /// Minimum fee level for a transaction to be considered for /// the open ledger or the queue - FeeLevel64 minProcessingFeeLevel; + FeeLevel64 minProcessingFeeLevel{}; /// Median fee level of the last ledger - FeeLevel64 medFeeLevel; + FeeLevel64 medFeeLevel{}; /// Minimum fee level to get into the current open ledger, /// bypassing the queue - FeeLevel64 openLedgerFeeLevel; + FeeLevel64 openLedgerFeeLevel{}; }; /** @@ -511,7 +511,7 @@ private: their `retriesRemaining` forced down as part of the penalty. */ - int retriesRemaining; + int retriesRemaining{retriesAllowed}; /// Flags provided to `apply`. If the transaction is later /// attempted with different flags, it will need to be /// `preflight`ed again. @@ -693,12 +693,12 @@ private: }; // Helper function returns requiredFeeLevel. - FeeLevel64 + static FeeLevel64 getRequiredFeeLevel( OpenView& view, ApplyFlags flags, FeeMetrics::Snapshot const& metricsSnapshot, - std::lock_guard const& lock) const; + std::lock_guard const& lock); // Helper function for TxQ::apply. If a transaction's fee is high enough, // attempt to directly apply that transaction to the ledger. diff --git a/src/xrpld/app/misc/ValidatorList.h b/src/xrpld/app/misc/ValidatorList.h index e774da4713..9b7670a482 100644 --- a/src/xrpld/app/misc/ValidatorList.h +++ b/src/xrpld/app/misc/ValidatorList.h @@ -157,7 +157,7 @@ class ValidatorList std::vector list; std::vector manifests; - std::size_t sequence; + std::size_t sequence{}; TimeKeeper::time_point validFrom; TimeKeeper::time_point validUntil; std::string siteUri; @@ -173,7 +173,7 @@ class ValidatorList struct PublisherListCollection { - PublisherStatus status; + PublisherStatus status = PublisherStatus::unavailable; /* The `current` VL is the one which 1. Has the largest sequence number that @@ -223,7 +223,7 @@ class ValidatorList hash_set trustedMasterKeys_; // Minimum number of lists on which a trusted validator must appear on - std::size_t listThreshold_; + std::size_t listThreshold_{1}; // The current list of trusted signing keys. For those validators using // a manifest, the signing key is the ephemeral key. For the ones using @@ -646,7 +646,7 @@ public: QuorumKeys getQuorumKeys() const { - shared_lock read_lock{mutex_}; + shared_lock const read_lock{mutex_}; return {quorum_, trustedSigningKeys_}; } diff --git a/src/xrpld/app/misc/ValidatorSite.h b/src/xrpld/app/misc/ValidatorSite.h index 9d9031b9a2..270df6f9f0 100644 --- a/src/xrpld/app/misc/ValidatorSite.h +++ b/src/xrpld/app/misc/ValidatorSite.h @@ -85,12 +85,12 @@ private: /// when we've gotten a temp redirect std::shared_ptr activeResource; - unsigned short redirCount; + unsigned short redirCount{0}; std::chrono::minutes refreshInterval; clock_type::time_point nextRefresh; std::optional lastRefreshStatus; endpoint_type lastRequestEndpoint; - bool lastRequestSuccessful; + bool lastRequestSuccessful{false}; }; Application& app_; diff --git a/src/xrpld/app/misc/detail/AccountTxPaging.cpp b/src/xrpld/app/misc/detail/AccountTxPaging.cpp index 4e79b53ed0..bb0a09426a 100644 --- a/src/xrpld/app/misc/detail/AccountTxPaging.cpp +++ b/src/xrpld/app/misc/detail/AccountTxPaging.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/src/xrpld/app/misc/detail/AmendmentTable.cpp b/src/xrpld/app/misc/detail/AmendmentTable.cpp index 2b7005f4cc..afecb08b24 100644 --- a/src/xrpld/app/misc/detail/AmendmentTable.cpp +++ b/src/xrpld/app/misc/detail/AmendmentTable.cpp @@ -632,7 +632,7 @@ AmendmentTableImpl::get(uint256 const& amendmentHash, std::lock_guardvote != AmendmentVote::down) + if ((s == nullptr) || s->vote != AmendmentVote::down) return false; s->vote = AmendmentVote::up; persistVote(amendment, s->name, s->vote); @@ -685,7 +685,7 @@ AmendmentTableImpl::unVeto(uint256 const& amendment) bool AmendmentTableImpl::enable(uint256 const& amendment) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); AmendmentState& s = add(amendment, lock); if (s.enabled) @@ -705,30 +705,30 @@ AmendmentTableImpl::enable(uint256 const& amendment) bool AmendmentTableImpl::isEnabled(uint256 const& amendment) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); AmendmentState const* s = get(amendment, lock); - return s && s->enabled; + return (s != nullptr) && s->enabled; } bool AmendmentTableImpl::isSupported(uint256 const& amendment) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); AmendmentState const* s = get(amendment, lock); - return s && s->supported; + return (s != nullptr) && s->supported; } bool AmendmentTableImpl::hasUnsupportedEnabled() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return unsupportedEnabled_; } std::optional AmendmentTableImpl::firstUnsupportedExpected() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return firstUnsupportedExpected_; } @@ -740,7 +740,7 @@ AmendmentTableImpl::doValidation(std::set const& enabled) const std::vector amendments; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); amendments.reserve(amendmentMap_.size()); for (auto const& e : amendmentMap_) { @@ -778,7 +778,7 @@ AmendmentTableImpl::doVoting( << enabledAmendments.size() << ", " << majorityAmendments.size() << ", " << valSet.size(); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // Keep a record of the votes we received. previousTrustedVotes_.recordVotes(rules, valSet, closeTime, j_, lock); @@ -860,7 +860,7 @@ AmendmentTableImpl::doVoting( bool AmendmentTableImpl::needValidatedLedger(LedgerIndex ledgerSeq) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // Is there a ledger in which an amendment could have been enabled // between these two ledger sequences? @@ -877,7 +877,7 @@ AmendmentTableImpl::doValidatedLedger( for (auto& e : enabled) enable(e); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // Remember the ledger sequence of this update. lastUpdateSeq_ = ledgerSeq; @@ -888,7 +888,7 @@ AmendmentTableImpl::doValidatedLedger( firstUnsupportedExpected_.reset(); for (auto const& [hash, time] : majority) { - AmendmentState& s = add(hash, lock); + AmendmentState const& s = add(hash, lock); if (s.enabled) continue; @@ -908,7 +908,7 @@ AmendmentTableImpl::doValidatedLedger( void AmendmentTableImpl::trustChanged(hash_set const& allTrusted) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); previousTrustedVotes_.trustChanged(allTrusted, lock); } @@ -946,7 +946,7 @@ AmendmentTableImpl::injectJson( v[jss::count] = votesFor; v[jss::validations] = votesTotal; - if (votesNeeded) + if (votesNeeded != 0) v[jss::threshold] = votesNeeded; } } @@ -956,7 +956,7 @@ AmendmentTableImpl::getJson(bool isAdmin) const { Json::Value ret(Json::objectValue); { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); for (auto const& e : amendmentMap_) { injectJson( @@ -972,9 +972,9 @@ AmendmentTableImpl::getJson(uint256 const& amendmentID, bool isAdmin) const Json::Value ret = Json::objectValue; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); AmendmentState const* a = get(amendmentID, lock); - if (a) + if (a != nullptr) { Json::Value& jAmendment = (ret[to_string(amendmentID)] = Json::objectValue); injectJson(jAmendment, amendmentID, *a, isAdmin, lock); diff --git a/src/xrpld/app/misc/detail/Transaction.cpp b/src/xrpld/app/misc/detail/Transaction.cpp index 35b49504d5..f0cabf0fa6 100644 --- a/src/xrpld/app/misc/detail/Transaction.cpp +++ b/src/xrpld/app/misc/detail/Transaction.cpp @@ -16,7 +16,7 @@ Transaction::Transaction( std::shared_ptr const& stx, std::string& reason, Application& app) noexcept - : mTransaction(stx), mApp(app), j_(app.journal("Ledger")) + : mTransaction(stx), mApp(app), j_(app.getJournal("Ledger")) { try { @@ -133,7 +133,7 @@ Transaction::getJson(JsonOptions options, bool binary) const Json::Value ret(mTransaction->getJson(options & ~JsonOptions::include_date, binary)); // NOTE Binary STTx::getJson output might not be a JSON object - if (ret.isObject() && mLedgerIndex) + if (ret.isObject() && (mLedgerIndex != 0u)) { if (!(options & JsonOptions::disable_API_prior_V2)) { diff --git a/src/xrpld/app/misc/detail/TxQ.cpp b/src/xrpld/app/misc/detail/TxQ.cpp index 020fa501d5..3494a4b7bd 100644 --- a/src/xrpld/app/misc/detail/TxQ.cpp +++ b/src/xrpld/app/misc/detail/TxQ.cpp @@ -20,8 +20,8 @@ static FeeLevel64 getFeeLevelPaid(ReadView const& view, STTx const& tx) { auto const [baseFee, effectiveFeePaid] = [&view, &tx]() { - XRPAmount baseFee = calculateBaseFee(view, tx); - XRPAmount feePaid = tx[sfFee].xrp(); + XRPAmount const baseFee = calculateBaseFee(view, tx); + XRPAmount const feePaid = tx[sfFee].xrp(); // If baseFee is 0 then the cost of a basic transaction is free, but we // need the effective fee level to be non-zero. @@ -121,7 +121,7 @@ TxQ::FeeMetrics::update( txnsExpected_ = std::min(next, maximumTxnCount_.value_or(next)); } - if (!size) + if (size == 0) { escalationMultiplier_ = setup.minimumEscalationMultiplier; } @@ -172,7 +172,7 @@ sumOfFirstSquares(std::size_t xIn) // We expect that size_t == std::uint64_t but, just in case, guarantee // we lose no bits. - std::uint64_t x{xIn}; + std::uint64_t const x{xIn}; // If x is anywhere on the order of 2^^21, it's going // to completely dominate the computation and is likely @@ -185,16 +185,16 @@ sumOfFirstSquares(std::size_t xIn) } // Unit tests for sumOfSquares() -static_assert(sumOfFirstSquares(1).first == true); +static_assert(sumOfFirstSquares(1).first); static_assert(sumOfFirstSquares(1).second == 1); -static_assert(sumOfFirstSquares(2).first == true); +static_assert(sumOfFirstSquares(2).first); static_assert(sumOfFirstSquares(2).second == 5); -static_assert(sumOfFirstSquares(0x1FFFFF).first == true, ""); +static_assert(sumOfFirstSquares(0x1FFFFF).first, ""); static_assert(sumOfFirstSquares(0x1FFFFF).second == 0x2AAAA8AAAAB00000ul, ""); -static_assert(sumOfFirstSquares(0x200000).first == false, ""); +static_assert(!sumOfFirstSquares(0x200000).first, ""); static_assert(sumOfFirstSquares(0x200000).second == std::numeric_limits::max(), ""); } // namespace detail @@ -257,7 +257,6 @@ TxQ::MaybeTx::MaybeTx( , account(txn_->getAccountID(sfAccount)) , lastValid(getLastLedgerSequence(*txn_)) , seqProxy(txn_->getSeqProxy()) - , retriesRemaining(retriesAllowed) , flags(flags_) , pfResult(pfResult_) { @@ -268,7 +267,7 @@ TxQ::MaybeTx::apply(Application& app, OpenView& view, beast::Journal j) { // If the rules or flags change, preflight again XRPL_ASSERT(pfResult, "xrpl::TxQ::MaybeTx::apply : preflight result is set"); - NumberSO stNumberSO{view.rules().enabled(fixUniversalNumber)}; + NumberSO const stNumberSO{view.rules().enabled(fixUniversalNumber)}; if (pfResult->rules != view.rules() || pfResult->flags != flags) { @@ -308,10 +307,11 @@ TxQ::MaybeTx& TxQ::TxQAccount::add(MaybeTx&& txn) { auto const seqProx = txn.seqProxy; + [[maybe_unused]] auto const* txnPtr = &txn; auto result = transactions.emplace(seqProx, std::move(txn)); XRPL_ASSERT(result.second, "xrpl::TxQ::TxQAccount::add : emplace succeeded"); - XRPL_ASSERT(&result.first->second != &txn, "xrpl::TxQ::TxQAccount::add : transaction moved"); + XRPL_ASSERT(&result.first->second != txnPtr, "xrpl::TxQ::TxQAccount::add : transaction moved"); return result.first->second; } @@ -357,7 +357,7 @@ TxQ::canBeHeld( // queue yet, but should be added in the future. // tapFAIL_HARD transactions are never held if (tx.isFieldPresent(sfPreviousTxnID) || tx.isFieldPresent(sfAccountTxnID) || - (flags & tapFAIL_HARD)) + ((flags & tapFAIL_HARD) != 0u)) return telCAN_NOT_QUEUE; { @@ -690,7 +690,7 @@ TxQ::apply( ApplyFlags flags, beast::Journal j) { - NumberSO stNumberSO{view.rules().enabled(fixUniversalNumber)}; + NumberSO const stNumberSO{view.rules().enabled(fixUniversalNumber)}; // See if the transaction is valid, properly formed, // etc. before doing potentially expensive queue @@ -735,7 +735,7 @@ TxQ::apply( return {terPRE_TICKET, false}; } - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // accountIter is not const because it may be updated further down. AccountMap::iterator accountIter = byAccount_.find(account); @@ -1286,7 +1286,7 @@ TxQ::apply( void TxQ::processClosedLedger(Application& app, ReadView const& view, bool timeLeap) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); feeMetrics_.update(app, view, timeLeap, setup_); auto const& snapshot = feeMetrics_.getSnapshot(); @@ -1365,7 +1365,7 @@ TxQ::accept(Application& app, OpenView& view) auto ledgerChanged = false; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const metricsSnapshot = feeMetrics_.getSnapshot(); @@ -1529,7 +1529,7 @@ TxQ::accept(Application& app, OpenView& view) SeqProxy TxQ::nextQueuableSeq(std::shared_ptr const& sleAccount) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return nextQueuableSeqImpl(sleAccount, lock); } @@ -1591,7 +1591,7 @@ TxQ::getRequiredFeeLevel( OpenView& view, ApplyFlags flags, FeeMetrics::Snapshot const& metricsSnapshot, - std::lock_guard const& lock) const + std::lock_guard const& lock) { return FeeMetrics::scaleFeeLevel(metricsSnapshot, view); } @@ -1620,7 +1620,7 @@ TxQ::tryDirectApply( return {}; FeeLevel64 const requiredFeeLevel = [this, &view, flags]() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return getRequiredFeeLevel(view, flags, feeMetrics_.getSnapshot(), lock); }(); @@ -1644,9 +1644,9 @@ TxQ::tryDirectApply( { // If the applied transaction replaced a transaction in the // queue then remove the replaced transaction. - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); - AccountMap::iterator accountIter = byAccount_.find(account); + AccountMap::iterator const accountIter = byAccount_.find(account); if (accountIter != byAccount_.end()) { TxQAccount& txQAcct = accountIter->second; @@ -1693,7 +1693,7 @@ TxQ::getMetrics(OpenView const& view) const { Metrics result; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const snapshot = feeMetrics_.getSnapshot(); @@ -1714,7 +1714,7 @@ TxQ::getTxRequiredFeeAndSeq(OpenView const& view, std::shared_ptr co { auto const account = (*tx)[sfAccount]; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const snapshot = feeMetrics_.getSnapshot(); auto const baseFee = calculateBaseFee(view, *tx); @@ -1736,7 +1736,7 @@ TxQ::getAccountTxs(AccountID const& account) const { std::vector result; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); AccountMap::const_iterator const accountIter{byAccount_.find(account)}; @@ -1756,7 +1756,7 @@ TxQ::getTxs() const { std::vector result; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); result.reserve(byFee_.size()); @@ -1769,7 +1769,7 @@ TxQ::getTxs() const Json::Value TxQ::doRPC(Application& app) const { - auto const view = app.openLedger().current(); + auto const view = app.getOpenLedger().current(); if (!view) { BOOST_ASSERT(false); diff --git a/src/xrpld/app/misc/detail/ValidatorList.cpp b/src/xrpld/app/misc/detail/ValidatorList.cpp index 386b96387e..bed91afc44 100644 --- a/src/xrpld/app/misc/detail/ValidatorList.cpp +++ b/src/xrpld/app/misc/detail/ValidatorList.cpp @@ -109,7 +109,7 @@ ValidatorList::ValidatorList( , j_(j) , quorum_(minimumQuorum.value_or(1)) // Genesis ledger quorum , minimumQuorum_(minimumQuorum) - , listThreshold_(1) + { } @@ -132,12 +132,12 @@ ValidatorList::load( ")?" // end optional comment block ); - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; JLOG(j_.debug()) << "Loading configured trusted validator list publisher keys"; std::size_t count = 0; - for (auto key : publisherKeys) + for (auto const& key : publisherKeys) { JLOG(j_.trace()) << "Processing '" << key << "'"; @@ -181,7 +181,7 @@ ValidatorList::load( { // Want truncated result when dividing an odd integer listThreshold_ = (publisherLists_.size() < 3) ? 1 // - : publisherLists_.size() / 2 + 1; + : (publisherLists_.size() / 2) + 1; JLOG(j_.debug()) << "Validator list threshold computed as " << listThreshold_; } @@ -699,11 +699,11 @@ ValidatorList::sendValidatorList( { messageVersion = 1; } - if (!messageVersion) + if (messageVersion == 0u) return; auto const [newPeerSequence, numVLs] = buildValidatorListMessages( messageVersion, peerSequence, maxSequence, rawVersion, rawManifest, blobInfos, messages); - if (newPeerSequence) + if (newPeerSequence != 0u) { XRPL_ASSERT( !messages.empty(), @@ -901,7 +901,7 @@ ValidatorList::applyListsAndBroadcast( networkOPs.clearUNLBlocked(); } } - bool broadcast = disposition <= ListDisposition::known_sequence; + bool const broadcast = disposition <= ListDisposition::known_sequence; // this function is only called for PublicKeys which are not specified // in the config file (Note: Keys specified in the local config file are @@ -936,7 +936,7 @@ ValidatorList::applyLists( 1) return PublisherListStats{ListDisposition::unsupported_version}; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; PublisherListStats result; for (auto const& blobInfo : blobs) @@ -1106,7 +1106,7 @@ ValidatorList::applyList( // LCOV_EXCL_STOP } - PublicKey pubKey = *pubKeyOpt; + PublicKey const pubKey = *pubKeyOpt; if (result > ListDisposition::pending) { if (publisherLists_.contains(pubKey)) @@ -1238,7 +1238,7 @@ ValidatorList::loadLists() using namespace boost::filesystem; using namespace boost::system::errc; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; std::vector sites; sites.reserve(publisherLists_.size()); @@ -1256,7 +1256,7 @@ ValidatorList::loadLists() continue; auto size = file_size(fullPath, ec); - if (!ec && !size) + if (!ec && (size == 0u)) { // Treat an empty file as a missing file, because // nobody else is going to write it. @@ -1381,7 +1381,7 @@ ValidatorList::verify( bool ValidatorList::listed(PublicKey const& identity) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; auto const pubKey = validatorManifests_.getMasterKey(identity); return keyListings_.contains(pubKey); @@ -1397,16 +1397,16 @@ ValidatorList::trusted(ValidatorList::shared_lock const&, PublicKey const& ident bool ValidatorList::trusted(PublicKey const& identity) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return trusted(read_lock, identity); } std::optional ValidatorList::getListedKey(PublicKey const& identity) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; - auto const pubKey = validatorManifests_.getMasterKey(identity); + auto pubKey = validatorManifests_.getMasterKey(identity); if (keyListings_.contains(pubKey)) return pubKey; return std::nullopt; @@ -1415,7 +1415,7 @@ ValidatorList::getListedKey(PublicKey const& identity) const std::optional ValidatorList::getTrustedKey(ValidatorList::shared_lock const&, PublicKey const& identity) const { - auto const pubKey = validatorManifests_.getMasterKey(identity); + auto pubKey = validatorManifests_.getMasterKey(identity); if (trustedMasterKeys_.contains(pubKey)) return pubKey; return std::nullopt; @@ -1424,7 +1424,7 @@ ValidatorList::getTrustedKey(ValidatorList::shared_lock const&, PublicKey const& std::optional ValidatorList::getTrustedKey(PublicKey const& identity) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return getTrustedKey(read_lock, identity); } @@ -1432,15 +1432,15 @@ ValidatorList::getTrustedKey(PublicKey const& identity) const bool ValidatorList::trustedPublisher(PublicKey const& identity) const { - std::shared_lock read_lock{mutex_}; - return identity.size() && publisherLists_.contains(identity) && + std::shared_lock const read_lock{mutex_}; + return (identity.size() != 0u) && publisherLists_.contains(identity) && publisherLists_.at(identity).status < PublisherStatus::revoked; } std::optional ValidatorList::localPublicKey() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return localPubKey_; } @@ -1484,13 +1484,13 @@ ValidatorList::removePublisherList( std::size_t ValidatorList::count(ValidatorList::shared_lock const&) const { - return publisherLists_.size() + (!localPublisherList.list.empty()); + return publisherLists_.size() + static_cast(!localPublisherList.list.empty()); } std::size_t ValidatorList::count() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return count(read_lock); } @@ -1533,7 +1533,7 @@ ValidatorList::expires(ValidatorList::shared_lock const&) const if (!localPublisherList.list.empty()) { - PublisherList collection = localPublisherList; + PublisherList const collection = localPublisherList; // Unfetched auto const& current = collection; auto chainedExpiration = current.validUntil; @@ -1550,7 +1550,7 @@ ValidatorList::expires(ValidatorList::shared_lock const&) const std::optional ValidatorList::expires() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return expires(read_lock); } @@ -1559,7 +1559,7 @@ ValidatorList::getJson() const { Json::Value res(Json::objectValue); - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; res[jss::validation_quorum] = static_cast(quorum_); @@ -1649,7 +1649,7 @@ ValidatorList::getJson() const future.validFrom > timeKeeper_.now() + 600s, "xrpl::ValidatorList::getJson : minimum valid from"); } - if (remaining.size()) + if (remaining.size() != 0u) curr[jss::remaining] = std::move(remaining); } @@ -1687,7 +1687,7 @@ ValidatorList::getJson() const void ValidatorList::for_each_listed(std::function func) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; for (auto const& v : keyListings_) func(v.first, trusted(read_lock, v.first)); @@ -1703,7 +1703,7 @@ ValidatorList::for_each_available( std::size_t maxSequence, uint256 const& hash)> func) const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; for (auto const& [key, plCollection] : publisherLists_) { @@ -1727,7 +1727,7 @@ ValidatorList::getAvailable( std::string_view pubKey, std::optional forceVersion /* = {} */) { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; auto const keyBlob = strViewUnHex(pubKey); @@ -1851,7 +1851,7 @@ ValidatorList::updateTrusted( if (timeKeeper_.now() > closeTime + 30s) closeTime = timeKeeper_.now(); - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; // Rotate pending and remove expired published lists bool good = true; @@ -2023,28 +2023,28 @@ ValidatorList::updateTrusted( hash_set ValidatorList::getTrustedMasterKeys() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return trustedMasterKeys_; } std::size_t ValidatorList::getListThreshold() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return listThreshold_; } hash_set ValidatorList::getNegativeUNL() const { - std::shared_lock read_lock{mutex_}; + std::shared_lock const read_lock{mutex_}; return negativeUNL_; } void ValidatorList::setNegativeUNL(hash_set const& negUnl) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; negativeUNL_ = negUnl; } diff --git a/src/xrpld/app/misc/detail/ValidatorSite.cpp b/src/xrpld/app/misc/detail/ValidatorSite.cpp index 8db29c0bb0..a4623e7acc 100644 --- a/src/xrpld/app/misc/detail/ValidatorSite.cpp +++ b/src/xrpld/app/misc/detail/ValidatorSite.cpp @@ -60,10 +60,9 @@ ValidatorSite::Site::Resource::Resource(std::string uri_) : uri{std::move(uri_)} ValidatorSite::Site::Site(std::string uri) : loadedResource{std::make_shared(std::move(uri))} , startingResource{loadedResource} - , redirCount{0} , refreshInterval{default_refresh_interval} , nextRefresh{clock_type::now()} - , lastRequestSuccessful{false} + { } @@ -72,7 +71,7 @@ ValidatorSite::ValidatorSite( std::optional j, std::chrono::seconds timeout) : app_{app} - , j_{j ? *j : app_.logs().journal("ValidatorSite")} + , j_{j ? *j : app_.getJournal("ValidatorSite")} , timer_{app_.getIOContext()} , fetching_{false} , pending_{false} @@ -101,7 +100,7 @@ ValidatorSite::~ValidatorSite() bool ValidatorSite::missingSite(std::lock_guard const& lock_sites) { - auto const sites = app_.validators().loadLists(); + auto const sites = app_.getValidators().loadLists(); return sites.empty() || load(sites, lock_sites); } @@ -110,7 +109,7 @@ ValidatorSite::load(std::vector const& siteURIs) { JLOG(j_.debug()) << "Loading configured validator list sites"; - std::lock_guard lock{sites_mutex_}; + std::lock_guard const lock{sites_mutex_}; return load(siteURIs, lock); } @@ -147,8 +146,8 @@ ValidatorSite::load( void ValidatorSite::start() { - std::lock_guard l0{sites_mutex_}; - std::lock_guard l1{state_mutex_}; + std::lock_guard const l0{sites_mutex_}; + std::lock_guard const l1{state_mutex_}; if (timer_.expiry() == clock_type::time_point{}) setTimer(l0, l1); } @@ -216,7 +215,7 @@ ValidatorSite::makeRequest( sites_[siteIdx].activeResource = resource; std::shared_ptr sp; auto timeoutCancel = [this]() { - std::lock_guard lock_state{state_mutex_}; + std::lock_guard const lock_state{state_mutex_}; // docs indicate cancel_one() can throw, but this // should be reconsidered if it changes to noexcept try @@ -227,12 +226,13 @@ ValidatorSite::makeRequest( { } }; - auto onFetch = - [this, siteIdx, timeoutCancel]( - error_code const& err, endpoint_type const& endpoint, detail::response_type&& resp) { - timeoutCancel(); - onSiteFetch(err, endpoint, std::move(resp), siteIdx); - }; + auto onFetch = [this, siteIdx, timeoutCancel]( + error_code const& err, + endpoint_type const& endpoint, + detail::response_type const& resp) { + timeoutCancel(); + onSiteFetch(err, endpoint, resp, siteIdx); + }; auto onFetchFile = [this, siteIdx, timeoutCancel]( error_code const& err, std::string const& resp) { @@ -279,7 +279,7 @@ ValidatorSite::makeRequest( sp->run(); // start a timer for the request, which shouldn't take more // than requestTimeout_ to complete - std::lock_guard lock_state{state_mutex_}; + std::lock_guard const lock_state{state_mutex_}; timer_.expires_after(requestTimeout_); timer_.async_wait([this, siteIdx](boost::system::error_code const& ec) { this->onRequestTimeout(siteIdx, ec); @@ -293,7 +293,7 @@ ValidatorSite::onRequestTimeout(std::size_t siteIdx, error_code const& ec) return; { - std::lock_guard lock_site{sites_mutex_}; + std::lock_guard const lock_site{sites_mutex_}; // In some circumstances, both this function and the response // handler (onSiteFetch or onTextFetch) can get queued and // processed. In all observed cases, the response handler @@ -310,7 +310,7 @@ ValidatorSite::onRequestTimeout(std::size_t siteIdx, error_code const& ec) "already been processed"; } - std::lock_guard lock_state{state_mutex_}; + std::lock_guard const lock_state{state_mutex_}; if (auto sp = work_.lock()) sp->cancel(); } @@ -329,7 +329,7 @@ ValidatorSite::onTimer(std::size_t siteIdx, error_code const& ec) try { - std::lock_guard lock{sites_mutex_}; + std::lock_guard const lock{sites_mutex_}; sites_[siteIdx].nextRefresh = clock_type::now() + sites_[siteIdx].refreshInterval; sites_[siteIdx].redirCount = 0; // the WorkSSL client ctor can throw if SSL init fails @@ -394,8 +394,15 @@ ValidatorSite::parseJsonResponse( "xrpl::ValidatorSite::parseJsonResponse : version match"); auto const& uri = sites_[siteIdx].activeResource->uri; auto const hash = sha512Half(manifest, blobs, version); - auto const applyResult = app_.validators().applyListsAndBroadcast( - manifest, version, blobs, uri, hash, app_.overlay(), app_.getHashRouter(), app_.getOPs()); + auto const applyResult = app_.getValidators().applyListsAndBroadcast( + manifest, + version, + blobs, + uri, + hash, + app_.getOverlay(), + app_.getHashRouter(), + app_.getOPs()); sites_[siteIdx].lastRefreshStatus.emplace( Site::Status{clock_type::now(), applyResult.bestDisposition(), ""}); @@ -571,7 +578,7 @@ ValidatorSite::onSiteFetch( sites_[siteIdx].activeResource.reset(); } - std::lock_guard lock_state{state_mutex_}; + std::lock_guard const lock_state{state_mutex_}; fetching_ = false; if (!stopping_) setTimer(lock_sites, lock_state); @@ -584,7 +591,7 @@ ValidatorSite::onTextFetch( std::string const& res, std::size_t siteIdx) { - std::lock_guard lock_sites{sites_mutex_}; + std::lock_guard const lock_sites{sites_mutex_}; { try { @@ -608,7 +615,7 @@ ValidatorSite::onTextFetch( sites_[siteIdx].activeResource.reset(); } - std::lock_guard lock_state{state_mutex_}; + std::lock_guard const lock_state{state_mutex_}; fetching_ = false; if (!stopping_) setTimer(lock_sites, lock_state); @@ -624,7 +631,7 @@ ValidatorSite::getJson() const Json::Value jrr(Json::objectValue); Json::Value& jSites = (jrr[jss::validator_sites] = Json::arrayValue); { - std::lock_guard lock{sites_mutex_}; + std::lock_guard const lock{sites_mutex_}; for (Site const& site : sites_) { Json::Value& v = jSites.append(Json::objectValue); diff --git a/src/xrpld/app/misc/detail/WorkFile.h b/src/xrpld/app/misc/detail/WorkFile.h index 896d7ddc71..5113ec5f3a 100644 --- a/src/xrpld/app/misc/detail/WorkFile.h +++ b/src/xrpld/app/misc/detail/WorkFile.h @@ -44,18 +44,18 @@ private: //------------------------------------------------------------------------------ -WorkFile::WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb) +inline WorkFile::WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb) : path_(path), cb_(std::move(cb)), ios_(ios), strand_(boost::asio::make_strand(ios)) { } -WorkFile::~WorkFile() +inline WorkFile::~WorkFile() { if (cb_) cb_(make_error_code(boost::system::errc::interrupted), {}); } -void +inline void WorkFile::run() { if (!strand_.running_in_this_thread()) @@ -71,7 +71,7 @@ WorkFile::run() cb_ = nullptr; } -void +inline void WorkFile::cancel() { // Nothing to do. Either it finished in run, or it didn't start. diff --git a/src/xrpld/app/misc/detail/WorkPlain.h b/src/xrpld/app/misc/detail/WorkPlain.h index d1df5b4b3b..361a7b4513 100644 --- a/src/xrpld/app/misc/detail/WorkPlain.h +++ b/src/xrpld/app/misc/detail/WorkPlain.h @@ -35,7 +35,7 @@ private: //------------------------------------------------------------------------------ -WorkPlain::WorkPlain( +inline WorkPlain::WorkPlain( std::string const& host, std::string const& path, std::string const& port, @@ -47,7 +47,7 @@ WorkPlain::WorkPlain( { } -void +inline void WorkPlain::onConnect(error_code const& ec) { if (ec) diff --git a/src/xrpld/app/misc/make_NetworkOPs.h b/src/xrpld/app/misc/make_NetworkOPs.h index 7dce966f04..e250a147b7 100644 --- a/src/xrpld/app/misc/make_NetworkOPs.h +++ b/src/xrpld/app/misc/make_NetworkOPs.h @@ -21,11 +21,11 @@ make_NetworkOPs( NetworkOPs::clock_type& clock, bool standalone, std::size_t minPeerCount, - bool start_valid, - JobQueue& job_queue, + bool startValid, + JobQueue& jobQueue, LedgerMaster& ledgerMaster, ValidatorKeys const& validatorKeys, - boost::asio::io_context& io_svc, + boost::asio::io_context& ioCtx, beast::Journal journal, beast::insight::Collector::ptr const& collector); diff --git a/src/xrpld/app/rdb/backend/SQLiteDatabase.h b/src/xrpld/app/rdb/backend/SQLiteDatabase.h index 462b62de6e..05e0175732 100644 --- a/src/xrpld/app/rdb/backend/SQLiteDatabase.h +++ b/src/xrpld/app/rdb/backend/SQLiteDatabase.h @@ -327,10 +327,10 @@ public: * @param id Hash of the transaction. * @param range Range of ledgers to check, if present. * @param ec Default error code value. - * @return Transaction and its metadata if found, otherwise TxSearched::all + * @return Transaction and its metadata if found, otherwise TxSearched::All * if a range is provided and all ledgers from the range are present - * in the database, TxSearched::some if a range is provided and not - * all ledgers are present, TxSearched::unknown if the range is not + * in the database, TxSearched::Some if a range is provided and not + * all ledgers are present, TxSearched::Unknown if the range is not * provided or a deserializing error occurred. In the last case the * error code is returned via the ec parameter, in other cases the * default error code is not changed. @@ -405,7 +405,7 @@ public: transactionDbHasSpace(Config const& config); private: - ServiceRegistry& registry_; + std::reference_wrapper registry_; bool useTxTables_; beast::Journal j_; std::unique_ptr ledgerDb_, txdb_; diff --git a/src/xrpld/app/rdb/backend/detail/Node.cpp b/src/xrpld/app/rdb/backend/detail/Node.cpp index 09b4ebc241..b176588771 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.cpp +++ b/src/xrpld/app/rdb/backend/detail/Node.cpp @@ -1,7 +1,7 @@ #include #include +#include #include -#include #include #include @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -69,8 +70,8 @@ makeLedgerDBs( boost::format("PRAGMA cache_size=-%d;") % kilobytes(config.getValueFor(SizedItem::txnDBCache))); - if (!setup.standAlone || setup.startUp == StartUpType::LOAD || - setup.startUp == StartUpType::LOAD_FILE || setup.startUp == StartUpType::REPLAY) + if (!setup.standAlone || setup.startUp == StartUpType::Load || + setup.startUp == StartUpType::LoadFile || setup.startUp == StartUpType::Replay) { // Check if AccountTransactions has primary key std::string cid, name, type; @@ -104,7 +105,7 @@ makeLedgerDBs( std::optional getMinLedgerSeq(soci::session& session, TableType type) { - std::string query = "SELECT MIN(LedgerSeq) FROM " + to_string(type) + ";"; + std::string const query = "SELECT MIN(LedgerSeq) FROM " + to_string(type) + ";"; // SOCI requires boost::optional (not std::optional) as the parameter. boost::optional m; session << query, soci::into(m); @@ -114,7 +115,7 @@ getMinLedgerSeq(soci::session& session, TableType type) std::optional getMaxLedgerSeq(soci::session& session, TableType type) { - std::string query = "SELECT MAX(LedgerSeq) FROM " + to_string(type) + ";"; + std::string const query = "SELECT MAX(LedgerSeq) FROM " + to_string(type) + ";"; // SOCI requires boost::optional (not std::optional) as the parameter. boost::optional m; session << query, soci::into(m); @@ -168,7 +169,7 @@ saveValidatedLedger( std::shared_ptr const& ledger, bool current) { - auto j = app.journal("Ledger"); + auto j = app.getJournal("Ledger"); auto seq = ledger->header().seq; // TODO(tom): Fix this hard-coded SQL! @@ -221,7 +222,7 @@ saveValidatedLedger( app.getLedgerMaster().failedSave(seq, ledger->header().hash); // Clients can now trust the database for information about this // ledger sequence. - app.pendingSaves().finishWork(seq); + app.getPendingSaves().finishWork(seq); return false; } @@ -329,7 +330,7 @@ saveValidatedLedger( } { - static std::string addLedger( + static std::string const addLedger( R"sql(INSERT OR REPLACE INTO Ledgers (LedgerHash,LedgerSeq,PrevHash,TotalCoins,ClosingTime,PrevClosingTime, CloseTimeRes,CloseFlags,AccountSetHash,TransSetHash) @@ -575,7 +576,7 @@ getHashesByIndex(soci::session& session, LedgerIndex minSeq, LedgerIndex maxSeq, std::pair>, int> getTxHistory(soci::session& session, Application& app, LedgerIndex startIndex, int quantity) { - std::string sql = boost::str( + std::string const sql = boost::str( boost::format( "SELECT LedgerSeq, Status, RawTxn " "FROM Transactions ORDER BY LedgerSeq DESC LIMIT %u,%u;") % @@ -674,16 +675,16 @@ transactionsSQL( std::string maxClause; std::string minClause; - if (options.maxLedger) + if (options.ledgerRange.max != 0u) { maxClause = boost::str( - boost::format("AND AccountTransactions.LedgerSeq <= '%u'") % options.maxLedger); + boost::format("AND AccountTransactions.LedgerSeq <= '%u'") % options.ledgerRange.max); } - if (options.minLedger) + if (options.ledgerRange.min != 0u) { minClause = boost::str( - boost::format("AND AccountTransactions.LedgerSeq >= '%u'") % options.minLedger); + boost::format("AND AccountTransactions.LedgerSeq >= '%u'") % options.ledgerRange.min); } std::string sql; @@ -748,7 +749,7 @@ getAccountTxs( { RelationalDatabase::AccountTxs ret; - std::string sql = transactionsSQL( + std::string const sql = transactionsSQL( app, "AccountTransactions.LedgerSeq,Status,RawTxn,TxnMeta", options, @@ -872,7 +873,7 @@ getAccountTxsB( { std::vector ret; - std::string sql = transactionsSQL( + std::string const sql = transactionsSQL( app, "AccountTransactions.LedgerSeq,Status,RawTxn,TxnMeta", options, @@ -1020,14 +1021,14 @@ accountTxPage( ORDER BY AccountTransactions.LedgerSeq %s, AccountTransactions.TxnSeq %s LIMIT %u;)")) % - toBase58(options.account) % options.minLedger % options.maxLedger % order % order % - queryLimit); + toBase58(options.account) % options.ledgerRange.min % options.ledgerRange.max % order % + order % queryLimit); } else { char const* const compare = forward ? ">=" : "<="; - std::uint32_t const minLedger = forward ? findLedger + 1 : options.minLedger; - std::uint32_t const maxLedger = forward ? options.maxLedger : findLedger - 1; + std::uint32_t const minLedger = forward ? findLedger + 1 : options.ledgerRange.min; + std::uint32_t const maxLedger = forward ? options.ledgerRange.max : findLedger - 1; auto b58acct = toBase58(options.account); sql = boost::str( @@ -1191,7 +1192,7 @@ getTransaction( auto const got_data = session.got_data(); if ((!got_data || txn != soci::i_ok || meta != soci::i_ok) && !range) - return TxSearched::unknown; + return TxSearched::Unknown; if (!got_data) { @@ -1204,10 +1205,10 @@ getTransaction( soci::into(count, rti); if (!session.got_data() || rti != soci::i_ok) - return TxSearched::some; + return TxSearched::Some; - return count == (range->last() - range->first() + 1) ? TxSearched::all - : TxSearched::some; + return count == (range->last() - range->first() + 1) ? TxSearched::All + : TxSearched::Some; } convert(sociRawTxnBlob, rawTxn); @@ -1221,7 +1222,7 @@ getTransaction( if (!ledgerSeq) return std::pair{std::move(txn), nullptr}; - std::uint32_t inLedger = rangeCheckedCast(ledgerSeq.value()); + std::uint32_t const inLedger = rangeCheckedCast(ledgerSeq.value()); auto txMeta = std::make_shared(id, inLedger, rawMeta); @@ -1229,19 +1230,20 @@ getTransaction( } catch (std::exception& e) { - JLOG(app.journal("Ledger").warn()) + JLOG(app.getJournal("Ledger").warn()) << "Unable to deserialize transaction from raw SQL value. Error: " << e.what(); ec = rpcDB_DESERIALIZATION; } - return TxSearched::unknown; + return TxSearched::Unknown; } bool dbHasSpace(soci::session& session, Config const& config, beast::Journal j) { - boost::filesystem::space_info space = boost::filesystem::space(config.legacy("database_path")); + boost::filesystem::space_info const space = + boost::filesystem::space(config.legacy("database_path")); if (space.available < megabytes(512)) { @@ -1251,8 +1253,8 @@ dbHasSpace(soci::session& session, Config const& config, beast::Journal j) if (config.useTxTables()) { - DatabaseCon::Setup dbSetup = setup_DatabaseCon(config); - boost::filesystem::path dbPath = dbSetup.dataDir / TxDBName; + DatabaseCon::Setup const dbSetup = setup_DatabaseCon(config); + boost::filesystem::path const dbPath = dbSetup.dataDir / TxDBName; boost::system::error_code ec; std::optional dbSize = boost::filesystem::file_size(dbPath, ec); if (ec) @@ -1273,8 +1275,8 @@ dbHasSpace(soci::session& session, Config const& config, beast::Journal j) }(); std::uint32_t pageCount = 0; session << "PRAGMA page_count;", soci::into(pageCount); - std::uint32_t freePages = maxPages - pageCount; - std::uint64_t freeSpace = safe_cast(freePages) * pageSize; + std::uint32_t const freePages = maxPages - pageCount; + std::uint64_t const freeSpace = safe_cast(freePages) * pageSize; JLOG(j.info()) << "Transaction DB pathname: " << dbPath.string() << "; file size: " << dbSize.value_or(-1) << " bytes" << "; SQLite page size: " << pageSize << " bytes" diff --git a/src/xrpld/app/rdb/backend/detail/Node.h b/src/xrpld/app/rdb/backend/detail/Node.h index cb49a373bd..5fbabeca47 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.h +++ b/src/xrpld/app/rdb/backend/detail/Node.h @@ -1,8 +1,8 @@ #pragma once -#include #include +#include #include namespace xrpl { @@ -377,10 +377,10 @@ newestAccountTxPage( * @param id Hash of the transaction. * @param range Range of ledgers to check, if present. * @param ec Default value of error code. - * @return Transaction and its metadata if found, TxSearched::all if range + * @return Transaction and its metadata if found, TxSearched::All if range * given and all ledgers from range are present in the database, - * TxSearched::some if range given and not all ledgers are present, - * TxSearched::unknown if range not given or deserializing error + * TxSearched::Some if range given and not all ledgers are present, + * TxSearched::Unknown if range not given or deserializing error * occurred. In the last case error code modified in ec link * parameter, in other cases default error code remained. */ diff --git a/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp b/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp index 4f5365ea01..90d3b5a8e4 100644 --- a/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp +++ b/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp @@ -178,7 +178,8 @@ SQLiteDatabase::saveValidatedLedger(std::shared_ptr const& ledger, { if (existsLedger()) { - if (!detail::saveValidatedLedger(*ledgerDb_, txdb_, registry_.app(), ledger, current)) + if (!detail::saveValidatedLedger( + *ledgerDb_, txdb_, registry_.get().getApp(), ledger, current)) return false; } @@ -314,7 +315,7 @@ SQLiteDatabase::getTxHistory(LedgerIndex startIndex) if (existsTransaction()) { auto db = checkoutTransaction(); - auto const res = detail::getTxHistory(*db, registry_.app(), startIndex, 20).first; + auto const res = detail::getTxHistory(*db, registry_.get().getApp(), startIndex, 20).first; if (!res.empty()) return res; @@ -329,12 +330,13 @@ SQLiteDatabase::getOldestAccountTxs(AccountTxOptions const& options) if (!useTxTables_) return {}; - LedgerMaster& ledgerMaster = registry_.getLedgerMaster(); + LedgerMaster& ledgerMaster = registry_.get().getLedgerMaster(); if (existsTransaction()) { auto db = checkoutTransaction(); - return detail::getOldestAccountTxs(*db, registry_.app(), ledgerMaster, options, j_).first; + return detail::getOldestAccountTxs(*db, registry_.get().getApp(), ledgerMaster, options, j_) + .first; } return {}; @@ -346,12 +348,13 @@ SQLiteDatabase::getNewestAccountTxs(AccountTxOptions const& options) if (!useTxTables_) return {}; - LedgerMaster& ledgerMaster = registry_.getLedgerMaster(); + LedgerMaster& ledgerMaster = registry_.get().getLedgerMaster(); if (existsTransaction()) { auto db = checkoutTransaction(); - return detail::getNewestAccountTxs(*db, registry_.app(), ledgerMaster, options, j_).first; + return detail::getNewestAccountTxs(*db, registry_.get().getApp(), ledgerMaster, options, j_) + .first; } return {}; @@ -366,7 +369,7 @@ SQLiteDatabase::getOldestAccountTxsB(AccountTxOptions const& options) if (existsTransaction()) { auto db = checkoutTransaction(); - return detail::getOldestAccountTxsB(*db, registry_.app(), options, j_).first; + return detail::getOldestAccountTxsB(*db, registry_.get().getApp(), options, j_).first; } return {}; @@ -381,7 +384,7 @@ SQLiteDatabase::getNewestAccountTxsB(AccountTxOptions const& options) if (existsTransaction()) { auto db = checkoutTransaction(); - return detail::getNewestAccountTxsB(*db, registry_.app(), options, j_).first; + return detail::getNewestAccountTxsB(*db, registry_.get().getApp(), options, j_).first; } return {}; @@ -395,14 +398,15 @@ SQLiteDatabase::oldestAccountTxPage(AccountTxPageOptions const& options) static std::uint32_t const page_length(200); auto onUnsavedLedger = - std::bind(saveLedgerAsync, std::ref(registry_.app()), std::placeholders::_1); + std::bind(saveLedgerAsync, std::ref(registry_.get().getApp()), std::placeholders::_1); AccountTxs ret; - auto onTransaction = - [&ret, &app = registry_.app()]( - std::uint32_t ledger_index, std::string const& status, Blob&& rawTxn, Blob&& rawMeta) { - convertBlobsToTxResult( - ret, ledger_index, status, std::move(rawTxn), std::move(rawMeta), app); - }; + auto onTransaction = [&ret, &app = registry_.get().getApp()]( + std::uint32_t ledger_index, + std::string const& status, + Blob const& rawTxn, + Blob const& rawMeta) { + convertBlobsToTxResult(ret, ledger_index, status, rawTxn, rawMeta, app); + }; if (existsTransaction()) { @@ -424,14 +428,15 @@ SQLiteDatabase::newestAccountTxPage(AccountTxPageOptions const& options) static std::uint32_t const page_length(200); auto onUnsavedLedger = - std::bind(saveLedgerAsync, std::ref(registry_.app()), std::placeholders::_1); + std::bind(saveLedgerAsync, std::ref(registry_.get().getApp()), std::placeholders::_1); AccountTxs ret; - auto onTransaction = - [&ret, &app = registry_.app()]( - std::uint32_t ledger_index, std::string const& status, Blob&& rawTxn, Blob&& rawMeta) { - convertBlobsToTxResult( - ret, ledger_index, status, std::move(rawTxn), std::move(rawMeta), app); - }; + auto onTransaction = [&ret, &app = registry_.get().getApp()]( + std::uint32_t ledger_index, + std::string const& status, + Blob const& rawTxn, + Blob const& rawMeta) { + convertBlobsToTxResult(ret, ledger_index, status, rawTxn, rawMeta, app); + }; if (existsTransaction()) { @@ -453,7 +458,7 @@ SQLiteDatabase::oldestAccountTxPageB(AccountTxPageOptions const& options) static std::uint32_t const page_length(500); auto onUnsavedLedger = - std::bind(saveLedgerAsync, std::ref(registry_.app()), std::placeholders::_1); + std::bind(saveLedgerAsync, std::ref(registry_.get().getApp()), std::placeholders::_1); MetaTxsList ret; auto onTransaction = [&ret]( @@ -481,7 +486,7 @@ SQLiteDatabase::newestAccountTxPageB(AccountTxPageOptions const& options) static std::uint32_t const page_length(500); auto onUnsavedLedger = - std::bind(saveLedgerAsync, std::ref(registry_.app()), std::placeholders::_1); + std::bind(saveLedgerAsync, std::ref(registry_.get().getApp()), std::placeholders::_1); MetaTxsList ret; auto onTransaction = [&ret]( @@ -508,15 +513,15 @@ SQLiteDatabase::getTransaction( error_code_i& ec) { if (!useTxTables_) - return TxSearched::unknown; + return TxSearched::Unknown; if (existsTransaction()) { auto db = checkoutTransaction(); - return detail::getTransaction(*db, registry_.app(), id, range, ec); + return detail::getTransaction(*db, registry_.get().getApp(), id, range, ec); } - return TxSearched::unknown; + return TxSearched::Unknown; } SQLiteDatabase::SQLiteDatabase(SQLiteDatabase&& rhs) noexcept @@ -604,10 +609,10 @@ SQLiteDatabase::closeTransactionDB() SQLiteDatabase::SQLiteDatabase(ServiceRegistry& registry, Config const& config, JobQueue& jobQueue) : registry_(registry) , useTxTables_(config.useTxTables()) - , j_(registry.journal("SQLiteDatabase")) + , j_(registry.getJournal("SQLiteDatabase")) { DatabaseCon::Setup const setup = setup_DatabaseCon(config, j_); - if (!makeLedgerDBs(config, setup, DatabaseCon::CheckpointerSetup{&jobQueue, ®istry_.logs()})) + if (!makeLedgerDBs(config, setup, DatabaseCon::CheckpointerSetup{&jobQueue, registry_})) { std::string_view constexpr error = "Failed to create ledger databases"; diff --git a/src/xrpld/app/rdb/detail/PeerFinder.cpp b/src/xrpld/app/rdb/detail/PeerFinder.cpp index d619d4bb85..a568461fb7 100644 --- a/src/xrpld/app/rdb/detail/PeerFinder.cpp +++ b/src/xrpld/app/rdb/detail/PeerFinder.cpp @@ -5,7 +5,7 @@ namespace xrpl { void initPeerFinderDB(soci::session& session, BasicConfig const& config, beast::Journal j) { - DBConfig m_sociConfig(config, "peerfinder"); + DBConfig const m_sociConfig(config, "peerfinder"); m_sociConfig.open(session); JLOG(j.info()) << "Opening database at '" << m_sociConfig.connectionString() << "'"; diff --git a/src/xrpld/consensus/Consensus.cpp b/src/xrpld/consensus/Consensus.cpp index 29d0e9db1c..9ad7e677ad 100644 --- a/src/xrpld/consensus/Consensus.cpp +++ b/src/xrpld/consensus/Consensus.cpp @@ -132,7 +132,7 @@ checkConsensusReached( CLOG(clog) << "agreeing and total adjusted: " << agreeing << ',' << total << ". "; } - std::size_t currentPercentage = (agreeing * 100) / total; + std::size_t const currentPercentage = (agreeing * 100) / total; CLOG(clog) << "currentPercentage: " << currentPercentage; bool const ret = currentPercentage >= minConsensusPct; diff --git a/src/xrpld/consensus/Consensus.h b/src/xrpld/consensus/Consensus.h index 3c1e4e7dbf..142b1a01f0 100644 --- a/src/xrpld/consensus/Consensus.h +++ b/src/xrpld/consensus/Consensus.h @@ -4,12 +4,12 @@ #include #include #include -#include #include #include #include #include +#include #include #include @@ -554,7 +554,7 @@ private: ConsensusParms::AvalancheState closeTimeAvalancheState_ = ConsensusParms::init; // Time it took for the last consensus round to converge - std::chrono::milliseconds prevRoundTime_; + std::chrono::milliseconds prevRoundTime_{}; //------------------------------------------------------------------------- // Network time measurements of consensus progress @@ -1116,7 +1116,7 @@ Consensus::phaseOpen(std::unique_ptr const& clog) using namespace std::chrono; // it is shortly before ledger close time - bool anyTransactions = adaptor_.hasOpenTransactions(); + bool const anyTransactions = adaptor_.hasOpenTransactions(); auto proposersClosed = currPeerPositions_.size(); auto proposersValidated = adaptor_.proposersValidated(prevLedgerID_); @@ -1186,7 +1186,7 @@ Consensus::shouldPause(std::unique_ptr const& clog) previousLedger_.seq() - std::min(adaptor_.getValidLedgerIndex(), previousLedger_.seq())); auto [quorum, trustedKeys] = adaptor_.getQuorumKeys(); std::size_t const totalValidators = trustedKeys.size(); - std::size_t laggards = adaptor_.laggards(previousLedger_.seq(), trustedKeys); + std::size_t const laggards = adaptor_.laggards(previousLedger_.seq(), trustedKeys); std::size_t const offline = trustedKeys.size(); std::stringstream vars; @@ -1408,7 +1408,7 @@ this. inline int participantsNeeded(int participants, int percent) { - int result = ((participants * percent) + (percent / 2)) / 100; + int const result = ((participants * percent) + (percent / 2)) / 100; return (result == 0) ? 1 : result; } @@ -1757,7 +1757,7 @@ Consensus::createDisputes(TxSet_t const& o, std::unique_ptrtxns.find(txId) && o.find(txId)), "xrpl::Consensus::createDisputes : has disputed transactions"); - Tx_t tx = inThisSet ? result_->txns.find(txId) : o.find(txId); + Tx_t const tx = inThisSet ? result_->txns.find(txId) : o.find(txId); auto txID = tx.id(); if (result_->disputes.find(txID) != result_->disputes.end()) diff --git a/src/xrpld/consensus/ConsensusTypes.h b/src/xrpld/consensus/ConsensusTypes.h index 2331c9dfbf..8aba48f34e 100644 --- a/src/xrpld/consensus/ConsensusTypes.h +++ b/src/xrpld/consensus/ConsensusTypes.h @@ -117,7 +117,7 @@ class ConsensusTimer { using time_point = std::chrono::steady_clock::time_point; time_point start_; - std::chrono::milliseconds dur_; + std::chrono::milliseconds dur_{}; public: std::chrono::milliseconds diff --git a/src/xrpld/consensus/DisputedTx.h b/src/xrpld/consensus/DisputedTx.h index 89cb5115bb..e8304f4242 100644 --- a/src/xrpld/consensus/DisputedTx.h +++ b/src/xrpld/consensus/DisputedTx.h @@ -39,7 +39,7 @@ public: @param j Journal for debugging */ DisputedTx(Tx_t const& tx, bool ourVote, std::size_t numPeers, beast::Journal j) - : yays_(0), nays_(0), ourVote_(ourVote), tx_(tx), j_(j) + : ourVote_(ourVote), tx_(tx), j_(j) { votes_.reserve(numPeers); } @@ -97,7 +97,7 @@ public: // Compute the percentage of nodes voting 'yes' (possibly including us) int const support = (yays_ + (proposing && ourVote_ ? 1 : 0)) * 100; - int total = nays_ + yays_ + (proposing ? 1 : 0); + int const total = nays_ + yays_ + (proposing ? 1 : 0); if (!total) // There are no votes, so we know nothing return false; @@ -173,8 +173,8 @@ public: getJson() const; private: - int yays_; //< Number of yes votes - int nays_; //< Number of no votes + int yays_{0}; //< Number of yes votes + int nays_{0}; //< Number of no votes bool ourVote_; //< Our vote (true is yes) Tx_t tx_; //< Transaction under dispute Map_t votes_; //< Map from NodeID to vote @@ -258,8 +258,8 @@ DisputedTx::updateVote(int percentTime, bool proposing, Consensu if (!ourVote_ && (yays_ == 0)) return false; - bool newPosition; - int weight; + bool newPosition = false; + int weight = 0; // When proposing, to prevent avalanche stalls, we increase the needed // weight slightly over time. We also need to ensure that the consensus has diff --git a/src/xrpld/consensus/LedgerTrie.h b/src/xrpld/consensus/LedgerTrie.h index d34dda8e1b..aecd105c07 100644 --- a/src/xrpld/consensus/LedgerTrie.h +++ b/src/xrpld/consensus/LedgerTrie.h @@ -72,7 +72,7 @@ public: XRPL_ASSERT(ledger_.seq() == start_, "xrpl::Span::Span : ledger is genesis"); } - Span(Ledger ledger) : start_{0}, end_{ledger.seq() + Seq{1}}, ledger_{std::move(ledger)} + Span(Ledger ledger) : end_{ledger.seq() + Seq{1}}, ledger_{std::move(ledger)} { } @@ -128,7 +128,7 @@ public: SpanTip tip() const { - Seq tipSeq{end_ - Seq{1}}; + Seq const tipSeq{end_ - Seq{1}}; return SpanTip{tipSeq, ledger_[tipSeq], ledger_}; } @@ -149,8 +149,8 @@ private: std::optional sub(Seq from, Seq to) const { - Seq newFrom = clamp(from); - Seq newTo = clamp(to); + Seq const newFrom = clamp(from); + Seq const newTo = clamp(to); if (newFrom < newTo) return Span(newFrom, newTo, ledger_); return std::nullopt; @@ -344,6 +344,7 @@ class LedgerTrie std::pair find(Ledger const& ledger) const { + // NOLINTNEXTLINE(misc-const-correctness) Node* curr = root.get(); // Root is always defined and is in common with all ledgers diff --git a/src/xrpld/consensus/Validations.h b/src/xrpld/consensus/Validations.h index 4cd922d6b2..4d0b64a350 100644 --- a/src/xrpld/consensus/Validations.h +++ b/src/xrpld/consensus/Validations.h @@ -422,7 +422,7 @@ private: checkAcquired(lock); - std::pair valPair{val.seq(), val.ledgerID()}; + std::pair const valPair{val.seq(), val.ledgerID()}; auto it = acquiring_.find(valPair); if (it != acquiring_.end()) { @@ -479,7 +479,7 @@ private: void current(std::lock_guard const& lock, Pre&& pre, F&& f) { - NetClock::time_point t = adaptor_.now(); + NetClock::time_point const t = adaptor_.now(); pre(current_.size()); auto it = current_.begin(); while (it != current_.end()) @@ -569,7 +569,7 @@ public: bool canValidateSeq(Seq const s) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return localSeqEnforcer_(byLedger_.clock().now(), s, parms_); } @@ -588,7 +588,7 @@ public: return ValStatus::stale; { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; // Check that validation sequence is greater than any non-expired // validations sequence from that validator; if it's not, perform @@ -645,7 +645,7 @@ public: if (!inserted) { // Replace existing only if this one is newer - Validation& oldVal = it->second; + Validation const& oldVal = it->second; if (val.signTime() > oldVal.signTime()) { std::pair old(oldVal.seq(), oldVal.ledgerID()); @@ -674,7 +674,7 @@ public: void setSeqToKeep(Seq const& low, Seq const& high) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; XRPL_ASSERT(low < high, "xrpl::Validations::setSeqToKeep : valid inputs"); toKeep_ = {low, high}; } @@ -689,7 +689,7 @@ public: { auto const start = std::chrono::steady_clock::now(); { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; if (toKeep_) { // We only need to refresh the keep range when it's just about @@ -746,7 +746,7 @@ public: void trustChanged(hash_set const& added, hash_set const& removed) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; for (auto& [nodeId, validation] : current_) { @@ -782,7 +782,7 @@ public: Json::Value getJsonTrie() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return trie_.getJson(); } @@ -801,7 +801,7 @@ public: std::optional> getPreferred(Ledger const& curr) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; std::optional> preferred = withTrie(lock, [this](LedgerTrie& trie) { return trie.getPreferred(localSeqEnforcer_.largest()); }); @@ -913,7 +913,7 @@ public: std::size_t getNodesAfter(Ledger const& ledger, ID const& ledgerID) { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; // Use trie if ledger is the right one if (ledger.id() == ledgerID) @@ -936,7 +936,7 @@ public: currentTrusted() { std::vector ret; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; current( lock, [&](std::size_t numValidations) { ret.reserve(numValidations); }, @@ -955,7 +955,7 @@ public: getCurrentNodeIDs() -> hash_set { hash_set ret; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; current( lock, [&](std::size_t numValidations) { ret.reserve(numValidations); }, @@ -973,7 +973,7 @@ public: numTrustedForLedger(ID const& ledgerID) { std::size_t count = 0; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; byLedger( lock, ledgerID, @@ -995,7 +995,7 @@ public: getTrustedForLedger(ID const& ledgerID, Seq const& seq) { std::vector res; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; byLedger( lock, ledgerID, @@ -1018,7 +1018,7 @@ public: fees(ID const& ledgerID, std::uint32_t baseFee) { std::vector res; - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; byLedger( lock, ledgerID, @@ -1041,7 +1041,7 @@ public: void flush() { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; current_.clear(); } @@ -1084,28 +1084,28 @@ public: std::size_t sizeOfCurrentCache() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return current_.size(); } std::size_t sizeOfSeqEnforcersCache() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return seqEnforcers_.size(); } std::size_t sizeOfByLedgerCache() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return byLedger_.size(); } std::size_t sizeOfBySequenceCache() const { - std::lock_guard lock{mutex_}; + std::lock_guard const lock{mutex_}; return bySequence_.size(); } }; diff --git a/src/xrpld/core/Config.h b/src/xrpld/core/Config.h index db61904d06..89f4dc7743 100644 --- a/src/xrpld/core/Config.h +++ b/src/xrpld/core/Config.h @@ -5,6 +5,7 @@ #include #include #include +#include #include // VFALCO Breaks levelization #include @@ -66,6 +67,13 @@ struct FeeSetup /* (Remember to update the example cfg files when changing any of these * values.) */ + + /** Convert to a Fees object for use with Ledger construction. */ + Fees + toFees() const + { + return Fees{reference_fee, account_reserve, owner_reserve}; + } }; // This entire derived class is deprecated. @@ -135,7 +143,7 @@ public: // Entries from [ips_fixed] config stanza std::vector IPS_FIXED; - StartUpType START_UP = StartUpType::NORMAL; + StartUpType START_UP = StartUpType::Normal; bool START_VALID = false; @@ -146,10 +154,6 @@ public: // Network parameters uint32_t NETWORK_ID = 0; - // DEPRECATED - Fee units for a reference transaction. - // Only provided for backwards compatibility in a couple of places - static constexpr std::uint32_t FEE_UNITS_DEPRECATED = 10; - // Note: The following parameters do not relate to the UNL or trust at all // Minimum number of nodes to consider the network present std::size_t NETWORK_QUORUM = 1; diff --git a/src/xrpld/core/detail/Config.cpp b/src/xrpld/core/detail/Config.cpp index 48fc41b94d..a9026b06a0 100644 --- a/src/xrpld/core/detail/Config.cpp +++ b/src/xrpld/core/detail/Config.cpp @@ -112,11 +112,12 @@ sizedItems {SizedItem::ramSizeGB, {{ 6, 8, 12, 24, 0 }}}, {SizedItem::accountIdCacheSize, {{ 20047, 50053, 77081, 150061, 300007 }}} }}; +// clang-format on // Ensure that the order of entries in the table corresponds to the // order of entries in the enum: static_assert( - []() constexpr->bool { + []() constexpr -> bool { std::underlying_type_t idx = 0; for (auto const& i : sizedItems) @@ -130,7 +131,6 @@ static_assert( return true; }(), "Mismatch between sized item enum & array indices"); -// clang-format on // // TODO: Check permissions on config file before using it. @@ -204,13 +204,13 @@ getSingleSection( { auto const pmtEntries = getIniFileSection(secSource, strSection); - if (pmtEntries && pmtEntries->size() == 1) + if ((pmtEntries != nullptr) && pmtEntries->size() == 1) { strValue = (*pmtEntries)[0]; return true; } - if (pmtEntries) + if (pmtEntries != nullptr) { JLOG(j.warn()) << "Section '" << strSection << "': requires 1 line not " << pmtEntries->size() << " lines."; @@ -390,10 +390,10 @@ Config::setup(std::string const& strConf, bool bQuiet, bool bSilent, bool bStand if (RUN_STANDALONE) LEDGER_HISTORY = 0; - Section ledgerTxTablesSection = section("ledger_tx_tables"); + Section const ledgerTxTablesSection = section("ledger_tx_tables"); get_if_exists(ledgerTxTablesSection, "use_tx_tables", USE_TX_TABLES); - Section& nodeDbSection{section(ConfigSection::nodeDatabase())}; + Section const& nodeDbSection{section(ConfigSection::nodeDatabase())}; get_if_exists(nodeDbSection, "fast_load", FAST_LOAD); } @@ -415,7 +415,7 @@ checkZeroPorts(Config const& config) if (optResult) { auto const port = beast::lexicalCast(*optResult); - if (!port) + if (port == 0u) { std::stringstream ss; ss << "Invalid value '" << *optResult << "' for key 'port' in [" << name << "]"; @@ -471,7 +471,7 @@ Config::loadFromString(std::string const& fileContents) if (std::count(line.begin(), line.end(), ':') != 1) continue; - std::string result = std::regex_replace(line, e, " $1"); + std::string const result = std::regex_replace(line, e, " $1"); // sanity check the result of the replace, should be same length // as input if (result.size() == line.size()) @@ -487,7 +487,7 @@ Config::loadFromString(std::string const& fileContents) std::string dbPath; if (getSingleSection(secConfig, "database_path", dbPath, j_)) { - boost::filesystem::path p(dbPath); + boost::filesystem::path const p(dbPath); legacy("database_path", boost::filesystem::absolute(p).string()); } } @@ -890,7 +890,7 @@ Config::loadFromString(std::string const& fileContents) ", must be: [0-9]+ [minutes|hours|days|weeks]"); } - std::uint32_t duration = beast::lexicalCastThrow(match[1].str()); + std::uint32_t const duration = beast::lexicalCastThrow(match[1].str()); if (boost::iequals(match[2], "minutes")) { @@ -999,30 +999,30 @@ Config::loadFromString(std::string const& fileContents) auto entries = getIniFileSection(iniFile, SECTION_VALIDATORS); - if (entries) + if (entries != nullptr) section(SECTION_VALIDATORS).append(*entries); auto valKeyEntries = getIniFileSection(iniFile, SECTION_VALIDATOR_KEYS); - if (valKeyEntries) + if (valKeyEntries != nullptr) section(SECTION_VALIDATOR_KEYS).append(*valKeyEntries); auto valSiteEntries = getIniFileSection(iniFile, SECTION_VALIDATOR_LIST_SITES); - if (valSiteEntries) + if (valSiteEntries != nullptr) section(SECTION_VALIDATOR_LIST_SITES).append(*valSiteEntries); auto valListKeys = getIniFileSection(iniFile, SECTION_VALIDATOR_LIST_KEYS); - if (valListKeys) + if (valListKeys != nullptr) section(SECTION_VALIDATOR_LIST_KEYS).append(*valListKeys); auto valListThreshold = getIniFileSection(iniFile, SECTION_VALIDATOR_LIST_THRESHOLD); - if (valListThreshold) + if (valListThreshold != nullptr) section(SECTION_VALIDATOR_LIST_THRESHOLD).append(*valListThreshold); - if (!entries && !valKeyEntries && !valListKeys) + if ((entries == nullptr) && (valKeyEntries == nullptr) && (valListKeys == nullptr)) { Throw( "The file specified in [" SECTION_VALIDATORS_FILE @@ -1232,7 +1232,7 @@ setup_DatabaseCon(Config const& c, std::optional j) "Configuration file may not define both " "\"safety_level\" and \"journal_mode\""); } - bool higherRisk = + bool const higherRisk = boost::iequals(journal_mode, "memory") || boost::iequals(journal_mode, "off"); showRiskWarning = showRiskWarning || higherRisk; if (higherRisk || boost::iequals(journal_mode, "delete") || @@ -1256,7 +1256,7 @@ setup_DatabaseCon(Config const& c, std::optional j) "Configuration file may not define both " "\"safety_level\" and \"synchronous\""); } - bool higherRisk = boost::iequals(synchronous, "off"); + bool const higherRisk = boost::iequals(synchronous, "off"); showRiskWarning = showRiskWarning || higherRisk; if (higherRisk || boost::iequals(synchronous, "normal") || boost::iequals(synchronous, "full") || boost::iequals(synchronous, "extra")) @@ -1277,7 +1277,7 @@ setup_DatabaseCon(Config const& c, std::optional j) "Configuration file may not define both " "\"safety_level\" and \"temp_store\""); } - bool higherRisk = boost::iequals(temp_store, "memory"); + bool const higherRisk = boost::iequals(temp_store, "memory"); showRiskWarning = showRiskWarning || higherRisk; if (higherRisk || boost::iequals(temp_store, "default") || boost::iequals(temp_store, "file")) @@ -1321,7 +1321,7 @@ setup_DatabaseCon(Config const& c, std::optional j) if (page_size < 512 || page_size > 65536) Throw("Invalid page_size. Must be between 512 and 65536."); - if (page_size & (page_size - 1)) + if ((page_size & (page_size - 1)) != 0) Throw("Invalid page_size. Must be a power of 2."); } diff --git a/src/xrpld/overlay/Message.h b/src/xrpld/overlay/Message.h index 30650d384c..df59656ac2 100644 --- a/src/xrpld/overlay/Message.h +++ b/src/xrpld/overlay/Message.h @@ -91,7 +91,7 @@ private: * currently LZ4 only. If None then the message is uncompressed. * @param uncompressedBytes Size of the uncompressed message */ - void + static void setHeader( std::uint8_t* in, std::uint32_t payloadBytes, @@ -112,8 +112,8 @@ private: * @param in Payload header pointer * @return Message type */ - int - getType(std::uint8_t const* in) const; + static int + getType(std::uint8_t const* in); }; } // namespace xrpl diff --git a/src/xrpld/overlay/Overlay.h b/src/xrpld/overlay/Overlay.h index f1d1104d4e..7d2508a584 100644 --- a/src/xrpld/overlay/Overlay.h +++ b/src/xrpld/overlay/Overlay.h @@ -18,7 +18,7 @@ namespace boost { namespace asio { namespace ssl { class context; -} +} // namespace ssl } // namespace asio } // namespace boost diff --git a/src/xrpld/overlay/Peer.h b/src/xrpld/overlay/Peer.h index a0e4c040fd..df2cc5bcb7 100644 --- a/src/xrpld/overlay/Peer.h +++ b/src/xrpld/overlay/Peer.h @@ -11,7 +11,7 @@ namespace xrpl { namespace Resource { class Charge; -} +} // namespace Resource enum class ProtocolFeature { ValidatorListPropagation, diff --git a/src/xrpld/overlay/Slot.h b/src/xrpld/overlay/Slot.h index ac3c3ad49e..22e908ee99 100644 --- a/src/xrpld/overlay/Slot.h +++ b/src/xrpld/overlay/Slot.h @@ -98,9 +98,7 @@ private: * validator message source */ Slot(SquelchHandler const& handler, beast::Journal journal, uint16_t maxSelectedPeers) - : reachedThreshold_(0) - , lastSelected_(clock_type::now()) - , state_(SlotState::Counting) + : lastSelected_(clock_type::now()) , handler_(handler) , journal_(journal) , maxSelectedPeers_(maxSelectedPeers) @@ -220,14 +218,14 @@ private: std::unordered_set considered_; // number of peers that reached MAX_MESSAGE_THRESHOLD - std::uint16_t reachedThreshold_; + std::uint16_t reachedThreshold_{0}; // last time peers were selected, used to age the slot typename clock_type::time_point lastSelected_; - SlotState state_; // slot's state - SquelchHandler const& handler_; // squelch/unsquelch handler - beast::Journal const journal_; // logging + SlotState state_{SlotState::Counting}; // slot's state + SquelchHandler const& handler_; // squelch/unsquelch handler + beast::Journal const journal_; // logging // the maximum number of peers that should be selected as a validator // message source @@ -374,7 +372,7 @@ Slot::update( if (journal_.trace()) str << k << " "; v.state = PeerState::Squelched; - std::chrono::seconds duration = + std::chrono::seconds const duration = getSquelchDuration(peers_.size() - maxSelectedPeers_); v.expire = now + duration; handler_.squelch(validator, k, duration.count()); @@ -536,14 +534,14 @@ class Slots final public: /** - * @param logs reference to the logger + * @param registry The service registry. * @param handler Squelch/unsquelch implementation * @param config reference to the global config */ - Slots(Logs& logs, SquelchHandler const& handler, Config const& config) + Slots(ServiceRegistry& registry, SquelchHandler const& handler, Config const& config) : handler_(handler) - , logs_(logs) - , journal_(logs.journal("Slots")) + , logs_(registry.getLogs()) + , journal_(registry.getJournal("Slots")) , baseSquelchEnabled_(config.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE) , maxSelectedPeers_(config.VP_REDUCE_RELAY_SQUELCH_MAX_SELECTED_PEERS) { diff --git a/src/xrpld/overlay/detail/Cluster.cpp b/src/xrpld/overlay/detail/Cluster.cpp index 0ee633fb90..72b7ef5147 100644 --- a/src/xrpld/overlay/detail/Cluster.cpp +++ b/src/xrpld/overlay/detail/Cluster.cpp @@ -18,7 +18,7 @@ Cluster::Cluster(beast::Journal j) : j_(j) std::optional Cluster::member(PublicKey const& identity) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto iter = nodes_.find(identity); if (iter == nodes_.end()) @@ -29,7 +29,7 @@ Cluster::member(PublicKey const& identity) const std::size_t Cluster::size() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return nodes_.size(); } @@ -41,7 +41,7 @@ Cluster::update( std::uint32_t loadFee, NetClock::time_point reportTime) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto iter = nodes_.find(identity); @@ -63,7 +63,7 @@ Cluster::update( void Cluster::for_each(std::function func) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); for (auto const& ni : nodes_) func(ni); } diff --git a/src/xrpld/overlay/detail/ConnectAttempt.cpp b/src/xrpld/overlay/detail/ConnectAttempt.cpp index 78aee006f1..40466f19b9 100644 --- a/src/xrpld/overlay/detail/ConnectAttempt.cpp +++ b/src/xrpld/overlay/detail/ConnectAttempt.cpp @@ -143,7 +143,7 @@ ConnectAttempt::onShutdown(error_code ec) // occur if a peer does not perform a graceful disconnect // - broken_pipe: the peer is gone // - application data after close notify: benign SSL shutdown condition - bool shouldLog = + bool const shouldLog = (ec != boost::asio::error::eof && ec != boost::asio::error::operation_aborted && ec.message().find("application data after close notify") == std::string::npos); @@ -287,8 +287,8 @@ ConnectAttempt::onTimer(error_code ec) // Determine which timer expired by checking their expiry times auto const now = std::chrono::steady_clock::now(); - bool globalExpired = (timer_.expiry() <= now); - bool stepExpired = (stepTimer_.expiry() <= now); + bool const globalExpired = (timer_.expiry() <= now); + bool const stepExpired = (stepTimer_.expiry() <= now); if (globalExpired) { @@ -607,7 +607,7 @@ ConnectAttempt::processResponse() JLOG(journal_.debug()) << "Protocol: " << to_string(*negotiatedProtocol); JLOG(journal_.info()) << "Public Key: " << toBase58(TokenType::NodePublic, publicKey); - auto const member = app_.cluster().member(publicKey); + auto const member = app_.getCluster().member(publicKey); if (member) { JLOG(journal_.info()) << "Cluster name: " << *member; diff --git a/src/xrpld/overlay/detail/ConnectAttempt.h b/src/xrpld/overlay/detail/ConnectAttempt.h index a3b2fd5cce..520ebe277e 100644 --- a/src/xrpld/overlay/detail/ConnectAttempt.h +++ b/src/xrpld/overlay/detail/ConnectAttempt.h @@ -145,7 +145,7 @@ public: beast::Journal journal, OverlayImpl& overlay); - ~ConnectAttempt(); + virtual ~ConnectAttempt(); /** * @brief Stop the connection attempt diff --git a/src/xrpld/overlay/detail/Handshake.cpp b/src/xrpld/overlay/detail/Handshake.cpp index e9ad25bcc4..f70ec864da 100644 --- a/src/xrpld/overlay/detail/Handshake.cpp +++ b/src/xrpld/overlay/detail/Handshake.cpp @@ -23,7 +23,7 @@ getFeatureValue(boost::beast::http::fields const& headers, std::string const& fe if (header == headers.end()) return {}; boost::smatch match; - boost::regex rx(feature + "=([^;\\s]+)"); + boost::regex const rx(feature + "=([^;\\s]+)"); std::string const allFeatures(header->value()); if (boost::regex_search(allFeatures, match, rx)) return {match[1]}; @@ -107,12 +107,12 @@ hashLastMessage(SSL const* ssl, size_t (*get)(const SSL*, void*, size_t)) constexpr std::size_t sslMinimumFinishedLength = 12; unsigned char buf[1024]; - size_t len = get(ssl, buf, sizeof(buf)); + size_t const len = get(ssl, buf, sizeof(buf)); if (len < sslMinimumFinishedLength) return std::nullopt; - sha512_hasher h; + sha512_hasher const h; base_uint<512> cookie; SHA512(buf, len, cookie.data()); @@ -166,7 +166,7 @@ buildHandshake( h.insert("Network-ID", std::to_string(*networkID)); } - h.insert("Network-Time", std::to_string(app.timeKeeper().now().time_since_epoch().count())); + h.insert("Network-Time", std::to_string(app.getTimeKeeper().now().time_since_epoch().count())); h.insert("Public-Key", toBase58(TokenType::NodePublic, app.nodeIdentity().first)); @@ -235,7 +235,7 @@ verifyHandshake( using namespace std::chrono; - auto const ourTime = app.timeKeeper().now(); + auto const ourTime = app.getTimeKeeper().now(); auto const tolerance = 20s; // We can't blindly "return a-b;" because TimeKeeper::time_point diff --git a/src/xrpld/overlay/detail/Message.cpp b/src/xrpld/overlay/detail/Message.cpp index 754545f04a..1f0c6f608d 100644 --- a/src/xrpld/overlay/detail/Message.cpp +++ b/src/xrpld/overlay/detail/Message.cpp @@ -103,6 +103,7 @@ Message::compress() if (compressedSize < (messageBytes - (headerBytesCompressed - headerBytes))) { bufferCompressed_.resize(headerBytesCompressed + compressedSize); + // NOLINTNEXTLINE(readability-suspicious-call-argument) setHeader(bufferCompressed_.data(), compressedSize, type, Algorithm::LZ4, messageBytes); } else @@ -199,9 +200,9 @@ Message::getBuffer(Compressed tryCompressed) } int -Message::getType(std::uint8_t const* in) const +Message::getType(std::uint8_t const* in) { - int type = (static_cast(*(in + 4)) << 8) + *(in + 5); + int const type = (static_cast(*(in + 4)) << 8) + *(in + 5); return type; } diff --git a/src/xrpld/overlay/detail/OverlayImpl.cpp b/src/xrpld/overlay/detail/OverlayImpl.cpp index d9077686ec..2720c10140 100644 --- a/src/xrpld/overlay/detail/OverlayImpl.cpp +++ b/src/xrpld/overlay/detail/OverlayImpl.cpp @@ -36,7 +36,7 @@ enum { ServerCounts = (1 << 2), Unl = (1 << 3) }; -} +} // namespace CrawlOptions //------------------------------------------------------------------------------ @@ -114,20 +114,19 @@ OverlayImpl::OverlayImpl( , work_(std::in_place, boost::asio::make_work_guard(io_context_)) , strand_(boost::asio::make_strand(io_context_)) , setup_(setup) - , journal_(app_.journal("Overlay")) + , journal_(app_.getJournal("Overlay")) , serverHandler_(serverHandler) , m_resourceManager(resourceManager) , m_peerFinder( PeerFinder::make_Manager( io_context, stopwatch(), - app_.journal("PeerFinder"), + app_.getJournal("PeerFinder"), config, collector)) , m_resolver(resolver) , next_id_(1) - , timer_count_(0) - , slots_(app.logs(), *this, app.config()) + , slots_(app, *this, app.config()) , m_stats( std::bind(&OverlayImpl::collect_metrics, this), collector, @@ -150,8 +149,9 @@ OverlayImpl::onHandoff( endpoint_type remote_endpoint) { auto const id = next_id_++; - beast::WrappedSink sink(app_.logs()["Peer"], makePrefix(id)); - beast::Journal journal(sink); + auto peerJournal = app_.getJournal("Peer"); + beast::WrappedSink sink(peerJournal.sink(), makePrefix(id)); + beast::Journal const journal(sink); Handoff handoff; if (processRequest(request, handoff)) @@ -240,8 +240,8 @@ OverlayImpl::onHandoff( { // The node gets a reserved slot if it is in our cluster // or if it has a reservation. - bool const reserved = static_cast(app_.cluster().member(publicKey)) || - app_.peerReservations().contains(publicKey); + bool const reserved = static_cast(app_.getCluster().member(publicKey)) || + app_.getPeerReservations().contains(publicKey); auto const result = m_peerFinder->activate(slot, publicKey, reserved); if (result != PeerFinder::Result::success) { @@ -269,7 +269,7 @@ OverlayImpl::onHandoff( // As we are not on the strand, run() must be called // while holding the lock, otherwise new I/O can be // queued after a call to stop(). - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); { auto const result = m_peers.emplace(peer->slot(), peer); XRPL_ASSERT(result.second, "xrpl::OverlayImpl::onHandoff : peer is inserted"); @@ -389,10 +389,10 @@ OverlayImpl::connect(beast::IP::Endpoint const& remote_endpoint) setup_.context, next_id_++, slot, - app_.journal("Peer"), + app_.getJournal("Peer"), *this); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.emplace(p.get(), p); p->run(); } @@ -404,9 +404,9 @@ void OverlayImpl::add_active(std::shared_ptr const& peer) { beast::WrappedSink sink{journal_.sink(), peer->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); { auto const result = m_peers.emplace(peer->slot(), peer); @@ -434,7 +434,7 @@ OverlayImpl::add_active(std::shared_ptr const& peer) void OverlayImpl::remove(std::shared_ptr const& slot) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const iter = m_peers.find(slot); XRPL_ASSERT(iter != m_peers.end(), "xrpl::OverlayImpl::remove : valid input"); m_peers.erase(iter); @@ -443,7 +443,7 @@ OverlayImpl::remove(std::shared_ptr const& slot) void OverlayImpl::start() { - PeerFinder::Config config = PeerFinder::Config::makeConfig( + PeerFinder::Config const config = PeerFinder::Config::makeConfig( app_.config(), serverHandler_.setup().overlay.port(), app_.getValidationPublicKey().has_value(), @@ -521,7 +521,7 @@ OverlayImpl::start() }); } auto const timer = std::make_shared(*this); - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.emplace(timer.get(), timer); timer_ = timer; timer->async_wait(); @@ -570,11 +570,11 @@ void OverlayImpl::activate(std::shared_ptr const& peer) { beast::WrappedSink sink{journal_.sink(), peer->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; // Now track this peer { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const result(ids_.emplace( std::piecewise_construct, std::make_tuple(peer->id()), std::make_tuple(peer))); XRPL_ASSERT(result.second, "xrpl::OverlayImpl::activate : peer ID is inserted"); @@ -590,7 +590,7 @@ OverlayImpl::activate(std::shared_ptr const& peer) void OverlayImpl::onPeerDeactivate(Peer::id_t id) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); ids_.erase(id); } @@ -612,7 +612,7 @@ OverlayImpl::onManifests( { auto const serialized = mo->serialized; - auto const result = app_.validatorManifests().applyManifest(std::move(*mo)); + auto const result = app_.getValidatorManifests().applyManifest(std::move(*mo)); if (result == ManifestDisposition::accepted) { @@ -629,7 +629,7 @@ OverlayImpl::onManifests( app_.getOPs().pubManifest(*mo); - if (app_.validators().listed(mo->masterKey)) + if (app_.getValidators().listed(mo->masterKey)) { auto db = app_.getWalletDB().checkoutDb(); addValidatorManifest(*db, serialized); @@ -668,7 +668,7 @@ OverlayImpl::reportOutboundTraffic(TrafficCount::category cat, int size) std::size_t OverlayImpl::size() const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return ids_.size(); } @@ -758,7 +758,7 @@ OverlayImpl::getServerCounts() Json::Value OverlayImpl::getUnlInfo() { - Json::Value validators = app_.validators().getJson(); + Json::Value validators = app_.getValidators().getJson(); if (validators.isMember(jss::publisher_lists)) { @@ -774,7 +774,7 @@ OverlayImpl::getUnlInfo() validators.removeMember(jss::trusted_validator_keys); validators.removeMember(jss::validation_quorum); - Json::Value validatorSites = app_.validatorSites().getJson(); + Json::Value validatorSites = app_.getValidatorSites().getJson(); if (validatorSites.isMember(jss::validator_sites)) { @@ -810,19 +810,19 @@ OverlayImpl::processCrawl(http_request_type const& req, Handoff& handoff) msg.insert("Connection", "close"); msg.body()["version"] = Json::Value(2u); - if (setup_.crawlOptions & CrawlOptions::Overlay) + if ((setup_.crawlOptions & CrawlOptions::Overlay) != 0u) { msg.body()["overlay"] = getOverlayInfo(); } - if (setup_.crawlOptions & CrawlOptions::ServerInfo) + if ((setup_.crawlOptions & CrawlOptions::ServerInfo) != 0u) { msg.body()["server"] = getServerInfo(); } - if (setup_.crawlOptions & CrawlOptions::ServerCounts) + if ((setup_.crawlOptions & CrawlOptions::ServerCounts) != 0u) { msg.body()["counts"] = getServerCounts(); } - if (setup_.crawlOptions & CrawlOptions::Unl) + if ((setup_.crawlOptions & CrawlOptions::Unl) != 0u) { msg.body()["unl"] = getUnlInfo(); } @@ -875,7 +875,7 @@ OverlayImpl::processValidatorList(http_request_type const& req, Handoff& handoff return fail(boost::beast::http::status::bad_request); // find the list - auto vl = app_.validators().getAvailable(key, version); + auto vl = app_.getValidators().getAvailable(key, version); if (!vl) { @@ -915,8 +915,8 @@ OverlayImpl::processHealth(http_request_type const& req, Handoff& handoff) bool amendment_blocked = false; if (info.isMember(jss::amendment_blocked)) amendment_blocked = true; - int number_peers = info[jss::peers].asInt(); - std::string server_state = info[jss::server_state].asString(); + int const number_peers = info[jss::peers].asInt(); + std::string const server_state = info[jss::server_state].asString(); auto load_factor = info[jss::load_factor_server].asDouble() / info[jss::load_base].asDouble(); enum class HealthState { healthy, warning, critical }; @@ -1014,7 +1014,7 @@ OverlayImpl::getActivePeers() const Overlay::PeerSequence ret; ret.reserve(size()); - for_each([&ret](std::shared_ptr const& sp) { ret.emplace_back(std::move(sp)); }); + for_each([&ret](std::shared_ptr const& sp) { ret.emplace_back(sp); }); return ret; } @@ -1027,7 +1027,7 @@ OverlayImpl::getActivePeers( std::size_t& enabledInSkip) const { Overlay::PeerSequence ret; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); active = ids_.size(); disabled = enabledInSkip = 0; @@ -1067,7 +1067,7 @@ OverlayImpl::checkTracking(std::uint32_t index) std::shared_ptr OverlayImpl::findPeerByShortID(Peer::id_t const& id) const { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const iter = ids_.find(id); if (iter != ids_.end()) return iter->second.lock(); @@ -1079,7 +1079,7 @@ OverlayImpl::findPeerByShortID(Peer::id_t const& id) const std::shared_ptr OverlayImpl::findPeerByPublicKey(PublicKey const& pubKey) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // NOTE The purpose of peer is to delay the destruction of PeerImp std::shared_ptr peer; for (auto const& e : ids_) @@ -1140,13 +1140,13 @@ OverlayImpl::relay(protocol::TMValidation& m, uint256 const& uid, PublicKey cons std::shared_ptr OverlayImpl::getManifestsMessage() { - std::lock_guard g(manifestLock_); + std::lock_guard const g(manifestLock_); - if (auto seq = app_.validatorManifests().sequence(); seq != manifestListSeq_) + if (auto seq = app_.getValidatorManifests().sequence(); seq != manifestListSeq_) { protocol::TMManifests tm; - app_.validatorManifests().for_each_manifest( + app_.getValidatorManifests().for_each_manifest( [&tm](std::size_t s) { tm.mutable_list()->Reserve(s); }, [&tm, &hr = app_.getHashRouter()](Manifest const& manifest) { tm.add_list()->set_stobject(manifest.serialized.data(), manifest.serialized.size()); @@ -1222,7 +1222,7 @@ OverlayImpl::relay( // relay to all disabled and some randomly selected enabled that // do not have the transaction. auto const enabledTarget = app_.config().TX_REDUCE_RELAY_MIN_PEERS + - (total - minRelay) * app_.config().TX_RELAY_PERCENTAGE / 100; + ((total - minRelay) * app_.config().TX_RELAY_PERCENTAGE / 100); txMetrics_.addMetrics(enabledTarget, toSkip.size(), disabled); @@ -1259,7 +1259,7 @@ OverlayImpl::relay( void OverlayImpl::remove(Child& child) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.erase(&child); if (list_.empty()) cond_.notify_all(); @@ -1278,7 +1278,7 @@ OverlayImpl::stopChildren() // won't be called until vector<> children leaves scope. std::vector> children; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (!work_) return; work_ = std::nullopt; @@ -1301,7 +1301,7 @@ void OverlayImpl::autoConnect() { auto const result = m_peerFinder->autoconnect(); - for (auto addr : result) + for (auto const& addr : result) connect(addr); } @@ -1313,7 +1313,7 @@ OverlayImpl::sendEndpoints() { std::shared_ptr peer; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const iter = m_peers.find(e.first); if (iter != m_peers.end()) peer = iter->second.lock(); diff --git a/src/xrpld/overlay/detail/OverlayImpl.h b/src/xrpld/overlay/detail/OverlayImpl.h index b77b4e69aa..167d574188 100644 --- a/src/xrpld/overlay/detail/OverlayImpl.h +++ b/src/xrpld/overlay/detail/OverlayImpl.h @@ -49,9 +49,8 @@ public: explicit Child(OverlayImpl& overlay); - virtual ~Child(); - public: + virtual ~Child(); virtual void stop() = 0; }; @@ -98,7 +97,7 @@ private: hash_map> ids_; Resolver& m_resolver; std::atomic next_id_; - int timer_count_; + int timer_count_{0}; std::atomic jqTransOverflow_{0}; std::atomic peerDisconnects_{0}; std::atomic peerDisconnectsCharges_{0}; @@ -255,7 +254,7 @@ public: { std::vector> wp; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); // Iterate over a copy of the peer list because peer // destruction can invalidate iterators. @@ -429,7 +428,7 @@ private: http_request_type const& request, address_type remote_address); - std::shared_ptr + static std::shared_ptr makeErrorResponse( std::shared_ptr const& slot, http_request_type const& request, @@ -573,7 +572,7 @@ private: collect_metrics() { auto counts = m_traffic.getCounts(); - std::lock_guard lock(m_statsMutex); + std::lock_guard const lock(m_statsMutex); XRPL_ASSERT( counts.size() == m_stats.trafficGauges.size(), "xrpl::OverlayImpl::collect_metrics : counts size do match"); diff --git a/src/xrpld/overlay/detail/PeerImp.cpp b/src/xrpld/overlay/detail/PeerImp.cpp index 7ed8c45453..13fe0c571c 100644 --- a/src/xrpld/overlay/detail/PeerImp.cpp +++ b/src/xrpld/overlay/detail/PeerImp.cpp @@ -65,8 +65,8 @@ PeerImp::PeerImp( , id_(id) , fingerprint_(getFingerprint(slot->remote_endpoint(), publicKey, to_string(id))) , prefix_(makePrefix(fingerprint_)) - , sink_(app_.journal("Peer"), prefix_) - , p_sink_(app_.journal("Protocol"), prefix_) + , sink_(app_.getJournal("Peer"), prefix_) + , p_sink_(app_.getJournal("Protocol"), prefix_) , journal_(sink_) , p_journal_(p_sink_) , stream_ptr_(std::move(stream_ptr)) @@ -83,7 +83,7 @@ PeerImp::PeerImp( , publicKey_(publicKey) , lastPingTime_(clock_type::now()) , creationTime_(clock_type::now()) - , squelch_(app_.journal("Squelch")) + , squelch_(app_.getJournal("Squelch")) , usage_(consumer) , fee_{Resource::feeTrivialPeer, ""} , slot_(slot) @@ -172,7 +172,7 @@ PeerImp::run() fail("Malformed handshake data (3)"); { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (closed) closedLedgerHash_ = *closed; if (previous) @@ -364,7 +364,7 @@ PeerImp::crawl() const bool PeerImp::cluster() const { - return static_cast(app_.cluster().member(publicKey_)); + return static_cast(app_.getCluster().member(publicKey_)); } std::string @@ -411,7 +411,7 @@ PeerImp::json() ret[jss::protocol] = to_string(protocol_); { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (latency_) ret[jss::latency] = static_cast(latency_->count()); } @@ -443,7 +443,7 @@ PeerImp::json() uint256 closedLedgerHash; protocol::TMStatusChange last_status; { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); closedLedgerHash = closedLedgerHash_; last_status = last_status_; } @@ -510,7 +510,7 @@ bool PeerImp::hasLedger(uint256 const& hash, std::uint32_t seq) const { { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if ((seq != 0) && (seq >= minLedger_) && (seq <= maxLedger_) && (tracking_.load() == Tracking::converged)) return true; @@ -523,7 +523,7 @@ PeerImp::hasLedger(uint256 const& hash, std::uint32_t seq) const void PeerImp::ledgerRange(std::uint32_t& minSeq, std::uint32_t& maxSeq) const { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); minSeq = minLedger_; maxSeq = maxLedger_; @@ -532,7 +532,7 @@ PeerImp::ledgerRange(std::uint32_t& minSeq, std::uint32_t& maxSeq) const bool PeerImp::hasTxSet(uint256 const& hash) const { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); return std::find(recentTxSets_.begin(), recentTxSets_.end(), hash) != recentTxSets_.end(); } @@ -541,7 +541,7 @@ PeerImp::cycleStatus() { // Operations on closedLedgerHash_ and previousLedgerHash_ must be // guarded by recentLock_. - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); previousLedgerHash_ = closedLedgerHash_; closedLedgerHash_.zero(); } @@ -549,7 +549,7 @@ PeerImp::cycleStatus() bool PeerImp::hasRange(std::uint32_t uMin, std::uint32_t uMax) { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); return (tracking_ != Tracking::diverged) && (uMin >= minLedger_) && (uMax <= maxLedger_); } @@ -641,7 +641,7 @@ PeerImp::onShutdown(error_code ec) // - stream_truncated: the tcp connection closed (no handshake) it could // occur if a peer does not perform a graceful disconnect // - broken_pipe: the peer is gone - bool shouldLog = + bool const shouldLog = (ec != boost::asio::error::eof && ec != boost::asio::error::operation_aborted && ec.message().find("application data after close notify") == std::string::npos); @@ -746,7 +746,7 @@ PeerImp::onTimer(error_code const& ec) clock_type::duration duration; { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); duration = clock_type::now() - trackingTime_; } @@ -818,10 +818,10 @@ PeerImp::doAccept() JLOG(journal_.debug()) << "Protocol: " << to_string(protocol_); - if (auto member = app_.cluster().member(publicKey_)) + if (auto member = app_.getCluster().member(publicKey_)) { { - std::unique_lock lock{nameMutex_}; + std::unique_lock const lock{nameMutex_}; name_ = *member; } JLOG(journal_.info()) << "Cluster name: " << *member; @@ -879,7 +879,7 @@ PeerImp::doAccept() std::string PeerImp::name() const { - std::shared_lock read_lock{nameMutex_}; + std::shared_lock const read_lock{nameMutex_}; return name_; } @@ -908,7 +908,7 @@ PeerImp::doProtocolStart() // Send all the validator lists that have been loaded if (inbound_ && supportsFeature(ProtocolFeature::ValidatorListPropagation)) { - app_.validators().for_each_available( + app_.getValidators().for_each_available( [&](std::string const& manifest, std::uint32_t version, std::map const& blobInfos, @@ -1200,7 +1200,7 @@ PeerImp::onMessage(std::shared_ptr const& m) auto const rtt = std::chrono::round(clock_type::now() - lastPingTime_); - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (latency_) { @@ -1242,11 +1242,11 @@ PeerImp::onMessage(std::shared_ptr const& m) { auto const reportTime = NetClock::time_point{NetClock::duration{node.reporttime()}}; - app_.cluster().update(*publicKey, name, node.nodeload(), reportTime); + app_.getCluster().update(*publicKey, name, node.nodeload(), reportTime); } } - int loadSources = m->loadsources().size(); + int const loadSources = m->loadsources().size(); if (loadSources != 0) { Resource::Gossip gossip; @@ -1264,13 +1264,13 @@ PeerImp::onMessage(std::shared_ptr const& m) } // Calculate the cluster fee: - auto const thresh = app_.timeKeeper().now() - 90s; + auto const thresh = app_.getTimeKeeper().now() - 90s; std::uint32_t clusterFee = 0; std::vector fees; - fees.reserve(app_.cluster().size()); + fees.reserve(app_.getCluster().size()); - app_.cluster().for_each([&fees, thresh](ClusterNode const& status) { + app_.getCluster().for_each([&fees, thresh](ClusterNode const& status) { if (status.getReportTime() >= thresh) fees.push_back(status.getLoadFee()); }); @@ -1371,7 +1371,7 @@ PeerImp::handleTransaction( try { auto stx = std::make_shared(sit); - uint256 txID = stx->getTransactionID(); + uint256 const txID = stx->getTransactionID(); // Charge strongly for attempting to relay a txn with tfInnerBatchTxn // LCOV_EXCL_START @@ -1509,7 +1509,7 @@ PeerImp::onMessage(std::shared_ptr const& m) } } else if ( - !m->has_ledgerhash() && !m->has_ledgerseq() && !(ltype && *ltype == protocol::ltCLOSED)) + !m->has_ledgerhash() && !m->has_ledgerseq() && (!ltype || *ltype != protocol::ltCLOSED)) { badData("Invalid request"); return; @@ -1581,7 +1581,7 @@ PeerImp::onMessage(std::shared_ptr const& m) } // Queue a job to process the request - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob(jtLEDGER_REQ, "RcvGetLedger", [weak, m]() { if (auto peer = weak.lock()) peer->processLedgerRequest(m); @@ -1599,7 +1599,7 @@ PeerImp::onMessage(std::shared_ptr const& m) } fee_.update(Resource::feeModerateBurdenPeer, "received a proof path request"); - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob(jtREPLAY_REQ, "RcvProofPReq", [weak, m]() { if (auto peer = weak.lock()) { @@ -1649,7 +1649,7 @@ PeerImp::onMessage(std::shared_ptr const& m) } fee_.fee = Resource::feeModerateBurdenPeer; - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob(jtREPLAY_REQ, "RcvReplDReq", [weak, m]() { if (auto peer = weak.lock()) { @@ -1769,7 +1769,7 @@ PeerImp::onMessage(std::shared_ptr const& m) // Otherwise check if received data for a candidate transaction set if (m->type() == protocol::liTS_CANDIDATE) { - std::weak_ptr weak{shared_from_this()}; + std::weak_ptr const weak{shared_from_this()}; app_.getJobQueue().addJob(jtTXN_DATA, "RcvPeerData", [weak, ledgerHash, m]() { if (auto peer = weak.lock()) { @@ -1786,7 +1786,7 @@ PeerImp::onMessage(std::shared_ptr const& m) void PeerImp::onMessage(std::shared_ptr const& m) { - protocol::TMProposeSet& set = *m; + protocol::TMProposeSet const& set = *m; auto const sig = makeSlice(set.signature()); @@ -1811,7 +1811,7 @@ PeerImp::onMessage(std::shared_ptr const& m) // suppression for 30 seconds to avoid doing a relatively expensive lookup // every time a spam packet is received PublicKey const publicKey{makeSlice(set.nodepubkey())}; - auto const isTrusted = app_.validators().trusted(publicKey); + auto const isTrusted = app_.getValidators().trusted(publicKey); // If the operator has specified that untrusted proposals be dropped then // this happens here I.e. before further wasting CPU verifying the signature @@ -1877,10 +1877,10 @@ PeerImp::onMessage(std::shared_ptr const& m) set.proposeseq(), proposeHash, closeTime, - app_.timeKeeper().closeTime(), - calcNodeID(app_.validatorManifests().getMasterKey(publicKey))}); + app_.getTimeKeeper().closeTime(), + calcNodeID(app_.getValidatorManifests().getMasterKey(publicKey))}); - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob( isTrusted ? jtPROPOSAL_t : jtPROPOSAL_ut, "checkPropose", [weak, isTrusted, m, proposal]() { if (auto peer = weak.lock()) @@ -1894,10 +1894,10 @@ PeerImp::onMessage(std::shared_ptr const& m) JLOG(p_journal_.trace()) << "Status: Change"; if (!m->has_networktime()) - m->set_networktime(app_.timeKeeper().now().time_since_epoch().count()); + m->set_networktime(app_.getTimeKeeper().now().time_since_epoch().count()); { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (!last_status_.has_newstatus() || m->has_newstatus()) { last_status_ = *m; @@ -1905,7 +1905,7 @@ PeerImp::onMessage(std::shared_ptr const& m) else { // preserve old status - protocol::NodeStatus status = last_status_.newstatus(); + protocol::NodeStatus const status = last_status_.newstatus(); last_status_ = *m; m->set_newstatus(status); } @@ -1917,7 +1917,7 @@ PeerImp::onMessage(std::shared_ptr const& m) { // Operations on closedLedgerHash_ and previousLedgerHash_ must be // guarded by recentLock_. - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (!closedLedgerHash_.isZero()) { outOfSync = true; @@ -1939,7 +1939,7 @@ PeerImp::onMessage(std::shared_ptr const& m) { // Operations on closedLedgerHash_ and previousLedgerHash_ must be // guarded by recentLock_. - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (peerChangedLedgers) { closedLedgerHash_ = m->ledgerhash(); @@ -1973,7 +1973,7 @@ PeerImp::onMessage(std::shared_ptr const& m) if (m->has_firstseq() && m->has_lastseq()) { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); minLedger_ = m->firstseq(); maxLedger_ = m->lastseq(); @@ -2040,7 +2040,7 @@ PeerImp::onMessage(std::shared_ptr const& m) { uint256 closedLedgerHash{}; { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); closedLedgerHash = closedLedgerHash_; } j[jss::ledger_hash] = to_string(closedLedgerHash); @@ -2068,7 +2068,7 @@ PeerImp::checkTracking(std::uint32_t validationSeq) { // Extract the sequence number of the highest // ledger this peer has - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); serverSeq = maxLedger_; } @@ -2083,7 +2083,7 @@ PeerImp::checkTracking(std::uint32_t validationSeq) void PeerImp::checkTracking(std::uint32_t seq1, std::uint32_t seq2) { - int diff = std::max(seq1, seq2) - std::min(seq1, seq2); + int const diff = std::max(seq1, seq2) - std::min(seq1, seq2); if (diff < Tuning::convergedLedgerLimit) { @@ -2094,7 +2094,7 @@ PeerImp::checkTracking(std::uint32_t seq1, std::uint32_t seq2) if ((diff > Tuning::divergedLedgerLimit) && (tracking_.load() != Tracking::diverged)) { // The peer's ledger sequence is way off the validation's - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); tracking_ = Tracking::diverged; trackingTime_ = clock_type::now(); @@ -2114,7 +2114,7 @@ PeerImp::onMessage(std::shared_ptr const& m) if (m->status() == protocol::tsHAVE) { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); if (std::find(recentTxSets_.begin(), recentTxSets_.end(), hash) != recentTxSets_.end()) { @@ -2157,13 +2157,13 @@ PeerImp::onValidatorListMessage( return; } - auto const applyResult = app_.validators().applyListsAndBroadcast( + auto const applyResult = app_.getValidators().applyListsAndBroadcast( manifest, version, blobs, remote_address_.to_string(), hash, - app_.overlay(), + app_.getOverlay(), app_.getHashRouter(), app_.getOPs()); @@ -2181,7 +2181,7 @@ PeerImp::onValidatorListMessage( case ListDisposition::expired: // Future list case ListDisposition::pending: { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); XRPL_ASSERT( applyResult.publisherKey, @@ -2204,7 +2204,7 @@ PeerImp::onValidatorListMessage( case ListDisposition::known_sequence: #ifndef NDEBUG { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); XRPL_ASSERT( applyResult.sequence && applyResult.publisherKey, "xrpl::PeerImp::onValidatorListMessage : nonzero sequence " @@ -2390,7 +2390,7 @@ PeerImp::onMessage(std::shared_ptr const& m) try { - auto const closeTime = app_.timeKeeper().closeTime(); + auto const closeTime = app_.getTimeKeeper().closeTime(); std::shared_ptr val; { @@ -2398,7 +2398,7 @@ PeerImp::onMessage(std::shared_ptr const& m) val = std::make_shared( std::ref(sit), [this](PublicKey const& pk) { - return calcNodeID(app_.validatorManifests().getMasterKey(pk)); + return calcNodeID(app_.getValidatorManifests().getMasterKey(pk)); }, false); val->setSeen(closeTime); @@ -2406,7 +2406,7 @@ PeerImp::onMessage(std::shared_ptr const& m) if (!isCurrent( app_.getValidations().parms(), - app_.timeKeeper().closeTime(), + app_.getTimeKeeper().closeTime(), val->getSignTime(), val->getSeenTime())) { @@ -2418,7 +2418,7 @@ PeerImp::onMessage(std::shared_ptr const& m) // RH TODO: when isTrusted = false we should probably also cache a key // suppression for 30 seconds to avoid doing a relatively expensive // lookup every time a spam packet is received - auto const isTrusted = app_.validators().trusted(val->getSignerPublic()); + auto const isTrusted = app_.getValidators().trusted(val->getSignerPublic()); // If the operator has specified that untrusted validations be // dropped then this happens here I.e. before further wasting CPU @@ -2464,7 +2464,7 @@ PeerImp::onMessage(std::shared_ptr const& m) { std::string const name = isTrusted ? "ChkTrust" : "ChkUntrust"; - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob( isTrusted ? jtVALIDATION_t : jtVALIDATION_ut, name, [weak, val, m, key]() { if (auto peer = weak.lock()) @@ -2487,7 +2487,7 @@ PeerImp::onMessage(std::shared_ptr const& m) void PeerImp::onMessage(std::shared_ptr const& m) { - protocol::TMGetObjectByHash& packet = *m; + protocol::TMGetObjectByHash const& packet = *m; JLOG(p_journal_.trace()) << "received TMGetObjectByHash " << packet.type() << " " << packet.objects_size(); @@ -2516,7 +2516,7 @@ PeerImp::onMessage(std::shared_ptr const& m) return; } - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob(jtREQUESTED_TXN, "DoTxs", [weak, m]() { if (auto peer = weak.lock()) peer->doTransactions(m); @@ -2555,7 +2555,7 @@ PeerImp::onMessage(std::shared_ptr const& m) uint256 const hash{obj.hash()}; // VFALCO TODO Move this someplace more sensible so we dont // need to inject the NodeStore interfaces. - std::uint32_t seq{obj.has_ledgerseq() ? obj.ledgerseq() : 0}; + std::uint32_t const seq{obj.has_ledgerseq() ? obj.ledgerseq() : 0}; auto nodeObject{app_.getNodeStore().fetchNodeObject(hash, seq)}; if (nodeObject) { @@ -2651,7 +2651,7 @@ PeerImp::onMessage(std::shared_ptr const& m) return; } - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); app_.getJobQueue().addJob(jtMISSING_TXN, "HandleHaveTxs", [weak, m]() { if (auto peer = weak.lock()) peer->handleHaveTransactions(m); @@ -2750,7 +2750,7 @@ PeerImp::onMessage(std::shared_ptr const& m) fee_.update(Resource::feeInvalidData, "squelch bad pubkey"); return; } - PublicKey key(slice); + PublicKey const key(slice); // Ignore the squelch for validator's own messages. if (key == app_.getValidationPublicKey()) @@ -2759,7 +2759,7 @@ PeerImp::onMessage(std::shared_ptr const& m) return; } - std::uint32_t duration = m->has_squelchduration() ? m->squelchduration() : 0; + std::uint32_t const duration = m->has_squelchduration() ? m->squelchduration() : 0; if (!m->squelch()) { squelch_.removeSquelch(key); @@ -2812,7 +2812,7 @@ PeerImp::doFetchPack(std::shared_ptr const& packet) uint256 const hash{packet->ledgerhash()}; - std::weak_ptr weak = shared_from_this(); + std::weak_ptr const weak = shared_from_this(); auto elapsed = UptimeClock::now(); auto const pap = &app_; app_.getJobQueue().addJob(jtPACK, "MakeFetchPack", [pap, weak, packet, hash, elapsed]() { @@ -2863,7 +2863,7 @@ PeerImp::doTransactions(std::shared_ptr const& pack sttx->add(s); tx->set_rawtransaction(s.data(), s.size()); tx->set_status(txn->getStatus() == INCLUDED ? protocol::tsCURRENT : protocol::tsNEW); - tx->set_receivetimestamp(app_.timeKeeper().now().time_since_epoch().count()); + tx->set_receivetimestamp(app_.getTimeKeeper().now().time_since_epoch().count()); tx->set_deferred(txn->getSubmitResult().queued); } @@ -2941,7 +2941,7 @@ PeerImp::checkTransaction( { JLOG(p_journal_.debug()) << "Passing skipped pseudo pseudo-transaction tx " << tx->getID(); - app_.overlay().relay(tx->getID(), {}, *toSkip); + app_.getOverlay().relay(tx->getID(), {}, *toSkip); } if (!batch) { @@ -3017,7 +3017,7 @@ PeerImp::checkPropose( if (!cluster() && !peerPos.checkSign()) { - std::string desc{"Proposal fails sig check"}; + std::string const desc{"Proposal fails sig check"}; JLOG(p_journal_.warn()) << desc; charge(Resource::feeInvalidSignature, desc); return; @@ -3041,7 +3041,7 @@ PeerImp::checkPropose( // not be relayed to these peers. But the message must be counted // as part of the squelch logic. auto haveMessage = - app_.overlay().relay(*packet, peerPos.suppressionID(), peerPos.publicKey()); + app_.getOverlay().relay(*packet, peerPos.suppressionID(), peerPos.publicKey()); if (!haveMessage.empty()) { overlay_.updateSlotAndSquelch( @@ -3061,7 +3061,7 @@ PeerImp::checkValidation( { if (!val->isValid()) { - std::string desc{"Validation forwarded by peer is invalid"}; + std::string const desc{"Validation forwarded by peer is invalid"}; JLOG(p_journal_.debug()) << desc; charge(Resource::feeInvalidSignature, desc); return; @@ -3376,7 +3376,7 @@ PeerImp::processLedgerRequest(std::shared_ptr const& m) } } - if (!map) + if (map == nullptr) { JLOG(p_journal_.warn()) << "processLedgerRequest: Unable to find map"; return; @@ -3493,7 +3493,7 @@ PeerImp::getScore(bool haveItem) const std::optional latency; { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); latency = latency_; } @@ -3512,7 +3512,7 @@ PeerImp::getScore(bool haveItem) const bool PeerImp::isHighLatency() const { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); return latency_ >= peerHighLatency; } @@ -3520,7 +3520,7 @@ void PeerImp::Metrics::add_message(std::uint64_t bytes) { using namespace std::chrono_literals; - std::unique_lock lock{mutex_}; + std::unique_lock const lock{mutex_}; totalBytes_ += bytes; accumBytes_ += bytes; @@ -3543,14 +3543,14 @@ PeerImp::Metrics::add_message(std::uint64_t bytes) std::uint64_t PeerImp::Metrics::average_bytes() const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; return rollingAvgBytes_; } std::uint64_t PeerImp::Metrics::total_bytes() const { - std::shared_lock lock{mutex_}; + std::shared_lock const lock{mutex_}; return totalBytes_; } diff --git a/src/xrpld/overlay/detail/PeerImp.h b/src/xrpld/overlay/detail/PeerImp.h index b4393ebd62..61b8e1e758 100644 --- a/src/xrpld/overlay/detail/PeerImp.h +++ b/src/xrpld/overlay/detail/PeerImp.h @@ -7,7 +7,6 @@ #include #include -#include #include #include #include @@ -429,7 +428,7 @@ public: std::optional publisherListSequence(PublicKey const& pubKey) const override { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); auto iter = publisherListSequences_.find(pubKey); if (iter != publisherListSequences_.end()) @@ -440,7 +439,7 @@ public: void setPublisherListSequence(PublicKey const& pubKey, std::size_t const seq) override { - std::lock_guard sl(recentLock_); + std::lock_guard const sl(recentLock_); publisherListSequences_[pubKey] = seq; } @@ -815,8 +814,8 @@ PeerImp::PeerImp( , id_(id) , fingerprint_(getFingerprint(slot->remote_endpoint(), publicKey, to_string(id_))) , prefix_(makePrefix(fingerprint_)) - , sink_(app_.journal("Peer"), prefix_) - , p_sink_(app_.journal("Protocol"), prefix_) + , sink_(app_.getJournal("Peer"), prefix_) + , p_sink_(app_.getJournal("Protocol"), prefix_) , journal_(sink_) , p_journal_(p_sink_) , stream_ptr_(std::move(stream_ptr)) @@ -833,7 +832,7 @@ PeerImp::PeerImp( , publicKey_(publicKey) , lastPingTime_(clock_type::now()) , creationTime_(clock_type::now()) - , squelch_(app_.journal("Squelch")) + , squelch_(app_.getJournal("Squelch")) , usage_(usage) , fee_{Resource::feeTrivialPeer} , slot_(std::move(slot)) diff --git a/src/xrpld/overlay/detail/PeerReservationTable.cpp b/src/xrpld/overlay/detail/PeerReservationTable.cpp index 78f29ad155..8f90848954 100644 --- a/src/xrpld/overlay/detail/PeerReservationTable.cpp +++ b/src/xrpld/overlay/detail/PeerReservationTable.cpp @@ -30,7 +30,7 @@ PeerReservationTable::list() const -> std::vector { std::vector list; { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list.reserve(table_.size()); std::copy(table_.begin(), table_.end(), std::back_inserter(list)); } @@ -47,7 +47,7 @@ PeerReservationTable::list() const -> std::vector bool PeerReservationTable::load(DatabaseCon& connection) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); connection_ = &connection; auto db = connection.checkoutDb(); @@ -62,7 +62,7 @@ PeerReservationTable::insert_or_assign(PeerReservation const& reservation) { std::optional previous; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto hint = table_.find(reservation); if (hint != table_.end()) @@ -96,7 +96,7 @@ PeerReservationTable::erase(PublicKey const& nodeId) { std::optional previous; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); auto const it = table_.find({nodeId}); if (it != table_.end()) diff --git a/src/xrpld/overlay/detail/PeerSet.cpp b/src/xrpld/overlay/detail/PeerSet.cpp index 1327d190c2..391fb6d3ca 100644 --- a/src/xrpld/overlay/detail/PeerSet.cpp +++ b/src/xrpld/overlay/detail/PeerSet.cpp @@ -37,7 +37,7 @@ private: std::set peers_; }; -PeerSetImpl::PeerSetImpl(Application& app) : app_(app), journal_(app.journal("PeerSet")) +PeerSetImpl::PeerSetImpl(Application& app) : app_(app), journal_(app.getJournal("PeerSet")) { } @@ -49,7 +49,7 @@ PeerSetImpl::addPeers( { using ScoredPeer = std::pair>; - auto const& overlay = app_.overlay(); + auto const& overlay = app_.getOverlay(); std::vector pairs; pairs.reserve(overlay.size()); @@ -90,7 +90,7 @@ PeerSetImpl::sendRequest( for (auto id : peers_) { - if (auto p = app_.overlay().findPeerByShortID(id)) + if (auto p = app_.getOverlay().findPeerByShortID(id)) p->send(packet); } } @@ -127,7 +127,7 @@ make_PeerSetBuilder(Application& app) class DummyPeerSet : public PeerSet { public: - DummyPeerSet(Application& app) : j_(app.journal("DummyPeerSet")) + DummyPeerSet(Application& app) : j_(app.getJournal("DummyPeerSet")) { } @@ -152,7 +152,7 @@ public: std::set const& getPeerIds() const override { - static std::set emptyPeers; + static std::set const emptyPeers; JLOG(j_.error()) << "DummyPeerSet getPeerIds should not be called"; return emptyPeers; } diff --git a/src/xrpld/overlay/detail/ProtocolMessage.h b/src/xrpld/overlay/detail/ProtocolMessage.h index 2442e48031..41d42674ba 100644 --- a/src/xrpld/overlay/detail/ProtocolMessage.h +++ b/src/xrpld/overlay/detail/ProtocolMessage.h @@ -237,7 +237,7 @@ template < std::shared_ptr parseMessageContent(MessageHeader const& header, Buffers const& buffers) { - auto const m = std::make_shared(); + auto m = std::make_shared(); ZeroCopyInputStream stream(buffers); stream.Skip(header.header_size); @@ -349,7 +349,7 @@ invokeProtocolMessage(Buffers const& buffers, Handler& handler, std::size_t& hin return result; } - bool success; + bool success = false; switch (header->message_type) { diff --git a/src/xrpld/overlay/detail/ProtocolVersion.cpp b/src/xrpld/overlay/detail/ProtocolVersion.cpp index 29bff996a9..1a55030cd4 100644 --- a/src/xrpld/overlay/detail/ProtocolVersion.cpp +++ b/src/xrpld/overlay/detail/ProtocolVersion.cpp @@ -17,13 +17,10 @@ namespace xrpl { it may not contain any duplicates!) */ -// clang-format off -constexpr ProtocolVersion const supportedProtocolList[] -{ +constexpr ProtocolVersion const supportedProtocolList[]{ {2, 1}, - {2, 2} + {2, 2}, }; -// clang-format on // This ugly construct ensures that supportedProtocolList is sorted in strictly // ascending order and doesn't contain any duplicates. @@ -61,7 +58,7 @@ to_string(ProtocolVersion const& p) std::vector parseProtocolVersions(boost::beast::string_view const& value) { - static boost::regex re( + static boost::regex const re( "^" // start of line "XRPL/" // The string "XRPL/" "([2-9]|(?:[1-9][0-9]+))" // a number (greater than 2 with no leading @@ -115,9 +112,8 @@ negotiateProtocolVersion(std::vector const& versions) // output of std::set_intersection is sorted, that item is always going // to be the last one. So we get a little clever and avoid the need for // a container: - std::function pickVersion = [&result](ProtocolVersion const& v) { - result = v; - }; + std::function const pickVersion = + [&result](ProtocolVersion const& v) { result = v; }; std::set_intersection( std::begin(versions), diff --git a/src/xrpld/overlay/detail/TxMetrics.cpp b/src/xrpld/overlay/detail/TxMetrics.cpp index 72cd9d6fa2..ee0e42e5d6 100644 --- a/src/xrpld/overlay/detail/TxMetrics.cpp +++ b/src/xrpld/overlay/detail/TxMetrics.cpp @@ -12,7 +12,7 @@ void TxMetrics::addMetrics(protocol::MessageType type, std::uint32_t val) { auto add = [&](auto& m, std::uint32_t val) { - std::lock_guard lock(mutex); + std::lock_guard const lock(mutex); m.addMetrics(val); }; @@ -41,7 +41,7 @@ TxMetrics::addMetrics(protocol::MessageType type, std::uint32_t val) void TxMetrics::addMetrics(std::uint32_t selected, std::uint32_t suppressed, std::uint32_t notenabled) { - std::lock_guard lock(mutex); + std::lock_guard const lock(mutex); selectedPeers.addMetrics(selected); suppressedPeers.addMetrics(suppressed); notEnabled.addMetrics(notenabled); @@ -50,7 +50,7 @@ TxMetrics::addMetrics(std::uint32_t selected, std::uint32_t suppressed, std::uin void TxMetrics::addMetrics(std::uint32_t missing) { - std::lock_guard lock(mutex); + std::lock_guard const lock(mutex); missingTx.addMetrics(missing); } @@ -94,7 +94,7 @@ SingleMetrics::addMetrics(std::uint32_t val) Json::Value TxMetrics::json() const { - std::lock_guard l(mutex); + std::lock_guard const l(mutex); Json::Value ret(Json::objectValue); diff --git a/src/xrpld/peerfinder/PeerfinderManager.h b/src/xrpld/peerfinder/PeerfinderManager.h index b850a10975..57fde8a569 100644 --- a/src/xrpld/peerfinder/PeerfinderManager.h +++ b/src/xrpld/peerfinder/PeerfinderManager.h @@ -8,6 +8,8 @@ #include +#include "xrpld/peerfinder/detail/Tuning.h" + #include namespace xrpl { @@ -27,7 +29,7 @@ struct Config This includes both inbound and outbound, but does not include fixed peers. */ - std::size_t maxPeers; + std::size_t maxPeers{Tuning::defaultMaxPeers}; /** The number of automatic outbound connections to maintain. Outbound connections are only maintained if autoConnect @@ -39,25 +41,25 @@ struct Config Inbound connections are only maintained if wantIncoming is `true`. */ - std::size_t inPeers; + std::size_t inPeers{0}; /** `true` if we want our IP address kept private. */ bool peerPrivate = true; /** `true` if we want to accept incoming connections. */ - bool wantIncoming; + bool wantIncoming{true}; /** `true` if we want to establish connections automatically */ - bool autoConnect; + bool autoConnect{true}; /** The listening port number. */ - std::uint16_t listeningPort; + std::uint16_t listeningPort{0}; /** The set of features we advertise. */ std::string features; /** Limit how many incoming connections we allow per IP */ - int ipLimit; + int ipLimit{0}; //-------------------------------------------------------------------------- diff --git a/src/xrpld/peerfinder/detail/Bootcache.cpp b/src/xrpld/peerfinder/detail/Bootcache.cpp index d07ec444a4..580ebe0c53 100644 --- a/src/xrpld/peerfinder/detail/Bootcache.cpp +++ b/src/xrpld/peerfinder/detail/Bootcache.cpp @@ -10,11 +10,8 @@ namespace xrpl { namespace PeerFinder { Bootcache::Bootcache(Store& store, clock_type& clock, beast::Journal journal) - : m_store(store) - , m_clock(clock) - , m_journal(journal) - , m_whenUpdate(m_clock.now()) - , m_needsUpdate(false) + : m_store(store), m_clock(clock), m_journal(journal), m_whenUpdate(m_clock.now()) + { } diff --git a/src/xrpld/peerfinder/detail/Bootcache.h b/src/xrpld/peerfinder/detail/Bootcache.h index a4687d95f4..9ab0a878e8 100644 --- a/src/xrpld/peerfinder/detail/Bootcache.h +++ b/src/xrpld/peerfinder/detail/Bootcache.h @@ -97,7 +97,7 @@ private: clock_type::time_point m_whenUpdate; // Set to true when a database update is needed - bool m_needsUpdate; + bool m_needsUpdate{false}; public: static constexpr int staticValence = 32; diff --git a/src/xrpld/peerfinder/detail/Checker.h b/src/xrpld/peerfinder/detail/Checker.h index 3e67754db9..21cc0f160e 100644 --- a/src/xrpld/peerfinder/detail/Checker.h +++ b/src/xrpld/peerfinder/detail/Checker.h @@ -44,7 +44,7 @@ private: async_op(Checker& owner, boost::asio::io_context& io_context, Handler&& handler); - ~async_op(); + virtual ~async_op(); void stop() override; @@ -108,7 +108,7 @@ template Checker::async_op::async_op( Checker& owner, boost::asio::io_context& io_context, - Handler&& handler) + Handler&& handler) // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) : checker_(owner), socket_(io_context), handler_(std::forward(handler)) { } @@ -154,7 +154,7 @@ template void Checker::stop() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); if (!stop_) { stop_ = true; @@ -180,7 +180,7 @@ Checker::async_connect(beast::IP::Endpoint const& endpoint, Handler&& auto const op = std::make_shared>(*this, io_context_, std::forward(handler)); { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.push_back(*op); } op->socket_.async_connect( @@ -192,7 +192,7 @@ template void Checker::remove(basic_async_op& op) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); list_.erase(list_.iterator_to(op)); if (list_.size() == 0) cond_.notify_all(); diff --git a/src/xrpld/peerfinder/detail/Counts.h b/src/xrpld/peerfinder/detail/Counts.h index 26e02a4cb1..8d40b44300 100644 --- a/src/xrpld/peerfinder/detail/Counts.h +++ b/src/xrpld/peerfinder/detail/Counts.h @@ -13,24 +13,6 @@ namespace PeerFinder { class Counts { public: - Counts() - : m_attempts(0) - , m_active(0) - , m_in_max(0) - , m_in_active(0) - , m_out_max(0) - , m_out_active(0) - , m_fixed(0) - , m_fixed_active(0) - , m_reserved(0) - - , m_acceptCount(0) - , m_closingCount(0) - { - } - - //-------------------------------------------------------------------------- - /** Adds the slot state and properties to the slot counts. */ void add(Slot const& s) @@ -282,38 +264,38 @@ private: private: /** Outbound connection attempts. */ - int m_attempts; + int m_attempts{0}; /** Active connections, including fixed and reserved. */ - std::size_t m_active; + std::size_t m_active{0}; /** Total number of inbound slots. */ - std::size_t m_in_max; + std::size_t m_in_max{0}; /** Number of inbound slots assigned to active peers. */ - std::size_t m_in_active; + std::size_t m_in_active{0}; /** Maximum desired outbound slots. */ - std::size_t m_out_max; + std::size_t m_out_max{0}; /** Active outbound slots. */ - std::size_t m_out_active; + std::size_t m_out_active{0}; /** Fixed connections. */ - std::size_t m_fixed; + std::size_t m_fixed{0}; /** Active fixed connections. */ - std::size_t m_fixed_active; + std::size_t m_fixed_active{0}; /** Reserved connections. */ - std::size_t m_reserved; + std::size_t m_reserved{0}; // Number of inbound connections that are // not active or gracefully closing. - int m_acceptCount; + int m_acceptCount{0}; // Number of connections that are gracefully closing. - int m_closingCount; + int m_closingCount{0}; }; } // namespace PeerFinder diff --git a/src/xrpld/peerfinder/detail/Fixed.h b/src/xrpld/peerfinder/detail/Fixed.h index 75b5ed9062..8b67347e6a 100644 --- a/src/xrpld/peerfinder/detail/Fixed.h +++ b/src/xrpld/peerfinder/detail/Fixed.h @@ -9,7 +9,7 @@ namespace PeerFinder { class Fixed { public: - explicit Fixed(clock_type& clock) : m_when(clock.now()), m_failures(0) + explicit Fixed(clock_type& clock) : m_when(clock.now()) { } @@ -40,7 +40,7 @@ public: private: clock_type::time_point m_when; - std::size_t m_failures; + std::size_t m_failures{0}; }; } // namespace PeerFinder diff --git a/src/xrpld/peerfinder/detail/Livecache.h b/src/xrpld/peerfinder/detail/Livecache.h index bedfd6c9d6..ac435e1e24 100644 --- a/src/xrpld/peerfinder/detail/Livecache.h +++ b/src/xrpld/peerfinder/detail/Livecache.h @@ -327,7 +327,7 @@ public: friend class Livecache; lists_type m_lists; - Histogram m_hist; + Histogram m_hist{}; } hops; /** Returns `true` if the cache is empty. */ diff --git a/src/xrpld/peerfinder/detail/Logic.h b/src/xrpld/peerfinder/detail/Logic.h index 39f1ca6ae6..ad0a2f8b96 100644 --- a/src/xrpld/peerfinder/detail/Logic.h +++ b/src/xrpld/peerfinder/detail/Logic.h @@ -106,7 +106,7 @@ public: void load() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); bootcache_.load(); } @@ -119,7 +119,7 @@ public: void stop() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); stopping_ = true; if (fetchSource_ != nullptr) fetchSource_->cancel(); @@ -134,7 +134,7 @@ public: void config(Config const& c) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); config_ = c; counts_.onConfig(config_); } @@ -142,7 +142,7 @@ public: Config config() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); return config_; } @@ -155,7 +155,7 @@ public: void addFixedPeer(std::string const& name, std::vector const& addresses) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); if (addresses.empty()) { @@ -197,7 +197,7 @@ public: if (ec == boost::asio::error::operation_aborted) return; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); auto const iter(slots_.find(remoteAddress)); if (iter == slots_.end()) { @@ -212,7 +212,7 @@ public: slot.connectivityCheckInProgress = false; beast::WrappedSink sink{m_journal.sink(), slot.prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; if (ec) { @@ -239,7 +239,7 @@ public: JLOG(m_journal.debug()) << beast::leftw(18) << "Logic accept" << remote_endpoint << " on local " << local_endpoint; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // Check for connection limit per address if (is_public(remote_endpoint)) @@ -287,7 +287,7 @@ public: { JLOG(m_journal.debug()) << beast::leftw(18) << "Logic connect " << remote_endpoint; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // Check for duplicate connection if (slots_.find(remote_endpoint) != slots_.end()) @@ -322,11 +322,11 @@ public: onConnected(SlotImp::ptr const& slot, beast::IP::Endpoint const& local_endpoint) { beast::WrappedSink sink{m_journal.sink(), slot->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; JLOG(journal.trace()) << "Logic connected on local " << local_endpoint; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // The object must exist in our table XRPL_ASSERT( @@ -360,12 +360,12 @@ public: activate(SlotImp::ptr const& slot, PublicKey const& key, bool reserved) { beast::WrappedSink sink{m_journal.sink(), slot->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; JLOG(journal.debug()) << "Logic handshake " << slot->remote_endpoint() << " with " << (reserved ? "reserved " : "") << "key " << key; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // The object must exist in our table XRPL_ASSERT( @@ -436,7 +436,7 @@ public: std::vector redirect(SlotImp::ptr const& slot) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); RedirectHandouts h(slot); livecache_.hops.shuffle(); handout(&h, (&h) + 1, livecache_.hops.begin(), livecache_.hops.end()); @@ -452,9 +452,9 @@ public: std::vector autoconnect() { - std::vector const none; + std::vector none; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // Count how many more outbound attempts to make // @@ -560,7 +560,7 @@ public: { std::vector, std::vector>> result; - std::lock_guard _(lock_); + std::lock_guard const _(lock_); clock_type::time_point const now = m_clock.now(); if (m_whenBroadcast <= now) @@ -624,7 +624,7 @@ public: SlotImp::ptr const& slot = t.slot(); auto const& list = t.list(); beast::WrappedSink sink{m_journal.sink(), slot->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; JLOG(journal.trace()) << "Logic sending " << list.size() << ((list.size() == 1) ? " endpoint" : " endpoints"); result.push_back(std::make_pair(slot, list)); @@ -639,7 +639,7 @@ public: void once_per_second() { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // Expire the Livecache livecache_.expire(); @@ -725,7 +725,7 @@ public: on_endpoints(SlotImp::ptr const& slot, Endpoints list) { beast::WrappedSink sink{m_journal.sink(), slot->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; // If we're sent too many endpoints, sample them at random: if (list.size() > Tuning::numberOfEndpointsMax) @@ -737,7 +737,7 @@ public: JLOG(journal.trace()) << "Endpoints contained " << list.size() << ((list.size() > 1) ? " entries" : " entry"); - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // The object must exist in our table XRPL_ASSERT( @@ -863,12 +863,12 @@ public: void on_closed(SlotImp::ptr const& slot) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); remove(slot); beast::WrappedSink sink{m_journal.sink(), slot->prefix()}; - beast::Journal journal{sink}; + beast::Journal const journal{sink}; // Mark fixed slot failure if (slot->fixed() && !slot->inbound() && slot->state() != Slot::active) @@ -921,7 +921,7 @@ public: void on_failure(SlotImp::ptr const& slot) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); bootcache_.on_failure(slot->remote_endpoint()); } @@ -1010,8 +1010,8 @@ public: addBootcacheAddresses(IPAddresses const& list) { int count(0); - std::lock_guard _(lock_); - for (auto addr : list) + std::lock_guard const _(lock_); + for (auto const& addr : list) { if (bootcache_.insertStatic(addr)) ++count; @@ -1027,7 +1027,7 @@ public: { { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); if (stopping_) return; fetchSource_ = source; @@ -1039,7 +1039,7 @@ public: source->fetch(results, m_journal); { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); if (stopping_) return; fetchSource_ = nullptr; @@ -1110,7 +1110,7 @@ public: void onWrite(beast::PropertyStream::Map& map) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); // VFALCO NOTE These ugly casts are needed because // of how std::size_t is declared on some linuxes @@ -1188,7 +1188,7 @@ Logic::onRedirects( FwdIter last, boost::asio::ip::tcp::endpoint const& remote_address) { - std::lock_guard _(lock_); + std::lock_guard const _(lock_); std::size_t n = 0; for (; first != last && n < Tuning::maxRedirects; ++first, ++n) bootcache_.insert(beast::IPAddressConversion::from_asio(*first)); diff --git a/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp b/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp index cc74018fc0..6a158fbbab 100644 --- a/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp +++ b/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp @@ -6,14 +6,8 @@ namespace xrpl { namespace PeerFinder { -Config::Config() - : maxPeers(Tuning::defaultMaxPeers) - , outPeers(calcOutPeers()) - , inPeers(0) - , wantIncoming(true) - , autoConnect(true) - , listeningPort(0) - , ipLimit(0) +Config::Config() : outPeers(calcOutPeers()) + { } @@ -23,7 +17,7 @@ operator==(Config const& lhs, Config const& rhs) return lhs.autoConnect == rhs.autoConnect && lhs.peerPrivate == rhs.peerPrivate && lhs.wantIncoming == rhs.wantIncoming && lhs.inPeers == rhs.inPeers && lhs.maxPeers == rhs.maxPeers && lhs.outPeers == rhs.outPeers && - lhs.features == lhs.features && lhs.ipLimit == rhs.ipLimit && + lhs.features == rhs.features && lhs.ipLimit == rhs.ipLimit && lhs.listeningPort == rhs.listeningPort; } @@ -78,7 +72,7 @@ Config::makeConfig( // Servers with peer privacy don't want to allow incoming connections config.wantIncoming = (!config.peerPrivate) && (port != 0); - if (!cfg.PEERS_OUT_MAX && !cfg.PEERS_IN_MAX) + if ((cfg.PEERS_OUT_MAX == 0u) && (cfg.PEERS_IN_MAX == 0u)) { if (cfg.PEERS_MAX != 0) config.maxPeers = cfg.PEERS_MAX; diff --git a/src/xrpld/peerfinder/detail/PeerfinderManager.cpp b/src/xrpld/peerfinder/detail/PeerfinderManager.cpp index 70f082c0d5..e9c42b7eb5 100644 --- a/src/xrpld/peerfinder/detail/PeerfinderManager.cpp +++ b/src/xrpld/peerfinder/detail/PeerfinderManager.cpp @@ -117,21 +117,21 @@ public: void on_endpoints(std::shared_ptr const& slot, Endpoints const& endpoints) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); m_logic.on_endpoints(impl, endpoints); } void on_closed(std::shared_ptr const& slot) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); m_logic.on_closed(impl); } void on_failure(std::shared_ptr const& slot) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); m_logic.on_failure(impl); } @@ -149,21 +149,21 @@ public: onConnected(std::shared_ptr const& slot, beast::IP::Endpoint const& local_endpoint) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); return m_logic.onConnected(impl, local_endpoint); } Result activate(std::shared_ptr const& slot, PublicKey const& key, bool reserved) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); return m_logic.activate(impl, key, reserved); } std::vector redirect(std::shared_ptr const& slot) override { - SlotImp::ptr impl(std::dynamic_pointer_cast(slot)); + SlotImp::ptr const impl(std::dynamic_pointer_cast(slot)); return m_logic.redirect(impl); } @@ -226,7 +226,7 @@ private: void collect_metrics() { - std::lock_guard lock(m_statsMutex); + std::lock_guard const lock(m_statsMutex); m_stats.activeInboundPeers = m_logic.counts_.inboundActive(); m_stats.activeOutboundPeers = m_logic.counts_.out_active(); } diff --git a/src/xrpld/peerfinder/detail/Store.h b/src/xrpld/peerfinder/detail/Store.h index dab50b3ce0..390f80800a 100644 --- a/src/xrpld/peerfinder/detail/Store.h +++ b/src/xrpld/peerfinder/detail/Store.h @@ -22,7 +22,7 @@ public: explicit Entry() = default; beast::IP::Endpoint endpoint; - int valence; + int valence{}; }; virtual void save(std::vector const& v) = 0; diff --git a/src/xrpld/perflog/detail/PerfLogImp.cpp b/src/xrpld/perflog/detail/PerfLogImp.cpp index fc9ef70830..266c99a147 100644 --- a/src/xrpld/perflog/detail/PerfLogImp.cpp +++ b/src/xrpld/perflog/detail/PerfLogImp.cpp @@ -69,9 +69,9 @@ PerfLogImp::Counters::countersJson() const { Rpc value; { - std::lock_guard lock(proc.second.mutex); - if (!proc.second.value.started && !proc.second.value.finished && - !proc.second.value.errored) + std::lock_guard const lock(proc.second.mutex); + if ((proc.second.value.started == 0u) && (proc.second.value.finished == 0u) && + (proc.second.value.errored == 0u)) { continue; } @@ -90,7 +90,7 @@ PerfLogImp::Counters::countersJson() const rpcobj[proc.first] = p; } - if (totalRpc.started) + if (totalRpc.started != 0u) { Json::Value totalRpcJson(Json::objectValue); totalRpcJson[jss::started] = std::to_string(totalRpc.started); @@ -107,9 +107,9 @@ PerfLogImp::Counters::countersJson() const { Jq value; { - std::lock_guard lock(proc.second.mutex); - if (!proc.second.value.queued && !proc.second.value.started && - !proc.second.value.finished) + std::lock_guard const lock(proc.second.mutex); + if ((proc.second.value.queued == 0u) && (proc.second.value.started == 0u) && + (proc.second.value.finished == 0u)) { continue; } @@ -130,7 +130,7 @@ PerfLogImp::Counters::countersJson() const jobQueueObj[JobTypes::name(proc.first)] = j; } - if (totalJq.queued) + if (totalJq.queued != 0u) { Json::Value totalJqJson(Json::objectValue); totalJqJson[jss::queued] = std::to_string(totalJq.queued); @@ -156,7 +156,7 @@ PerfLogImp::Counters::currentJson() const Json::Value jobsArray(Json::arrayValue); auto const jobs = [this] { - std::lock_guard lock(jobsMutex_); + std::lock_guard const lock(jobsMutex_); return jobs_; }(); @@ -174,7 +174,7 @@ PerfLogImp::Counters::currentJson() const Json::Value methodsArray(Json::arrayValue); std::vector methods; { - std::lock_guard lock(methodsMutex_); + std::lock_guard const lock(methodsMutex_); methods.reserve(methods_.size()); for (auto const& m : methods_) methods.push_back(m.second); @@ -270,7 +270,7 @@ PerfLogImp::report() Json::Value report(Json::objectValue); report[jss::time] = to_string(std::chrono::floor(present)); { - std::lock_guard lock{counters_.jobsMutex_}; + std::lock_guard const lock{counters_.jobsMutex_}; report[jss::workers] = static_cast(counters_.jobs_.size()); } report[jss::hostid] = hostname_; @@ -311,10 +311,10 @@ PerfLogImp::rpcStart(std::string const& method, std::uint64_t const requestId) } { - std::lock_guard lock(counter->second.mutex); + std::lock_guard const lock(counter->second.mutex); ++counter->second.value.started; } - std::lock_guard lock(counters_.methodsMutex_); + std::lock_guard const lock(counters_.methodsMutex_); counters_.methods_[requestId] = {counter->first.c_str(), steady_clock::now()}; } @@ -331,7 +331,7 @@ PerfLogImp::rpcEnd(std::string const& method, std::uint64_t const requestId, boo } steady_time_point startTime; { - std::lock_guard lock(counters_.methodsMutex_); + std::lock_guard const lock(counters_.methodsMutex_); auto const e = counters_.methods_.find(requestId); if (e != counters_.methods_.end()) { @@ -345,7 +345,7 @@ PerfLogImp::rpcEnd(std::string const& method, std::uint64_t const requestId, boo // LCOV_EXCL_STOP } } - std::lock_guard lock(counter->second.mutex); + std::lock_guard const lock(counter->second.mutex); if (finish) { ++counter->second.value.finished; @@ -369,7 +369,7 @@ PerfLogImp::jobQueue(JobType const type) return; // LCOV_EXCL_STOP } - std::lock_guard lock(counter->second.mutex); + std::lock_guard const lock(counter->second.mutex); ++counter->second.value.queued; } @@ -390,11 +390,11 @@ PerfLogImp::jobStart( } { - std::lock_guard lock(counter->second.mutex); + std::lock_guard const lock(counter->second.mutex); ++counter->second.value.started; counter->second.value.queuedDuration += dur; } - std::lock_guard lock(counters_.jobsMutex_); + std::lock_guard const lock(counters_.jobsMutex_); if (instance >= 0 && instance < counters_.jobs_.size()) counters_.jobs_[instance] = {type, startTime}; } @@ -412,11 +412,11 @@ PerfLogImp::jobFinish(JobType const type, microseconds dur, int instance) } { - std::lock_guard lock(counter->second.mutex); + std::lock_guard const lock(counter->second.mutex); ++counter->second.value.finished; counter->second.value.runningDuration += dur; } - std::lock_guard lock(counters_.jobsMutex_); + std::lock_guard const lock(counters_.jobsMutex_); if (instance >= 0 && instance < counters_.jobs_.size()) counters_.jobs_[instance] = {jtINVALID, steady_time_point()}; } @@ -424,7 +424,7 @@ PerfLogImp::jobFinish(JobType const type, microseconds dur, int instance) void PerfLogImp::resizeJobs(int const resize) { - std::lock_guard lock(counters_.jobsMutex_); + std::lock_guard const lock(counters_.jobsMutex_); if (resize > counters_.jobs_.size()) counters_.jobs_.resize(resize, {jtINVALID, steady_time_point()}); } @@ -435,7 +435,7 @@ PerfLogImp::rotate() if (setup_.perfLog.empty()) return; - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); rotate_ = true; cond_.notify_one(); } @@ -453,7 +453,7 @@ PerfLogImp::stop() if (thread_.joinable()) { { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); stop_ = true; cond_.notify_one(); } diff --git a/src/xrpld/rpc/BookChanges.h b/src/xrpld/rpc/BookChanges.h index b2b1ae793b..a318c80221 100644 --- a/src/xrpld/rpc/BookChanges.h +++ b/src/xrpld/rpc/BookChanges.h @@ -11,7 +11,7 @@ namespace Json { class Value; -} +} // namespace Json namespace xrpl { @@ -44,7 +44,7 @@ computeBookChanges(std::shared_ptr const& lpAccepted) continue; std::optional offerCancel; - uint16_t tt = tx.first->getFieldU16(sfTransactionType); + uint16_t const tt = tx.first->getFieldU16(sfTransactionType); switch (tt) { case ttOFFER_CANCEL: @@ -62,7 +62,7 @@ computeBookChanges(std::shared_ptr const& lpAccepted) for (auto const& node : tx.second->getFieldArray(sfAffectedNodes)) { SField const& metaType = node.getFName(); - uint16_t nodeType = node.getFieldU16(sfLedgerEntryType); + uint16_t const nodeType = node.getFieldU16(sfLedgerEntryType); // we only care about ltOFFER objects being modified or // deleted @@ -94,13 +94,13 @@ computeBookChanges(std::shared_ptr const& lpAccepted) // compute the difference in gets and pays actually // affected onto the offer - STAmount deltaGets = finalFields.getFieldAmount(sfTakerGets) - + STAmount const deltaGets = finalFields.getFieldAmount(sfTakerGets) - previousFields.getFieldAmount(sfTakerGets); - STAmount deltaPays = finalFields.getFieldAmount(sfTakerPays) - + STAmount const deltaPays = finalFields.getFieldAmount(sfTakerPays) - previousFields.getFieldAmount(sfTakerPays); - std::string g{to_string(deltaGets.issue())}; - std::string p{to_string(deltaPays.issue())}; + std::string const g{to_string(deltaGets.issue())}; + std::string const p{to_string(deltaPays.issue())}; bool const noswap = isXRP(deltaGets) ? true : (isXRP(deltaPays) ? false : (g < p)); @@ -111,7 +111,7 @@ computeBookChanges(std::shared_ptr const& lpAccepted) if (second == beast::zero) continue; - STAmount rate = divide(first, second, noIssue()); + STAmount const rate = divide(first, second, noIssue()); if (first < beast::zero) first = -first; @@ -125,9 +125,9 @@ computeBookChanges(std::shared_ptr const& lpAccepted) else ss << p << "|" << g; - std::optional domain = finalFields[~sfDomainID]; + std::optional const domain = finalFields[~sfDomainID]; - std::string key{ss.str()}; + std::string const key{ss.str()}; if (tally.find(key) == tally.end()) tally[key] = { @@ -174,8 +174,8 @@ computeBookChanges(std::shared_ptr const& lpAccepted) { Json::Value& inner = jvObj[jss::changes].append(Json::objectValue); - STAmount volA = std::get<0>(entry.second); - STAmount volB = std::get<1>(entry.second); + STAmount const volA = std::get<0>(entry.second); + STAmount const volB = std::get<1>(entry.second); inner[jss::currency_a] = (isXRP(volA) ? "XRP_drops" : to_string(volA.issue())); inner[jss::currency_b] = (isXRP(volB) ? "XRP_drops" : to_string(volB.issue())); diff --git a/src/xrpld/rpc/CTID.h b/src/xrpld/rpc/CTID.h index cbae1f4498..42efb4c157 100644 --- a/src/xrpld/rpc/CTID.h +++ b/src/xrpld/rpc/CTID.h @@ -39,7 +39,7 @@ encodeCTID(uint32_t ledgerSeq, uint32_t txnIndex, uint32_t networkID) noexcept if (ledgerSeq > maxLedgerSeq || txnIndex > maxTxnIndex || networkID > maxNetworkID) return std::nullopt; - uint64_t ctidValue = ((0xC000'0000ULL + static_cast(ledgerSeq)) << 32) | + uint64_t const ctidValue = ((0xC000'0000ULL + static_cast(ledgerSeq)) << 32) | ((static_cast(txnIndex) << 16) | networkID); std::stringstream buffer; @@ -101,9 +101,9 @@ decodeCTID(T const ctid) noexcept if ((ctidValue & ctidPrefixMask) != ctidPrefix) return std::nullopt; - uint32_t ledgerSeq = static_cast((ctidValue >> 32) & 0x0FFF'FFFF); - uint16_t txnIndex = static_cast((ctidValue >> 16) & 0xFFFF); - uint16_t networkID = static_cast(ctidValue & 0xFFFF); + uint32_t const ledgerSeq = static_cast((ctidValue >> 32) & 0x0FFF'FFFF); + uint16_t const txnIndex = static_cast((ctidValue >> 16) & 0xFFFF); + uint16_t const networkID = static_cast(ctidValue & 0xFFFF); return std::make_tuple(ledgerSeq, txnIndex, networkID); } diff --git a/src/xrpld/rpc/DeliveredAmount.h b/src/xrpld/rpc/DeliveredAmount.h index c882190ade..65f11e9736 100644 --- a/src/xrpld/rpc/DeliveredAmount.h +++ b/src/xrpld/rpc/DeliveredAmount.h @@ -8,7 +8,7 @@ namespace Json { class Value; -} +} // namespace Json namespace xrpl { diff --git a/src/xrpld/rpc/RPCCall.h b/src/xrpld/rpc/RPCCall.h index 54b73b65cf..6ab9f1d1fa 100644 --- a/src/xrpld/rpc/RPCCall.h +++ b/src/xrpld/rpc/RPCCall.h @@ -2,7 +2,7 @@ #include -#include +#include #include #include diff --git a/src/xrpld/rpc/RPCSub.h b/src/xrpld/rpc/RPCSub.h index e89f8f34e4..e96234ee02 100644 --- a/src/xrpld/rpc/RPCSub.h +++ b/src/xrpld/rpc/RPCSub.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -29,6 +30,6 @@ make_RPCSub( std::string const& strUrl, std::string const& strUsername, std::string const& strPassword, - Logs& logs); + ServiceRegistry& registry); } // namespace xrpl diff --git a/src/xrpld/rpc/ServerHandler.h b/src/xrpld/rpc/ServerHandler.h index 74f59756b0..2ffdc9556b 100644 --- a/src/xrpld/rpc/ServerHandler.h +++ b/src/xrpld/rpc/ServerHandler.h @@ -147,7 +147,7 @@ public: Handoff onHandoff( Session& session, - http_request_type&& request, + http_request_type&& request, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved) boost::asio::ip::tcp::endpoint const& remote_address) { return onHandoff(session, {}, std::forward(request), remote_address); diff --git a/src/xrpld/rpc/Status.h b/src/xrpld/rpc/Status.h index c8ec9d0472..418ad9ccae 100644 --- a/src/xrpld/rpc/Status.h +++ b/src/xrpld/rpc/Status.h @@ -29,7 +29,7 @@ public: // The enable_if allows only integers (not enums). Prevents enum narrowing. template ::value>> - Status(T code, Strings d = {}) : type_(Type::none), code_(code), messages_(std::move(d)) + Status(T code, Strings d = {}) : code_(code), messages_(std::move(d)) { } diff --git a/src/xrpld/app/paths/AccountCurrencies.cpp b/src/xrpld/rpc/detail/AccountCurrencies.cpp similarity index 97% rename from src/xrpld/app/paths/AccountCurrencies.cpp rename to src/xrpld/rpc/detail/AccountCurrencies.cpp index 92ba61e00e..c839b1475c 100644 --- a/src/xrpld/app/paths/AccountCurrencies.cpp +++ b/src/xrpld/rpc/detail/AccountCurrencies.cpp @@ -1,4 +1,4 @@ -#include +#include namespace xrpl { diff --git a/src/xrpld/app/paths/AccountCurrencies.h b/src/xrpld/rpc/detail/AccountCurrencies.h similarity index 89% rename from src/xrpld/app/paths/AccountCurrencies.h rename to src/xrpld/rpc/detail/AccountCurrencies.h index d8459de7f2..76c531cb9b 100644 --- a/src/xrpld/app/paths/AccountCurrencies.h +++ b/src/xrpld/rpc/detail/AccountCurrencies.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/src/xrpld/rpc/detail/DeliveredAmount.cpp b/src/xrpld/rpc/detail/DeliveredAmount.cpp index 3e89edc1f9..e2f5bd8cd9 100644 --- a/src/xrpld/rpc/detail/DeliveredAmount.cpp +++ b/src/xrpld/rpc/detail/DeliveredAmount.cpp @@ -71,13 +71,8 @@ canHaveDeliveredAmount( TxType const tt{serializedTx->getTxnType()}; // Transaction type should be ttPAYMENT, ttACCOUNT_DELETE or ttCHECK_CASH // and if the transaction failed nothing could have been delivered. - if ((tt == ttPAYMENT || tt == ttCHECK_CASH || tt == ttACCOUNT_DELETE) && - transactionMeta.getResultTER() == tesSUCCESS) - { - return true; - } - - return false; + return (tt == ttPAYMENT || tt == ttCHECK_CASH || tt == ttACCOUNT_DELETE) && + transactionMeta.getResultTER() == tesSUCCESS; } void diff --git a/src/xrpld/rpc/detail/Handler.cpp b/src/xrpld/rpc/detail/Handler.cpp index 04cf0420b7..0f95e69d3f 100644 --- a/src/xrpld/rpc/detail/Handler.cpp +++ b/src/xrpld/rpc/detail/Handler.cpp @@ -150,7 +150,7 @@ private: // Use with equal_range to enforce that API range of a newly added handler // does not overlap with API range of an existing handler with same name - [[nodiscard]] bool + [[nodiscard]] static bool overlappingApiVersion( std::pair range, unsigned minVer, diff --git a/src/xrpld/rpc/detail/Handler.h b/src/xrpld/rpc/detail/Handler.h index 908cb67750..3628962a69 100644 --- a/src/xrpld/rpc/detail/Handler.h +++ b/src/xrpld/rpc/detail/Handler.h @@ -10,7 +10,7 @@ namespace Json { class Object; -} +} // namespace Json namespace xrpl { namespace RPC { diff --git a/src/xrpld/rpc/detail/LegacyPathFind.cpp b/src/xrpld/rpc/detail/LegacyPathFind.cpp index b0fa07d676..5b5bcc540b 100644 --- a/src/xrpld/rpc/detail/LegacyPathFind.cpp +++ b/src/xrpld/rpc/detail/LegacyPathFind.cpp @@ -9,7 +9,7 @@ namespace xrpl { namespace RPC { -LegacyPathFind::LegacyPathFind(bool isAdmin, Application& app) : m_isOk(false) +LegacyPathFind::LegacyPathFind(bool isAdmin, Application& app) { if (isAdmin) { diff --git a/src/xrpld/rpc/detail/LegacyPathFind.h b/src/xrpld/rpc/detail/LegacyPathFind.h index 139075b53d..3d45bc9cfd 100644 --- a/src/xrpld/rpc/detail/LegacyPathFind.h +++ b/src/xrpld/rpc/detail/LegacyPathFind.h @@ -23,7 +23,7 @@ public: private: static std::atomic inProgress; - bool m_isOk; + bool m_isOk{false}; }; } // namespace RPC diff --git a/src/xrpld/app/paths/PathRequest.cpp b/src/xrpld/rpc/detail/PathRequest.cpp similarity index 96% rename from src/xrpld/app/paths/PathRequest.cpp rename to src/xrpld/rpc/detail/PathRequest.cpp index f82a207552..fe85c519eb 100644 --- a/src/xrpld/app/paths/PathRequest.cpp +++ b/src/xrpld/rpc/detail/PathRequest.cpp @@ -1,12 +1,11 @@ #include -#include -#include -#include -#include #include +#include +#include +#include +#include #include -#include #include #include #include @@ -24,7 +23,7 @@ PathRequest::PathRequest( Application& app, std::shared_ptr const& subscriber, int id, - PathRequests& owner, + PathRequestManager& owner, beast::Journal journal) : app_(app) , m_journal(journal) @@ -47,7 +46,7 @@ PathRequest::PathRequest( std::function const& completion, Resource::Consumer& consumer, int id, - PathRequests& owner, + PathRequestManager& owner, beast::Journal journal) : app_(app) , m_journal(journal) @@ -93,7 +92,7 @@ PathRequest::~PathRequest() bool PathRequest::isNew() { - std::lock_guard sl(mIndexLock); + std::lock_guard const sl(mIndexLock); // does this path request still need its first full path return mLastIndex == 0; @@ -102,7 +101,7 @@ PathRequest::isNew() bool PathRequest::needsUpdate(bool newOnly, LedgerIndex index) { - std::lock_guard sl(mIndexLock); + std::lock_guard const sl(mIndexLock); if (mInProgress) { @@ -134,7 +133,7 @@ PathRequest::hasCompletion() void PathRequest::updateComplete() { - std::lock_guard sl(mIndexLock); + std::lock_guard const sl(mIndexLock); XRPL_ASSERT(mInProgress, "xrpl::PathRequest::updateComplete : in progress"); mInProgress = false; @@ -191,7 +190,7 @@ PathRequest::isValid(std::shared_ptr const& crCache) } else { - bool const disallowXRP(sleDest->getFlags() & lsfDisallowXRP); + bool const disallowXRP((sleDest->getFlags() & lsfDisallowXRP) != 0u); auto usDestCurrID = accountDestCurrencies(*raDstAccount, crCache, !disallowXRP); @@ -417,7 +416,7 @@ Json::Value PathRequest::doClose() { JLOG(m_journal.debug()) << iIdentifier << " closed"; - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); jvStatus[jss::closed] = true; return jvStatus; } @@ -425,7 +424,7 @@ PathRequest::doClose() Json::Value PathRequest::doStatus(Json::Value const&) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); jvStatus[jss::status] = jss::success; return jvStatus; } @@ -528,7 +527,7 @@ PathRequest::findPaths( return *raSrcAccount; }(); - STAmount saMaxAmount = + STAmount const saMaxAmount = saSendMax.value_or(STAmount(Issue{issue.currency, sourceAccount}, 1u, 0, true)); JLOG(m_journal.debug()) << iIdentifier << " Paths found, calling rippleCalc"; @@ -546,7 +545,7 @@ PathRequest::findPaths( *raSrcAccount, // --> Account sending from. ps, // --> Path set. domain, // --> Domain. - app_.logs(), + app_, &rcInput); if (!convert_all_ && !fullLiquidityPath.empty() && @@ -565,7 +564,7 @@ PathRequest::findPaths( *raSrcAccount, // --> Account sending from. ps, // --> Path set. domain, // --> Domain. - app_.logs()); + app_); if (!isTesSuccess(rc.result())) { @@ -609,7 +608,7 @@ PathRequest::findPaths( after four source currencies, 50 - (4 * 4) = 34. */ int const size = sourceCurrencies.size(); - consumer_.charge({std::clamp(size * size + 34, 50, 400), "path update"}); + consumer_.charge({std::clamp((size * size) + 34, 50, 400), "path update"}); return true; } @@ -623,7 +622,7 @@ PathRequest::doUpdate( JLOG(m_journal.debug()) << iIdentifier << " update " << (fast ? "fast" : "normal"); { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (!isValid(cache)) return jvStatus; @@ -648,7 +647,7 @@ PathRequest::doUpdate( if (jvId) newStatus[jss::id] = jvId; - bool loaded = app_.getFeeTrack().isLoadedLocal(); + bool const loaded = app_.getFeeTrack().isLoadedLocal(); if (iLevel == 0) { @@ -711,7 +710,7 @@ PathRequest::doUpdate( } { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); jvStatus = newStatus; } diff --git a/src/xrpld/app/paths/PathRequest.h b/src/xrpld/rpc/detail/PathRequest.h similarity index 94% rename from src/xrpld/app/paths/PathRequest.h rename to src/xrpld/rpc/detail/PathRequest.h index 0ffc6c6e2c..db173e307b 100644 --- a/src/xrpld/app/paths/PathRequest.h +++ b/src/xrpld/rpc/detail/PathRequest.h @@ -1,11 +1,11 @@ #pragma once -#include -#include -#include +#include +#include #include #include +#include #include #include @@ -20,7 +20,7 @@ namespace xrpl { // The request issuer must maintain a strong pointer class RippleLineCache; -class PathRequests; +class PathRequestManager; // Return values from parseJson <0 = invalid, >0 = valid #define PFR_PJ_INVALID -1 @@ -43,7 +43,7 @@ public: Application& app, std::shared_ptr const& subscriber, int id, - PathRequests&, + PathRequestManager&, beast::Journal journal); // ripple_path_find semantics @@ -53,7 +53,7 @@ public: std::function const& completion, Resource::Consumer& consumer, int id, - PathRequests&, + PathRequestManager&, beast::Journal journal); ~PathRequest(); @@ -119,7 +119,7 @@ private: std::recursive_mutex mLock; - PathRequests& mOwner; + PathRequestManager& mOwner; std::weak_ptr wpSubscriber; // Who this request came from std::function fCompletion; diff --git a/src/xrpld/app/paths/PathRequests.cpp b/src/xrpld/rpc/detail/PathRequestManager.cpp similarity index 91% rename from src/xrpld/app/paths/PathRequests.cpp rename to src/xrpld/rpc/detail/PathRequestManager.cpp index 61db1e58ef..4455e304e5 100644 --- a/src/xrpld/app/paths/PathRequests.cpp +++ b/src/xrpld/rpc/detail/PathRequestManager.cpp @@ -1,8 +1,7 @@ #include #include -#include +#include -#include #include #include #include @@ -16,9 +15,9 @@ namespace xrpl { Get the correct ledger to use. */ std::shared_ptr -PathRequests::getLineCache(std::shared_ptr const& ledger, bool authoritative) +PathRequestManager::getLineCache(std::shared_ptr const& ledger, bool authoritative) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto lineCache = lineCache_.lock(); @@ -37,13 +36,13 @@ PathRequests::getLineCache(std::shared_ptr const& ledger, bool a // weak_ptr, and will immediately discard it if there are no other // references. lineCache_ = lineCache = - std::make_shared(ledger, app_.journal("RippleLineCache")); + std::make_shared(ledger, app_.getJournal("RippleLineCache")); } return lineCache; } void -PathRequests::updateAll(std::shared_ptr const& inLedger) +PathRequestManager::updateAll(std::shared_ptr const& inLedger) { auto event = app_.getJobQueue().makeLoadEvent(jtPATH_FIND, "PathRequest::updateAll"); @@ -52,7 +51,7 @@ PathRequests::updateAll(std::shared_ptr const& inLedger) // Get the ledger and cache we should be using { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); requests = requests_; cache = getLineCache(inLedger, true); } @@ -131,7 +130,7 @@ PathRequests::updateAll(std::shared_ptr const& inLedger) if (remove) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); // Remove any dangling weak pointers or weak // pointers that refer to this path request. @@ -176,7 +175,7 @@ PathRequests::updateAll(std::shared_ptr const& inLedger) std::shared_ptr lastCache; { // Get the latest requests, cache, and ledger for next pass - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (requests_.empty()) break; @@ -191,16 +190,16 @@ PathRequests::updateAll(std::shared_ptr const& inLedger) } bool -PathRequests::requestsPending() const +PathRequestManager::requestsPending() const { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); return !requests_.empty(); } void -PathRequests::insertPathRequest(PathRequest::pointer const& req) +PathRequestManager::insertPathRequest(PathRequest::pointer const& req) { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); // Insert after any older unserviced requests but before // any serviced requests @@ -216,7 +215,7 @@ PathRequests::insertPathRequest(PathRequest::pointer const& req) // Make a new-style path_find request Json::Value -PathRequests::makePathRequest( +PathRequestManager::makePathRequest( std::shared_ptr const& subscriber, std::shared_ptr const& inLedger, Json::Value const& requestJson) @@ -236,7 +235,7 @@ PathRequests::makePathRequest( // Make an old-style ripple_path_find request Json::Value -PathRequests::makeLegacyPathRequest( +PathRequestManager::makeLegacyPathRequest( PathRequest::pointer& req, std::function completion, Resource::Consumer& consumer, @@ -269,12 +268,12 @@ PathRequests::makeLegacyPathRequest( } Json::Value -PathRequests::doLegacyPathRequest( +PathRequestManager::doLegacyPathRequest( Resource::Consumer& consumer, std::shared_ptr const& inLedger, Json::Value const& request) { - auto cache = std::make_shared(inLedger, app_.journal("RippleLineCache")); + auto cache = std::make_shared(inLedger, app_.getJournal("RippleLineCache")); auto req = std::make_shared(app_, [] {}, consumer, ++mLastIdentifier, *this, mJournal); diff --git a/src/xrpld/app/paths/PathRequests.h b/src/xrpld/rpc/detail/PathRequestManager.h similarity index 94% rename from src/xrpld/app/paths/PathRequests.h rename to src/xrpld/rpc/detail/PathRequestManager.h index 98f4be9fd7..0f884de5f3 100644 --- a/src/xrpld/app/paths/PathRequests.h +++ b/src/xrpld/rpc/detail/PathRequestManager.h @@ -1,8 +1,8 @@ #pragma once #include -#include -#include +#include +#include #include #include @@ -10,11 +10,11 @@ namespace xrpl { -class PathRequests +class PathRequestManager { public: /** A collection of all PathRequest instances. */ - PathRequests( + PathRequestManager( Application& app, beast::Journal journal, beast::insight::Collector::ptr const& collector) diff --git a/src/xrpld/app/paths/Pathfinder.cpp b/src/xrpld/rpc/detail/Pathfinder.cpp similarity index 96% rename from src/xrpld/app/paths/Pathfinder.cpp rename to src/xrpld/rpc/detail/Pathfinder.cpp index c777fcb2f7..4749caaccb 100644 --- a/src/xrpld/app/paths/Pathfinder.cpp +++ b/src/xrpld/rpc/detail/Pathfinder.cpp @@ -1,9 +1,8 @@ #include -#include -#include -#include +#include +#include +#include -#include #include #include #include @@ -167,7 +166,7 @@ Pathfinder::Pathfinder( , mLedger(cache->getLedger()) , mRLCache(cache) , app_(app) - , j_(app.journal("Pathfinder")) + , j_(app.getJournal("Pathfinder")) { XRPL_ASSERT( !uSrcIssuer || isXRP(uSrcCurrency) == isXRP(uSrcIssuer.value()), @@ -207,7 +206,7 @@ Pathfinder::findPaths(int searchLevel, std::function const& continue m_loadEvent = app_.getJobQueue().makeLoadEvent(jtPATH_FIND, "FindPath"); auto currencyIsXRP = isXRP(mSrcCurrency); - bool useIssuerAccount = mSrcIssuer && !currencyIsXRP && !isXRP(*mSrcIssuer); + bool const useIssuerAccount = mSrcIssuer && !currencyIsXRP && !isXRP(*mSrcIssuer); auto& account = useIssuerAccount ? *mSrcIssuer : mSrcAccount; auto issuer = currencyIsXRP ? AccountID() : account; mSource = STPathElement(account, mSrcCurrency, issuer); @@ -223,8 +222,8 @@ Pathfinder::findPaths(int searchLevel, std::function const& continue return false; } - bool bSrcXrp = isXRP(mSrcCurrency); - bool bDstXrp = isXRP(mDstAmount.getCurrency()); + bool const bSrcXrp = isXRP(mSrcCurrency); + bool const bDstXrp = isXRP(mDstAmount.getCurrency()); if (!mLedger->exists(keylet::account(mSrcAccount))) { @@ -345,7 +344,7 @@ Pathfinder::getPathLiquidity( mSrcAccount, pathSet, mDomain, - app_.logs(), + app_, &rcInput); // If we can't get even the minimum liquidity requested, we're done. if (!isTesSuccess(rc.result())) @@ -366,7 +365,7 @@ Pathfinder::getPathLiquidity( mSrcAccount, pathSet, mDomain, - app_.logs(), + app_, &rcInput); // If we found further liquidity, add it into the result. @@ -404,7 +403,7 @@ Pathfinder::computePathRanks(int maxPaths, std::function const& cont mSrcAccount, STPathSet(), mDomain, - app_.logs(), + app_, &rcInput); if (rc.result() == tesSUCCESS) @@ -615,7 +614,7 @@ Pathfinder::getBestPaths( ++pathsIterator; auto iPathsLeft = maxPaths - bestPaths.size(); - if (!(iPathsLeft > 0 || fullLiquidityPath.empty())) + if (iPathsLeft <= 0 && !fullLiquidityPath.empty()) break; if (path.empty()) @@ -675,9 +674,9 @@ Pathfinder::getBestPaths( bool Pathfinder::issueMatchesOrigin(Issue const& issue) { - bool matchingCurrency = (issue.currency == mSrcCurrency); - bool matchingAccount = isXRP(issue.currency) || (mSrcIssuer && issue.account == mSrcIssuer) || - issue.account == mSrcAccount; + bool const matchingCurrency = (issue.currency == mSrcCurrency); + bool const matchingAccount = isXRP(issue.currency) || + (mSrcIssuer && issue.account == mSrcIssuer) || issue.account == mSrcAccount; return matchingCurrency && matchingAccount; } @@ -704,7 +703,7 @@ Pathfinder::getPathsOut( if (!sleAccount) return 0; - int aFlags = sleAccount->getFieldU32(sfFlags); + int const aFlags = sleAccount->getFieldU32(sfFlags); bool const bAuthRequired = (aFlags & lsfRequireAuth) != 0; bool const bFrozen = ((aFlags & lsfGlobalFreeze) != 0); @@ -795,7 +794,7 @@ Pathfinder::addPathsForType( JLOG(j_.debug()) << "getPaths< adding onto '" << pathTypeToString(parentPathType) << "' to get '" << pathTypeToString(pathType) << "'"; - int initialSize = mCompletePaths.size(); + int const initialSize = mCompletePaths.size(); // Add the last NodeType to the lists. auto nodeType = pathType.back(); @@ -850,7 +849,7 @@ Pathfinder::isNoRipple( auto const flag((toAccount > fromAccount) ? lsfHighNoRipple : lsfLowNoRipple); - return sleRipple && (sleRipple->getFieldU32(sfFlags) & flag); + return sleRipple && ((sleRipple->getFieldU32(sfFlags) & flag) != 0u); } // Does this path end on an account-to-account link whose last account has @@ -864,7 +863,7 @@ Pathfinder::isNoRippleOut(STPath const& currentPath) // Last link must be an account. STPathElement const& endElement = currentPath.back(); - if (!(endElement.getNodeType() & STPathElement::typeAccount)) + if ((endElement.getNodeType() & STPathElement::typeAccount) == 0u) return false; // If there's only one item in the path, return true if that item specifies @@ -911,7 +910,7 @@ Pathfinder::addLink( << " completePaths size=" << mCompletePaths.size(); JLOG(j_.trace()) << currentPath.getJson(JsonOptions::none); - if (addFlags & afADD_ACCOUNTS) + if ((addFlags & afADD_ACCOUNTS) != 0u) { // add accounts if (bOnXRP) @@ -930,10 +929,10 @@ Pathfinder::addLink( if (sleEnd) { - bool const bRequireAuth(sleEnd->getFieldU32(sfFlags) & lsfRequireAuth); + bool const bRequireAuth((sleEnd->getFieldU32(sfFlags) & lsfRequireAuth) != 0u); bool const bIsEndCurrency(uEndCurrency == mDstAmount.getCurrency()); bool const bIsNoRippleOut(isNoRippleOut(currentPath)); - bool const bDestOnly(addFlags & afAC_LAST); + bool const bDestOnly((addFlags & afAC_LAST) != 0u); if (auto const lines = mRLCache->getRippleLines( uEndAccount, @@ -957,7 +956,7 @@ Pathfinder::addLink( continue; } - bool bToDestination = acct == mEffectiveDst; + bool const bToDestination = acct == mEffectiveDst; if (bDestOnly && !bToDestination) { @@ -1005,14 +1004,14 @@ Pathfinder::addLink( else { // save this candidate - int out = getPathsOut( + int const out = getPathsOut( uEndCurrency, acct, direction, bIsEndCurrency, mEffectiveDst, continueCallback); - if (out) + if (out != 0) candidates.push_back({out, acct}); } } @@ -1046,7 +1045,7 @@ Pathfinder::addLink( if (continueCallback && !continueCallback()) return; // Add accounts to incompletePaths - STPathElement pathElement( + STPathElement const pathElement( STPathElement::typeAccount, it->account, uEndCurrency, it->account); incompletePaths.assembleAdd(currentPath, pathElement); ++it; @@ -1060,22 +1059,22 @@ Pathfinder::addLink( } } } - if (addFlags & afADD_BOOKS) + if ((addFlags & afADD_BOOKS) != 0u) { // add order books - if (addFlags & afOB_XRP) + if ((addFlags & afOB_XRP) != 0u) { // to XRP only if (!bOnXRP && app_.getOrderBookDB().isBookToXRP({uEndCurrency, uEndIssuer}, mDomain)) { - STPathElement pathElement( + STPathElement const pathElement( STPathElement::typeCurrency, xrpAccount(), xrpCurrency(), xrpAccount()); incompletePaths.assembleAdd(currentPath, pathElement); } } else { - bool bDestOnly = (addFlags & afOB_LAST) != 0; + bool const bDestOnly = (addFlags & afOB_LAST) != 0; auto books = app_.getOrderBookDB().getBooksByTakerPays({uEndCurrency, uEndIssuer}, mDomain); JLOG(j_.trace()) << books.size() << " books found from this currency/issuer"; diff --git a/src/xrpld/app/paths/Pathfinder.h b/src/xrpld/rpc/detail/Pathfinder.h similarity index 97% rename from src/xrpld/app/paths/Pathfinder.h rename to src/xrpld/rpc/detail/Pathfinder.h index 03f2d6f038..662d59ac9a 100644 --- a/src/xrpld/app/paths/Pathfinder.h +++ b/src/xrpld/rpc/detail/Pathfinder.h @@ -1,10 +1,10 @@ #pragma once -#include -#include +#include #include #include +#include #include #include @@ -82,10 +82,10 @@ public: struct PathRank { - std::uint64_t quality; - std::uint64_t length; + std::uint64_t quality{}; + std::uint64_t length{}; STAmount liquidity; - int index; + int index{}; }; private: diff --git a/src/xrpld/app/paths/detail/PathfinderUtils.h b/src/xrpld/rpc/detail/PathfinderUtils.h similarity index 100% rename from src/xrpld/app/paths/detail/PathfinderUtils.h rename to src/xrpld/rpc/detail/PathfinderUtils.h diff --git a/src/xrpld/rpc/detail/RPCCall.cpp b/src/xrpld/rpc/detail/RPCCall.cpp index cd36208294..f4613a3e72 100644 --- a/src/xrpld/rpc/detail/RPCCall.cpp +++ b/src/xrpld/rpc/detail/RPCCall.cpp @@ -104,15 +104,15 @@ private: // optionally followed by a forward slash and some other characters // (the issuer). // https://www.boost.org/doc/libs/1_82_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html - static boost::regex reCurIss("\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'"); + static boost::regex const reCurIss("\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'"); boost::smatch smMatch; if (boost::regex_match(strCurrencyIssuer, smMatch, reCurIss)) { Json::Value jvResult(Json::objectValue); - std::string strCurrency = smMatch[1]; - std::string strIssuer = smMatch[2]; + std::string const strCurrency = smMatch[1]; + std::string const strIssuer = smMatch[2]; jvResult[jss::currency] = strCurrency; @@ -149,6 +149,7 @@ private: using parseFuncPtr = Json::Value (RPCParser::*)(Json::Value const& jvParams); Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseAsIs(Json::Value const& jvParams) { Json::Value v(Json::objectValue); @@ -160,6 +161,7 @@ private: } Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseInternal(Json::Value const& jvParams) { Json::Value v(Json::objectValue); @@ -176,6 +178,7 @@ private: } Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseManifest(Json::Value const& jvParams) { if (jvParams.size() == 1) @@ -196,10 +199,11 @@ private: // fetch_info [clear] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseFetchInfo(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); - unsigned int iParams = jvParams.size(); + unsigned int const iParams = jvParams.size(); if (iParams != 0) jvRequest[jvParams[0u].asString()] = true; @@ -258,8 +262,8 @@ private: } else { - std::int64_t uLedgerMin = jvParams[1u].asInt(); - std::int64_t uLedgerMax = jvParams[2u].asInt(); + std::int64_t const uLedgerMin = jvParams[1u].asInt(); + std::int64_t const uLedgerMax = jvParams[2u].asInt(); if (uLedgerMax != -1 && uLedgerMax < uLedgerMin) { @@ -286,6 +290,7 @@ private: // // Mnemonic: taker pays --> offer --> taker gets Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseBookOffers(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -319,7 +324,7 @@ private: { try { - int iLimit = jvParams[4u].asInt(); + int const iLimit = jvParams[4u].asInt(); if (iLimit > 0) jvRequest[jss::limit] = iLimit; @@ -334,8 +339,8 @@ private: { try { - int bProof = jvParams[5u].asInt(); - if (bProof) + int const bProof = jvParams[5u].asInt(); + if (bProof != 0) jvRequest[jss::proof] = true; } catch (std::exception const&) @@ -352,14 +357,15 @@ private: // can_delete [||now|always|never] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseCanDelete(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); - if (!jvParams.size()) + if (jvParams.size() == 0u) return jvRequest; - std::string input = jvParams[0u].asString(); + std::string const input = jvParams[0u].asString(); if (input.find_first_not_of("0123456789") == std::string::npos) { jvRequest["can_delete"] = jvParams[0u].asUInt(); @@ -374,6 +380,7 @@ private: // connect [port] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseConnect(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -388,7 +395,7 @@ private: // handle case where there is one argument of the form ip:port if (std::count(ip.begin(), ip.end(), ':') == 1) { - std::size_t colon = ip.find_last_of(":"); + std::size_t const colon = ip.find_last_of(':'); jvRequest[jss::ip] = std::string{ip, 0, colon}; jvRequest[jss::port] = Json::Value{std::string{ip, colon + 1}}.asUInt(); return jvRequest; @@ -402,6 +409,7 @@ private: // deposit_authorized // [ [, ...]] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseDepositAuthorized(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -424,6 +432,7 @@ private: // Return an error for attempting to subscribe/unsubscribe via RPC. Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseEvented(Json::Value const& jvParams) { return rpcError(rpcNO_EVENTS); @@ -431,6 +440,7 @@ private: // feature [] [accept|reject] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseFeature(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -464,11 +474,12 @@ private: // get_counts [] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseGetCounts(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); - if (jvParams.size()) + if (jvParams.size() != 0u) jvRequest[jss::min_count] = jvParams[0u].asUInt(); return jvRequest; @@ -477,6 +488,7 @@ private: // sign_for offline // sign_for Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseSignFor(Json::Value const& jvParams) { bool const bOffline = 4 == jvParams.size() && jvParams[3u].asString() == "offline"; @@ -546,11 +558,9 @@ private: jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] == "2.0" && jv.isMember(jss::id) && jv.isMember(jss::method)) { - if (jv.isMember(jss::params) && - !(jv[jss::params].isNull() || jv[jss::params].isArray() || - jv[jss::params].isObject())) - return false; - return true; + return !jv.isMember(jss::params) || + (jv[jss::params].isNull() || jv[jss::params].isArray() || + jv[jss::params].isObject()); } } return false; @@ -561,7 +571,7 @@ private: { Json::Reader reader; Json::Value jv; - bool valid_parse = reader.parse(jvParams[0u].asString(), jv); + bool const valid_parse = reader.parse(jvParams[0u].asString(), jv); if (valid_parse && isValidJson2(jv)) { if (jv.isObject()) @@ -608,11 +618,12 @@ private: // ledger [id|index|current|closed|validated] [full|tx] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseLedger(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); - if (!jvParams.size()) + if (jvParams.size() == 0u) { return jvRequest; } @@ -637,11 +648,12 @@ private: // ledger_header | Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseLedgerId(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); - std::string strLedger = jvParams[0u].asString(); + std::string const strLedger = jvParams[0u].asString(); if (strLedger.length() == 64) { @@ -657,6 +669,7 @@ private: // ledger_entry [id] [] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseLedgerEntry(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; @@ -674,6 +687,7 @@ private: // specified severity log_level : Set specified // partition to specified severity Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseLogLevel(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -722,6 +736,7 @@ private: // channel_authorize: [] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseChannelAuthorize(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -765,6 +780,7 @@ private: // channel_verify Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseChannelVerify(Json::Value const& jvParams) { std::string const strPk = jvParams[0u].asString(); @@ -793,6 +809,7 @@ private: } Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseAccountRaw2(Json::Value const& jvParams, char const* const acc2Field) { std::array accFields{{jss::account, acc2Field}}; @@ -800,7 +817,8 @@ private: Json::Value jvRequest(Json::objectValue); for (auto i = 0; i < nParams; ++i) { - std::string strParam = jvParams[i].asString(); + // This was non-const. see comment below + std::string const strParam = jvParams[i].asString(); if (i == 1 && strParam.empty()) continue; @@ -810,7 +828,10 @@ private: { if (parseBase58(strParam)) { - jvRequest[accFields[i]] = std::move(strParam); + // TODO: this was std::move'd before but it does not work in practice. + // We would need a Value(std::string&&) for it to work. + // See https://github.com/XRPLF/rippled/issues/6677 + jvRequest[accFields[i]] = strParam; } else { @@ -830,10 +851,11 @@ private: // TODO: Get index from an alternate syntax: rXYZ: Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseAccountRaw1(Json::Value const& jvParams) { - std::string strIdent = jvParams[0u].asString(); - unsigned int iCursor = jvParams.size(); + std::string const strIdent = jvParams[0u].asString(); + unsigned int const iCursor = jvParams.size(); if (!parseBase58(strIdent)) return rpcError(rpcACT_MALFORMED); @@ -850,9 +872,10 @@ private: } Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseVault(Json::Value const& jvParams) { - std::string strVaultID = jvParams[0u].asString(); + std::string const strVaultID = jvParams[0u].asString(); uint256 id = beast::zero; if (!id.parseHex(strVaultID)) return rpcError(rpcINVALID_PARAMS); @@ -868,6 +891,7 @@ private: // peer_reservations_add [] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parsePeerReservationsAdd(Json::Value const& jvParams) { Json::Value jvRequest; @@ -881,6 +905,7 @@ private: // peer_reservations_del Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parsePeerReservationsDel(Json::Value const& jvParams) { Json::Value jvRequest; @@ -894,7 +919,7 @@ private: { Json::Reader reader; Json::Value jvRequest{Json::objectValue}; - bool bLedger = 2 == jvParams.size(); + bool const bLedger = 2 == jvParams.size(); JLOG(j_.trace()) << "RPC json: " << jvParams[0u]; @@ -916,6 +941,7 @@ private: // simulate [binary] // simulate [binary] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseSimulate(Json::Value const& jvParams) { Json::Value txJSON; @@ -947,6 +973,7 @@ private: // submit // submit Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseSignSubmit(Json::Value const& jvParams) { Json::Value txJSON; @@ -958,7 +985,7 @@ private: return std::nullopt; if (jvParams.size() < 4 && bOffline) return std::nullopt; - Json::UInt index = bOffline ? 3u : 2u; + Json::UInt const index = bOffline ? 3u : 2u; return jvParams[index].asString(); }(); @@ -996,6 +1023,7 @@ private: // // submit_multisigned Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseSubmitMultiSigned(Json::Value const& jvParams) { if (1 == jvParams.size()) @@ -1015,6 +1043,7 @@ private: // transaction_entry Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseTransactionEntry(Json::Value const& jvParams) { // Parameter count should have already been verified. @@ -1040,6 +1069,7 @@ private: // tx Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseTx(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; @@ -1072,6 +1102,7 @@ private: // tx_history Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseTxHistory(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; @@ -1088,11 +1119,12 @@ private: // (e.g. .bash_history) and it may be leaked via the process status command // (i.e. ps). Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseValidationCreate(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; - if (jvParams.size()) + if (jvParams.size() != 0u) jvRequest[jss::secret] = jvParams[0u].asString(); return jvRequest; @@ -1102,11 +1134,12 @@ private: // is only for testing. Master seeds should only be generated // randomly. Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseWalletPropose(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; - if (jvParams.size()) + if (jvParams.size() != 0u) jvRequest[jss::passphrase] = jvParams[0u].asString(); return jvRequest; @@ -1117,6 +1150,7 @@ private: // ]] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseGatewayBalances(Json::Value const& jvParams) { unsigned int index = 0; @@ -1159,6 +1193,7 @@ private: // server_definitions [hash] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseServerDefinitions(Json::Value const& jvParams) { Json::Value jvRequest{Json::objectValue}; @@ -1173,6 +1208,7 @@ private: // server_info [counters] Json::Value + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) parseServerInfo(Json::Value const& jvParams) { Json::Value jvRequest(Json::objectValue); @@ -1542,8 +1578,8 @@ rpcClient( return jvRequest[jss::method].asString(); return jvRequest.isArray() ? "batch" : args[0]; }(), - jvParams, // Parsed, execute. - setup.client.secure != 0, // Use SSL + jvParams, // Parsed, execute. + static_cast(setup.client.secure) != 0, // Use SSL config.quiet(), logs, std::bind(RPCCallImp::callRPCHandler, &jvOutput, std::placeholders::_1), @@ -1562,7 +1598,7 @@ rpcClient( else { // Transport error. - Json::Value jvRpcError = jvOutput; + Json::Value const jvRpcError = jvOutput; jvOutput = rpcError(rpcJSON_RPC); jvOutput["result"] = jvRpcError; diff --git a/src/xrpld/rpc/detail/RPCHandler.cpp b/src/xrpld/rpc/detail/RPCHandler.cpp index 840ebd5946..1d8e1168b4 100644 --- a/src/xrpld/rpc/detail/RPCHandler.cpp +++ b/src/xrpld/rpc/detail/RPCHandler.cpp @@ -129,7 +129,7 @@ fillHandler(JsonContext& context, Handler const*& result) return rpcUNKNOWN_COMMAND; } - std::string strCommand = context.params.isMember(jss::command) + std::string const strCommand = context.params.isMember(jss::command) ? context.params[jss::command].asString() : context.params[jss::method].asString(); @@ -137,13 +137,13 @@ fillHandler(JsonContext& context, Handler const*& result) JLOG(context.j.trace()) << "REQUEST:" << context.params; auto handler = getHandler(context.apiVersion, context.app.config().BETA_RPC_API, strCommand); - if (!handler) + if (handler == nullptr) return rpcUNKNOWN_COMMAND; if (handler->role_ == Role::ADMIN && context.role != Role::ADMIN) return rpcNO_PERMISSION; - error_code_i res = conditionMet(handler->condition_, context); + error_code_i const res = conditionMet(handler->condition_, context); if (res != rpcSUCCESS) { return res; @@ -228,7 +228,7 @@ roleRequired(unsigned int version, bool betaEnabled, std::string const& method) { auto handler = RPC::getHandler(version, betaEnabled, method); - if (!handler) + if (handler == nullptr) return Role::FORBID; return handler->role_; diff --git a/src/xrpld/rpc/detail/RPCHelpers.cpp b/src/xrpld/rpc/detail/RPCHelpers.cpp index 832ff778e1..b4a0685bd6 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCHelpers.cpp @@ -1,8 +1,8 @@ #include -#include #include #include #include +#include #include #include @@ -100,7 +100,7 @@ readLimitField(unsigned int& limit, Tuning::LimitRange const& range, JsonContext return std::nullopt; auto const& jvLimit = context.params[jss::limit]; - if (!(jvLimit.isUInt() || (jvLimit.isInt() && jvLimit.asInt() >= 0))) + if (!jvLimit.isUInt() && (!jvLimit.isInt() || jvLimit.asInt() < 0)) return RPC::expected_field_error(jss::limit, "unsigned integer"); limit = jvLimit.asUInt(); diff --git a/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp b/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp index 54ff515894..955533c776 100644 --- a/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp @@ -166,7 +166,7 @@ ledgerFromSpecifier( ledger.reset(); using LedgerCase = org::xrpl::rpc::v1::LedgerSpecifier::LedgerCase; - LedgerCase ledgerCase = specifier.ledger_case(); + LedgerCase const ledgerCase = specifier.ledger_case(); switch (ledgerCase) { case LedgerCase::kHash: { @@ -375,7 +375,7 @@ getOrAcquireLedger(RPC::JsonContext const& context) auto& ledgerMaster = context.app.getLedgerMaster(); LedgerHash ledgerHash; - if ((hasHash + hasIndex) != 1) + if ((static_cast(hasHash) + static_cast(hasIndex)) != 1) { return Unexpected( RPC::make_param_error( @@ -411,7 +411,7 @@ getOrAcquireLedger(RPC::JsonContext const& context) if (ledgerIndex <= 0) return Unexpected(RPC::make_param_error("Ledger index too small")); - auto const j = context.app.journal("RPCHandler"); + auto const j = context.app.getJournal("RPCHandler"); // Try to get the hash of the desired ledger from the validated // ledger auto neededHash = hashOfSeq(*ledger, ledgerIndex, j); diff --git a/src/xrpld/rpc/detail/RPCLedgerHelpers.h b/src/xrpld/rpc/detail/RPCLedgerHelpers.h index c60b7bc6b2..6a04ab41d6 100644 --- a/src/xrpld/rpc/detail/RPCLedgerHelpers.h +++ b/src/xrpld/rpc/detail/RPCLedgerHelpers.h @@ -1,11 +1,11 @@ #pragma once -#include #include #include #include #include +#include #include #include #include diff --git a/src/xrpld/rpc/detail/RPCSub.cpp b/src/xrpld/rpc/detail/RPCSub.cpp index 233981001a..3b5b56d937 100644 --- a/src/xrpld/rpc/detail/RPCSub.cpp +++ b/src/xrpld/rpc/detail/RPCSub.cpp @@ -21,15 +21,15 @@ public: std::string const& strUrl, std::string const& strUsername, std::string const& strPassword, - Logs& logs) + ServiceRegistry& registry) : RPCSub(source) , m_io_context(io_context) , m_jobQueue(jobQueue) , mUrl(strUrl) , mUsername(strUsername) , mPassword(strPassword) - , j_(logs.journal("RPCSub")) - , logs_(logs) + , j_(registry.getJournal("RPCSub")) + , logs_(registry.getLogs()) { parsedURL pUrl; @@ -68,7 +68,7 @@ public: void send(Json::Value const& jvObj, bool broadcast) override { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto jm = broadcast ? j_.debug() : j_.info(); JLOG(jm) << "RPCCall::fromNetwork push: " << jvObj; @@ -88,7 +88,7 @@ public: void setUsername(std::string const& strUsername) override { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); mUsername = strUsername; } @@ -96,7 +96,7 @@ public: void setPassword(std::string const& strPassword) override { - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); mPassword = strPassword; } @@ -114,7 +114,7 @@ private: { { // Obtain the lock to manipulate the queue and change sending. - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); if (mDeque.empty()) { @@ -199,7 +199,7 @@ make_RPCSub( std::string const& strUrl, std::string const& strUsername, std::string const& strPassword, - Logs& logs) + ServiceRegistry& registry) { return std::make_shared( std::ref(source), @@ -208,7 +208,7 @@ make_RPCSub( strUrl, strUsername, strPassword, - logs); + registry); } } // namespace xrpl diff --git a/src/xrpld/app/paths/RippleLineCache.cpp b/src/xrpld/rpc/detail/RippleLineCache.cpp similarity index 96% rename from src/xrpld/app/paths/RippleLineCache.cpp rename to src/xrpld/rpc/detail/RippleLineCache.cpp index ac3e28e579..7cc77f9b8b 100644 --- a/src/xrpld/app/paths/RippleLineCache.cpp +++ b/src/xrpld/rpc/detail/RippleLineCache.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include namespace xrpl { @@ -26,7 +26,7 @@ RippleLineCache::getRippleLines(AccountID const& accountID, LineDirection direct direction == LineDirection::outgoing ? LineDirection::incoming : LineDirection::outgoing, hash); - std::lock_guard sl(mLock); + std::lock_guard const sl(mLock); auto [it, inserted] = [&]() { @@ -84,7 +84,7 @@ RippleLineCache::getRippleLines(AccountID const& accountID, LineDirection direct } XRPL_ASSERT( - !it->second || (it->second->size() > 0), + !it->second || (!it->second->empty()), "xrpl::RippleLineCache::getRippleLines : null or nonempty lines"); auto const size = it->second ? it->second->size() : 0; JLOG(journal_.trace()) << "getRippleLines for ledger " << ledger_->header().seq << " found " diff --git a/src/xrpld/app/paths/RippleLineCache.h b/src/xrpld/rpc/detail/RippleLineCache.h similarity index 97% rename from src/xrpld/app/paths/RippleLineCache.h rename to src/xrpld/rpc/detail/RippleLineCache.h index c4ddad6c81..65607f2d25 100644 --- a/src/xrpld/app/paths/RippleLineCache.h +++ b/src/xrpld/rpc/detail/RippleLineCache.h @@ -1,10 +1,10 @@ #pragma once -#include -#include +#include #include #include +#include #include #include diff --git a/src/xrpld/rpc/detail/Role.cpp b/src/xrpld/rpc/detail/Role.cpp index 499787cece..f832e43119 100644 --- a/src/xrpld/rpc/detail/Role.cpp +++ b/src/xrpld/rpc/detail/Role.cpp @@ -224,7 +224,7 @@ extractIpAddrFromField(std::string_view field) // If there's a port appended to the IP address, strip that by // terminating at the colon. - if (std::size_t colon = ret.find(':'); colon != std::string_view::npos) + if (std::size_t const colon = ret.find(':'); colon != std::string_view::npos) ret = ret.substr(0, colon); return ret; @@ -256,7 +256,7 @@ forwardedFor(http_request_type const& request) // We found a "for=". Scan for the end of the IP address. std::size_t const pos = [&found, &it]() { - std::size_t pos = + std::size_t const pos = std::string_view(found, it->value().end() - found).find_first_of(",;"); if (pos != std::string_view::npos) return pos; diff --git a/src/xrpld/rpc/detail/ServerHandler.cpp b/src/xrpld/rpc/detail/ServerHandler.cpp index f5187d6285..e5cc7a83bf 100644 --- a/src/xrpld/rpc/detail/ServerHandler.cpp +++ b/src/xrpld/rpc/detail/ServerHandler.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -79,12 +78,12 @@ authorized(Port const& port, std::map const& h) return false; std::string strUserPass64 = it->second.substr(6); boost::trim(strUserPass64); - std::string strUserPass = base64_decode(strUserPass64); - std::string::size_type nColon = strUserPass.find(":"); + std::string const strUserPass = base64_decode(strUserPass64); + std::string::size_type const nColon = strUserPass.find(':'); if (nColon == std::string::npos) return false; - std::string strUser = strUserPass.substr(0, nColon); - std::string strPassword = strUserPass.substr(nColon + 1); + std::string const strUser = strUserPass.substr(0, nColon); + std::string const strPassword = strUserPass.substr(nColon + 1); return strUser == port.user && strPassword == port.password; } @@ -98,9 +97,9 @@ ServerHandler::ServerHandler( CollectorManager& cm) : app_(app) , m_resourceManager(resourceManager) - , m_journal(app_.journal("Server")) + , m_journal(app_.getJournal("Server")) , m_networkOPs(networkOPs) - , m_server(make_Server(*this, io_context, app_.journal("Server"))) + , m_server(make_Server(*this, io_context, app_.getJournal("Server"))) , m_jobQueue(jobQueue) { auto const& group(cm.group("rpc")); @@ -126,14 +125,14 @@ ServerHandler::setup(Setup const& setup, beast::Journal journal) if (auto it = endpoints_.find(port.name); it != endpoints_.end()) { auto const endpointPort = it->second.port(); - if (!port.port) + if (port.port == 0u) port.port = endpointPort; - if (!setup_.client.port && + if ((setup_.client.port == 0u) && (port.protocol.count("http") > 0 || port.protocol.count("https") > 0)) setup_.client.port = endpointPort; - if (!setup_.overlay.port() && (port.protocol.count("peer") > 0)) + if ((setup_.overlay.port() == 0u) && (port.protocol.count("peer") > 0)) setup_.overlay.port(endpointPort); } } @@ -159,11 +158,11 @@ ServerHandler::onAccept(Session& session, boost::asio::ip::tcp::endpoint endpoin auto const& port = session.port(); auto const c = [this, &port]() { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); return ++count_[port]; }(); - if (port.limit && c >= port.limit) + if ((port.limit != 0) && c >= port.limit) { JLOG(m_journal.trace()) << port.name << " is full; dropping " << endpoint; return false; @@ -218,7 +217,7 @@ ServerHandler::onHandoff( } if (bundle && p.count("peer") > 0) - return app_.overlay().onHandoff(std::move(bundle), std::move(request), remote_address); + return app_.getOverlay().onHandoff(std::move(bundle), std::move(request), remote_address); if (is_ws && isStatusRequest(request)) return statusResponse(request); @@ -270,7 +269,7 @@ ServerHandler::onRequest(Session& session) // Make sure RPC is enabled on the port if (session.port().protocol.count("http") == 0 && session.port().protocol.count("https") == 0) { - HTTPReply(403, "Forbidden", makeOutput(session), app_.journal("RPC")); + HTTPReply(403, "Forbidden", makeOutput(session), app_.getJournal("RPC")); session.close(true); return; } @@ -278,12 +277,12 @@ ServerHandler::onRequest(Session& session) // Check user/password authorization if (!authorized(session.port(), build_map(session.request()))) { - HTTPReply(403, "Forbidden", makeOutput(session), app_.journal("RPC")); + HTTPReply(403, "Forbidden", makeOutput(session), app_.getJournal("RPC")); session.close(true); return; } - std::shared_ptr detachedSession = session.detach(); + std::shared_ptr const detachedSession = session.detach(); auto const postResult = m_jobQueue.postCoro( jtCLIENT_RPC, "RPC-Client", [this, detachedSession](std::shared_ptr coro) { processSession(detachedSession, coro); @@ -291,7 +290,7 @@ ServerHandler::onRequest(Session& session) if (postResult == nullptr) { // The coroutine was rejected, probably because we're shutting down. - HTTPReply(503, "Service Unavailable", makeOutput(*detachedSession), app_.journal("RPC")); + HTTPReply(503, "Service Unavailable", makeOutput(*detachedSession), app_.getJournal("RPC")); detachedSession->close(true); return; } @@ -344,14 +343,14 @@ ServerHandler::onWSMessage( void ServerHandler::onClose(Session& session, boost::system::error_code const&) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); --count_[session.port()]; } void ServerHandler::onStopped(Server&) { - std::lock_guard lock(mutex_); + std::lock_guard const lock(mutex_); stopped_ = true; condition_.notify_one(); } @@ -440,7 +439,7 @@ ServerHandler::processSession( else { RPC::JsonContext context{ - {app_.journal("RPCHandler"), + {app_.getJournal("RPCHandler"), app_, loadType, app_.getOPs(), @@ -574,7 +573,7 @@ ServerHandler::processRequest( std::string_view forwardedFor, std::string_view user) { - auto rpcJ = app_.journal("RPC"); + auto rpcJ = app_.getJournal("RPC"); Json::Value jsonOrig; { @@ -733,7 +732,7 @@ ServerHandler::processRequest( continue; } - std::string strMethod = method.asString(); + std::string const strMethod = method.asString(); if (strMethod.empty()) { usage.charge(Resource::feeMalformedRPC); @@ -1135,7 +1134,7 @@ parse_Ports(Config const& config, std::ostream& log) // Remove the peer protocol, and if that would // leave the port empty, remove the port as well - if (p.erase("peer") && p.empty()) + if ((p.erase("peer") != 0u) && p.empty()) { it = result.erase(it); } diff --git a/src/xrpld/rpc/detail/TransactionSign.cpp b/src/xrpld/rpc/detail/TransactionSign.cpp index 80c608dbbf..23c70b9def 100644 --- a/src/xrpld/rpc/detail/TransactionSign.cpp +++ b/src/xrpld/rpc/detail/TransactionSign.cpp @@ -3,12 +3,11 @@ #include #include #include -#include #include +#include #include #include -#include #include #include #include @@ -79,7 +78,7 @@ public: AccountID const& getSigner() const { - if (!multiSigningAcctID_) + if (multiSigningAcctID_ == nullptr) LogicError("Accessing unknown SigningForParams::getSigner()"); return *multiSigningAcctID_; } @@ -207,7 +206,7 @@ checkPayment( if (!dstAccountID) return RPC::invalid_field_error("tx_json.Destination"); - if (params.isMember(jss::build_path) && ((doPath == false) || amount.holds())) + if (params.isMember(jss::build_path) && ((!doPath) || amount.holds())) { return RPC::make_error( rpcINVALID_PARAMS, "Field 'build_path' not allowed in this context."); @@ -252,16 +251,16 @@ checkPayment( return RPC::make_error(rpcINVALID_PARAMS, "Cannot build XRP to XRP paths."); { - LegacyPathFind lpf(isUnlimited(role), app); + LegacyPathFind const lpf(isUnlimited(role), app); if (!lpf.isOk()) return rpcError(rpcTOO_BUSY); STPathSet result; - if (auto ledger = app.openLedger().current()) + if (auto ledger = app.getOpenLedger().current()) { Pathfinder pf( - std::make_shared(ledger, app.journal("RippleLineCache")), + std::make_shared(ledger, app.getJournal("RippleLineCache")), srcAddressID, *dstAccountID, sendMax.issue().currency, @@ -275,12 +274,12 @@ checkPayment( // 4 is the maximum paths pf.computePathRanks(4); STPath fullLiquidityPath; - STPathSet paths; + STPathSet const paths; result = pf.getBestPaths(4, fullLiquidityPath, paths, sendMax.issue().account); } } - auto j = app.journal("RPCHandler"); + auto j = app.getJournal("RPCHandler"); JLOG(j.debug()) << "transactionSign: build_path: " << result.getJson(JsonOptions::none); if (!result.empty()) @@ -402,7 +401,7 @@ transactionPreProcessImpl( std::chrono::seconds validatedLedgerAge, Application& app) { - auto j = app.journal("RPCHandler"); + auto j = app.getJournal("RPCHandler"); Json::Value jvResult; std::optional> keyPair = keypairForSignature(params, jvResult); @@ -428,7 +427,7 @@ transactionPreProcessImpl( : nullptr; if (signatureTarget) { - if (!signatureTemplate) + if (signatureTemplate == nullptr) { // Invalid target field return RPC::make_error(rpcINVALID_PARAMS, signatureTarget->get().getName()); } @@ -461,7 +460,7 @@ transactionPreProcessImpl( std::shared_ptr sle; if (verify) - sle = app.openLedger().current()->read(keylet::account(srcAddressID)); + sle = app.getOpenLedger().current()->read(keylet::account(srcAddressID)); if (verify && !sle) { @@ -565,7 +564,7 @@ transactionPreProcessImpl( auto delegatedAddressID = *ptrDelegatedAddressID; auto delegatedSle = - app.openLedger().current()->read(keylet::account(delegatedAddressID)); + app.getOpenLedger().current()->read(keylet::account(delegatedAddressID)); if (!delegatedSle) return rpcError(rpcDELEGATE_ACT_NOT_FOUND); @@ -632,7 +631,7 @@ transactionPreProcessImpl( // If multisign then return multiSignature, else set TxnSignature field. if (signingArgs.isMultiSigning()) { - Serializer s = buildMultiSigningData(*stTx, signingArgs.getSigner()); + Serializer const s = buildMultiSigningData(*stTx, signingArgs.getSigner()); auto multisig = xrpl::sign(pk, sk, s.slice()); @@ -674,7 +673,7 @@ transactionConstructImpl( { Serializer s; tpTrans->getSTransaction()->add(s); - Blob transBlob = s.getData(); + Blob const transBlob = s.getData(); SerialIter sit{makeSlice(transBlob)}; // Check the signature if that's called for. @@ -765,7 +764,7 @@ transactionFormatResultImpl(Transaction::pointer tpTrans, unsigned apiVersion) [[nodiscard]] static XRPAmount getTxFee(Application const& app, Config const& config, Json::Value tx) { - auto const& ledger = app.openLedger().current(); + auto const& ledger = app.getOpenLedger().current(); // autofilling only needed in this function so that the `STParsedJSONObject` // parsing works properly it should not be modifying the actual `tx` object if (!tx.isMember(jss::Fee)) @@ -827,7 +826,7 @@ getTxFee(Application const& app, Config const& config, Json::Value tx) if (!passesLocalChecks(stTx, reason)) return config.FEES.reference_fee; - return calculateBaseFee(*app.openLedger().current(), stTx); + return calculateBaseFee(*app.getOpenLedger().current(), stTx); } catch (std::exception& e) { @@ -848,7 +847,7 @@ getCurrentNetworkFee( { XRPAmount const feeDefault = getTxFee(app, config, tx); - auto ledger = app.openLedger().current(); + auto ledger = app.getOpenLedger().current(); // Administrative and identified endpoints are exempt from local fees. XRPAmount const loadFee = scaleFeeLoad(feeDefault, feeTrack, ledger->fees(), isUnlimited(role)); XRPAmount fee = loadFee; @@ -950,20 +949,20 @@ transactionSign( { using namespace detail; - auto j = app.journal("RPCHandler"); + auto j = app.getJournal("RPCHandler"); JLOG(j.debug()) << "transactionSign: " << jvRequest; // Add and amend fields based on the transaction type. SigningForParams signForParams; - transactionPreProcessResult preprocResult = + transactionPreProcessResult const preprocResult = transactionPreProcessImpl(jvRequest, role, signForParams, validatedLedgerAge, app); if (!preprocResult.second) return preprocResult.first; - std::shared_ptr ledger = app.openLedger().current(); + std::shared_ptr const ledger = app.getOpenLedger().current(); // Make sure the STTx makes a legitimate Transaction. - std::pair txn = + std::pair const txn = transactionConstructImpl(preprocResult.second, ledger->rules(), app); if (!txn.second) @@ -985,13 +984,13 @@ transactionSubmit( { using namespace detail; - auto const& ledger = app.openLedger().current(); - auto j = app.journal("RPCHandler"); + auto const& ledger = app.getOpenLedger().current(); + auto j = app.getJournal("RPCHandler"); JLOG(j.debug()) << "transactionSubmit: " << jvRequest; // Add and amend fields based on the transaction type. SigningForParams signForParams; - transactionPreProcessResult preprocResult = + transactionPreProcessResult const preprocResult = transactionPreProcessImpl(jvRequest, role, signForParams, validatedLedgerAge, app); if (!preprocResult.second) @@ -1107,8 +1106,8 @@ transactionSignFor( std::chrono::seconds validatedLedgerAge, Application& app) { - auto const& ledger = app.openLedger().current(); - auto j = app.journal("RPCHandler"); + auto const& ledger = app.getOpenLedger().current(); + auto j = app.getJournal("RPCHandler"); JLOG(j.debug()) << "transactionSignFor: " << jvRequest; // Verify presence of the signer's account field. @@ -1151,7 +1150,7 @@ transactionSignFor( // Add and amend fields based on the transaction type. SigningForParams signForParams(*signerAccountID); - transactionPreProcessResult preprocResult = + transactionPreProcessResult const preprocResult = transactionPreProcessImpl(jvRequest, role, signForParams, validatedLedgerAge, app); if (!preprocResult.second) @@ -1161,7 +1160,8 @@ transactionSignFor( signForParams.validMultiSign(), "xrpl::RPC::transactionSignFor : valid multi-signature"); { - std::shared_ptr account_state = ledger->read(keylet::account(*signerAccountID)); + std::shared_ptr const account_state = + ledger->read(keylet::account(*signerAccountID)); // Make sure the account and secret belong together. auto const err = acctMatchesPubKey(account_state, *signerAccountID, signForParams.getPublicKey()); @@ -1199,7 +1199,7 @@ transactionSignFor( } // Make sure the STTx makes a legitimate Transaction. - std::pair txn = + std::pair const txn = transactionConstructImpl(sttx, ledger->rules(), app); if (!txn.second) @@ -1219,8 +1219,8 @@ transactionSubmitMultiSigned( Application& app, ProcessTransactionFn const& processTransaction) { - auto const& ledger = app.openLedger().current(); - auto j = app.journal("RPCHandler"); + auto const& ledger = app.getOpenLedger().current(); + auto j = app.getJournal("RPCHandler"); JLOG(j.debug()) << "transactionSubmitMultiSigned: " << jvRequest; // When multi-signing, the "Sequence" and "SigningPubKey" fields must @@ -1246,7 +1246,7 @@ transactionSubmitMultiSigned( if (RPC::contains_error(txJsonResult)) return std::move(txJsonResult); - std::shared_ptr sle = ledger->read(keylet::account(srcAddressID)); + std::shared_ptr const sle = ledger->read(keylet::account(srcAddressID)); if (!sle) { @@ -1292,7 +1292,7 @@ transactionSubmitMultiSigned( } catch (std::exception& ex) { - std::string reason(ex.what()); + std::string const reason(ex.what()); return RPC::make_error( rpcINTERNAL, "Exception while serializing transaction: " + reason); } diff --git a/src/xrpld/app/paths/TrustLine.cpp b/src/xrpld/rpc/detail/TrustLine.cpp similarity index 98% rename from src/xrpld/app/paths/TrustLine.cpp rename to src/xrpld/rpc/detail/TrustLine.cpp index 963e1402be..c2bc152448 100644 --- a/src/xrpld/app/paths/TrustLine.cpp +++ b/src/xrpld/rpc/detail/TrustLine.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/src/xrpld/app/paths/TrustLine.h b/src/xrpld/rpc/detail/TrustLine.h similarity index 100% rename from src/xrpld/app/paths/TrustLine.h rename to src/xrpld/rpc/detail/TrustLine.h diff --git a/src/xrpld/rpc/handlers/AMMInfo.cpp b/src/xrpld/rpc/handlers/AMMInfo.cpp index 42e44f004d..9204f48907 100644 --- a/src/xrpld/rpc/handlers/AMMInfo.cpp +++ b/src/xrpld/rpc/handlers/AMMInfo.cpp @@ -139,7 +139,7 @@ doAMMInfo(RPC::JsonContext& context) issue2 = (*amm)[sfAsset2].get(); } - return ValuesFromContextParams{accountID, *issue1, *issue2, std::move(amm)}; + return ValuesFromContextParams{accountID, *issue1, *issue2, amm}; }; auto const r = getValuesFromContextParams(); diff --git a/src/xrpld/rpc/handlers/AccountChannels.cpp b/src/xrpld/rpc/handlers/AccountChannels.cpp index c418386a71..7bf8a03f21 100644 --- a/src/xrpld/rpc/handlers/AccountChannels.cpp +++ b/src/xrpld/rpc/handlers/AccountChannels.cpp @@ -67,7 +67,7 @@ doAccountChannels(RPC::JsonContext& context) { return rpcError(rpcACT_MALFORMED); } - AccountID const accountID{std::move(id.value())}; + AccountID const accountID{id.value()}; if (!ledger->exists(keylet::account(accountID))) return rpcError(rpcACT_NOT_FOUND); diff --git a/src/xrpld/rpc/handlers/AccountCurrenciesHandler.cpp b/src/xrpld/rpc/handlers/AccountCurrenciesHandler.cpp index 2ec1e20875..e509a72862 100644 --- a/src/xrpld/rpc/handlers/AccountCurrenciesHandler.cpp +++ b/src/xrpld/rpc/handlers/AccountCurrenciesHandler.cpp @@ -1,6 +1,6 @@ -#include #include #include +#include #include #include @@ -44,7 +44,7 @@ doAccountCurrencies(RPC::JsonContext& context) RPC::inject_error(rpcACT_MALFORMED, result); return result; } - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; if (!ledger->exists(keylet::account(accountID))) return rpcError(rpcACT_NOT_FOUND); diff --git a/src/xrpld/rpc/handlers/AccountInfo.cpp b/src/xrpld/rpc/handlers/AccountInfo.cpp index 15a6786e22..becaea8a51 100644 --- a/src/xrpld/rpc/handlers/AccountInfo.cpp +++ b/src/xrpld/rpc/handlers/AccountInfo.cpp @@ -102,7 +102,7 @@ doAccountInfo(RPC::JsonContext& context) RPC::inject_error(rpcACT_MALFORMED, result); return result; } - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; static constexpr std::array, 9> lsFlags{ {{"defaultRipple", lsfDefaultRipple}, @@ -290,9 +290,9 @@ doAccountInfo(RPC::JsonContext& context) jvQueueTx.append(std::move(jvTx)); } - if (seqCount) + if (seqCount != 0u) jvQueueData[jss::sequence_count] = seqCount; - if (ticketCount) + if (ticketCount != 0u) jvQueueData[jss::ticket_count] = ticketCount; if (lowestSeq) jvQueueData[jss::lowest_sequence] = *lowestSeq; diff --git a/src/xrpld/rpc/handlers/AccountLines.cpp b/src/xrpld/rpc/handlers/AccountLines.cpp index b3b93c0eb1..24ebfaa446 100644 --- a/src/xrpld/rpc/handlers/AccountLines.cpp +++ b/src/xrpld/rpc/handlers/AccountLines.cpp @@ -1,7 +1,7 @@ -#include #include #include #include +#include #include #include @@ -81,7 +81,7 @@ doAccountLines(RPC::JsonContext& context) RPC::inject_error(rpcACT_MALFORMED, result); return result; } - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; if (!ledger->exists(keylet::account(accountID))) return rpcError(rpcACT_NOT_FOUND); @@ -105,7 +105,7 @@ doAccountLines(RPC::JsonContext& context) // this flag allows the requester to ask incoming trustlines in default // state be omitted - bool ignoreDefault = + bool const ignoreDefault = params.isMember(jss::ignore_default) && params[jss::ignore_default].asBool(); Json::Value& jsonLines(result[jss::lines] = Json::arrayValue); diff --git a/src/xrpld/rpc/handlers/AccountObjects.cpp b/src/xrpld/rpc/handlers/AccountObjects.cpp index cd67391da8..12132122c1 100644 --- a/src/xrpld/rpc/handlers/AccountObjects.cpp +++ b/src/xrpld/rpc/handlers/AccountObjects.cpp @@ -131,7 +131,7 @@ doAccountNFTs(RPC::JsonContext& context) obj[sfIssuer.jsonName] = to_string(nft::getIssuer(nftokenID)); obj[sfNFTokenTaxon.jsonName] = nft::toUInt32(nft::getTaxon(nftokenID)); obj[jss::nft_serial] = nft::getSerial(nftokenID); - if (std::uint16_t xferFee = {nft::getTransferFee(nftokenID)}) + if (std::uint16_t const xferFee = {nft::getTransferFee(nftokenID)}) obj[sfTransferFee.jsonName] = xferFee; } diff --git a/src/xrpld/rpc/handlers/AccountOffers.cpp b/src/xrpld/rpc/handlers/AccountOffers.cpp index 86ab140b03..38cc7c1dc5 100644 --- a/src/xrpld/rpc/handlers/AccountOffers.cpp +++ b/src/xrpld/rpc/handlers/AccountOffers.cpp @@ -17,7 +17,7 @@ namespace xrpl { void appendOfferJson(std::shared_ptr const& offer, Json::Value& offers) { - STAmount dirRate = amountFromQuality(getQuality(offer->getFieldH256(sfBookDirectory))); + STAmount const dirRate = amountFromQuality(getQuality(offer->getFieldH256(sfBookDirectory))); Json::Value& obj(offers.append(Json::objectValue)); offer->getFieldAmount(sfTakerPays).setJson(obj[jss::taker_pays]); offer->getFieldAmount(sfTakerGets).setJson(obj[jss::taker_gets]); @@ -56,7 +56,7 @@ doAccountOffers(RPC::JsonContext& context) RPC::inject_error(rpcACT_MALFORMED, result); return result; } - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; // Get info on account. result[jss::account] = toBase58(accountID); diff --git a/src/xrpld/rpc/handlers/AccountTx.cpp b/src/xrpld/rpc/handlers/AccountTx.cpp index d7bffe5d95..f46a71308c 100644 --- a/src/xrpld/rpc/handlers/AccountTx.cpp +++ b/src/xrpld/rpc/handlers/AccountTx.cpp @@ -41,18 +41,18 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) if ((params.isMember(jss::ledger_index_min) || params.isMember(jss::ledger_index_max)) && (params.isMember(jss::ledger_hash) || params.isMember(jss::ledger_index))) { - RPC::Status status{rpcINVALID_PARAMS, "invalidParams"}; + RPC::Status const status{rpcINVALID_PARAMS, "invalidParams"}; status.inject(response); return response; } } if (params.isMember(jss::ledger_index_min) || params.isMember(jss::ledger_index_max)) { - uint32_t min = + uint32_t const min = params.isMember(jss::ledger_index_min) && params[jss::ledger_index_min].asInt() >= 0 ? params[jss::ledger_index_min].asUInt() : 0; - uint32_t max = + uint32_t const max = params.isMember(jss::ledger_index_max) && params[jss::ledger_index_max].asInt() >= 0 ? params[jss::ledger_index_max].asUInt() : UINT32_MAX; @@ -64,7 +64,7 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) auto& hashValue = params[jss::ledger_hash]; if (!hashValue.isString()) { - RPC::Status status{rpcINVALID_PARAMS, "ledgerHashNotString"}; + RPC::Status const status{rpcINVALID_PARAMS, "ledgerHashNotString"}; status.inject(response); return response; } @@ -72,7 +72,7 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) LedgerHash hash; if (!hash.parseHex(hashValue.asString())) { - RPC::Status status{rpcINVALID_PARAMS, "ledgerHashMalformed"}; + RPC::Status const status{rpcINVALID_PARAMS, "ledgerHashMalformed"}; status.inject(response); return response; } @@ -87,7 +87,7 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) } else { - std::string ledgerStr = params[jss::ledger_index].asString(); + std::string const ledgerStr = params[jss::ledger_index].asString(); if (ledgerStr == "current" || ledgerStr.empty()) { @@ -103,7 +103,7 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) } else { - RPC::Status status{rpcINVALID_PARAMS, "ledger_index string malformed"}; + RPC::Status const status{rpcINVALID_PARAMS, "ledger_index string malformed"}; status.inject(response); return response; } @@ -118,7 +118,7 @@ getLedgerRange(RPC::Context& context, std::optional const& ledg { std::uint32_t uValidatedMin = 0; std::uint32_t uValidatedMax = 0; - bool bValidated = context.ledgerMaster.getValidatedRange(uValidatedMin, uValidatedMax); + bool const bValidated = context.ledgerMaster.getValidatedRange(uValidatedMin, uValidatedMax); if (!bValidated) { @@ -133,7 +133,7 @@ getLedgerRange(RPC::Context& context, std::optional const& ledg // Does request specify a ledger or ledger range? if (ledgerSpecifier) { - auto const status = std::visit( + auto status = std::visit( [&](auto const& ls) -> RPC::Status { using T = std::decay_t; if constexpr (std::is_same_v) @@ -167,13 +167,13 @@ getLedgerRange(RPC::Context& context, std::optional const& ledg else { std::shared_ptr ledgerView; - auto const status = getLedger(ledgerView, ls, context); + auto status = getLedger(ledgerView, ls, context); if (!ledgerView) { return status; } - bool validated = context.ledgerMaster.isValidated(*ledgerView); + bool const validated = context.ledgerMaster.isValidated(*ledgerView); if (!validated || ledgerView->header().seq > uValidatedMax || ledgerView->header().seq < uValidatedMin) @@ -210,13 +210,8 @@ doAccountTxHelp(RPC::Context& context, AccountTxArgs const& args) result.marker = args.marker; - RelationalDatabase::AccountTxPageOptions options = { - args.account, - result.ledgerRange.min, - result.ledgerRange.max, - result.marker, - args.limit, - isUnlimited(context.role)}; + RelationalDatabase::AccountTxPageOptions const options = { + args.account, result.ledgerRange, result.marker, args.limit, isUnlimited(context.role)}; auto& db = context.app.getRelationalDatabase(); @@ -424,7 +419,7 @@ doAccountTxJson(RPC::JsonContext& context) !token[jss::ledger].isConvertibleTo(Json::ValueType::uintValue) || !token[jss::seq].isConvertibleTo(Json::ValueType::uintValue)) { - RPC::Status status{ + RPC::Status const status{ rpcINVALID_PARAMS, "invalid marker. Provide ledger index via ledger field, and " "transaction sequence number via seq field"}; diff --git a/src/xrpld/rpc/handlers/CanDelete.cpp b/src/xrpld/rpc/handlers/CanDelete.cpp index 91466c2583..7d881e7d2e 100644 --- a/src/xrpld/rpc/handlers/CanDelete.cpp +++ b/src/xrpld/rpc/handlers/CanDelete.cpp @@ -22,7 +22,7 @@ doCanDelete(RPC::JsonContext& context) if (context.params.isMember(jss::can_delete)) { - Json::Value canDelete = context.params.get(jss::can_delete, 0); + Json::Value const canDelete = context.params.get(jss::can_delete, 0); std::uint32_t canDeleteSeq = 0; if (canDelete.isUInt()) @@ -49,7 +49,7 @@ doCanDelete(RPC::JsonContext& context) else if (canDeleteStr == "now") { canDeleteSeq = context.app.getSHAMapStore().getLastRotated(); - if (!canDeleteSeq) + if (canDeleteSeq == 0u) return RPC::make_error(rpcNOT_READY); } else if (uint256 lh; lh.parseHex(canDeleteStr)) diff --git a/src/xrpld/rpc/handlers/Connect.cpp b/src/xrpld/rpc/handlers/Connect.cpp index 292cd50cbb..fe3183484e 100644 --- a/src/xrpld/rpc/handlers/Connect.cpp +++ b/src/xrpld/rpc/handlers/Connect.cpp @@ -48,7 +48,7 @@ doConnect(RPC::JsonContext& context) auto ip = beast::IP::Endpoint::from_string(ip_str); if (!is_unspecified(ip)) - context.app.overlay().connect(ip.at_port(iPort)); + context.app.getOverlay().connect(ip.at_port(iPort)); return RPC::makeObjectValue( "attempting connection to IP:" + ip_str + " port: " + std::to_string(iPort)); diff --git a/src/xrpld/rpc/handlers/DepositAuthorized.cpp b/src/xrpld/rpc/handlers/DepositAuthorized.cpp index 080b136964..fb1c0db884 100644 --- a/src/xrpld/rpc/handlers/DepositAuthorized.cpp +++ b/src/xrpld/rpc/handlers/DepositAuthorized.cpp @@ -35,7 +35,7 @@ doDepositAuthorized(RPC::JsonContext& context) auto srcID = parseBase58(params[jss::source_account].asString()); if (!srcID) return rpcError(rpcACT_MALFORMED); - auto const srcAcct{std::move(srcID.value())}; + auto const srcAcct{srcID.value()}; // Validate destination_account. if (!params.isMember(jss::destination_account)) @@ -49,7 +49,7 @@ doDepositAuthorized(RPC::JsonContext& context) auto dstID = parseBase58(params[jss::destination_account].asString()); if (!dstID) return rpcError(rpcACT_MALFORMED); - auto const dstAcct{std::move(dstID.value())}; + auto const dstAcct{dstID.value()}; // Validate ledger. std::shared_ptr ledger; @@ -73,7 +73,7 @@ doDepositAuthorized(RPC::JsonContext& context) return result; } - bool const reqAuth = (sleDest->getFlags() & lsfDepositAuth) && (srcAcct != dstAcct); + bool const reqAuth = ((sleDest->getFlags() & lsfDepositAuth) != 0u) && (srcAcct != dstAcct); bool const credentialsPresent = params.isMember(jss::credentials); std::set> sorted; @@ -122,7 +122,7 @@ doDepositAuthorized(RPC::JsonContext& context) return result; } - if (!(sleCred->getFlags() & lsfAccepted)) + if ((sleCred->getFlags() & lsfAccepted) == 0u) { RPC::inject_error(rpcBAD_CREDENTIALS, "credentials aren't accepted", result); return result; diff --git a/src/xrpld/rpc/handlers/DoManifest.cpp b/src/xrpld/rpc/handlers/DoManifest.cpp index 5928947e21..ba3461033f 100644 --- a/src/xrpld/rpc/handlers/DoManifest.cpp +++ b/src/xrpld/rpc/handlers/DoManifest.cpp @@ -32,25 +32,25 @@ doManifest(RPC::JsonContext& context) // first attempt to use params as ephemeral key, // if this lookup succeeds master key will be returned, // else an unseated optional is returned - auto const mk = context.app.validatorManifests().getMasterKey(*pk); + auto const mk = context.app.getValidatorManifests().getMasterKey(*pk); - auto const ek = context.app.validatorManifests().getSigningKey(mk); + auto const ek = context.app.getValidatorManifests().getSigningKey(mk); // if ephemeral key not found, we don't have specified manifest if (!ek) return ret; - if (auto const manifest = context.app.validatorManifests().getManifest(mk)) + if (auto const manifest = context.app.getValidatorManifests().getManifest(mk)) ret[jss::manifest] = base64_encode(*manifest); Json::Value details; details[jss::master_key] = toBase58(TokenType::NodePublic, mk); details[jss::ephemeral_key] = toBase58(TokenType::NodePublic, *ek); - if (auto const seq = context.app.validatorManifests().getSequence(mk)) + if (auto const seq = context.app.getValidatorManifests().getSequence(mk)) details[jss::seq] = *seq; - if (auto const domain = context.app.validatorManifests().getDomain(mk)) + if (auto const domain = context.app.getValidatorManifests().getDomain(mk)) details[jss::domain] = *domain; ret[jss::details] = details; diff --git a/src/xrpld/rpc/handlers/GatewayBalances.cpp b/src/xrpld/rpc/handlers/GatewayBalances.cpp index f7acbc77e6..20679e5f42 100644 --- a/src/xrpld/rpc/handlers/GatewayBalances.cpp +++ b/src/xrpld/rpc/handlers/GatewayBalances.cpp @@ -1,7 +1,7 @@ #include -#include #include #include +#include #include #include @@ -55,7 +55,7 @@ doGatewayBalances(RPC::JsonContext& context) auto id = parseBase58(strIdent); if (!id) return rpcError(rpcACT_MALFORMED); - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; context.loadType = Resource::feeHeavyBurdenRPC; result[jss::account] = toBase58(accountID); @@ -76,7 +76,7 @@ doGatewayBalances(RPC::JsonContext& context) { if (auto id = parseBase58(j.asString()); id) { - hotWallets.insert(std::move(id.value())); + hotWallets.insert(id.value()); return true; } } @@ -164,7 +164,7 @@ doGatewayBalances(RPC::JsonContext& context) if (!rs) return; - int balSign = rs->getBalance().signum(); + int const balSign = rs->getBalance().signum(); if (balSign == 0) return; diff --git a/src/xrpld/rpc/handlers/GetAggregatePrice.cpp b/src/xrpld/rpc/handlers/GetAggregatePrice.cpp index cf327258a3..281f2d63a7 100644 --- a/src/xrpld/rpc/handlers/GetAggregatePrice.cpp +++ b/src/xrpld/rpc/handlers/GetAggregatePrice.cpp @@ -56,14 +56,14 @@ iteratePriceData( if (prevChain == chain) return; - if (!oracle || f(*oracle) || isNew) + if ((oracle == nullptr) || f(*oracle) || isNew) return; if (++history > maxHistory) return; - uint256 prevTx = chain->getFieldH256(sfPreviousTxnID); - std::uint32_t prevSeq = chain->getFieldU32(sfPreviousTxnLgrSeq); + uint256 const prevTx = chain->getFieldH256(sfPreviousTxnID); + std::uint32_t const prevSeq = chain->getFieldU32(sfPreviousTxnLgrSeq); auto const ledger = context.ledgerMaster.getLedgerBySeq(prevSeq); if (!ledger) @@ -320,7 +320,7 @@ doGetAggregatePrice(RPC::JsonContext& context) auto const middle = size_ / 2; if ((size_ % 2) == 0) { - static STAmount two{noIssue(), 2, 0}; + static STAmount const two{noIssue(), 2, 0}; auto it = itAdvance(prices.right.begin(), middle - 1); auto const& a1 = it->first; auto const& a2 = (++it)->first; diff --git a/src/xrpld/rpc/handlers/GetCounts.cpp b/src/xrpld/rpc/handlers/GetCounts.cpp index f5f953046d..648d29a5fd 100644 --- a/src/xrpld/rpc/handlers/GetCounts.cpp +++ b/src/xrpld/rpc/handlers/GetCounts.cpp @@ -71,7 +71,7 @@ getCountsJson(Application& app, int minObjectCount) ret[jss::dbKBTransaction] = dbKB; { - std::size_t c = app.getOPs().getLocalTxCount(); + std::size_t const c = app.getOPs().getLocalTxCount(); if (c > 0) ret[jss::local_txs] = static_cast(c); } @@ -80,7 +80,7 @@ getCountsJson(Application& app, int minObjectCount) ret[jss::write_load] = app.getNodeStore().getWriteLoad(); ret[jss::historical_perminute] = static_cast(app.getInboundLedgers().fetchRate()); - ret[jss::SLE_hit_rate] = app.cachedSLEs().rate(); + ret[jss::SLE_hit_rate] = app.getCachedSLEs().rate(); ret[jss::ledger_hit_rate] = app.getLedgerMaster().getCacheHitRate(); ret[jss::AL_size] = Json::UInt(app.getAcceptedLedgerCache().size()); ret[jss::AL_hit_rate] = app.getAcceptedLedgerCache().getHitRate(); diff --git a/src/xrpld/rpc/handlers/GetCounts.h b/src/xrpld/rpc/handlers/GetCounts.h index 60c7a3b693..286ad38af3 100644 --- a/src/xrpld/rpc/handlers/GetCounts.h +++ b/src/xrpld/rpc/handlers/GetCounts.h @@ -7,4 +7,4 @@ namespace xrpl { Json::Value getCountsJson(Application& app, int minObjectCount); -} +} // namespace xrpl diff --git a/src/xrpld/rpc/handlers/LedgerAccept.cpp b/src/xrpld/rpc/handlers/LedgerAccept.cpp index c7a828863a..91e88b707f 100644 --- a/src/xrpld/rpc/handlers/LedgerAccept.cpp +++ b/src/xrpld/rpc/handlers/LedgerAccept.cpp @@ -22,7 +22,7 @@ doLedgerAccept(RPC::JsonContext& context) } else { - std::unique_lock lock{context.app.getMasterMutex()}; + std::unique_lock const lock{context.app.getMasterMutex()}; context.netOps.acceptLedger(); jvResult[jss::ledger_current_index] = context.ledgerMaster.getCurrentLedgerIndex(); } diff --git a/src/xrpld/rpc/handlers/LedgerData.cpp b/src/xrpld/rpc/handlers/LedgerData.cpp index 733d1c99c6..059c844e6e 100644 --- a/src/xrpld/rpc/handlers/LedgerData.cpp +++ b/src/xrpld/rpc/handlers/LedgerData.cpp @@ -116,9 +116,9 @@ doLedgerData(RPC::JsonContext& context) std::pair doLedgerDataGrpc(RPC::GRPCContext& context) { - org::xrpl::rpc::v1::GetLedgerDataRequest& request = context.params; + org::xrpl::rpc::v1::GetLedgerDataRequest const& request = context.params; org::xrpl::rpc::v1::GetLedgerDataResponse response; - grpc::Status status = grpc::Status::OK; + grpc::Status const status = grpc::Status::OK; std::shared_ptr ledger; if (auto status = RPC::ledgerFromRequest(ledger, context)) @@ -142,7 +142,7 @@ doLedgerDataGrpc(RPC::GRPCContext& con } else if (!request.marker().empty()) { - grpc::Status errorStatus{grpc::StatusCode::INVALID_ARGUMENT, "marker malformed"}; + grpc::Status const errorStatus{grpc::StatusCode::INVALID_ARGUMENT, "marker malformed"}; return {response, errorStatus}; } diff --git a/src/xrpld/rpc/handlers/LedgerDiff.cpp b/src/xrpld/rpc/handlers/LedgerDiff.cpp index 2990315880..56a4d97b94 100644 --- a/src/xrpld/rpc/handlers/LedgerDiff.cpp +++ b/src/xrpld/rpc/handlers/LedgerDiff.cpp @@ -5,50 +5,50 @@ namespace xrpl { std::pair doLedgerDiffGrpc(RPC::GRPCContext& context) { - org::xrpl::rpc::v1::GetLedgerDiffRequest& request = context.params; + org::xrpl::rpc::v1::GetLedgerDiffRequest const& request = context.params; org::xrpl::rpc::v1::GetLedgerDiffResponse response; - grpc::Status status = grpc::Status::OK; + grpc::Status const status = grpc::Status::OK; std::shared_ptr baseLedgerRv; std::shared_ptr desiredLedgerRv; if (RPC::ledgerFromSpecifier(baseLedgerRv, request.base_ledger(), context)) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not found"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not found"}; return {response, errorStatus}; } if (RPC::ledgerFromSpecifier(desiredLedgerRv, request.desired_ledger(), context)) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "desired ledger not found"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "desired ledger not found"}; return {response, errorStatus}; } - std::shared_ptr baseLedger = + std::shared_ptr const baseLedger = std::dynamic_pointer_cast(baseLedgerRv); if (!baseLedger) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not validated"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not validated"}; return {response, errorStatus}; } - std::shared_ptr desiredLedger = + std::shared_ptr const desiredLedger = std::dynamic_pointer_cast(desiredLedgerRv); if (!desiredLedger) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not validated"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not validated"}; return {response, errorStatus}; } SHAMap::Delta differences; - int maxDifferences = std::numeric_limits::max(); + int const maxDifferences = std::numeric_limits::max(); - bool res = + bool const res = baseLedger->stateMap().compare(desiredLedger->stateMap(), differences, maxDifferences); if (!res) { - grpc::Status errorStatus{ + grpc::Status const errorStatus{ grpc::StatusCode::RESOURCE_EXHAUSTED, "too many differences between specified ledgers"}; return {response, errorStatus}; } diff --git a/src/xrpld/rpc/handlers/LedgerEntry.cpp b/src/xrpld/rpc/handlers/LedgerEntry.cpp index 640369c04b..d27574944d 100644 --- a/src/xrpld/rpc/handlers/LedgerEntry.cpp +++ b/src/xrpld/rpc/handlers/LedgerEntry.cpp @@ -328,7 +328,7 @@ parseDepositPreauth( "malformedAuthorizedCredentials", jss::authorized_credentials, "array"); } - return keylet::depositPreauth(*owner, std::move(sorted)).key; + return keylet::depositPreauth(*owner, sorted).key; } static Expected @@ -370,7 +370,7 @@ parseDirectoryNode( "malformedRequest", "Must have exactly one of `owner` and `dir_root` fields."); } - std::uint64_t uSubIndex = params.get(jss::sub_index, 0).asUInt(); + std::uint64_t const uSubIndex = params.get(jss::sub_index, 0).asUInt(); if (params.isMember(jss::dir_root)) { @@ -956,9 +956,9 @@ doLedgerEntry(RPC::JsonContext& context) std::pair doLedgerEntryGrpc(RPC::GRPCContext& context) { - org::xrpl::rpc::v1::GetLedgerEntryRequest& request = context.params; + org::xrpl::rpc::v1::GetLedgerEntryRequest const& request = context.params; org::xrpl::rpc::v1::GetLedgerEntryResponse response; - grpc::Status status = grpc::Status::OK; + grpc::Status const status = grpc::Status::OK; std::shared_ptr ledger; if (auto status = RPC::ledgerFromRequest(ledger, context)) @@ -978,14 +978,14 @@ doLedgerEntryGrpc(RPC::GRPCContext& c auto const key = uint256::fromVoidChecked(request.key()); if (!key) { - grpc::Status errorStatus{grpc::StatusCode::INVALID_ARGUMENT, "index malformed"}; + grpc::Status const errorStatus{grpc::StatusCode::INVALID_ARGUMENT, "index malformed"}; return {response, errorStatus}; } auto const sleNode = ledger->read(keylet::unchecked(*key)); if (!sleNode) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "object not found"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "object not found"}; return {response, errorStatus}; } diff --git a/src/xrpld/rpc/handlers/LedgerEntryHelpers.h b/src/xrpld/rpc/handlers/LedgerEntryHelpers.h index 683e6ebb5a..9c5f0b2fcb 100644 --- a/src/xrpld/rpc/handlers/LedgerEntryHelpers.h +++ b/src/xrpld/rpc/handlers/LedgerEntryHelpers.h @@ -16,29 +16,27 @@ namespace xrpl { namespace LedgerEntryHelpers { -Unexpected +inline Unexpected missingFieldError(Json::StaticString const field, std::optional err = std::nullopt) { Json::Value json = Json::objectValue; - auto error = RPC::missing_field_message(std::string(field.c_str())); json[jss::error] = err.value_or("malformedRequest"); json[jss::error_code] = rpcINVALID_PARAMS; - json[jss::error_message] = std::move(error); + json[jss::error_message] = RPC::missing_field_message(std::string(field.c_str())); return Unexpected(json); } -Unexpected +inline Unexpected invalidFieldError(std::string const& err, Json::StaticString const field, std::string const& type) { Json::Value json = Json::objectValue; - auto error = RPC::expected_field_message(field, type); json[jss::error] = err; json[jss::error_code] = rpcINVALID_PARAMS; - json[jss::error_message] = std::move(error); + json[jss::error_message] = RPC::expected_field_message(field, type); return Unexpected(json); } -Unexpected +inline Unexpected malformedError(std::string const& err, std::string const& message) { Json::Value json = Json::objectValue; @@ -48,7 +46,7 @@ malformedError(std::string const& err, std::string const& message) return Unexpected(json); } -Expected +inline Expected hasRequired( Json::Value const& params, std::initializer_list fields, @@ -88,7 +86,7 @@ required( } template <> -std::optional +inline std::optional parse(Json::Value const& param) { if (!param.isString()) @@ -103,7 +101,7 @@ parse(Json::Value const& param) return account; } -Expected +inline Expected requiredAccountID( Json::Value const& params, Json::StaticString const fieldName, @@ -112,20 +110,20 @@ requiredAccountID( return required(params, fieldName, err, "AccountID"); } -std::optional +inline std::optional parseHexBlob(Json::Value const& param, std::size_t maxLength) { if (!param.isString()) return std::nullopt; - auto const blob = strUnHex(param.asString()); + auto blob = strUnHex(param.asString()); if (!blob || blob->empty() || blob->size() > maxLength) return std::nullopt; return blob; } -Expected +inline Expected requiredHexBlob( Json::Value const& params, Json::StaticString const fieldName, @@ -144,7 +142,7 @@ requiredHexBlob( } template <> -std::optional +inline std::optional parse(Json::Value const& param) { if (param.isUInt() || (param.isInt() && param.asInt() >= 0)) @@ -152,7 +150,7 @@ parse(Json::Value const& param) if (param.isString()) { - std::uint32_t v; + std::uint32_t v = 0; if (beast::lexicalCastChecked(v, param.asString())) return v; } @@ -160,7 +158,7 @@ parse(Json::Value const& param) return std::nullopt; } -Expected +inline Expected requiredUInt32( Json::Value const& params, Json::StaticString const fieldName, @@ -170,7 +168,7 @@ requiredUInt32( } template <> -std::optional +inline std::optional parse(Json::Value const& param) { uint256 uNodeIndex; @@ -182,7 +180,7 @@ parse(Json::Value const& param) return uNodeIndex; } -Expected +inline Expected requiredUInt256( Json::Value const& params, Json::StaticString const fieldName, @@ -192,7 +190,7 @@ requiredUInt256( } template <> -std::optional +inline std::optional parse(Json::Value const& param) { uint192 field; @@ -204,7 +202,7 @@ parse(Json::Value const& param) return field; } -Expected +inline Expected requiredUInt192( Json::Value const& params, Json::StaticString const fieldName, @@ -214,7 +212,7 @@ requiredUInt192( } template <> -std::optional +inline std::optional parse(Json::Value const& param) { try @@ -227,13 +225,13 @@ parse(Json::Value const& param) } } -Expected +inline Expected requiredIssue(Json::Value const& params, Json::StaticString const fieldName, std::string const& err) { return required(params, fieldName, err, "Issue"); } -Expected +inline Expected parseBridgeFields(Json::Value const& params) { if (auto const value = hasRequired( diff --git a/src/xrpld/rpc/handlers/LedgerHandler.cpp b/src/xrpld/rpc/handlers/LedgerHandler.cpp index 43c9780bb0..0707ad1ffe 100644 --- a/src/xrpld/rpc/handlers/LedgerHandler.cpp +++ b/src/xrpld/rpc/handlers/LedgerHandler.cpp @@ -21,7 +21,7 @@ Status LedgerHandler::check() { auto const& params = context_.params; - bool needsLedger = params.isMember(jss::ledger) || params.isMember(jss::ledger_hash) || + bool const needsLedger = params.isMember(jss::ledger) || params.isMember(jss::ledger_hash) || params.isMember(jss::ledger_index); if (!needsLedger) return Status::OK; @@ -103,7 +103,7 @@ LedgerHandler::writeResult(Json::Value& value) "and update your request. Field `type` is deprecated."; } - if (warnings.size()) + if (warnings.size() != 0u) value[jss::warnings] = std::move(warnings); } @@ -113,9 +113,9 @@ std::pair doLedgerGrpc(RPC::GRPCContext& context) { auto begin = std::chrono::system_clock::now(); - org::xrpl::rpc::v1::GetLedgerRequest& request = context.params; + org::xrpl::rpc::v1::GetLedgerRequest const& request = context.params; org::xrpl::rpc::v1::GetLedgerResponse response; - grpc::Status status = grpc::Status::OK; + grpc::Status const status = grpc::Status::OK; std::shared_ptr ledger; if (auto status = RPC::ledgerFromRequest(ledger, context)) @@ -147,11 +147,11 @@ doLedgerGrpc(RPC::GRPCContext& context) if (request.expand()) { auto txn = response.mutable_transactions_list()->add_transactions(); - Serializer sTxn = i.first->getSerializer(); + Serializer const sTxn = i.first->getSerializer(); txn->set_transaction_blob(sTxn.data(), sTxn.getLength()); if (i.second) { - Serializer sMeta = i.second->getSerializer(); + Serializer const sMeta = i.second->getSerializer(); txn->set_metadata_blob(sMeta.data(), sMeta.getLength()); } } @@ -173,30 +173,32 @@ doLedgerGrpc(RPC::GRPCContext& context) if (request.get_objects()) { - std::shared_ptr parent = + std::shared_ptr const parent = context.app.getLedgerMaster().getLedgerBySeq(ledger->seq() - 1); - std::shared_ptr base = std::dynamic_pointer_cast(parent); + std::shared_ptr const base = std::dynamic_pointer_cast(parent); if (!base) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "parent ledger not validated"}; + grpc::Status const errorStatus{ + grpc::StatusCode::NOT_FOUND, "parent ledger not validated"}; return {response, errorStatus}; } - std::shared_ptr desired = std::dynamic_pointer_cast(ledger); + std::shared_ptr const desired = + std::dynamic_pointer_cast(ledger); if (!desired) { - grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND, "ledger not validated"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "ledger not validated"}; return {response, errorStatus}; } SHAMap::Delta differences; - int maxDifferences = std::numeric_limits::max(); + int const maxDifferences = std::numeric_limits::max(); - bool res = base->stateMap().compare(desired->stateMap(), differences, maxDifferences); + bool const res = base->stateMap().compare(desired->stateMap(), differences, maxDifferences); if (!res) { - grpc::Status errorStatus{ + grpc::Status const errorStatus{ grpc::StatusCode::RESOURCE_EXHAUSTED, "too many differences between specified ledgers"}; return {response, errorStatus}; diff --git a/src/xrpld/rpc/handlers/LedgerHandler.h b/src/xrpld/rpc/handlers/LedgerHandler.h index 418958e9f1..f024241546 100644 --- a/src/xrpld/rpc/handlers/LedgerHandler.h +++ b/src/xrpld/rpc/handlers/LedgerHandler.h @@ -14,7 +14,7 @@ namespace Json { class Object; -} +} // namespace Json namespace xrpl { namespace RPC { diff --git a/src/xrpld/rpc/handlers/LogLevel.cpp b/src/xrpld/rpc/handlers/LogLevel.cpp index 2bc1beb7d4..e1e637435c 100644 --- a/src/xrpld/rpc/handlers/LogLevel.cpp +++ b/src/xrpld/rpc/handlers/LogLevel.cpp @@ -21,9 +21,9 @@ doLogLevel(RPC::JsonContext& context) Json::Value ret(Json::objectValue); Json::Value lev(Json::objectValue); - lev[jss::base] = Logs::toString(Logs::fromSeverity(context.app.logs().threshold())); - std::vector> logTable( - context.app.logs().partition_severities()); + lev[jss::base] = Logs::toString(Logs::fromSeverity(context.app.getLogs().threshold())); + std::vector> const logTable( + context.app.getLogs().partition_severities()); for (auto const& [k, v] : logTable) lev[k] = v; @@ -41,7 +41,7 @@ doLogLevel(RPC::JsonContext& context) if (!context.params.isMember(jss::partition)) { // set base log threshold - context.app.logs().threshold(severity); + context.app.getLogs().threshold(severity); return Json::objectValue; } @@ -49,15 +49,15 @@ doLogLevel(RPC::JsonContext& context) if (context.params.isMember(jss::partition)) { // set partition threshold - std::string partition(context.params[jss::partition].asString()); + std::string const partition(context.params[jss::partition].asString()); if (boost::iequals(partition, "base")) { - context.app.logs().threshold(severity); + context.app.getLogs().threshold(severity); } else { - context.app.logs().get(partition).threshold(severity); + context.app.getLogs().get(partition).threshold(severity); } return Json::objectValue; diff --git a/src/xrpld/rpc/handlers/LogRotate.cpp b/src/xrpld/rpc/handlers/LogRotate.cpp index 3d52dc6538..3cc7f35381 100644 --- a/src/xrpld/rpc/handlers/LogRotate.cpp +++ b/src/xrpld/rpc/handlers/LogRotate.cpp @@ -10,7 +10,7 @@ Json::Value doLogRotate(RPC::JsonContext& context) { context.app.getPerfLog().rotate(); - return RPC::makeObjectValue(context.app.logs().rotate()); + return RPC::makeObjectValue(context.app.getLogs().rotate()); } } // namespace xrpl diff --git a/src/xrpld/rpc/handlers/NoRippleCheck.cpp b/src/xrpld/rpc/handlers/NoRippleCheck.cpp index 73f51fca1a..d00a3e279b 100644 --- a/src/xrpld/rpc/handlers/NoRippleCheck.cpp +++ b/src/xrpld/rpc/handlers/NoRippleCheck.cpp @@ -1,8 +1,8 @@ #include -#include #include #include #include +#include #include #include @@ -88,7 +88,7 @@ doNoRippleCheck(RPC::JsonContext& context) if (!ledger) return result; - Json::Value dummy; + Json::Value dummy; // NOLINT(misc-const-correctness) Json::Value& jvTransactions = transactions ? (result[jss::transactions] = Json::arrayValue) : dummy; @@ -98,7 +98,7 @@ doNoRippleCheck(RPC::JsonContext& context) RPC::inject_error(rpcACT_MALFORMED, result); return result; } - auto const accountID{std::move(id.value())}; + auto const accountID{id.value()}; auto const sle = ledger->read(keylet::account(accountID)); if (!sle) return rpcError(rpcACT_NOT_FOUND); @@ -107,16 +107,16 @@ doNoRippleCheck(RPC::JsonContext& context) Json::Value& problems = (result["problems"] = Json::arrayValue); - bool bDefaultRipple = sle->getFieldU32(sfFlags) & lsfDefaultRipple; + bool const bDefaultRipple = (sle->getFieldU32(sfFlags) & lsfDefaultRipple) != 0u; - if (bDefaultRipple & !roleGateway) + if ((static_cast(bDefaultRipple) & static_cast(!roleGateway)) != 0) { problems.append( "You appear to have set your default ripple flag even though you " "are not a gateway. This is not recommended unless you are " "experimenting"); } - else if (roleGateway & !bDefaultRipple) + else if ((static_cast(roleGateway) & static_cast(!bDefaultRipple)) != 0) { problems.append("You should immediately set your default ripple flag"); if (transactions) @@ -151,9 +151,10 @@ doNoRippleCheck(RPC::JsonContext& context) } if (needFix) { - AccountID peer = + AccountID const peer = ownedItem->getFieldAmount(bLow ? sfHighLimit : sfLowLimit).getIssuer(); - STAmount peerLimit = ownedItem->getFieldAmount(bLow ? sfHighLimit : sfLowLimit); + STAmount const peerLimit = + ownedItem->getFieldAmount(bLow ? sfHighLimit : sfLowLimit); problem += to_string(peerLimit.getCurrency()); problem += " line to "; problem += to_string(peerLimit.getIssuer()); diff --git a/src/xrpld/rpc/handlers/OwnerInfo.cpp b/src/xrpld/rpc/handlers/OwnerInfo.cpp index 202d0e9b5b..659a149e20 100644 --- a/src/xrpld/rpc/handlers/OwnerInfo.cpp +++ b/src/xrpld/rpc/handlers/OwnerInfo.cpp @@ -20,7 +20,7 @@ doOwnerInfo(RPC::JsonContext& context) return RPC::missing_field_error(jss::account); } - std::string strIdent = context.params.isMember(jss::account) + std::string const strIdent = context.params.isMember(jss::account) ? context.params[jss::account].asString() : context.params[jss::ident].asString(); Json::Value ret; diff --git a/src/xrpld/rpc/handlers/PathFind.cpp b/src/xrpld/rpc/handlers/PathFind.cpp index 357cd9b91e..ced3625b4c 100644 --- a/src/xrpld/rpc/handlers/PathFind.cpp +++ b/src/xrpld/rpc/handlers/PathFind.cpp @@ -1,7 +1,7 @@ #include #include -#include #include +#include #include #include @@ -34,13 +34,13 @@ doPathFind(RPC::JsonContext& context) { context.loadType = Resource::feeHeavyBurdenRPC; context.infoSub->clearRequest(); - return context.app.getPathRequests().makePathRequest( + return context.app.getPathRequestManager().makePathRequest( context.infoSub, lpLedger, context.params); } if (sSubCommand == "close") { - InfoSubRequest::pointer request = context.infoSub->getRequest(); + InfoSubRequest::pointer const request = context.infoSub->getRequest(); if (!request) return rpcError(rpcNO_PF_REQUEST); @@ -51,7 +51,7 @@ doPathFind(RPC::JsonContext& context) if (sSubCommand == "status") { - InfoSubRequest::pointer request = context.infoSub->getRequest(); + InfoSubRequest::pointer const request = context.infoSub->getRequest(); if (!request) return rpcError(rpcNO_PF_REQUEST); diff --git a/src/xrpld/rpc/handlers/Peers.cpp b/src/xrpld/rpc/handlers/Peers.cpp index b21efc01fb..646aae7bc8 100644 --- a/src/xrpld/rpc/handlers/Peers.cpp +++ b/src/xrpld/rpc/handlers/Peers.cpp @@ -15,7 +15,7 @@ doPeers(RPC::JsonContext& context) { Json::Value jvResult(Json::objectValue); - jvResult[jss::peers] = context.app.overlay().json(); + jvResult[jss::peers] = context.app.getOverlay().json(); // Legacy support if (context.apiVersion == 1) @@ -38,13 +38,13 @@ doPeers(RPC::JsonContext& context) } } - auto const now = context.app.timeKeeper().now(); + auto const now = context.app.getTimeKeeper().now(); auto const self = context.app.nodeIdentity().first; Json::Value& cluster = (jvResult[jss::cluster] = Json::objectValue); - std::uint32_t ref = context.app.getFeeTrack().getLoadBase(); + std::uint32_t const ref = context.app.getFeeTrack().getLoadBase(); - context.app.cluster().for_each([&cluster, now, ref, &self](ClusterNode const& node) { + context.app.getCluster().for_each([&cluster, now, ref, &self](ClusterNode const& node) { if (node.identity() == self) return; diff --git a/src/xrpld/rpc/handlers/Random.cpp b/src/xrpld/rpc/handlers/Random.cpp index 2fb8abf3c9..5ed4426940 100644 --- a/src/xrpld/rpc/handlers/Random.cpp +++ b/src/xrpld/rpc/handlers/Random.cpp @@ -10,7 +10,7 @@ namespace xrpl { namespace RPC { struct JsonContext; -} +} // namespace RPC // Result: // { diff --git a/src/xrpld/rpc/handlers/Reservations.cpp b/src/xrpld/rpc/handlers/Reservations.cpp index 5d9c23d46e..fb874247ad 100644 --- a/src/xrpld/rpc/handlers/Reservations.cpp +++ b/src/xrpld/rpc/handlers/Reservations.cpp @@ -56,7 +56,7 @@ doPeerReservationsAdd(RPC::JsonContext& context) PublicKey const& nodeId = *optPk; auto const previous = - context.app.peerReservations().insert_or_assign(PeerReservation{nodeId, desc}); + context.app.getPeerReservations().insert_or_assign(PeerReservation{nodeId, desc}); Json::Value result{Json::objectValue}; if (previous) @@ -83,7 +83,7 @@ doPeerReservationsDel(RPC::JsonContext& context) return rpcError(rpcPUBLIC_MALFORMED); PublicKey const& nodeId = *optPk; - auto const previous = context.app.peerReservations().erase(nodeId); + auto const previous = context.app.getPeerReservations().erase(nodeId); Json::Value result{Json::objectValue}; if (previous) @@ -96,8 +96,8 @@ doPeerReservationsDel(RPC::JsonContext& context) Json::Value doPeerReservationsList(RPC::JsonContext& context) { - auto const& reservations = context.app.peerReservations().list(); - // Enumerate the reservations in context.app.peerReservations() + auto const& reservations = context.app.getPeerReservations().list(); + // Enumerate the reservations in context.app.getPeerReservations() // as a Json::Value. Json::Value result{Json::objectValue}; Json::Value& jaReservations = result[jss::reservations] = Json::arrayValue; diff --git a/src/xrpld/rpc/handlers/RipplePathFind.cpp b/src/xrpld/rpc/handlers/RipplePathFind.cpp index 5f73165287..ac4f22a1aa 100644 --- a/src/xrpld/rpc/handlers/RipplePathFind.cpp +++ b/src/xrpld/rpc/handlers/RipplePathFind.cpp @@ -1,7 +1,7 @@ #include -#include #include #include +#include #include #include @@ -105,7 +105,7 @@ doRipplePathFind(RPC::JsonContext& context) // JobQueue before letting the thread continue. // // May 2017 - jvResult = context.app.getPathRequests().makeLegacyPathRequest( + jvResult = context.app.getPathRequestManager().makeLegacyPathRequest( request, [&context]() { // Copying the shared_ptr keeps the coroutine alive up @@ -113,7 +113,7 @@ doRipplePathFind(RPC::JsonContext& context) // captured reference could evaporate when we return from // coroCopy->resume(). This is not strictly necessary, but // will make maintenance easier. - std::shared_ptr coroCopy{context.coro}; + std::shared_ptr const coroCopy{context.coro}; if (!coroCopy->post()) { // The post() failed, so we won't get a thread to let @@ -140,11 +140,11 @@ doRipplePathFind(RPC::JsonContext& context) if (!lpLedger) return jvResult; - RPC::LegacyPathFind lpf(isUnlimited(context.role), context.app); + RPC::LegacyPathFind const lpf(isUnlimited(context.role), context.app); if (!lpf.isOk()) return rpcError(rpcTOO_BUSY); - auto result = context.app.getPathRequests().doLegacyPathRequest( + auto result = context.app.getPathRequestManager().doLegacyPathRequest( context.consumer, lpLedger, context.params); for (auto& fieldName : jvResult.getMemberNames()) diff --git a/src/xrpld/rpc/handlers/ServerDefinitions.cpp b/src/xrpld/rpc/handlers/ServerDefinitions.cpp index 24abd69a02..f99f427ca8 100644 --- a/src/xrpld/rpc/handlers/ServerDefinitions.cpp +++ b/src/xrpld/rpc/handlers/ServerDefinitions.cpp @@ -24,7 +24,7 @@ namespace detail { class ServerDefinitions { private: - std::string + static std::string // translate e.g. STI_LEDGERENTRY to LedgerEntry translate(std::string const& inp); @@ -93,7 +93,7 @@ ServerDefinitions::translate(std::string const& inp) // convert snake_case to CamelCase for (;;) { - pos = inpToProcess.find("_"); + pos = inpToProcess.find('_'); if (pos == std::string::npos) pos = inpToProcess.size(); std::string token = inpToProcess.substr(0, pos); @@ -123,7 +123,7 @@ ServerDefinitions::ServerDefinitions() : defs_{Json::objectValue} std::map typeMap{{-1, "Done"}}; for (auto const& [rawName, typeValue] : sTypeMap) { - std::string typeName = translate(std::string(rawName).substr(4) /* remove STI_ */); + std::string const typeName = translate(std::string(rawName).substr(4) /* remove STI_ */); defs_[jss::TYPES][typeName] = typeValue; typeMap[typeValue] = typeName; } diff --git a/src/xrpld/rpc/handlers/Simulate.cpp b/src/xrpld/rpc/handlers/Simulate.cpp index 1d46f72425..c1d6d7f334 100644 --- a/src/xrpld/rpc/handlers/Simulate.cpp +++ b/src/xrpld/rpc/handlers/Simulate.cpp @@ -39,10 +39,10 @@ getAutofillSequence(Json::Value const& tx_json, RPC::JsonContext& context) RPC::make_error(rpcSRC_ACT_MALFORMED, RPC::invalid_field_message("tx.Account"))); } std::shared_ptr const sle = - context.app.openLedger().current()->read(keylet::account(*srcAddressID)); + context.app.getOpenLedger().current()->read(keylet::account(*srcAddressID)); if (!hasTicketSeq && !sle) { - JLOG(context.app.journal("Simulate").debug()) + JLOG(context.app.getJournal("Simulate").debug()) << "Failed to find source account " << "in current ledger: " << toBase58(*srcAddressID); @@ -210,7 +210,7 @@ simulateTxn(RPC::JsonContext& context, std::shared_ptr transaction) { Json::Value jvResult; // Process the transaction - OpenView view = *context.app.openLedger().current(); + OpenView view = *context.app.getOpenLedger().current(); auto const result = context.app.getTxQ().apply( context.app, view, transaction->getSTransaction(), tapDRY_RUN, context.j); diff --git a/src/xrpld/rpc/handlers/Stop.cpp b/src/xrpld/rpc/handlers/Stop.cpp index d2f1cd7a80..b47c35e21d 100644 --- a/src/xrpld/rpc/handlers/Stop.cpp +++ b/src/xrpld/rpc/handlers/Stop.cpp @@ -7,7 +7,7 @@ namespace xrpl { namespace RPC { struct JsonContext; -} +} // namespace RPC Json::Value doStop(RPC::JsonContext& context) diff --git a/src/xrpld/rpc/handlers/Subscribe.cpp b/src/xrpld/rpc/handlers/Subscribe.cpp index 6e8d9dbaa3..af3e998a58 100644 --- a/src/xrpld/rpc/handlers/Subscribe.cpp +++ b/src/xrpld/rpc/handlers/Subscribe.cpp @@ -5,7 +5,6 @@ #include #include -#include #include #include #include @@ -33,7 +32,7 @@ doSubscribe(RPC::JsonContext& context) if (context.role != Role::ADMIN) return rpcError(rpcNO_PERMISSION); - std::string strUrl = context.params[jss::url].asString(); + std::string const strUrl = context.params[jss::url].asString(); std::string strUsername = context.params.isMember(jss::url_username) ? context.params[jss::url_username].asString() : ""; @@ -62,7 +61,7 @@ doSubscribe(RPC::JsonContext& context) strUrl, strUsername, strPassword, - context.app.logs()); + context.app); ispSub = context.netOps.addRpcSub(strUrl, std::dynamic_pointer_cast(rspSub)); } @@ -107,7 +106,7 @@ doSubscribe(RPC::JsonContext& context) if (!it.isString()) return rpcError(rpcSTREAM_MALFORMED); - std::string streamName = it.asString(); + std::string const streamName = it.asString(); if (streamName == "server") { context.netOps.subServer(ispSub, jvResult, context.role == Role::ADMIN); diff --git a/src/xrpld/rpc/handlers/Tx.cpp b/src/xrpld/rpc/handlers/Tx.cpp index 482b7e3bf1..a3ed788060 100644 --- a/src/xrpld/rpc/handlers/Tx.cpp +++ b/src/xrpld/rpc/handlers/Tx.cpp @@ -42,7 +42,7 @@ struct TxResult std::optional ctid; std::optional closeTime; std::optional ledgerHash; - TxSearched searchedAll = TxSearched::unknown; + TxSearched searchedAll = TxSearched::Unknown; }; struct TxArgs @@ -77,7 +77,7 @@ doTxHelp(RPC::Context& context, TxArgs args) using TxPair = std::pair, std::shared_ptr>; - result.searchedAll = TxSearched::unknown; + result.searchedAll = TxSearched::Unknown; std::variant v; if (args.ctid) @@ -125,7 +125,8 @@ doTxHelp(RPC::Context& context, TxArgs args) return {result, rpcSUCCESS}; } - std::shared_ptr ledger = context.ledgerMaster.getLedgerBySeq(txn->getLedger()); + std::shared_ptr const ledger = + context.ledgerMaster.getLedgerBySeq(txn->getLedger()); if (ledger && !ledger->open()) result.ledgerHash = ledger->header().hash; @@ -148,9 +149,9 @@ doTxHelp(RPC::Context& context, TxArgs args) // compute outgoing CTID if (meta->getAsObject().isFieldPresent(sfTransactionIndex)) { - uint32_t lgrSeq = ledger->header().seq; - uint32_t txnIdx = meta->getAsObject().getFieldU32(sfTransactionIndex); - uint32_t netID = context.app.getNetworkIDService().getNetworkID(); + uint32_t const lgrSeq = ledger->header().seq; + uint32_t const txnIdx = meta->getAsObject().getFieldU32(sfTransactionIndex); + uint32_t const netID = context.app.getNetworkIDService().getNetworkID(); if (txnIdx <= 0xFFFFU && netID < 0xFFFFU && lgrSeq < 0x0FFF'FFFFUL) result.ctid = RPC::encodeCTID(lgrSeq, txnIdx, netID); @@ -172,10 +173,10 @@ populateJsonResponse( // handle errors if (error.toErrorCode() != rpcSUCCESS) { - if (error.toErrorCode() == rpcTXN_NOT_FOUND && result.searchedAll != TxSearched::unknown) + if (error.toErrorCode() == rpcTXN_NOT_FOUND && result.searchedAll != TxSearched::Unknown) { response = Json::Value(Json::objectValue); - response[jss::searched_all] = (result.searchedAll == TxSearched::all); + response[jss::searched_all] = (result.searchedAll == TxSearched::All); error.inject(response); } else @@ -310,7 +311,7 @@ doTxJson(RPC::JsonContext& context) } } - std::pair res = doTxHelp(context, args); + std::pair const res = doTxHelp(context, args); return populateJsonResponse(res, args, context); } diff --git a/src/xrpld/rpc/handlers/TxHistory.cpp b/src/xrpld/rpc/handlers/TxHistory.cpp index 02ff6fb43c..3467b1c990 100644 --- a/src/xrpld/rpc/handlers/TxHistory.cpp +++ b/src/xrpld/rpc/handlers/TxHistory.cpp @@ -27,7 +27,7 @@ doTxHistory(RPC::JsonContext& context) if (!context.params.isMember(jss::start)) return rpcError(rpcINVALID_PARAMS); - unsigned int startIndex = context.params[jss::start].asUInt(); + unsigned int const startIndex = context.params[jss::start].asUInt(); if ((startIndex > 10000) && (!isUnlimited(context.role))) return rpcError(rpcNO_PERMISSION); diff --git a/src/xrpld/rpc/handlers/TxReduceRelay.cpp b/src/xrpld/rpc/handlers/TxReduceRelay.cpp index d269ef448e..f24f0862ef 100644 --- a/src/xrpld/rpc/handlers/TxReduceRelay.cpp +++ b/src/xrpld/rpc/handlers/TxReduceRelay.cpp @@ -9,7 +9,7 @@ namespace xrpl { Json::Value doTxReduceRelay(RPC::JsonContext& context) { - return context.app.overlay().txMetrics(); + return context.app.getOverlay().txMetrics(); } } // namespace xrpl diff --git a/src/xrpld/rpc/handlers/UnlList.cpp b/src/xrpld/rpc/handlers/UnlList.cpp index 20fb692fbb..31f41b4a33 100644 --- a/src/xrpld/rpc/handlers/UnlList.cpp +++ b/src/xrpld/rpc/handlers/UnlList.cpp @@ -12,7 +12,7 @@ doUnlList(RPC::JsonContext& context) { Json::Value obj(Json::objectValue); - context.app.validators().for_each_listed( + context.app.getValidators().for_each_listed( [&unl = obj[jss::unl]](PublicKey const& publicKey, bool trusted) { Json::Value node(Json::objectValue); diff --git a/src/xrpld/rpc/handlers/Unsubscribe.cpp b/src/xrpld/rpc/handlers/Unsubscribe.cpp index 824d57203c..d3e36cc612 100644 --- a/src/xrpld/rpc/handlers/Unsubscribe.cpp +++ b/src/xrpld/rpc/handlers/Unsubscribe.cpp @@ -28,7 +28,7 @@ doUnsubscribe(RPC::JsonContext& context) if (context.role != Role::ADMIN) return rpcError(rpcNO_PERMISSION); - std::string strUrl = context.params[jss::url].asString(); + std::string const strUrl = context.params[jss::url].asString(); ispSub = context.netOps.findRpcSub(strUrl); if (!ispSub) return jvResult; @@ -49,7 +49,7 @@ doUnsubscribe(RPC::JsonContext& context) if (!it.isString()) return rpcError(rpcSTREAM_MALFORMED); - std::string streamName = it.asString(); + std::string const streamName = it.asString(); if (streamName == "server") { context.netOps.unsubServer(ispSub->getSeq()); diff --git a/src/xrpld/rpc/handlers/ValidatorInfo.cpp b/src/xrpld/rpc/handlers/ValidatorInfo.cpp index 4b6663b68a..aec9dba4b4 100644 --- a/src/xrpld/rpc/handlers/ValidatorInfo.cpp +++ b/src/xrpld/rpc/handlers/ValidatorInfo.cpp @@ -21,7 +21,7 @@ doValidatorInfo(RPC::JsonContext& context) Json::Value ret; // assume validationPK is ephemeral key, get master key - auto const mk = context.app.validatorManifests().getMasterKey(*validationPK); + auto const mk = context.app.getValidatorManifests().getMasterKey(*validationPK); ret[jss::master_key] = toBase58(TokenType::NodePublic, mk); // validationPK is master key, this implies that there is no ephemeral @@ -31,13 +31,13 @@ doValidatorInfo(RPC::JsonContext& context) ret[jss::ephemeral_key] = toBase58(TokenType::NodePublic, *validationPK); - if (auto const manifest = context.app.validatorManifests().getManifest(mk)) + if (auto const manifest = context.app.getValidatorManifests().getManifest(mk)) ret[jss::manifest] = base64_encode(*manifest); - if (auto const seq = context.app.validatorManifests().getSequence(mk)) + if (auto const seq = context.app.getValidatorManifests().getSequence(mk)) ret[jss::seq] = *seq; - if (auto const domain = context.app.validatorManifests().getDomain(mk)) + if (auto const domain = context.app.getValidatorManifests().getDomain(mk)) ret[jss::domain] = *domain; return ret; diff --git a/src/xrpld/rpc/handlers/ValidatorListSites.cpp b/src/xrpld/rpc/handlers/ValidatorListSites.cpp index 7acaa27168..36e2064387 100644 --- a/src/xrpld/rpc/handlers/ValidatorListSites.cpp +++ b/src/xrpld/rpc/handlers/ValidatorListSites.cpp @@ -9,7 +9,7 @@ namespace xrpl { Json::Value doValidatorListSites(RPC::JsonContext& context) { - return context.app.validatorSites().getJson(); + return context.app.getValidatorSites().getJson(); } } // namespace xrpl diff --git a/src/xrpld/rpc/handlers/Validators.cpp b/src/xrpld/rpc/handlers/Validators.cpp index a83a6fe4b0..95e6de9e68 100644 --- a/src/xrpld/rpc/handlers/Validators.cpp +++ b/src/xrpld/rpc/handlers/Validators.cpp @@ -9,7 +9,7 @@ namespace xrpl { Json::Value doValidators(RPC::JsonContext& context) { - return context.app.validators().getJson(); + return context.app.getValidators().getJson(); } } // namespace xrpl diff --git a/src/xrpld/shamap/NodeFamily.cpp b/src/xrpld/shamap/NodeFamily.cpp index a0821ea202..3460c68608 100644 --- a/src/xrpld/shamap/NodeFamily.cpp +++ b/src/xrpld/shamap/NodeFamily.cpp @@ -9,12 +9,12 @@ namespace xrpl { NodeFamily::NodeFamily(Application& app, CollectorManager& cm) : app_(app) , db_(app.getNodeStore()) - , j_(app.journal("NodeFamily")) + , j_(app.getJournal("NodeFamily")) , fbCache_( std::make_shared( "Node family full below cache", stopwatch(), - app.journal("NodeFamilyFulLBelowCache"), + app.getJournal("NodeFamilyFulLBelowCache"), cm.collector(), fullBelowTargetSize, fullBelowExpiration)) @@ -39,7 +39,7 @@ void NodeFamily::reset() { { - std::lock_guard lock(maxSeqMutex_); + std::lock_guard const lock(maxSeqMutex_); maxSeq_ = 0; }