diff --git a/.github/workflows/copy-artifacts.yaml b/.github/workflows/copy-artifacts.yaml new file mode 100644 index 000000000..df71a12c0 --- /dev/null +++ b/.github/workflows/copy-artifacts.yaml @@ -0,0 +1,37 @@ +name: copy-artifacts +on: [push] +jobs: + copy-artifacts: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: nixbuild/nix-quick-install-action@v30 + with: + nix_conf: | + keep-env-derivations = true + keep-outputs = true + - name: Restore and save Nix store + uses: nix-community/cache-nix-action@v6 + with: + primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} + restore-prefixes-first-match: nix-${{ runner.os }}- + gc-max-store-size-linux: 1G + - name: Install soldeer dependencies + if: hashFiles('soldeer.lock') != '' + run: nix develop github:rainlanguage/rainix#sol-shell -c forge soldeer install + - name: Regenerate meta files + run: nix run .#rainlang-prelude + - name: Regenerate pointer artifacts + run: nix develop github:rainlanguage/rainix#sol-shell -c forge script ./script/BuildPointers.sol + - name: Build Solidity + run: nix develop github:rainlanguage/rainix#sol-shell -c forge build + - name: Copy forge artifacts into committed location + run: nix develop github:rainlanguage/rainix#sol-shell -c forge script ./script/CopyArtifacts.sol --ffi + - name: Format (so generated artifacts match committed style) + run: nix develop github:rainlanguage/rainix#sol-shell -c forge fmt + - name: Assert committed artifacts match freshly built + run: | + if ! git diff --exit-code; then + echo "::error::Committed meta/pointer/abi artifacts are stale. Run rainlang-prelude, BuildPointers.sol, CopyArtifacts.sol, forge fmt, and commit." + exit 1 + fi diff --git a/.github/workflows/git-clean.yaml b/.github/workflows/git-clean.yaml deleted file mode 100644 index 7cd3a1d86..000000000 --- a/.github/workflows/git-clean.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: Git is clean -on: [push] -concurrency: - group: ${{ github.ref }}-git-clean - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} -jobs: - git-clean: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - uses: nixbuild/nix-quick-install-action@v30 - with: - nix_conf: | - keep-env-derivations = true - keep-outputs = true - - name: Restore and save Nix store - uses: nix-community/cache-nix-action@v6 - with: - # restore and save a cache using this key - primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} - # if there's no cache hit, restore a cache by this prefix - restore-prefixes-first-match: nix-${{ runner.os }}- - # collect garbage until the Nix store size (in bytes) is at most this number - # before trying to save a new cache - # 1G = 1073741824 - gc-max-store-size-linux: 1G - # Build metas etc. required to do a correct pointer build. - - run: nix develop -c rainlang-prelude - - run: nix develop -c forge script ./script/BuildPointers.sol - # Format the repo after generating pointers so that the pointer files are - # formatted too. - - run: nix develop -c forge fmt - # Check if the repo is clean after generating pointers and formatting. - - run: git diff --exit-code diff --git a/.github/workflows/manual-sol-artifacts.yaml b/.github/workflows/manual-sol-artifacts.yaml index 5e2949f4b..c96b3065b 100644 --- a/.github/workflows/manual-sol-artifacts.yaml +++ b/.github/workflows/manual-sol-artifacts.yaml @@ -14,43 +14,7 @@ on: - rainlang jobs: deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - uses: nixbuild/nix-quick-install-action@v30 - with: - nix_conf: | - keep-env-derivations = true - keep-outputs = true - - name: Restore and save Nix store - uses: nix-community/cache-nix-action@v6 - with: - # restore and save a cache using this key - primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} - # if there's no cache hit, restore a cache by this prefix - restore-prefixes-first-match: nix-${{ runner.os }}- - # collect garbage until the Nix store size (in bytes) is at most this number - # before trying to save a new cache - # 1G = 1073741824 - gc-max-store-size-linux: 1G - - run: nix develop --command rainix-sol-prelude - - run: nix develop --command rainix-rs-prelude - - run: nix develop --command rainlang-prelude - - run: nix develop -c forge selectors up --all - - run: nix develop -c forge script script/Deploy.sol:Deploy -vvvvv --slow --broadcast --verify - env: - DEPLOYMENT_KEY: ${{ secrets.PRIVATE_KEY }} - DEPLOYMENT_SUITE: ${{ inputs.suite }} - CI_DEPLOY_ARBITRUM_RPC_URL: ${{ secrets.CI_DEPLOY_ARBITRUM_RPC_URL || vars.CI_DEPLOY_ARBITRUM_RPC_URL || '' }} - CI_DEPLOY_BASE_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_RPC_URL || vars.CI_DEPLOY_BASE_RPC_URL || '' }} - CI_DEPLOY_BASE_SEPOLIA_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || vars.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || '' }} - CI_DEPLOY_FLARE_RPC_URL: ${{ secrets.CI_DEPLOY_FLARE_RPC_URL || vars.CI_DEPLOY_FLARE_RPC_URL || '' }} - CI_DEPLOY_POLYGON_RPC_URL: ${{ secrets.CI_DEPLOY_POLYGON_RPC_URL || vars.CI_DEPLOY_POLYGON_RPC_URL || '' }} - CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY: ${{ secrets.CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY || vars.CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY || '' }} - CI_DEPLOY_BASE_ETHERSCAN_API_KEY: ${{ secrets.CI_DEPLOY_BASE_ETHERSCAN_API_KEY || vars.CI_DEPLOY_BASE_ETHERSCAN_API_KEY || '' }} - CI_DEPLOY_BASE_SEPOLIA_ETHERSCAN_API_KEY: ${{ secrets.CI_DEPLOY_BASE_SEPOLIA_ETHERSCAN_API_KEY || vars.CI_DEPLOY_BASE_SEPOLIA_ETHERSCAN_API_KEY || '' }} - CI_DEPLOY_FLARE_ETHERSCAN_API_KEY: ${{ secrets.CI_DEPLOY_FLARE_ETHERSCAN_API_KEY || vars.CI_DEPLOY_FLARE_ETHERSCAN_API_KEY || '' }} - CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY: ${{ secrets.CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY || vars.CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY || '' }} + uses: rainlanguage/rainix/.github/workflows/rainix-manual-sol-artifacts.yaml@main + with: + suite: ${{ inputs.suite }} + secrets: inherit diff --git a/.github/workflows/publish-soldeer.yaml b/.github/workflows/publish-soldeer.yaml new file mode 100644 index 000000000..066aa4145 --- /dev/null +++ b/.github/workflows/publish-soldeer.yaml @@ -0,0 +1,8 @@ +name: Publish to Soldeer +on: + push: + tags: ["v*"] +jobs: + publish: + uses: rainlanguage/rainix/.github/workflows/publish-soldeer.yaml@main + secrets: inherit diff --git a/.github/workflows/rainix-rs-static.yaml b/.github/workflows/rainix-rs-static.yaml new file mode 100644 index 000000000..196173aa7 --- /dev/null +++ b/.github/workflows/rainix-rs-static.yaml @@ -0,0 +1,5 @@ +name: rs-static +on: [push] +jobs: + rs-static: + uses: rainlanguage/rainix/.github/workflows/rainix-rs-static.yaml@main diff --git a/.github/workflows/rainix-rs-test.yaml b/.github/workflows/rainix-rs-test.yaml new file mode 100644 index 000000000..77a83eaa5 --- /dev/null +++ b/.github/workflows/rainix-rs-test.yaml @@ -0,0 +1,5 @@ +name: rs-test +on: [push] +jobs: + rs-test: + uses: rainlanguage/rainix/.github/workflows/rainix-rs-test.yaml@main diff --git a/.github/workflows/rainix-sol.yaml b/.github/workflows/rainix-sol.yaml new file mode 100644 index 000000000..827ab3067 --- /dev/null +++ b/.github/workflows/rainix-sol.yaml @@ -0,0 +1,6 @@ +name: rainix-sol +on: [push] +jobs: + rainix-sol: + uses: rainlanguage/rainix/.github/workflows/rainix-sol.yaml@main + secrets: inherit diff --git a/.github/workflows/rainix.yaml b/.github/workflows/rainix.yaml deleted file mode 100644 index 15f3ca531..000000000 --- a/.github/workflows/rainix.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: Rainix CI -on: [push] -concurrency: - group: ${{ github.ref }}-rainix - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} -jobs: - rainix: - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - task: [rainix-rs-test, rainix-rs-artifacts] - include: - # Solidity doesn't need to be tested on multiple platforms - - os: ubuntu-latest - task: rainix-sol-test - - os: ubuntu-latest - task: rainix-sol-static - # We don't need to do rust static analysis on multiple platforms - - os: ubuntu-latest - task: rainix-rs-static - # We don't need to do build for wasm32 on multiple platforms - - os: ubuntu-latest - task: test-wasm-build - fail-fast: false - runs-on: ${{ matrix.os }} - env: - DEPLOYMENT_KEY: ${{ github.ref == 'refs/heads/main' && secrets.PRIVATE_KEY || secrets.PRIVATE_KEY_DEV }} - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - uses: nixbuild/nix-quick-install-action@v30 - with: - nix_conf: | - keep-env-derivations = true - keep-outputs = true - - name: Restore and save Nix store - uses: nix-community/cache-nix-action@v6 - with: - # restore and save a cache using this key - primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} - # if there's no cache hit, restore a cache by this prefix - restore-prefixes-first-match: nix-${{ runner.os }}- - # collect garbage until the Nix store size (in bytes) is at most this number - # before trying to save a new cache - # 1G = 1073741824 - gc-max-store-size-linux: 1G - - run: nix develop -c rainix-sol-prelude - - run: nix develop -c rainix-rs-prelude - - run: nix develop -c rainlang-prelude - - name: Run ${{ matrix.task }} - env: - ETH_RPC_URL: ${{ secrets.CI_DEPLOY_SEPOLIA_RPC_URL || vars.CI_DEPLOY_SEPOLIA_RPC_URL }} - CI_FORK_ETH_RPC_URL: ${{ secrets.RPC_URL_ETHEREUM_FORK || vars.RPC_URL_ETHEREUM_FORK || '' }} - ETHERSCAN_API_KEY: ${{ secrets.EXPLORER_VERIFICATION_KEY }} - DEPLOY_BROADCAST: "" - DEPLOY_VERIFIER: "" - DEPLOY_METABOARD_ADDRESS: ${{ vars.CI_DEPLOY_SEPOLIA_METABOARD_ADDRESS }} - CI_DEPLOY_ARBITRUM_RPC_URL: ${{ secrets.CI_DEPLOY_ARBITRUM_RPC_URL || vars.CI_DEPLOY_ARBITRUM_RPC_URL || '' }} - CI_DEPLOY_BASE_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_RPC_URL || vars.CI_DEPLOY_BASE_RPC_URL || '' }} - CI_DEPLOY_BASE_SEPOLIA_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || vars.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || '' }} - CI_DEPLOY_FLARE_RPC_URL: ${{ secrets.CI_DEPLOY_FLARE_RPC_URL || vars.CI_DEPLOY_FLARE_RPC_URL || '' }} - CI_DEPLOY_POLYGON_RPC_URL: ${{ secrets.CI_DEPLOY_POLYGON_RPC_URL || vars.CI_DEPLOY_POLYGON_RPC_URL || '' }} - run: nix develop -c ${{ matrix.task }} diff --git a/.gitignore b/.gitignore index 77ab6113e..7cff38915 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,8 @@ out cache result .env -meta target +dependencies docs .DS_Store .direnv diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 567443c14..000000000 --- a/.gitmodules +++ /dev/null @@ -1,24 +0,0 @@ -[submodule "lib/rain.metadata"] - path = lib/rain.metadata - url = https://github.com/rainprotocol/rain.metadata -[submodule "lib/rain.lib.memkv"] - path = lib/rain.lib.memkv - url = https://github.com/rainprotocol/rain.lib.memkv -[submodule "lib/sol.lib.binmaskflag"] - path = lib/sol.lib.binmaskflag - url = https://github.com/rainprotocol/sol.lib.binmaskflag -[submodule "lib/rain.interpreter.interface"] - path = lib/rain.interpreter.interface - url = https://github.com/rainlanguage/rain.interpreter.interface -[submodule "lib/rain.string"] - path = lib/rain.string - url = https://github.com/rainlanguage/rain.string -[submodule "lib/rain.deploy"] - path = lib/rain.deploy - url = https://github.com/rainlanguage/rain.deploy -[submodule "lib/rain.tofu.erc20-decimals"] - path = lib/rain.tofu.erc20-decimals - url = https://github.com/rainlanguage/rain.tofu.erc20-decimals -[submodule "lib/rain.extrospection"] - path = lib/rain.extrospection - url = https://github.com/rainlanguage/rain.extrospection diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..b4a7e793f --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +crates/abi/ diff --git a/.soldeerignore b/.soldeerignore new file mode 100644 index 000000000..13ebe23f6 --- /dev/null +++ b/.soldeerignore @@ -0,0 +1,27 @@ +.DS_Store +.coderabbit.yaml +.envrc +.gas-snapshot +.git +.github +.gitignore +.gitmodules +.pre-commit-config.yaml +.soldeerignore +.vscode +CLAUDE.md +/audit +/cache +/dependencies +/flake.lock +/flake.nix +/foundry.lock +/foundry.toml +/lib +/out +/remappings.txt +/slither.config.json +/soldeer.lock +/REUSE.toml +/deployments +/meta diff --git a/Cargo.toml b/Cargo.toml index 07ee4761f..d3fb2b4d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = ["crates/*"] +exclude = ["crates/abi"] resolver = "2" [workspace.package] diff --git a/LICENSES/LicenseRef-DCL-1.0.txt b/LICENSES/LicenseRef-DCL-1.0.txt new file mode 100644 index 000000000..dc4e17161 --- /dev/null +++ b/LICENSES/LicenseRef-DCL-1.0.txt @@ -0,0 +1,189 @@ +# DecentraLicense + +*This DecentraLicense (the “License”) applies to any Work whose owner has marked it with any of the following notices:* + +*“Licensed under the DecentraLicense version 1.0,” or* + +*“Licensed under the DecentraLicense version 1.0, with Combined Work Exception”* + +------ + +## 1. Purpose + +This License gives You unlimited permission to use and modify the software to which it applies (the “Work”), either as-is or in modified form, for Your private purposes, while protecting the owners and contributors to the software from liability. + +This License also strives to protect the freedom and autonomy of third parties who receive the Work from you. If any non-affiliated third party receives any part, aspect, or element of the Work from You, this License requires that You provide that third party all the permissions and materials needed to independently use and modify the Work without that third party having a loss of data or capability due to your actions. + +The full permissions, conditions, and other terms are laid out below. + +## 2. Receiving a License + +In order to receive this License, You must agree to its rules. The rules of this License are both obligations of Your agreement with the Licensor and conditions to your License. You must not do anything with the Work that triggers a rule You cannot or will not follow. + +### 2.1. Application + +The terms of this License apply to the Work as you receive it from Licensor, as well as to any modifications, elaborations, or implementations created by You that contain any licenseable portion of the Work (a “Modified Work”). Unless specified, any reference to the Work also applies to a Modified Work. + +### 2.2. Offer and Acceptance + +This License is automatically offered to every person and organization. You show that you accept this License and agree to its conditions by taking any action with the Work that, absent this License, would infringe any intellectual property right held by Licensor. + +### 2.3. Compliance and Remedies + +Any failure to act according to the terms and conditions of this License places Your use of the Work outside the scope of the License and infringes the rights of the Licensor. In the event of breach, the terms and conditions of this License may be enforced by Licensor under the laws of any jurisdiction to which You are subject. You also agree that either the Licensor or a Recipient (as an intended third-party beneficiary) may enforce the terms and conditions of this License against You via specific performance. + +To the fullest extent available under the law of any jurisdiction to which You are subject, You also agree that a Recipient (as an intended third-party beneficiary) receives a benefit in the form of the ability to maintain exclusive control of private keys under the terms and conditions of this License. + +## 3. Permissions and Conditions + +### 3.1. Permissions Granted + +Conditioned on compliance with section 4, and subject to the limitations of section 3.2, Licensor grants You the world-wide, royalty-free, non-exclusive permission to: + +> a) Take any action with the Work that would infringe the non-patent intellectual property laws of any jurisdiction to which You are subject; and +> +> b) Take any action with the Work that would infringe any patent claims that Licensor can license or becomes able to license, to the extent that those claims are embodied in the Work as distributed by Licensor. + +### 3.2. Limitations on Permissions Granted + +The following limitations apply to the permissions granted in section 3.1: + +> a) Licensor does not grant any patent license for claims that are only infringed due to modification of the Work as provided by Licensor, or the combination of the Work as provided by Licensor, directly or indirectly, with any other component, including other software or hardware. +> +> b) Licensor does not grant any license to the trademarks, service marks, or logos of Licensor, except to the extent necessary to comply with the attribution conditions in section 4.1 of this License. + +## 4. Conditions + +If You exercise any permission granted by this License, such that the Work, or any part, aspect, or element of the Work, is distributed, communicated, made available, or made perceptible to a non-Affiliate third party (a “Recipient”), either via physical delivery or via a network connection to the Recipient, You must comply with the following conditions: + +### 4.1. Provide Access to Source Code + +Subject to the exception in section 4.4, You must provide to each Recipient a copy of, or no-charge unrestricted network access to, the Source Code corresponding to the Work. + +The “Source Code” of the Work means the form of the Work preferred for making modifications, including any comments, configuration information, documentation, help materials, installation instructions, cryptographic seeds or keys, and any information reasonably necessary for the Recipient to independently compile and use the Source Code and to have full access to the functionality contained in the Work. + +#### 4.1.1. Providing Network Access to the Source Code + +Network access to the Notices and Source Code may be provided by You or by a third party, such as a public software repository, and must persist during the same period in which You exercise any of the permissions granted to You under this License and for at least one year thereafter. + +#### 4.1.2. Source Code for a Modified Work + +Subject to the exception in section 4.5, You must provide to each Recipient of a Modified Work Access to Source Code corresponding to those portions of the Work remaining in the Modified Work as well as the modifications used by You to create the Modified Work. The Source Code corresponding to the modifications in the Modified Work must be provided to the Recipient either a) under this License, or b) under a Compatible Open Source License. + +A “Compatible Open Source License” means a license accepted by the Open Source Initiative that allows object code created using both Source Code provided under this License and Source Code provided under the other open source license to be distributed together as a single work. + +#### 4.1.3. Coordinated Disclosure of Security Vulnerabilities + +You may delay providing the Source Code corresponding to a particular modification of the Work for up to ninety (90) days (the “Embargo Period”) if: a) the modification is intended to address a newly-identified vulnerability or a security flaw in the Work, b) disclosure of the vulnerability or security flaw before the end of the Embargo Period would put the data, identity, or autonomy of one or more Recipients of the Work at significant risk, c) You are participating in a coordinated disclosure of the vulnerability or security flaw with one or more additional Licensees, and d) Access to the Source Code pertaining to the modification is provided to all Recipients at the end of the Embargo Period. + +### 4.2. Maintain User Autonomy + +In addition to providing each Recipient the opportunity to have Access to the Source Code, You cannot use the permissions given under this License to interfere with a Recipient’s ability to fully use an independent copy of the Work generated from the Source Code You provide with the Recipient’s own User Data. + +“User Data” means any data that is an input to or an output from the Work, where the presence of the data is necessary for substantially identical use of the Work in an equivalent context chosen by the Recipient, and where the Recipient has an existing ownership interest, an existing right to possess, or where the data has been generated by, for, or has been assigned to the Recipient. + +#### 4.2.1. No Withholding User Data + +Throughout any period in which You exercise any of the permissions granted to You under this License, You must also provide to any Recipient to whom you provide services via the Work, a no-charge copy, provided in a commonly used electronic form, of the Recipient’s User Data in your possession, to the extent that such User Data is available to You for use in conjunction with the Work. + +#### 4.2.2. No Technical Measures that Limit Access + +You may not, by the use of cryptographic methods applied to anything provided to the Recipient, by possession or control of cryptographic keys, seeds, or hashes, by other technological protection measures, or by any other method, limit a Recipient's ability to access any functionality present in the Recipient's independent copy of the Work, or deny a Recipient full control of the Recipient's User Data. + +#### 4.2.3. No Legal or Contractual Measures that Limit Access + +You may not contractually restrict a Recipient's ability to independently exercise the permissions granted under this License. You waive any legal power to forbid circumvention of technical protection measures that include use of the Work, and You waive any claim that the capabilities of the Work were limited or modified as a means of enforcing the legal rights of third parties against Recipients. + +### 4.3. Decentralized Code and Decentralized Systems + +You must only run Decentralized Code if: + +> a) it is run by a Decentralized System; and +> +> b) all the data referenced by Decentralized Code is stored on a Decentralized System. + +“Decentralized Code” is a Source Code file marked by the Licensor as “Decentralized Code”. + +“Decentralized System” is a system operating solely in accordance with publicly available Rules where any person or organisation: + +> a) only participates in the system by freely opting in; +> +> b) can interpret system data by reference to the Rules; and +> +> c) can obtain a copy of the system data, provided in a commonly used electronic form, accessible in accordance with the Rules. + +“Rule” is any unambiguous and human comprehensible: + +> a) rule that results in a deterministic outcome when implemented, in a commonly used electronic form; or +> +> b) configuration information, documentation, help materials, and any information reasonably necessary for a Recipient skilled in the art to independently comprehend the rule. + +### 4.4. Maintain Private Key Exclusive Control + +You cannot use the permissions given under this License to provide a Recipient with functionality using the Work that: + +> a) would cause the loss of exclusive control of a private key by a private key holder with exclusive control of a private key; or +> +> b) deals with private keys except by using a Decentralized System. + +### 4.5. Provide Notices and Attribution + +You must retain all licensing, authorship, or attribution notices contained in the Source Code (the “Notices”), and provide all such Notices to each Recipient, together with a statement acknowledging the use of the Work. Notices may be provided directly to a Recipient or via an easy-to-find hyperlink to an Internet location also providing Access to Source Code. + +### 4.6. Scope of Conditions in this License + +You are required to uphold the conditions of this License only relative to those who are Recipients of the Work from You. Other than providing Recipients with the applicable Notices, Access to Source Code, and a copy of and full control of their User Data, nothing in this License requires You to provide processing services to or engage in network interactions with anyone. + +### 4.7. Combined Work Exception + +As an exception to condition that You provide Recipients Access to Source Code, any Source Code files not marked by the Licensor as “Decentralized Code” and as having the “Combined Work Exception,” or any object code exclusively resulting from Source Code files so marked, may be combined with other Software into a “Larger Work.” So long as you: a) comply with the requirements to provide Recipients the applicable Notices and Access to the Source Code provided to You by Licensor, b) you provide Recipients access to their User Data and do not limit Recipient’s ability to independently work with their User Data, c) you comply with the requirements in relation to Decentralized Code and Decentralized Systems, and d) Recipients are able to maintain exclusive control of private cryptographic keys, any other Software in the Larger Work as well as the Larger Work as a whole may be licensed under the terms of your choice. + +## 5. Term and Termination + +The term of this License begins when You receive the Work, and continues until terminated for any of the reasons described herein, or until all Licensor’s intellectual property rights in the Software expire, whichever comes first (“Term”). This License cannot be revoked, only terminated for the reasons listed below. + +### 5.1. Effect of Termination + +If this License is terminated for any reason, all permissions granted to You under Section 3 by any Licensor automatically terminate. You will immediately cease exercising any permissions granted in this License relative to the Work, including as part of any Modified Work. + +### 5.2. Termination for Non-Compliance; Reinstatement + +This License terminates automatically if You fail to comply with any of the conditions in section 4. As a special exception to termination for non-compliance, Your permissions for the Work under this License will automatically be reinstated if You come into compliance with all the conditions in section 2 within sixty (60) days of being notified by Licensor or an intended third party beneficiary of Your noncompliance. You are eligible for reinstatement of permissions for the Work one time only, and only for the sixty days immediately after becoming aware of noncompliance. Loss of permissions granted for the Work under this License due to either a) sustained noncompliance lasting more than sixty days or b) subsequent termination for noncompliance after reinstatement, is permanent, unless rights are specifically restored by Licensor in writing. + +### 5.3 Termination Due to Litigation + +If You initiate litigation against Licensor, or any Recipient of the Work, either direct or indirect, asserting that the Work directly or indirectly infringes any patent, then all permissions granted to You by this License shall terminate. In the event of termination due to litigation, all permissions validly granted by You under this License, directly or indirectly, shall survive termination. Administrative review procedures, declaratory judgment actions, counterclaims in response to patent litigation, and enforcement actions against former Licensees terminated under this section do not cause termination due to litigation. + +## 6. Disclaimer of Warranty and Limit on Liability + +As far as the law allows, the Work comes AS-IS, without any warranty of any kind, and no Licensor or contributor will be liable to anyone for any damages related to this software or this license, under any kind of legal claim, or for any type of damages, including indirect, special, incidental, or consequential damages of any type arising as a result of this License or the use of the Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss of profits, revenue, or any and all other commercial damages or losses. + +## 7. Other Provisions + +### 7.1. Affiliates + +An “Affiliate” means any other entity that, directly or indirectly through one or more intermediaries, controls, is controlled by, or is under common control with, the Licensee. Employees of a Licensee and natural persons acting as contractors exclusively providing services to Licensee are also Affiliates. + +### 7.2. Choice of Jurisdiction and Governing Law + +A Licensor may require that any action or suit by a Licensee relating to a Work provided by Licensor under this License may be brought only in the courts of a particular jurisdiction and under the laws of a particular jurisdiction (excluding its conflict-of-law provisions), if Licensor provides conspicuous notice of the particular jurisdiction to all Licensees. + +### 7.3. No Sublicensing + +This License is not sublicensable. Each time You provide the Work or a Modified Work to a Recipient, the Recipient automatically receives a license under the terms described in this License. You may not impose any further reservations, conditions, or other provisions on any Recipients’ exercise of the permissions granted herein. + +### 7.4. Attorneys' Fees + +In any action to enforce the terms of this License, or seeking damages relating thereto, including by an intended third party beneficiary, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. A “prevailing party” is the party that achieves, or avoids, compliance with this License, including through settlement. This section shall survive the termination of this License. + +### 7.5. No Waiver + +Any failure by Licensor to enforce any provision of this License will not constitute a present or future waiver of such provision nor limit Licensor’s ability to enforce such provision at a later time. + +### 7.6. Severability + +If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any invalid or unenforceable portion will be interpreted to the effect and intent of the original portion. If such a construction is not possible, the invalid or unenforceable portion will be severed from this License but the rest of this License will remain in full force and effect. + +### 7.7. License for the Text of this License + +The text of this license is released under the Creative Commons Attribution-ShareAlike 4.0 International License, with the caveat that any modifications of this license may not use the name “DecentraLicense” or any name confusingly similar thereto to describe any derived work of this License. diff --git a/REUSE.toml b/REUSE.toml new file mode 100644 index 000000000..79274eef6 --- /dev/null +++ b/REUSE.toml @@ -0,0 +1,33 @@ +version = 1 + +[[annotations]] +path = [ + ".cargo/**/", + ".coderabbit.yaml", + ".devcontainer.json", + ".envrc", + ".gas-snapshot", + ".github/workflows/**/", + ".gitignore", + ".prettierignore", + ".soldeerignore", + ".vscode/**/", + "audit/**/", + "Cargo.lock", + "Cargo.toml", + "CLAUDE.md", + "crates/**/", + "flake.lock", + "flake.nix", + "foundry.toml", + "meta/**/", + "README.md", + "remappings.txt", + "REUSE.toml", + "slither.config.json", + "soldeer.lock", + "src/generated/**/", + "TESTING.md", +] +SPDX-FileCopyrightText = "Copyright (c) 2020 Rain Open Source Software Ltd" +SPDX-License-Identifier = "LicenseRef-DCL-1.0" diff --git a/crates/abi/IExpressionDeployerV3.json b/crates/abi/IExpressionDeployerV3.json new file mode 100644 index 000000000..a7a2d0a83 --- /dev/null +++ b/crates/abi/IExpressionDeployerV3.json @@ -0,0 +1,148 @@ +{ + "abi": [ + { + "type": "function", + "name": "deployExpression2", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "constants", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "interpreter", + "type": "address", + "internalType": "contract IInterpreterV2" + }, + { + "name": "store", + "type": "address", + "internalType": "contract IInterpreterStoreV2" + }, + { + "name": "expression", + "type": "address", + "internalType": "address" + }, + { + "name": "io", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "DISPair", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "interpreter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "store", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "parser", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "meta", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DeployedExpression", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "interpreter", + "type": "address", + "indexed": false, + "internalType": "contract IInterpreterV2" + }, + { + "name": "store", + "type": "address", + "indexed": false, + "internalType": "contract IInterpreterStoreV2" + }, + { + "name": "expression", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "io", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewExpression", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "bytecode", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "constants", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x" + }, + "deployedBytecode": { + "object": "0x" + } +} \ No newline at end of file diff --git a/crates/abi/IInterpreterStoreV3.json b/crates/abi/IInterpreterStoreV3.json new file mode 100644 index 000000000..f671f8a88 --- /dev/null +++ b/crates/abi/IInterpreterStoreV3.json @@ -0,0 +1,77 @@ +{ + "abi": [ + { + "type": "function", + "name": "get", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "key", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "set", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "internalType": "StateNamespace" + }, + { + "name": "kvs", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Set", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "indexed": false, + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "key", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "value", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x" + }, + "deployedBytecode": { + "object": "0x" + } +} \ No newline at end of file diff --git a/crates/abi/IInterpreterV4.json b/crates/abi/IInterpreterV4.json new file mode 100644 index 000000000..a1332cd12 --- /dev/null +++ b/crates/abi/IInterpreterV4.json @@ -0,0 +1,71 @@ +{ + "abi": [ + { + "type": "function", + "name": "eval4", + "inputs": [ + { + "name": "eval", + "type": "tuple", + "internalType": "struct EvalV4", + "components": [ + { + "name": "store", + "type": "address", + "internalType": "contract IInterpreterStoreV3" + }, + { + "name": "namespace", + "type": "uint256", + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "sourceIndex", + "type": "uint256", + "internalType": "SourceIndexV2" + }, + { + "name": "context", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + }, + { + "name": "inputs", + "type": "bytes32[]", + "internalType": "StackItem[]" + }, + { + "name": "stateOverlay", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ] + } + ], + "outputs": [ + { + "name": "stack", + "type": "bytes32[]", + "internalType": "StackItem[]" + }, + { + "name": "writes", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x" + }, + "deployedBytecode": { + "object": "0x" + } +} \ No newline at end of file diff --git a/crates/abi/IParserPragmaV1.json b/crates/abi/IParserPragmaV1.json new file mode 100644 index 000000000..11a3fb1c5 --- /dev/null +++ b/crates/abi/IParserPragmaV1.json @@ -0,0 +1,36 @@ +{ + "abi": [ + { + "type": "function", + "name": "parsePragma1", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct PragmaV1", + "components": [ + { + "name": "usingWordsFrom", + "type": "address[]", + "internalType": "address[]" + } + ] + } + ], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x" + }, + "deployedBytecode": { + "object": "0x" + } +} \ No newline at end of file diff --git a/crates/abi/IParserV2.json b/crates/abi/IParserV2.json new file mode 100644 index 000000000..838ce3156 --- /dev/null +++ b/crates/abi/IParserV2.json @@ -0,0 +1,29 @@ +{ + "abi": [ + { + "type": "function", + "name": "parse2", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x" + }, + "deployedBytecode": { + "object": "0x" + } +} \ No newline at end of file diff --git a/crates/abi/Rainlang.json b/crates/abi/Rainlang.json new file mode 100644 index 000000000..b5ee7ad5d --- /dev/null +++ b/crates/abi/Rainlang.json @@ -0,0 +1,81 @@ +{ + "abi": [ + { + "type": "function", + "name": "expressionDeployerAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "interpreterAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "parserAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "storeAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b73b3a710b89a5569893da4ca0db7d178593b5be8a06100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b73b3a710b89a5569893da4ca0db7d178593b5be8a06100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" + } +} \ No newline at end of file diff --git a/crates/abi/RainlangExpressionDeployer.json b/crates/abi/RainlangExpressionDeployer.json new file mode 100644 index 000000000..895223ac3 --- /dev/null +++ b/crates/abi/RainlangExpressionDeployer.json @@ -0,0 +1,489 @@ +{ + "abi": [ + { + "type": "function", + "name": "buildIntegrityFunctionPointers", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "describedByMetaV1", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "parse2", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "parsePragma1", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct PragmaV1", + "components": [ + { + "name": "usingWordsFrom", + "type": "address[]", + "internalType": "address[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "BadDynamicLength", + "inputs": [ + { + "name": "dynamicLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "standardOpsLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BadOpInputsLength", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "calculatedInputs", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecodeInputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BadOpOutputsLength", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "calculatedOutputs", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecodeOutputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "CallInputsMismatchSource", + "inputs": [ + { + "name": "operandInputs", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "sourceInputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "CallOutputsExceedSource", + "inputs": [ + { + "name": "sourceOutputs", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "outputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExternIntegrityInputsMismatch", + "inputs": [ + { + "name": "expected", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "actual", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExternIntegrityOutputsMismatch", + "inputs": [ + { + "name": "expected", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "actual", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NotAnExternContract", + "inputs": [ + { + "name": "extern", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OpcodeOutOfRange", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "opcodeIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fsCount", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OutOfBoundsConstantRead", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "constantsLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "constantRead", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OutOfBoundsStackRead", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "stackTopIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "stackRead", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SourceIndexOutOfBounds", + "inputs": [ + { + "name": "sourceIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "StackAllocationMismatch", + "inputs": [ + { + "name": "stackMaxIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecodeAllocation", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StackOutputsMismatch", + "inputs": [ + { + "name": "stackIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecodeOutputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StackSizingsNotMonotonic", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "relativeOffset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StackUnderflow", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "stackIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "calculatedInputs", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StackUnderflowHighwater", + "inputs": [ + { + "name": "opIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "stackIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "stackHighwater", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "TruncatedBitwiseEncoding", + "inputs": [ + { + "name": "startBit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "TruncatedHeader", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "TruncatedHeaderOffsets", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "TruncatedSource", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "UnexpectedSources", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "UnexpectedTrailingOffsetBytes", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "UnsupportedBitwiseShiftAmount", + "inputs": [ + { + "name": "shiftAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ZeroLengthBitwiseEncoding", + "inputs": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b50611ca88061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401" + } +} \ No newline at end of file diff --git a/crates/abi/RainlangInterpreter.json b/crates/abi/RainlangInterpreter.json new file mode 100644 index 000000000..fd6243e2f --- /dev/null +++ b/crates/abi/RainlangInterpreter.json @@ -0,0 +1,407 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "buildOpcodeFunctionPointers", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eval4", + "inputs": [ + { + "name": "eval", + "type": "tuple", + "internalType": "struct EvalV4", + "components": [ + { + "name": "store", + "type": "address", + "internalType": "contract IInterpreterStoreV3" + }, + { + "name": "namespace", + "type": "uint256", + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "sourceIndex", + "type": "uint256", + "internalType": "SourceIndexV2" + }, + { + "name": "context", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + }, + { + "name": "inputs", + "type": "bytes32[]", + "internalType": "StackItem[]" + }, + { + "name": "stateOverlay", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32[]", + "internalType": "StackItem[]" + }, + { + "name": "", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "BadDynamicLength", + "inputs": [ + { + "name": "dynamicLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "standardOpsLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BadOutputsLength", + "inputs": [ + { + "name": "expectedLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "actualLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "CoefficientOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "DivisionByZero", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "ExponentOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "ExponentUnderflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "InputsLengthMismatch", + "inputs": [ + { + "name": "expected", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "actual", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "Log10Negative", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "Log10Zero", + "inputs": [] + }, + { + "type": "error", + "name": "LossyConversionToFloat", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "MaximizeOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "MemoryKVOverflow", + "inputs": [ + { + "name": "pointer", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "MulDivOverflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NotAnAddress", + "inputs": [ + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OddSetLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "PowNegativeBase", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "SourceIndexOutOfBounds", + "inputs": [ + { + "name": "sourceIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "TOFUTokenDecimalsNotDeployed", + "inputs": [ + { + "name": "expectedAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "WithTargetExponentOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + }, + { + "name": "targetExponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "ZeroFunctionPointers", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroNegativePower", + "inputs": [ + { + "name": "b", + "type": "bytes32", + "internalType": "Float" + } + ] + } + ], + "bytecode": { + "object": "0x608060405234801561000f575f80fd5b5061001861003d565b515f0361003857604051632413c92160e01b815260040160405180910390fd5b61005d565b60606040518060c0016040528060908152602001615d7760909139905090565b615d0d8061006a5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a0565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b604051610062919061552b565b61009361008e36600461553d565b610194565b6040516100629291906155ae565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b09088615627565b6101bd6080890189615642565b6101c691615745565b6101ce61063c565b6101db60408b018b615808565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615642565b610237929150615896565b156102895761024960c0850185615642565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615642565b905081101561031b576060820151610304906102b760c0880188615642565b848181106102c7576102c76158a9565b90506020020135878060c001906102de9190615642565b6102e9866001615903565b8181106102f8576102f86158a9565b905060200201356107a7565b6060830152610314600282615903565b905061028b565b5061038661032c60a0860186615642565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c7d60909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b36158a9565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158a9565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae09087908790600401615916565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615936565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158a9565b60200260200101518281518110610c1157610c116158a9565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159b7565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159b7565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122191906159b7565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a91906159b7565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159b7565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159b7565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159ce565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f91906159b7565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159ce565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610280919061552b565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d398484848461311d565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d928686868661311d565b9096509450600101611d49565b5050611dab8484613253565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613359565b906133bb565b80515f90610c6d81613400565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134bc565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134bc565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d81613d31565b80515f90610c6d81613dd7565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f5612015612006886130d2565b61200f8a6130d2565b90613e22565b9190613ad7565b90508115158315151461123a5761114e81613e67565b80515f906120498161204381613400565b90613e99565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ede565b805160208201516040909201915f91906120a28282613f10565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f10565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f2c565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f2c565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f37565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f37565b90965094506001016122f2565b80516020909101805190915f916115fd828273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f5614056565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e884848484614082565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244186868686614082565b90965094506001016123f8565b805160208201516040909201805190925f929161152c6124888273c51a14251b0dcf0ae24a96b7153991378938f5f5612015866001613359565b8490613e22565b805160208201516040909201805190925f929161152c6124af8383613e22565b8490613359565b805160208201516040909201915f91906124d08183615903565b9150600f601086901c1660025b818110156120d557855160209096019592506124f98385615903565b93506001016124dd565b805160208201516040909201915f919061251d81836159e9565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159e9565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159fc565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159fc565b93506001016125c6565b805160208201516040909201915f91906126068183615b31565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615b31565b9350600101612613565b805160208201516040909201915f91906126538183615b3c565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b3c565b9350600101612660565b805160608401515f91908290819061269e90846140ac565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274991906159b7565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c96156a6565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a85856140f3565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159e9565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549890805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a60602089615903565b97506128e5565b612a72601c89615b3c565b9750612a7f8660046159fc565b612a899089615903565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac8600489615903565b9750612a8c565b612adb8d8a8e8e614122565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141b5565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b4f565b5f805f805f612ef0878761425b565b9250925092505f80612f028585613253565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142b7565b91509150612f3d8282614319565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8984848484614373565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd78484848461438a565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130268484848461438a565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130768484848461438a565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c58484848461438a565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c828261445e565b90925090505b5f612f3d8383614501565b5f808515841517801561314957865f0361313d578484925092505061324a565b8686925092505061324a565b613153878761455f565b9097509550613162858561455f565b909550935085841315613176579395929492935b838603604c81111561318f57878793509350505061324a565b80600a0a86816131a1576131a1615869565b0595505086850180881860ff90811c151589881890911c1516801561323c57877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613223576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613240565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132b7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329757620186a0860595506005850194505b8586601b0b146132b257600a86059550846001019450613297565b6132cd565b855f036132cd57505f925060019150612f1b9050565b848560030b14613329575f8512156132ed57505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e8686868661311d565b915091505f6133ad8383614501565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e868686866134bc565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343757509192915050565b5f8061344384846145b5565b91509150805f03613458575093949350505050565b5f8113156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461311d565b935091505b5f612f898385614501565b5f80835f03613501576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351257505f90508061324a565b5f805f806135208a8a61461d565b919b5099509150613531888861461d565b919950975090505f6135428b6148be565b90505f61354e8a6148be565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c8183101561396b5784156135ac57507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b61392a565b6f4b3b4ca85a86c47a098a2240000000008310156136d857678ac7230489e8000083101561363c576402540be40083101561360a57620186a08310156135fa5750620186a0905060056138b3565b506402540be4009050600a6138b3565b655af3107a40008310156136295750655af3107a40009050600e6138b3565b50678ac7230489e80000905060136138b3565b6b204fce5e3e2502611000000083101561368e5769152d02c7e14af6800000831015613677575069152d02c7e14af6800000905060176138b3565b506b204fce5e3e250261100000009050601c6138b3565b6d314dc6448d9338c15b0a000000008310156136bd57506d314dc6448d9338c15b0a00000000905060216138b3565b506f4b3b4ca85a86c47a098a224000000000905060266138b3565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d05773af298d050e4395d69670b12b7f4100000000000083101561376b577172cb5bd86321e38cb6ce6682e8000000000083101561374c57507172cb5bd86321e38cb6ce6682e800000000009050602b6138b3565b5073af298d050e4395d69670b12b7f41000000000000905060306138b3565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137ac575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b3565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b3565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613866577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561383e57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b3565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b3565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b357507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138e757600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b3565b815f0361392a576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b8561396b576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261399e57808d039c50613a11565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1157807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b136139fe57998a0199613a11565b5f8099509950505050505050505061324a565b5f808e128015613a2057505f8c135b15613a5d577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a55575f613a59565b808d035b9150505b8b818f01039750613a7a8f8e613a7488878961491f565b8b614a04565b90995097505f811315613ac457604c811315613aa4575f809a509a5050505050505050505061324a565b80600a0a8981613ab657613ab6615869565b059850885f03613ac4575f97505b5096985094965061324a95505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b145750600191506108769050565b5f8213613bad57815f03613b7157613b2c855f613033565b15613b66576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bb8856001612f46565b8015613bc95750613bc9865f612f94565b15613bd8578592505050610876565b613be2855f613033565b15613c0b57613c02613bf387613ede565b613bfc87613e67565b86613ad7565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c3e84846145b5565b915091505f613c4e83855f614b0b565b905060015f8080613c858f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ccc5784600116600103613caf57613ca984848484613f37565b90945092505b600185901c9450613cc282828484613f37565b9092509050613c8a565b5f80613cd98f8e8e614c22565b91509150613ce982828a8d613f37565b9092509050613cf98f8383614f57565b9092509050613d0a82828888613f37565b90925090505f613d1a8383614501565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6857509192915050565b5f80613d7484846145b5565b915091505f84128015613d8657508015155b156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e0a83836145b5565b9150505f613e188284614501565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686613f37565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c828261445e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c82826150c8565b5f613f1b8383612f94565b613f255781610876565b5090919050565b5f613f1b8383613033565b5f8085158415178015613f4f575f92505f915061404c565b613f598487615b6f565b91505f613f65886148be565b90505f613f71876148be565b90505f613f7e8383615121565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fd457670de0b6b3a7640000820491506012015b633b9aca00821115613fed57633b9aca00820491506009015b61271082111561400257612710820491506004015b811561401657600a82049150600101614002565b6140208187615b6f565b95506140428b8a61403c878761403787600a615b31565b61491f565b89614a04565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613ad7565b5f8061408e848461445e565b909450925061409f8686868661311d565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140ea57805185036140e15760019350602081015192506140ea565b604001516140c3565b50509250929050565b5f806140fe8461515c565b60020260010190505f6141118585615176565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061420c575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614259576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142a657600a860460018201600a88065f14935093509350506142b0565b8593509150600190505b9250925092565b5f805f805f6142c6878761425b565b9250925092508061430d576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f6143268585613253565b915091508061436b576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143808585858561438a565b1495945050505050565b5f80851584151781871282861218178584141780156143af578685925092505061324a565b505f858413156143c3575092949193919260015b8386035f8112604c82131780156143f65782156143e8575f899450945050505061324a565b885f9450945050505061324a565b600a82900a8981028a82828161440e5761440e615869565b051461443a57841561442a575f8b96509650505050505061324a565b8a5f96509650505050505061324a565b841561444f57889650945061324a9350505050565b955087945061324a9350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144ea576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f61450e8585613253565b915091508015801561451e575081155b1561436b576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f61456e878761461d565b9250925092508061430d576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145c857508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145fa57505f905082612f1b565b5f839003600a0a80858161461057614610615869565b0794859003959350505050565b5f805f845f0361463557505f915081905060016142b0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614849576f4b3b4ca85a86c47a098a224000000000850515801561469e57507f80000000000000000000000000000000000000000000000000000000000000268412155b156146bf576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470757507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561476c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614782576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d157507f80000000000000000000000000000000000000000000000000000000000000028412155b156147e757606485029450600284039350614782565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483757507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484957600a850294506001840393505b600a8086029081058614801561487f57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561488e578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082121561491b577f8000000000000000000000000000000000000000000000000000000000000000820361491557507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f61492c8686615121565b91509150815f036149505783818161494657614946615869565b0492505050610876565b83821061499a576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ace577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614abb57614a637f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615903565b8403614a9357507f800000000000000000000000000000000000000000000000000000000000000090508161324a565b614a9e600a856159e9565b614aa790615b96565b614ab2846001615b6f565b9150915061324a565b614ac484615b96565b839150915061324a565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0157614aa7600a856159e9565b508290508161324a565b5f818303614b1a575082610876565b82821315614b5d57828203604c811380614b3457505f8113155b15614b42575f915050610876565b80600a0a8581614b5457614b54615869565b05915050610876565b818303604c811380614b6f57505f8113155b15614bb7576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bcf57614bcf615869565b0514614c18576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c30828261455f565b90965094505f8613614cb157855f03614c75576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cef57614ce583604c615b6f565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d3e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f1b575f805f805f85614d7957604b614d7c565b604c5b614d86908a615b6f565b90505f8087614db3577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dd4565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0657614e06615869565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e3f8c826151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ecb576123278114614ea657614e818c826001016151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ec8565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614efb838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615253565b909a509850614f0c8a8a835f61311d565b97509750505050505050610974565b614f2585856150c8565b9095509350614f35868686614c22565b9095509350614f44858561445e565b9250925050610974565b50935093915050565b5f805f841215614f9357614f6b848461445e565b9094509250614f7b858585614f57565b9094509250614f8a84846150c8565b91509150610974565b5f80614f9f86866145b5565b9092509050845f8080614fb285856152f0565b9194509250905061270d612710614fca600182615bc6565b8514614fe157614fdb8d86866153df565b90925090505b831561506c575f614ff3866001615b6f565b90505b80848583028161500857615008615869565b051461501f57600a84059350600a88059750614ff6565b61506061502c8588615bec565b896150378785615bec565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615253565b909d509b506150939050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150a484835f614b0b565b6150af886001615b6f565b6150b99190615b6f565b94509450505050935093915050565b5f806151167f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134bc565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361516c57505f919050565b50602001515f1a90565b5f6151808361515c565b82106151bc5781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c37565b50600202016003015161ffff1690565b5f806151db600a6123286159e9565b6151e69060026159fc565b6151f1906001615903565b90505f615201600a6123286159e9565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523057918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152665750839050816152e4565b5f805f806152768c8b8f8d614082565b915091505f806152888a8a8d8c614082565b9150915061529884848484613f37565b8096508197505050505050505f806152b28b8b8f8d614082565b915091505f806152c4868686866134bc565b915091505f806152d684848f8e61311d565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532857508391505f905060016142b0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538757505f91505082151560016142b0565b5f846004015f03600a0a90505f8187816153a3576153a3615869565b05945050808402861415925090506142b0565b5f84126153cb57505f915081905060016142b0565b50505060048101600a0a82025f60016142b0565b5f808060646153f1600a6123286159e9565b6153fe600a6123286159e9565b6154099060026159fc565b615414906001615903565b61541e9190615903565b6154289190615903565b905061546c565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547785828861542f565b92508315614f4e5761548d60018601828861542f565b915050935093915050565b614259615c4f565b5f602082840312156154b0575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154df565b5f6020828403121561554d575f80fd5b813567ffffffffffffffff811115615563575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a357815187529582019590820190600101615587565b509495945050505050565b604081525f6155c06040830185615574565b8281036020848101919091528451808352858201928201905f5b818110156155f6578451835293830193918301916001016155da565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114615624575f80fd5b50565b5f60208284031215615637575f80fd5b813561087681615603565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615675575f80fd5b83018035915067ffffffffffffffff82111561568f575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561571a5761571a6156a6565b604052919050565b5f67ffffffffffffffff82111561573b5761573b6156a6565b5060051b60200190565b5f61575761575284615722565b6156d3565b83815260208082019190600586811b860136811115615774575f80fd5b865b818110156157fb57803567ffffffffffffffff811115615794575f80fd5b880136601f8201126157a4575f80fd5b80356157b261575282615722565b81815290851b820186019086810190368311156157cd575f80fd5b928701925b828410156157eb578335825292870192908701906157d2565b8952505050948301948301615776565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583b575f80fd5b83018035915067ffffffffffffffff821115615855575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158a4576158a4615869565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158d6565b828152604060208201525f61592e6040830184615574565b949350505050565b5f6020808385031215615947575f80fd5b825167ffffffffffffffff81111561595d575f80fd5b8301601f8101851361596d575f80fd5b805161597b61575282615722565b81815260059190911b82018301908381019087831115615999575f80fd5b928401925b82841015612f895783518252928401929084019061599e565b5f602082840312156159c7575f80fd5b5051919050565b5f602082840312156159de575f80fd5b815161087681615603565b5f826159f7576159f7615869565b500490565b808202811582820484141761017f5761017f6158d6565b600181815b80851115615a6c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5257615a526158d6565b80851615615a5f57918102915b93841c9390800290615a18565b509250929050565b5f82615a825750600161017f565b81615a8e57505f61017f565b8160018114615aa45760028114615aae57615aca565b600191505061017f565b60ff841115615abf57615abf6158d6565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615aed575081810a61017f565b615af78383615a13565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2957615b296158d6565b029392505050565b5f6108768383615a74565b8181038181111561017f5761017f6158d6565b5f60208284031215615b5f575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b8e57615b8e6158d6565b505092915050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614915576149156158d6565b8181035f831280158383131683831282161715615be557615be56158d6565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2357615c236158d6565b818105831482151761017f5761017f6158d6565b828152604060208201525f61592e60408301846154df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a0565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b604051610062919061552b565b61009361008e36600461553d565b610194565b6040516100629291906155ae565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b09088615627565b6101bd6080890189615642565b6101c691615745565b6101ce61063c565b6101db60408b018b615808565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615642565b610237929150615896565b156102895761024960c0850185615642565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615642565b905081101561031b576060820151610304906102b760c0880188615642565b848181106102c7576102c76158a9565b90506020020135878060c001906102de9190615642565b6102e9866001615903565b8181106102f8576102f86158a9565b905060200201356107a7565b6060830152610314600282615903565b905061028b565b5061038661032c60a0860186615642565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c7d60909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b36158a9565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158a9565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae09087908790600401615916565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615936565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158a9565b60200260200101518281518110610c1157610c116158a9565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159b7565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159b7565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122191906159b7565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a91906159b7565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159b7565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159b7565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159ce565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f91906159b7565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159ce565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610280919061552b565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d398484848461311d565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d928686868661311d565b9096509450600101611d49565b5050611dab8484613253565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613359565b906133bb565b80515f90610c6d81613400565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134bc565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134bc565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d81613d31565b80515f90610c6d81613dd7565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f5612015612006886130d2565b61200f8a6130d2565b90613e22565b9190613ad7565b90508115158315151461123a5761114e81613e67565b80515f906120498161204381613400565b90613e99565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ede565b805160208201516040909201915f91906120a28282613f10565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f10565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f2c565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f2c565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f37565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f37565b90965094506001016122f2565b80516020909101805190915f916115fd828273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f5614056565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e884848484614082565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244186868686614082565b90965094506001016123f8565b805160208201516040909201805190925f929161152c6124888273c51a14251b0dcf0ae24a96b7153991378938f5f5612015866001613359565b8490613e22565b805160208201516040909201805190925f929161152c6124af8383613e22565b8490613359565b805160208201516040909201915f91906124d08183615903565b9150600f601086901c1660025b818110156120d557855160209096019592506124f98385615903565b93506001016124dd565b805160208201516040909201915f919061251d81836159e9565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159e9565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159fc565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159fc565b93506001016125c6565b805160208201516040909201915f91906126068183615b31565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615b31565b9350600101612613565b805160208201516040909201915f91906126538183615b3c565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b3c565b9350600101612660565b805160608401515f91908290819061269e90846140ac565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274991906159b7565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c96156a6565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a85856140f3565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159e9565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549890805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a60602089615903565b97506128e5565b612a72601c89615b3c565b9750612a7f8660046159fc565b612a899089615903565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac8600489615903565b9750612a8c565b612adb8d8a8e8e614122565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141b5565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b4f565b5f805f805f612ef0878761425b565b9250925092505f80612f028585613253565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142b7565b91509150612f3d8282614319565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8984848484614373565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd78484848461438a565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130268484848461438a565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130768484848461438a565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c58484848461438a565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c828261445e565b90925090505b5f612f3d8383614501565b5f808515841517801561314957865f0361313d578484925092505061324a565b8686925092505061324a565b613153878761455f565b9097509550613162858561455f565b909550935085841315613176579395929492935b838603604c81111561318f57878793509350505061324a565b80600a0a86816131a1576131a1615869565b0595505086850180881860ff90811c151589881890911c1516801561323c57877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613223576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613240565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132b7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329757620186a0860595506005850194505b8586601b0b146132b257600a86059550846001019450613297565b6132cd565b855f036132cd57505f925060019150612f1b9050565b848560030b14613329575f8512156132ed57505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e8686868661311d565b915091505f6133ad8383614501565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e868686866134bc565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343757509192915050565b5f8061344384846145b5565b91509150805f03613458575093949350505050565b5f8113156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461311d565b935091505b5f612f898385614501565b5f80835f03613501576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351257505f90508061324a565b5f805f806135208a8a61461d565b919b5099509150613531888861461d565b919950975090505f6135428b6148be565b90505f61354e8a6148be565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c8183101561396b5784156135ac57507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b61392a565b6f4b3b4ca85a86c47a098a2240000000008310156136d857678ac7230489e8000083101561363c576402540be40083101561360a57620186a08310156135fa5750620186a0905060056138b3565b506402540be4009050600a6138b3565b655af3107a40008310156136295750655af3107a40009050600e6138b3565b50678ac7230489e80000905060136138b3565b6b204fce5e3e2502611000000083101561368e5769152d02c7e14af6800000831015613677575069152d02c7e14af6800000905060176138b3565b506b204fce5e3e250261100000009050601c6138b3565b6d314dc6448d9338c15b0a000000008310156136bd57506d314dc6448d9338c15b0a00000000905060216138b3565b506f4b3b4ca85a86c47a098a224000000000905060266138b3565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d05773af298d050e4395d69670b12b7f4100000000000083101561376b577172cb5bd86321e38cb6ce6682e8000000000083101561374c57507172cb5bd86321e38cb6ce6682e800000000009050602b6138b3565b5073af298d050e4395d69670b12b7f41000000000000905060306138b3565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137ac575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b3565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b3565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613866577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561383e57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b3565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b3565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b357507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138e757600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b3565b815f0361392a576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b8561396b576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261399e57808d039c50613a11565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1157807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b136139fe57998a0199613a11565b5f8099509950505050505050505061324a565b5f808e128015613a2057505f8c135b15613a5d577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a55575f613a59565b808d035b9150505b8b818f01039750613a7a8f8e613a7488878961491f565b8b614a04565b90995097505f811315613ac457604c811315613aa4575f809a509a5050505050505050505061324a565b80600a0a8981613ab657613ab6615869565b059850885f03613ac4575f97505b5096985094965061324a95505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b145750600191506108769050565b5f8213613bad57815f03613b7157613b2c855f613033565b15613b66576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bb8856001612f46565b8015613bc95750613bc9865f612f94565b15613bd8578592505050610876565b613be2855f613033565b15613c0b57613c02613bf387613ede565b613bfc87613e67565b86613ad7565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c3e84846145b5565b915091505f613c4e83855f614b0b565b905060015f8080613c858f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ccc5784600116600103613caf57613ca984848484613f37565b90945092505b600185901c9450613cc282828484613f37565b9092509050613c8a565b5f80613cd98f8e8e614c22565b91509150613ce982828a8d613f37565b9092509050613cf98f8383614f57565b9092509050613d0a82828888613f37565b90925090505f613d1a8383614501565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6857509192915050565b5f80613d7484846145b5565b915091505f84128015613d8657508015155b156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e0a83836145b5565b9150505f613e188284614501565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686613f37565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c828261445e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c82826150c8565b5f613f1b8383612f94565b613f255781610876565b5090919050565b5f613f1b8383613033565b5f8085158415178015613f4f575f92505f915061404c565b613f598487615b6f565b91505f613f65886148be565b90505f613f71876148be565b90505f613f7e8383615121565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fd457670de0b6b3a7640000820491506012015b633b9aca00821115613fed57633b9aca00820491506009015b61271082111561400257612710820491506004015b811561401657600a82049150600101614002565b6140208187615b6f565b95506140428b8a61403c878761403787600a615b31565b61491f565b89614a04565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613ad7565b5f8061408e848461445e565b909450925061409f8686868661311d565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140ea57805185036140e15760019350602081015192506140ea565b604001516140c3565b50509250929050565b5f806140fe8461515c565b60020260010190505f6141118585615176565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061420c575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614259576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142a657600a860460018201600a88065f14935093509350506142b0565b8593509150600190505b9250925092565b5f805f805f6142c6878761425b565b9250925092508061430d576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f6143268585613253565b915091508061436b576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143808585858561438a565b1495945050505050565b5f80851584151781871282861218178584141780156143af578685925092505061324a565b505f858413156143c3575092949193919260015b8386035f8112604c82131780156143f65782156143e8575f899450945050505061324a565b885f9450945050505061324a565b600a82900a8981028a82828161440e5761440e615869565b051461443a57841561442a575f8b96509650505050505061324a565b8a5f96509650505050505061324a565b841561444f57889650945061324a9350505050565b955087945061324a9350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144ea576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f61450e8585613253565b915091508015801561451e575081155b1561436b576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f61456e878761461d565b9250925092508061430d576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145c857508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145fa57505f905082612f1b565b5f839003600a0a80858161461057614610615869565b0794859003959350505050565b5f805f845f0361463557505f915081905060016142b0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614849576f4b3b4ca85a86c47a098a224000000000850515801561469e57507f80000000000000000000000000000000000000000000000000000000000000268412155b156146bf576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470757507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561476c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614782576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d157507f80000000000000000000000000000000000000000000000000000000000000028412155b156147e757606485029450600284039350614782565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483757507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484957600a850294506001840393505b600a8086029081058614801561487f57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561488e578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082121561491b577f8000000000000000000000000000000000000000000000000000000000000000820361491557507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f61492c8686615121565b91509150815f036149505783818161494657614946615869565b0492505050610876565b83821061499a576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ace577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614abb57614a637f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615903565b8403614a9357507f800000000000000000000000000000000000000000000000000000000000000090508161324a565b614a9e600a856159e9565b614aa790615b96565b614ab2846001615b6f565b9150915061324a565b614ac484615b96565b839150915061324a565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0157614aa7600a856159e9565b508290508161324a565b5f818303614b1a575082610876565b82821315614b5d57828203604c811380614b3457505f8113155b15614b42575f915050610876565b80600a0a8581614b5457614b54615869565b05915050610876565b818303604c811380614b6f57505f8113155b15614bb7576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bcf57614bcf615869565b0514614c18576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c30828261455f565b90965094505f8613614cb157855f03614c75576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cef57614ce583604c615b6f565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d3e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f1b575f805f805f85614d7957604b614d7c565b604c5b614d86908a615b6f565b90505f8087614db3577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dd4565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0657614e06615869565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e3f8c826151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ecb576123278114614ea657614e818c826001016151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ec8565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614efb838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615253565b909a509850614f0c8a8a835f61311d565b97509750505050505050610974565b614f2585856150c8565b9095509350614f35868686614c22565b9095509350614f44858561445e565b9250925050610974565b50935093915050565b5f805f841215614f9357614f6b848461445e565b9094509250614f7b858585614f57565b9094509250614f8a84846150c8565b91509150610974565b5f80614f9f86866145b5565b9092509050845f8080614fb285856152f0565b9194509250905061270d612710614fca600182615bc6565b8514614fe157614fdb8d86866153df565b90925090505b831561506c575f614ff3866001615b6f565b90505b80848583028161500857615008615869565b051461501f57600a84059350600a88059750614ff6565b61506061502c8588615bec565b896150378785615bec565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615253565b909d509b506150939050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150a484835f614b0b565b6150af886001615b6f565b6150b99190615b6f565b94509450505050935093915050565b5f806151167f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134bc565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361516c57505f919050565b50602001515f1a90565b5f6151808361515c565b82106151bc5781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c37565b50600202016003015161ffff1690565b5f806151db600a6123286159e9565b6151e69060026159fc565b6151f1906001615903565b90505f615201600a6123286159e9565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523057918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152665750839050816152e4565b5f805f806152768c8b8f8d614082565b915091505f806152888a8a8d8c614082565b9150915061529884848484613f37565b8096508197505050505050505f806152b28b8b8f8d614082565b915091505f806152c4868686866134bc565b915091505f806152d684848f8e61311d565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532857508391505f905060016142b0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538757505f91505082151560016142b0565b5f846004015f03600a0a90505f8187816153a3576153a3615869565b05945050808402861415925090506142b0565b5f84126153cb57505f915081905060016142b0565b50505060048101600a0a82025f60016142b0565b5f808060646153f1600a6123286159e9565b6153fe600a6123286159e9565b6154099060026159fc565b615414906001615903565b61541e9190615903565b6154289190615903565b905061546c565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547785828861542f565b92508315614f4e5761548d60018601828861542f565b915050935093915050565b614259615c4f565b5f602082840312156154b0575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154df565b5f6020828403121561554d575f80fd5b813567ffffffffffffffff811115615563575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a357815187529582019590820190600101615587565b509495945050505050565b604081525f6155c06040830185615574565b8281036020848101919091528451808352858201928201905f5b818110156155f6578451835293830193918301916001016155da565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114615624575f80fd5b50565b5f60208284031215615637575f80fd5b813561087681615603565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615675575f80fd5b83018035915067ffffffffffffffff82111561568f575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561571a5761571a6156a6565b604052919050565b5f67ffffffffffffffff82111561573b5761573b6156a6565b5060051b60200190565b5f61575761575284615722565b6156d3565b83815260208082019190600586811b860136811115615774575f80fd5b865b818110156157fb57803567ffffffffffffffff811115615794575f80fd5b880136601f8201126157a4575f80fd5b80356157b261575282615722565b81815290851b820186019086810190368311156157cd575f80fd5b928701925b828410156157eb578335825292870192908701906157d2565b8952505050948301948301615776565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583b575f80fd5b83018035915067ffffffffffffffff821115615855575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158a4576158a4615869565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158d6565b828152604060208201525f61592e6040830184615574565b949350505050565b5f6020808385031215615947575f80fd5b825167ffffffffffffffff81111561595d575f80fd5b8301601f8101851361596d575f80fd5b805161597b61575282615722565b81815260059190911b82018301908381019087831115615999575f80fd5b928401925b82841015612f895783518252928401929084019061599e565b5f602082840312156159c7575f80fd5b5051919050565b5f602082840312156159de575f80fd5b815161087681615603565b5f826159f7576159f7615869565b500490565b808202811582820484141761017f5761017f6158d6565b600181815b80851115615a6c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5257615a526158d6565b80851615615a5f57918102915b93841c9390800290615a18565b509250929050565b5f82615a825750600161017f565b81615a8e57505f61017f565b8160018114615aa45760028114615aae57615aca565b600191505061017f565b60ff841115615abf57615abf6158d6565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615aed575081810a61017f565b615af78383615a13565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2957615b296158d6565b029392505050565b5f6108768383615a74565b8181038181111561017f5761017f6158d6565b5f60208284031215615b5f575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b8e57615b8e6158d6565b505092915050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614915576149156158d6565b8181035f831280158383131683831282161715615be557615be56158d6565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2357615c236158d6565b818105831482151761017f5761017f6158d6565b828152604060208201525f61592e60408301846154df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777" + } +} \ No newline at end of file diff --git a/crates/abi/RainlangParser.json b/crates/abi/RainlangParser.json new file mode 100644 index 000000000..aac29cb3b --- /dev/null +++ b/crates/abi/RainlangParser.json @@ -0,0 +1,671 @@ +{ + "abi": [ + { + "type": "function", + "name": "buildLiteralParserFunctionPointers", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "buildOperandHandlerFunctionPointers", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "parsePragma1", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct PragmaV1", + "components": [ + { + "name": "usingWordsFrom", + "type": "address[]", + "internalType": "address[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unsafeParse", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "BadDynamicLength", + "inputs": [ + { + "name": "dynamicLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "standardOpsLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BadSubParserResult", + "inputs": [ + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "CoefficientOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "DanglingSource", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateLHSItem", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExcessLHSItems", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExcessRHSItems", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExpectedLeftParen", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ExpectedOperand", + "inputs": [] + }, + { + "type": "error", + "name": "ExponentOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "FixedDecimalOverflow", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "error", + "name": "HexLiteralOverflow", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidSubParser", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "LHSItemCountOverflow", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "LineRHSItemsOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "LossyConversionFromFloat", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "MalformedCommentStart", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "MalformedHexLiteral", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "MaxSources", + "inputs": [] + }, + { + "type": "error", + "name": "MissingFinalSemi", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NegativeFixedDecimalConversion", + "inputs": [ + { + "name": "signedCoefficient", + "type": "int256", + "internalType": "int256" + }, + { + "name": "exponent", + "type": "int256", + "internalType": "int256" + } + ] + }, + { + "type": "error", + "name": "NoWhitespaceAfterUsingWordsFrom", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NotAcceptingInputs", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OddLengthHexLiteral", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OpcodeIOOverflow", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OperandOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "OperandValuesOverflow", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ParenInputOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "ParenOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "ParseMemoryOverflow", + "inputs": [ + { + "name": "freeMemoryPointer", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ParseStackOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "ParseStackUnderflow", + "inputs": [] + }, + { + "type": "error", + "name": "ParserOutOfBounds", + "inputs": [] + }, + { + "type": "error", + "name": "SourceIndexOutOfBounds", + "inputs": [ + { + "name": "sourceIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bytecode", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "SourceItemOpsOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "SourceTotalOpsOverflow", + "inputs": [] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SubParseLiteralDispatchLengthOverflow", + "inputs": [ + { + "name": "dispatchLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SubParseableMissingDispatch", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnclosedComment", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnclosedLeftParen", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnclosedOperand", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnclosedStringLiteral", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnclosedSubParseableLiteral", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnexpectedComment", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnexpectedLHSChar", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnexpectedOperand", + "inputs": [] + }, + { + "type": "error", + "name": "UnexpectedOperandValue", + "inputs": [] + }, + { + "type": "error", + "name": "UnexpectedRHSChar", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnexpectedRightParen", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UnknownWord", + "inputs": [ + { + "name": "word", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "error", + "name": "UnsupportedLiteralType", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "UppercaseHexPrefix", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "WordSize", + "inputs": [ + { + "name": "word", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "error", + "name": "ZeroLengthHexLiteral", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ZeroStringStartPointer", + "inputs": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5061549d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db" + } +} \ No newline at end of file diff --git a/crates/abi/RainlangStore.json b/crates/abi/RainlangStore.json new file mode 100644 index 000000000..4d0025d8c --- /dev/null +++ b/crates/abi/RainlangStore.json @@ -0,0 +1,107 @@ +{ + "abi": [ + { + "type": "function", + "name": "get", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "key", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "set", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "internalType": "StateNamespace" + }, + { + "name": "kvs", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Set", + "inputs": [ + { + "name": "namespace", + "type": "uint256", + "indexed": false, + "internalType": "FullyQualifiedNamespace" + }, + { + "name": "key", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "value", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OddSetLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5061039f8061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a71461004357806304b19db41461006b578063295f36d714610080575b5f80fd5b61005661005136600461025c565b6100b6565b60405190151581526020015b60405180910390f35b61007e6100793660046102a2565b61014e565b005b6100a861008e36600461031a565b5f9182526020828152604080842092845291905290205490565b604051908152602001610062565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f2deeab6300000000000000000000000000000000000000000000000000000000148061014857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61015960028261033a565b15610197576040517f01c71f3d0000000000000000000000000000000000000000000000000000000081526004810182905260240160405180910390fd5b5f8381523360205260408120905b82811015610255575f8484838181106101c0576101c0610372565b9050602002013590505f8585846001018181106101df576101df610372565b9050602002013590507f245edc72356e0d4eee6c8edc5e2f5cbe7cc71f347769147ef686bc681845da8784838360405161022c939291909283526020830191909152604082015260600190565b60405180910390a15f8481526020818152604080832094835293905291909120556002016101a5565b5050505050565b5f6020828403121561026c575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461029b575f80fd5b9392505050565b5f805f604084860312156102b4575f80fd5b83359250602084013567ffffffffffffffff808211156102d2575f80fd5b818601915086601f8301126102e5575f80fd5b8135818111156102f3575f80fd5b8760208260051b8501011115610307575f80fd5b6020830194508093505050509250925092565b5f806040838503121561032b575f80fd5b50508035926020909101359150565b5f8261036d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a71461004357806304b19db41461006b578063295f36d714610080575b5f80fd5b61005661005136600461025c565b6100b6565b60405190151581526020015b60405180910390f35b61007e6100793660046102a2565b61014e565b005b6100a861008e36600461031a565b5f9182526020828152604080842092845291905290205490565b604051908152602001610062565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f2deeab6300000000000000000000000000000000000000000000000000000000148061014857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61015960028261033a565b15610197576040517f01c71f3d0000000000000000000000000000000000000000000000000000000081526004810182905260240160405180910390fd5b5f8381523360205260408120905b82811015610255575f8484838181106101c0576101c0610372565b9050602002013590505f8585846001018181106101df576101df610372565b9050602002013590507f245edc72356e0d4eee6c8edc5e2f5cbe7cc71f347769147ef686bc681845da8784838360405161022c939291909283526020830191909152604082015260600190565b60405180910390a15f8481526020818152604080832094835293905291909120556002016101a5565b5050505050565b5f6020828403121561026c575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461029b575f80fd5b9392505050565b5f805f604084860312156102b4575f80fd5b83359250602084013567ffffffffffffffff808211156102d2575f80fd5b818601915086601f8301126102e5575f80fd5b8135818111156102f3575f80fd5b8760208260051b8501011115610307575f80fd5b6020830194508093505050509250925092565b5f806040838503121561032b575f80fd5b50508035926020909101359150565b5f8261036d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd" + } +} \ No newline at end of file diff --git a/crates/abi/TestERC20.json b/crates/abi/TestERC20.json new file mode 100644 index 000000000..5a767bb21 --- /dev/null +++ b/crates/abi/TestERC20.json @@ -0,0 +1,349 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "name_", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol_", + "type": "string", + "internalType": "string" + }, + { + "name": "decimals_", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "recipient_", + "type": "address", + "internalType": "address" + }, + { + "name": "supply_", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allowance", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transfer", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ERC20InsufficientAllowance", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "allowance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC20InsufficientBalance", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSpender", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ] + } + ], + "bytecode": { + "object": "0x608060405234801561000f575f80fd5b50604051610d4d380380610d4d83398101604081905261002e9161026e565b8484600361003c8382610391565b5060046100498282610391565b50506005805460ff191660ff861617905550610065828261006f565b5050505050610475565b6001600160a01b03821661009d5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6100a85f83836100ac565b5050565b6001600160a01b0383166100d6578060025f8282546100cb9190610450565b909155506101469050565b6001600160a01b0383165f90815260208190526040902054818110156101285760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610094565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661016257600280548290039055610180565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101c591815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101f5575f80fd5b81516001600160401b038082111561020f5761020f6101d2565b604051601f8301601f19908116603f01168101908282118183101715610237576102376101d2565b8160405283815286602085880101111561024f575f80fd5b8360208701602083015e5f602085830101528094505050505092915050565b5f805f805f60a08688031215610282575f80fd5b85516001600160401b0380821115610298575f80fd5b6102a489838a016101e6565b965060208801519150808211156102b9575f80fd5b506102c6888289016101e6565b945050604086015160ff811681146102dc575f80fd5b60608701519093506001600160a01b03811681146102f8575f80fd5b80925050608086015190509295509295909350565b600181811c9082168061032157607f821691505b60208210810361033f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561038c57805f5260205f20601f840160051c8101602085101561036a5750805b601f840160051c820191505b81811015610389575f8155600101610376565b50505b505050565b81516001600160401b038111156103aa576103aa6101d2565b6103be816103b8845461030d565b84610345565b602080601f8311600181146103f1575f84156103da5750858301515b5f19600386901b1c1916600185901b178555610448565b5f85815260208120601f198616915b8281101561041f57888601518255948401946001909101908401610400565b508582101561043c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8082018082111561046f57634e487b7160e01b5f52601160045260245ffd5b92915050565b6108cb806104825f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063313ce5671161007257806395d89b411161005857806395d89b4114610153578063a9059cbb1461015b578063dd62ed3e1461016e575f80fd5b8063313ce5671461010957806370a082311461011e575f80fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6575b5f80fd5b6100ab6101b3565b6040516100b89190610715565b60405180910390f35b6100d46100cf366004610790565b610243565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046107b8565b61025c565b60055460405160ff90911681526020016100b8565b6100e861012c3660046107f1565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100ab61027f565b6100d4610169366004610790565b61028e565b6100e861017c366004610811565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101c290610842565b80601f01602080910402602001604051908101604052809291908181526020018280546101ee90610842565b80156102395780601f1061021057610100808354040283529160200191610239565b820191905f5260205f20905b81548152906001019060200180831161021c57829003601f168201915b5050505050905090565b5f3361025081858561029b565b60019150505b92915050565b5f336102698582856102ad565b610274858585610380565b506001949350505050565b6060600480546101c290610842565b5f33610250818585610380565b6102a88383836001610429565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561037a578181101561036c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b61037a84848484035f610429565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff821661041e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b6102a883838361056e565b73ffffffffffffffffffffffffffffffffffffffff8416610478576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff83166104c7576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561037a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161056091815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105a5578060025f82825461059a9190610893565b909155506106559050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561062a576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610363565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661067e576002805482900390556106a9565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161070891815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078b575f80fd5b919050565b5f80604083850312156107a1575f80fd5b6107aa83610768565b946020939093013593505050565b5f805f606084860312156107ca575f80fd5b6107d384610768565b92506107e160208501610768565b9150604084013590509250925092565b5f60208284031215610801575f80fd5b61080a82610768565b9392505050565b5f8060408385031215610822575f80fd5b61082b83610768565b915061083960208401610768565b90509250929050565b600181811c9082168061085657607f821691505b60208210810361088d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610256577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd" + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063313ce5671161007257806395d89b411161005857806395d89b4114610153578063a9059cbb1461015b578063dd62ed3e1461016e575f80fd5b8063313ce5671461010957806370a082311461011e575f80fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6575b5f80fd5b6100ab6101b3565b6040516100b89190610715565b60405180910390f35b6100d46100cf366004610790565b610243565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046107b8565b61025c565b60055460405160ff90911681526020016100b8565b6100e861012c3660046107f1565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100ab61027f565b6100d4610169366004610790565b61028e565b6100e861017c366004610811565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101c290610842565b80601f01602080910402602001604051908101604052809291908181526020018280546101ee90610842565b80156102395780601f1061021057610100808354040283529160200191610239565b820191905f5260205f20905b81548152906001019060200180831161021c57829003601f168201915b5050505050905090565b5f3361025081858561029b565b60019150505b92915050565b5f336102698582856102ad565b610274858585610380565b506001949350505050565b6060600480546101c290610842565b5f33610250818585610380565b6102a88383836001610429565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561037a578181101561036c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b61037a84848484035f610429565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff821661041e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b6102a883838361056e565b73ffffffffffffffffffffffffffffffffffffffff8416610478576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff83166104c7576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561037a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161056091815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105a5578060025f82825461059a9190610893565b909155506106559050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561062a576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610363565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661067e576002805482900390556106a9565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161070891815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078b575f80fd5b919050565b5f80604083850312156107a1575f80fd5b6107aa83610768565b946020939093013593505050565b5f805f606084860312156107ca575f80fd5b6107d384610768565b92506107e160208501610768565b9150604084013590509250925092565b5f60208284031215610801575f80fd5b61080a82610768565b9392505050565b5f8060408385031215610822575f80fd5b61082b83610768565b915061083960208401610768565b90509250929050565b600181811c9082168061085657607f821691505b60208210810361088d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610256577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd" + } +} \ No newline at end of file diff --git a/crates/bindings/src/lib.rs b/crates/bindings/src/lib.rs index d2298570a..02f11d83d 100644 --- a/crates/bindings/src/lib.rs +++ b/crates/bindings/src/lib.rs @@ -5,33 +5,33 @@ use alloy::sol; sol!( #![sol(all_derives = true)] IInterpreterV4, - "../../out/IInterpreterV4.sol/IInterpreterV4.json" + "../abi/IInterpreterV4.json" ); sol!( #![sol(all_derives = true)] IInterpreterStoreV3, - "../../out/IInterpreterStoreV3.sol/IInterpreterStoreV3.json" + "../abi/IInterpreterStoreV3.json" ); sol!( #![sol(all_derives = true)] - IParserV2, "../../out/IParserV2.sol/IParserV2.json" + IParserV2, "../abi/IParserV2.json" ); sol!( #![sol(all_derives = true)] - IParserPragmaV1, "../../out/IParserPragmaV1.sol/IParserPragmaV1.json" + IParserPragmaV1, "../abi/IParserPragmaV1.json" ); sol!( #![sol(all_derives = true)] IExpressionDeployerV3, - "../../out/IExpressionDeployerV3.sol/IExpressionDeployerV3.json" + "../abi/IExpressionDeployerV3.json" ); sol!( #![sol(all_derives = true)] Rainlang, - "../../out/Rainlang.sol/Rainlang.json" + "../abi/Rainlang.json" ); diff --git a/crates/test_fixtures/src/lib.rs b/crates/test_fixtures/src/lib.rs index 1f48757c6..0d2d82a3f 100644 --- a/crates/test_fixtures/src/lib.rs +++ b/crates/test_fixtures/src/lib.rs @@ -22,37 +22,37 @@ use std::marker::PhantomData; sol!( #![sol(all_derives = true, rpc = true)] - ERC20, "../../out/TestERC20.sol/TestERC20.json" + ERC20, "../abi/TestERC20.json" ); sol!( #![sol(all_derives = true, rpc = true)] Interpreter, - "../../out/RainlangInterpreter.sol/RainlangInterpreter.json" + "../abi/RainlangInterpreter.json" ); sol!( #![sol(all_derives = true, rpc = true)] Store, - "../../out/RainlangStore.sol/RainlangStore.json" + "../abi/RainlangStore.json" ); sol!( #![sol(all_derives = true, rpc = true)] Parser, - "../../out/RainlangParser.sol/RainlangParser.json" + "../abi/RainlangParser.json" ); sol!( #![sol(all_derives = true, rpc = true)] Deployer, - "../../out/RainlangExpressionDeployer.sol/RainlangExpressionDeployer.json" + "../abi/RainlangExpressionDeployer.json" ); sol!( #![sol(all_derives = true, rpc = true)] RainlangContract, - "../../out/Rainlang.sol/Rainlang.json" + "../abi/Rainlang.json" ); /// Filler stack used by `LocalEvm` combining recommended fillers with a wallet signer. diff --git a/foundry.lock b/foundry.lock deleted file mode 100644 index c40a54bb6..000000000 --- a/foundry.lock +++ /dev/null @@ -1,26 +0,0 @@ -{ - "lib/rain.deploy": { - "rev": "ccfdb378d2ab1ed95461ecf1355682250e487e4c" - }, - "lib/rain.extrospection": { - "rev": "f9a46744a66daf4004a3edc1d4387ae14a9dc8e4" - }, - "lib/rain.interpreter.interface": { - "rev": "0908a84b9eceb796f9bb7deb261aac75502f9dce" - }, - "lib/rain.lib.memkv": { - "rev": "83e607990be8b3e06549338043c6b18f430f6bd2" - }, - "lib/rain.metadata": { - "rev": "182db238b53895b8490ac13208b2580eab817f36" - }, - "lib/rain.string": { - "rev": "488f237cd59874e4eb91b5a4f747bd57578fec7f" - }, - "lib/rain.tofu.erc20-decimals": { - "rev": "bcf1f45248a2e45a3e28dda06e21b3617610f86b" - }, - "lib/sol.lib.binmaskflag": { - "rev": "3ea4a8b4e5cc2ecf80ee408ecd0a213de44841c0" - } -} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index dfd552073..daa0cdc21 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,7 +1,7 @@ [profile.default] src = 'src' out = 'out' -libs = ['lib'] +libs = ['dependencies'] # See more config options https://github.com/foundry-rs/foundry/tree/master/config @@ -24,43 +24,54 @@ bytecode_hash = "none" cbor_metadata = false fs_permissions = [ - {access="read-write", path="./out/test/"}, - { access = "read-write", path = "./meta" }, - { access = "read-write", path = "src/generated" }, - { access = "write", path = "./deployments/latest/RainlangParser" }, - { access = "write", path = "./deployments/latest/RainlangStore" }, - { access = "write", path = "./deployments/latest/RainlangInterpreter" }, - { access = "write", path = "./deployments/latest/RainlangExpressionDeployer" } -] - -remappings = [ - # The auto remapping wasn't appending /src/ for some reason. - "forge-std/=lib/rain.interpreter.interface/lib/forge-std/src/", - "rain.metadata/=lib/rain.metadata/src/", - "rain.sol.codegen/=lib/rain.interpreter.interface/lib/rain.sol.codegen/src/", - "rain.solmem/=lib/rain.interpreter.interface/lib/rain.solmem/src/", - "openzeppelin-contracts/=lib/rain.interpreter.interface/lib/openzeppelin-contracts/", - "rain.math.float/=lib/rain.interpreter.interface/lib/rain.math.float/src/", - "rain.intorastring/=lib/rain.interpreter.interface/lib/rain.intorastring/src/", - "rain.deploy/=lib/rain.deploy/src/", - "rain.tofu.erc20-decimals/=lib/rain.tofu.erc20-decimals/src/", + { access = "read-write", path = "./out/test/" }, + { access = "read-write", path = "./meta" }, + { access = "read-write", path = "src/generated" }, + { access = "read-write", path = "./crates/abi" }, + { access = "read", path = "./out" }, + { access = "write", path = "./deployments/latest/RainlangParser" }, + { access = "write", path = "./deployments/latest/RainlangStore" }, + { access = "write", path = "./deployments/latest/RainlangInterpreter" }, + { access = "write", path = "./deployments/latest/RainlangExpressionDeployer" }, ] gas_limit = "18446744073709551615" +[dependencies] +forge-std = "1.16.1" +"@openzeppelin-contracts" = "5.6.1" +"rain-datacontract" = "0.1.0" +"rain-deploy" = "0.1.2" +"rain-extrospection" = "0.1.0" +"rain-interpreter-interface" = "0.1.0" +"rain-intorastring" = "0.1.0" +"rain-lib-hash" = "0.1.0" +"rain-lib-memkv" = "0.1.0" +"rain-lib-typecast" = "0.1.0" +"rain-math-binary" = "0.1.1" +"rain-math-float" = "0.1.1" +"rain-metadata" = "0.1.0" +"rain-sol-codegen" = "0.1.0" +"rain-solmem" = "0.1.3" +"rain-string" = "0.2.0" +"rain-tofu-erc20-decimals" = "0.1.1" + +[soldeer] +recursive_deps = false + [fuzz] runs = 2048 [rpc_endpoints] -arbitrum = "${CI_DEPLOY_ARBITRUM_RPC_URL}" -base = "${CI_DEPLOY_BASE_RPC_URL}" -base_sepolia = "${CI_DEPLOY_BASE_SEPOLIA_RPC_URL}" -flare = "${CI_DEPLOY_FLARE_RPC_URL}" -polygon = "${CI_DEPLOY_POLYGON_RPC_URL}" +arbitrum = "${ARBITRUM_RPC_URL}" +base = "${BASE_RPC_URL}" +base_sepolia = "${BASE_SEPOLIA_RPC_URL}" +flare = "${FLARE_RPC_URL}" +polygon = "${POLYGON_RPC_URL}" [etherscan] arbitrum = { key = "${CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY}" } base = { key = "${CI_DEPLOY_BASE_ETHERSCAN_API_KEY}" } base_sepolia = { key = "${CI_DEPLOY_BASE_SEPOLIA_ETHERSCAN_API_KEY}" } flare = { key = "${CI_DEPLOY_FLARE_ETHERSCAN_API_KEY}" } -polygon = { key = "${CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY}" } \ No newline at end of file +polygon = { key = "${CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY}" } diff --git a/lib/rain.deploy b/lib/rain.deploy deleted file mode 160000 index ccfdb378d..000000000 --- a/lib/rain.deploy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ccfdb378d2ab1ed95461ecf1355682250e487e4c diff --git a/lib/rain.extrospection b/lib/rain.extrospection deleted file mode 160000 index f9a46744a..000000000 --- a/lib/rain.extrospection +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f9a46744a66daf4004a3edc1d4387ae14a9dc8e4 diff --git a/lib/rain.interpreter.interface b/lib/rain.interpreter.interface deleted file mode 160000 index 58386557c..000000000 --- a/lib/rain.interpreter.interface +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 58386557c270301d4eeaa0b101f2326b0cf4db68 diff --git a/lib/rain.lib.memkv b/lib/rain.lib.memkv deleted file mode 160000 index 83e607990..000000000 --- a/lib/rain.lib.memkv +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 83e607990be8b3e06549338043c6b18f430f6bd2 diff --git a/lib/rain.metadata b/lib/rain.metadata deleted file mode 160000 index 182db238b..000000000 --- a/lib/rain.metadata +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 182db238b53895b8490ac13208b2580eab817f36 diff --git a/lib/rain.string b/lib/rain.string deleted file mode 160000 index 488f237cd..000000000 --- a/lib/rain.string +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 488f237cd59874e4eb91b5a4f747bd57578fec7f diff --git a/lib/rain.tofu.erc20-decimals b/lib/rain.tofu.erc20-decimals deleted file mode 160000 index bcf1f4524..000000000 --- a/lib/rain.tofu.erc20-decimals +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bcf1f45248a2e45a3e28dda06e21b3617610f86b diff --git a/lib/sol.lib.binmaskflag b/lib/sol.lib.binmaskflag deleted file mode 160000 index 3ea4a8b4e..000000000 --- a/lib/sol.lib.binmaskflag +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3ea4a8b4e5cc2ecf80ee408ecd0a213de44841c0 diff --git a/meta/AuthoringMeta.rain.meta b/meta/AuthoringMeta.rain.meta new file mode 100644 index 000000000..d7cb93f8d Binary files /dev/null and b/meta/AuthoringMeta.rain.meta differ diff --git a/meta/RainlangExpressionDeployer.rain.meta b/meta/RainlangExpressionDeployer.rain.meta new file mode 100644 index 000000000..59854716b Binary files /dev/null and b/meta/RainlangExpressionDeployer.rain.meta differ diff --git a/meta/RainlangReferenceExtern.rain.meta b/meta/RainlangReferenceExtern.rain.meta new file mode 100644 index 000000000..126d50d66 Binary files /dev/null and b/meta/RainlangReferenceExtern.rain.meta differ diff --git a/meta/RainlangReferenceExternAuthoringMeta.rain.meta b/meta/RainlangReferenceExternAuthoringMeta.rain.meta new file mode 100644 index 000000000..d71b74e4c Binary files /dev/null and b/meta/RainlangReferenceExternAuthoringMeta.rain.meta differ diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 000000000..5fe656ff6 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,17 @@ +@openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/ +forge-std-1.16.1/=dependencies/forge-std-1.16.1/ +rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/ +rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/ +rain-extrospection-0.1.0/=dependencies/rain-extrospection-0.1.0/ +rain-interpreter-interface-0.1.0/=dependencies/rain-interpreter-interface-0.1.0/ +rain-intorastring-0.1.0/=dependencies/rain-intorastring-0.1.0/ +rain-lib-hash-0.1.0/=dependencies/rain-lib-hash-0.1.0/ +rain-lib-memkv-0.1.0/=dependencies/rain-lib-memkv-0.1.0/ +rain-lib-typecast-0.1.0/=dependencies/rain-lib-typecast-0.1.0/ +rain-math-binary-0.1.1/=dependencies/rain-math-binary-0.1.1/ +rain-math-float-0.1.1/=dependencies/rain-math-float-0.1.1/ +rain-metadata-0.1.0/=dependencies/rain-metadata-0.1.0/ +rain-sol-codegen-0.1.0/=dependencies/rain-sol-codegen-0.1.0/ +rain-solmem-0.1.3/=dependencies/rain-solmem-0.1.3/ +rain-string-0.2.0/=dependencies/rain-string-0.2.0/ +rain-tofu-erc20-decimals-0.1.1/=dependencies/rain-tofu-erc20-decimals-0.1.1/ diff --git a/script/BuildAuthoringMeta.sol b/script/BuildAuthoringMeta.sol index 77cf34494..fcd47cd3e 100644 --- a/script/BuildAuthoringMeta.sol +++ b/script/BuildAuthoringMeta.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Script} from "forge-std/Script.sol"; +import {Script} from "forge-std-1.16.1/src/Script.sol"; import {LibAllStandardOps} from "../src/lib/op/LibAllStandardOps.sol"; import {LibRainlangReferenceExtern} from "../src/concrete/extern/RainlangReferenceExtern.sol"; diff --git a/script/BuildPointers.sol b/script/BuildPointers.sol index 4e7137528..0a9c4375c 100644 --- a/script/BuildPointers.sol +++ b/script/BuildPointers.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Script} from "forge-std/Script.sol"; +import {Script} from "forge-std-1.16.1/src/Script.sol"; import {RainlangInterpreter} from "../src/concrete/RainlangInterpreter.sol"; import {RainlangStore} from "../src/concrete/RainlangStore.sol"; import {RainlangParser, PARSE_META_BUILD_DEPTH} from "../src/concrete/RainlangParser.sol"; @@ -14,10 +14,10 @@ import { EXTERN_PARSE_META_BUILD_DEPTH } from "../src/concrete/extern/RainlangReferenceExtern.sol"; import {LibAllStandardOps} from "../src/lib/op/LibAllStandardOps.sol"; -import {LibCodeGen} from "rain.sol.codegen/lib/LibCodeGen.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; -import {LibFs} from "rain.sol.codegen/lib/LibFs.sol"; -import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; +import {LibCodeGen} from "rain-sol-codegen-0.1.0/src/lib/LibCodeGen.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibFs} from "rain-sol-codegen-0.1.0/src/lib/LibFs.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.2/src/lib/LibRainDeploy.sol"; /// @title BuildPointers /// @notice Forge script that generates Solidity source files containing diff --git a/script/CopyArtifacts.sol b/script/CopyArtifacts.sol new file mode 100644 index 000000000..b55ead670 --- /dev/null +++ b/script/CopyArtifacts.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Script} from "forge-std-1.16.1/src/Script.sol"; +import {LibCopyArtifacts} from "./lib/LibCopyArtifacts.sol"; + +contract CopyArtifacts is Script { + function run() external { + string[] memory names = LibCopyArtifacts.contracts(); + for (uint256 i = 0; i < names.length; i++) { + _copyAbi(names[i]); + } + } + + function _copyAbi(string memory contractName) internal { + bytes memory artifact = LibCopyArtifacts.extractStable(vm, contractName); + string memory dst = LibCopyArtifacts.committedPath(contractName); + if (vm.exists(dst)) { + //forge-lint: disable-next-line(unsafe-cheatcode) + vm.removeFile(dst); + } + //forge-lint: disable-next-line(unsafe-cheatcode) + vm.writeFile(dst, string(artifact)); + } +} diff --git a/script/Deploy.sol b/script/Deploy.sol index 686edfc39..bfb4f7495 100644 --- a/script/Deploy.sol +++ b/script/Deploy.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Script, console2} from "forge-std/Script.sol"; -import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; +import {Script, console2} from "forge-std-1.16.1/src/Script.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.2/src/lib/LibRainDeploy.sol"; import {LibInterpreterDeploy} from "../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibDecimalFloatDeploy} from "rain.math.float/lib/deploy/LibDecimalFloatDeploy.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; import {UnknownDeploymentSuite} from "../src/error/ErrDeploy.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; import {CREATION_CODE as PARSER_CREATION_CODE} from "../src/generated/RainlangParser.pointers.sol"; import {CREATION_CODE as STORE_CREATION_CODE} from "../src/generated/RainlangStore.pointers.sol"; import {CREATION_CODE as INTERPRETER_CREATION_CODE} from "../src/generated/RainlangInterpreter.pointers.sol"; diff --git a/script/lib/LibCopyArtifacts.sol b/script/lib/LibCopyArtifacts.sol new file mode 100644 index 000000000..83aa07891 --- /dev/null +++ b/script/lib/LibCopyArtifacts.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +import {Vm} from "forge-std-1.16.1/src/Vm.sol"; + +/// @notice Shared logic between `script/CopyArtifacts.sol` (writes the +/// committed ABI) and `test/script/CopyArtifacts.t.sol` (asserts the +/// committed ABI is fresh). +library LibCopyArtifacts { + /// @notice Contract artifacts that the Rust crates consume via + /// alloy::sol!. Adding a new contract here also requires the Rust + /// crate to reference it. + function contracts() internal pure returns (string[] memory) { + string[] memory names = new string[](11); + names[0] = "Rainlang"; + names[1] = "RainlangExpressionDeployer"; + names[2] = "RainlangInterpreter"; + names[3] = "RainlangParser"; + names[4] = "RainlangStore"; + names[5] = "TestERC20"; + names[6] = "IExpressionDeployerV3"; + names[7] = "IInterpreterStoreV3"; + names[8] = "IInterpreterV4"; + names[9] = "IParserPragmaV1"; + names[10] = "IParserV2"; + return names; + } + + /// @notice Path of the live forge build artifact for a contract. + function livePath(string memory contractName) internal pure returns (string memory) { + return string.concat("out/", contractName, ".sol/", contractName, ".json"); + } + + /// @notice Path of the committed ABI copy that the Rust crates read + /// at compile time. + function committedPath(string memory contractName) internal pure returns (string memory) { + return string.concat("crates/abi/", contractName, ".json"); + } + + /// @notice Extracts the deterministic subset of the live forge + /// artifact via `jq` over `vm.ffi`. The full forge JSON is + /// non-deterministic across machines (solc source unit IDs in + /// `metadata.sources`, `sourceMap` and friends shift with filesystem + /// enumeration order). The kept keys — `abi`, `bytecode.object`, + /// `deployedBytecode.object` — are pure functions of the input source + /// and compiler settings. alloy::sol! reads `abi` for type + /// generation; the bytecode fields are consumed by the Rust EVM + /// setup at runtime. + function extractStable(Vm vm, string memory contractName) internal returns (bytes memory) { + string[] memory cmd = new string[](3); + cmd[0] = "jq"; + cmd[1] = "{abi, bytecode: {object: .bytecode.object}, deployedBytecode: {object: .deployedBytecode.object}}"; + cmd[2] = livePath(contractName); + return vm.ffi(cmd); + } +} diff --git a/slither.config.json b/slither.config.json index c062e7657..73560ec3c 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,4 +1,4 @@ { - "detectors_to_exclude": "assembly-usage,solc-version,different-pragma-directives-are-used,unused-imports", - "filter_paths": "lib/rain.math.float,lib/openzeppelin-contracts,lib/prb-math,lib/rain.interpreter.interface,test/" + "detectors_to_exclude": "assembly-usage,solc-version,different-pragma-directives-are-used,unused-imports", + "filter_paths": "dependencies/" } diff --git a/soldeer.lock b/soldeer.lock new file mode 100644 index 000000000..25554712f --- /dev/null +++ b/soldeer.lock @@ -0,0 +1,118 @@ +[[dependencies]] +name = "@openzeppelin-contracts" +version = "5.6.1" +url = "https://soldeer-revisions.s3.amazonaws.com/@openzeppelin-contracts/5_6_1_15-03-2026_09:19:50_contracts.zip" +checksum = "a3b6bc661be858c7c27f60a1708cbebe8c71034b4cc1e9fe270d0a05b069352f" +integrity = "bce03af7ada1eee21a7fff393f238bcd7cd75a022a4db55ffb6b0dbb32433d35" + +[[dependencies]] +name = "forge-std" +version = "1.16.1" +url = "https://soldeer-revisions.s3.amazonaws.com/forge-std/1_16_1_08-05-2026_08:51:16_forge-std-1.16.zip" +checksum = "839b61832925c7152c7b6dffbfa4998d9e606211179bd8f604733124e8a7cb57" +integrity = "60e55d10150354ca4a1e2985c5456c834b92b82ef85ab0e1d92a7786cddbd219" + +[[dependencies]] +name = "rain-datacontract" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-datacontract/0_1_0_09-05-2026_20:00:31_rain.zip" +checksum = "81f6369a5e57da280d4598f0e909a66a432a1a8468c2f06b68dfdc2fe36745bd" +integrity = "f2e43fcbe27e7251ff981285271eec0a5ad49e1425dd02213f8a03df404f6670" + +[[dependencies]] +name = "rain-deploy" +version = "0.1.2" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-deploy/0_1_2_09-05-2026_19:49:20_rain.zip" +checksum = "94d3daf2f9f90062d2e676077c2b4ccd2bdd66201665a2209e98016e155f619a" +integrity = "10bff708d9e5d8b77655b8a8fc0c755cef8e3fc876cc3ff100425d27b08294a0" + +[[dependencies]] +name = "rain-extrospection" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-extrospection/0_1_0_11-05-2026_12:26:12_rain.zip" +checksum = "97297c3f1d623c63f5996b4266a4c26f895a1ca17ab271a619af601f8950521d" +integrity = "30f7e23c71b24267d2db46085049aec5baaa693825ff8bc8fd72bd685da479ad" + +[[dependencies]] +name = "rain-interpreter-interface" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-interpreter-interface/0_1_0_12-05-2026_18:43:02_rain.interpreter.zip" +checksum = "887c4d5f1a87713c49f015b3fcdb295defbb495b126d15f9850c0ce72ef79639" +integrity = "c1b89f8a7ad02507ceb051b6c0f2750f6abe1ba99ffdfe1c9ac93905db90e75d" + +[[dependencies]] +name = "rain-intorastring" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-intorastring/0_1_0_12-05-2026_19:21:48_rain.zip" +checksum = "6cd4b0e5ea0a7ffc8adef762b3687d180e4c1408ec4ff8bf8d88d5f9712bf5af" +integrity = "cad9d7a463dd388f73b1f2cf85dd212fd46320203f8d39cb0938ffb451295384" + +[[dependencies]] +name = "rain-lib-hash" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-lib-hash/0_1_0_12-05-2026_16:24:56_rain.lib.zip" +checksum = "648f3e38b297dbd3ecb32b82c8b24c322f484e1734eb50fd393bc547c72b59b0" +integrity = "91f5f679a0a27f096fdbc1e41195dd9f42cacfab15735efeb1101cc1b9215b47" + +[[dependencies]] +name = "rain-lib-memkv" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-lib-memkv/0_1_0_12-05-2026_19:04:20_rain.lib.zip" +checksum = "69142c50851359c0b19ba0e59c387623a90debd16fb1c3a907aa2809a6873b1f" +integrity = "f2a63c0466c50cbfb3b3545094890c74dd1116b55fcb738bb631471252cee5b8" + +[[dependencies]] +name = "rain-lib-typecast" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-lib-typecast/0_1_0_12-05-2026_16:31:39_rain.lib.zip" +checksum = "5c0419501e4c763ef161a3489934af192219f994cb2c9187699bc4dee0b4e2bb" +integrity = "092781f87fd9227c4c95aafde59300c503d6a9a355beaeb5c5732fe6e36676d6" + +[[dependencies]] +name = "rain-math-binary" +version = "0.1.1" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-math-binary/0_1_1_09-05-2026_19:49:57_rain.math.zip" +checksum = "6f966e4f5f59103b62de2004005db508824622495b893a646d0e2a35511f0093" +integrity = "4cfaa11c0e48ac46824a10fec2184863d114f09c171544b721d782386708dca7" + +[[dependencies]] +name = "rain-math-float" +version = "0.1.1" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-math-float/0_1_1_13-05-2026_13:48:34_rain.math.zip" +checksum = "322956f272ae3073ee02b0e7301b8834f08f2de62bcd6c309c44e946d7cd7056" +integrity = "dccdd4406a37db6af690872b805084a7dbe5211c57961a61ef083a7912ddbdc9" + +[[dependencies]] +name = "rain-metadata" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-metadata/0_1_0_12-05-2026_20:20:51_rain.zip" +checksum = "801d2b97b393d346c19a2f4f454d0279ba8f7d0f81fa3eb4fe8609da7291203d" +integrity = "f17f10aa50e9e2b254c689c83f41b3cabab81c95bad06424b9b3e9c92d02e577" + +[[dependencies]] +name = "rain-sol-codegen" +version = "0.1.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-sol-codegen/0_1_0_09-05-2026_20:30:25_rain.sol.zip" +checksum = "6b5abd394c5db86ac64214262b7a5115158f480b2fbd74442672dfe52bb67310" +integrity = "e22748ce2ba7eca3ce71e23b2271d1c0f370b989507e784b0a4850a7a9e52157" + +[[dependencies]] +name = "rain-solmem" +version = "0.1.3" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-solmem/0_1_3_09-05-2026_19:49:33_rain.zip" +checksum = "1d405bb81f7c9e56d1717de0d60da918d2fc2fa4db083efd2abe9906378d019f" +integrity = "e879d2743f9d884f647b9dd489889a83f2cea5f76eb69409a113e1baa69d3643" + +[[dependencies]] +name = "rain-string" +version = "0.2.0" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-string/0_2_0_09-05-2026_21:16:31_rain.zip" +checksum = "847b9366128c5dcc5849c6938ae7ac92561ed8185bf304f1b1eb9ef59d77954e" +integrity = "7cb6ee638b59b840ea59e014e2610fdccc30a1593e763590e298314f00700561" + +[[dependencies]] +name = "rain-tofu-erc20-decimals" +version = "0.1.1" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-tofu-erc20-decimals/0_1_1_12-05-2026_15:44:19_rain.tofu.zip" +checksum = "2a48a362ac80a85a8792492fcaf943a86a95009a8aeaced3b50554bbed1e5874" +integrity = "9e1fccf893dd0d90aeb445c78f9eee3904bc50287ff1da30b954508f18412cd2" diff --git a/src/abstract/BaseRainlangExtern.sol b/src/abstract/BaseRainlangExtern.sol index ce8e2d336..39299b71d 100644 --- a/src/abstract/BaseRainlangExtern.sol +++ b/src/abstract/BaseRainlangExtern.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { IInterpreterExternV4, ExternDispatchV2, StackItem -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; -import {IIntegrityToolingV1} from "rain.sol.codegen/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain.sol.codegen/interface/IOpcodeToolingV1.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; import {ExternOpcodeOutOfRange, ExternPointersMismatch, ExternOpcodePointersEmpty} from "../error/ErrExtern.sol"; import {OPCODE_FUNCTION_POINTER_SHIFT} from "../lib/eval/LibEval.sol"; diff --git a/src/abstract/BaseRainlangSubParser.sol b/src/abstract/BaseRainlangSubParser.sol index c03d0033e..11d59bd90 100644 --- a/src/abstract/BaseRainlangSubParser.sol +++ b/src/abstract/BaseRainlangSubParser.sol @@ -2,20 +2,20 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; // AuthoringMetaV2 exported for convenience. //forge-lint: disable-next-line(unused-import) -import {ISubParserV4, AuthoringMetaV2} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +import {ISubParserV4, AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {LibSubParse, ParseState} from "../lib/parse/LibSubParse.sol"; -import {CMASK_RHS_WORD_TAIL} from "rain.string/lib/parse/LibParseCMask.sol"; +import {CMASK_RHS_WORD_TAIL} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParse, OperandV2} from "../lib/parse/LibParse.sol"; -import {LibParseMeta} from "rain.interpreter.interface/lib/parse/LibParseMeta.sol"; +import {LibParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/parse/LibParseMeta.sol"; import {LibParseOperand} from "../lib/parse/LibParseOperand.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; -import {IParserToolingV1} from "rain.sol.codegen/interface/IParserToolingV1.sol"; -import {ISubParserToolingV1} from "rain.sol.codegen/interface/ISubParserToolingV1.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; import {SubParserIndexOutOfBounds} from "../error/ErrSubParse.sol"; /// @dev This is a placeholder for the subparser function pointers. diff --git a/src/concrete/Rainlang.sol b/src/concrete/Rainlang.sol index bf86e4d68..0d6993761 100644 --- a/src/concrete/Rainlang.sol +++ b/src/concrete/Rainlang.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {LibInterpreterDeploy} from "../lib/deploy/LibInterpreterDeploy.sol"; import {IRainlang} from "../interface/IRainlang.sol"; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; /// @title Rainlang /// @notice Rainlang contract that exposes the deterministic Zoltu deploy diff --git a/src/concrete/RainlangExpressionDeployer.sol b/src/concrete/RainlangExpressionDeployer.sol index 3471e1e1d..f104745db 100644 --- a/src/concrete/RainlangExpressionDeployer.sol +++ b/src/concrete/RainlangExpressionDeployer.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {IParserV2} from "rain.interpreter.interface/interface/IParserV2.sol"; -import {IParserPragmaV1, PragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {IParserV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {IParserPragmaV1, PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; import {LibIntegrityCheck} from "../lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterStateDataContract} from "../lib/state/LibInterpreterStateDataContract.sol"; @@ -16,7 +16,7 @@ import { INTEGRITY_FUNCTION_POINTERS, DESCRIBED_BY_META_HASH } from "../generated/RainlangExpressionDeployer.pointers.sol"; -import {IIntegrityToolingV1} from "rain.sol.codegen/interface/IIntegrityToolingV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; import {RainlangParser} from "./RainlangParser.sol"; import {LibInterpreterDeploy} from "../lib/deploy/LibInterpreterDeploy.sol"; diff --git a/src/concrete/RainlangInterpreter.sol b/src/concrete/RainlangInterpreter.sol index fa439fe2e..1e557ff73 100644 --- a/src/concrete/RainlangInterpreter.sol +++ b/src/concrete/RainlangInterpreter.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; -import {LibMemoryKV, MemoryKVKey, MemoryKVVal} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; +import {LibMemoryKV, MemoryKVKey, MemoryKVVal} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {LibEval} from "../lib/eval/LibEval.sol"; import {LibInterpreterStateDataContract} from "../lib/state/LibInterpreterStateDataContract.sol"; @@ -14,7 +14,7 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { // Exported for convenience. @@ -22,7 +22,7 @@ import { BYTECODE_HASH as INTERPRETER_BYTECODE_HASH, OPCODE_FUNCTION_POINTERS } from "../generated/RainlangInterpreter.pointers.sol"; -import {IOpcodeToolingV1} from "rain.sol.codegen/interface/IOpcodeToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; import {OddSetLength} from "../error/ErrStore.sol"; import {ZeroFunctionPointers} from "../error/ErrEval.sol"; diff --git a/src/concrete/RainlangParser.sol b/src/concrete/RainlangParser.sol index 85835d1e4..908324855 100644 --- a/src/concrete/RainlangParser.sol +++ b/src/concrete/RainlangParser.sol @@ -2,15 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; import {LibParse} from "../lib/parse/LibParse.sol"; -import {PragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; import {LibParseState, ParseState} from "../lib/parse/LibParseState.sol"; import {LibParsePragma} from "../lib/parse/LibParsePragma.sol"; import {LibAllStandardOps} from "../lib/op/LibAllStandardOps.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseInterstitial} from "../lib/parse/LibParseInterstitial.sol"; import { LITERAL_PARSER_FUNCTION_POINTERS, @@ -25,7 +25,7 @@ import { //forge-lint: disable-next-line(unused-import) PARSE_META_BUILD_DEPTH } from "../generated/RainlangParser.pointers.sol"; -import {IParserToolingV1} from "rain.sol.codegen/interface/IParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; /// @title RainlangParser /// @notice Converts Rainlang text to bytecode. diff --git a/src/concrete/RainlangStore.sol b/src/concrete/RainlangStore.sol index a99d98ff5..2a3a3e5f5 100644 --- a/src/concrete/RainlangStore.sol +++ b/src/concrete/RainlangStore.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {IInterpreterStoreV3} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; // Exported for convenience. //forge-lint: disable-next-line(unused-import) diff --git a/src/concrete/extern/RainlangReferenceExtern.sol b/src/concrete/extern/RainlangReferenceExtern.sol index f54dbf5c5..74c2c255b 100644 --- a/src/concrete/extern/RainlangReferenceExtern.sol +++ b/src/concrete/extern/RainlangReferenceExtern.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {BadDynamicLength} from "../../error/ErrOpList.sol"; import {BaseRainlangExtern, OperandV2} from "../../abstract/BaseRainlangExtern.sol"; import { @@ -36,8 +36,8 @@ import { INTEGRITY_FUNCTION_POINTERS, OPCODE_FUNCTION_POINTERS } from "../../generated/RainlangReferenceExtern.pointers.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; /// @dev The number of subparser functions available to the parser. This is NOT /// 1:1 with the number of opcodes provided by the extern component of this diff --git a/src/error/ErrExtern.sol b/src/error/ErrExtern.sol index 52adabfc5..0e2be373b 100644 --- a/src/error/ErrExtern.sol +++ b/src/error/ErrExtern.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {NotAnExternContract} from "rain.interpreter.interface/error/ErrExtern.sol"; +import {NotAnExternContract} from "rain-interpreter-interface-0.1.0/src/error/ErrExtern.sol"; /// @dev Workaround for https://github.com/foundry-rs/foundry/issues/6572 contract ErrExtern {} diff --git a/src/generated/Rainlang.pointers.sol b/src/generated/Rainlang.pointers.sol index 20f96498f..d1d7f43ec 100644 --- a/src/generated/Rainlang.pointers.sol +++ b/src/generated/Rainlang.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x986993ae9bce39b2b7396c4e3e0df86f4ffecd5bcc191cb38391ddd697a7254f); +bytes32 constant BYTECODE_HASH = bytes32(0xe17c8ef9fd3ce9ca757925db43efe36b433229ca276f9eb3b02743d62bbc3014); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x52F99eEff08a29fb1a7E7D7753d18caBeb28F8e7); +address constant DEPLOYED_ADDRESS = address(0x3836774dD66F5e9d11553c0c4a4088d457eC603E); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b73a0c9a33f4d13576ad0ae36cd431466ae641a951f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73db9a055c24070bfac87f1a44dbaf34ac5ef7cb056100a6565b73a8d499b9dcac7ec3373755e29911d9fa77ec79086100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; + hex"6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b73b3a710b89a5569893da4ca0db7d178593b5be8a06100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b73a0c9a33f4d13576ad0ae36cd431466ae641a951f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73db9a055c24070bfac87f1a44dbaf34ac5ef7cb056100a6565b73a8d499b9dcac7ec3373755e29911d9fa77ec79086100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b73b3a710b89a5569893da4ca0db7d178593b5be8a06100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; diff --git a/src/generated/RainlangExpressionDeployer.pointers.sol b/src/generated/RainlangExpressionDeployer.pointers.sol index 3f5862fbd..5ffe71dd9 100644 --- a/src/generated/RainlangExpressionDeployer.pointers.sol +++ b/src/generated/RainlangExpressionDeployer.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x0409d29b54fe5ae5521f88199f6b1f27a8dac4b01e1a4d158d641bbee6b2aced); +bytes32 constant BYTECODE_HASH = bytes32(0x5a63ce8a1036d4495c1b30104a217c5e90458b3d469d334695e72c2e6da0484b); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xdb9a055C24070bfAC87f1a44dbAF34Ac5Ef7cb05); +address constant DEPLOYED_ADDRESS = address(0xC9e1D673eD122193b28376016AC506De2fA20beE); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b50611ca88061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca2000000000000000000000000000000000000000000000000000000000815273a0c9a33f4d13576ad0ae36cd431466ae641a951f90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f90819073a0c9a33f4d13576ad0ae36cd431466ae641a951f90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; + hex"6080604052348015600e575f80fd5b50611ca88061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca2000000000000000000000000000000000000000000000000000000000815273a0c9a33f4d13576ad0ae36cd431466ae641a951f90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f90819073a0c9a33f4d13576ad0ae36cd431466ae641a951f90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; /// @dev The hash of the meta that describes the contract. bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a); diff --git a/src/generated/RainlangInterpreter.pointers.sol b/src/generated/RainlangInterpreter.pointers.sol index 002417ac7..b82710c94 100644 --- a/src/generated/RainlangInterpreter.pointers.sol +++ b/src/generated/RainlangInterpreter.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xd0eed479026380f56702b3ace685edf04dc64619bf77d15429ee3e119be2294e); +bytes32 constant BYTECODE_HASH = bytes32(0x02e5502324b8ee7b4f31bbfd4cc167f480dfeffb6bdd4486c2caabad96ab0ae4); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xA8d499b9DcAC7EC3373755E29911D9FA77EC7908); +address constant DEPLOYED_ADDRESS = address(0xb3A710b89A5569893dA4Ca0dB7D178593b5BE8a0); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"608060405234801561000f575f80fd5b5061001861003d565b515f0361003857604051632413c92160e01b815260040160405180910390fd5b61005d565b60606040518060c0016040528060908152602001615d4260909139905090565b615cd88061006a5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b61005661005136600461546b565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b60405161006291906154f6565b61009361008e366004615508565b610194565b604051610062929190615579565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b090886155f2565b6101bd608089018961560d565b6101c691615710565b6101ce61063c565b6101db60408b018b6157d3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c086018661560d565b610237929150615861565b156102895761024960c085018561560d565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c086018661560d565b905081101561031b576060820151610304906102b760c088018861560d565b848181106102c7576102c7615874565b90506020020135878060c001906102de919061560d565b6102e98660016158ce565b8181106102f8576102f8615874565b905060200201356107a7565b60608301526103146002826158ce565b905061028b565b5061038661032c60a086018661560d565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c4860909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b3615874565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a42615874565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae090879087906004016158e1565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615901565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf8615874565b60200260200101518281518110610c1157610c11615874565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc99190615982565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111359190615982565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112219190615982565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a9190615982565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190615982565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd9190615982565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd9190615999565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f9190615982565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190615999565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028091906154f6565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d3984848484613127565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d9286868686613127565b9096509450600101611d49565b5050611dab848461325d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613363565b906133c6565b80515f90610c6d8161340b565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134d3565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134d3565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc82736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d600282736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d81613d49565b80515f90610c6d81613def565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff00000000000000000000000000000000000000000000000000000005736421e8a23cdee2e6e579b2cdebc8c2a514843593612015612006886130d2565b61200f8a6130d2565b90613e3b565b9190613aee565b90508115158315151461123a5761114e81613e80565b80515f90612049816120438161340b565b90613eb2565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ef7565b805160208201516040909201915f91906120a28282613f3a565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f3a565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f56565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f56565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f61565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f61565b90965094506001016122f2565b80516020909101805190915f916115fd8282736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d81736421e8a23cdee2e6e579b2cdebc8c2a514843593614080565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e8848484846140ac565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250612441868686866140ac565b90965094506001016123f8565b805160208201516040909201805190925f929161152c61248882736421e8a23cdee2e6e579b2cdebc8c2a514843593612015866001613363565b8490613e3b565b805160208201516040909201805190925f929161152c6124af8383613e3b565b8490613363565b805160208201516040909201915f91906124d081836158ce565b9150600f601086901c1660025b818110156120d557855160209096019592506124f983856158ce565b93506001016124dd565b805160208201516040909201915f919061251d81836159b4565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159b4565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159c7565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159c7565b93506001016125c6565b805160208201516040909201915f91906126068183615afc565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615afc565b9350600101612613565b805160208201516040909201915f91906126538183615b07565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b07565b9350600101612660565b805160608401515f91908290819061269e90846140d6565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127499190615982565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c9615671565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a858561411d565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159b4565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061546390805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a606020896158ce565b97506128e5565b612a72601c89615b07565b9750612a7f8660046159c7565b612a8990896158ce565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac86004896158ce565b9750612a8c565b612adb8d8a8e8e61414c565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141df565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b1a565b5f805f805f612ef08787614285565b9250925092505f80612f02858561325d565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142e1565b91509150612f3d8282614343565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f898484848461439d565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd7848484846143b4565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d613026848484846143b4565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d613076848484846143b4565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c5848484846143b4565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c8282614488565b90925090505b5f61311d838361325d565b5095945050505050565b5f808515841517801561315357865f036131475784849250925050613254565b86869250925050613254565b61315d878761452b565b909750955061316c858561452b565b909550935085841315613180579395929492935b838603604c811115613199578787935093505050613254565b80600a0a86816131ab576131ab615834565b0595505086850180881860ff90811c151589881890911c1516801561324657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0361322d576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a96879005969098058601976001979097019661324a565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132c1577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156132a157620186a0860595506005850194505b8586601b0b146132bc57600a860595508460010194506132a1565b6132d7565b855f036132d757505f925060019150612f1b9050565b848560030b14613333575f8512156132f757505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a886868686613127565b915091505f6133b7838361325d565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a8868686866134d3565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261344257509192915050565b5f8061344e8484614581565b91509150805f03613463575093949350505050565b5f8113156134bc576134b782847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613127565b935091505b5f6134c7838561325d565b50979650505050505050565b5f80835f03613518576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361352957505f905080613254565b5f805f806135378a8a6145e9565b919b509950915061354888886145e9565b919950975090505f6135598b61488a565b90505f6135658a61488a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156139825784156135c357507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b613941565b6f4b3b4ca85a86c47a098a2240000000008310156136ef57678ac7230489e80000831015613653576402540be40083101561362157620186a08310156136115750620186a0905060056138ca565b506402540be4009050600a6138ca565b655af3107a40008310156136405750655af3107a40009050600e6138ca565b50678ac7230489e80000905060136138ca565b6b204fce5e3e250261100000008310156136a55769152d02c7e14af680000083101561368e575069152d02c7e14af6800000905060176138ca565b506b204fce5e3e250261100000009050601c6138ca565b6d314dc6448d9338c15b0a000000008310156136d457506d314dc6448d9338c15b0a00000000905060216138ca565b506f4b3b4ca85a86c47a098a224000000000905060266138ca565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137e75773af298d050e4395d69670b12b7f41000000000000831015613782577172cb5bd86321e38cb6ce6682e8000000000083101561376357507172cb5bd86321e38cb6ce6682e800000000009050602b6138ca565b5073af298d050e4395d69670b12b7f41000000000000905060306138ca565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137c3575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138ca565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138ca565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561387d577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561385557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138ca565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138ca565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138ca57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138fe57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138ca565b815f03613941576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b85613982576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d126139b557808d039c50613a28565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a2857807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b13613a1557998a0199613a28565b5f80995099505050505050505050613254565b5f808e128015613a3757505f8c135b15613a74577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a6c575f613a70565b808d035b9150505b8b818f01039750613a918f8e613a8b8887896148eb565b8b6149d0565b90995097505f811315613adb57604c811315613abb575f809a509a50505050505050505050613254565b80600a0a8981613acd57613acd615834565b059850885f03613adb575f97505b5096985094965061325495505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b2b5750600191506108769050565b5f8213613bc457815f03613b8857613b43855f613033565b15613b7d576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bcf856001612f46565b8015613be05750613be0865f612f94565b15613bef578592505050610876565b613bf9855f613033565b15613c2257613c19613c0a87613ef7565b613c1387613e80565b86613aee565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c558484614581565b915091505f613c6583855f614ad7565b905060015f8080613c9c8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ce35784600116600103613cc657613cc084848484613f61565b90945092505b600185901c9450613cd982828484613f61565b9092509050613ca1565b5f80613cf08f8e8e614bee565b91509150613d0082828a8d613f61565b9092509050613d108f8383614f23565b9092509050613d2182828888613f61565b90925090505f613d31838361325d565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d8057509192915050565b5f80613d8c8484614581565b915091505f84128015613d9e57508015155b156134bc576134b782847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46140ac565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e228383614581565b9150505f613e30828461325d565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a886868686613f61565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c8282614488565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a8868686866140ac565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d613f298282615094565b90925090505f80613e30848461325d565b5f613f458383612f94565b613f4f5781610876565b5090919050565b5f613f458383613033565b5f8085158415178015613f79575f92505f9150614076565b613f838487615b3a565b91505f613f8f8861488a565b90505f613f9b8761488a565b90505f613fa883836150ed565b5090505f6f0785ee10d5da46d900f436a000000000821115613fdd576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613ffe57670de0b6b3a7640000820491506012015b633b9aca0082111561401757633b9aca00820491506009015b61271082111561402c57612710820491506004015b811561404057600a8204915060010161402c565b61404a8187615b3a565b955061406c8b8a614066878761406187600a615afc565b6148eb565b896149d0565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613aee565b5f806140b88484614488565b90945092506140c986868686613127565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b8015614114578051850361410b576001935060208101519250614114565b604001516140ed565b50509250929050565b5f8061412884615128565b60020260010190505f61413b8585615142565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580614236575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614283576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142d057600a860460018201600a88065f14935093509350506142da565b8593509150600190505b9250925092565b5f805f805f6142f08787614285565b92509250925080614337576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f614350858561325d565b9150915080614395576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143aa858585856143b4565b1495945050505050565b5f80851584151781871282861218178584141780156143d95786859250925050613254565b505f858413156143ed575092949193919260015b8386035f8112604c8213178015614420578215614412575f8994509450505050613254565b885f94509450505050613254565b600a82900a8981028a82828161443857614438615834565b0514614464578415614454575f8b965096505050505050613254565b8a5f965096505050505050613254565b84156144795788965094506132549350505050565b95508794506132549350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403614521577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303614514576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f805f61453a87876145e9565b92509250925080614337576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f831261459457508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145c657505f905082612f1b565b5f839003600a0a8085816145dc576145dc615834565b0794859003959350505050565b5f805f845f0361460157505f915081905060016142da565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614815576f4b3b4ca85a86c47a098a224000000000850515801561466a57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561468b576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156146d357507f80000000000000000000000000000000000000000000000000000000000000138412155b156146ec57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561473857507f800000000000000000000000000000000000000000000000000000000000000a8412155b1561474e576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561479d57507f80000000000000000000000000000000000000000000000000000000000000028412155b156147b35760648502945060028403935061474e565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561480357507f80000000000000000000000000000000000000000000000000000000000000018412155b1561481557600a850294506001840393505b600a8086029081058614801561484b57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561485a578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f808212156148e7577f800000000000000000000000000000000000000000000000000000000000000082036148e157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f6148f886866150ed565b91509150815f0361491c5783818161491257614912615834565b0492505050610876565b838210614966576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614a9a577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614a8757614a2f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016158ce565b8403614a5f57507f8000000000000000000000000000000000000000000000000000000000000000905081613254565b614a6a600a856159b4565b614a7390615b61565b614a7e846001615b3a565b91509150613254565b614a9084615b61565b8391509150613254565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614acd57614a73600a856159b4565b5082905081613254565b5f818303614ae6575082610876565b82821315614b2957828203604c811380614b0057505f8113155b15614b0e575f915050610876565b80600a0a8581614b2057614b20615834565b05915050610876565b818303604c811380614b3b57505f8113155b15614b83576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614b9b57614b9b615834565b0514614be4576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614bfc828261452b565b90965094505f8613614c7d57855f03614c41576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cbb57614cb183604c615b3a565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d0a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d2c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614ee7575f805f805f85614d4557604b614d48565b604c5b614d52908a615b3a565b90505f8087614d7f577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614da0565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614dd257614dd2615834565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e0b8c82615198565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614e97576123278114614e7257614e4d8c82600101615198565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614e94565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614ec7838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461521f565b909a509850614ed88a8a835f613127565b97509750505050505050610974565b614ef18585615094565b9095509350614f01868686614bee565b9095509350614f108585614488565b9250925050610974565b50935093915050565b5f805f841215614f5f57614f378484614488565b9094509250614f47858585614f23565b9094509250614f568484615094565b91509150610974565b5f80614f6b8686614581565b9092509050845f8080614f7e85856152bc565b9194509250905061270d612710614f96600182615b91565b8514614fad57614fa78d86866153ab565b90925090505b8315615038575f614fbf866001615b3a565b90505b808485830281614fd457614fd4615834565b0514614feb57600a84059350600a88059750614fc2565b61502c614ff88588615bb7565b896150038785615bb7565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61521f565b909d509b5061505f9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b50505050508661507084835f614ad7565b61507b886001615b3a565b6150859190615b3a565b94509450505050935093915050565b5f806150e27f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134d3565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361513857505f919050565b50602001515f1a90565b5f61514c83615128565b82106151885781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c02565b50600202016003015161ffff1690565b5f806151a7600a6123286159b4565b6151b29060026159c7565b6151bd9060016158ce565b90505f6151cd600a6123286159b4565b90506002600a8504026001015f8052600281601e883c505f51617fff811693506180008116156151fc57918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152325750839050816152b0565b5f805f806152428c8b8f8d6140ac565b915091505f806152548a8a8d8c6140ac565b9150915061526484848484613f61565b8096508197505050505050505f8061527e8b8b8f8d6140ac565b915091505f80615290868686866134d3565b915091505f806152a284848f8e613127565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc036152f457508391505f905060016142da565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc841215615382577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561535357505f91505082151560016142da565b5f846004015f03600a0a90505f81878161536f5761536f615834565b05945050808402861415925090506142da565b5f841261539757505f915081905060016142da565b50505060048101600a0a82025f60016142da565b5f80806153bb600a6123286159b4565b6153c8600a6123286159b4565b6153d39060026159c7565b6153de9060016158ce565b6153e891906158ce565b6153f39060646158ce565b9050615437565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6154428582886153fa565b92508315614f1a576154586001860182886153fa565b915050935093915050565b614283615c1a565b5f6020828403121561547b575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154aa565b5f60208284031215615518575f80fd5b813567ffffffffffffffff81111561552e575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b8381101561556e57815187529582019590820190600101615552565b509495945050505050565b604081525f61558b604083018561553f565b8281036020848101919091528451808352858201928201905f5b818110156155c1578451835293830193918301916001016155a5565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146155ef575f80fd5b50565b5f60208284031215615602575f80fd5b8135610876816155ce565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615640575f80fd5b83018035915067ffffffffffffffff82111561565a575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156156e5576156e5615671565b604052919050565b5f67ffffffffffffffff82111561570657615706615671565b5060051b60200190565b5f61572261571d846156ed565b61569e565b83815260208082019190600586811b86013681111561573f575f80fd5b865b818110156157c657803567ffffffffffffffff81111561575f575f80fd5b880136601f82011261576f575f80fd5b803561577d61571d826156ed565b81815290851b82018601908681019036831115615798575f80fd5b928701925b828410156157b65783358252928701929087019061579d565b8952505050948301948301615741565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615806575f80fd5b83018035915067ffffffffffffffff821115615820575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261586f5761586f615834565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158a1565b828152604060208201525f6158f9604083018461553f565b949350505050565b5f6020808385031215615912575f80fd5b825167ffffffffffffffff811115615928575f80fd5b8301601f81018513615938575f80fd5b805161594661571d826156ed565b81815260059190911b82018301908381019087831115615964575f80fd5b928401925b82841015612f8957835182529284019290840190615969565b5f60208284031215615992575f80fd5b5051919050565b5f602082840312156159a9575f80fd5b8151610876816155ce565b5f826159c2576159c2615834565b500490565b808202811582820484141761017f5761017f6158a1565b600181815b80851115615a3757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a1d57615a1d6158a1565b80851615615a2a57918102915b93841c93908002906159e3565b509250929050565b5f82615a4d5750600161017f565b81615a5957505f61017f565b8160018114615a6f5760028114615a7957615a95565b600191505061017f565b60ff841115615a8a57615a8a6158a1565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615ab8575081810a61017f565b615ac283836159de565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615af457615af46158a1565b029392505050565b5f6108768383615a3f565b8181038181111561017f5761017f6158a1565b5f60208284031215615b2a575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b5957615b596158a1565b505092915050565b5f7f800000000000000000000000000000000000000000000000000000000000000082036148e1576148e16158a1565b8181035f831280158383131683831282161715615bb057615bb06158a1565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615bee57615bee6158a1565b818105831482151761017f5761017f6158a1565b828152604060208201525f6158f960408301846154aa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777"; + hex"608060405234801561000f575f80fd5b5061001861003d565b515f0361003857604051632413c92160e01b815260040160405180910390fd5b61005d565b60606040518060c0016040528060908152602001615d7760909139905090565b615d0d8061006a5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a0565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b604051610062919061552b565b61009361008e36600461553d565b610194565b6040516100629291906155ae565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b09088615627565b6101bd6080890189615642565b6101c691615745565b6101ce61063c565b6101db60408b018b615808565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615642565b610237929150615896565b156102895761024960c0850185615642565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615642565b905081101561031b576060820151610304906102b760c0880188615642565b848181106102c7576102c76158a9565b90506020020135878060c001906102de9190615642565b6102e9866001615903565b8181106102f8576102f86158a9565b905060200201356107a7565b6060830152610314600282615903565b905061028b565b5061038661032c60a0860186615642565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c7d60909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b36158a9565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158a9565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae09087908790600401615916565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615936565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158a9565b60200260200101518281518110610c1157610c116158a9565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159b7565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159b7565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122191906159b7565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a91906159b7565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159b7565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159b7565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159ce565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f91906159b7565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159ce565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610280919061552b565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d398484848461311d565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d928686868661311d565b9096509450600101611d49565b5050611dab8484613253565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613359565b906133bb565b80515f90610c6d81613400565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134bc565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134bc565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d81613d31565b80515f90610c6d81613dd7565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f5612015612006886130d2565b61200f8a6130d2565b90613e22565b9190613ad7565b90508115158315151461123a5761114e81613e67565b80515f906120498161204381613400565b90613e99565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ede565b805160208201516040909201915f91906120a28282613f10565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f10565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f2c565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f2c565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f37565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f37565b90965094506001016122f2565b80516020909101805190915f916115fd828273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f5614056565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e884848484614082565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244186868686614082565b90965094506001016123f8565b805160208201516040909201805190925f929161152c6124888273c51a14251b0dcf0ae24a96b7153991378938f5f5612015866001613359565b8490613e22565b805160208201516040909201805190925f929161152c6124af8383613e22565b8490613359565b805160208201516040909201915f91906124d08183615903565b9150600f601086901c1660025b818110156120d557855160209096019592506124f98385615903565b93506001016124dd565b805160208201516040909201915f919061251d81836159e9565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159e9565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159fc565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159fc565b93506001016125c6565b805160208201516040909201915f91906126068183615b31565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615b31565b9350600101612613565b805160208201516040909201915f91906126538183615b3c565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b3c565b9350600101612660565b805160608401515f91908290819061269e90846140ac565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274991906159b7565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c96156a6565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a85856140f3565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159e9565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549890805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a60602089615903565b97506128e5565b612a72601c89615b3c565b9750612a7f8660046159fc565b612a899089615903565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac8600489615903565b9750612a8c565b612adb8d8a8e8e614122565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141b5565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b4f565b5f805f805f612ef0878761425b565b9250925092505f80612f028585613253565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142b7565b91509150612f3d8282614319565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8984848484614373565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd78484848461438a565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130268484848461438a565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130768484848461438a565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c58484848461438a565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c828261445e565b90925090505b5f612f3d8383614501565b5f808515841517801561314957865f0361313d578484925092505061324a565b8686925092505061324a565b613153878761455f565b9097509550613162858561455f565b909550935085841315613176579395929492935b838603604c81111561318f57878793509350505061324a565b80600a0a86816131a1576131a1615869565b0595505086850180881860ff90811c151589881890911c1516801561323c57877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613223576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613240565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132b7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329757620186a0860595506005850194505b8586601b0b146132b257600a86059550846001019450613297565b6132cd565b855f036132cd57505f925060019150612f1b9050565b848560030b14613329575f8512156132ed57505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e8686868661311d565b915091505f6133ad8383614501565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e868686866134bc565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343757509192915050565b5f8061344384846145b5565b91509150805f03613458575093949350505050565b5f8113156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461311d565b935091505b5f612f898385614501565b5f80835f03613501576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351257505f90508061324a565b5f805f806135208a8a61461d565b919b5099509150613531888861461d565b919950975090505f6135428b6148be565b90505f61354e8a6148be565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c8183101561396b5784156135ac57507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b61392a565b6f4b3b4ca85a86c47a098a2240000000008310156136d857678ac7230489e8000083101561363c576402540be40083101561360a57620186a08310156135fa5750620186a0905060056138b3565b506402540be4009050600a6138b3565b655af3107a40008310156136295750655af3107a40009050600e6138b3565b50678ac7230489e80000905060136138b3565b6b204fce5e3e2502611000000083101561368e5769152d02c7e14af6800000831015613677575069152d02c7e14af6800000905060176138b3565b506b204fce5e3e250261100000009050601c6138b3565b6d314dc6448d9338c15b0a000000008310156136bd57506d314dc6448d9338c15b0a00000000905060216138b3565b506f4b3b4ca85a86c47a098a224000000000905060266138b3565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d05773af298d050e4395d69670b12b7f4100000000000083101561376b577172cb5bd86321e38cb6ce6682e8000000000083101561374c57507172cb5bd86321e38cb6ce6682e800000000009050602b6138b3565b5073af298d050e4395d69670b12b7f41000000000000905060306138b3565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137ac575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b3565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b3565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613866577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561383e57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b3565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b3565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b357507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138e757600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b3565b815f0361392a576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b8561396b576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261399e57808d039c50613a11565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1157807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b136139fe57998a0199613a11565b5f8099509950505050505050505061324a565b5f808e128015613a2057505f8c135b15613a5d577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a55575f613a59565b808d035b9150505b8b818f01039750613a7a8f8e613a7488878961491f565b8b614a04565b90995097505f811315613ac457604c811315613aa4575f809a509a5050505050505050505061324a565b80600a0a8981613ab657613ab6615869565b059850885f03613ac4575f97505b5096985094965061324a95505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b145750600191506108769050565b5f8213613bad57815f03613b7157613b2c855f613033565b15613b66576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bb8856001612f46565b8015613bc95750613bc9865f612f94565b15613bd8578592505050610876565b613be2855f613033565b15613c0b57613c02613bf387613ede565b613bfc87613e67565b86613ad7565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c3e84846145b5565b915091505f613c4e83855f614b0b565b905060015f8080613c858f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ccc5784600116600103613caf57613ca984848484613f37565b90945092505b600185901c9450613cc282828484613f37565b9092509050613c8a565b5f80613cd98f8e8e614c22565b91509150613ce982828a8d613f37565b9092509050613cf98f8383614f57565b9092509050613d0a82828888613f37565b90925090505f613d1a8383614501565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6857509192915050565b5f80613d7484846145b5565b915091505f84128015613d8657508015155b156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e0a83836145b5565b9150505f613e188284614501565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686613f37565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c828261445e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c82826150c8565b5f613f1b8383612f94565b613f255781610876565b5090919050565b5f613f1b8383613033565b5f8085158415178015613f4f575f92505f915061404c565b613f598487615b6f565b91505f613f65886148be565b90505f613f71876148be565b90505f613f7e8383615121565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fd457670de0b6b3a7640000820491506012015b633b9aca00821115613fed57633b9aca00820491506009015b61271082111561400257612710820491506004015b811561401657600a82049150600101614002565b6140208187615b6f565b95506140428b8a61403c878761403787600a615b31565b61491f565b89614a04565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613ad7565b5f8061408e848461445e565b909450925061409f8686868661311d565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140ea57805185036140e15760019350602081015192506140ea565b604001516140c3565b50509250929050565b5f806140fe8461515c565b60020260010190505f6141118585615176565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061420c575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614259576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142a657600a860460018201600a88065f14935093509350506142b0565b8593509150600190505b9250925092565b5f805f805f6142c6878761425b565b9250925092508061430d576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f6143268585613253565b915091508061436b576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143808585858561438a565b1495945050505050565b5f80851584151781871282861218178584141780156143af578685925092505061324a565b505f858413156143c3575092949193919260015b8386035f8112604c82131780156143f65782156143e8575f899450945050505061324a565b885f9450945050505061324a565b600a82900a8981028a82828161440e5761440e615869565b051461443a57841561442a575f8b96509650505050505061324a565b8a5f96509650505050505061324a565b841561444f57889650945061324a9350505050565b955087945061324a9350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144ea576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f61450e8585613253565b915091508015801561451e575081155b1561436b576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f61456e878761461d565b9250925092508061430d576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145c857508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145fa57505f905082612f1b565b5f839003600a0a80858161461057614610615869565b0794859003959350505050565b5f805f845f0361463557505f915081905060016142b0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614849576f4b3b4ca85a86c47a098a224000000000850515801561469e57507f80000000000000000000000000000000000000000000000000000000000000268412155b156146bf576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470757507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561476c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614782576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d157507f80000000000000000000000000000000000000000000000000000000000000028412155b156147e757606485029450600284039350614782565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483757507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484957600a850294506001840393505b600a8086029081058614801561487f57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561488e578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082121561491b577f8000000000000000000000000000000000000000000000000000000000000000820361491557507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f61492c8686615121565b91509150815f036149505783818161494657614946615869565b0492505050610876565b83821061499a576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ace577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614abb57614a637f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615903565b8403614a9357507f800000000000000000000000000000000000000000000000000000000000000090508161324a565b614a9e600a856159e9565b614aa790615b96565b614ab2846001615b6f565b9150915061324a565b614ac484615b96565b839150915061324a565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0157614aa7600a856159e9565b508290508161324a565b5f818303614b1a575082610876565b82821315614b5d57828203604c811380614b3457505f8113155b15614b42575f915050610876565b80600a0a8581614b5457614b54615869565b05915050610876565b818303604c811380614b6f57505f8113155b15614bb7576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bcf57614bcf615869565b0514614c18576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c30828261455f565b90965094505f8613614cb157855f03614c75576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cef57614ce583604c615b6f565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d3e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f1b575f805f805f85614d7957604b614d7c565b604c5b614d86908a615b6f565b90505f8087614db3577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dd4565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0657614e06615869565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e3f8c826151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ecb576123278114614ea657614e818c826001016151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ec8565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614efb838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615253565b909a509850614f0c8a8a835f61311d565b97509750505050505050610974565b614f2585856150c8565b9095509350614f35868686614c22565b9095509350614f44858561445e565b9250925050610974565b50935093915050565b5f805f841215614f9357614f6b848461445e565b9094509250614f7b858585614f57565b9094509250614f8a84846150c8565b91509150610974565b5f80614f9f86866145b5565b9092509050845f8080614fb285856152f0565b9194509250905061270d612710614fca600182615bc6565b8514614fe157614fdb8d86866153df565b90925090505b831561506c575f614ff3866001615b6f565b90505b80848583028161500857615008615869565b051461501f57600a84059350600a88059750614ff6565b61506061502c8588615bec565b896150378785615bec565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615253565b909d509b506150939050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150a484835f614b0b565b6150af886001615b6f565b6150b99190615b6f565b94509450505050935093915050565b5f806151167f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134bc565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361516c57505f919050565b50602001515f1a90565b5f6151808361515c565b82106151bc5781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c37565b50600202016003015161ffff1690565b5f806151db600a6123286159e9565b6151e69060026159fc565b6151f1906001615903565b90505f615201600a6123286159e9565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523057918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152665750839050816152e4565b5f805f806152768c8b8f8d614082565b915091505f806152888a8a8d8c614082565b9150915061529884848484613f37565b8096508197505050505050505f806152b28b8b8f8d614082565b915091505f806152c4868686866134bc565b915091505f806152d684848f8e61311d565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532857508391505f905060016142b0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538757505f91505082151560016142b0565b5f846004015f03600a0a90505f8187816153a3576153a3615869565b05945050808402861415925090506142b0565b5f84126153cb57505f915081905060016142b0565b50505060048101600a0a82025f60016142b0565b5f808060646153f1600a6123286159e9565b6153fe600a6123286159e9565b6154099060026159fc565b615414906001615903565b61541e9190615903565b6154289190615903565b905061546c565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547785828861542f565b92508315614f4e5761548d60018601828861542f565b915050935093915050565b614259615c4f565b5f602082840312156154b0575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154df565b5f6020828403121561554d575f80fd5b813567ffffffffffffffff811115615563575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a357815187529582019590820190600101615587565b509495945050505050565b604081525f6155c06040830185615574565b8281036020848101919091528451808352858201928201905f5b818110156155f6578451835293830193918301916001016155da565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114615624575f80fd5b50565b5f60208284031215615637575f80fd5b813561087681615603565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615675575f80fd5b83018035915067ffffffffffffffff82111561568f575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561571a5761571a6156a6565b604052919050565b5f67ffffffffffffffff82111561573b5761573b6156a6565b5060051b60200190565b5f61575761575284615722565b6156d3565b83815260208082019190600586811b860136811115615774575f80fd5b865b818110156157fb57803567ffffffffffffffff811115615794575f80fd5b880136601f8201126157a4575f80fd5b80356157b261575282615722565b81815290851b820186019086810190368311156157cd575f80fd5b928701925b828410156157eb578335825292870192908701906157d2565b8952505050948301948301615776565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583b575f80fd5b83018035915067ffffffffffffffff821115615855575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158a4576158a4615869565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158d6565b828152604060208201525f61592e6040830184615574565b949350505050565b5f6020808385031215615947575f80fd5b825167ffffffffffffffff81111561595d575f80fd5b8301601f8101851361596d575f80fd5b805161597b61575282615722565b81815260059190911b82018301908381019087831115615999575f80fd5b928401925b82841015612f895783518252928401929084019061599e565b5f602082840312156159c7575f80fd5b5051919050565b5f602082840312156159de575f80fd5b815161087681615603565b5f826159f7576159f7615869565b500490565b808202811582820484141761017f5761017f6158d6565b600181815b80851115615a6c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5257615a526158d6565b80851615615a5f57918102915b93841c9390800290615a18565b509250929050565b5f82615a825750600161017f565b81615a8e57505f61017f565b8160018114615aa45760028114615aae57615aca565b600191505061017f565b60ff841115615abf57615abf6158d6565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615aed575081810a61017f565b615af78383615a13565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2957615b296158d6565b029392505050565b5f6108768383615a74565b8181038181111561017f5761017f6158d6565b5f60208284031215615b5f575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b8e57615b8e6158d6565b505092915050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614915576149156158d6565b8181035f831280158383131683831282161715615be557615be56158d6565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2357615c236158d6565b818105831482151761017f5761017f6158d6565b828152604060208201525f61592e60408301846154df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b61005661005136600461546b565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b60405161006291906154f6565b61009361008e366004615508565b610194565b604051610062929190615579565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b090886155f2565b6101bd608089018961560d565b6101c691615710565b6101ce61063c565b6101db60408b018b6157d3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c086018661560d565b610237929150615861565b156102895761024960c085018561560d565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c086018661560d565b905081101561031b576060820151610304906102b760c088018861560d565b848181106102c7576102c7615874565b90506020020135878060c001906102de919061560d565b6102e98660016158ce565b8181106102f8576102f8615874565b905060200201356107a7565b60608301526103146002826158ce565b905061028b565b5061038661032c60a086018661560d565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c4860909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b3615874565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a42615874565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae090879087906004016158e1565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615901565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf8615874565b60200260200101518281518110610c1157610c11615874565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc99190615982565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111359190615982565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112219190615982565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a9190615982565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190615982565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd9190615982565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd9190615999565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f9190615982565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190615999565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028091906154f6565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d3984848484613127565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d9286868686613127565b9096509450600101611d49565b5050611dab848461325d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613363565b906133c6565b80515f90610c6d8161340b565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134d3565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134d3565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc82736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d600282736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d81613d49565b80515f90610c6d81613def565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff00000000000000000000000000000000000000000000000000000005736421e8a23cdee2e6e579b2cdebc8c2a514843593612015612006886130d2565b61200f8a6130d2565b90613e3b565b9190613aee565b90508115158315151461123a5761114e81613e80565b80515f90612049816120438161340b565b90613eb2565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ef7565b805160208201516040909201915f91906120a28282613f3a565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f3a565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f56565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f56565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f61565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f61565b90965094506001016122f2565b80516020909101805190915f916115fd8282736421e8a23cdee2e6e579b2cdebc8c2a514843593613aee565b80515f90610c6d81736421e8a23cdee2e6e579b2cdebc8c2a514843593614080565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e8848484846140ac565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250612441868686866140ac565b90965094506001016123f8565b805160208201516040909201805190925f929161152c61248882736421e8a23cdee2e6e579b2cdebc8c2a514843593612015866001613363565b8490613e3b565b805160208201516040909201805190925f929161152c6124af8383613e3b565b8490613363565b805160208201516040909201915f91906124d081836158ce565b9150600f601086901c1660025b818110156120d557855160209096019592506124f983856158ce565b93506001016124dd565b805160208201516040909201915f919061251d81836159b4565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159b4565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159c7565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159c7565b93506001016125c6565b805160208201516040909201915f91906126068183615afc565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615afc565b9350600101612613565b805160208201516040909201915f91906126538183615b07565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b07565b9350600101612660565b805160608401515f91908290819061269e90846140d6565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127499190615982565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c9615671565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a858561411d565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159b4565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061546390805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a606020896158ce565b97506128e5565b612a72601c89615b07565b9750612a7f8660046159c7565b612a8990896158ce565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac86004896158ce565b9750612a8c565b612adb8d8a8e8e61414c565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141df565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b1a565b5f805f805f612ef08787614285565b9250925092505f80612f02858561325d565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142e1565b91509150612f3d8282614343565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f898484848461439d565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd7848484846143b4565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d613026848484846143b4565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d613076848484846143b4565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c5848484846143b4565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c8282614488565b90925090505b5f61311d838361325d565b5095945050505050565b5f808515841517801561315357865f036131475784849250925050613254565b86869250925050613254565b61315d878761452b565b909750955061316c858561452b565b909550935085841315613180579395929492935b838603604c811115613199578787935093505050613254565b80600a0a86816131ab576131ab615834565b0595505086850180881860ff90811c151589881890911c1516801561324657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0361322d576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a96879005969098058601976001979097019661324a565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132c1577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156132a157620186a0860595506005850194505b8586601b0b146132bc57600a860595508460010194506132a1565b6132d7565b855f036132d757505f925060019150612f1b9050565b848560030b14613333575f8512156132f757505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a886868686613127565b915091505f6133b7838361325d565b509a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a8868686866134d3565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261344257509192915050565b5f8061344e8484614581565b91509150805f03613463575093949350505050565b5f8113156134bc576134b782847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613127565b935091505b5f6134c7838561325d565b50979650505050505050565b5f80835f03613518576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361352957505f905080613254565b5f805f806135378a8a6145e9565b919b509950915061354888886145e9565b919950975090505f6135598b61488a565b90505f6135658a61488a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156139825784156135c357507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b613941565b6f4b3b4ca85a86c47a098a2240000000008310156136ef57678ac7230489e80000831015613653576402540be40083101561362157620186a08310156136115750620186a0905060056138ca565b506402540be4009050600a6138ca565b655af3107a40008310156136405750655af3107a40009050600e6138ca565b50678ac7230489e80000905060136138ca565b6b204fce5e3e250261100000008310156136a55769152d02c7e14af680000083101561368e575069152d02c7e14af6800000905060176138ca565b506b204fce5e3e250261100000009050601c6138ca565b6d314dc6448d9338c15b0a000000008310156136d457506d314dc6448d9338c15b0a00000000905060216138ca565b506f4b3b4ca85a86c47a098a224000000000905060266138ca565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137e75773af298d050e4395d69670b12b7f41000000000000831015613782577172cb5bd86321e38cb6ce6682e8000000000083101561376357507172cb5bd86321e38cb6ce6682e800000000009050602b6138ca565b5073af298d050e4395d69670b12b7f41000000000000905060306138ca565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137c3575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138ca565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138ca565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561387d577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561385557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138ca565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138ca565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138ca57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138fe57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138ca565b815f03613941576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b85613982576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d126139b557808d039c50613a28565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a2857807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b13613a1557998a0199613a28565b5f80995099505050505050505050613254565b5f808e128015613a3757505f8c135b15613a74577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a6c575f613a70565b808d035b9150505b8b818f01039750613a918f8e613a8b8887896148eb565b8b6149d0565b90995097505f811315613adb57604c811315613abb575f809a509a50505050505050505050613254565b80600a0a8981613acd57613acd615834565b059850885f03613adb575f97505b5096985094965061325495505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b2b5750600191506108769050565b5f8213613bc457815f03613b8857613b43855f613033565b15613b7d576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bcf856001612f46565b8015613be05750613be0865f612f94565b15613bef578592505050610876565b613bf9855f613033565b15613c2257613c19613c0a87613ef7565b613c1387613e80565b86613aee565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c558484614581565b915091505f613c6583855f614ad7565b905060015f8080613c9c8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ce35784600116600103613cc657613cc084848484613f61565b90945092505b600185901c9450613cd982828484613f61565b9092509050613ca1565b5f80613cf08f8e8e614bee565b91509150613d0082828a8d613f61565b9092509050613d108f8383614f23565b9092509050613d2182828888613f61565b90925090505f613d31838361325d565b509e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d8057509192915050565b5f80613d8c8484614581565b915091505f84128015613d9e57508015155b156134bc576134b782847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46140ac565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e228383614581565b9150505f613e30828461325d565b509695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a886868686613f61565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c8282614488565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a8868686866140ac565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d613f298282615094565b90925090505f80613e30848461325d565b5f613f458383612f94565b613f4f5781610876565b5090919050565b5f613f458383613033565b5f8085158415178015613f79575f92505f9150614076565b613f838487615b3a565b91505f613f8f8861488a565b90505f613f9b8761488a565b90505f613fa883836150ed565b5090505f6f0785ee10d5da46d900f436a000000000821115613fdd576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613ffe57670de0b6b3a7640000820491506012015b633b9aca0082111561401757633b9aca00820491506009015b61271082111561402c57612710820491506004015b811561404057600a8204915060010161402c565b61404a8187615b3a565b955061406c8b8a614066878761406187600a615afc565b6148eb565b896149d0565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613aee565b5f806140b88484614488565b90945092506140c986868686613127565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b8015614114578051850361410b576001935060208101519250614114565b604001516140ed565b50509250929050565b5f8061412884615128565b60020260010190505f61413b8585615142565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580614236575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614283576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142d057600a860460018201600a88065f14935093509350506142da565b8593509150600190505b9250925092565b5f805f805f6142f08787614285565b92509250925080614337576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f614350858561325d565b9150915080614395576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143aa858585856143b4565b1495945050505050565b5f80851584151781871282861218178584141780156143d95786859250925050613254565b505f858413156143ed575092949193919260015b8386035f8112604c8213178015614420578215614412575f8994509450505050613254565b885f94509450505050613254565b600a82900a8981028a82828161443857614438615834565b0514614464578415614454575f8b965096505050505050613254565b8a5f965096505050505050613254565b84156144795788965094506132549350505050565b95508794506132549350505050565b5f807f80000000000000000000000000000000000000000000000000000000000000008403614521577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303614514576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f805f61453a87876145e9565b92509250925080614337576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f831261459457508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145c657505f905082612f1b565b5f839003600a0a8085816145dc576145dc615834565b0794859003959350505050565b5f805f845f0361460157505f915081905060016142da565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614815576f4b3b4ca85a86c47a098a224000000000850515801561466a57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561468b576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156146d357507f80000000000000000000000000000000000000000000000000000000000000138412155b156146ec57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561473857507f800000000000000000000000000000000000000000000000000000000000000a8412155b1561474e576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561479d57507f80000000000000000000000000000000000000000000000000000000000000028412155b156147b35760648502945060028403935061474e565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561480357507f80000000000000000000000000000000000000000000000000000000000000018412155b1561481557600a850294506001840393505b600a8086029081058614801561484b57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561485a578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f808212156148e7577f800000000000000000000000000000000000000000000000000000000000000082036148e157507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f6148f886866150ed565b91509150815f0361491c5783818161491257614912615834565b0492505050610876565b838210614966576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614a9a577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614a8757614a2f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016158ce565b8403614a5f57507f8000000000000000000000000000000000000000000000000000000000000000905081613254565b614a6a600a856159b4565b614a7390615b61565b614a7e846001615b3a565b91509150613254565b614a9084615b61565b8391509150613254565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614acd57614a73600a856159b4565b5082905081613254565b5f818303614ae6575082610876565b82821315614b2957828203604c811380614b0057505f8113155b15614b0e575f915050610876565b80600a0a8581614b2057614b20615834565b05915050610876565b818303604c811380614b3b57505f8113155b15614b83576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614b9b57614b9b615834565b0514614be4576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614bfc828261452b565b90965094505f8613614c7d57855f03614c41576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cbb57614cb183604c615b3a565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d0a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d2c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614ee7575f805f805f85614d4557604b614d48565b604c5b614d52908a615b3a565b90505f8087614d7f577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614da0565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614dd257614dd2615834565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e0b8c82615198565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614e97576123278114614e7257614e4d8c82600101615198565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614e94565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614ec7838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461521f565b909a509850614ed88a8a835f613127565b97509750505050505050610974565b614ef18585615094565b9095509350614f01868686614bee565b9095509350614f108585614488565b9250925050610974565b50935093915050565b5f805f841215614f5f57614f378484614488565b9094509250614f47858585614f23565b9094509250614f568484615094565b91509150610974565b5f80614f6b8686614581565b9092509050845f8080614f7e85856152bc565b9194509250905061270d612710614f96600182615b91565b8514614fad57614fa78d86866153ab565b90925090505b8315615038575f614fbf866001615b3a565b90505b808485830281614fd457614fd4615834565b0514614feb57600a84059350600a88059750614fc2565b61502c614ff88588615bb7565b896150038785615bb7565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61521f565b909d509b5061505f9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b50505050508661507084835f614ad7565b61507b886001615b3a565b6150859190615b3a565b94509450505050935093915050565b5f806150e27f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134d3565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361513857505f919050565b50602001515f1a90565b5f61514c83615128565b82106151885781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c02565b50600202016003015161ffff1690565b5f806151a7600a6123286159b4565b6151b29060026159c7565b6151bd9060016158ce565b90505f6151cd600a6123286159b4565b90506002600a8504026001015f8052600281601e883c505f51617fff811693506180008116156151fc57918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152325750839050816152b0565b5f805f806152428c8b8f8d6140ac565b915091505f806152548a8a8d8c6140ac565b9150915061526484848484613f61565b8096508197505050505050505f8061527e8b8b8f8d6140ac565b915091505f80615290868686866134d3565b915091505f806152a284848f8e613127565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc036152f457508391505f905060016142da565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc841215615382577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561535357505f91505082151560016142da565b5f846004015f03600a0a90505f81878161536f5761536f615834565b05945050808402861415925090506142da565b5f841261539757505f915081905060016142da565b50505060048101600a0a82025f60016142da565b5f80806153bb600a6123286159b4565b6153c8600a6123286159b4565b6153d39060026159c7565b6153de9060016158ce565b6153e891906158ce565b6153f39060646158ce565b9050615437565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b6154428582886153fa565b92508315614f1a576154586001860182886153fa565b915050935093915050565b614283615c1a565b5f6020828403121561547b575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154aa565b5f60208284031215615518575f80fd5b813567ffffffffffffffff81111561552e575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b8381101561556e57815187529582019590820190600101615552565b509495945050505050565b604081525f61558b604083018561553f565b8281036020848101919091528451808352858201928201905f5b818110156155c1578451835293830193918301916001016155a5565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146155ef575f80fd5b50565b5f60208284031215615602575f80fd5b8135610876816155ce565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615640575f80fd5b83018035915067ffffffffffffffff82111561565a575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156156e5576156e5615671565b604052919050565b5f67ffffffffffffffff82111561570657615706615671565b5060051b60200190565b5f61572261571d846156ed565b61569e565b83815260208082019190600586811b86013681111561573f575f80fd5b865b818110156157c657803567ffffffffffffffff81111561575f575f80fd5b880136601f82011261576f575f80fd5b803561577d61571d826156ed565b81815290851b82018601908681019036831115615798575f80fd5b928701925b828410156157b65783358252928701929087019061579d565b8952505050948301948301615741565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615806575f80fd5b83018035915067ffffffffffffffff821115615820575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261586f5761586f615834565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158a1565b828152604060208201525f6158f9604083018461553f565b949350505050565b5f6020808385031215615912575f80fd5b825167ffffffffffffffff811115615928575f80fd5b8301601f81018513615938575f80fd5b805161594661571d826156ed565b81815260059190911b82018301908381019087831115615964575f80fd5b928401925b82841015612f8957835182529284019290840190615969565b5f60208284031215615992575f80fd5b5051919050565b5f602082840312156159a9575f80fd5b8151610876816155ce565b5f826159c2576159c2615834565b500490565b808202811582820484141761017f5761017f6158a1565b600181815b80851115615a3757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a1d57615a1d6158a1565b80851615615a2a57918102915b93841c93908002906159e3565b509250929050565b5f82615a4d5750600161017f565b81615a5957505f61017f565b8160018114615a6f5760028114615a7957615a95565b600191505061017f565b60ff841115615a8a57615a8a6158a1565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615ab8575081810a61017f565b615ac283836159de565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615af457615af46158a1565b029392505050565b5f6108768383615a3f565b8181038181111561017f5761017f6158a1565b5f60208284031215615b2a575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b5957615b596158a1565b505092915050565b5f7f800000000000000000000000000000000000000000000000000000000000000082036148e1576148e16158a1565b8181035f831280158383131683831282161715615bb057615bb06158a1565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615bee57615bee6158a1565b818105831482151761017f5761017f6158a1565b828152604060208201525f6158f960408301846154aa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777"; + hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a0565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b604051610062919061552b565b61009361008e36600461553d565b610194565b6040516100629291906155ae565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b09088615627565b6101bd6080890189615642565b6101c691615745565b6101ce61063c565b6101db60408b018b615808565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615642565b610237929150615896565b156102895761024960c0850185615642565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615642565b905081101561031b576060820151610304906102b760c0880188615642565b848181106102c7576102c76158a9565b90506020020135878060c001906102de9190615642565b6102e9866001615903565b8181106102f8576102f86158a9565b905060200201356107a7565b6060830152610314600282615903565b905061028b565b5061038661032c60a0860186615642565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d6102008301526112486102208301526113ea61024083018190526115396102608401526116096102808401526116cd6102a084015261181c6102c08401526102e083015261190a6103008301526119396103208301819052610340830152611968610360830152611997610380830152611a1f6103a0830152611a336103c0830152611b206103e0830152611b84610400830152611b9c610420830152611c17610440830152611c2f610460830152611c47610480830152611c806104a0830152611caa6104c0830152611cc26104e0830152611cda610500830152611ce7610520830152611de2610540830152611e04610560830152611e11610580830152611ec96105a0830152611f186105c0830152611f5b6105e0830152611f7f610600830152611f8c610620830152611f9961064083015261203261066083015261207b6106808301526120886106a08301526121076106c08301526121566106e08301526121a56107008301526121f26107208301526122416107408301526122906107608301526123486107808301526123746107a08301526123966107c083015261244e6107e083015261248f6108008301526124b661082083015261250361084083015261255061086083015261259f6108808301526125ec6108a08301526126396108c08301526126866108e08301526127776109008301529190819080610633816127a9565b94505050505090565b60606040518060c0016040528060908152602001615c7d60909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e00151886040015161282d565b915091505f80885f01518960400151815181106108b3576108b36158a9565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612850565b505b61093c898a60400151838561285c565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612aed565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158a9565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae09087908790600401615916565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f9190810190615936565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158a9565b60200260200101518281518110610c1157610c116158a9565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d60565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b82848661285c565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff168214610ede576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114610f30576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159b7565b90505f610fd585612e38565b90505f610fe28383612ee1565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff1681146110a4576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159b7565b90505f61114184612e38565b90505f61114e8383612f22565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122191906159b7565b90505f61122d83612e38565b90505f61123a8383612f22565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112ad576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b8173ffffffffffffffffffffffffffffffffffffffff1682146112ff576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff168114611351576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a91906159b7565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611449576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461149b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159b7565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461158f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159b7565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff8116811461165f576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f8173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fd91906159ce565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461172c576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b8073ffffffffffffffffffffffffffffffffffffffff16811461177e576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f91906159b7565b90505f61123a825f612f22565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461187b576040517f0255ddd800000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c91906159ce565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0857828652611a13565b8160200191506119d0565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a6a57805194505b5f5b81831015611ab55750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611aaa5760208301518952611ab5565b826040019250611a6c565b8015611b1157604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610280919061552b565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b7a57604080518082019091525f6020820152600882901c601f8316808301919091528152611ade565b5091949350505050565b80516020909101805190915f918261152c8383612f46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1357815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c0c575f8652611a13565b816020019150611bd5565b80516020909101805190915f918261152c8383612f94565b80516020909101805190915f918261152c8383612fe3565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156115fd565b80516020909101805190915f918261152c8383613033565b80516020909101805190915f918261152c8383613082565b80515f90610c6d816130d2565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d398484848461311d565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d928686868661311d565b9096509450600101611d49565b5050611dab8484613253565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916115fd6002611dfe8484613359565b906133bb565b80515f90610c6d81613400565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e63848484846134bc565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ebc868686866134bc565b9096509450600101611e73565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d81613d31565b80515f90610c6d81613dd7565b80516020909101805190915f9182611fb18382613033565b90505f611fbe8382613033565b90505f61201c7fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f5612015612006886130d2565b61200f8a6130d2565b90613e22565b9190613ad7565b90508115158315151461123a5761114e81613e67565b80515f906120498161204381613400565b90613e99565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612072575060015b82525092915050565b80515f90610c6d81613ede565b805160208201516040909201915f91906120a28282613f10565b9150600f601086901c1660025b818110156120d557855160209096019592506120cb8484613f10565b93506001016120af565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121bf8282613f2c565b9150600f601086901c1660025b818110156120d557855160209096019592506121e88484613f2c565b93506001016121cc565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e284848484613f37565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061233b86868686613f37565b90965094506001016122f2565b80516020909101805190915f916115fd828273c51a14251b0dcf0ae24a96b7153991378938f5f5613ad7565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f5614056565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123e884848484614082565b9094509250600f60108a901c1660025b81811015611d9f5789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244186868686614082565b90965094506001016123f8565b805160208201516040909201805190925f929161152c6124888273c51a14251b0dcf0ae24a96b7153991378938f5f5612015866001613359565b8490613e22565b805160208201516040909201805190925f929161152c6124af8383613e22565b8490613359565b805160208201516040909201915f91906124d08183615903565b9150600f601086901c1660025b818110156120d557855160209096019592506124f98385615903565b93506001016124dd565b805160208201516040909201915f919061251d81836159e9565b9150600f601086901c1660025b818110156120d5578551602090960195925061254683856159e9565b935060010161252a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125b981836159fc565b9150600f601086901c1660025b818110156120d557855160209096019592506125e283856159fc565b93506001016125c6565b805160208201516040909201915f91906126068183615b31565b9150600f601086901c1660025b818110156120d5578551602090960195925061262f8385615b31565b9350600101612613565b805160208201516040909201915f91906126538183615b3c565b9150600f601086901c1660025b818110156120d5578551602090960195925061267c8385615b3c565b9350600101612660565b805160608401515f91908290819061269e90846140ac565b91509150815f036127685760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa158015612725573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274991906159b7565b606089015190915061275c9085836107a7565b6060890152855261276c565b8085525b509295945050505050565b8051602082015160608501516040909301925f9291906127989083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127c9576127c96156a6565b6040519080825280601f01601f1916602001820160405280156127f3576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a135780518351861690851617815260209092019160020161280b565b5f805f61283a85856140f3565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161287d91906159e9565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549890805b86881015612a675787519050600284825f1a060285015160f01c925062ffffff8160e01c16915061291b8e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c1691506129488e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c1691506129758e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a28e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129cf8e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c1691506129fc8e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a298e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a538e838e8663ffffffff16565b9b50612a60602089615903565b97506128e5565b612a72601c89615b3c565b9750612a7f8660046159fc565b612a899089615903565b96505b86881015612acf5750508551601c81901a83900660020284015160f01c915062ffffff811690612abb8e838e86565b9b50612ac8600489615903565b9750612a8c565b612adb8d8a8e8e614122565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b59565b5f5b8215612b5357825182526020830151602083015260408301519250604082019150612b2d565b50919050565b602085018660101b60901c8015612c49578060401c8015612bc7578060201c8015612b8b57612b888185612b2b565b93505b508086168015612bc5578060101c8015612bac57612ba98186612b2b565b94505b508088168015612bc357612bc08186612b2b565b94505b505b505b508084168015612c47578060201c8015612c0b578060101c8015612bf257612bef8186612b2b565b94505b508088168015612c0957612c068186612b2b565b94505b505b508086168015612c45578060101c8015612c2c57612c298186612b2b565b94505b508088168015612c4357612c408186612b2b565b94505b505b505b505b508682168015612d55578060401c8015612cd3578060201c8015612c97578060101c8015612c7e57612c7b8186612b2b565b94505b508088168015612c9557612c928186612b2b565b94505b505b508086168015612cd1578060101c8015612cb857612cb58186612b2b565b94505b508088168015612ccf57612ccc8186612b2b565b94505b505b505b508084168015612d53578060201c8015612d17578060101c8015612cfe57612cfb8186612b2b565b94505b508088168015612d1557612d128186612b2b565b94505b505b508086168015612d51578060101c8015612d3857612d358186612b2b565b94505b508088168015612d4f57612d4c8186612b2b565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d915750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e416141b5565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ebd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b4f565b5f805f805f612ef0878761425b565b9250925092505f80612f028585613253565b9150915081838015612f115750815b9650965050505050505b9250929050565b5f805f612f2f85856142b7565b91509150612f3d8282614319565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8984848484614373565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fd78484848461438a565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130268484848461438a565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130768484848461438a565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130c58484848461438a565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828212156131125761310c828261445e565b90925090505b5f612f3d8383614501565b5f808515841517801561314957865f0361313d578484925092505061324a565b8686925092505061324a565b613153878761455f565b9097509550613162858561455f565b909550935085841315613176579395929492935b838603604c81111561318f57878793509350505061324a565b80600a0a86816131a1576131a1615869565b0595505086850180881860ff90811c151589881890911c1516801561323c57877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613223576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613240565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132b7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329757620186a0860595506005850194505b8586601b0b146132b257600a86059550846001019450613297565b6132cd565b855f036132cd57505f925060019150612f1b9050565b848560030b14613329575f8512156132ed57505f9250829150612f1b9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e8686868661311d565b915091505f6133ad8383614501565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e868686866134bc565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343757509192915050565b5f8061344384846145b5565b91509150805f03613458575093949350505050565b5f8113156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb461311d565b935091505b5f612f898385614501565b5f80835f03613501576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351257505f90508061324a565b5f805f806135208a8a61461d565b919b5099509150613531888861461d565b919950975090505f6135428b6148be565b90505f61354e8a6148be565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c8183101561396b5784156135ac57507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b61392a565b6f4b3b4ca85a86c47a098a2240000000008310156136d857678ac7230489e8000083101561363c576402540be40083101561360a57620186a08310156135fa5750620186a0905060056138b3565b506402540be4009050600a6138b3565b655af3107a40008310156136295750655af3107a40009050600e6138b3565b50678ac7230489e80000905060136138b3565b6b204fce5e3e2502611000000083101561368e5769152d02c7e14af6800000831015613677575069152d02c7e14af6800000905060176138b3565b506b204fce5e3e250261100000009050601c6138b3565b6d314dc6448d9338c15b0a000000008310156136bd57506d314dc6448d9338c15b0a00000000905060216138b3565b506f4b3b4ca85a86c47a098a224000000000905060266138b3565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d05773af298d050e4395d69670b12b7f4100000000000083101561376b577172cb5bd86321e38cb6ce6682e8000000000083101561374c57507172cb5bd86321e38cb6ce6682e800000000009050602b6138b3565b5073af298d050e4395d69670b12b7f41000000000000905060306138b3565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137ac575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b3565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b3565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613866577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561383e57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b3565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b3565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b357507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138e757600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b3565b815f0361392a576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b8561396b576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261399e57808d039c50613a11565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1157807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b136139fe57998a0199613a11565b5f8099509950505050505050505061324a565b5f808e128015613a2057505f8c135b15613a5d577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a55575f613a59565b808d035b9150505b8b818f01039750613a7a8f8e613a7488878961491f565b8b614a04565b90995097505f811315613ac457604c811315613aa4575f809a509a5050505050505050505061324a565b80600a0a8981613ab657613ab6615869565b059850885f03613ac4575f97505b5096985094965061324a95505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b145750600191506108769050565b5f8213613bad57815f03613b7157613b2c855f613033565b15613b66576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bb8856001612f46565b8015613bc95750613bc9865f612f94565b15613bd8578592505050610876565b613be2855f613033565b15613c0b57613c02613bf387613ede565b613bfc87613e67565b86613ad7565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c3e84846145b5565b915091505f613c4e83855f614b0b565b905060015f8080613c858f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613ccc5784600116600103613caf57613ca984848484613f37565b90945092505b600185901c9450613cc282828484613f37565b9092509050613c8a565b5f80613cd98f8e8e614c22565b91509150613ce982828a8d613f37565b9092509050613cf98f8383614f57565b9092509050613d0a82828888613f37565b90925090505f613d1a8383614501565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6857509192915050565b5f80613d7484846145b5565b915091505f84128015613d8657508015155b156134b1576134ac82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e0a83836145b5565b9150505f613e188284614501565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686613f37565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c828261445e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061339e86868686614082565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61310c82826150c8565b5f613f1b8383612f94565b613f255781610876565b5090919050565b5f613f1b8383613033565b5f8085158415178015613f4f575f92505f915061404c565b613f598487615b6f565b91505f613f65886148be565b90505f613f71876148be565b90505f613f7e8383615121565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fd457670de0b6b3a7640000820491506012015b633b9aca00821115613fed57633b9aca00820491506009015b61271082111561400257612710820491506004015b811561401657600a82049150600101614002565b6140208187615b6f565b95506140428b8a61403c878761403787600a615b31565b61491f565b89614a04565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613ad7565b5f8061408e848461445e565b909450925061409f8686868661311d565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140ea57805185036140e15760019350602081015192506140ea565b604001516140c3565b50509250929050565b5f806140fe8461515c565b60020260010190505f6141118585615176565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061420c575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15614259576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142a657600a860460018201600a88065f14935093509350506142b0565b8593509150600190505b9250925092565b5f805f805f6142c6878761425b565b9250925092508061430d576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f6143268585613253565b915091508061436b576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f6143808585858561438a565b1495945050505050565b5f80851584151781871282861218178584141780156143af578685925092505061324a565b505f858413156143c3575092949193919260015b8386035f8112604c82131780156143f65782156143e8575f899450945050505061324a565b885f9450945050505061324a565b600a82900a8981028a82828161440e5761440e615869565b051461443a57841561442a575f8b96509650505050505061324a565b8a5f96509650505050505061324a565b841561444f57889650945061324a9350505050565b955087945061324a9350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144ea576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f61450e8585613253565b915091508015801561451e575081155b1561436b576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f61456e878761461d565b9250925092508061430d576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145c857508290505f612f1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156145fa57505f905082612f1b565b5f839003600a0a80858161461057614610615869565b0794859003959350505050565b5f805f845f0361463557505f915081905060016142b0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03614849576f4b3b4ca85a86c47a098a224000000000850515801561469e57507f80000000000000000000000000000000000000000000000000000000000000268412155b156146bf576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470757507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561476c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614782576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d157507f80000000000000000000000000000000000000000000000000000000000000028412155b156147e757606485029450600284039350614782565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483757507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484957600a850294506001840393505b600a8086029081058614801561487f57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561488e578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082121561491b577f8000000000000000000000000000000000000000000000000000000000000000820361491557507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f61492c8686615121565b91509150815f036149505783818161494657614946615869565b0492505050610876565b83821061499a576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ace577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614abb57614a637f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615903565b8403614a9357507f800000000000000000000000000000000000000000000000000000000000000090508161324a565b614a9e600a856159e9565b614aa790615b96565b614ab2846001615b6f565b9150915061324a565b614ac484615b96565b839150915061324a565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0157614aa7600a856159e9565b508290508161324a565b5f818303614b1a575082610876565b82821315614b5d57828203604c811380614b3457505f8113155b15614b42575f915050610876565b80600a0a8581614b5457614b54615869565b05915050610876565b818303604c811380614b6f57505f8113155b15614bb7576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bcf57614bcf615869565b0514614c18576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c30828261455f565b90965094505f8613614cb157855f03614c75576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cef57614ce583604c615b6f565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d3e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f1b575f805f805f85614d7957604b614d7c565b604c5b614d86908a615b6f565b90505f8087614db3577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dd4565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0657614e06615869565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e3f8c826151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ecb576123278114614ea657614e818c826001016151cc565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ec8565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614efb838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615253565b909a509850614f0c8a8a835f61311d565b97509750505050505050610974565b614f2585856150c8565b9095509350614f35868686614c22565b9095509350614f44858561445e565b9250925050610974565b50935093915050565b5f805f841215614f9357614f6b848461445e565b9094509250614f7b858585614f57565b9094509250614f8a84846150c8565b91509150610974565b5f80614f9f86866145b5565b9092509050845f8080614fb285856152f0565b9194509250905061270d612710614fca600182615bc6565b8514614fe157614fdb8d86866153df565b90925090505b831561506c575f614ff3866001615b6f565b90505b80848583028161500857615008615869565b051461501f57600a84059350600a88059750614ff6565b61506061502c8588615bec565b896150378785615bec565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615253565b909d509b506150939050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150a484835f614b0b565b6150af886001615b6f565b6150b99190615b6f565b94509450505050935093915050565b5f806151167f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134bc565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361516c57505f919050565b50602001515f1a90565b5f6151808361515c565b82106151bc5781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c37565b50600202016003015161ffff1690565b5f806151db600a6123286159e9565b6151e69060026159fc565b6151f1906001615903565b90505f615201600a6123286159e9565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523057918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f808888036152665750839050816152e4565b5f805f806152768c8b8f8d614082565b915091505f806152888a8a8d8c614082565b9150915061529884848484613f37565b8096508197505050505050505f806152b28b8b8f8d614082565b915091505f806152c4868686866134bc565b915091505f806152d684848f8e61311d565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532857508391505f905060016142b0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538757505f91505082151560016142b0565b5f846004015f03600a0a90505f8187816153a3576153a3615869565b05945050808402861415925090506142b0565b5f84126153cb57505f915081905060016142b0565b50505060048101600a0a82025f60016142b0565b5f808060646153f1600a6123286159e9565b6153fe600a6123286159e9565b6154099060026159fc565b615414906001615903565b61541e9190615903565b6154289190615903565b905061546c565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547785828861542f565b92508315614f4e5761548d60018601828861542f565b915050935093915050565b614259615c4f565b5f602082840312156154b0575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154df565b5f6020828403121561554d575f80fd5b813567ffffffffffffffff811115615563575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a357815187529582019590820190600101615587565b509495945050505050565b604081525f6155c06040830185615574565b8281036020848101919091528451808352858201928201905f5b818110156155f6578451835293830193918301916001016155da565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114615624575f80fd5b50565b5f60208284031215615637575f80fd5b813561087681615603565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615675575f80fd5b83018035915067ffffffffffffffff82111561568f575f80fd5b6020019150600581901b3603821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561571a5761571a6156a6565b604052919050565b5f67ffffffffffffffff82111561573b5761573b6156a6565b5060051b60200190565b5f61575761575284615722565b6156d3565b83815260208082019190600586811b860136811115615774575f80fd5b865b818110156157fb57803567ffffffffffffffff811115615794575f80fd5b880136601f8201126157a4575f80fd5b80356157b261575282615722565b81815290851b820186019086810190368311156157cd575f80fd5b928701925b828410156157eb578335825292870192908701906157d2565b8952505050948301948301615776565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583b575f80fd5b83018035915067ffffffffffffffff821115615855575f80fd5b602001915036819003821315612f1b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158a4576158a4615869565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158d6565b828152604060208201525f61592e6040830184615574565b949350505050565b5f6020808385031215615947575f80fd5b825167ffffffffffffffff81111561595d575f80fd5b8301601f8101851361596d575f80fd5b805161597b61575282615722565b81815260059190911b82018301908381019087831115615999575f80fd5b928401925b82841015612f895783518252928401929084019061599e565b5f602082840312156159c7575f80fd5b5051919050565b5f602082840312156159de575f80fd5b815161087681615603565b5f826159f7576159f7615869565b500490565b808202811582820484141761017f5761017f6158d6565b600181815b80851115615a6c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5257615a526158d6565b80851615615a5f57918102915b93841c9390800290615a18565b509250929050565b5f82615a825750600161017f565b81615a8e57505f61017f565b8160018114615aa45760028114615aae57615aca565b600191505061017f565b60ff841115615abf57615abf6158d6565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615aed575081810a61017f565b615af78383615a13565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2957615b296158d6565b029392505050565b5f6108768383615a74565b8181038181111561017f5761017f6158d6565b5f60208284031215615b5f575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b8e57615b8e6158d6565b505092915050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614915576149156158d6565b8181035f831280158383131683831282161715615be557615be56158d6565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2357615c236158d6565b818105831482151761017f5761017f6158d6565b828152604060208201525f61592e60408301846154df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124813ea1539160916cd181c13ea190a19391939196819971a1f1a331b201b841b9c1c171c2f1c471c801caa1cc21cda1ce71de21e041e111ec91f181f5b1f7f1f8c1f992032207b20882107215621a521f222412290234823742396244e248f24b625032550259f25ec263926862777"; /// @dev The function pointers known to the interpreter for dynamic dispatch. /// By setting these as a constant they can be inlined into the interpreter diff --git a/src/generated/RainlangParser.pointers.sol b/src/generated/RainlangParser.pointers.sol index f15fb26b3..f0c2778e3 100644 --- a/src/generated/RainlangParser.pointers.sol +++ b/src/generated/RainlangParser.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xeaba337950951ffbf239e47b30600eec41e969b3242f5508b9497d56a8773bd8); +bytes32 constant BYTECODE_HASH = bytes32(0x729a2facceada6a158fbb00945d6371cadf1ce78e9b3f56724e30fb8e397d7d6); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xA0c9a33f4d13576Ad0Ae36cD431466ae641A951f); +address constant DEPLOYED_ADDRESS = address(0x9179445a637E6Ae72Bb38273944FAB96834488dd); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506154c68061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614bf7565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614cf7565b610186565b6040516100879190614d71565b6100c36100be366004614cf7565b61023e565b604051610087929190614e22565b6100d961025e565b6040516100879190614e77565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152d36101639139905090565b60606040518060c001604052806090815260200161543660909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614c36565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614e89565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614bed5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001614efb565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613dc7565b826120158383613e4b565b9550955050505050935093915050565b5f808080612034878787613e9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f9161207281614057565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a86868686614083565b60605f825160020267ffffffffffffffff81111561228b5761228b614c36565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e838383614247565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e838383614247565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f612447848483614247565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614e77565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142a3565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c6001850389166142ce565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b612749836142ce565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885614f3b565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87614f3b565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de8989896143a6565b60208581028701018190526101008b0180516001179052909850905061290383614f3b565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e836143ce565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d968461445a565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d8885614471565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb4826143ce565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd390846144c3565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e9082614547565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f0151909150613194908261458d565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b614f72565b891685891b60f06134c78b6010614efb565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d78585614600565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614e77565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615011565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614e77565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036150be565b60200260200101518c61447190919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614e77565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002614efb565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613dbe9050565b5f806139f98a88614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613dbe915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613dbe915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b378484614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613dbe9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613dbe92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613dbe92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613dbe9350505050565b600a0a8681025f88838381613c6957613c69614f0e565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613dbe9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613daf5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613dbe9350505050565b505f80613d66838a614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613dbe9350505050565b95860195925050505b845f03613dba575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613e588585614780565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613eeb5750805b875193505b84600185851a1b1615158184101615613f0e57600183019250613ef0565b505080602003613f99576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b640400000000161580613fb95750858b145b1561403f576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff8111156140c9576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061411f898484612cda565b61412c8783850183612cda565b50505060c08701515b80156141f65760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb69061419a908890600401614e77565b6040805180830381865afa1580156141b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141d891906150eb565b9150915081156141ee5794506104a39350505050565b505050614135565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f614255868686614886565b915091508061429a576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142ff5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f6143b6888888610e7b565b92509250925082156141f6579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a6144205785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61446761010083615115565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b929092179092526144b08361445a565b6101809094018051909417909352505050565b5f6144ce838361458d565b925060ff600884901c8116830190811115614515576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff831682811015614586576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c908311156145dd576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156145e85750815b601081901b600883901b841717935050505092915050565b5f61460a8361359f565b82106146465781836040517ffcfaeff100000000000000000000000000000000000000000000000000000000815260040161061192919061514d565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061468384886149d2565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156146be575093505f9250611c92915050565b825f03614721577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146f2575f614714565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f8000000000000000000000000000000000000000000000000000000000000000811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b83148383826147e4577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156147c457620186a0860595506005850194505b8586601b0b146147df57600a860595508460010194506147c4565b6147fa565b855f036147fa57505f925060019150611c929050565b848560030b14614856575f85121561481a57505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156148cc576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f036148de57505f90506001611fdd565b8460ff8416850185811215614929576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f831215614993577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561496a575f809550955050505050611fdd565b825f03600a0a915081848161498157614981614f0e565b0495505084029091149150611fdd9050565b5f8313156149c2576149a683600a615283565b91506149b2828561528e565b955060019450611fdd9350505050565b8360019550955050505050611fdd565b5f80828410614a0557507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614a3e576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614a765750604d83105b15614ab957815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614a66565b878210614bdf5781515f1a8490036001811115614b0157507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614b4457507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614bdf5781515f1a60308114614bb457507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614b70565b5f9890975095505050505050565b614bf56152a5565b565b5f60208284031215614c07575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614caa57614caa614c36565b604052919050565b5f67ffffffffffffffff821115614ccb57614ccb614c36565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614d07575f80fd5b813567ffffffffffffffff811115614d1d575f80fd5b8201601f81018413614d2d575f80fd5b8035614d40614d3b82614cb2565b614c63565b818152856020838501011115614d54575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614dcb57835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614d95565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614e346040830185614dd6565b8281036020848101919091528451808352858201928201905f5b81811015614e6a57845183529383019391830191600101614e4e565b5090979650505050505050565b602081525f6105076020830184614dd6565b80516020808301519190811015614ec8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614ece565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f6b57614f6b614ece565b5060010190565b8181038181111561018057610180614ece565b80518015158114610239575f80fd5b5f82601f830112614fa3575f80fd5b8151602067ffffffffffffffff821115614fbf57614fbf614c36565b8160051b614fce828201614c63565b9283528481018201928281019087851115614fe7575f80fd5b83870192505b8483101561500657825182529183019190830190614fed565b979650505050505050565b5f805f60608486031215615023575f80fd5b61502c84614f85565b9250602084015167ffffffffffffffff80821115615048575f80fd5b818601915086601f83011261505b575f80fd5b8151615069614d3b82614cb2565b81815288602083860101111561507d575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156150a7575f80fd5b506150b486828701614f94565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80604083850312156150fc575f80fd5b61510583614f85565b9150602083015190509250929050565b5f82615148577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614dd6565b600181815b808511156151be57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156151a4576151a4614ece565b808516156151b157918102915b93841c939080029061516a565b509250929050565b5f826151d457506001610180565b816151e057505f610180565b81600181146151f657600281146152005761521c565b6001915050610180565b60ff84111561521157615211614ece565b50506001821b610180565b5060208310610133831016604e8410600b841016171561523f575081810a610180565b6152498383615165565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561527b5761527b614ece565b029392505050565b5f61050783836151c6565b808202811582820484141761018057610180614ece565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; + hex"6080604052348015600e575f80fd5b5061549d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614bf7565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614cf7565b610186565b6040516100879190614d71565b6100c36100be366004614cf7565b61023e565b604051610087929190614e22565b6100d961025e565b6040516100879190614e77565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152d36101639139905090565b60606040518060c001604052806090815260200161543660909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614c36565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614e89565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614bed5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001614efb565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613dc7565b826120158383613e4b565b9550955050505050935093915050565b5f808080612034878787613e9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f9161207281614057565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a86868686614083565b60605f825160020267ffffffffffffffff81111561228b5761228b614c36565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e838383614247565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e838383614247565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f612447848483614247565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614e77565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142a3565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c6001850389166142ce565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b612749836142ce565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885614f3b565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87614f3b565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de8989896143a6565b60208581028701018190526101008b0180516001179052909850905061290383614f3b565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e836143ce565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d968461445a565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d8885614471565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb4826143ce565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd390846144c3565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e9082614547565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f0151909150613194908261458d565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b614f72565b891685891b60f06134c78b6010614efb565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d78585614600565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614e77565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615011565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614e77565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036150be565b60200260200101518c61447190919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614e77565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002614efb565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613dbe9050565b5f806139f98a88614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613dbe915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613dbe915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b378484614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613dbe9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613dbe92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613dbe92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613dbe9350505050565b600a0a8681025f88838381613c6957613c69614f0e565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613dbe9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613daf5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613dbe9350505050565b505f80613d66838a614656565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613dbe9350505050565b95860195925050505b845f03613dba575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613e588585614780565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613eeb5750805b875193505b84600185851a1b1615158184101615613f0e57600183019250613ef0565b505080602003613f99576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b640400000000161580613fb95750858b145b1561403f576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff8111156140c9576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061411f898484612cda565b61412c8783850183612cda565b50505060c08701515b80156141f65760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb69061419a908890600401614e77565b6040805180830381865afa1580156141b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141d891906150eb565b9150915081156141ee5794506104a39350505050565b505050614135565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f614255868686614886565b915091508061429a576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142ff5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f6143b6888888610e7b565b92509250925082156141f6579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a6144205785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61446761010083615115565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b929092179092526144b08361445a565b6101809094018051909417909352505050565b5f6144ce838361458d565b925060ff600884901c8116830190811115614515576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff831682811015614586576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c908311156145dd576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156145e85750815b601081901b600883901b841717935050505092915050565b5f61460a8361359f565b82106146465781836040517ffcfaeff100000000000000000000000000000000000000000000000000000000815260040161061192919061514d565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061468384886149d2565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156146be575093505f9250611c92915050565b825f03614721577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146f2575f614714565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f8000000000000000000000000000000000000000000000000000000000000000811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b83148383826147e4577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156147c457620186a0860595506005850194505b8586601b0b146147df57600a860595508460010194506147c4565b6147fa565b855f036147fa57505f925060019150611c929050565b848560030b14614856575f85121561481a57505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f8512156148cc576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f036148de57505f90506001611fdd565b8460ff8416850185811215614929576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f831215614993577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561496a575f809550955050505050611fdd565b825f03600a0a915081848161498157614981614f0e565b0495505084029091149150611fdd9050565b5f8313156149c2576149a683600a615283565b91506149b2828561528e565b955060019450611fdd9350505050565b8360019550955050505050611fdd565b5f80828410614a0557507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614a3e576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614a765750604d83105b15614ab957815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614a66565b878210614bdf5781515f1a8490036001811115614b0157507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614b4457507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614bdf5781515f1a60308114614bb457507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614b70565b5f9890975095505050505050565b614bf56152a5565b565b5f60208284031215614c07575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614caa57614caa614c36565b604052919050565b5f67ffffffffffffffff821115614ccb57614ccb614c36565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614d07575f80fd5b813567ffffffffffffffff811115614d1d575f80fd5b8201601f81018413614d2d575f80fd5b8035614d40614d3b82614cb2565b614c63565b818152856020838501011115614d54575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614dcb57835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614d95565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614e346040830185614dd6565b8281036020848101919091528451808352858201928201905f5b81811015614e6a57845183529383019391830191600101614e4e565b5090979650505050505050565b602081525f6105076020830184614dd6565b80516020808301519190811015614ec8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614ece565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f6b57614f6b614ece565b5060010190565b8181038181111561018057610180614ece565b80518015158114610239575f80fd5b5f82601f830112614fa3575f80fd5b8151602067ffffffffffffffff821115614fbf57614fbf614c36565b8160051b614fce828201614c63565b9283528481018201928281019087851115614fe7575f80fd5b83870192505b8483101561500657825182529183019190830190614fed565b979650505050505050565b5f805f60608486031215615023575f80fd5b61502c84614f85565b9250602084015167ffffffffffffffff80821115615048575f80fd5b818601915086601f83011261505b575f80fd5b8151615069614d3b82614cb2565b81815288602083860101111561507d575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156150a7575f80fd5b506150b486828701614f94565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80604083850312156150fc575f80fd5b61510583614f85565b9150602083015190509250929050565b5f82615148577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614dd6565b600181815b808511156151be57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156151a4576151a4614ece565b808516156151b157918102915b93841c939080029061516a565b509250929050565b5f826151d457506001610180565b816151e057505f610180565b81600181146151f657600281146152005761521c565b6001915050610180565b60ff84111561521157615211614ece565b50506001821b610180565b5060208310610133831016604e8410600b841016171561523f575081810a610180565b6152498383615165565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561527b5761527b614ece565b029392505050565b5f61050783836151c6565b808202811582820484141761018057610180614ece565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; /// @dev The parse meta that is used to lookup word definitions. /// The structure of the parse meta is: diff --git a/src/generated/RainlangReferenceExtern.pointers.sol b/src/generated/RainlangReferenceExtern.pointers.sol index ee79cc84f..fa4f7adb2 100644 --- a/src/generated/RainlangReferenceExtern.pointers.sol +++ b/src/generated/RainlangReferenceExtern.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x948c7a8ef55255dd7a41250add9ec759c0e7177de7898969296b8887aab1b0bb); +bytes32 constant BYTECODE_HASH = bytes32(0x6dd8a41c541426172cb4f10c3f1215f95c64fe8d68199aafea4211bd1ed2a994); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xCEa9d8f639044C428C61c8AB4006B0e273FcFd03); +address constant DEPLOYED_ADDRESS = address(0x0D6Fe530A6Cd98409ACfE006fb45C2bde0Cbe74f); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b505f602e604080518082019091526002815261090360f01b602082015290565b519050805f03605057604051630ae9809f60e31b815260040160405180910390fd5b5f606f6040805180820190915260028152610c9960f01b602082015290565b519050808214609f5760405163550eaa3b60e01b8152600481018390526024810182905260440160405180910390fd5b5050612ebc806100ae5f395ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d63660046128be565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612950565b610118610113366004612962565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612a07565b61034a565b6040516100e793929190612ab4565b61016a610165366004612b11565b610500565b6040516100e79190612bbe565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612a07565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612c01565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612c5b565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b90506128b45f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612c6e565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612c01565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b7576128b45f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612c6e565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff8111156108935761089361298b565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612ca6565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612ca6565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612e8660369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143d565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612950565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e61162a565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611655565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611655565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612cd3565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143d565b90505f610d6b8260128b018a61172d565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176d565b80610dd95750610dd9610dd260095f611380565b82906117bc565b80610e0f5750610e0d610deb8261180b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611857565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b3565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b9565b915091505f61142e83836118b3565b509a9950505050505050505050565b6114ca6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156115505761155061298b565b604051908082528060200260200182016040528015611579578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116865750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173d8888611aef565b92965090945092509050611752898486611f32565b8261175d8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117b084848484611fbb565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117ff84848484611fbb565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183e838361208f565b9150505f61184c82846118b3565b509695505050505050565b5f805f6118658686866120f7565b91509150806118aa576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611917577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f757620186a0860595506005850194505b8586601b0b1461191257600a860595508460010194506118f7565b61192d565b855f0361192d57505f925060019150610c639050565b848560030b14611989575f85121561194d57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e557865f036119d95784849250925050611ae6565b86869250925050611ae6565b6119ef8787612243565b90975095506119fe8585612243565b909550935085841315611a12579395929492935b838603604c811115611a2b578787935093505050611ae6565b80600a0a8681611a3d57611a3d612c01565b0595505086850180881860ff90811c151589881890911c15168015611ad857877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abf576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611adc565b8198505b5050868692509250505b94509492505050565b5f828180611b048386652000000000006122a5565b92508583141583611b1e81886703ff0000000000006122a5565b9450808503611b5857507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611f299050565b5f80611b648a886122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611ba2575095505f9350839250611f29915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e3157506001909301925f84611be581896703ff0000000000006122a5565b9550808603611c2057507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611f29915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611c8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c22565b818114611ce6575f80611ca284846122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611ce2575097505f9550859450611f299350505050565b9350505b5f831215611d2157507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611f2992505050565b8315611d2d57825f0392505b80820394505f851315611d6d57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611f2992505050565b855f03611d7c57829550611e2e565b5f8590036043811115611dbd57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611f299350505050565b600a0a8681025f88838381611dd457611dd4612c01565b0514159050601b82900b8214158180611dea5750805b15611e2657507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611f299650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611f1a5760019095019485611e71818a652000000000006122a5565b965086611e87818b6703ff0000000000006122a5565b9750808803611ec457507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611f299350505050565b505f80611ed1838a6122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f11575097505f9550859450611f299350505050565b95860195925050505b845f03611f25575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611fb6576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f8085158415178187128286121817858414178015611fe05786859250925050611ae6565b505f85841315611ff4575092949193919260015b8386035f8112604c8213178015612027578215612019575f8994509450505050611ae6565b885f94509450505050611ae6565b600a82900a8981028a82828161203f5761203f612c01565b051461206b57841561205b575f8b965096505050505050611ae6565b8a5f965096505050505050611ae6565b8415612080578896509450611ae69350505050565b9550879450611ae69350505050565b5f805f83126120a257508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156120d457505f905082610c63565b5f839003600a0a8085816120ea576120ea612c01565b0794859003959350505050565b5f805f85121561213d576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361214f57505f90506001610b8b565b8460ff841685018581121561219a576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f831215612204577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156121db575f809550955050505050610b8b565b825f03600a0a91508184816121f2576121f2612c01565b0495505084029091149150610b8b9050565b5f8313156122335761221783600a612e36565b91506122238285612e41565b955060019450610b8b9350505050565b8360019550955050505050610b8b565b5f805f805f61225287876123f8565b92509250925080612299576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156122c6576001840193506122a7565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806122fb8488612699565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615612336575093505f9250610c63915050565b825f03612399577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161236a575f61238c565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f800000000000000000000000000000000000000000000000000000000000000081116123c6575f6123e8565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361241057505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612624576f4b3b4ca85a86c47a098a224000000000850515801561247957507f80000000000000000000000000000000000000000000000000000000000000268412155b1561249a576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156124e257507f80000000000000000000000000000000000000000000000000000000000000138412155b156124fb57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561254757507f800000000000000000000000000000000000000000000000000000000000000a8412155b1561255d576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156125ac57507f80000000000000000000000000000000000000000000000000000000000000028412155b156125c25760648502945060028403935061255d565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561261257507f80000000000000000000000000000000000000000000000000000000000000018412155b1561262457600a850294506001840393505b600a8086029081058614801561265a57507f80000000000000000000000000000000000000000000000000000000000000018512155b15612669578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f808284106126cc57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612705576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561273d5750604d83105b1561278057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161272d565b8782106128a65781515f1a84900360018111156127c857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561280b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106128a65781515f1a6030811461287b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190612837565b5f9890975095505050505050565b6128bc612e58565b565b5f602082840312156128ce575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146128fd575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6128fd6020830184612904565b5f805f60608486031215612974575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ff576129ff61298b565b604052919050565b5f6020808385031215612a18575f80fd5b823567ffffffffffffffff80821115612a2f575f80fd5b818501915085601f830112612a42575f80fd5b813581811115612a5457612a5461298b565b612a84847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016129b8565b91508082528684828501011115612a99575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612ad06060840186612904565b8381036040850152845180825260208087019201905f5b81811015612b0357835183529284019291840191600101612ae7565b509098975050505050505050565b5f8060408385031215612b22575f80fd5b8235915060208084013567ffffffffffffffff80821115612b41575f80fd5b818601915086601f830112612b54575f80fd5b813581811115612b6657612b6661298b565b8060051b9150612b778483016129b8565b8181529183018401918481019089841115612b90575f80fd5b938501935b83851015612bae57843582529385019390850190612b95565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612bf557835183529284019291840191600101612bd9565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156101f1576101f1612c2e565b5f82612ca1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612d12577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600181815b80851115612d7157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d5757612d57612c2e565b80851615612d6457918102915b93841c9390800290612d1d565b509250929050565b5f82612d87575060016101f1565b81612d9357505f6101f1565b8160018114612da95760028114612db357612dcf565b60019150506101f1565b60ff841115612dc457612dc4612c2e565b50506001821b6101f1565b5060208310610133831016604e8410600b8410161715612df2575081810a6101f1565b612dfc8383612d18565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612e2e57612e2e612c2e565b029392505050565b5f6128fd8383612d79565b80820281158282048414176101f1576101f1612c2e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; + hex"6080604052348015600e575f80fd5b505f602e604080518082019091526002815261090360f01b602082015290565b519050805f03605057604051630ae9809f60e31b815260040160405180910390fd5b5f606f6040805180820190915260028152610c9960f01b602082015290565b519050808214609f5760405163550eaa3b60e01b8152600481018390526024810182905260440160405180910390fd5b5050612ee7806100ae5f395ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d6366004612a31565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612ac3565b610118610113366004612ad5565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612b7a565b61034a565b6040516100e793929190612c27565b61016a610165366004612c84565b610500565b6040516100e79190612d31565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612b7a565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612d74565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612da1565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b9050612a275f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612dd9565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612d74565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b757612a275f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612dd9565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff81111561089357610893612afe565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612e11565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612e11565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612eb160369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143c565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612ac3565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e611629565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611654565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611654565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612e3e565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143c565b90505f610d6b8260128b018a61172c565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176c565b80610dd95750610dd9610dd260095f611380565b82906117bb565b80610e0f5750610e0d610deb8261180a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611855565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b1565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b7565b915091505f61142e8383611aed565b9a9950505050505050505050565b6114c96040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff81111561154f5761154f612afe565b604051908082528060200260200182016040528015611578578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116855750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173c8888611b4b565b92965090945092509050611751898486611fea565b8261175c8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117af84848484612073565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117fe84848484612073565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183d8383612147565b9150505f61184b8284611aed565b9695505050505050565b5f805f6118638686866121af565b91509150806118a8576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611915577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f557620186a0860595506005850194505b8586601b0b1461191057600a860595508460010194506118f5565b61192b565b855f0361192b57505f925060019150610c639050565b848560030b14611987575f85121561194b57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e357865f036119d75784849250925050611ae4565b86869250925050611ae4565b6119ed87876123b6565b90975095506119fc85856123b6565b909550935085841315611a10579395929492935b838603604c811115611a29578787935093505050611ae4565b80600a0a8681611a3b57611a3b612d74565b0595505086850180881860ff90811c151589881890911c15168015611ad657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611ada565b8198505b5050868692509250505b94509492505050565b5f805f611afa85856118b1565b9150915080158015611b0a575081155b156113d2576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b5f828180611b60838665200000000000612418565b92508583141583611b7a81886703ff000000000000612418565b9450808503611bb457507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611fe19050565b5f80611bc08a88612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611bfe575095505f9350839250611fe1915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e8d57506001909301925f84611c4181896703ff000000000000612418565b9550808603611c7c57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611fe1915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611ceb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c7e565b818114611d42575f80611cfe8484612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611d3e575097505f9550859450611fe19350505050565b9350505b5f831215611d7d57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b8315611d8957825f0392505b80820394505f851315611dc957507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b855f03611dd857829550611e8a565b5f8590036043811115611e1957507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b600a0a8681025f88838381611e3057611e30612d74565b0514159050601b82900b8214158180611e465750805b15611e8257507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611fe19650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611fd25760019095019485611ecd818a65200000000000612418565b965086611ee3818b6703ff000000000000612418565b9750808803611f2057507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b505f80611f2d838a612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f6d575097505f9550859450611fe19350505050565b9250508482015f83138015611f8157508581125b80611f9557505f83128015611f9557508581135b15611fce57507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b9450505b845f03611fdd575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561206e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f80851584151781871282861218178584141780156120985786859250925050611ae4565b505f858413156120ac575092949193919260015b8386035f8112604c82131780156120df5782156120d1575f8994509450505050611ae4565b885f94509450505050611ae4565b600a82900a8981028a8282816120f7576120f7612d74565b0514612123578415612113575f8b965096505050505050611ae4565b8a5f965096505050505050611ae4565b8415612138578896509450611ae49350505050565b9550879450611ae49350505050565b5f805f831261215a57508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561218c57505f905082610c63565b5f839003600a0a8085816121a2576121a2612d74565b0794859003959350505050565b5f805f8512156121f5576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361220757505f90506001610b8b565b8460ff8416850185811215612252576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f8312156122bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215612293575f809550955050505050610b8b565b825f03600a0a91508184816122aa576122aa612d74565b0495505084029091149150610b8b9050565b5f8313156123a657604d831315612312576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161234757612347612d74565b04841115612394576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b5091909102925060019150610b8b9050565b8360019550955050505050610b8b565b5f805f805f6123c5878761256b565b9250925092508061240c576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156124395760018401935061241a565b509192915050565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061246e848861280c565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156124a9575093505f9250610c63915050565b825f0361250c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116124dd575f6124ff565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f80000000000000000000000000000000000000000000000000000000000000008111612539575f61255b565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361258357505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612797576f4b3b4ca85a86c47a098a22400000000085051580156125ec57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561260d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561265557507f80000000000000000000000000000000000000000000000000000000000000138412155b1561266e57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156126ba57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156126d0576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561271f57507f80000000000000000000000000000000000000000000000000000000000000028412155b15612735576064850294506002840393506126d0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561278557507f80000000000000000000000000000000000000000000000000000000000000018412155b1561279757600a850294506001840393505b600a808602908105861480156127cd57507f80000000000000000000000000000000000000000000000000000000000000018512155b156127dc578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082841061283f57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612878576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156128b05750604d83105b156128f357815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016128a0565b878210612a195781515f1a849003600181111561293b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561297e57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210612a195781515f1a603081146129ee57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906129aa565b5f9890975095505050505050565b612a2f612e83565b565b5f60208284031215612a41575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a70575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612a706020830184612a77565b5f805f60608486031215612ae7575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b7257612b72612afe565b604052919050565b5f6020808385031215612b8b575f80fd5b823567ffffffffffffffff80821115612ba2575f80fd5b818501915085601f830112612bb5575f80fd5b813581811115612bc757612bc7612afe565b612bf7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b2b565b91508082528684828501011115612c0c575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612c436060840186612a77565b8381036040850152845180825260208087019201905f5b81811015612c7657835183529284019291840191600101612c5a565b509098975050505050505050565b5f8060408385031215612c95575f80fd5b8235915060208084013567ffffffffffffffff80821115612cb4575f80fd5b818601915086601f830112612cc7575f80fd5b813581811115612cd957612cd9612afe565b8060051b9150612cea848301612b2b565b8181529183018401918481019089841115612d03575f80fd5b938501935b83851015612d2157843582529385019390850190612d08565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612d6857835183529284019291840191600101612d4c565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b808201808211156101f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82612e0c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612e7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d63660046128be565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612950565b610118610113366004612962565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612a07565b61034a565b6040516100e793929190612ab4565b61016a610165366004612b11565b610500565b6040516100e79190612bbe565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612a07565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612c01565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612c5b565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b90506128b45f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612c6e565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612c01565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b7576128b45f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612c6e565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff8111156108935761089361298b565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612ca6565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612ca6565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612e8660369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143d565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612950565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e61162a565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611655565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611655565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612cd3565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143d565b90505f610d6b8260128b018a61172d565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176d565b80610dd95750610dd9610dd260095f611380565b82906117bc565b80610e0f5750610e0d610deb8261180b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611857565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b3565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b9565b915091505f61142e83836118b3565b509a9950505050505050505050565b6114ca6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156115505761155061298b565b604051908082528060200260200182016040528015611579578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116865750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173d8888611aef565b92965090945092509050611752898486611f32565b8261175d8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117b084848484611fbb565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117ff84848484611fbb565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183e838361208f565b9150505f61184c82846118b3565b509695505050505050565b5f805f6118658686866120f7565b91509150806118aa576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611917577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f757620186a0860595506005850194505b8586601b0b1461191257600a860595508460010194506118f7565b61192d565b855f0361192d57505f925060019150610c639050565b848560030b14611989575f85121561194d57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e557865f036119d95784849250925050611ae6565b86869250925050611ae6565b6119ef8787612243565b90975095506119fe8585612243565b909550935085841315611a12579395929492935b838603604c811115611a2b578787935093505050611ae6565b80600a0a8681611a3d57611a3d612c01565b0595505086850180881860ff90811c151589881890911c15168015611ad857877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abf576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611adc565b8198505b5050868692509250505b94509492505050565b5f828180611b048386652000000000006122a5565b92508583141583611b1e81886703ff0000000000006122a5565b9450808503611b5857507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611f299050565b5f80611b648a886122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611ba2575095505f9350839250611f29915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e3157506001909301925f84611be581896703ff0000000000006122a5565b9550808603611c2057507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611f29915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611c8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c22565b818114611ce6575f80611ca284846122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611ce2575097505f9550859450611f299350505050565b9350505b5f831215611d2157507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611f2992505050565b8315611d2d57825f0392505b80820394505f851315611d6d57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611f2992505050565b855f03611d7c57829550611e2e565b5f8590036043811115611dbd57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611f299350505050565b600a0a8681025f88838381611dd457611dd4612c01565b0514159050601b82900b8214158180611dea5750805b15611e2657507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611f299650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611f1a5760019095019485611e71818a652000000000006122a5565b965086611e87818b6703ff0000000000006122a5565b9750808803611ec457507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611f299350505050565b505f80611ed1838a6122ce565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f11575097505f9550859450611f299350505050565b95860195925050505b845f03611f25575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611fb6576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f8085158415178187128286121817858414178015611fe05786859250925050611ae6565b505f85841315611ff4575092949193919260015b8386035f8112604c8213178015612027578215612019575f8994509450505050611ae6565b885f94509450505050611ae6565b600a82900a8981028a82828161203f5761203f612c01565b051461206b57841561205b575f8b965096505050505050611ae6565b8a5f965096505050505050611ae6565b8415612080578896509450611ae69350505050565b9550879450611ae69350505050565b5f805f83126120a257508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48312156120d457505f905082610c63565b5f839003600a0a8085816120ea576120ea612c01565b0794859003959350505050565b5f805f85121561213d576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361214f57505f90506001610b8b565b8460ff841685018581121561219a576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f831215612204577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156121db575f809550955050505050610b8b565b825f03600a0a91508184816121f2576121f2612c01565b0495505084029091149150610b8b9050565b5f8313156122335761221783600a612e36565b91506122238285612e41565b955060019450610b8b9350505050565b8360019550955050505050610b8b565b5f805f805f61225287876123f8565b92509250925080612299576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156122c6576001840193506122a7565b509192915050565b81515f90819065200000000000600191831a9190911b161515838510168085019082806122fb8488612699565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615612336575093505f9250610c63915050565b825f03612399577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161236a575f61238c565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f800000000000000000000000000000000000000000000000000000000000000081116123c6575f6123e8565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361241057505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612624576f4b3b4ca85a86c47a098a224000000000850515801561247957507f80000000000000000000000000000000000000000000000000000000000000268412155b1561249a576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156124e257507f80000000000000000000000000000000000000000000000000000000000000138412155b156124fb57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561254757507f800000000000000000000000000000000000000000000000000000000000000a8412155b1561255d576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156125ac57507f80000000000000000000000000000000000000000000000000000000000000028412155b156125c25760648502945060028403935061255d565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561261257507f80000000000000000000000000000000000000000000000000000000000000018412155b1561262457600a850294506001840393505b600a8086029081058614801561265a57507f80000000000000000000000000000000000000000000000000000000000000018512155b15612669578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f808284106126cc57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612705576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561273d5750604d83105b1561278057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161272d565b8782106128a65781515f1a84900360018111156127c857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561280b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106128a65781515f1a6030811461287b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190612837565b5f9890975095505050505050565b6128bc612e58565b565b5f602082840312156128ce575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146128fd575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6128fd6020830184612904565b5f805f60608486031215612974575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ff576129ff61298b565b604052919050565b5f6020808385031215612a18575f80fd5b823567ffffffffffffffff80821115612a2f575f80fd5b818501915085601f830112612a42575f80fd5b813581811115612a5457612a5461298b565b612a84847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016129b8565b91508082528684828501011115612a99575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612ad06060840186612904565b8381036040850152845180825260208087019201905f5b81811015612b0357835183529284019291840191600101612ae7565b509098975050505050505050565b5f8060408385031215612b22575f80fd5b8235915060208084013567ffffffffffffffff80821115612b41575f80fd5b818601915086601f830112612b54575f80fd5b813581811115612b6657612b6661298b565b8060051b9150612b778483016129b8565b8181529183018401918481019089841115612b90575f80fd5b938501935b83851015612bae57843582529385019390850190612b95565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612bf557835183529284019291840191600101612bd9565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156101f1576101f1612c2e565b5f82612ca1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612d12577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600181815b80851115612d7157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d5757612d57612c2e565b80851615612d6457918102915b93841c9390800290612d1d565b509250929050565b5f82612d87575060016101f1565b81612d9357505f6101f1565b8160018114612da95760028114612db357612dcf565b60019150506101f1565b60ff841115612dc457612dc4612c2e565b50506001821b6101f1565b5060208310610133831016604e8410600b8410161715612df2575081810a6101f1565b612dfc8383612d18565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612e2e57612e2e612c2e565b029392505050565b5f6128fd8383612d79565b80820281158282048414176101f1576101f1612c2e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; + hex"608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d6366004612a31565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612ac3565b610118610113366004612ad5565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612b7a565b61034a565b6040516100e793929190612c27565b61016a610165366004612c84565b610500565b6040516100e79190612d31565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612b7a565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612d74565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612da1565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b9050612a275f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612dd9565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612d74565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b757612a275f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612dd9565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff81111561089357610893612afe565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612e11565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612e11565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612eb160369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143c565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612ac3565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e611629565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611654565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611654565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612e3e565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143c565b90505f610d6b8260128b018a61172c565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176c565b80610dd95750610dd9610dd260095f611380565b82906117bb565b80610e0f5750610e0d610deb8261180a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611855565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b1565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b7565b915091505f61142e8383611aed565b9a9950505050505050505050565b6114c96040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff81111561154f5761154f612afe565b604051908082528060200260200182016040528015611578578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116855750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173c8888611b4b565b92965090945092509050611751898486611fea565b8261175c8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117af84848484612073565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117fe84848484612073565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183d8383612147565b9150505f61184b8284611aed565b9695505050505050565b5f805f6118638686866121af565b91509150806118a8576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611915577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f557620186a0860595506005850194505b8586601b0b1461191057600a860595508460010194506118f5565b61192b565b855f0361192b57505f925060019150610c639050565b848560030b14611987575f85121561194b57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e357865f036119d75784849250925050611ae4565b86869250925050611ae4565b6119ed87876123b6565b90975095506119fc85856123b6565b909550935085841315611a10579395929492935b838603604c811115611a29578787935093505050611ae4565b80600a0a8681611a3b57611a3b612d74565b0595505086850180881860ff90811c151589881890911c15168015611ad657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611ada565b8198505b5050868692509250505b94509492505050565b5f805f611afa85856118b1565b9150915080158015611b0a575081155b156113d2576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b5f828180611b60838665200000000000612418565b92508583141583611b7a81886703ff000000000000612418565b9450808503611bb457507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611fe19050565b5f80611bc08a88612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611bfe575095505f9350839250611fe1915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e8d57506001909301925f84611c4181896703ff000000000000612418565b9550808603611c7c57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611fe1915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611ceb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c7e565b818114611d42575f80611cfe8484612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611d3e575097505f9550859450611fe19350505050565b9350505b5f831215611d7d57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b8315611d8957825f0392505b80820394505f851315611dc957507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b855f03611dd857829550611e8a565b5f8590036043811115611e1957507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b600a0a8681025f88838381611e3057611e30612d74565b0514159050601b82900b8214158180611e465750805b15611e8257507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611fe19650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611fd25760019095019485611ecd818a65200000000000612418565b965086611ee3818b6703ff000000000000612418565b9750808803611f2057507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b505f80611f2d838a612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f6d575097505f9550859450611fe19350505050565b9250508482015f83138015611f8157508581125b80611f9557505f83128015611f9557508581135b15611fce57507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b9450505b845f03611fdd575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561206e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f80851584151781871282861218178584141780156120985786859250925050611ae4565b505f858413156120ac575092949193919260015b8386035f8112604c82131780156120df5782156120d1575f8994509450505050611ae4565b885f94509450505050611ae4565b600a82900a8981028a8282816120f7576120f7612d74565b0514612123578415612113575f8b965096505050505050611ae4565b8a5f965096505050505050611ae4565b8415612138578896509450611ae49350505050565b9550879450611ae49350505050565b5f805f831261215a57508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561218c57505f905082610c63565b5f839003600a0a8085816121a2576121a2612d74565b0794859003959350505050565b5f805f8512156121f5576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361220757505f90506001610b8b565b8460ff8416850185811215612252576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f8312156122bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215612293575f809550955050505050610b8b565b825f03600a0a91508184816122aa576122aa612d74565b0495505084029091149150610b8b9050565b5f8313156123a657604d831315612312576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161234757612347612d74565b04841115612394576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b5091909102925060019150610b8b9050565b8360019550955050505050610b8b565b5f805f805f6123c5878761256b565b9250925092508061240c576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156124395760018401935061241a565b509192915050565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061246e848861280c565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156124a9575093505f9250610c63915050565b825f0361250c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116124dd575f6124ff565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f80000000000000000000000000000000000000000000000000000000000000008111612539575f61255b565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361258357505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612797576f4b3b4ca85a86c47a098a22400000000085051580156125ec57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561260d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561265557507f80000000000000000000000000000000000000000000000000000000000000138412155b1561266e57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156126ba57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156126d0576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561271f57507f80000000000000000000000000000000000000000000000000000000000000028412155b15612735576064850294506002840393506126d0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561278557507f80000000000000000000000000000000000000000000000000000000000000018412155b1561279757600a850294506001840393505b600a808602908105861480156127cd57507f80000000000000000000000000000000000000000000000000000000000000018512155b156127dc578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082841061283f57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612878576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156128b05750604d83105b156128f357815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016128a0565b878210612a195781515f1a849003600181111561293b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561297e57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210612a195781515f1a603081146129ee57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906129aa565b5f9890975095505050505050565b612a2f612e83565b565b5f60208284031215612a41575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a70575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612a706020830184612a77565b5f805f60608486031215612ae7575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b7257612b72612afe565b604052919050565b5f6020808385031215612b8b575f80fd5b823567ffffffffffffffff80821115612ba2575f80fd5b818501915085601f830112612bb5575f80fd5b813581811115612bc757612bc7612afe565b612bf7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b2b565b91508082528684828501011115612c0c575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612c436060840186612a77565b8381036040850152845180825260208087019201905f5b81811015612c7657835183529284019291840191600101612c5a565b509098975050505050505050565b5f8060408385031215612c95575f80fd5b8235915060208084013567ffffffffffffffff80821115612cb4575f80fd5b818601915086601f830112612cc7575f80fd5b813581811115612cd957612cd9612afe565b8060051b9150612cea848301612b2b565b8181529183018401918481019089841115612d03575f80fd5b938501935b83851015612d2157843582529385019390850190612d08565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612d6857835183529284019291840191600101612d4c565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b808201808211156101f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82612e0c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612e7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; /// @dev The hash of the meta that describes the contract. bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c16); diff --git a/src/lib/deploy/LibInterpreterDeploy.sol b/src/lib/deploy/LibInterpreterDeploy.sol index 2b8790276..2622c288c 100644 --- a/src/lib/deploy/LibInterpreterDeploy.sol +++ b/src/lib/deploy/LibInterpreterDeploy.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Vm} from "forge-std/Vm.sol"; +import {Vm} from "forge-std-1.16.1/src/Vm.sol"; import { BYTECODE_HASH as PARSER_HASH, diff --git a/src/lib/eval/LibEval.sol b/src/lib/eval/LibEval.sol index db7395789..668b41671 100644 --- a/src/lib/eval/LibEval.sol +++ b/src/lib/eval/LibEval.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.25; import {LibInterpreterState, InterpreterState} from "../state/LibInterpreterState.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; -import {LibMemoryKV, MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibMemoryKV, MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InputsLengthMismatch} from "../../error/ErrEval.sol"; diff --git a/src/lib/extern/LibExtern.sol b/src/lib/extern/LibExtern.sol index 91b100da5..15bb92ee8 100644 --- a/src/lib/extern/LibExtern.sol +++ b/src/lib/extern/LibExtern.sol @@ -6,10 +6,10 @@ import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2 -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; // StackItem exported for convenience. //forge-lint: disable-next-line(unused-import) -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibExtern /// @notice Defines and implements an encoding and decoding scheme for the data that diff --git a/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol b/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol index 884651e92..706dddb58 100644 --- a/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol +++ b/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; import { CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_CALLING_CONTRACT -} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; /// @title LibExternOpContextCallingContract /// @notice This op is a simple reference to the contract that called the interpreter. diff --git a/src/lib/extern/reference/op/LibExternOpContextRainlen.sol b/src/lib/extern/reference/op/LibExternOpContextRainlen.sol index 1fbbe6b04..e9d307e14 100644 --- a/src/lib/extern/reference/op/LibExternOpContextRainlen.sol +++ b/src/lib/extern/reference/op/LibExternOpContextRainlen.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; /// @dev Column index for caller-provided context. Column 0 is the base diff --git a/src/lib/extern/reference/op/LibExternOpContextSender.sol b/src/lib/extern/reference/op/LibExternOpContextSender.sol index 6086172df..9a6629941 100644 --- a/src/lib/extern/reference/op/LibExternOpContextSender.sol +++ b/src/lib/extern/reference/op/LibExternOpContextSender.sol @@ -2,9 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; -import {CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_SENDER} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import { + CONTEXT_BASE_COLUMN, + CONTEXT_BASE_ROW_SENDER +} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; /// @title LibExternOpContextSender /// @notice This op is a simple reference to the sender of the transaction that called diff --git a/src/lib/extern/reference/op/LibExternOpIntInc.sol b/src/lib/extern/reference/op/LibExternOpIntInc.sol index b1d2537c1..a7ae69db6 100644 --- a/src/lib/extern/reference/op/LibExternOpIntInc.sol +++ b/src/lib/extern/reference/op/LibExternOpIntInc.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; -import {IInterpreterExternV4, StackItem} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {IInterpreterExternV4, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @dev Opcode index of the extern increment opcode. Needs to be manually kept /// in sync with the extern opcode function pointers. Definitely write tests for diff --git a/src/lib/extern/reference/op/LibExternOpStackOperand.sol b/src/lib/extern/reference/op/LibExternOpStackOperand.sol index da0247f9c..c5106421c 100644 --- a/src/lib/extern/reference/op/LibExternOpStackOperand.sol +++ b/src/lib/extern/reference/op/LibExternOpStackOperand.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; /// @title LibExternOpStackOperand diff --git a/src/lib/integrity/LibIntegrityCheck.sol b/src/lib/integrity/LibIntegrityCheck.sol index 599ffe7c6..c7651fb2e 100644 --- a/src/lib/integrity/LibIntegrityCheck.sol +++ b/src/lib/integrity/LibIntegrityCheck.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import { OpcodeOutOfRange, @@ -11,9 +11,9 @@ import { StackUnderflow, StackUnderflowHighwater } from "../../error/ErrIntegrity.sol"; -import {BadOpInputsLength, BadOpOutputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {BadOpInputsLength, BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {OPCODE_FUNCTION_POINTER_SHIFT} from "../eval/LibEval.sol"; /// @notice Tracks the state of the integrity check walk over a single source. diff --git a/src/lib/op/00/LibOpConstant.sol b/src/lib/op/00/LibOpConstant.sol index 030ea7014..b9f4341ca 100644 --- a/src/lib/op/00/LibOpConstant.sol +++ b/src/lib/op/00/LibOpConstant.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {OutOfBoundsConstantRead} from "../../../error/ErrIntegrity.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpConstant /// @notice Implementation of copying a constant from the constants array to the stack. diff --git a/src/lib/op/00/LibOpContext.sol b/src/lib/op/00/LibOpContext.sol index c009ef805..3fe3b0172 100644 --- a/src/lib/op/00/LibOpContext.sol +++ b/src/lib/op/00/LibOpContext.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/00/LibOpExtern.sol b/src/lib/op/00/LibOpExtern.sol index 04e316552..f3a721a5c 100644 --- a/src/lib/op/00/LibOpExtern.sol +++ b/src/lib/op/00/LibOpExtern.sol @@ -9,18 +9,18 @@ import { } from "../../../error/ErrExtern.sol"; import {OutOfBoundsConstantRead} from "../../../error/ErrIntegrity.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2, StackItem -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; import {LibExtern} from "../../extern/LibExtern.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; -import {ERC165Checker} from "openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {ERC165Checker} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165Checker.sol"; import {BadOutputsLength} from "../../../error/ErrExtern.sol"; /// @title LibOpExtern diff --git a/src/lib/op/00/LibOpStack.sol b/src/lib/op/00/LibOpStack.sol index 30f388670..8913174fa 100644 --- a/src/lib/op/00/LibOpStack.sol +++ b/src/lib/op/00/LibOpStack.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {OutOfBoundsStackRead} from "../../../error/ErrIntegrity.sol"; /// @title LibOpStack diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index e1750b0c2..ac28d0865 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {BadDynamicLength} from "../../error/ErrOpList.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {IntegrityCheckState} from "../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../state/LibInterpreterState.sol"; import {LibParseOperand} from "../parse/LibParseOperand.sol"; diff --git a/src/lib/op/bitwise/LibOpBitwiseAnd.sol b/src/lib/op/bitwise/LibOpBitwiseAnd.sol index 18a3bc94a..6d4fc1d31 100644 --- a/src/lib/op/bitwise/LibOpBitwiseAnd.sol +++ b/src/lib/op/bitwise/LibOpBitwiseAnd.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpBitwiseAnd /// @notice Opcode for computing bitwise AND from the top two items on the stack. diff --git a/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol b/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol index 897687c94..278cf88eb 100644 --- a/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol +++ b/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibCtPop} from "rain.math.binary/lib/LibCtPop.sol"; +import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; /// @title LibOpBitwiseCountOnes /// @notice An opcode that counts the number of bits set in a word. Also known diff --git a/src/lib/op/bitwise/LibOpBitwiseDecode.sol b/src/lib/op/bitwise/LibOpBitwiseDecode.sol index 6d4bd04c5..3be383749 100644 --- a/src/lib/op/bitwise/LibOpBitwiseDecode.sol +++ b/src/lib/op/bitwise/LibOpBitwiseDecode.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {LibOpBitwiseEncode} from "./LibOpBitwiseEncode.sol"; /// @title LibOpBitwiseDecode diff --git a/src/lib/op/bitwise/LibOpBitwiseEncode.sol b/src/lib/op/bitwise/LibOpBitwiseEncode.sol index a554e68e7..18eaa0a32 100644 --- a/src/lib/op/bitwise/LibOpBitwiseEncode.sol +++ b/src/lib/op/bitwise/LibOpBitwiseEncode.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {ZeroLengthBitwiseEncoding, TruncatedBitwiseEncoding} from "../../../error/ErrBitwise.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpBitwiseEncode /// @notice Opcode for encoding binary data into a 256 bit value. diff --git a/src/lib/op/bitwise/LibOpBitwiseOr.sol b/src/lib/op/bitwise/LibOpBitwiseOr.sol index d1a02e6ba..248ccb9ea 100644 --- a/src/lib/op/bitwise/LibOpBitwiseOr.sol +++ b/src/lib/op/bitwise/LibOpBitwiseOr.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpBitwiseOr /// @notice Opcode for computing bitwise OR from the top two items on the stack. diff --git a/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol b/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol index 660b5e987..1a3ee2703 100644 --- a/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol +++ b/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../error/ErrBitwise.sol"; /// @title LibOpBitwiseShiftLeft diff --git a/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol b/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol index 752c7a354..2c9670350 100644 --- a/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol +++ b/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../error/ErrBitwise.sol"; /// @title LibOpBitwiseShiftRight diff --git a/src/lib/op/call/LibOpCall.sol b/src/lib/op/call/LibOpCall.sol index 420633256..e8158aa0c 100644 --- a/src/lib/op/call/LibOpCall.sol +++ b/src/lib/op/call/LibOpCall.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibEval} from "../../eval/LibEval.sol"; import {CallOutputsExceedSource, CallInputsMismatchSource} from "../../../error/ErrIntegrity.sol"; diff --git a/src/lib/op/crypto/LibOpHash.sol b/src/lib/op/crypto/LibOpHash.sol index 55a219e70..be2567b67 100644 --- a/src/lib/op/crypto/LibOpHash.sol +++ b/src/lib/op/crypto/LibOpHash.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/erc20/LibOpERC20Allowance.sol b/src/lib/op/erc20/LibOpERC20Allowance.sol index 18b584231..f88781a14 100644 --- a/src/lib/op/erc20/LibOpERC20Allowance.sol +++ b/src/lib/op/erc20/LibOpERC20Allowance.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; /// @title LibOpERC20Allowance diff --git a/src/lib/op/erc20/LibOpERC20BalanceOf.sol b/src/lib/op/erc20/LibOpERC20BalanceOf.sol index dfaa12096..176ba231a 100644 --- a/src/lib/op/erc20/LibOpERC20BalanceOf.sol +++ b/src/lib/op/erc20/LibOpERC20BalanceOf.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; /// @title LibOpERC20BalanceOf diff --git a/src/lib/op/erc20/LibOpERC20TotalSupply.sol b/src/lib/op/erc20/LibOpERC20TotalSupply.sol index 4aaf0f653..97f2b9b1f 100644 --- a/src/lib/op/erc20/LibOpERC20TotalSupply.sol +++ b/src/lib/op/erc20/LibOpERC20TotalSupply.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; /// @title LibOpERC20TotalSupply diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol index 3c8c7fb2c..9a0af9532 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol index c0e1144f3..ff07beb39 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol index 75e05cd8a..e2ebfddfe 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc5313/LibOpERC5313Owner.sol b/src/lib/op/erc5313/LibOpERC5313Owner.sol index f25dd4f44..8e58b7c22 100644 --- a/src/lib/op/erc5313/LibOpERC5313Owner.sol +++ b/src/lib/op/erc5313/LibOpERC5313Owner.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC5313} from "openzeppelin-contracts/contracts/interfaces/IERC5313.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC5313} from "@openzeppelin-contracts-5.6.1/interfaces/IERC5313.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc721/LibOpERC721BalanceOf.sol b/src/lib/op/erc721/LibOpERC721BalanceOf.sol index bf0050f10..0aa0fc800 100644 --- a/src/lib/op/erc721/LibOpERC721BalanceOf.sol +++ b/src/lib/op/erc721/LibOpERC721BalanceOf.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc721/LibOpERC721OwnerOf.sol b/src/lib/op/erc721/LibOpERC721OwnerOf.sol index f5c150a45..235b0bff3 100644 --- a/src/lib/op/erc721/LibOpERC721OwnerOf.sol +++ b/src/lib/op/erc721/LibOpERC721OwnerOf.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol b/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol index cddc36307..4300b015c 100644 --- a/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol +++ b/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/evm/LibOpBlockNumber.sol b/src/lib/op/evm/LibOpBlockNumber.sol index 87dd1c38c..2c348ae39 100644 --- a/src/lib/op/evm/LibOpBlockNumber.sol +++ b/src/lib/op/evm/LibOpBlockNumber.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpBlockNumber /// @notice Implementation of the EVM `BLOCKNUMBER` opcode as a standard Rainlang opcode. diff --git a/src/lib/op/evm/LibOpBlockTimestamp.sol b/src/lib/op/evm/LibOpBlockTimestamp.sol index 98ee6f9a7..6a0fdaf95 100644 --- a/src/lib/op/evm/LibOpBlockTimestamp.sol +++ b/src/lib/op/evm/LibOpBlockTimestamp.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpBlockTimestamp /// @notice Implementation of the EVM `TIMESTAMP` opcode as a standard Rainlang opcode. diff --git a/src/lib/op/evm/LibOpChainId.sol b/src/lib/op/evm/LibOpChainId.sol index 479f07d8b..3ca258c63 100644 --- a/src/lib/op/evm/LibOpChainId.sol +++ b/src/lib/op/evm/LibOpChainId.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpChainId /// @notice Implementation of the EVM `CHAINID` opcode as a standard Rainlang opcode. diff --git a/src/lib/op/logic/LibOpAny.sol b/src/lib/op/logic/LibOpAny.sol index ce29d17a4..1dc6b1ac0 100644 --- a/src/lib/op/logic/LibOpAny.sol +++ b/src/lib/op/logic/LibOpAny.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpAny /// @notice Opcode to return the first nonzero item on the stack up to the inputs diff --git a/src/lib/op/logic/LibOpBinaryEqualTo.sol b/src/lib/op/logic/LibOpBinaryEqualTo.sol index 84fe686ad..925ea5ec3 100644 --- a/src/lib/op/logic/LibOpBinaryEqualTo.sol +++ b/src/lib/op/logic/LibOpBinaryEqualTo.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/logic/LibOpConditions.sol b/src/lib/op/logic/LibOpConditions.sol index 7db23dcd2..de0a08fc8 100644 --- a/src/lib/op/logic/LibOpConditions.sol +++ b/src/lib/op/logic/LibOpConditions.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {LibIntOrAString, IntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpConditions /// @notice Opcode to evaluate pairwise condition-value slots and return the value diff --git a/src/lib/op/logic/LibOpEnsure.sol b/src/lib/op/logic/LibOpEnsure.sol index b73e781d6..7296b986c 100644 --- a/src/lib/op/logic/LibOpEnsure.sol +++ b/src/lib/op/logic/LibOpEnsure.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibIntOrAString, IntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpEnsure /// @notice Opcode to revert if the condition is zero. diff --git a/src/lib/op/logic/LibOpEqualTo.sol b/src/lib/op/logic/LibOpEqualTo.sol index 9896f170f..15ee5a7bd 100644 --- a/src/lib/op/logic/LibOpEqualTo.sol +++ b/src/lib/op/logic/LibOpEqualTo.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpEqualTo /// @notice Opcode to return 1 if the first item on the stack is equal to diff --git a/src/lib/op/logic/LibOpEvery.sol b/src/lib/op/logic/LibOpEvery.sol index 330f7725f..bad2bbddf 100644 --- a/src/lib/op/logic/LibOpEvery.sol +++ b/src/lib/op/logic/LibOpEvery.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpEvery /// @notice Opcode to return the last item out of N items if they are all true, diff --git a/src/lib/op/logic/LibOpGreaterThan.sol b/src/lib/op/logic/LibOpGreaterThan.sol index 63d3b447e..0ea0afdd8 100644 --- a/src/lib/op/logic/LibOpGreaterThan.sol +++ b/src/lib/op/logic/LibOpGreaterThan.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpGreaterThan /// @notice Opcode to return 1 if the first item on the stack is greater than diff --git a/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol b/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol index 9e9ad1ba0..0f846fe70 100644 --- a/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol +++ b/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpGreaterThanOrEqualTo /// @notice Opcode to return 1 if the first item on the stack is greater than or diff --git a/src/lib/op/logic/LibOpIf.sol b/src/lib/op/logic/LibOpIf.sol index 359d81670..9f9f69c02 100644 --- a/src/lib/op/logic/LibOpIf.sol +++ b/src/lib/op/logic/LibOpIf.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpIf /// @notice Opcode to choose between two values based on a condition. If is diff --git a/src/lib/op/logic/LibOpIsZero.sol b/src/lib/op/logic/LibOpIsZero.sol index 0950f3de0..6abe2caa2 100644 --- a/src/lib/op/logic/LibOpIsZero.sol +++ b/src/lib/op/logic/LibOpIsZero.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpIsZero /// @notice Opcode to return 1 if the top item on the stack is zero, else 0. diff --git a/src/lib/op/logic/LibOpLessThan.sol b/src/lib/op/logic/LibOpLessThan.sol index 98c0d513f..1c13a834e 100644 --- a/src/lib/op/logic/LibOpLessThan.sol +++ b/src/lib/op/logic/LibOpLessThan.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpLessThan /// @notice Opcode to return 1 if the first item on the stack is less than diff --git a/src/lib/op/logic/LibOpLessThanOrEqualTo.sol b/src/lib/op/logic/LibOpLessThanOrEqualTo.sol index e344f6970..2f22a1e3c 100644 --- a/src/lib/op/logic/LibOpLessThanOrEqualTo.sol +++ b/src/lib/op/logic/LibOpLessThanOrEqualTo.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpLessThanOrEqualTo /// @notice Opcode to return 1 if the first item on the stack is less than or diff --git a/src/lib/op/math/LibOpAbs.sol b/src/lib/op/math/LibOpAbs.sol index 881068d43..fbba8ab0d 100644 --- a/src/lib/op/math/LibOpAbs.sol +++ b/src/lib/op/math/LibOpAbs.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpAbs /// @notice Opcode for the absolute value of a decimal floating point number. diff --git a/src/lib/op/math/LibOpAdd.sol b/src/lib/op/math/LibOpAdd.sol index cc2461f15..0f5f3a15d 100644 --- a/src/lib/op/math/LibOpAdd.sol +++ b/src/lib/op/math/LibOpAdd.sol @@ -2,13 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibDecimalFloatImplementation} from "rain.math.float/lib/implementation/LibDecimalFloatImplementation.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import { + LibDecimalFloatImplementation +} from "rain-math-float-0.1.1/src/lib/implementation/LibDecimalFloatImplementation.sol"; /// @title LibOpAdd /// @notice Opcode to add N numbers. Errors on overflow. diff --git a/src/lib/op/math/LibOpAvg.sol b/src/lib/op/math/LibOpAvg.sol index 3523ba325..90fff09aa 100644 --- a/src/lib/op/math/LibOpAvg.sol +++ b/src/lib/op/math/LibOpAvg.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpAvg /// @notice Opcode for the average of two decimal floating point numbers. diff --git a/src/lib/op/math/LibOpCeil.sol b/src/lib/op/math/LibOpCeil.sol index 7145e7e6f..7938fda5c 100644 --- a/src/lib/op/math/LibOpCeil.sol +++ b/src/lib/op/math/LibOpCeil.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpCeil /// @notice Opcode for the ceiling of a decimal floating point number. diff --git a/src/lib/op/math/LibOpDiv.sol b/src/lib/op/math/LibOpDiv.sol index aba6051ea..4be5c5ce2 100644 --- a/src/lib/op/math/LibOpDiv.sol +++ b/src/lib/op/math/LibOpDiv.sol @@ -2,12 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibDecimalFloatImplementation} from "rain.math.float/lib/implementation/LibDecimalFloatImplementation.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import { + LibDecimalFloatImplementation +} from "rain-math-float-0.1.1/src/lib/implementation/LibDecimalFloatImplementation.sol"; /// @title LibOpDiv /// @notice Opcode to div N decimal float values. Errors on overflow. diff --git a/src/lib/op/math/LibOpE.sol b/src/lib/op/math/LibOpE.sol index 3cfd44e4a..62ca64404 100644 --- a/src/lib/op/math/LibOpE.sol +++ b/src/lib/op/math/LibOpE.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpE /// @notice Stacks the mathematical constant e. diff --git a/src/lib/op/math/LibOpExp.sol b/src/lib/op/math/LibOpExp.sol index 3bee20edb..c18c0f804 100644 --- a/src/lib/op/math/LibOpExp.sol +++ b/src/lib/op/math/LibOpExp.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpExp /// @notice Opcode for the natural exponential e^x as decimal floating point. @@ -30,7 +31,7 @@ library LibOpExp { assembly ("memory-safe") { a := mload(stackTop) } - a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); assembly ("memory-safe") { mstore(stackTop, a) @@ -47,7 +48,7 @@ library LibOpExp { returns (StackItem[] memory) { Float a = Float.wrap(StackItem.unwrap(inputs[0])); - a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); StackItem[] memory outputs = new StackItem[](1); outputs[0] = StackItem.wrap(Float.unwrap(a)); diff --git a/src/lib/op/math/LibOpExp2.sol b/src/lib/op/math/LibOpExp2.sol index 9f4c81a0f..f737493b2 100644 --- a/src/lib/op/math/LibOpExp2.sol +++ b/src/lib/op/math/LibOpExp2.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpExp2 /// @notice Opcode for the binary exponential 2^x as decimal floating point. @@ -31,7 +32,7 @@ library LibOpExp2 { a := mload(stackTop) } - a = LibDecimalFloat.FLOAT_TWO.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = LibDecimalFloat.FLOAT_TWO.pow(a, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); assembly ("memory-safe") { mstore(stackTop, a) @@ -48,7 +49,7 @@ library LibOpExp2 { returns (StackItem[] memory) { Float a = Float.wrap(StackItem.unwrap(inputs[0])); - a = LibDecimalFloat.FLOAT_TWO.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = LibDecimalFloat.FLOAT_TWO.pow(a, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); StackItem[] memory outputs = new StackItem[](1); outputs[0] = StackItem.wrap(Float.unwrap(a)); diff --git a/src/lib/op/math/LibOpFloor.sol b/src/lib/op/math/LibOpFloor.sol index 59c7d0326..3ff85a113 100644 --- a/src/lib/op/math/LibOpFloor.sol +++ b/src/lib/op/math/LibOpFloor.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpFloor /// @notice Opcode for the floor of a decimal floating point number. diff --git a/src/lib/op/math/LibOpFrac.sol b/src/lib/op/math/LibOpFrac.sol index d111bc9a5..932d83319 100644 --- a/src/lib/op/math/LibOpFrac.sol +++ b/src/lib/op/math/LibOpFrac.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpFrac /// @notice Opcode for the frac of a decimal floating point number. diff --git a/src/lib/op/math/LibOpGm.sol b/src/lib/op/math/LibOpGm.sol index ef7cc7564..be6846ce3 100644 --- a/src/lib/op/math/LibOpGm.sol +++ b/src/lib/op/math/LibOpGm.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpGm /// @notice Opcode for the signed geometric mean of two decimal floating point @@ -38,7 +39,8 @@ library LibOpGm { } bool aNeg = a.lt(LibDecimalFloat.FLOAT_ZERO); bool bNeg = b.lt(LibDecimalFloat.FLOAT_ZERO); - Float result = a.abs().mul(b.abs()).pow(LibDecimalFloat.FLOAT_HALF, LibDecimalFloat.LOG_TABLES_ADDRESS); + Float result = a.abs().mul(b.abs()) + .pow(LibDecimalFloat.FLOAT_HALF, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); if (aNeg != bNeg) { result = result.minus(); } @@ -63,7 +65,8 @@ library LibOpGm { Float b = Float.wrap(StackItem.unwrap(inputs[1])); bool aNeg = a.lt(LibDecimalFloat.FLOAT_ZERO); bool bNeg = b.lt(LibDecimalFloat.FLOAT_ZERO); - Float result = a.abs().mul(b.abs()).pow(LibDecimalFloat.FLOAT_HALF, LibDecimalFloat.LOG_TABLES_ADDRESS); + Float result = a.abs().mul(b.abs()) + .pow(LibDecimalFloat.FLOAT_HALF, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); if (aNeg != bNeg) { result = result.minus(); } diff --git a/src/lib/op/math/LibOpHeadroom.sol b/src/lib/op/math/LibOpHeadroom.sol index 20a09d414..718140fbb 100644 --- a/src/lib/op/math/LibOpHeadroom.sol +++ b/src/lib/op/math/LibOpHeadroom.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpHeadroom /// @notice Opcode for the headroom (distance to ceil) of a decimal floating diff --git a/src/lib/op/math/LibOpInv.sol b/src/lib/op/math/LibOpInv.sol index 7d71e6b07..9923ed7ee 100644 --- a/src/lib/op/math/LibOpInv.sol +++ b/src/lib/op/math/LibOpInv.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpInv /// @notice Opcode for the inverse 1 / x of a decimal floating point number. diff --git a/src/lib/op/math/LibOpMax.sol b/src/lib/op/math/LibOpMax.sol index 4d824a759..102239f84 100644 --- a/src/lib/op/math/LibOpMax.sol +++ b/src/lib/op/math/LibOpMax.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMax /// @notice Opcode to find the max from N floats. diff --git a/src/lib/op/math/LibOpMaxNegativeValue.sol b/src/lib/op/math/LibOpMaxNegativeValue.sol index 56e114254..de7c0014b 100644 --- a/src/lib/op/math/LibOpMaxNegativeValue.sol +++ b/src/lib/op/math/LibOpMaxNegativeValue.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxNegativeValue /// @notice Exposes the maximum negative representable float value as a Rainlang opcode. diff --git a/src/lib/op/math/LibOpMaxPositiveValue.sol b/src/lib/op/math/LibOpMaxPositiveValue.sol index 47bd84fb0..592380aa2 100644 --- a/src/lib/op/math/LibOpMaxPositiveValue.sol +++ b/src/lib/op/math/LibOpMaxPositiveValue.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxPositiveValue /// @notice Exposes the maximum representable float value as a Rainlang opcode. diff --git a/src/lib/op/math/LibOpMin.sol b/src/lib/op/math/LibOpMin.sol index 542bb3e12..cb7fbe3aa 100644 --- a/src/lib/op/math/LibOpMin.sol +++ b/src/lib/op/math/LibOpMin.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMin /// @notice Opcode to find the min from N floats. diff --git a/src/lib/op/math/LibOpMinNegativeValue.sol b/src/lib/op/math/LibOpMinNegativeValue.sol index 337730286..955c3c999 100644 --- a/src/lib/op/math/LibOpMinNegativeValue.sol +++ b/src/lib/op/math/LibOpMinNegativeValue.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinNegativeValue /// @notice Exposes the minimum representable float value as a Rainlang opcode. diff --git a/src/lib/op/math/LibOpMinPositiveValue.sol b/src/lib/op/math/LibOpMinPositiveValue.sol index 3d6fc3f5c..fa65b66a6 100644 --- a/src/lib/op/math/LibOpMinPositiveValue.sol +++ b/src/lib/op/math/LibOpMinPositiveValue.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinPositiveValue /// @notice Exposes the minimum positive representable float value as a Rainlang opcode. diff --git a/src/lib/op/math/LibOpMul.sol b/src/lib/op/math/LibOpMul.sol index cb2597e15..89a3aaa56 100644 --- a/src/lib/op/math/LibOpMul.sol +++ b/src/lib/op/math/LibOpMul.sol @@ -2,12 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibDecimalFloatImplementation} from "rain.math.float/lib/implementation/LibDecimalFloatImplementation.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import { + LibDecimalFloatImplementation +} from "rain-math-float-0.1.1/src/lib/implementation/LibDecimalFloatImplementation.sol"; /// @title LibOpMul /// @notice Opcode to multiply N decimal floating point values. diff --git a/src/lib/op/math/LibOpPower.sol b/src/lib/op/math/LibOpPower.sol index 5c417307f..e3eaeb88b 100644 --- a/src/lib/op/math/LibOpPower.sol +++ b/src/lib/op/math/LibOpPower.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpPower /// @notice Opcode to raise a decimal floating point value to a float decimal power. @@ -33,7 +34,7 @@ library LibOpPower { stackTop := add(stackTop, 0x20) b := mload(stackTop) } - a = a.pow(b, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = a.pow(b, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); assembly ("memory-safe") { mstore(stackTop, a) @@ -51,7 +52,7 @@ library LibOpPower { { Float a = Float.wrap(StackItem.unwrap(inputs[0])); Float b = Float.wrap(StackItem.unwrap(inputs[1])); - a = a.pow(b, LibDecimalFloat.LOG_TABLES_ADDRESS); + a = a.pow(b, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); StackItem[] memory outputs = new StackItem[](1); outputs[0] = StackItem.wrap(Float.unwrap(a)); diff --git a/src/lib/op/math/LibOpSqrt.sol b/src/lib/op/math/LibOpSqrt.sol index 831b6ee71..b164c04ec 100644 --- a/src/lib/op/math/LibOpSqrt.sol +++ b/src/lib/op/math/LibOpSqrt.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpSqrt /// @notice Opcode for the square root of a decimal floating point number. @@ -30,7 +31,7 @@ library LibOpSqrt { assembly ("memory-safe") { a := mload(stackTop) } - a = a.sqrt(LibDecimalFloat.LOG_TABLES_ADDRESS); + a = a.sqrt(LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); assembly ("memory-safe") { mstore(stackTop, a) @@ -47,7 +48,7 @@ library LibOpSqrt { returns (StackItem[] memory) { Float a = Float.wrap(StackItem.unwrap(inputs[0])); - a = a.sqrt(LibDecimalFloat.LOG_TABLES_ADDRESS); + a = a.sqrt(LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS); StackItem[] memory outputs = new StackItem[](1); outputs[0] = StackItem.wrap(Float.unwrap(a)); diff --git a/src/lib/op/math/LibOpSub.sol b/src/lib/op/math/LibOpSub.sol index 218a0131b..3a273412d 100644 --- a/src/lib/op/math/LibOpSub.sol +++ b/src/lib/op/math/LibOpSub.sol @@ -2,12 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {LibDecimalFloatImplementation} from "rain.math.float/lib/implementation/LibDecimalFloatImplementation.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import { + LibDecimalFloatImplementation +} from "rain-math-float-0.1.1/src/lib/implementation/LibDecimalFloatImplementation.sol"; /// @title LibOpSub /// @notice Opcode to subtract N decimal floating point values. diff --git a/src/lib/op/math/growth/LibOpExponentialGrowth.sol b/src/lib/op/math/growth/LibOpExponentialGrowth.sol index 095002ca6..19aa4e13e 100644 --- a/src/lib/op/math/growth/LibOpExponentialGrowth.sol +++ b/src/lib/op/math/growth/LibOpExponentialGrowth.sol @@ -2,11 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; /// @title LibOpExponentialGrowth /// @notice Exponential growth is base(1 + rate)^t where base is the initial @@ -35,7 +36,9 @@ library LibOpExponentialGrowth { stackTop := add(stackTop, 0x40) t := mload(stackTop) } - base = base.mul(rate.add(LibDecimalFloat.FLOAT_ONE).pow(t, LibDecimalFloat.LOG_TABLES_ADDRESS)); + base = base.mul( + rate.add(LibDecimalFloat.FLOAT_ONE).pow(t, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS) + ); assembly ("memory-safe") { mstore(stackTop, base) @@ -54,7 +57,9 @@ library LibOpExponentialGrowth { Float base = Float.wrap(StackItem.unwrap(inputs[0])); Float rate = Float.wrap(StackItem.unwrap(inputs[1])); Float t = Float.wrap(StackItem.unwrap(inputs[2])); - base = base.mul(rate.add(LibDecimalFloat.FLOAT_ONE).pow(t, LibDecimalFloat.LOG_TABLES_ADDRESS)); + base = base.mul( + rate.add(LibDecimalFloat.FLOAT_ONE).pow(t, LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS) + ); StackItem[] memory outputs = new StackItem[](1); outputs[0] = StackItem.wrap(Float.unwrap(base)); return outputs; diff --git a/src/lib/op/math/growth/LibOpLinearGrowth.sol b/src/lib/op/math/growth/LibOpLinearGrowth.sol index d2c1a4ee2..cef359af0 100644 --- a/src/lib/op/math/growth/LibOpLinearGrowth.sol +++ b/src/lib/op/math/growth/LibOpLinearGrowth.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpLinearGrowth /// @notice Linear growth is base + rate * t where base is the initial value, rate is diff --git a/src/lib/op/math/uint256/LibOpUint256Add.sol b/src/lib/op/math/uint256/LibOpUint256Add.sol index 2329d8c5d..f983943d3 100644 --- a/src/lib/op/math/uint256/LibOpUint256Add.sol +++ b/src/lib/op/math/uint256/LibOpUint256Add.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpUint256Add /// @notice Opcode to add N integers. Errors on overflow. diff --git a/src/lib/op/math/uint256/LibOpUint256Div.sol b/src/lib/op/math/uint256/LibOpUint256Div.sol index 3f2d7964f..1fe8784ac 100644 --- a/src/lib/op/math/uint256/LibOpUint256Div.sol +++ b/src/lib/op/math/uint256/LibOpUint256Div.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256MaxValue.sol b/src/lib/op/math/uint256/LibOpUint256MaxValue.sol index 87d701715..597bca8f9 100644 --- a/src/lib/op/math/uint256/LibOpUint256MaxValue.sol +++ b/src/lib/op/math/uint256/LibOpUint256MaxValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpUint256MaxValue /// @notice Exposes `type(uint256).max` as a Rainlang opcode. diff --git a/src/lib/op/math/uint256/LibOpUint256Mul.sol b/src/lib/op/math/uint256/LibOpUint256Mul.sol index c167f88b1..1906dfc8d 100644 --- a/src/lib/op/math/uint256/LibOpUint256Mul.sol +++ b/src/lib/op/math/uint256/LibOpUint256Mul.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256Power.sol b/src/lib/op/math/uint256/LibOpUint256Power.sol index b898f7d41..4dc4e3fb3 100644 --- a/src/lib/op/math/uint256/LibOpUint256Power.sol +++ b/src/lib/op/math/uint256/LibOpUint256Power.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256Sub.sol b/src/lib/op/math/uint256/LibOpUint256Sub.sol index b22d108c5..5324dcacc 100644 --- a/src/lib/op/math/uint256/LibOpUint256Sub.sol +++ b/src/lib/op/math/uint256/LibOpUint256Sub.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpUint256Sub /// @notice Opcode to sub N integers. Errors on underflow. diff --git a/src/lib/op/store/LibOpGet.sol b/src/lib/op/store/LibOpGet.sol index 12e105445..ee9f09cff 100644 --- a/src/lib/op/store/LibOpGet.sol +++ b/src/lib/op/store/LibOpGet.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {MemoryKVKey, MemoryKVVal, MemoryKV, LibMemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {MemoryKVKey, MemoryKVVal, MemoryKV, LibMemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/store/LibOpSet.sol b/src/lib/op/store/LibOpSet.sol index b638daef4..cc411459d 100644 --- a/src/lib/op/store/LibOpSet.sol +++ b/src/lib/op/store/LibOpSet.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {MemoryKV, MemoryKVKey, MemoryKVVal, LibMemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {MemoryKV, MemoryKVKey, MemoryKVVal, LibMemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibOpSet /// @notice Opcode for recording k/v state changes to be set in storage. diff --git a/src/lib/parse/LibParse.sol b/src/lib/parse/LibParse.sol index ef29d80d5..b600ca82a 100644 --- a/src/lib/parse/LibParse.sol +++ b/src/lib/parse/LibParse.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; import { CMASK_COMMENT_HEAD, CMASK_EOS, @@ -18,11 +18,15 @@ import { CMASK_LHS_STACK_TAIL, CMASK_LHS_STACK_HEAD, CMASK_IDENTIFIER_HEAD -} from "rain.string/lib/parse/LibParseCMask.sol"; -import {LibParseChar} from "rain.string/lib/parse/LibParseChar.sol"; -import {LibParseMeta} from "rain.interpreter.interface/lib/parse/LibParseMeta.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; +import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; +import {LibParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/parse/LibParseMeta.sol"; import {LibParseOperand} from "./LibParseOperand.sol"; -import {OperandV2, OPCODE_STACK, OPCODE_UNKNOWN} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import { + OperandV2, + OPCODE_STACK, + OPCODE_UNKNOWN +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibParseStackName} from "./LibParseStackName.sol"; import { UnexpectedRHSChar, @@ -51,8 +55,8 @@ import {LibParsePragma} from "./LibParsePragma.sol"; import {LibParseInterstitial} from "./LibParseInterstitial.sol"; import {LibParseError} from "./LibParseError.sol"; import {LibSubParse} from "./LibSubParse.sol"; -import {LibBytes} from "rain.solmem/lib/LibBytes.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @dev Size in bytes of the fixed header prepended to sub-parser bytecode. /// Comprises the operand values tail pointer (2 bytes), the literal parsers diff --git a/src/lib/parse/LibParseInterstitial.sol b/src/lib/parse/LibParseInterstitial.sol index 47d07c631..c6115435c 100644 --- a/src/lib/parse/LibParseInterstitial.sol +++ b/src/lib/parse/LibParseInterstitial.sol @@ -9,10 +9,10 @@ import { COMMENT_END_SEQUENCE, COMMENT_START_SEQUENCE, CMASK_COMMENT_END_SEQUENCE_END -} from "rain.string/lib/parse/LibParseCMask.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {MalformedCommentStart, UnclosedComment} from "../../error/ErrParse.sol"; import {LibParseError} from "./LibParseError.sol"; -import {LibParseChar} from "rain.string/lib/parse/LibParseChar.sol"; +import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; /// @dev Shift to extract a packed 2-byte comment delimiter sequence from the /// high bits of a 256-bit mload. diff --git a/src/lib/parse/LibParseOperand.sol b/src/lib/parse/LibParseOperand.sol index 6790ba9e9..d4312b61c 100644 --- a/src/lib/parse/LibParseOperand.sol +++ b/src/lib/parse/LibParseOperand.sol @@ -10,13 +10,17 @@ import { UnexpectedOperandValue, OperandOverflow } from "../../error/ErrParse.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibParseLiteral} from "./literal/LibParseLiteral.sol"; -import {CMASK_OPERAND_END, CMASK_WHITESPACE, CMASK_OPERAND_START} from "rain.string/lib/parse/LibParseCMask.sol"; +import { + CMASK_OPERAND_END, + CMASK_WHITESPACE, + CMASK_OPERAND_START +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {ParseState, OPERAND_VALUES_LENGTH, FSM_YANG_MASK} from "./LibParseState.sol"; import {LibParseError} from "./LibParseError.sol"; import {LibParseInterstitial} from "./LibParseInterstitial.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibParseOperand /// @notice Parses operand values from Rainlang source text and dispatches diff --git a/src/lib/parse/LibParsePragma.sol b/src/lib/parse/LibParsePragma.sol index 0dcdb028e..fdbc8b702 100644 --- a/src/lib/parse/LibParsePragma.sol +++ b/src/lib/parse/LibParsePragma.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.25; import {LibParseState, ParseState} from "./LibParseState.sol"; -import {CMASK_WHITESPACE} from "rain.string/lib/parse/LibParseCMask.sol"; +import {CMASK_WHITESPACE} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../error/ErrParse.sol"; import {LibParseError} from "./LibParseError.sol"; import {LibParseInterstitial} from "./LibParseInterstitial.sol"; diff --git a/src/lib/parse/LibParseState.sol b/src/lib/parse/LibParseState.sol index d3204aea5..fb631388b 100644 --- a/src/lib/parse/LibParseState.sol +++ b/src/lib/parse/LibParseState.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, OPCODE_CONSTANT} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibParseStackTracker, ParseStackTracker} from "./LibParseStackTracker.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; import { DanglingSource, MaxSources, diff --git a/src/lib/parse/LibSubParse.sol b/src/lib/parse/LibSubParse.sol index 765fe0e70..4f81874a6 100644 --- a/src/lib/parse/LibSubParse.sol +++ b/src/lib/parse/LibSubParse.sol @@ -9,9 +9,9 @@ import { OPCODE_CONSTANT, OPCODE_CONTEXT, OperandV2 -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibBytecode, Pointer} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {BadSubParserResult, UnknownWord, UnsupportedLiteralType} from "../../error/ErrParse.sol"; import {IInterpreterExternV4, LibExtern, EncodedExternDispatchV2} from "../extern/LibExtern.sol"; import { @@ -20,7 +20,7 @@ import { ContextGridOverflow, SubParseLiteralDispatchLengthOverflow } from "../../error/ErrSubParse.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; import {LibParseError} from "./LibParseError.sol"; /// @title LibSubParse diff --git a/src/lib/parse/literal/LibParseLiteral.sol b/src/lib/parse/literal/LibParseLiteral.sol index f12e80aba..41b09362e 100644 --- a/src/lib/parse/literal/LibParseLiteral.sol +++ b/src/lib/parse/literal/LibParseLiteral.sol @@ -9,7 +9,7 @@ import { CMASK_SUB_PARSEABLE_LITERAL_HEAD, CMASK_ZERO, CMASK_UPPER_X -} from "rain.string/lib/parse/LibParseCMask.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {UnsupportedLiteralType, UppercaseHexPrefix} from "../../../error/ErrParse.sol"; import {ParseState} from "../LibParseState.sol"; diff --git a/src/lib/parse/literal/LibParseLiteralDecimal.sol b/src/lib/parse/literal/LibParseLiteralDecimal.sol index 1dd732eb0..218ff66bb 100644 --- a/src/lib/parse/literal/LibParseLiteralDecimal.sol +++ b/src/lib/parse/literal/LibParseLiteralDecimal.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.25; import {ParseState} from "../LibParseState.sol"; import {LibParseError} from "../LibParseError.sol"; -import {LibParseDecimalFloat, Float} from "rain.math.float/lib/parse/LibParseDecimalFloat.sol"; -import {LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibParseDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/parse/LibParseDecimalFloat.sol"; +import {LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibParseLiteralDecimal /// @notice Parses decimal numeric literals from Rainlang source text into diff --git a/src/lib/parse/literal/LibParseLiteralHex.sol b/src/lib/parse/literal/LibParseLiteralHex.sol index eaa1d9a5b..d399e1098 100644 --- a/src/lib/parse/literal/LibParseLiteralHex.sol +++ b/src/lib/parse/literal/LibParseLiteralHex.sol @@ -14,7 +14,7 @@ import { CMASK_LOWER_ALPHA_A_F, CMASK_NUMERIC_0_9, CMASK_HEX -} from "rain.string/lib/parse/LibParseCMask.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseError} from "../LibParseError.sol"; /// @title LibParseLiteralHex diff --git a/src/lib/parse/literal/LibParseLiteralString.sol b/src/lib/parse/literal/LibParseLiteralString.sol index e8564e6dc..0920ac997 100644 --- a/src/lib/parse/literal/LibParseLiteralString.sol +++ b/src/lib/parse/literal/LibParseLiteralString.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {ParseState} from "../LibParseState.sol"; -import {IntOrAString, LibIntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {UnclosedStringLiteral, StringTooLong} from "../../../error/ErrParse.sol"; -import {CMASK_STRING_LITERAL_END, CMASK_STRING_LITERAL_TAIL} from "rain.string/lib/parse/LibParseCMask.sol"; +import {CMASK_STRING_LITERAL_END, CMASK_STRING_LITERAL_TAIL} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseError} from "../LibParseError.sol"; /// @title LibParseLiteralString diff --git a/src/lib/parse/literal/LibParseLiteralSubParseable.sol b/src/lib/parse/literal/LibParseLiteralSubParseable.sol index a1d0431e5..d8e05c5ae 100644 --- a/src/lib/parse/literal/LibParseLiteralSubParseable.sol +++ b/src/lib/parse/literal/LibParseLiteralSubParseable.sol @@ -5,11 +5,11 @@ pragma solidity ^0.8.25; import {ParseState} from "../LibParseState.sol"; import {LibParse} from "../LibParse.sol"; import {UnclosedSubParseableLiteral, SubParseableMissingDispatch} from "../../../error/ErrParse.sol"; -import {CMASK_WHITESPACE, CMASK_SUB_PARSEABLE_LITERAL_END} from "rain.string/lib/parse/LibParseCMask.sol"; +import {CMASK_WHITESPACE, CMASK_SUB_PARSEABLE_LITERAL_END} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseInterstitial} from "../LibParseInterstitial.sol"; import {LibParseError} from "../LibParseError.sol"; import {LibSubParse} from "../LibSubParse.sol"; -import {LibParseChar} from "rain.string/lib/parse/LibParseChar.sol"; +import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; /// @title LibParseLiteralSubParseable /// @notice Parses sub-parseable literals delimited by `[` and `]` by diff --git a/src/lib/state/LibInterpreterState.sol b/src/lib/state/LibInterpreterState.sol index 415d0b1cd..1fe8ecec7 100644 --- a/src/lib/state/LibInterpreterState.sol +++ b/src/lib/state/LibInterpreterState.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { FullyQualifiedNamespace, IInterpreterStoreV3 -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @dev Deterministic address used as the `staticcall` target for stack trace /// emissions. Derived from a domain-specific keccak hash so it cannot collide diff --git a/src/lib/state/LibInterpreterStateDataContract.sol b/src/lib/state/LibInterpreterStateDataContract.sol index 74e75faca..a078d1c47 100644 --- a/src/lib/state/LibInterpreterStateDataContract.sol +++ b/src/lib/state/LibInterpreterStateDataContract.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; -import {LibBytes} from "rain.solmem/lib/LibBytes.sol"; -import {FullyQualifiedNamespace} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {IInterpreterStoreV3} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; import {InterpreterState} from "./LibInterpreterState.sol"; import {SOURCE_OFFSET_SHIFT} from "../eval/LibEval.sol"; diff --git a/test/abstract/OpTest.sol b/test/abstract/OpTest.sol index c7c4bdb9a..4b90cd262 100644 --- a/test/abstract/OpTest.sol +++ b/test/abstract/OpTest.sol @@ -4,18 +4,18 @@ pragma solidity =0.8.25; // Exported for convenience in op tests. //forge-lint: disable-next-line(unused-import) -import {Test, stdError} from "forge-std/Test.sol"; -import {LibMemCpy} from "rain.solmem/lib/LibMemCpy.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; -import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Test, stdError} from "forge-std-1.16.1/src/Test.sol"; +import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {RainlangExpressionDeployerDeploymentTest} from "./RainlangExpressionDeployerDeploymentTest.sol"; import {LibInterpreterState, InterpreterState} from "../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "../lib/state/LibInterpreterStateFingerprint.sol"; import {IntegrityCheckState, LibIntegrityCheck} from "../../src/lib/integrity/LibIntegrityCheck.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {UnexpectedOperand} from "../../src/error/ErrParse.sol"; import {BadOpInputsLength, BadOpOutputsLength} from "../../src/lib/integrity/LibIntegrityCheck.sol"; import { @@ -24,15 +24,18 @@ import { IInterpreterStoreV3, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {FullyQualifiedNamespace, StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; -import {ExponentOverflow, CoefficientOverflow} from "rain.math.float/error/ErrDecimalFloat.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; - -import {console2} from "forge-std/console2.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import { + FullyQualifiedNamespace, + StateNamespace +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {ExponentOverflow, CoefficientOverflow} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; + +import {console2} from "forge-std-1.16.1/src/console2.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; bytes32 constant PRE = keccak256(abi.encodePacked("pre")); bytes32 constant POST = keccak256(abi.encodePacked("post")); diff --git a/test/abstract/OperandTest.sol b/test/abstract/OperandTest.sol index 5ffcf13da..80e88ecfb 100644 --- a/test/abstract/OperandTest.sol +++ b/test/abstract/OperandTest.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../src/lib/parse/LibParseState.sol"; diff --git a/test/abstract/ParseLiteralTest.sol b/test/abstract/ParseLiteralTest.sol index 8b1fbc3f8..5dd91b0b9 100644 --- a/test/abstract/ParseLiteralTest.sol +++ b/test/abstract/ParseLiteralTest.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral, UnsupportedLiteralType} from "../../src/lib/parse/literal/LibParseLiteral.sol"; import {LibAllStandardOps} from "../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/abstract/ParseTest.sol b/test/abstract/ParseTest.sol index 7a74f7668..eb488af6d 100644 --- a/test/abstract/ParseTest.sol +++ b/test/abstract/ParseTest.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../src/lib/parse/LibParseState.sol"; diff --git a/test/abstract/RainlangExpressionDeployerDeploymentTest.sol b/test/abstract/RainlangExpressionDeployerDeploymentTest.sol index ccc77bc5f..43061a311 100644 --- a/test/abstract/RainlangExpressionDeployerDeploymentTest.sol +++ b/test/abstract/RainlangExpressionDeployerDeploymentTest.sol @@ -2,15 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../src/concrete/RainlangStore.sol"; import {RainlangParser} from "../../src/concrete/RainlangParser.sol"; import {RainlangInterpreter} from "../../src/concrete/RainlangInterpreter.sol"; import {RainlangExpressionDeployer} from "../../src/concrete/RainlangExpressionDeployer.sol"; -import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.2/src/lib/LibRainDeploy.sol"; import {LibInterpreterDeploy} from "../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibTOFUTokenDecimals} from "rain.tofu.erc20-decimals/lib/LibTOFUTokenDecimals.sol"; +import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; /// @title RainlangExpressionDeployerDeploymentTest /// @notice Tests that the RainlangExpressionDeployer meta is correct. Also diff --git a/test/lib/integrity/LibIntegrityFnPointers.sol b/test/lib/integrity/LibIntegrityFnPointers.sol index 2423f2260..e49343f62 100644 --- a/test/lib/integrity/LibIntegrityFnPointers.sol +++ b/test/lib/integrity/LibIntegrityFnPointers.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.19; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; library LibIntegrityFnPointers { /// Generates fake IO function pointers as the index of each word, as a diff --git a/test/lib/operand/LibOperand.sol b/test/lib/operand/LibOperand.sol index 1aea39cdf..73fe32b3e 100644 --- a/test/lib/operand/LibOperand.sol +++ b/test/lib/operand/LibOperand.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; library LibOperand { function build(uint8 inputs, uint8 outputs, uint16 operandData) internal pure returns (OperandV2) { diff --git a/test/lib/parse/LibMetaFixture.sol b/test/lib/parse/LibMetaFixture.sol index 1d0b49b15..709ecd4c1 100644 --- a/test/lib/parse/LibMetaFixture.sol +++ b/test/lib/parse/LibMetaFixture.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {OperandV2, LibParseOperand} from "../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../src/lib/parse/LibParseState.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; uint256 constant FIXTURE_OPS_LENGTH = 18; diff --git a/test/lib/string/LibCamelToKebab.t.sol b/test/lib/string/LibCamelToKebab.t.sol index 99d254445..433c1ceb2 100644 --- a/test/lib/string/LibCamelToKebab.t.sol +++ b/test/lib/string/LibCamelToKebab.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibCamelToKebab} from "./LibCamelToKebab.sol"; contract LibCamelToKebabTest is Test { diff --git a/test/lib/typecast/LibTestCast.sol b/test/lib/typecast/LibTestCast.sol index eb07883d6..bec9b60f5 100644 --- a/test/lib/typecast/LibTestCast.sol +++ b/test/lib/typecast/LibTestCast.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibTestCast /// @notice Type casts for test code. These are zero-cost reinterpretations diff --git a/test/src/abstract/BaseRainlangExtern.construction.t.sol b/test/src/abstract/BaseRainlangExtern.construction.t.sol index 7af0d8dc2..9eff8b5d5 100644 --- a/test/src/abstract/BaseRainlangExtern.construction.t.sol +++ b/test/src/abstract/BaseRainlangExtern.construction.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {BaseRainlangExtern} from "../../../src/abstract/BaseRainlangExtern.sol"; import {ExternPointersMismatch, ExternOpcodePointersEmpty} from "../../../src/error/ErrExtern.sol"; diff --git a/test/src/abstract/BaseRainlangExtern.ierc165.t.sol b/test/src/abstract/BaseRainlangExtern.ierc165.t.sol index 559204306..8ac8fed72 100644 --- a/test/src/abstract/BaseRainlangExtern.ierc165.t.sol +++ b/test/src/abstract/BaseRainlangExtern.ierc165.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; -import {IInterpreterExternV4} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; +import {IInterpreterExternV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; import {BaseRainlangExtern} from "../../../src/abstract/BaseRainlangExtern.sol"; -import {IIntegrityToolingV1} from "rain.sol.codegen/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain.sol.codegen/interface/IOpcodeToolingV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; /// @dev We need a contract that is deployable in order to test the abstract /// base contract. Must override the function pointer virtuals to return diff --git a/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol b/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol index 580e6f002..92e08b449 100644 --- a/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol +++ b/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {BaseRainlangExtern} from "../../../src/abstract/BaseRainlangExtern.sol"; -import {ExternDispatchV2} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; +import {ExternDispatchV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; import {ExternOpcodeOutOfRange} from "../../../src/error/ErrExtern.sol"; /// @dev Extern with exactly 2 opcode and integrity pointers. diff --git a/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol b/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol index 92755520e..a17681e37 100644 --- a/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {BaseRainlangSubParser} from "../../../src/abstract/BaseRainlangSubParser.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; -import {IParserToolingV1} from "rain.sol.codegen/interface/IParserToolingV1.sol"; -import {ISubParserToolingV1} from "rain.sol.codegen/interface/ISubParserToolingV1.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; /// @dev We need a contract that is deployable in order to test the abstract /// base contract. diff --git a/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol b/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol index c2093e497..183636537 100644 --- a/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {BaseRainlangSubParser, SubParserIndexOutOfBounds} from "../../../src/abstract/BaseRainlangSubParser.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; /// @dev Simple literal parser that returns the dispatch value unchanged. function echoLiteralParser(bytes32 dispatchValue, uint256, uint256) pure returns (bytes32) { diff --git a/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol b/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol index f8711a2f1..dd44e1cbc 100644 --- a/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { BaseRainlangSubParser, SubParserIndexOutOfBounds, AuthoringMetaV2 } from "../../../src/abstract/BaseRainlangSubParser.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; import {LibParseOperand} from "../../../src/lib/parse/LibParseOperand.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @dev Sub parser with 2 words in meta but only 1 word parser pointer. /// Looking up the word at index 1 triggers SubParserIndexOutOfBounds. diff --git a/test/src/concrete/Rainlang.ierc165.t.sol b/test/src/concrete/Rainlang.ierc165.t.sol index 6ee7de3bc..ad17856dc 100644 --- a/test/src/concrete/Rainlang.ierc165.t.sol +++ b/test/src/concrete/Rainlang.ierc165.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {Rainlang} from "../../../src/concrete/Rainlang.sol"; import {IRainlang} from "../../../src/interface/IRainlang.sol"; diff --git a/test/src/concrete/Rainlang.t.sol b/test/src/concrete/Rainlang.t.sol index 47be12cae..5c63a35fc 100644 --- a/test/src/concrete/Rainlang.t.sol +++ b/test/src/concrete/Rainlang.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {Rainlang} from "../../../src/concrete/Rainlang.sol"; import {LibInterpreterDeploy} from "../../../src/lib/deploy/LibInterpreterDeploy.sol"; diff --git a/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol b/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol index 060ee66fd..7b4b408e4 100644 --- a/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; diff --git a/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol b/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol index 13479dc48..cc3760f63 100644 --- a/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; diff --git a/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol b/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol index 4cbadcb9f..5fa7b75ba 100644 --- a/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; -import {IParserPragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; -import {IParserV2} from "rain.interpreter.interface/interface/IParserV2.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; -import {IIntegrityToolingV1} from "rain.sol.codegen/interface/IIntegrityToolingV1.sol"; +import {IParserPragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {IParserV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; contract RainlangExpressionDeployerIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. diff --git a/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol b/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol index 781435235..b70a5de03 100644 --- a/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {MissingFinalSemi} from "../../../src/error/ErrParse.sol"; -import {BadOpInputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; +import {BadOpInputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; contract RainlangExpressionDeployerParse2Test is OpTest { diff --git a/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol b/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol index ba501782b..01da5fd65 100644 --- a/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {PragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol b/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol index 282a04902..6620b1f78 100644 --- a/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { RainlangExpressionDeployer, INTEGRITY_FUNCTION_POINTERS diff --git a/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol b/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol index ef6813f90..4c98a30ca 100644 --- a/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol +++ b/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title RainlangInterpreterEvalNonZeroSourceIndexTest /// @notice Tests that `eval4` correctly selects non-zero source indices. diff --git a/test/src/concrete/RainlangInterpreter.eval.t.sol b/test/src/concrete/RainlangInterpreter.eval.t.sol index 44e1fc0e1..0decb5b9a 100644 --- a/test/src/concrete/RainlangInterpreter.eval.t.sol +++ b/test/src/concrete/RainlangInterpreter.eval.t.sol @@ -3,11 +3,11 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; import {InputsLengthMismatch} from "../../../src/error/ErrEval.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract RainlangInterpreterEvalTest is RainlangExpressionDeployerDeploymentTest { using LibDecimalFloat for Float; diff --git a/test/src/concrete/RainlangInterpreter.extrospect.t.sol b/test/src/concrete/RainlangInterpreter.extrospect.t.sol index 5a3798bda..57dbb21b3 100644 --- a/test/src/concrete/RainlangInterpreter.extrospect.t.sol +++ b/test/src/concrete/RainlangInterpreter.extrospect.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; -import {LibExtrospectBytecode} from "rain.extrospection/lib/LibExtrospectBytecode.sol"; -import {INTERPRETER_DISALLOWED_OPS} from "rain.extrospection/lib/EVMOpcodes.sol"; +import {LibExtrospectBytecode} from "rain-extrospection-0.1.0/src/lib/LibExtrospectBytecode.sol"; +import {INTERPRETER_DISALLOWED_OPS} from "rain-extrospection-0.1.0/src/lib/EVMOpcodes.sol"; contract RainlangInterpreterExtrospectTest is Test { /// The interpreter bytecode MUST NOT contain any reachable state-changing diff --git a/test/src/concrete/RainlangInterpreter.ierc165.t.sol b/test/src/concrete/RainlangInterpreter.ierc165.t.sol index 755cf21ab..8e4090cc6 100644 --- a/test/src/concrete/RainlangInterpreter.ierc165.t.sol +++ b/test/src/concrete/RainlangInterpreter.ierc165.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; -import {IInterpreterV4} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {IOpcodeToolingV1} from "rain.sol.codegen/interface/IOpcodeToolingV1.sol"; +import {IInterpreterV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; contract RainlangInterpreterIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. diff --git a/test/src/concrete/RainlangInterpreter.pointers.t.sol b/test/src/concrete/RainlangInterpreter.pointers.t.sol index 59fc7c7f9..095cdb4c7 100644 --- a/test/src/concrete/RainlangInterpreter.pointers.t.sol +++ b/test/src/concrete/RainlangInterpreter.pointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangInterpreter, OPCODE_FUNCTION_POINTERS} from "../../../src/concrete/RainlangInterpreter.sol"; contract RainlangInterpreterPointersTest is Test { diff --git a/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol b/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol index d1fce1853..d42b9b529 100644 --- a/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol +++ b/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {OddSetLength} from "../../../src/error/ErrStore.sol"; contract RainlangInterpreterStateOverlayTest is RainlangExpressionDeployerDeploymentTest { diff --git a/test/src/concrete/RainlangInterpreter.t.sol b/test/src/concrete/RainlangInterpreter.t.sol index 61c4154ca..b51565faa 100644 --- a/test/src/concrete/RainlangInterpreter.t.sol +++ b/test/src/concrete/RainlangInterpreter.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {OPCODE_FUNCTION_POINTERS} from "../../../src/concrete/RainlangInterpreter.sol"; diff --git a/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol b/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol index 2bfa35577..da2c6a521 100644 --- a/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol +++ b/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; import {ZeroFunctionPointers} from "../../../src/error/ErrEval.sol"; diff --git a/test/src/concrete/RainlangParser.ierc165.t.sol b/test/src/concrete/RainlangParser.ierc165.t.sol index e27715e94..45a42a12e 100644 --- a/test/src/concrete/RainlangParser.ierc165.t.sol +++ b/test/src/concrete/RainlangParser.ierc165.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {IParserToolingV1} from "rain.sol.codegen/interface/IParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; contract RainlangParserIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. diff --git a/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol b/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol index e53ec9b7e..cb87f17a5 100644 --- a/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol +++ b/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; import {ParseMemoryOverflow} from "../../../src/error/ErrParse.sol"; diff --git a/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol b/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol index 5e0c2d72b..4063ce9d7 100644 --- a/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol +++ b/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {PragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; /// @title RainlangParserParsePragmaEmptyInputTest /// @notice Test that `parsePragma1` handles empty input correctly. diff --git a/test/src/concrete/RainlangParser.parserPragma.t.sol b/test/src/concrete/RainlangParser.parserPragma.t.sol index a31baec3d..85fa82c1d 100644 --- a/test/src/concrete/RainlangParser.parserPragma.t.sol +++ b/test/src/concrete/RainlangParser.parserPragma.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {PragmaV1} from "rain.interpreter.interface/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/concrete/RainlangParser.pointers.t.sol b/test/src/concrete/RainlangParser.pointers.t.sol index 442279b1c..6e1476405 100644 --- a/test/src/concrete/RainlangParser.pointers.t.sol +++ b/test/src/concrete/RainlangParser.pointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { RainlangParser, OPERAND_HANDLER_FUNCTION_POINTERS, @@ -11,7 +11,7 @@ import { PARSE_META_BUILD_DEPTH } from "../../../src/concrete/RainlangParser.sol"; import {LibAllStandardOps, AuthoringMetaV2} from "../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; contract RainlangParserPointersTest is Test { function testOperandHandlerFunctionPointers() external { diff --git a/test/src/concrete/RainlangParser.unsafeParse.t.sol b/test/src/concrete/RainlangParser.unsafeParse.t.sol index f2afc6321..8e8311160 100644 --- a/test/src/concrete/RainlangParser.unsafeParse.t.sol +++ b/test/src/concrete/RainlangParser.unsafeParse.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; contract RainlangParserUnsafeParseTest is RainlangExpressionDeployerDeploymentTest { /// Parsing a simple hex literal expression returns correct bytecode diff --git a/test/src/concrete/RainlangReferenceExtern.contextCallingContract.t.sol b/test/src/concrete/RainlangReferenceExtern.contextCallingContract.t.sol index ba85dadad..1fabd5715 100644 --- a/test/src/concrete/RainlangReferenceExtern.contextCallingContract.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.contextCallingContract.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {RainlangReferenceExtern, StackItem} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; contract RainlangReferenceExternContextSenderTest is OpTest { diff --git a/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol b/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol index 5687ab03d..0c4dd6d11 100644 --- a/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {RainlangReferenceExtern, StackItem} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; contract RainlangReferenceExternContextRainlenTest is OpTest { using Strings for address; diff --git a/test/src/concrete/RainlangReferenceExtern.contextSender.t.sol b/test/src/concrete/RainlangReferenceExtern.contextSender.t.sol index c847f523a..2dd80fcc5 100644 --- a/test/src/concrete/RainlangReferenceExtern.contextSender.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.contextSender.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {RainlangReferenceExtern, StackItem} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; contract RainlangReferenceExternContextSenderTest is OpTest { diff --git a/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol b/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol index 367697d40..3370cb547 100644 --- a/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; contract RainlangReferenceExternDescribedByMetaV1 is Test { diff --git a/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol b/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol index 75e91c585..d36412942 100644 --- a/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; -import {IInterpreterExternV4} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; +import {IInterpreterExternV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {IDescribedByMetaV1} from "rain.metadata/interface/IDescribedByMetaV1.sol"; -import {ISubParserToolingV1} from "rain.sol.codegen/interface/ISubParserToolingV1.sol"; -import {IParserToolingV1} from "rain.sol.codegen/interface/IParserToolingV1.sol"; -import {IIntegrityToolingV1} from "rain.sol.codegen/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain.sol.codegen/interface/IOpcodeToolingV1.sol"; +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; contract RainlangReferenceExternIERC165Test is Test { /// Test that ERC165 is implemented for the reference extern contract. diff --git a/test/src/concrete/RainlangReferenceExtern.intInc.t.sol b/test/src/concrete/RainlangReferenceExtern.intInc.t.sol index 5a05c3b75..7deab654f 100644 --- a/test/src/concrete/RainlangReferenceExtern.intInc.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.intInc.t.sol @@ -13,11 +13,11 @@ import { EncodedExternDispatchV2, IInterpreterExternV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; -import {OperandV2, OPCODE_EXTERN} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {OperandV2, OPCODE_EXTERN} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibExtern} from "../../../src/lib/extern/LibExtern.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract RainlangReferenceExternIntIncTest is OpTest { using Strings for address; diff --git a/test/src/concrete/RainlangReferenceExtern.pointers.t.sol b/test/src/concrete/RainlangReferenceExtern.pointers.t.sol index bae2b598c..194d7073f 100644 --- a/test/src/concrete/RainlangReferenceExtern.pointers.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.pointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { RainlangReferenceExtern, OPCODE_FUNCTION_POINTERS, @@ -14,7 +14,7 @@ import { LITERAL_PARSER_FUNCTION_POINTERS, OPERAND_HANDLER_FUNCTION_POINTERS } from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; contract RainlangReferenceExternPointersTest is Test { function testOpcodeFunctionPointers() external { diff --git a/test/src/concrete/RainlangReferenceExtern.repeat.t.sol b/test/src/concrete/RainlangReferenceExtern.repeat.t.sol index 8cd20a2c8..9779bb269 100644 --- a/test/src/concrete/RainlangReferenceExtern.repeat.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.repeat.t.sol @@ -9,7 +9,7 @@ import { InvalidRepeatCount, UnconsumedRepeatDispatchBytes } from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; contract RainlangReferenceExternRepeatTest is OpTest { using Strings for address; diff --git a/test/src/concrete/RainlangReferenceExtern.stackOperand.t.sol b/test/src/concrete/RainlangReferenceExtern.stackOperand.t.sol index 6852b09d9..3856f698c 100644 --- a/test/src/concrete/RainlangReferenceExtern.stackOperand.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.stackOperand.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {RainlangReferenceExtern, StackItem} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; contract RainlangReferenceExternStackOperandTest is OpTest { using Strings for address; diff --git a/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol b/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol index 4be42f6a6..71049da3a 100644 --- a/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; import {SubParserIndexOutOfBounds} from "../../../src/error/ErrSubParse.sol"; diff --git a/test/src/concrete/RainlangReferenceExtern.unknownWord.t.sol b/test/src/concrete/RainlangReferenceExtern.unknownWord.t.sol index 98f866bc8..69bfde540 100644 --- a/test/src/concrete/RainlangReferenceExtern.unknownWord.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.unknownWord.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {UnknownWord} from "../../../src/error/ErrParse.sol"; contract RainlangReferenceExternUnknownWordTest is OpTest { diff --git a/test/src/concrete/RainlangStore.getUninitialized.t.sol b/test/src/concrete/RainlangStore.getUninitialized.t.sol index 6df30982d..89e5ae0b1 100644 --- a/test/src/concrete/RainlangStore.getUninitialized.t.sol +++ b/test/src/concrete/RainlangStore.getUninitialized.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreGetUninitializedTest /// @notice Test that `get()` returns `bytes32(0)` for a key that has diff --git a/test/src/concrete/RainlangStore.ierc165.t.sol b/test/src/concrete/RainlangStore.ierc165.t.sol index 063dbdb56..1bc5dfde6 100644 --- a/test/src/concrete/RainlangStore.ierc165.t.sol +++ b/test/src/concrete/RainlangStore.ierc165.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {IInterpreterStoreV3} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; contract RainlangStoreIERC165Test is Test { /// Store should introspect support for `IERC165` and `IInterpreterStoreV3`. diff --git a/test/src/concrete/RainlangStore.namespaceIsolation.t.sol b/test/src/concrete/RainlangStore.namespaceIsolation.t.sol index 6e5a6dbe2..c55016a61 100644 --- a/test/src/concrete/RainlangStore.namespaceIsolation.t.sol +++ b/test/src/concrete/RainlangStore.namespaceIsolation.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; import { LibNamespace, StateNamespace, FullyQualifiedNamespace -} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; contract RainlangStoreNamespaceIsolationTest is Test { using LibNamespace for StateNamespace; diff --git a/test/src/concrete/RainlangStore.overwriteKey.t.sol b/test/src/concrete/RainlangStore.overwriteKey.t.sol index d4753a972..f2567b288 100644 --- a/test/src/concrete/RainlangStore.overwriteKey.t.sol +++ b/test/src/concrete/RainlangStore.overwriteKey.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreOverwriteKeyTest /// @notice Test that a key appearing twice in a single `kvs` array diff --git a/test/src/concrete/RainlangStore.setEmpty.t.sol b/test/src/concrete/RainlangStore.setEmpty.t.sol index 620bb7cf9..61af83805 100644 --- a/test/src/concrete/RainlangStore.setEmpty.t.sol +++ b/test/src/concrete/RainlangStore.setEmpty.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {StateNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreSetEmptyArrayTest /// @notice Test that `set()` with an empty (zero-length) `kvs` array diff --git a/test/src/concrete/RainlangStore.setEvent.t.sol b/test/src/concrete/RainlangStore.setEvent.t.sol index fb31d63ab..f17b13bac 100644 --- a/test/src/concrete/RainlangStore.setEvent.t.sol +++ b/test/src/concrete/RainlangStore.setEvent.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; -import {IInterpreterStoreV3} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; /// @title RainlangStoreSetEventTest /// @notice Test that the `Set` event is emitted correctly for every diff --git a/test/src/concrete/RainlangStore.t.sol b/test/src/concrete/RainlangStore.t.sol index e6a516c2c..c469d8f5a 100644 --- a/test/src/concrete/RainlangStore.t.sol +++ b/test/src/concrete/RainlangStore.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {Address} from "openzeppelin-contracts/contracts/utils/Address.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; -import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {LibNamespace, StateNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Address} from "@openzeppelin-contracts-5.6.1/utils/Address.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {LibNamespace, StateNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; import {OddSetLength} from "../../../src/error/ErrStore.sol"; diff --git a/test/src/lib/deploy/LibInterpreterDeploy.t.sol b/test/src/lib/deploy/LibInterpreterDeploy.t.sol index 299fe49d5..a89ab3276 100644 --- a/test/src/lib/deploy/LibInterpreterDeploy.t.sol +++ b/test/src/lib/deploy/LibInterpreterDeploy.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test, console2} from "forge-std/Test.sol"; -import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; +import {Test, console2} from "forge-std-1.16.1/src/Test.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.2/src/lib/LibRainDeploy.sol"; import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; import {RainlangStore} from "../../../../src/concrete/RainlangStore.sol"; import {RainlangInterpreter} from "../../../../src/concrete/RainlangInterpreter.sol"; import {RainlangExpressionDeployer} from "../../../../src/concrete/RainlangExpressionDeployer.sol"; import {Rainlang} from "../../../../src/concrete/Rainlang.sol"; -import {LibExtrospectBytecode} from "rain.extrospection/lib/LibExtrospectBytecode.sol"; -import {LibExtrospectMetamorphic} from "rain.extrospection/lib/LibExtrospectMetamorphic.sol"; +import {LibExtrospectBytecode} from "rain-extrospection-0.1.0/src/lib/LibExtrospectBytecode.sol"; +import {LibExtrospectMetamorphic} from "rain-extrospection-0.1.0/src/lib/LibExtrospectMetamorphic.sol"; import {RainlangReferenceExtern} from "../../../../src/concrete/extern/RainlangReferenceExtern.sol"; import { CREATION_CODE as PARSER_CREATION_CODE, @@ -45,16 +45,14 @@ import { contract LibInterpreterDeployTest is Test { function testDeployAddressParser() external { - vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); - - console2.logBytes(LibRainDeploy.ZOLTU_FACTORY.code); - - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangParser).creationCode); - - assertEq(deployedAddress, LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS); - assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); - - assertEq(address(deployedAddress).codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); + address expected = LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS; + if (expected.code.length == 0) { + address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangParser).creationCode); + assertEq(deployedAddress, expected); + } + assertTrue(expected.code.length > 0, "Deployed address has no code"); + assertEq(expected.codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); } function testExpectedCodeHashParser() external { @@ -64,14 +62,14 @@ contract LibInterpreterDeployTest is Test { } function testDeployAddressStore() external { - vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); - - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangStore).creationCode); - - assertEq(deployedAddress, LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS); - assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); - - assertEq(address(deployedAddress).codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); + address expected = LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS; + if (expected.code.length == 0) { + address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangStore).creationCode); + assertEq(deployedAddress, expected); + } + assertTrue(expected.code.length > 0, "Deployed address has no code"); + assertEq(expected.codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); } function testExpectedCodeHashStore() external { @@ -81,14 +79,14 @@ contract LibInterpreterDeployTest is Test { } function testDeployAddressInterpreter() external { - vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); - - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangInterpreter).creationCode); - - assertEq(deployedAddress, LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS); - assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); - - assertEq(address(deployedAddress).codehash, LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); + address expected = LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS; + if (expected.code.length == 0) { + address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangInterpreter).creationCode); + assertEq(deployedAddress, expected); + } + assertTrue(expected.code.length > 0, "Deployed address has no code"); + assertEq(expected.codehash, LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH); } function testExpectedCodeHashInterpreter() external { @@ -98,16 +96,14 @@ contract LibInterpreterDeployTest is Test { } function testDeployAddressExpressionDeployer() external { - vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); - - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangExpressionDeployer).creationCode); - - console2.log("Deployed address:", deployedAddress); - - assertEq(deployedAddress, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS); - assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); - - assertEq(address(deployedAddress).codehash, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); + address expected = LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS; + if (expected.code.length == 0) { + address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangExpressionDeployer).creationCode); + assertEq(deployedAddress, expected); + } + assertTrue(expected.code.length > 0, "Deployed address has no code"); + assertEq(expected.codehash, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH); } function testExpectedCodeHashExpressionDeployer() external { @@ -117,14 +113,14 @@ contract LibInterpreterDeployTest is Test { } function testDeployAddressRainlang() external { - vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); - - address deployedAddress = LibRainDeploy.deployZoltu(type(Rainlang).creationCode); - - assertEq(deployedAddress, LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS); - assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); - - assertEq(address(deployedAddress).codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); + address expected = LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS; + if (expected.code.length == 0) { + address deployedAddress = LibRainDeploy.deployZoltu(type(Rainlang).creationCode); + assertEq(deployedAddress, expected); + } + assertTrue(expected.code.length > 0, "Deployed address has no code"); + assertEq(expected.codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH); } function testExpectedCodeHashRainlang() external { diff --git a/test/src/lib/deploy/LibInterpreterDeployProd.t.sol b/test/src/lib/deploy/LibInterpreterDeployProd.t.sol index 80e527149..d68065fef 100644 --- a/test/src/lib/deploy/LibInterpreterDeployProd.t.sol +++ b/test/src/lib/deploy/LibInterpreterDeployProd.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.2/src/lib/LibRainDeploy.sol"; import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; /// @title LibInterpreterDeployProdTest diff --git a/test/src/lib/eval/LibEval.fBounds.t.sol b/test/src/lib/eval/LibEval.fBounds.t.sol index 6d7733e71..3bcb23ca4 100644 --- a/test/src/lib/eval/LibEval.fBounds.t.sol +++ b/test/src/lib/eval/LibEval.fBounds.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibEval} from "../../../../src/lib/eval/LibEval.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibEvalFBoundsTest is Test { /// Due to the mod of indexes to function pointers the indexes wrap at the diff --git a/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol b/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol index ca1b0ccec..b2030239c 100644 --- a/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol +++ b/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibEval} from "../../../../src/lib/eval/LibEval.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InputsLengthMismatch} from "../../../../src/error/ErrEval.sol"; /// @title LibEvalInputsLengthMismatchTest diff --git a/test/src/lib/eval/LibEval.maxOutputs.t.sol b/test/src/lib/eval/LibEval.maxOutputs.t.sol index 0dbdc9ebd..a1b88530e 100644 --- a/test/src/lib/eval/LibEval.maxOutputs.t.sol +++ b/test/src/lib/eval/LibEval.maxOutputs.t.sol @@ -6,12 +6,12 @@ import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangEx import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibEval} from "../../../../src/lib/eval/LibEval.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibEvalMaxOutputsTest /// @notice Tests that eval4 truncates outputs when maxOutputs < sourceOutputs. diff --git a/test/src/lib/eval/LibEval.multipleSource.t.sol b/test/src/lib/eval/LibEval.multipleSource.t.sol index fc81c9bdd..e9c54d19c 100644 --- a/test/src/lib/eval/LibEval.multipleSource.t.sol +++ b/test/src/lib/eval/LibEval.multipleSource.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; contract LibEvalMultipleSourceTest is RainlangExpressionDeployerDeploymentTest { /// Evaluating sourceIndex 1 of a two-source expression must use the diff --git a/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol b/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol index a2a284c9a..aa85aeeb2 100644 --- a/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol +++ b/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; /// evalLoop processes opcodes in batches of 8 via an unrolled loop that reads /// one 32-byte word (8 x 4-byte opcodes) per iteration. Leftover opcodes diff --git a/test/src/lib/eval/LibEval.remainderOnly.t.sol b/test/src/lib/eval/LibEval.remainderOnly.t.sol index 095964acf..553d4cbc9 100644 --- a/test/src/lib/eval/LibEval.remainderOnly.t.sol +++ b/test/src/lib/eval/LibEval.remainderOnly.t.sol @@ -6,12 +6,12 @@ import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangEx import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibEval} from "../../../../src/lib/eval/LibEval.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibEvalRemainderOnlyTest /// @notice Tests that the evalLoop remainder path correctly dispatches diff --git a/test/src/lib/extern/LibExtern.codec.t.sol b/test/src/lib/extern/LibExtern.codec.t.sol index 257a0ca5d..0eb17f299 100644 --- a/test/src/lib/extern/LibExtern.codec.t.sol +++ b/test/src/lib/extern/LibExtern.codec.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { LibExtern, EncodedExternDispatchV2, diff --git a/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol b/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol index 1882185c7..67e02e561 100644 --- a/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol +++ b/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { LibParseLiteralRepeat, diff --git a/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol index 9f2ad6ba0..0d1bf06fb 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_CALLING_CONTRACT -} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import { LibExternOpContextCallingContract } from "../../../../../../src/lib/extern/reference/op/LibExternOpContextCallingContract.sol"; diff --git a/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol index a70da3591..39079e03a 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { LibExternOpContextRainlen, CONTEXT_CALLER_CONTEXT_COLUMN, diff --git a/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol index 27fffc140..1bbcf5289 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol @@ -2,9 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_SENDER} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import { + CONTEXT_BASE_COLUMN, + CONTEXT_BASE_ROW_SENDER +} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {LibExternOpContextSender} from "../../../../../../src/lib/extern/reference/op/LibExternOpContextSender.sol"; contract LibExternOpContextSenderSubParserTest is Test { diff --git a/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol index a19ddbf3a..d8cc1d7a7 100644 --- a/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONSTANT, OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONSTANT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibExternOpStackOperand} from "../../../../../../src/lib/extern/reference/op/LibExternOpStackOperand.sol"; contract LibExternOpStackOperandSubParserTest is Test { diff --git a/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol b/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol index af944e7e3..c8b128290 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol @@ -5,9 +5,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; import {LibIntegrityCheck} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {BadOpInputsLength, BadOpOutputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {BadOpInputsLength, BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; /// @title LibIntegrityCheckBadOpIOTest /// @notice Verifies that integrityCheck2 reverts with BadOpInputsLength and diff --git a/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol b/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol index 66a670126..d32dc5838 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckMultiSourceTest is RainlangExpressionDeployerDeploymentTest { /// Two-source expression must pass integrity and produce correct diff --git a/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol b/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol index 47dc9cea9..45ca3038f 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; /// @title LibIntegrityCheckNewStateTest diff --git a/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol b/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol index 2abd5eb01..62f9b2dd9 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckStackMaxIndexTest is RainlangExpressionDeployerDeploymentTest { /// stackMaxIndex must track the peak stack height, not the final height. diff --git a/test/src/lib/integrity/LibIntegrityCheck.t.sol b/test/src/lib/integrity/LibIntegrityCheck.t.sol index a43af6588..245f9b463 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import { OpcodeOutOfRange, @@ -11,11 +11,11 @@ import { StackAllocationMismatch, StackOutputsMismatch } from "../../../../src/error/ErrIntegrity.sol"; -import {BadOpInputsLength, BadOpOutputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; +import {BadOpInputsLength, BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; import {INTEGRITY_FUNCTION_POINTERS} from "../../../../src/generated/RainlangExpressionDeployer.pointers.sol"; import {ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @dev Contract whose integrity function pointers are valid for its own /// bytecode. Has a single opcode (index 0) that always returns (1, 1). diff --git a/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol b/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol index d500b4dd6..0a4c65c1a 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckZeroSourceTest is RainlangExpressionDeployerDeploymentTest { /// Empty input produces zero-source bytecode. The parser emits a single diff --git a/test/src/lib/op/00/LibOpConstant.t.sol b/test/src/lib/op/00/LibOpConstant.t.sol index eb1586e7b..1fe5c8fad 100644 --- a/test/src/lib/op/00/LibOpConstant.t.sol +++ b/test/src/lib/op/00/LibOpConstant.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {LibOpConstant} from "../../../../../src/lib/op/00/LibOpConstant.sol"; import {OutOfBoundsConstantRead} from "../../../../../src/error/ErrIntegrity.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; @@ -15,11 +15,11 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {BadOpOutputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpConstantTest /// @notice Test the runtime and integrity time logic of LibOpConstant. diff --git a/test/src/lib/op/00/LibOpContext.t.sol b/test/src/lib/op/00/LibOpContext.t.sol index 72df5825b..ec6b6187c 100644 --- a/test/src/lib/op/00/LibOpContext.t.sol +++ b/test/src/lib/op/00/LibOpContext.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {stdError} from "forge-std/Test.sol"; +import {stdError} from "forge-std-1.16.1/src/Test.sol"; import {LibOpContext} from "../../../../../src/lib/op/00/LibOpContext.sol"; import {OpTest} from "test/abstract/OpTest.sol"; @@ -13,7 +13,7 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/00/LibOpExtern.t.sol b/test/src/lib/op/00/LibOpExtern.t.sol index f14b044dc..878f2101e 100644 --- a/test/src/lib/op/00/LibOpExtern.t.sol +++ b/test/src/lib/op/00/LibOpExtern.t.sol @@ -12,8 +12,8 @@ import { } from "../../../../../src/error/ErrExtern.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; import {LibOpExtern} from "../../../../../src/lib/op/00/LibOpExtern.sol"; import {LibExtern} from "../../../../../src/lib/extern/LibExtern.sol"; import { @@ -21,11 +21,11 @@ import { IInterpreterExternV4, ExternDispatchV2, StackItem -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpExternTest /// @notice Test the runtime and integrity time logic of LibOpExtern. diff --git a/test/src/lib/op/00/LibOpStack.t.sol b/test/src/lib/op/00/LibOpStack.t.sol index a0d4e5c37..2006e7151 100644 --- a/test/src/lib/op/00/LibOpStack.t.sol +++ b/test/src/lib/op/00/LibOpStack.t.sol @@ -2,21 +2,26 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; - -import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; + +import { + OperandV2, + SourceIndexV2, + EvalV4, + StackItem +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {LibOpStack} from "../../../../../src/lib/op/00/LibOpStack.sol"; import {OutOfBoundsStackRead} from "../../../../../src/error/ErrIntegrity.sol"; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "test/lib/state/LibInterpreterStateFingerprint.sol"; -import {FullyQualifiedNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; import {OpTest, PRE, POST} from "test/abstract/OpTest.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {BadOpOutputsLength} from "rain.interpreter.interface/error/ErrIntegrity.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpStackTest /// @notice Test the runtime and integrity time logic of LibOpStack. diff --git a/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol b/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol index 5c115f7d9..766089675 100644 --- a/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol +++ b/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibAllStandardOps, ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {LibCamelToKebab} from "test/lib/string/LibCamelToKebab.sol"; /// @title LibAllStandardOpsFilesystemOrderingTest diff --git a/test/src/lib/op/LibAllStandardOps.t.sol b/test/src/lib/op/LibAllStandardOps.t.sol index d6d68ecc4..3d669c338 100644 --- a/test/src/lib/op/LibAllStandardOps.t.sol +++ b/test/src/lib/op/LibAllStandardOps.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibAllStandardOps, ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {LITERAL_PARSERS_LENGTH} from "../../../../src/lib/parse/literal/LibParseLiteral.sol"; /// @title LibAllStandardOpsTest diff --git a/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol index 93b4ed0b7..3b21897af 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpBitwiseAnd} from "../../../../../src/lib/op/bitwise/LibOpBitwiseAnd.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol index f906d7936..8bcac8883 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol @@ -6,12 +6,12 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseCountOnes} from "../../../../../src/lib/op/bitwise/LibOpBitwiseCountOnes.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibCtPop} from "rain.math.binary/lib/LibCtPop.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; contract LibOpBitwiseCountOnesTest is OpTest { /// Directly test the integrity logic of LibOpBitwiseCountOnes. All possible operands diff --git a/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol index adc2c0921..ab8bc78e2 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {TruncatedBitwiseEncoding, ZeroLengthBitwiseEncoding} from "../../../../../src/error/ErrBitwise.sol"; import {LibOpBitwiseDecode} from "../../../../../src/lib/op/bitwise/LibOpBitwiseDecode.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol index ae749340c..d9a47fa5d 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {TruncatedBitwiseEncoding, ZeroLengthBitwiseEncoding} from "../../../../../src/error/ErrBitwise.sol"; import {LibOpBitwiseEncode} from "../../../../../src/lib/op/bitwise/LibOpBitwiseEncode.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol index 15c72ea24..6a1a04fa0 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpBitwiseOr} from "../../../../../src/lib/op/bitwise/LibOpBitwiseOr.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol index ba6a934b0..d6a4887d6 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol @@ -6,7 +6,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseShiftLeft} from "../../../../../src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../../../src/error/ErrBitwise.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {OperandOverflow} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol index d658d28a0..984e71487 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol @@ -6,7 +6,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseShiftRight} from "../../../../../src/lib/op/bitwise/LibOpBitwiseShiftRight.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../../../src/error/ErrBitwise.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {OperandOverflow} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/call/LibOpCall.t.sol b/test/src/lib/op/call/LibOpCall.t.sol index 5282c1072..44c25352b 100644 --- a/test/src/lib/op/call/LibOpCall.t.sol +++ b/test/src/lib/op/call/LibOpCall.t.sol @@ -8,17 +8,17 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {OpTest} from "test/abstract/OpTest.sol"; -import {BytecodeTest} from "rain.interpreter.interface/../test/abstract/BytecodeTest.sol"; +import {BytecodeTest} from "rain-interpreter-interface-0.1.0/src/../test/abstract/BytecodeTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpCall} from "../../../../../src/lib/op/call/LibOpCall.sol"; import {CallOutputsExceedSource, CallInputsMismatchSource} from "../../../../../src/error/ErrIntegrity.sol"; -import {LibBytecode, SourceIndexOutOfBounds} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode, SourceIndexOutOfBounds} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {STACK_TRACER} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpCallTest /// @notice Test the LibOpCall library that includes the "call" word. diff --git a/test/src/lib/op/crypto/LibOpHash.t.sol b/test/src/lib/op/crypto/LibOpHash.t.sol index f6a47d478..44277df9a 100644 --- a/test/src/lib/op/crypto/LibOpHash.t.sol +++ b/test/src/lib/op/crypto/LibOpHash.t.sol @@ -5,18 +5,23 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpHash} from "../../../../../src/lib/op/crypto/LibOpHash.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; - -import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; - -import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {FullyQualifiedNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; + +import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; + +import { + OperandV2, + SourceIndexV2, + EvalV4, + StackItem +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpHashTest /// @notice Test the runtime and integrity time logic of LibOpHash. diff --git a/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol b/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol index efbbb04b1..4a0a81a18 100644 --- a/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol @@ -4,17 +4,17 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpERC20Allowance} from "../../../../../src/lib/op/erc20/LibOpERC20Allowance.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {IERC20Metadata} from "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {TOFUOutcome, ITOFUTokenDecimals} from "rain.tofu.erc20-decimals/interface/ITOFUTokenDecimals.sol"; +import {IERC20Metadata} from "@openzeppelin-contracts-5.6.1/token/ERC20/extensions/IERC20Metadata.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20AllowanceTest /// @notice Test the opcode for getting the allowance of an erc20 token. diff --git a/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol b/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol index 3edc6a83b..d56ba9f9d 100644 --- a/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol @@ -4,17 +4,17 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpERC20BalanceOf} from "../../../../../src/lib/op/erc20/LibOpERC20BalanceOf.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {IERC20Metadata} from "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {TOFUOutcome, ITOFUTokenDecimals} from "rain.tofu.erc20-decimals/interface/ITOFUTokenDecimals.sol"; +import {IERC20Metadata} from "@openzeppelin-contracts-5.6.1/token/ERC20/extensions/IERC20Metadata.sol"; +import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20BalanceOfTest /// @notice Test the opcode for getting the balance of an erc20 token. diff --git a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol index 328076a36..33599288f 100644 --- a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol @@ -4,17 +4,17 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpERC20TotalSupply} from "../../../../../src/lib/op/erc20/LibOpERC20TotalSupply.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/interfaces/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {IERC20Metadata} from "openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol"; -import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {TOFUOutcome, ITOFUTokenDecimals} from "rain.tofu.erc20-decimals/interface/ITOFUTokenDecimals.sol"; +import {IERC20Metadata} from "@openzeppelin-contracts-5.6.1/interfaces/IERC20Metadata.sol"; +import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20TotalSupplyTest /// @notice Test the opcode for getting the total supply of an erc20 contract. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol index 078ffd6ef..b9b6c1de8 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpUint256ERC20Allowance} from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20AllowanceTest /// @notice Test the opcode for getting the allowance of an erc20 token. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol index ec8646592..38cb39e23 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpUint256ERC20BalanceOf} from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20BalanceOfTest /// @notice Test the opcode for getting the balance of an erc20 token. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol index bfd540e6c..6f0a0de9b 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol @@ -4,16 +4,16 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { LibOpUint256ERC20TotalSupply } from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol"; -import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; +import {IERC20} from "@openzeppelin-contracts-5.6.1/interfaces/IERC20.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20TotalSupplyTest /// @notice Test the opcode for getting the total supply of an erc20 contract. diff --git a/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol b/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol index 2ab4ad85b..66223d5b6 100644 --- a/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol +++ b/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOpERC5313Owner} from "../../../../../src/lib/op/erc5313/LibOpERC5313Owner.sol"; -import {IERC5313} from "openzeppelin-contracts/contracts/interfaces/IERC5313.sol"; +import {IERC5313} from "@openzeppelin-contracts-5.6.1/interfaces/IERC5313.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC5313OwnerTest /// @notice Test the opcode for getting the owner of an erc5313 contract. diff --git a/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol b/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol index 24510acf9..fafbcb0ed 100644 --- a/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol +++ b/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol @@ -5,23 +5,23 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpERC721BalanceOf} from "../../../../../src/lib/op/erc721/LibOpERC721BalanceOf.sol"; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; import { FullyQualifiedNamespace, OperandV2, SourceIndexV2, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; -import {LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; +import {LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC721BalanceOfTest /// @notice Test the opcode for getting the balance of an erc721 token. diff --git a/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol b/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol index e1929164d..3809b398b 100644 --- a/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol +++ b/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol @@ -5,23 +5,23 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpERC721OwnerOf} from "../../../../../src/lib/op/erc721/LibOpERC721OwnerOf.sol"; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; import { FullyQualifiedNamespace, SourceIndexV2, OperandV2, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; /// @title LibOpERC721OwnerOfTest /// @notice Test the opcode for getting the owner of an erc721 token. diff --git a/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol b/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol index 6ef4ec89a..585e27c26 100644 --- a/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol +++ b/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol @@ -5,21 +5,21 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpUint256ERC721BalanceOf} from "../../../../../../src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol"; -import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; +import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; import { FullyQualifiedNamespace, OperandV2, SourceIndexV2, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; /// @title LibOpUint256ERC721BalanceOfTest diff --git a/test/src/lib/op/evm/LibOpBlockNumber.t.sol b/test/src/lib/op/evm/LibOpBlockNumber.t.sol index a1a175189..dcbc750f6 100644 --- a/test/src/lib/op/evm/LibOpBlockNumber.t.sol +++ b/test/src/lib/op/evm/LibOpBlockNumber.t.sol @@ -4,9 +4,9 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibStackPointer} from "rain.solmem/lib/LibStackPointer.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibStackPointer} from "rain-solmem-0.1.3/src/lib/LibStackPointer.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBlockNumber} from "../../../../../src/lib/op/evm/LibOpBlockNumber.sol"; diff --git a/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol b/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol index 9a8ebd830..de867f70c 100644 --- a/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol +++ b/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol @@ -3,15 +3,20 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {Pointer, LibPointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibStackPointer} from "rain.solmem/lib/LibStackPointer.sol"; +import {Pointer, LibPointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibStackPointer} from "rain-solmem-0.1.3/src/lib/LibStackPointer.sol"; import {LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import { + OperandV2, + SourceIndexV2, + EvalV4, + StackItem +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {FullyQualifiedNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {LibOpBlockTimestamp} from "../../../../../src/lib/op/evm/LibOpBlockTimestamp.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/evm/LibOpChainId.t.sol b/test/src/lib/op/evm/LibOpChainId.t.sol index 5bb51d7ef..a61f42af4 100644 --- a/test/src/lib/op/evm/LibOpChainId.t.sol +++ b/test/src/lib/op/evm/LibOpChainId.t.sol @@ -8,7 +8,7 @@ import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/stat import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpChainId} from "../../../../../src/lib/op/evm/LibOpChainId.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; /// @title LibOpChainIdTest diff --git a/test/src/lib/op/logic/LibOpAny.t.sol b/test/src/lib/op/logic/LibOpAny.t.sol index 936a21d55..c9515ed8c 100644 --- a/test/src/lib/op/logic/LibOpAny.t.sol +++ b/test/src/lib/op/logic/LibOpAny.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpAny} from "../../../../../src/lib/op/logic/LibOpAny.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; diff --git a/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol b/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol index ed22ff266..ee2b5377b 100644 --- a/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpBinaryEqualTo} from "../../../../../src/lib/op/logic/LibOpBinaryEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpConditions.t.sol b/test/src/lib/op/logic/LibOpConditions.t.sol index 71fc5d090..59c95787c 100644 --- a/test/src/lib/op/logic/LibOpConditions.t.sol +++ b/test/src/lib/op/logic/LibOpConditions.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpConditions} from "../../../../../src/lib/op/logic/LibOpConditions.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibIntOrAString, IntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpConditionsTest is OpTest { using LibUint256Array for uint256[]; diff --git a/test/src/lib/op/logic/LibOpEnsure.t.sol b/test/src/lib/op/logic/LibOpEnsure.t.sol index 674a5ae95..d3c9e691e 100644 --- a/test/src/lib/op/logic/LibOpEnsure.t.sol +++ b/test/src/lib/op/logic/LibOpEnsure.t.sol @@ -7,11 +7,11 @@ import {ExcessRHSItems} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; import {LibOpEnsure} from "../../../../../src/lib/op/logic/LibOpEnsure.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {LibIntOrAString, IntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpEnsureTest is OpTest { using LibDecimalFloat for Float; diff --git a/test/src/lib/op/logic/LibOpEqualTo.t.sol b/test/src/lib/op/logic/LibOpEqualTo.t.sol index c9169f525..f978ece70 100644 --- a/test/src/lib/op/logic/LibOpEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpEqualTo} from "../../../../../src/lib/op/logic/LibOpEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpEvery.t.sol b/test/src/lib/op/logic/LibOpEvery.t.sol index 870787c8a..357b7a083 100644 --- a/test/src/lib/op/logic/LibOpEvery.t.sol +++ b/test/src/lib/op/logic/LibOpEvery.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpEvery} from "../../../../../src/lib/op/logic/LibOpEvery.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpEveryTest is OpTest { /// Directly test the integrity logic of LibOpEvery. This tests the happy diff --git a/test/src/lib/op/logic/LibOpGreaterThan.t.sol b/test/src/lib/op/logic/LibOpGreaterThan.t.sol index 168e02178..d15189223 100644 --- a/test/src/lib/op/logic/LibOpGreaterThan.t.sol +++ b/test/src/lib/op/logic/LibOpGreaterThan.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpGreaterThan} from "../../../../../src/lib/op/logic/LibOpGreaterThan.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol b/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol index aea07437c..cc5b7b909 100644 --- a/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpGreaterThanOrEqualTo} from "../../../../../src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpIf.t.sol b/test/src/lib/op/logic/LibOpIf.t.sol index d92a4260d..d80314202 100644 --- a/test/src/lib/op/logic/LibOpIf.t.sol +++ b/test/src/lib/op/logic/LibOpIf.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpIf} from "../../../../../src/lib/op/logic/LibOpIf.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpIfTest is OpTest { /// Directly test the integrity logic of LibOpIf. No matter the diff --git a/test/src/lib/op/logic/LibOpIsZero.t.sol b/test/src/lib/op/logic/LibOpIsZero.t.sol index a59d549d1..4cfe3a66e 100644 --- a/test/src/lib/op/logic/LibOpIsZero.t.sol +++ b/test/src/lib/op/logic/LibOpIsZero.t.sol @@ -6,7 +6,7 @@ import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpIsZero} from "../../../../../src/lib/op/logic/LibOpIsZero.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpIsZeroTest is OpTest { diff --git a/test/src/lib/op/logic/LibOpLessThan.t.sol b/test/src/lib/op/logic/LibOpLessThan.t.sol index 66968fc3b..ca123377b 100644 --- a/test/src/lib/op/logic/LibOpLessThan.t.sol +++ b/test/src/lib/op/logic/LibOpLessThan.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpLessThan} from "../../../../../src/lib/op/logic/LibOpLessThan.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol b/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol index 3def1670a..891b35069 100644 --- a/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol @@ -11,10 +11,10 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpLessThanOrEqualToTest is OpTest { diff --git a/test/src/lib/op/math/LibOpAbs.t.sol b/test/src/lib/op/math/LibOpAbs.t.sol index 26a35f6c7..6597e00ae 100644 --- a/test/src/lib/op/math/LibOpAbs.t.sol +++ b/test/src/lib/op/math/LibOpAbs.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpAbs} from "../../../../../src/lib/op/math/LibOpAbs.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpAbsTest is OpTest { /// Directly test the integrity logic of LibOpAbs. diff --git a/test/src/lib/op/math/LibOpAdd.t.sol b/test/src/lib/op/math/LibOpAdd.t.sol index 18237287b..d44644162 100644 --- a/test/src/lib/op/math/LibOpAdd.t.sol +++ b/test/src/lib/op/math/LibOpAdd.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOpAdd} from "../../../../../src/lib/op/math/LibOpAdd.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpAddTest is OpTest { /// Directly test the integrity logic of LibOpAdd. This tests the happy diff --git a/test/src/lib/op/math/LibOpAvg.t.sol b/test/src/lib/op/math/LibOpAvg.t.sol index 56fb2455a..6d94e016a 100644 --- a/test/src/lib/op/math/LibOpAvg.t.sol +++ b/test/src/lib/op/math/LibOpAvg.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpAvg} from "../../../../../src/lib/op/math/LibOpAvg.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpAvgTest is OpTest { /// Directly test the integrity logic of LibOpAvg. diff --git a/test/src/lib/op/math/LibOpCeil.t.sol b/test/src/lib/op/math/LibOpCeil.t.sol index ef37f715d..771f4ebd3 100644 --- a/test/src/lib/op/math/LibOpCeil.t.sol +++ b/test/src/lib/op/math/LibOpCeil.t.sol @@ -4,9 +4,9 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpCeil} from "../../../../../src/lib/op/math/LibOpCeil.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpCeilTest is OpTest { /// Directly test the integrity logic of LibOpCeil. diff --git a/test/src/lib/op/math/LibOpDiv.t.sol b/test/src/lib/op/math/LibOpDiv.t.sol index 6ac04101f..b6616593f 100644 --- a/test/src/lib/op/math/LibOpDiv.t.sol +++ b/test/src/lib/op/math/LibOpDiv.t.sol @@ -5,12 +5,12 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, InterpreterState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOpDiv} from "../../../../../src/lib/op/math/LibOpDiv.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import { LibDecimalFloatImplementation, DivisionByZero -} from "rain.math.float/lib/implementation/LibDecimalFloatImplementation.sol"; +} from "rain-math-float-0.1.1/src/lib/implementation/LibDecimalFloatImplementation.sol"; contract LibOpDivTest is OpTest { using LibDecimalFloat for Float; diff --git a/test/src/lib/op/math/LibOpE.t.sol b/test/src/lib/op/math/LibOpE.t.sol index 8a01f560e..5d46d1150 100644 --- a/test/src/lib/op/math/LibOpE.t.sol +++ b/test/src/lib/op/math/LibOpE.t.sol @@ -12,10 +12,10 @@ import { StackItem, FullyQualifiedNamespace, SourceIndexV2 -} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpETest /// @notice Tests for the mathematical constant e opcode. diff --git a/test/src/lib/op/math/LibOpExp.t.sol b/test/src/lib/op/math/LibOpExp.t.sol index f7755f4a5..cf8e7684f 100644 --- a/test/src/lib/op/math/LibOpExp.t.sol +++ b/test/src/lib/op/math/LibOpExp.t.sol @@ -5,12 +5,12 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpExp} from "../../../../../src/lib/op/math/LibOpExp.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpExpTest is OpTest { function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpExp. diff --git a/test/src/lib/op/math/LibOpExp2.t.sol b/test/src/lib/op/math/LibOpExp2.t.sol index 955a6704a..eb4064b70 100644 --- a/test/src/lib/op/math/LibOpExp2.t.sol +++ b/test/src/lib/op/math/LibOpExp2.t.sol @@ -5,12 +5,12 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpExp2} from "../../../../../src/lib/op/math/LibOpExp2.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpExp2Test is OpTest { function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpExp2. diff --git a/test/src/lib/op/math/LibOpFloor.t.sol b/test/src/lib/op/math/LibOpFloor.t.sol index ab2b05a9e..ebe8b725e 100644 --- a/test/src/lib/op/math/LibOpFloor.t.sol +++ b/test/src/lib/op/math/LibOpFloor.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpFloor} from "../../../../../src/lib/op/math/LibOpFloor.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpFloorTest is OpTest { using LibDecimalFloat for Float; diff --git a/test/src/lib/op/math/LibOpFrac.t.sol b/test/src/lib/op/math/LibOpFrac.t.sol index 084ba3137..6dfa33c5b 100644 --- a/test/src/lib/op/math/LibOpFrac.t.sol +++ b/test/src/lib/op/math/LibOpFrac.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpFrac} from "../../../../../src/lib/op/math/LibOpFrac.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpFracTest is OpTest { /// Directly test the integrity logic of LibOpFrac. diff --git a/test/src/lib/op/math/LibOpGm.t.sol b/test/src/lib/op/math/LibOpGm.t.sol index 15da42f0f..ac481103f 100644 --- a/test/src/lib/op/math/LibOpGm.t.sol +++ b/test/src/lib/op/math/LibOpGm.t.sol @@ -5,12 +5,12 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpGm} from "../../../../../src/lib/op/math/LibOpGm.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpGmTest is OpTest { function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpGm. diff --git a/test/src/lib/op/math/LibOpHeadroom.t.sol b/test/src/lib/op/math/LibOpHeadroom.t.sol index 5da5ba12a..81379e013 100644 --- a/test/src/lib/op/math/LibOpHeadroom.t.sol +++ b/test/src/lib/op/math/LibOpHeadroom.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpHeadroom} from "../../../../../src/lib/op/math/LibOpHeadroom.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpHeadroomTest is OpTest { /// Directly test the integrity logic of LibOpHeadroom. diff --git a/test/src/lib/op/math/LibOpInv.t.sol b/test/src/lib/op/math/LibOpInv.t.sol index c432ff53f..cdc5a9068 100644 --- a/test/src/lib/op/math/LibOpInv.t.sol +++ b/test/src/lib/op/math/LibOpInv.t.sol @@ -3,11 +3,11 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {DivisionByZero} from "rain.math.float/error/ErrDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {DivisionByZero} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; import {LibOpInv} from "../../../../../src/lib/op/math/LibOpInv.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpInvTest is OpTest { /// Directly test the integrity logic of LibOpInv. diff --git a/test/src/lib/op/math/LibOpMax.t.sol b/test/src/lib/op/math/LibOpMax.t.sol index 75f87d3df..51f97916c 100644 --- a/test/src/lib/op/math/LibOpMax.t.sol +++ b/test/src/lib/op/math/LibOpMax.t.sol @@ -6,9 +6,9 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpMax} from "../../../../../src/lib/op/math/LibOpMax.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpMaxTest is OpTest { /// Directly test the integrity logic of LibOpMax. This tests the happy diff --git a/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol index 46f7fd703..934dd6ae6 100644 --- a/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol +++ b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMaxNegativeValue} from "../../../../../src/lib/op/math/LibOpMaxNegativeValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxNegativeValueTest /// @notice Test the runtime and integrity time logic of LibOpMaxNegativeValue. diff --git a/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol index 600cf0f4e..e39265ad4 100644 --- a/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol +++ b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMaxPositiveValue} from "../../../../../src/lib/op/math/LibOpMaxPositiveValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxPositiveValueTest /// @notice Test the runtime and integrity time logic of LibOpMaxPositiveValue. diff --git a/test/src/lib/op/math/LibOpMin.t.sol b/test/src/lib/op/math/LibOpMin.t.sol index c8753f1c0..324b8c4f7 100644 --- a/test/src/lib/op/math/LibOpMin.t.sol +++ b/test/src/lib/op/math/LibOpMin.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, InterpreterState} from "test/abstract/OpTest.sol"; import {LibOpMin} from "../../../../../src/lib/op/math/LibOpMin.sol"; import {LibOperand, OperandV2} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpMinTest is OpTest { /// Directly test the integrity logic of LibOpMin. This tests the happy diff --git a/test/src/lib/op/math/LibOpMinNegativeValue.t.sol b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol index a1288165f..1227286a4 100644 --- a/test/src/lib/op/math/LibOpMinNegativeValue.t.sol +++ b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMinNegativeValue} from "../../../../../src/lib/op/math/LibOpMinNegativeValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinNegativeValueTest /// @notice Test the runtime and integrity time logic of LibOpMinNegativeValue. diff --git a/test/src/lib/op/math/LibOpMinPositiveValue.t.sol b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol index 4a71a6c5a..03a0266a1 100644 --- a/test/src/lib/op/math/LibOpMinPositiveValue.t.sol +++ b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol @@ -5,10 +5,10 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMinPositiveValue} from "../../../../../src/lib/op/math/LibOpMinPositiveValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinPositiveValueTest /// @notice Test the runtime and integrity time logic of LibOpMinPositiveValue. diff --git a/test/src/lib/op/math/LibOpMul.t.sol b/test/src/lib/op/math/LibOpMul.t.sol index 35c76ed15..754377abf 100644 --- a/test/src/lib/op/math/LibOpMul.t.sol +++ b/test/src/lib/op/math/LibOpMul.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {console2} from "forge-std/Test.sol"; +import {console2} from "forge-std-1.16.1/src/Test.sol"; import {LibOpMul} from "../../../../../src/lib/op/math/LibOpMul.sol"; import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {ExponentOverflow, CoefficientOverflow} from "rain.math.float/error/ErrDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {ExponentOverflow, CoefficientOverflow} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; contract LibOpMulTest is OpTest { /// Directly test the integrity logic of LibOpMul. This tests the diff --git a/test/src/lib/op/math/LibOpPower.t.sol b/test/src/lib/op/math/LibOpPower.t.sol index 833f772af..c8591627a 100644 --- a/test/src/lib/op/math/LibOpPower.t.sol +++ b/test/src/lib/op/math/LibOpPower.t.sol @@ -5,13 +5,13 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpPower} from "../../../../../src/lib/op/math/LibOpPower.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {PowNegativeBase} from "rain.math.float/error/ErrDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {PowNegativeBase} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; contract LibOpPowerTest is OpTest { function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpPower. diff --git a/test/src/lib/op/math/LibOpSqrt.t.sol b/test/src/lib/op/math/LibOpSqrt.t.sol index 42b960893..38c9ff2aa 100644 --- a/test/src/lib/op/math/LibOpSqrt.t.sol +++ b/test/src/lib/op/math/LibOpSqrt.t.sol @@ -3,17 +3,17 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {PowNegativeBase} from "rain.math.float/error/ErrDecimalFloat.sol"; +import {PowNegativeBase} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; import {LibOpSqrt} from "../../../../../src/lib/op/math/LibOpSqrt.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpSqrtTest is OpTest { using LibDecimalFloat for Float; function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpSqrt. diff --git a/test/src/lib/op/math/LibOpSub.t.sol b/test/src/lib/op/math/LibOpSub.t.sol index 85d12d9a3..2d7741167 100644 --- a/test/src/lib/op/math/LibOpSub.t.sol +++ b/test/src/lib/op/math/LibOpSub.t.sol @@ -6,8 +6,8 @@ import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {UnexpectedOperandValue, UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOpSub} from "../../../../../src/lib/op/math/LibOpSub.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpSubTest is OpTest { /// Directly test the integrity logic of LibOpSub. This tests the happy diff --git a/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol b/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol index 2eb4ac27e..a3de68559 100644 --- a/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol +++ b/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol @@ -5,12 +5,12 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpExponentialGrowth} from "../../../../../../src/lib/op/math/growth/LibOpExponentialGrowth.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpExponentialGrowthTest is OpTest { function beforeOpTestConstructor() internal virtual override { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); + vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); } /// Directly test the integrity logic of LibOpExponentialGrowth. diff --git a/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol b/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol index 500e97223..06c8e3943 100644 --- a/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol +++ b/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpLinearGrowth} from "../../../../../../src/lib/op/math/growth/LibOpLinearGrowth.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpLinearGrowthTest is OpTest { /// Directly test the integrity logic of LibOpLinearGrowth. diff --git a/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol index 819c039d2..822acc341 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Add} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Add.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpUint256AddTest is OpTest { /// Directly test the integrity logic of LibOpUint256Add. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol index 078395452..3bd47cfb0 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Div} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Div.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpUint256DivTest is OpTest { /// Directly test the integrity logic of LibOpUint256Div. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol b/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol index a802dbf11..bdd32ebbd 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpUint256MaxValue} from "../../../../../../src/lib/op/math/uint256/LibOpUint256MaxValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol index 85d991a8b..bc52d7ae5 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Mul} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Mul.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpUint256MulTest is OpTest { /// Directly test the integrity logic of LibOpUint256Mul. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol index d94389eac..50405e30d 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {stdError} from "forge-std/Test.sol"; +import {stdError} from "forge-std-1.16.1/src/Test.sol"; import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpUint256Power} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Power.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../../src/lib/state/LibInterpreterState.sol"; -import {StackItem, OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpUint256PowerTest is OpTest { diff --git a/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol index 6d5168bcb..3adfdc119 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Sub} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Sub.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibOpUint256SubTest is OpTest { /// Directly test the integrity logic of LibOpUint256Sub. This tests the happy diff --git a/test/src/lib/op/store/LibOpGet.t.sol b/test/src/lib/op/store/LibOpGet.t.sol index 7b5c0a508..3b0b1407e 100644 --- a/test/src/lib/op/store/LibOpGet.t.sol +++ b/test/src/lib/op/store/LibOpGet.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain.lib.memkv/lib/LibMemoryKV.sol"; -import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibBytes32Array} from "rain.solmem/lib/LibBytes32Array.sol"; +import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpGet} from "../../../../../src/lib/op/store/LibOpGet.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpGetTest is OpTest { diff --git a/test/src/lib/op/store/LibOpSet.t.sol b/test/src/lib/op/store/LibOpSet.t.sol index e0e580a50..72d0ed50c 100644 --- a/test/src/lib/op/store/LibOpSet.t.sol +++ b/test/src/lib/op/store/LibOpSet.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpSet} from "../../../../../src/lib/op/store/LibOpSet.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpSetTest is OpTest { diff --git a/test/src/lib/parse/LibParse.comments.t.sol b/test/src/lib/parse/LibParse.comments.t.sol index 9db679c55..28cdd0bc0 100644 --- a/test/src/lib/parse/LibParse.comments.t.sol +++ b/test/src/lib/parse/LibParse.comments.t.sol @@ -6,7 +6,7 @@ import {OperandTest} from "test/abstract/OperandTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {UnclosedComment, UnexpectedComment, UnexpectedLHSChar} from "../../../../src/error/ErrParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.empty.gas.t.sol b/test/src/lib/parse/LibParse.empty.gas.t.sol index 045e02587..9a244fa1a 100644 --- a/test/src/lib/parse/LibParse.empty.gas.t.sol +++ b/test/src/lib/parse/LibParse.empty.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; diff --git a/test/src/lib/parse/LibParse.empty.t.sol b/test/src/lib/parse/LibParse.empty.t.sol index 996ab01ca..d3ee485e2 100644 --- a/test/src/lib/parse/LibParse.empty.t.sol +++ b/test/src/lib/parse/LibParse.empty.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OperandTest} from "test/abstract/OperandTest.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {MaxSources} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParse.ignoredLHS.t.sol b/test/src/lib/parse/LibParse.ignoredLHS.t.sol index c05270175..1612befa9 100644 --- a/test/src/lib/parse/LibParse.ignoredLHS.t.sol +++ b/test/src/lib/parse/LibParse.ignoredLHS.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseIgnoredLHSTest diff --git a/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol b/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol index b3c95ad19..b7a6afd23 100644 --- a/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol +++ b/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; diff --git a/test/src/lib/parse/LibParse.inputsOnly.t.sol b/test/src/lib/parse/LibParse.inputsOnly.t.sol index 916462d44..5b291d115 100644 --- a/test/src/lib/parse/LibParse.inputsOnly.t.sol +++ b/test/src/lib/parse/LibParse.inputsOnly.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.lhsOverflow.t.sol b/test/src/lib/parse/LibParse.lhsOverflow.t.sol index fed060a7f..dea388c21 100644 --- a/test/src/lib/parse/LibParse.lhsOverflow.t.sol +++ b/test/src/lib/parse/LibParse.lhsOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; import {LHSItemCountOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol b/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol index 0f064e68a..2158b23cc 100644 --- a/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol +++ b/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol @@ -6,10 +6,10 @@ import {ParseTest} from "test/abstract/ParseTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse, UnexpectedRHSChar, UnexpectedRightParen} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {ParseDecimalOverflow} from "rain.string/error/ErrParse.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {ParseDecimalOverflow} from "rain-string-0.2.0/src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; /// @title LibParseLiteralIntegerDecimalTest diff --git a/test/src/lib/parse/LibParse.literalIntegerHex.t.sol b/test/src/lib/parse/LibParse.literalIntegerHex.t.sol index 0bf4ca94f..94e462339 100644 --- a/test/src/lib/parse/LibParse.literalIntegerHex.t.sol +++ b/test/src/lib/parse/LibParse.literalIntegerHex.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseLiteralIntegerHexTest diff --git a/test/src/lib/parse/LibParse.literalString.t.sol b/test/src/lib/parse/LibParse.literalString.t.sol index 70d1315a8..7592c52ac 100644 --- a/test/src/lib/parse/LibParse.literalString.t.sol +++ b/test/src/lib/parse/LibParse.literalString.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {IntOrAString, LibIntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {StringTooLong, UnclosedStringLiteral} from "../../../../src/error/ErrParse.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParse.nOutput.t.sol b/test/src/lib/parse/LibParse.nOutput.t.sol index 5ae2aa406..116441515 100644 --- a/test/src/lib/parse/LibParse.nOutput.t.sol +++ b/test/src/lib/parse/LibParse.nOutput.t.sol @@ -6,7 +6,7 @@ import {ParseTest} from "test/abstract/ParseTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {ExcessLHSItems, ExcessRHSItems} from "../../../../src/error/ErrParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParse.namedLHS.t.sol b/test/src/lib/parse/LibParse.namedLHS.t.sol index a272a0e6c..00578f169 100644 --- a/test/src/lib/parse/LibParse.namedLHS.t.sol +++ b/test/src/lib/parse/LibParse.namedLHS.t.sol @@ -4,17 +4,17 @@ pragma solidity =0.8.25; import {ParseTest} from "test/abstract/ParseTest.sol"; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {LibParse, DuplicateLHSItem, WordSize} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {OperandV2, LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibParseNamedLHSTest /// @notice Tests for parsing named LHS items. diff --git a/test/src/lib/parse/LibParse.parseWord.t.sol b/test/src/lib/parse/LibParse.parseWord.t.sol index 97c6b683b..456975a91 100644 --- a/test/src/lib/parse/LibParse.parseWord.t.sol +++ b/test/src/lib/parse/LibParse.parseWord.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {Pointer, LibBytes} from "rain.solmem/lib/LibBytes.sol"; +import {Pointer, LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseSlow} from "./LibParseSlow.sol"; -import {CMASK_NUMERIC_0_9} from "rain.string/lib/parse/LibParseCMask.sol"; +import {CMASK_NUMERIC_0_9} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {WordSize} from "../../../../src/error/ErrParse.sol"; /// @title LibParseParseWordTest diff --git a/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol b/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol index 4c557a2a0..b083c0604 100644 --- a/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol b/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol index e8ddfaa42..15fd48b17 100644 --- a/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol b/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol index 228938681..ecd206282 100644 --- a/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {AuthoringMetaV2} from "rain.interpreter.interface/interface/IParserV2.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {OperandV2, LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibConvert} from "rain.lib.typecast/LibConvert.sol"; +import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain.interpreter.interface/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; /// @title LibParseSingleRHSNamedGasTest /// @notice Parse a single RHS name for many different sized RHS names just to include diff --git a/test/src/lib/parse/LibParse.sourceInputs.t.sol b/test/src/lib/parse/LibParse.sourceInputs.t.sol index e9214fa32..d7c0b70fb 100644 --- a/test/src/lib/parse/LibParse.sourceInputs.t.sol +++ b/test/src/lib/parse/LibParse.sourceInputs.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.unexpectedLHS.t.sol b/test/src/lib/parse/LibParse.unexpectedLHS.t.sol index c83a8b1ef..81407658e 100644 --- a/test/src/lib/parse/LibParse.unexpectedLHS.t.sol +++ b/test/src/lib/parse/LibParse.unexpectedLHS.t.sol @@ -9,7 +9,7 @@ import { CMASK_LHS_RHS_DELIMITER, CMASK_LHS_STACK_DELIMITER, CMASK_LHS_STACK_HEAD -} from "rain.string/lib/parse/LibParseCMask.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParse, UnexpectedLHSChar} from "../../../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParse.unexpectedRHS.t.sol b/test/src/lib/parse/LibParse.unexpectedRHS.t.sol index b9dbc49ea..2fac66f1c 100644 --- a/test/src/lib/parse/LibParse.unexpectedRHS.t.sol +++ b/test/src/lib/parse/LibParse.unexpectedRHS.t.sol @@ -14,7 +14,7 @@ import { CMASK_EOL, CMASK_EOS, CMASK_COMMENT_HEAD -} from "rain.string/lib/parse/LibParseCMask.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseUnexpectedRHSTest diff --git a/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol b/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol index cf1c140f3..ad13d9fdb 100644 --- a/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol +++ b/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.wordsRHS.t.sol b/test/src/lib/parse/LibParse.wordsRHS.t.sol index 64bae5269..26597f280 100644 --- a/test/src/lib/parse/LibParse.wordsRHS.t.sol +++ b/test/src/lib/parse/LibParse.wordsRHS.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseError.t.sol b/test/src/lib/parse/LibParseError.t.sol index 555fd6234..be955702a 100644 --- a/test/src/lib/parse/LibParseError.t.sol +++ b/test/src/lib/parse/LibParseError.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError, MAGIC_NUMBER_RAIN_PARSE_ERROR_V1} from "../../../../src/lib/parse/LibParseError.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseInterstitial.t.sol b/test/src/lib/parse/LibParseInterstitial.t.sol index 15d0cb679..a5d334ad0 100644 --- a/test/src/lib/parse/LibParseInterstitial.t.sol +++ b/test/src/lib/parse/LibParseInterstitial.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseInterstitial} from "../../../../src/lib/parse/LibParseInterstitial.sol"; import {FSM_YANG_MASK} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperand.t.sol b/test/src/lib/parse/LibParseOperand.handleOperand.t.sol index 00b1be327..099693516 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperand.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperand.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol b/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol index f654d7275..940e48172 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ExpectedOperand, UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol index e31f201c6..a19218fa3 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperand} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol index 709f2b4ae..d1e0a3b0b 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperand} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol index 45fbc14a6..e0971c3aa 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ExpectedOperand, UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol index cfce97262..1320d696f 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol index 7b05c85fe..cb04e9b65 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol index d83364be2..55d2f8430 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue, ExpectedOperand} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.parseOperand.t.sol b/test/src/lib/parse/LibParseOperand.parseOperand.t.sol index 9dcb3dd4c..95b13ea69 100644 --- a/test/src/lib/parse/LibParseOperand.parseOperand.t.sol +++ b/test/src/lib/parse/LibParseOperand.parseOperand.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {OperandValuesOverflow, UnclosedOperand} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibParseOperandParseOperandTest is Test { using LibBytes for bytes; diff --git a/test/src/lib/parse/LibParsePragma.keyword.t.sol b/test/src/lib/parse/LibParsePragma.keyword.t.sol index ac8cc30cf..69983f28a 100644 --- a/test/src/lib/parse/LibParsePragma.keyword.t.sol +++ b/test/src/lib/parse/LibParsePragma.keyword.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; import { @@ -10,17 +10,17 @@ import { PRAGMA_KEYWORD_BYTES_LENGTH, PRAGMA_KEYWORD_BYTES } from "../../../../src/lib/parse/LibParsePragma.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import { CMASK_WHITESPACE, CMASK_LITERAL_HEX_DISPATCH_START, CMASK_INTERSTITIAL_HEAD, CMASK_HEX -} from "rain.string/lib/parse/LibParseCMask.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; +} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; /// @title LibParsePragmaKeywordTest diff --git a/test/src/lib/parse/LibParseStackName.t.sol b/test/src/lib/parse/LibParseStackName.t.sol index 528c1d1c6..488a93d9e 100644 --- a/test/src/lib/parse/LibParseStackName.t.sol +++ b/test/src/lib/parse/LibParseStackName.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {ParseState, LibParseStackName} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParseStackTracker.t.sol b/test/src/lib/parse/LibParseStackTracker.t.sol index 2edbd8366..53d3f75ce 100644 --- a/test/src/lib/parse/LibParseStackTracker.t.sol +++ b/test/src/lib/parse/LibParseStackTracker.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseStackTracker, ParseStackTracker} from "../../../../src/lib/parse/LibParseStackTracker.sol"; import {ParseStackOverflow, ParseStackUnderflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.buildBytecode.t.sol b/test/src/lib/parse/LibParseState.buildBytecode.t.sol index cf5daf9ce..397050d9a 100644 --- a/test/src/lib/parse/LibParseState.buildBytecode.t.sol +++ b/test/src/lib/parse/LibParseState.buildBytecode.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState, EMPTY_ACTIVE_SOURCE} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytecode} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibParseStateBuildBytecodeTest is Test { using LibParseState for ParseState; diff --git a/test/src/lib/parse/LibParseState.buildConstants.t.sol b/test/src/lib/parse/LibParseState.buildConstants.t.sol index bf3864c27..2acfa3f72 100644 --- a/test/src/lib/parse/LibParseState.buildConstants.t.sol +++ b/test/src/lib/parse/LibParseState.buildConstants.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseStateBuildConstantsTest diff --git a/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol b/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol index f51b526f0..0f8e76c3e 100644 --- a/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {ParseMemoryOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.constantValueBloom.t.sol b/test/src/lib/parse/LibParseState.constantValueBloom.t.sol index 0f5feb167..55b686559 100644 --- a/test/src/lib/parse/LibParseState.constantValueBloom.t.sol +++ b/test/src/lib/parse/LibParseState.constantValueBloom.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibCtPop} from "rain.math.binary/lib/LibCtPop.sol"; +import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; /// @title LibParseStateConstantValueBloomTest /// @notice Tests for the constant value bloom filter in LibParseState. diff --git a/test/src/lib/parse/LibParseState.danglingSource.t.sol b/test/src/lib/parse/LibParseState.danglingSource.t.sol index b66848623..828817198 100644 --- a/test/src/lib/parse/LibParseState.danglingSource.t.sol +++ b/test/src/lib/parse/LibParseState.danglingSource.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {DanglingSource} from "../../../../src/error/ErrParse.sol"; contract LibParseStateDanglingSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol b/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol index d003be4df..3e43e5b55 100644 --- a/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol +++ b/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParseState.endSource.t.sol b/test/src/lib/parse/LibParseState.endSource.t.sol index 8f15400dd..44418280b 100644 --- a/test/src/lib/parse/LibParseState.endSource.t.sol +++ b/test/src/lib/parse/LibParseState.endSource.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { LibParseState, ParseState, EMPTY_ACTIVE_SOURCE, FSM_ACTIVE_SOURCE_MASK } from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {MaxSources} from "../../../../src/error/ErrParse.sol"; contract LibParseStateEndSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.exportSubParsers.t.sol b/test/src/lib/parse/LibParseState.exportSubParsers.t.sol index 63cc42b20..ef037896f 100644 --- a/test/src/lib/parse/LibParseState.exportSubParsers.t.sol +++ b/test/src/lib/parse/LibParseState.exportSubParsers.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; /// @title LibParseStateExportSubParsersTest /// @notice Tests for exporting sub parsers from LibParseState. diff --git a/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol b/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol index 7b5d2db79..0136caa48 100644 --- a/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {ParseStackOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol b/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol index c82e261ca..4a8d3f831 100644 --- a/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol +++ b/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {EMPTY_ACTIVE_SOURCE, LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; contract LibParseStateNewActiveSourcePointerTest is Test { diff --git a/test/src/lib/parse/LibParseState.offsets.t.sol b/test/src/lib/parse/LibParseState.offsets.t.sol index 3b217e927..f8b3a6a2e 100644 --- a/test/src/lib/parse/LibParseState.offsets.t.sol +++ b/test/src/lib/parse/LibParseState.offsets.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { ParseState, PARSE_STATE_TOP_LEVEL0_OFFSET, diff --git a/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol b/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol index f86137a0a..e567336be 100644 --- a/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {ParenInputOverflow} from "../../../../src/error/ErrParse.sol"; contract LibParseStateParenInputOverflowTest is Test { diff --git a/test/src/lib/parse/LibParseState.pushConstantValue.t.sol b/test/src/lib/parse/LibParseState.pushConstantValue.t.sol index 4db5a8f42..3e84b49ab 100644 --- a/test/src/lib/parse/LibParseState.pushConstantValue.t.sol +++ b/test/src/lib/parse/LibParseState.pushConstantValue.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseStatePushConstantValueTest diff --git a/test/src/lib/parse/LibParseState.pushLiteral.t.sol b/test/src/lib/parse/LibParseState.pushLiteral.t.sol index 34e148f91..92f643ce6 100644 --- a/test/src/lib/parse/LibParseState.pushLiteral.t.sol +++ b/test/src/lib/parse/LibParseState.pushLiteral.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {UnsupportedLiteralType} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol b/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol index 1fd6bba78..d3785e73c 100644 --- a/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol +++ b/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibParseStatePushOpToSourceLHSCorruptionTest /// @notice Tests the boundary between the per-word ops counters in diff --git a/test/src/lib/parse/LibParseState.pushOpToSource.t.sol b/test/src/lib/parse/LibParseState.pushOpToSource.t.sol index c40b3c645..d8846310d 100644 --- a/test/src/lib/parse/LibParseState.pushOpToSource.t.sol +++ b/test/src/lib/parse/LibParseState.pushOpToSource.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import { LibParseState, ParseState, @@ -10,7 +10,7 @@ import { FSM_ACTIVE_SOURCE_MASK, FSM_ACCEPTING_INPUTS_MASK } from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {SourceItemOpsOverflow} from "../../../../src/error/ErrParse.sol"; contract LibParseStatePushOpToSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol index f9e37a0da..65e7916f8 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; /// @title LibParseStatePushSubParserLargeMemoryTest /// @notice Regression test for the 16-bit pointer truncation bug in diff --git a/test/src/lib/parse/LibParseState.pushSubParser.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.t.sol index 6e61309b1..52268fd4b 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {InvalidSubParser} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibSubParse.badSubParserResult.t.sol b/test/src/lib/parse/LibSubParse.badSubParserResult.t.sol index 2fc3697de..9d9ff6307 100644 --- a/test/src/lib/parse/LibSubParse.badSubParserResult.t.sol +++ b/test/src/lib/parse/LibSubParse.badSubParserResult.t.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {BadSubParserResult} from "../../../../src/error/ErrParse.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; /// A bad sub parser that claims to know every word but returns bytecode of /// the wrong length. diff --git a/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol b/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol index 0d73709ed..d1fed625a 100644 --- a/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol +++ b/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol @@ -2,15 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; -import {OPCODE_CONSTANT} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {LibBytecode, Pointer} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; +import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; /// @dev A sub parser that resolves any word by returning a constant opcode /// with a known constant value. Each call returns exactly one constant. diff --git a/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol b/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol index f9435b609..21870065e 100644 --- a/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol +++ b/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; /// @title LibSubParseConsumeSubParseLiteralInputDataTest diff --git a/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol b/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol index 817b1681b..ff73f4919 100644 --- a/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol +++ b/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol b/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol index 21a71dba9..05cd614cc 100644 --- a/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol +++ b/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {LibBytes} from "rain.solmem/lib/LibBytes.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {UnsupportedLiteralType} from "../../../../src/error/ErrParse.sol"; import {SubParseLiteralDispatchLengthOverflow} from "../../../../src/error/ErrSubParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParseWords.t.sol b/test/src/lib/parse/LibSubParse.subParseWords.t.sol index dc317c605..af08eefb5 100644 --- a/test/src/lib/parse/LibSubParse.subParseWords.t.sol +++ b/test/src/lib/parse/LibSubParse.subParseWords.t.sol @@ -2,16 +2,20 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {LibBytecode, Pointer} from "rain.interpreter.interface/lib/bytecode/LibBytecode.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; -import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; -import {OPCODE_UNKNOWN, OPCODE_CONSTANT, OPCODE_CONTEXT} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; +import { + OPCODE_UNKNOWN, + OPCODE_CONSTANT, + OPCODE_CONTEXT +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {UnknownWord} from "../../../../src/error/ErrParse.sol"; /// @dev A sub parser that resolves any word by returning a context opcode with diff --git a/test/src/lib/parse/LibSubParse.subParserConstant.t.sol b/test/src/lib/parse/LibSubParse.subParserConstant.t.sol index 5553b3473..be6fab1f4 100644 --- a/test/src/lib/parse/LibSubParse.subParserConstant.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserConstant.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONSTANT} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ConstantOpcodeConstantsHeightOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParserContext.t.sol b/test/src/lib/parse/LibSubParse.subParserContext.t.sol index 569f552dc..ffa8c2fa6 100644 --- a/test/src/lib/parse/LibSubParse.subParserContext.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserContext.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OPCODE_CONTEXT} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OPCODE_CONTEXT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ContextGridOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParserExtern.t.sol b/test/src/lib/parse/LibSubParse.subParserExtern.t.sol index 8ec15fa93..a051fd670 100644 --- a/test/src/lib/parse/LibSubParse.subParserExtern.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserExtern.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {OperandV2, OPCODE_EXTERN} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {OperandV2, OPCODE_EXTERN} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2 -} from "rain.interpreter.interface/interface/IInterpreterExternV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {LibExtern} from "../../../../src/lib/extern/LibExtern.sol"; import {ExternDispatchConstantsHeightOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.unknownWord.t.sol b/test/src/lib/parse/LibSubParse.unknownWord.t.sol index 5af1af309..2e26178a3 100644 --- a/test/src/lib/parse/LibSubParse.unknownWord.t.sol +++ b/test/src/lib/parse/LibSubParse.unknownWord.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {UnknownWord} from "../../../../src/error/ErrParse.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; contract LibSubParseUnknownWordTest is Test { diff --git a/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol b/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol index a4af3e88b..edbd6c4e8 100644 --- a/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral, UnsupportedLiteralType} from "../../../../../src/lib/parse/literal/LibParseLiteral.sol"; import {UppercaseHexPrefix} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; import {LibAllStandardOps} from "../../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; -import {LibIntOrAString, IntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; /// @title LibParseLiteralDispatchTest /// @notice Tests for tryParseLiteral dispatch and parseLiteral revert path. diff --git a/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol b/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol index 8cf8f52cd..8608216ec 100644 --- a/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral} from "../../../../../src/lib/parse/literal/LibParseLiteral.sol"; import {LibAllStandardOps} from "../../../../../src/lib/op/LibAllStandardOps.sol"; -import {IntOrAString, LibIntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibParseLiteralSelectByIndexTest /// @notice Directly tests selectLiteralParserByIndex by calling the returned diff --git a/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol b/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol index a995757d6..9b0eccad7 100644 --- a/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol @@ -2,19 +2,19 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseLiteralDecimal} from "../../../../../src/lib/parse/literal/LibParseLiteralDecimal.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; -import {ParseEmptyDecimalString} from "rain.string/error/ErrParse.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; +import {ParseEmptyDecimalString} from "rain-string-0.2.0/src/error/ErrParse.sol"; import { ParseDecimalPrecisionLoss, MalformedExponentDigits, MalformedDecimalPoint -} from "rain.math.float/error/ErrParse.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; +} from "rain-math-float-0.1.1/src/error/ErrParse.sol"; +import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; /// @title LibParseLiteralDecimalParseDecimalFloatTest diff --git a/test/src/lib/parse/literal/LibParseLiteralHex.boundHex.t.sol b/test/src/lib/parse/literal/LibParseLiteralHex.boundHex.t.sol index ff1aad678..8885b3acc 100644 --- a/test/src/lib/parse/literal/LibParseLiteralHex.boundHex.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralHex.boundHex.t.sol @@ -3,8 +3,8 @@ pragma solidity =0.8.25; import {ParseLiteralTest} from "test/abstract/ParseLiteralTest.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; -import {CMASK_HEX} from "rain.string/lib/parse/LibParseCMask.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; +import {CMASK_HEX} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseLiteralHex} from "../../../../../src/lib/parse/literal/LibParseLiteralHex.sol"; /// @title LibParseLiteralBoundLiteralHexTest diff --git a/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol b/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol index a54a326ec..2450dbb33 100644 --- a/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; -import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteralHex} from "../../../../../src/lib/parse/literal/LibParseLiteralHex.sol"; import {HexLiteralOverflow, ZeroLengthHexLiteral, OddLengthHexLiteral} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol b/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol index fdf4a6f57..432ef48d2 100644 --- a/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseLiteralString} from "../../../../../src/lib/parse/literal/LibParseLiteralString.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {StringTooLong, UnclosedStringLiteral} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol b/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol index d0409963b..1c60eb1a5 100644 --- a/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibParseLiteralString} from "../../../../../src/lib/parse/literal/LibParseLiteralString.sol"; -import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; -import {IntOrAString, LibIntOrAString} from "rain.intorastring/lib/LibIntOrAString.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; -import {CMASK_STRING_LITERAL_TAIL} from "rain.string/lib/parse/LibParseCMask.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; +import {CMASK_STRING_LITERAL_TAIL} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {UnclosedStringLiteral} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol b/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol index fb768fe9b..2b4314245 100644 --- a/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test, console2} from "forge-std/Test.sol"; +import {Test, console2} from "forge-std-1.16.1/src/Test.sol"; import {ParseState, Pointer, LibParseState} from "../../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes} from "rain.solmem/lib/LibBytes.sol"; +import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; import {LibParseLiteralSubParseable} from "../../../../../src/lib/parse/literal/LibParseLiteralSubParseable.sol"; import { UnclosedSubParseableLiteral, @@ -12,10 +12,10 @@ import { UnsupportedLiteralType } from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; -import {ISubParserV4} from "rain.interpreter.interface/interface/ISubParserV4.sol"; -import {LibConformString} from "rain.string/lib/mut/LibConformString.sol"; -import {CMASK_WHITESPACE, CMASK_SUB_PARSEABLE_LITERAL_END} from "rain.string/lib/parse/LibParseCMask.sol"; -import {LibParseChar} from "rain.string/lib/parse/LibParseChar.sol"; +import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; +import {CMASK_WHITESPACE, CMASK_SUB_PARSEABLE_LITERAL_END} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; +import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; contract LibParseLiteralSubParseableTest is Test { using LibBytes for bytes; diff --git a/test/src/lib/state/LibInterpreterState.fingerprint.t.sol b/test/src/lib/state/LibInterpreterState.fingerprint.t.sol index 16739d1f8..03c226db9 100644 --- a/test/src/lib/state/LibInterpreterState.fingerprint.t.sol +++ b/test/src/lib/state/LibInterpreterState.fingerprint.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "test/lib/state/LibInterpreterStateFingerprint.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { FullyQualifiedNamespace, IInterpreterStoreV3 -} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; contract LibInterpreterStateFingerprintTest is Test { /// Two identically constructed states must produce the same fingerprint. diff --git a/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol b/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol index 19f0c81f3..6339f77a4 100644 --- a/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol +++ b/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibInterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {StackItem} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; /// @title LibInterpreterStateStackBottomsTest /// @notice Tests for stackBottoms(), which converts pre-allocated stack arrays diff --git a/test/src/lib/state/LibInterpreterState.stackTrace.t.sol b/test/src/lib/state/LibInterpreterState.stackTrace.t.sol index acaf3dd85..88233cf19 100644 --- a/test/src/lib/state/LibInterpreterState.stackTrace.t.sol +++ b/test/src/lib/state/LibInterpreterState.stackTrace.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; import {LibInterpreterState, STACK_TRACER} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; contract LibInterpreterStateStackTraceTest is Test { using LibUint256Array for uint256[]; diff --git a/test/src/lib/state/LibInterpreterStateDataContract.t.sol b/test/src/lib/state/LibInterpreterStateDataContract.t.sol index cb602b4a0..a335ec631 100644 --- a/test/src/lib/state/LibInterpreterStateDataContract.t.sol +++ b/test/src/lib/state/LibInterpreterStateDataContract.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std/Test.sol"; +import {Test} from "forge-std-1.16.1/src/Test.sol"; import {LibInterpreterStateDataContract} from "../../../../src/lib/state/LibInterpreterStateDataContract.sol"; import {InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -import {FullyQualifiedNamespace} from "rain.interpreter.interface/interface/IInterpreterV4.sol"; -import {IInterpreterStoreV3} from "rain.interpreter.interface/interface/IInterpreterStoreV3.sol"; -import {MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; /// @dev Wraps unsafeDeserialize as an external call to avoid /// stack-too-deep from inlining the 9-field struct return. diff --git a/test/utils/TestERC20.sol b/test/utils/TestERC20.sol index c28e2d498..64b2e73e2 100644 --- a/test/utils/TestERC20.sol +++ b/test/utils/TestERC20.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; +import {ERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/ERC20.sol"; // an erc20 contract for testing purposes in `test_fixtures` crate to deploy erc20 tokens on the local evm contract TestERC20 is ERC20 {